Модуль 01 — SELECT, фильтрация и операции над множествами

Как задавать вопросы базе данных: выборка, фильтрация, сортировка, UNION/EXCEPT/INTERSECT

Прогресс курса Модуль 2 из 9

Что вы освоите в этом модуле

01

Оператор SELECT: базовая выборка

SELECT — основа SQL. Позволяет выбрать нужные столбцы из таблицы и при необходимости переименовать их.

SELECT name, age, city
FROM   users;

-- Псевдоним столбца через AS
SELECT name AS user_name,
       age  AS years
FROM   users;

-- Только уникальные значения
SELECT DISTINCT city
FROM   users;

Синтаксис

  • SELECT * — все столбцы (удобно при исследовании данных)
  • SELECT col1, col2 — только нужные столбцы
  • AS alias — псевдоним для столбца или таблицы
  • DISTINCT — убирает дубликаты из результата
02

Фильтрация: WHERE

WHERE позволяет отбирать строки по условию. Поддерживает операторы сравнения и логические операторы.

-- Простые сравнения
SELECT * FROM users
WHERE  gender = 'female';

-- Логические операторы AND / OR / NOT
SELECT name, age FROM users
WHERE  gender = 'male' AND age > 25;

-- IN — список значений
SELECT * FROM users
WHERE  city IN ('Moscow', 'Kazan');

-- BETWEEN — диапазон (включительно)
SELECT title, score FROM posts
WHERE  score BETWEEN 800 AND 1000;

-- LIKE — поиск по шаблону (% — любая строка, _ — любой символ)
SELECT name FROM users
WHERE  name LIKE 'A%';   -- имена на букву A

-- IS NULL / IS NOT NULL
SELECT * FROM users
WHERE  city IS NOT NULL;
Для проверки на NULL используйте IS NULL / IS NOT NULL, а не = NULL. NULL — это «неизвестное значение», оно не равно ничему, даже себе.
03

Сортировка и ограничение: ORDER BY, LIMIT, OFFSET

-- Сортировка по убыванию score
SELECT title, score
FROM   posts
ORDER BY score DESC;

-- Несколько столбцов сортировки: сначала по дате, потом по user_id
SELECT liked_at, user_id
FROM   likes
ORDER BY liked_at ASC, user_id DESC;

-- Топ-5 постов с наибольшим score
SELECT title, score
FROM   posts
ORDER BY score DESC
LIMIT  5;

-- Пропустить первые 5 записей (пагинация)
SELECT title, score
FROM   posts
ORDER BY score DESC
LIMIT  5 OFFSET 5;
04

Операции над множествами: UNION, EXCEPT, INTERSECT

SQL позволяет объединять результаты нескольких SELECT-запросов как множества. Правило: количество столбцов и их типы должны совпадать.

Операторы

  • UNION — объединение, убирает дубликаты
  • UNION ALL — объединение, сохраняет все строки включая дубликаты
  • EXCEPT — разность: строки из первого запроса, которых нет во втором
  • EXCEPT ALL — разность с учётом дубликатов
  • INTERSECT — пересечение: только строки, которые есть в обоих результатах
  • INTERSECT ALL — пересечение с учётом дубликатов
-- UNION: объединить id и заголовки постов с именами пользователей
SELECT id AS object_id, title AS object_name
FROM   posts
UNION
SELECT id, name
FROM   users
ORDER BY object_id, object_name;
object_idobject_name
1Andrey
1tutorial Python basics
2Anna
-- INTERSECT: пользователи, которые В ОДИН ДЕНЬ и просматривали ленту,
-- и поставили лайк
SELECT liked_at AS action_date, user_id
FROM   likes
INTERSECT
SELECT viewed_at, user_id
FROM   views
ORDER BY action_date ASC, user_id DESC;
-- EXCEPT: пользователи, лайкнувшие 7 января, но не просматривавшие в тот день
SELECT user_id FROM likes
WHERE  liked_at = '2026-01-07'
EXCEPT ALL
SELECT user_id FROM views
WHERE  viewed_at = '2026-01-07';
Метрика сходства Жаккара — пересечение / объединение двух множеств — тоже может быть вычислена с помощью INTERSECT и UNION. SQL-операции над множествами активно используются в Data Science.
05

Декартово произведение (CROSS JOIN)

Декартово произведение — результат объединения каждой строки первой таблицы с каждой строкой второй. Без условия соединения это называется CROSS JOIN.

-- Все возможные пары (пользователь, сообщество)
SELECT u.name   AS user_name,
       c.name   AS community_name
FROM   users       u
CROSS JOIN communities c
ORDER BY u.id, c.id;
Если в таблицах 100 и 50 строк, CROSS JOIN вернёт 5 000 строк. На больших таблицах это крайне дорогая операция — используйте осознанно.
06

Логический порядок выполнения запроса

SQL-запрос обрабатывается не в том порядке, в котором записан. Понимание порядка выполнения помогает избегать ошибок.

Порядок выполнения SELECT

  • 1. FROM / JOIN — определяем источник данных
  • 2. WHERE — фильтруем строки
  • 3. GROUP BY — группируем
  • 4. HAVING — фильтруем группы
  • 5. SELECT — выбираем столбцы и вычисляем выражения
  • 6. DISTINCT — убираем дубликаты
  • 7. ORDER BY — сортируем
  • 8. LIMIT / OFFSET — ограничиваем вывод
Псевдонимы из SELECT нельзя использовать в WHERE — WHERE выполняется раньше. Но можно использовать в ORDER BY и HAVING.

Ключевые выводы модуля

Запомните главное

  • Псевдоним из SELECT нельзя использовать в WHERE (WHERE выполняется раньше)
  • NULL ≠ NULL: для проверки на NULL только IS NULL / IS NOT NULL
  • UNION убирает дубликаты; UNION ALL сохраняет их — и работает быстрее
  • ORDER BY в UNION/EXCEPT нужно выносить в конец или оборачивать в скобки
  • CROSS JOIN без условия = декартово произведение — опасно на больших таблицах
Практические задания — на учебном портале. Задания, критерии оценивания, сдача работ и оценки преподавателя — в курсе на portal.nevabit.ru. Учётную запись выдаёт преподаватель.
Модуль 00: Введение Все модули Модуль 02: Агрегация