Zajmijmy się teraz filtrowaniem. Dotychczas wyciągaliśmy z bazy wszystkie rekordy z interesujących nas tabel, czasem zmieniając ich kolejność.
Przypomnij sobie znów o tabeli „games” z poprzedniego wpisu bowiem na tej samej tabeli będziemy operować również tym razem.
Filtrowanie uzyskujemy opierając się o poniższy wzór:
SELECT * FROM {tabela} WHERE {kolumna} {operator} {wzorzec}
Przejdźmy teraz do realnego przykładu, zechcę wyjąć z bazy tylko te gry, które są na platformę „psx„.
SELECT * FROM `games` WHERE `platform` = 'psx';
Wynik zapytania przedstawiam poniżej:
id | title | price | platform | created |
4 | THPS2 | 18 | psx | 2020-10-10 13:37:08.0 |
Jak widać powyżej, baza danych zwróciła tylko rekord który pasuje do naszego żądania.
Teraz zmieńmy operator z przyrównania, na negację.
SELECT * FROM `games` WHERE `platform` != 'psx';
Efekt będzie odwrotnością tego co powyżej, więc zwrócone zostaną wszystkie rekordy/gry których platforma jest inna niż „psx„, operator negacji może zostać zapisany również tak:
SELECT * FROM `games` WHERE `platform` <> 'psx';
id | title | price | platform | created |
1 | GTA4 | 10.00 | pc | 2020-10-08 07:13:56.0 |
2 | CSGO | 99.50 | pc | 2020-10-09 13:13:58.0 |
3 | Super Mario | 59.99 | pc | 2020-10-10 12:13:59.0 |
Operatorów mamy oczywiście więcej, listę przedstawię później, puki co dajmy jeszcze jeden przykład. Tym razem chcemy pobrać wszystkie gry, których cena jest wyższa niż 50zł
SELECT * FROM `games`WHERE price > 50;
id | title | price | platform | created |
2 | CSGO | 99.50 | pc | 2020-10-09 13:13:58.0 |
3 | Super Mario | 59.99 | pc | 2020-10-10 12:13:59.0 |
Możemy również połączyć warunki, przykładowo wyjąć z bazy gry które są droższe niż 50zł i jednocześnie będą zgodne z platformą „psx„.
SELECT * FROM games WHERE price > 50 AND platform = 'psx';
Takich rekordów u nas w bazie nie ma, najwidoczniej jest zupełnie odwrotnie niż w życiu i najdroższe gry są na platformę „pc„.
Gdy zmienimy operator „AND” na „OR” otrzymamy wynik następujący:
SELECT * FROM games WHERE price > 50 OR platform = 'psx';
id | title | price | platform | created |
2 | CSGO | 99.50 | pc | 2020-10-09 13:13:58.0 |
3 | Super Mario | 59.99 | pc | 2020-10-10 12:13:59.0 |
4 | THPS2 | 18.00 | psx | 2020-10-10 13:37:08.0 |
Otrzymaliśmy wszystkie gry których cena jest większa niż 50zł lub są przypisane do platformy „psx„.
Operatory porównania
Powyżej przedstawiłem operator negacji, równości oraz większości. Jest ich troszkę więcej, a poniżej przedstawiam pełną listę:
Operator równości: „=”
Zwraca prawdę jeśli obie wartości porównywane są takie same.
Przykład:
SELECT * FROM `games` WHERE `platform` = 'psx';
Operator negacji: „!=” lub „<>”
Zwraca prawdę jeśli porównywane wartości różnią się od siebie.
Przykład:
SELECT * FROM `games` WHERE `platform` != 'psx';
Operator większości: „>”
Zwraca prawdę jeśli pierwsza wartość z porównywanych jest wyższa niż druga.
Przykład:
SELECT * FROM `games` WHERE `price` > 50;
Operator mniejszości: „<„
Zwraca prawdę, jeśli pierwsza wartość z porównywanych jest mniejsza od drugiej.
Przykład:
SELECT * FROM `games` WHERE `price` < 50;
Operator większości lub równości: „>=”
Zwraca prawdę jeśli pierwsza wartość z porównywanych jest wyższa lub równa drugiej.
Przykład:
SELECT * FROM `games` WHERE `price` >= 50;
Operator mniejszości lub równości: „<=”
Zwraca prawdę jeśli pierwsza wartość z porównywanych jest niższa lub równa drugiej.
Operatory SQL
Operator IN
Zwraca prawdę w sytuacji gdy wartość pierwsza znajduje się w zbiorze podanym jako wartość druga.
Przykład:
SELECT * FROM `games` WHERE `price` IN (18, 59.99);
OPERATOR BEETWEN .. AND
Zwraca prawdę gdy wartość pierwsza znajduje się w przedziale podanym jako druga wartość.
Przykład:
SELECT * FROM games WHERE `price` BETWEEN 10 AND 100;
Ten sam efekt uzyskamy po wykonaniu poniższego zapytania:
SELECT * FROM games WHERE `price` >= 10 AND `price` <= 100
To nie są wszystkie operatory, bowiem mamy jeszcze „like„, „is null” itd. ale o tym będą kolejne wpisy.
Zachęcam również do eksperymentowania łącząc warunki z sobą.
Oczywiście filtrowanie „where” możemy łączyć z sortowaniem „order„, przykładowe zapytanie:
SELECT * FROM `games` WHERE `price` >= 50 ORDER BY `created` ASC;
Negacja
Jak sama nazwa wskazuje, możemy dokonać totalnej odwrotności w klauzurze „where„, jeśli dotychczas szukaliśmy gier z przedziału od 50zł do 100zł przy pomocy poniższego zapytania:
SELECT * FROM games WHERE `price` BETWEEN 50 AND 100;
Możemy tak na prawdę pobrać wszystkie gry które nie wpisują się w powyższy przedział, wystarczy dopisać „not„:
SELECT * FROM games WHERE `price` NOT BETWEEN 50 AND 100;