Модульні уроки (1/4)
Списки та діапазони: IN і BETWEEN
У попередніх модулях ви фільтрували за допомогою WHERE за допомогою рівностей і
порівняння: salary > 30000, department_id = 1, hired_on >= '2020-01-01'.
Але коли умова стає "значення має бути одним із цих п'яти",
прикуті ORs накопичуються:
-- 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, якщо
стовпець дорівнює будь-якому з них:
SELECT first_name, last_name, department_id
FROM employees
WHERE department_id IN (1, 2, 3);Він семантично ідентичний ORs вище, але набагато легший для читання: він
природно читається як "де department_id знаходиться в (1, 2, 3)". Це також працює
з рядками та датами:
SELECT name
FROM departments
WHERE city IN ('Milano', 'Roma');Існує також NOT IN (...), який робить протилежне:
-- 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:
-- 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 є включеним на обох кінцевих точках. Це дуже добре працює з
також дати:
-- Everyone hired in 2020:
SELECT first_name, last_name, hired_on
FROM employees
WHERE hired_on BETWEEN '2020-01-01' AND '2020-12-31';Спробуйте
Показати ім'я (first_name), прізвище (last_name) і посадовий оклад (salary) співробітників з окладом від 30000 до 50000 включно. Три колони.
Показати підказку
Використовуйте BETWEEN 30000 AND 50000 — більш компактний і читабельний, ніж два порівняння, об’єднані І.
Рішення доступне після 3 спроб
Повторна вправа
Вкажіть імена (first_name) та прізвища (last_name) співробітників, які працюють у відділах 1, 2 або 4 (використовуйте IN). Упорядкуйте за алфавітом прізвища.
Показати підказку
WHERE department_id IN (1, 2, 4) є компактною версією трьох OR.
Рішення доступне після 3 спроб