Encyklopedia SQL - Łączenie warunków ograniczających - AND, OR, WHERE  

Udostępnij na: Facebook

Autor: Paweł Wilkosz

Opublikowano: 2012-01-19

Z poprzedniej publikacji dowiedziałeś się, w jaki sposób ograniczać zbiór wyników za pomocą klauzuli WHERE. W kolejnej części zostanie zaprezentowany sposób łączenia wielu instrukcji logicznych, składających się na pojedynczy warunek, za pomocą AND i OR.

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

Po wykonaniu zadań będziesz wiedział:

  • w jaki sposób łączyć ze sobą warunki ograniczania zbioru wynikowego za pomocą AND oraz OR.

Instrukcja AND

Podczas konstruowania warunku logicznego, zawartego w klauzuli WHERE, niejednokrotnie staniesz w obliczu problemu wielowarunkowości. W praktyce oznacza to, iż dany rekord podlegać będzie wyświetleniu wyłącznie wtedy, gdy wszystkie warunki zostaną spełnione. Język SQL umożliwia rozwiązanie tego problemu, oferując opcję łączenia poszczególnych warunków za pomocą słowa kluczowego AND, wykorzystywanego w WHERE. W najprostszej formie przyjmie ona następującą postać:

SELECT kolumna1, kolumna2,…kolumnaN
FROM Tabela
WHERE warunek1 AND warunek2 … AND warunekN

Przykładowo, aby wyświetlić z tabeli Person.Contact bazy danych AdventureWorks adresy e-mail wszystkich mężczyzn, których nazwisko zaczyna się na literę ‘A’, musisz wykonać następujące zapytanie:

SELECT EmailAddress
FROM Person.Contact
WHERE Title = ‘Mr.’ 
        AND LastName LIKE ‘A%’

co w rezultacie zwróci następujący wynik (Rys. 1.):

Rys. 1. Wynik wykonania zapytania z dwoma warunkami logicznymi.

Oczywiście nic nie stoi na przeszkodzie, aby zapytanie zawierało więcej warunków logicznych, oddzielonych od siebie za pomocą słowa kluczowego AND.

Instrukcja OR

Instrukcja OR działa podobnie do AND, z tą różnicą, iż wystarczy, aby co najmniej jeden warunek został spełniony oraz aby dany rekord został uwzględniony w zbiorze wynikowym. Podstawowa składnia WHERE z OR wygląda następująco:

SELECT kolumna1, kolumna2,…kolumnaN
FROM Tabela
WHERE warunek1 OR warunek2 … OR warunekN

W kolumnie Title tabeli Person.Contact nie wszędzie została określona płeć danego użytkownika (pole jest oznaczone jako NULL). Aby wyciągnąć adresy e-mail wszystkich kobiet, musisz wyszukać te rekordy, które posiadają wpis Ms. lub NULL (i wtedy ewentualnie manualnie możesz wprowadzić informację, czy dana osoba jest kobietą czy mężczyzną). W związku z tym jeden z tych dwóch warunków musi zostać spełniony. Konstrukcja zapytania przyjmie następującą postać:

SELECT EmailAddress
FROM Person.Contact
WHERE Title = ‘Mr.’ 
        OR Title = ‘NULL’

Łączenie OR i AND

Ponieważ język SQL działa na zasadzie rachunku predykatów, dozwolone jest łączenie zarówno funkcji AND jak i OR w klauzuli WHERE. Można to zastosować w sytuacji, jeśli jesteś zainteresowany  tylko tymi rekordami z tabeli Person.Contact bazy danych AdventureWorks, które odnoszą się do osób o zdefiniowanej płci (kobieta bądź mężczyzna) i których nazwisko zaczyna się na literę A lub S. Niniejszy cel da się osiągnąć za pomocą następującego zapytania:

SELECT EmailAddress
FROM Person.Contact
    WHERE
(
    Title = ‘Mr.’ OR Title = ‘Ms.’
)
AND
(
    LastName LIKE ‘A%’ OR LastName LIKE ‘S%’
)

co zwróci wynik zgodny z Rys. 2.

Rys. 2. Łączenie warunków logicznych za pomocą AND i OR.

Informacja

Zapamiętaj, że:

  1. Łącząc warunki logiczne za pomocą AND, rekordy zostaną dołączone do zbioru wynikowego, gdy każdy z warunków zostanie spełniony.
  2. Łącząc warunki logiczne za pomocą OR, rekordy zostaną dołączone do zbioru wynikowego, gdy co najmniej jeden z warunków zostanie spełniony.
  3. Istnieje możliwość łączenia ze sobą warunków za pomocą AND i OR w pojedynczej klauzuli WHERE.

Podsumowanie

W niniejszej części dowiedziałeś się, w jaki sposób efektywnie wykorzystywać łączenie wielu prostych warunków logicznych za pomocą słów kluczowych AND i OR.

W kolejnej części nauczysz się określać warunki niebinarne, tzn takie, których prawda logiczna oceniana jest na podstawie złożonej funkcji (IN, BETWEEN).

Dodatkowo zobacz: