Lekcje modułu (1/4)
Listy i zakresy: IN i BETWEEN
W poprzednich modułach filtrowałeś za pomocą WHERE, używając równości i
porównania: salary > 30000, department_id = 1, hired_on >= '2020-01-01'.
Ale kiedy warunek stanie się „wartość musi być jedną z tych pięciu”,
przykute kodeki OR gromadzą się:
-- Heavy and fragile: adding a department means touching the query
SELECT first_name, last_name
FROM employees
WHERE department_id = 1
OR department_id = 2
OR department_id = 3;SQL oferuje dwa skróty, dzięki którym można to odczytać.
IN — „jeden z nich”
Operator IN (...) pobiera listę wartości i zwraca true, jeśli
kolumna równa się dowolnej z nich:
SELECT first_name, last_name, department_id
FROM employees
WHERE department_id IN (1, 2, 3);Jest semantycznie identyczny z powyższymi kodami OR, ale znacznie bardziej czytelny: it
brzmi naturalnie jako ”gdzie department_id jest w (1, 2, 3)”. To również działa
z ciągami znaków i datami:
SELECT name
FROM departments
WHERE city IN ('Milano', 'Roma');Istnieje również NOT IN (...), który działa odwrotnie:
-- Employees who are NOT in Engineering or Sales:
SELECT first_name, last_name
FROM employees
WHERE department_id NOT IN (1, 2);BETWEEN — „pomiędzy A i B, oba włącznie”
Gdy warunek jest zakresem ciągłym (liczby, daty), zamiast
pisząc column >= A AND column <= B masz BETWEEN A AND B:
-- Employees with a salary between 30000 and 50000 (both inclusive):
SELECT first_name, last_name, salary
FROM employees
WHERE salary BETWEEN 30000 AND 50000;BETWEEN obejmuje włącznie oba punkty końcowe. Bardzo ładnie współpracuje z
daty też:
-- Everyone hired in 2020:
SELECT first_name, last_name, hired_on
FROM employees
WHERE hired_on BETWEEN '2020-01-01' AND '2020-12-31';Spróbuj
Pokaż imię (imię), nazwisko (nazwisko) i wynagrodzenie (wynagrodzenie) pracowników z wynagrodzeniem od 30000 do 50000 włącznie. Trzy kolumny.
Pokaż wskazówkę
Użyj MIĘDZY 30000 A 50000 — bardziej zwarty i czytelny niż dwa porównania połączone operatorem AND.
Rozwiązanie dostępne po 3 próbach
Przejrzyj ćwiczenie
Podaj imię (imię) i nazwisko (nazwisko) pracowników pracujących w działach 1, 2 lub 4 (użyj IN). Uporządkuj alfabetycznie według nazwiska.
Pokaż wskazówkę
WHERE id_działu IN (1, 2, 4) to kompaktowa wersja trzech OR.
Rozwiązanie dostępne po 3 próbach