Rozdział 7: Filtrowanie rekordów

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:

idtitlepriceplatformcreated
4THPS218psx2020-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';
idtitlepriceplatformcreated
1GTA410.00pc2020-10-08 07:13:56.0
2CSGO99.50pc2020-10-09 13:13:58.0
3Super Mario59.99pc2020-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;
idtitlepriceplatformcreated
2CSGO99.50pc2020-10-09 13:13:58.0
3Super Mario59.99pc2020-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';
idtitlepriceplatformcreated
2CSGO99.50pc2020-10-09 13:13:58.0
3Super Mario59.99pc2020-10-10 12:13:59.0
4THPS218.00psx2020-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;