Zapytanie SELECT imie, pesel, wiek FROM dane WHERE wiek BETWEEN 18 AND 30 spowoduje zwrócenie
A. imion, numerów PESEL oraz wieku osób w wieku od 19 do 29 lat
B. imion, numerów PESEL oraz wieku osób, których wiek wynosi 18 lub 30 lat
C. imion, nazwisk oraz numerów PESEL osób w wieku od 18 do 30 lat
D. imion, numerów PESEL oraz wieku osób w wieku od 18 do 30 lat włącznie
Zapytanie SELECT imie, pesel, wiek FROM dane WHERE wiek BETWEEN 18 AND 30 zwróci trzy wskazane kolumny: imie, pesel oraz wiek, ale tylko dla tych rekordów, w których wartość pola wiek mieści się od 18 do 30 włącznie. Operator BETWEEN w SQL działa jako zakres domknięty, czyli odpowiada warunkowi wiek >= 18 AND wiek <= 30. To ważny szczegół, bo do wyniku trafią zarówno osoby mające dokładnie 18 lat, jak i dokładnie 30 lat, a także wszystkie wartości pomiędzy nimi. Z mojego doświadczenia to jest jeden z tych operatorów, które wyglądają banalnie, ale często robią zamieszanie na testach i w prawdziwych raportach. W praktyce używa się go np. do filtrowania klientów według wieku, zamówień z danego przedziału dat albo produktów z określonego zakresu cen. Dobra praktyka jest taka, żeby świadomie kontrolować granice zakresu, szczególnie przy datach i typach z czasem, bo tam BETWEEN też obejmuje wartości brzegowe.
W tym zapytaniu trzeba rozdzielić dwie rzeczy: wybór kolumn oraz filtrowanie rekordów. Część SELECT imie, pesel, wiek określa, jakie dane mają zostać pokazane w wyniku. Nie pojawi się tam nazwisko, bo kolumna nazwisko nie została wymieniona w klauzuli SELECT. SQL nie dopowiada sobie brakujących pól, nawet jeśli logicznie pasowałyby do danych osobowych. To jest częsty błąd myślowy: ktoś patrzy na sens biznesowy, a nie na dokładną treść kwerendy. Baza danych wykona dokładnie to, co zapisano w poleceniu.
Warunek WHERE wiek BETWEEN 18 AND 30 nie oznacza wyłącznie wieku 18 albo 30 lat. Operator BETWEEN nie wybiera tylko wartości granicznych, ale cały przedział. Czyli do wyniku pasują wartości 18, 19, 20 i tak dalej aż do 30. Równie niepoprawne jest założenie, że granice są pomijane i zostają tylko osoby od 19 do 29 lat. W standardowym SQL BETWEEN jest operatorem inkluzywnym, czyli obejmuje oba końce zakresu. Można to zapisać równoważnie jako wiek >= 18 AND wiek <= 30. Moim zdaniem warto to zapamiętać właśnie w tej postaci, bo wtedy od razu widać, że znaki równości są częścią warunku. W pracy z bazami danych takie drobiazgi mają znaczenie, szczególnie przy raportach, limitach wiekowych, progach cenowych czy analizie danych, gdzie jeden niepoprawnie uwzględniony albo pominięty rekord może zmienić wynik zestawienia.
Warunek WHERE wiek BETWEEN 18 AND 30 nie oznacza wyłącznie wieku 18 albo 30 lat. Operator BETWEEN nie wybiera tylko wartości granicznych, ale cały przedział. Czyli do wyniku pasują wartości 18, 19, 20 i tak dalej aż do 30. Równie niepoprawne jest założenie, że granice są pomijane i zostają tylko osoby od 19 do 29 lat. W standardowym SQL BETWEEN jest operatorem inkluzywnym, czyli obejmuje oba końce zakresu. Można to zapisać równoważnie jako wiek >= 18 AND wiek <= 30. Moim zdaniem warto to zapamiętać właśnie w tej postaci, bo wtedy od razu widać, że znaki równości są częścią warunku. W pracy z bazami danych takie drobiazgi mają znaczenie, szczególnie przy raportach, limitach wiekowych, progach cenowych czy analizie danych, gdzie jeden niepoprawnie uwzględniony albo pominięty rekord może zmienić wynik zestawienia.