Encyklopedia SQL - Łączenie warunków ograniczających – IN, BETWEEN  

Udostępnij na: Facebook

Autor: Paweł Wilkosz

Opublikowano: 2012-01-20

Kontynuując wątek ograniczania zbioru wynikowego za pomocą klauzuli WHERE chciałbym zaprezentować kolejną metodę tworzenia warunku logicznego. Do tej pory przedstawione zostały binarne funkcje pozwalające ocenić, czy dany rekord ma zostać zaprezentowany jako rezultat czy nie. W niniejszym artykule opisane zostaną klauzule IN oraz BETWEEN, pozwalające tworzyć dynamiczne dopasowania danych, dołączanych jako rezultat zapytania.

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

Po wykonaniu zadań będziesz wiedział:

  • w jaki sposób wykorzystać operatory IN, BETWEEN w klauzuli WHERE.

Instrukcja IN

Instrukcja IN w klauzuli WHERE przyjmuje wartość logiczną: prawdę, jeżeli co najmniej jeden element ze zbioru, wymieniony po niej, zostanie dopasowany do danych, które są wyciągnięte z poszczególnych kolumn. Najprostsze zapytanie WHERE z klauzulą IN przyjmuje następującą postać:

SELECT kolumna1, kolumna2, … , kolumnaN
FROM Tabela
WHERE warunek IN zbiór_dopasowań

Przykładowo, podczas próby wyciągnięcia z bazy danych AdventureWorks wszystkich numerów pracowników (kolumna EmployeeID), którzy zajmują stanowiska: Marketing Manager, ProductionTechnician – WC10, Design Engineer, można posłużyć się następującym zapytaniem:

SELECT EmployeeID
FROM HumanResources.Employee
WHERE Title IN (‘Marketing Manager’, ‘Production Technician – WC10’, ‘Design Engineer’)

co zwróci zbiór wynikowy jak na Rys. 1.

Rys. 1. Zastosowanie IN w klauzuli WHERE.

Oczywiście powyższe zapytanie można napisać bez wykorzystania klauzuli IN. Można wtedy posłużyć się łączeniem warunków logicznych za pomocą operatora OR. Zapytanie będzie wtedy wyglądać następująco:

SELECT EmployeeID
FROM HumanResources.Employee
WHERE Title = ‘Marketing Manager’ 
 OR Title = ‘Production Technician – WC10’
 OR Title = ‘Design Engineer’

Instrukcja BETWEEN

W przeciwieństwie do IN, BETWEEN przyjmuje za prawdę logiczną warunek, który mieści się w zakresie wskazanego po klauzuli zakresu. Ogólna składnia zapytania wygląda następująco:

SELECT kolumna1, kolumna2, … , kolumnaN
FROM Tabela
WHERE warunek BETWEEN dolny_zakres AND górny_zakres

W tabeli HumanResources.Employee bazy danych AdventureWorks, znajduje się kolumna ManagerID, która określa do którego managera raportuje dany pracownik. Zakładając, iż firma AdventureWorks chciałaby nagrodzić swoich pracowników, urodzonych pomiędzy rokiem 1941 a 1951 za wysługę lat, programista baz danych musi posłużyć się następującym zapytaniem:

SELECT EmployeeId, BirthDate
FROM HumanResources.Employee
WHERE YEAR(BirthDate) BETWEEN ‘1941’ AND ‘1951’

co powinno zwrócić dane zgodne z Rys. 2.

Rys. 2. Wykorzystanie BETWEEN w klauzuli WHERE.

Funkcja YEAR, wykorzystana w zapytaniu, służy do wyciągania roku z danej daty.

Oczywiście, podobnie jak w przypadku IN, zapytanie z BETWEEN możesz zapisać, wykorzystując klauzulę OR. Tak skonstruowane zapytanie może przybrać następującą postać:

SELECT EmployeeId, BirthDate
FROM HumanResources.Employee
WHERE YEAR(BirthDate) = ‘1941’ 
OR YEAR(BirthDate) = ‘1942’ 
OR YEAR(BirthDate) = ‘1943’ 
OR YEAR(BirthDate) = ‘1944’
OR YEAR(BirthDate) = ‘1945’
OR YEAR(BirthDate) = ‘1946’
OR YEAR(BirthDate) = ‘1947’
OR YEAR(BirthDate) = ‘1948’
OR YEAR(BirthDate) = ‘1949’
OR YEAR(BirthDate) = ‘1950’
OR YEAR(BirthDate) = ‘1951’

Nie trzeba chyba omawiać wady tego rozwiązania. Podczas próby wyciągania numerów ID osób urodzonych pomiędzy 1941 a 1981 należy wykazać się wielką wytrwałością w procesie konstruowania zapytania, gdyby klauzula BETWEEN nie była dostępna w języku T-SQL.

Informacja

Zapamiętaj, że:

  1. Operator IN w klauzuli WHERE określa prawdę logiczną, jeżeli zostanie dopasowany co najmniej jeden element wymieniony we wskazanym zbiorze.
  2. Operator BETWEEN w WHERE określa prawdę logiczną, gdy zostanie dopasowany co najmniej jeden rekord z danej tabeli, znajdujący się we wskazanym zakresie.
  3. Operatory IN, BETWEEN można zastąpić AND oraz OR, jednakże dla długich, złożonych warunków jest to wysoce niezalecane.
  4. Operator BETWEEN jest operatorem silnym, tzn. krańce wskazanego zakresu również zostaną dołączone do zbioru wynikowego.

Podsumowanie

W niniejszej części dowiedziałeś się, w jaki sposób wykorzystać operatory IN oraz BETWEEN w konstrukcji zapytania, z ograniczonym zbiorem wynikowym, poprzez WHERE.

W kolejnej części nauczysz się sortować dane za pomocą ORDER BY.

Dodatkowo zobacz: