Encyklopedia SQL - Ograniczanie wyświetlanych wierszy - WHERE  Udostępnij na: Facebook

Autor: Paweł Wilkosz

Opublikowano: 2012-01-18

W poprzedniej części Encyklopedii dowiedziałeś się, w jaki sposób wykorzystać klauzulę SELECT do prezentacji danych składowanych w tabelach oraz jak ograniczyć zbiór wyników do konkretnych kolumn. Niniejsza publikacja skupiać się będzie na technice ograniczania ilości wierszy za pomocą WHERE.

Przed wykonaniem zadań zapoznaj się z następującym materiałem:

Po wykonaniu zadań nauczysz się:

  • w jaki sposób ograniczyć zbiór wyników do konkretnych rekordów,
  • jak prawidłowo wykorzystywać klauzulę WHERE,
  • w jaki sposób budować poprawnie logiczny warunek wyboru wierszy.

Instrukcja WHERE

W poprzedniej części niniejszej Encyklopedii omówiłem problem wyboru adresu i miejsca zamieszkania pracowników firmy AdventureWorks. Zapytanie:

SELECT AddressLine1, City
FROM Person.Address

w wyniku zwracało listę wszystkich adresów, znajdujących się w bazie danych. Analizując liczbę rekordów nietrudno zauważyć, iż pracownik działu HR musi zaadresować aż 19614 kopert. Takie zadanie jest niemalże niewykonalne w ciągu jednego dnia. Aby ułatwić pracę działu HR, programista baz danych w AdventureWorks otrzymał zadanie napisania zapytania, które zwróci na początku adresy z miasta Ottawa, następnie Miami, Portland itp. Tym sposobem pracownik HR będzie mógł partiami adresować karty świąteczne, mając pewność, iż nikogo nie opuści. Aby ograniczyć zbiór rekordów do wskazanego miasta, musisz posłużyć się klauzulą WHERE, która w najprostszej postaci przyjmuje następującą formę:

SELECT kolumna1, kolumna2, …, kolumnna
FROM Tabela
WHERE [warunki logiczne wyciągania rekordów]

Warunkami logicznymi mogą być:

  • operatory matematyczne: =,<,<=,>,>=,<> (np. WHERE id > 10 – wszystkie rekordy, których wartość kolumny id jest większa od 10),
  • operator LIKE – porównywanie ciągu znaków oparte na wyrażeniu regularnym (np. WHERE name LIKE ‘a%’ – wszystkie rekordy, których wartość kolumny name zaczyna się na literę ‘a’),
  • podzapytanie, funkcja zwracająca wartość logiczną – na poziomie niniejszego artykułu można pominąć.

Zatem, wyciągając w pierwszej kolejności adresy osób mieszkających w Ottawie, należy wykonać następujące zapytanie:

SELECT AddressLine1, City
FROM Person.Address
WHERE City = ‘Ottawa’

co w rezultacie zwróci zbiór podobny do zaprezentowanego na Rys. 1.

Rys. 1. Zbiór adresów osób mieszkających w mieście Ottawa.

Po zaadresowaniu kart, pracownik HR chciałby otrzymać pozostałą listę adresów, pomniejszoną o te, które dotyczą miasta Ottawa. W tym celu musisz posłużyć się operatorem <>:

SELECT AddressLine1, City
FROM Person.Address
WHERE City <> ‘Ottawa’

Przykładowy zbiór wyników dla przedstawionego zapytania został zaprezentowany na Rys. 2.

Rys. 2. Zbiór adresów bez miasta Ottawa.

Niestety pracownikowi HR skończyły się wielkoformatowe koperty. W związku z tym zwrócił się do programisty baz danych o pomoc w wyciągnięciu tylko pięcioliterowych miast (tylko takie zmieszczą się na mniejszych kopertach). Aby pomóc koledze z HR, musisz przygotować następujące zapytanie, wykorzystując klauzulę LIKE wraz z odpowiednim wyrażeniem regularnym:

SELECT AddressLine1, City
FROM Person.Address
WHERE City LIKE ‘[a-zA-Z] [a-zA-Z] [a-zA-Z] [a-zA-Z] [a-zA-Z]’

co w rezultacie zwróci następujący zbiór danych (Rys. 3.):

Rys. 3. Przykładowy zbiór danych, ograniczony poprzez klauzulę WHERE z warunkiem LIKE.

Informacja

Zapamiętaj, że:

  1. Klauzula WHERE pomaga ograniczyć zbiór wierszy, według schematu wskazanego po słowie kluczowym.
  2. W najprostszej formie klauzula WHERE ogranicza zbiór wyników poprzez operatory matematyczne, funkcję LIKE (do porównywania łańcuchów znaków) oraz inne funkcje i procedury zwracające warunek logiczny.

Podsumowanie

W niniejszej części Encyklopedii dowiedziałeś się, w jaki sposób efektywnie ograniczyć zbiór wyników, wykorzystując klauzulę WHERE.

W kolejnej części nauczysz się, w jaki sposób łączyć ze sobą warunki ograniczania zbioru wynikowego za pomocą AND oraz OR.

Dodatkowo zobacz: