Lekcja w formie wideo

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.

Wskazywanie warunkami w klauzuli WHERE pożądanych rekordów

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?

Operator przyrównania nie działa z NULL

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ź.

Idź do następnej lekcji

Wróć do poprzedniej lekcji

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *