Wstęp
Z poprzednich lekcji wiesz jak w klauzuli FROM wskazać motorowi bazy danych z jakich tabel chcesz dane. Wiesz także, że po słowie kluczowym SELECT wskazujesz z jakich kolumn tabeli dane mają pochodzić.
Teraz dowiesz się jak wskazać wiersze o interesujących Cię wartościach w określonych kolumnach.
Do czego służy klauzula WHERE?
W klauzuli WHERE wskazujesz, których wierszy dotyczy Twoje zapytanie. Innymi słowy w wyniku zwrócone zostaną jedynie rekordy, które w wymienionych kolumnach zawierają wartości spełniające określone przez Ciebie warunki.

Jak dało się zauważyć klauzula WHERE jest opcjonalna. Gdy ją pominiesz Twoje zapytanie zostanie wykonane na wszystkich wierszach tabeli wskazanej we FROM. Jest to szczególnie istotne gdy będziesz modyfikować dane. Zazwyczaj wykonanie zapytania na wszystkich wierszach nie jest Twoim celem. Dlatego umiejętne budowanie klauzuli WHERE jest kluczowe dla spójności danych i wydajności Twoich zapytań.
Jak używać WHERE?
Popularnym sposobem wskazywania rekordów jest przyrównanie zawartości danej kolumny do literału. Służy do tego operator przyrównania czyli znak równości.
Jak używać w klauzuli WHERE typów numerycznego, znakowego i datoczasowego dokładniej omówię w kolejnych lekcjach.
Teraz wykorzystam, znany Tobie z poprzednich lekcji, NULL. Napisz zapytanie testujące czy prawdą jest, że NULL jest równy NULL. Ja zrobiłbym to tak:
SELECT 'prawda' FROM dual WHERE NULL=NULL;
Jaki masz wynik?

Moje zapytanie nie zwróciło żadnych wierszy. Znaczy to, że warunek wymieniony w klauzuli WHERE nie jest prawdziwy. Czyli NULL jest NULLowi nierówny. Samodzielnie przetestuj inne, znane z matematyki, operatory porównania: !=, <, >, <=, >= > . Pochwal się wynikami na discordzie.
Jak testować NULL?
Do testowania NULL służą specjalne operatory: is null i is not null. Napisz zapytanie, z użyciem is null, zliczające NULL w kolumnie tablespace_name widoku all_tables. Ja napisałbym tak:
SELECT count(*) FROM all_tables WHERE tablespace_name is null;
Pochwal się swoim tutaj lub na discordzie.
Wydajność
Celem zbudowanych na kolumnach tabeli indeksów jest znaczące przyspieszenie wyszukiwania danych wskazanych klauzulą WHERE. Warto wiedzieć jakie indeksy na przeszukiwanych tabelach istnieją i tak zbudować warunki aby dotyczyły poindeksowanych kolumn.
Dane w tabeli mają różną kardynalność (ang. cardinality). Czyli stosunek unikalnych wartości kolumny do liczby rekordów w tabeli. Jeśli kolumna zawiera dużo unikalnych wartości to jej dane mają wysoką kardynalność. Np. przechowuje nr telefonu, PESEL czy adres email. Jeśli kolumna zawiera mało unikalnych wartości to jej dane charakteryzują się małą kardynalnością. Np. płeć, status zamówienia czy tak/nie. Najbardziej opłaca się budować indeksy i przeszukiwać dane o wysokiej kardynalności.
Warto pamiętać, że NULL nie jest indeksowany. Czyli wyszukiwanie wierszy wg warunku <kolumna> IS NULL nie wykorzysta indeksu nawet gdy został na kolumnie zbudowany. Są sposoby aby obejść tę niedogodność. Np. budując indeks na wielukolumnach.
Temat jedynie sygnalizuję. Będzie rozbudowany w kursie o efektywnym SQL oraz o projektowaniu bazy danych. Do realizacji dedykowanego materiału możesz namówić mnie w komentarzach.
Podsumowanie
Gratuluję Ci ukończenia dziesiątej lekcji darmowej edycji mojego kursu 'Podstawy SQL dla użytkowników Oracle’. Wiesz z niej jak używać klauzuli WHERE do wskazywania interesujących Cię danych.
Zadanie dla Ciebie: napisz zapytanie zliczające wszystkie wartości kolumny tablespace_name widoku all_tables.
Zrób zrzut ekranu i pochwal się swoim osiągnięciem na discordzie. Dedykowany serwer: Marcin Badtke – bazy danych i SQL.
Do wskazywania tabel w klauzuli FROM i kolumn w klauzuli SELECT wystarczała znajomość struktury bazy danych. Mówiłem o tym w poprzednich lekcjach.
Aby pisać efektywne zapytania wykorzystujące klauzulę WHERE kluczowa jest znajomość danych. W następnej lekcji pokażę Ci jak używać klauzuli WHERE z danymi typu numerycznego.
Tymczasem dziękuję za ukończenie niniejszej lekcji.
Wiesz co trzeba zrobić aby nie przegapić kolejnych.
Gratuluję Ci ukończenia dziesiątej lekcji darmowej edycji mojego kursu 'Podstawy SQL dla użytkowników Oracle’. Skomentuj poniżej jak Ci się podobała.
Czym jest i jak posługiwać się pseudokolumną rownum pokażę Ci w następnej lekcji. Chodź.