Уроки модуля (1/4)
Списки и диапазоны: В и МЕЖДУ
В предыдущих модулях вы выполняли фильтрацию с помощью WHERE, используя равенства и
сравнения: salary > 30000, department_id = 1, hired_on >= '2020-01-01'.
Но когда условие становится "значение должно быть одним из этих пяти",
скованные OR кучей:
-- 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 (...) принимает список значений и возвращает true, если
столбец равен любому из них:
SELECT first_name, last_name, department_id
FROM employees
WHERE department_id IN (1, 2, 3);Семантически он идентичен приведенным выше OR, но гораздо более читабелен: он
естественно читается как "где 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 — «между А и Б, оба включительно»
Когда условие представляет собой непрерывный диапазон (числа, даты), а не
написав 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 включительно. Три колонки.
Показать подсказку
Используйте МЕЖДУ 30000 И 50000 — более компактно и читабельно, чем два сравнения, соединенные оператором AND.
Решение доступно после 3 попыток
Обзор упражнения
Укажите имя (first_name) и фамилию (last_name) сотрудников, работающих в отделах 1, 2 или 4 (используйте IN). Расположите в алфавитном порядке по фамилии.
Показать подсказку
WHERE Department_id IN (1, 2, 4) — это компактная версия трех OR.
Решение доступно после 3 попыток