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

Списки и диапазоны: В и МЕЖДУ

В предыдущих модулях вы выполняли фильтрацию с помощью WHERE, используя равенства и сравнения: salary > 30000, department_id = 1, hired_on >= '2020-01-01'. Но когда условие становится "значение должно быть одним из этих пяти", скованные OR кучей:

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 (...) принимает список значений и возвращает true, если столбец равен любому из них:

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

Семантически он идентичен приведенным выше OR, но гораздо более читабелен: он естественно читается как "где 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 — «между А и Б, оба включительно»

Когда условие представляет собой непрерывный диапазон (числа, даты), а не написав 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 включительно. Три колонки.

Загрузка редактора…
Показать подсказку

Используйте МЕЖДУ 30000 И 50000 — более компактно и читабельно, чем два сравнения, соединенные оператором AND.

Решение доступно после 3 попыток

Обзор упражнения

Упражнение#sql.m4.l1.e2
Попыток: 0Загрузка…

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

Загрузка редактора…
Показать подсказку

WHERE Department_id IN (1, 2, 4) — это компактная версия трех OR.

Решение доступно после 3 попыток