WPROWADZENIE DO FILTROWANIA SQL

Na tej lekcji omówię kwestie związane z filtrowaniem danych. Pracować będziemy na znanej już i lubianej bazie World, którą możesz pobrać z tego linku https://dev.mysql.com/doc/index-other.html.

Do filtrowania danych służy klauzula WHERE. Jak już wiesz dane przechowywane w obiektach baz danych mogą przechowywać bardzo duże ilości danych. Zazwyczaj nie ma potrzeby wybierania ich wszystkich. często chcemy wybrać jedynie fragment danych który spełnia określone warunki. Te określone warunki nazywamy kryteriami wyszukiwania lub inaczej warunkami filtrującymi. Określeń tych można używać zamiennie.

Klauzula WHERE stosowana jest w instrukcji SELECT zaraz za klauzulą FROM, która określa źródło danych

SKŁADNIA KLAUZULI WHERE – FILTROWANIE SQL

SELECT column1, column2, column3...
FROM table_name
WHERE condition;

Condition to oczywiście wspomniane wcześniej warunki filtrowania

ZAPYTANIE

SELECT *
FROM city;

Powyższe zapytanie zwróci wszystkie wiersze z wszystkich atrybutów w tabeli city.

Wykonajmy to samo, lecz określając warunki filtrujące, na przykład wybierzmy tylko te rekordy gdzie Name jest równe “Kabul”.

SELECT * 
FROM `city` 
WHERE Name='Kabul';

WYNIK:

ANALIZA:

W wyniku wykonania kwerendy otrzymaliśmy jedynie te rekordy (a właściwie jeden jedyny rekord) dla których atrybut Name przyjął wartość ‘Kabul’. Powyższy przykład pokazuje dokładne dopasowanie wzorca to znaczy, że zostało sprawdzone czy atrybut zawiera dokładnie określony zapis, a następnie w zależności od otrzymanego wyniku rekord został zaakceptowany lub odrzucony.

Określona baza pracuje zazwyczaj z aplikacją kliencką. O ile możliwe jest filtrowanie danych na poziomie aplikacji to jest to rozwiązanie niezalecane z uwagi na obciążenie bazy danych spowodowane pobieraniem danych, które tak naprawdę nie są potrzebne. Takie podejście wpłynąć negatywnie na skalowanie bazy i jej wydajność. Ponadto niepotrzebnie obciąża łącza internetowe.

Obecne bazy są doskonale zoptymalizowane pod kątem filtrowania danych, dlatego wykorzystywanie do tego celu aplikacji klienckich nie jest najlepszym pomysłem.

Stosowanie klauzuli WHERE i ORDER BY SQL

W przypadku stosowania klauzuli WHERE i ORDER BY pamiętaj, że klauzula WHERE musi pojawić się wcześniej niż klauzula ORDER BY. Jeśli spróbujesz odwrotnej kolejności, otrzymasz komunikat o błędzie.

OPERATORY – KLAUZULA WHERE – FILTROWANIE SQL

Operatory klauzuli WHERE odpowiadają operatorom matematycznym

OPERATOR OPIS
= równy
!= lub <> różny
< mniejszy od
<= mniejszy lub równy
!< nie mniej niż
> większy od
>= większy lub równy
!> nie większy niż
IS NULL lub IS NOT NULL jest puste lub nie jest puste – dotyczy wartości NULL
BETWEEN wartość_1 AND wartość_2 między dwoma podanymi wartościami
Operatory klauzuli WHERE

Można zauważyć, że czasem niektóre z operatorów się równoważą tzn. operator <> oznacza to samo co !=. Dlaczego takie zapisy? Otóż różne systemy zarządzania bazami danych stosują różne zapisy. W razie wątpliwości należy zajrzeć do dokumentacji systemu.

Sprawdzanie pod kątem jednej i wielu wartości

Wcześniejsze zapytanie sprawdzało jedynie dokładne dopasowanie sprawdzające dokładnie taką wartość jaką zapisano w warunku. Dla odmiany wykonamy zapytanie zwracające miasta z poplulacją większą niż 100000.

SELECT * 
FROM `city` 
WHERE Population>100000;

W wyniku powinno pojawić się 3558 wierszy. Następnie spróbuj to samo zapytanie wykonać dla wartości => czyli równe lub większe. W odpowiedzi powinieneś uzyskać 3562 rekordy.

WYNIK:

Klauzula WHERE warunek >=

Klauzulę można stosować zarówno wobec znaków jak i liczb.

Pobranie niepasujących danych – WHERE SQL

Teraz dla odmiany spróbuj pobrać dane, które nie pasują do twojego wzorca tj. wybierz wszystkie dane które są różne od tego. Ponieważ przeciwieństwem jest znak mniejszości, składania powinna być nastepująca.

SELECT * FROM `city` 
WHERE Population<100000;

W wyniku powinieneś otrzymać 517 wierszy.

Filtrowanie danych z zachowaniem sprawdzania zakresu wartości – WHERE SQL

Sprawdzanie zakresu watrości jest realizowane za pomocą operatora BETWEEN. Ponieważ BETWEEN oznacza pomiędzy, należy podać zarówno dolną jak i górną wartość. Wartości winne być oddzielone słowem kluczowym AND, natomiast pod uwagę brane są wszystkie wartości łącznie z brzegowymi.

SELECT * FROM `city` WHERE Population BETWEEN 10000 AND 100000;

Wiersze 479 sztuk będą wyświetlały wiersze z powyżej przedstawionego zakresu wraz z wartościami 10000 i 100000.

WHERE SQL A BRAK WARTOŚCI

Niektóre kolumny mogą nie zostać wypełnione. Do sprawdzania tego typu warunków służy klauzula IS NULL. Tym razem użyjemy tabeli country i wybierzemy wszystkie Państwa, dla których rok odzyskania niepodłegłości ‘IndepYear’ nie został wypełniony.

ZAPYTANIE:

SELECT * FROM `country` WHERE IndepYear IS NULL

WYNIK:

ANALIZA:

W wyniku zapytania otrzymano rekordy dla których kolumna YndepYear nie została wypełniona (brak wartości, wartość pusta). Podsumowując, przyjmują one wartość NULL, którego nie należy mylić ze spacją lub wartością zero, bo nie są to wyrażenia tożsame.

WHERE SQL ZADANIA

Wykonajmy parę zadadań z klauzulą WHERE

  1. Napisz instrukcję SQL, która z tabeli country wybierze wszystkie kraje gdzie populacja jest większa od 10000.
  2. Stwórz instrukcję SQL, która z tabeli country wybierze wszystkie kraje gdzie populacja jest różna od 10000.
  3. Spróbuj napisać instrukcję SQL, która z tabeli city wybierze wszystkie kraje gdzie kod kraju jest równy ‘AFG‘ a district to ‘KABOL‘.
  4. Napisz instrukcję SQL wybierajacą wszystkie miasta z populacją 70000 a 80000.