Справочник по SQL

Темы, которые спрашивают на собеседованиях по SQL. Каждый разбор — один сквозной пример, типовые ошибки и задачи с автопроверкой в браузере.

Соединения и объединения

Выборка и сортировка

ORDER BY в SQL: сортировка по алиасу и номеру колонки, collation

Сортировка по алиасу и номеру колонки, куда попадают NULL, почему буквы идут не по алфавиту (collation) и почему без ORDER BY порядок строк плывёт.

DISTINCT в SQL: убрать дубликаты и COUNT DISTINCT

Почему DISTINCT убирает дубли строки, а не колонки, чем отличается от GROUP BY по плану и времени, как считать COUNT(DISTINCT) и где он прячет ошибку JOIN.

CASE WHEN в SQL: условия в запросе с примерами

Как работает CASE WHEN THEN ELSE END, чем простая форма отличается от поисковой, почему порядок веток решает результат и как собрать сводную таблицу.

NULL в SQL: IS NULL, COALESCE и частые ошибки

NULL в SQL означает отсутствие значения. Разбираем IS NULL, COALESCE, трёхзначную логику, поведение COUNT и ловушку NOT IN на примерах PostgreSQL.

LIKE и ILIKE в SQL: поиск по шаблону с примерами

Как искать начало и часть строки через SQL LIKE: маски % и _, ILIKE и регистр, ESCAPE для буквального процента, NOT LIKE и NULL, отличия MySQL, SQL Server и SQLite.

Даты в PostgreSQL: выборка за день и отчёт по месяцам

Как выбрать записи за день в PostgreSQL, не потерять последний день месяца с BETWEEN и собрать отчёт через date_trunc с явным часовым поясом.

Группировка и подзапросы

Оконные функции и аналитика

Проектирование и производительность

CREATE TABLE в PostgreSQL: создать таблицу, ключи и ограничения

Как создать таблицу в PostgreSQL: типы, первичный ключ с IDENTITY, NOT NULL, UNIQUE, CHECK и внешние ключи с ON DELETE CASCADE. IF NOT EXISTS и частые ошибки.

ALTER TABLE в PostgreSQL: добавить, изменить и удалить столбец

Как изменить таблицу в PostgreSQL: ADD COLUMN, смена типа через USING, SET NOT NULL, RENAME, DROP COLUMN и ADD CONSTRAINT. Что переписывает таблицу и частые ошибки.

INSERT, UPDATE и DELETE в SQL: примеры на PostgreSQL

Как вставить, изменить и удалить строки в PostgreSQL: несколько строк одним INSERT, RETURNING, UPDATE из другой таблицы, DELETE с JOIN, TRUNCATE и ошибки.

Нормализация базы данных: 1НФ, 2НФ и 3НФ на примере

Как одна плоская таблица разваливается на users и orders. Три нормальные формы по шагам, аномалии вставки и удаления, замеры денормализации на 2 млн строк в PostgreSQL 16.

Индексы PostgreSQL: виды, CREATE INDEX и EXPLAIN

Виды индексов PostgreSQL: B-tree, составные, частичные и GIN. Команды CREATE INDEX, планы EXPLAIN ANALYZE и случаи, когда индекс не ускоряет запрос.

Ошибки и отладка

Практика и собеседование

PostgreSQL в production

duplicate key value violates unique constraint в PostgreSQL: причины и исправление

Как разобрать SQLSTATE 23505: найти конфликтующий constraint и значение, проверить sequence после импорта и выбрать между исправлением данных, ON CONFLICT и изменением ограничения.

current transaction is aborted в PostgreSQL: как найти исходную ошибку

SQLSTATE 25P02 появляется после первого сбоя в транзакции. Как найти исходную ошибку в логе, сделать ROLLBACK или ROLLBACK TO SAVEPOINT и не вернуть сломанное соединение в пул.

Bloat индексов PostgreSQL: как измерить и когда делать REINDEX

Как отличить большой индекс от раздутого: снять тренд размера, проверить B-tree через pgstattuple и выбрать между VACUUM, REINDEX и REINDEX CONCURRENTLY.

Блокировки PostgreSQL: как найти блокирующий запрос и снять

Практическая диагностика блокировок PostgreSQL: как найти blocker и blocked, проверить цепочку, выбрать cancel или terminate и ограничить время ожидания.

ON CONFLICT в PostgreSQL: UPSERT без гонки между SELECT и INSERT

Как заменить SELECT перед INSERT на атомарный UPSERT: DO NOTHING, DO UPDATE, excluded, составной conflict target, WHERE и честная семантика RETURNING при конкуренции.

EXPLAIN ANALYZE BUFFERS в PostgreSQL: как читать план запроса

Как читать EXPLAIN ANALYZE BUFFERS снизу вверх: сравнивать оценки с фактом, учитывать loops, находить лишнюю фильтрацию и отличать обращения к кэшу от чтения.

VACUUM и autovacuum в PostgreSQL: почему таблица растёт

Почему таблица PostgreSQL растёт после UPDATE и DELETE, как проверить autovacuum, dead tuples, долгие транзакции и безопасно выбрать способ очистки.

Уровни изоляции PostgreSQL: READ COMMITTED и SERIALIZABLE

Как PostgreSQL 18 выполняет транзакции: snapshots в Read Committed и Repeatable Read, Serializable SSI, SQLSTATE 40001, deadlock 40P01 и безопасный повтор.