SQL: Predykaty | BETWEEN, DISTINCT, EXISTS, IN, NOT, LIKE, AND, OR

Baza danych do pobrania: sklep
BETWEEN
Służy do określenia zakresu wartości jakie zawiera dana kolumna w tabeli.
SELECT nazwy_kolumn FROM nazwa_tabeli WHERE nazwa_kolumny BETWEEN wartość1 AND wartość2;
Wyszukajmy produkty, których cena znajduje się w zakresie od 100 do 130.
SELECT nazwa, cena, ilosc FROM produkt WHERE cena BETWEEN 100 AND 130;
+-------------+--------+-------+ | nazwa | cena | ilosc | +-------------+--------+-------+ | Produkt 51 | 107.54 | 22 | | Produkt 90 | 124.03 | 97 | | Produkt 211 | 105.93 | 62 | | Produkt 267 | 115.86 | 28 | | Produkt 297 | 103.65 | 78 | | Produkt 300 | 126.31 | 80 | | Produkt 519 | 109.69 | 100 | | Produkt 628 | 102.13 | 92 | | Produkt 696 | 114.32 | 71 | | Produkt 712 | 105.09 | 100 | | Produkt 753 | 112.78 | 14 | | Produkt 771 | 129.01 | 15 | +-------------+--------+-------+
IN
Służy do określenia zbioru wartości jakie zawiera dana kolumna tabeli.
SELECT nazwy_kolumn FROM nazwa_tabeli WHERE nazwa_kolumny IN (wartość1, wartość2,...);
Wypiszmy nazwy, ceny oraz ilość produktów z kategorii 2 i 3, których ilość wynosi więcej niż 70.
SELECT nazwa, cena, ilosc FROM produkt WHERE kategoria_id IN (2,3) AND ilosc > 70;
+-------------+---------+-------+ | nazwa | cena | ilosc | +-------------+---------+-------+ | Produkt 155 | 704.21 | 95 | | Produkt 341 | 244.76 | 99 | | Produkt 763 | 1909.38 | 72 | | Produkt 977 | 856.83 | 71 | | Produkt 130 | 1153.72 | 85 | | Produkt 445 | 993.73 | 71 | | Produkt 866 | 1639.73 | 88 | | Produkt 956 | 1750.07 | 82 | +-------------+---------+-------+
DISTINCT
Służy do uzyskania niepowtarzających się elementów wyniku zapytania.
SELECT DISTINCT nazwy_kolumn FROM nazwa_tabeli;
Wypiszmy niepowtarzające się kraje spośród producentów.
SELECT DISTINCT kraj FROM producent;
+-----------------+ | kraj | +-----------------+ | USA | | Francja | | Chorwacja | | Tajwan | | Niemcy | | Chiny | | Wielka Brytania | | Polska | +-----------------+
EXISTS
Ograniczenie wyniku zapytania dodatkowym warunkiem.
SELECT nazwy_kolumn FROM nazwa_tabeli WHERE EXISTS (SELECT nazwy_kolumn FROM nazwa_tabeli WHERE warunki);
Wypiszmy nazwy producentów, którzy posiadają w swojej ofercie produkty tańsze niż 10.
SELECT nazwa FROM producent WHERE EXISTS (SELECT nazwa FROM produkt WHERE produkt.producent_id = producent.id AND cena < 10);
+--------------+ | nazwa | +--------------+ | producent 6 | | producent 8 | | producent 9 | | producent 12 | | producent 13 | | producent 14 | | producent 18 | +--------------+
NOT
Zaprzeczenie, zmiana warunku na odwrotny.
SELECT nazwy_kolumn FROM nazwa_tabeli WHERE NOT warunki;
Wypiszmy nazwy producentów z krajów innych niż Niemcy.
SELECT nazwa FROM producent WHERE NOT kraj="Niemcy";
+--------------+ | nazwa | +--------------+ | producent 1 | | producent 2 | | producent 3 | | producent 4 | | producent 7 | | producent 8 | | producent 9 | | producent 10 | | producent 11 | | producent 12 | | producent 13 | | producent 14 | | producent 15 | | producent 16 | | producent 17 | | producent 18 | | producent 19 | +--------------+
LIKE
Wyszukiwanie wzorca w szukanych elementach.
SELECT nazwy_kolumn FROM nazwa_tabeli WHERE nazwa_kolumny LIKE wzorzec;
Znajdźmy nazwiska pracowników, które rozpoczynają się literą W
SELECT nazwisko FROM pracownik WHERE nazwisko LIKE "W%";
+-----------+ | nazwisko | +-----------+ | Woźna | | Waśkowski | +-----------+
AND
Łączenie warunków zapytań, w których lewa i prawa strona muszą być spełnione.
SELECT nazwy_kolumn FROM nazwa_tabeli WHERE warunek1 AND warunek2 AND warunek3...;
Wyszukajmy nazwy produktów, gdzie cena jest mniejsza niż 30 i jednocześnie ich ilość przekracza 50.
SELECT nazwa FROM produkt WHERE cena < 30 AND ilosc > 50;
+-------------+ | nazwa | +-------------+ | Produkt 78 | | Produkt 246 | | Produkt 306 | | Produkt 536 | | Produkt 692 | | Produkt 975 | +-------------+
OR
Łączenie warunków zapytań, w których lewa lub prawa strona muszą być spełnione.
SELECT nazwy_kolumn FROM nazwa_tabeli WHERE warunek1 OR warunek2 OR warunek3...;
Wypiszmy nazwiska klientów kończące się na -ek lub -ak.
SELECT nazwisko FROM klient WHERE nazwisko LIKE "%ek" OR nazwisko LIKE "%ak";
+-----------+ | nazwisko | +-----------+ | Kosiak | | Pilarek | | Janiszek | | Kacprzak | | Dziubak | | Pyszczek | | Grzybek | | Marciniak | | Wziątek | +-----------+