Справочник по SQL
Темы, которые спрашивают на собеседованиях по SQL. Каждый разбор — один сквозной пример, типовые ошибки и задачи с автопроверкой в браузере.
Найдено материалов: 27
Ничего не найдено. Попробуй другое слово или сбрось поиск.
Соединения и объединения
JOIN в SQL: виды соединений с примерами
INNER, LEFT, RIGHT, FULL и CROSS JOIN на одном примере из двух таблиц: что возвращает каждый вид, куда пропадают строки без пары и на чём ловят на собеседовании.
LEFT JOIN в SQL: примеры, NULL и поиск строк без пары
Как LEFT JOIN ведёт себя с NULL: антиджойн через IS NULL, фильтр в WHERE против ON, ошибка COUNT(*) при агрегатах и почему NOT IN возвращает пустоту.
UNION в SQL: объединение таблиц и разница с UNION ALL
Как UNION склеивает результаты запросов по строкам, чем отличается от UNION ALL и от JOIN, что делают INTERSECT и EXCEPT, где ломается порядок колонок.
Выборка и сортировка
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 и параметры запроса.
Группировка и подзапросы
GROUP BY и HAVING в SQL: группировка строк с примерами
Как GROUP BY схлопывает строки в группы, чем count(*) отличается от count(колонка) и почему WHERE и HAVING фильтруют разное. С ошибкой must appear in GROUP BY.
Подзапросы в SQL: виды, примеры, коррелированный подзапрос
Скалярный подзапрос, IN, EXISTS, производная таблица и подзапрос в SELECT на одном наборе заказов: чем коррелированный дороже и где на нём ошибаются.
EXISTS в SQL: как работает, NOT EXISTS vs NOT IN и ловушка NULL
Как EXISTS проверяет наличие строк, чем NOT EXISTS надёжнее NOT IN при NULL, что показывают планы Semi Join и Anti Join и что быстрее: EXISTS, IN или JOIN.
CTE (WITH) в SQL: что это, синтаксис и примеры запросов
Чем CTE отличается от подзапроса, как связать несколько WITH в цепочку, когда PostgreSQL материализует CTE и как работает WITH RECURSIVE с якорем и UNION ALL.
Оконные функции и аналитика
Оконные функции в SQL: примеры и синтаксис
OVER, PARTITION BY, ROW_NUMBER, RANK, LAG и накопительный итог на одном наборе заказов: чем окно отличается от GROUP BY, где прячется ловушка ROWS и RANGE и почему окно нельзя писать в WHERE.
Gaps and Islands в SQL: как найти непрерывные серии дат
Как найти непрерывные серии дат в PostgreSQL через ROW_NUMBER, сдвинутый ключ и GROUP BY. Разбор дублей, часовых поясов и допустимых разрывов.
Проектирование и производительность
Нормализация базы данных: 1НФ, 2НФ и 3НФ на примере
Как одна плоская таблица разваливается на users и orders. Три нормальные формы по шагам, аномалии вставки и удаления, замеры денормализации на 2 млн строк в PostgreSQL 16.
Индексы PostgreSQL: виды, CREATE INDEX и EXPLAIN
Виды индексов PostgreSQL: B-tree, составные, частичные и GIN. Команды CREATE INDEX, планы EXPLAIN ANALYZE и случаи, когда индекс не ускоряет запрос.
Ошибки и отладка
«You have an error in your SQL syntax»: разбор и фикс
Что означает «near ... at line N» в ошибке MySQL, почему опечатка стоит перед указанным местом, и разбор пяти частых причин с воспроизведением и исправлением.
«relation does not exist» в PostgreSQL: разбор и фикс
Почему PostgreSQL не находит таблицу или колонку: опечатка, чужая схема, кавычки и регистр, псевдоним вместо имени, алиас в WHERE и область видимости CTE.
Практика и собеседование
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 и безопасный повтор.