Závorky a NOT
Když podmínka obsahuje AND i OR, záleží na tom, co z nich má přednost. Řekněme, že chcete sportovní nebo závodní hry levnější než 500 Kč, a napíšete:
SELECT nazev, zanr, cena
FROM hry
WHERE zanr = 'Sportovní' OR zanr = 'Závodní' AND cena < 500
ORDER BY nazev;| nazev | zanr | cena |
|---|---|---|
| Goal Rush | Sportovní | 1299 |
| Ice Hockey Pro | Sportovní | 1199 |
| Pixel Racer | Závodní | 399 |
Goal Rush stojí 1 299 Kč, tak proč tu je? AND má přednost před OR, stejně jako v matematice násobení před sčítáním. SQLite nejdřív spojí zanr = 'Závodní' AND cena < 500 a teprve potom přidá OR zanr = 'Sportovní'. Dotaz tedy našel závodní hry levnější než 500 Kč a všechny sportovní hry bez ohledu na cenu.
Aby přednost dostalo OR, dejte ho do závorek, jako v matematice:
SELECT nazev, zanr, cena
FROM hry
WHERE (zanr = 'Sportovní' OR zanr = 'Závodní') AND cena < 500
ORDER BY nazev;| nazev | zanr | cena |
|---|---|---|
| Pixel Racer | Závodní | 399 |
Teď musí být každá hra sportovní nebo závodní a zároveň stát méně než 500 Kč. Kdykoli podmínka míchá AND a OR, použijte závorky: nebudete si muset pamatovat, co má přednost, a kdo bude dotaz číst, hned uvidí, co jste mysleli.
NOT (ne) před podmínkou ji obrátí: platí tam, kde podmínka neplatí, a naopak. NOT cena < 500 je totéž co cena >= 500. Nejvíc se hodí před závorkami, kde obrátí celou podmínku v nich. Hry, které nejsou sportovní ani závodní:
SELECT nazev, zanr
FROM hry
WHERE NOT (zanr = 'Sportovní' OR zanr = 'Závodní')
ORDER BY nazev;| nazev | zanr |
|---|---|
| Bakery Story | Simulace |
| Castle Siege | Strategie |
| Cube Logic | Logická |
| … | … |
Bez závorek by NOT obrátilo jen první podmínku: NOT zanr = 'Sportovní' OR zanr = 'Závodní' najde všechny hry, které nejsou sportovní, včetně závodních.
Jak psát:
Pokyny
Dotaz v editoru má ukázat zaplacené objednávky zákazníků s ID 6 a 8, ale ukazuje i jednu vrácenou. Přidejte závorky, aby ukázal jen zaplacené objednávky těchto dvou zákazníků:
| id | zakaznik_id | stav |
|---|---|---|
| 10 | 8 | zaplaceno |
| 12 | 6 | zaplaceno |
| 25 | 6 | zaplaceno |
Pod něj přidejte dotaz pro stránku pro starší hráče: všechny hry kromě levných her pro nejmenší. Levné hry pro nejmenší jsou ty, které jsou vhodné od tří let a stojí méně než 400 Kč. Tuto podmínku napište do závorek a obraťte ji pomocí NOT. Ukažte název, věkovou hranici a cenu, seřazené podle ceny a pak podle názvu. Výsledek začíná takto:
| nazev | vek_od | cena |
|---|---|---|
| Word Quest | 7 | 249 |
| Ocean Deep | 7 | 399 |
| Lost Temple | 12 | 499 |
| Moon Farm | 3 | 499 |
| … | … | … |
Začněte programovat zdarma
6/12