Encyklopedia SQL - Łączenie warunków ograniczających – IN, BETWEEN
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:
- Wyświetlanie danych, podstawowy SELECT i wybór kolumn
- Ograniczanie wyświetlania wierszy, podstawy WHERE
- Łączenie warunków ograniczających, AND, OR w WHERE
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:
|
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: