Перейти до основного вмісту
Модуль 4 · Урок 1 із 413/57 у курсі~8 min
Модульні уроки (1/4)

Списки та діапазони: IN і BETWEEN

У попередніх модулях ви фільтрували за допомогою WHERE за допомогою рівностей і порівняння: salary > 30000, department_id = 1, hired_on >= '2020-01-01'. Але коли умова стає "значення має бути одним із цих п'яти", прикуті ORs накопичуються:

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 пропонує два ярлики, щоб зробити це читабельним.

IN — «один із цих»

Оператор IN (...) приймає список значень і повертає true, якщо стовпець дорівнює будь-якому з них:

SQL
SELECT first_name, last_name, department_id
FROM   employees
WHERE  department_id IN (1, 2, 3);

Він семантично ідентичний ORs вище, але набагато легший для читання: він природно читається як "де department_id знаходиться в (1, 2, 3)". Це також працює з рядками та датами:

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

Існує також NOT IN (...), який робить протилежне:

SQL
-- Employees who are NOT in Engineering or Sales:
SELECT first_name, last_name
FROM   employees
WHERE  department_id NOT IN (1, 2);

BETWEEN — «між A і B, обидва включно»

Коли умова є безперервним діапазоном (числа, дати), замість написавши column >= A AND column <= B, ви маєте 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 є включеним на обох кінцевих точках. Це дуже добре працює з також дати:

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';

Спробуйте

вправи#sql.m4.l1.e1
Спроби: 0Завантаження…

Показати ім'я (first_name), прізвище (last_name) і посадовий оклад (salary) співробітників з окладом від 30000 до 50000 включно. Три колони.

Завантаження редактора…
Показати підказку

Використовуйте BETWEEN 30000 AND 50000 — більш компактний і читабельний, ніж два порівняння, об’єднані І.

Рішення доступне після 3 спроб

Повторна вправа

вправи#sql.m4.l1.e2
Спроби: 0Завантаження…

Вкажіть імена (first_name) та прізвища (last_name) співробітників, які працюють у відділах 1, 2 або 4 (використовуйте IN). Упорядкуйте за алфавітом прізвища.

Завантаження редактора…
Показати підказку

WHERE department_id IN (1, 2, 4) є компактною версією трьох OR.

Рішення доступне після 3 спроб