Przejdź do głównej treści
eLearner.app
Moduł 4 · Lekcja 1 z 413/57 w kursie~8 min
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ę:

SQL
-- 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:

SQL
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:

SQL
SELECT name
FROM   departments
WHERE  city IN ('Milano', 'Roma');

Istnieje również NOT IN (...), który działa odwrotnie:

SQL
-- 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:

SQL
-- 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ż:

SQL
-- 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

Ćwiczenie#sql.m4.l1.e1
Próby: 0Ładowanie...

Pokaż imię (imię), nazwisko (nazwisko) i wynagrodzenie (wynagrodzenie) pracowników z wynagrodzeniem od 30000 do 50000 włącznie. Trzy kolumny.

Ładowanie edytora...
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

Ćwiczenie#sql.m4.l1.e2
Próby: 0Ładowanie...

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.

Ładowanie edytora...
Pokaż wskazówkę

WHERE id_działu IN (1, 2, 4) to kompaktowa wersja trzech OR.

Rozwiązanie dostępne po 3 próbach