Перейти к основному содержимому

99 лучших вопросов и ответов по SQL для собеседований в 2026 году

Подготовьтесь к собеседованию с этим всеобъемлющим обзором важнейших вопросов и ответов по SQL для соискателей, руководителей по найму и рекрутеров.
Обновлено 30 апр. 2026 г.  · 15 мин читать

Независимо от того, ищете ли вы новую возможность применить свои навыки SQL или выступаете в роли руководителя по найму, который будет оценивать кандидата на открытую позицию, знание распространённых вопросов и ответов по SQL для собеседований обязательно.

В этой статье собраны 99 вопросов и ответов по SQL для собеседований в 2026 году. Они охватывают ключевые темы SQL и помогут вам эффективно готовиться, учиться и нанимать, включая:

  • Базовые знания: Чёткие определения СУБД, ключей и диалектов SQL.
  • Техническое мастерство: Подробный разбор DDL и DML, ограничений и индексации.
  • Логика запросов: Объяснение соединений, подзапросов и агрегатных функций.
  • Практическое применение: Реальные решения задач, например поиск n-го по величине значения или удаление дубликатов.
  • Вопросы по сценариям: Задачи в стиле собеседования, охватывающие скользящие суммы, обнаружение дубликатов, анализ пропусков и многое другое.

 Тем, кто хочет ещё больше прокачать знания и навыки, рекомендуем наши комплексные курсы по инженерии данных, облачным технологиям и AWS.

SQL: краткий обзор вопросов на собеседовании

Собеседования по SQL обычно отражают то, как люди на самом деле изучают язык.

На раннем этапе речь о словаре и грамматике: что такое join, как работает SELECT, и в чём разница между DDL и DML.

Со временем фокус смещается с «можете ли вы написать запрос» на «можете ли вы написать правильный запрос». Вы начинаете понимать, когда индекс помогает, почему важна нормализация и как по-разному «под капотом» ведут себя такие команды, как DELETE и TRUNCATE.

На уровне senior синтаксис считается само собой разумеющимся, и реальное испытание — это решение задач: обработка дубликатов, NULL, совпадающих значений и логики ранжирования с оконными функциями и CTE, а также рассуждение о транзакциях, параллелизме и производительности. 

Для специалистов среднего уровня

  1. Функции в SQL. Следует знать об агрегатных и скалярных функциях, а также о встроенных и пользовательских функциях.

  2. Продвинутые команды. Вопросы могут касаться соединений, первичных и внешних ключей, индексов и связей в SQL.

  3. Проектирование баз данных. Ожидайте вопросы о нормализации, денормализации и различиях между такими операторами, как DELETE, TRUNCATE и DROP.

  4. Сложные запросы. Могут спросить о подзапросах — вложенных и коррелированных — а также о решениях конкретных задач, например поиске n-го по величине значения в столбце.

Общие вопросы по SQL

Прежде чем перейти к технической части, интервьюер может задать общие вопросы о вашем опыте работы с SQL.

Не переживайте, если ваш опыт в SQL ограничен: скорее всего, интервьюер это уже видел в вашем резюме. Раз они заинтересованы в беседе, ваш профиль сочли подходящим для компании. Кроме того, вполне нормально, если вы работали только с одним диалектом SQL. Помните, что диалекты SQL довольно похожи. Поэтому знание одного из них — прочная база для изучения остальных.

1. Что такое SQL?

Аббревиатура от Structured Query Language — язык программирования для взаимодействия с системами управления реляционными базами данных (RDBMS). Включает извлечение, обновление, вставку и удаление данных из таблиц.

2. Что такое диалекты SQL? Приведите примеры.

Различные версии SQL, как бесплатные, так и коммерческие, также называют диалектами SQL. Все диалекты имеют очень схожий синтаксис и отличаются незначительно лишь дополнительным функционалом. Примеры: Microsoft SQL Server, PostgreSQL, MySQL, SQLite, T-SQL и Oracle.

3. Каковы основные области применения SQL?

С помощью SQL можно:

  • создавать, удалять и изменять таблицы в базе данных
  • получать доступ к данным в таблице, изменять и модифицировать их
  • извлекать и агрегировать нужную информацию из одной или нескольких таблиц
  • добавлять или удалять отдельные строки или столбцы таблицы

Вопросы по SQL для начинающих 

Интервьюер может начать с более простых вопросов:

4. Что такое оператор SQL?

Также известен как команда SQL. Это строка символов, которую движок SQL интерпретирует как корректную команду и выполняет соответствующим образом. Примеры операторов SQL: SELECT, CREATE, DELETE, DROP, REVOKE и т. д.

5. Что такое SQL-запрос?

Запрос — это фрагмент кода на SQL для доступа к данным в базе или их изменения.

Существуют два типа запросов: на извлечение данных и на их модификацию. Первые используются для выборки нужных данных (включая ограничение, группировку, сортировку, извлечение из нескольких таблиц и т. п.), вторые — для создания, добавления, удаления, обновления и переименования данных.

6. Что такое подзапрос в SQL?

Также называется внутренним запросом — запрос, помещённый внутрь другого (внешнего) запроса. Подзапрос может находиться в таких предложениях, как SELECT, FROM, WHERE, UPDATE и т. д. Возможна и вложенность подзапросов. Сначала выполняется самый внутренний подзапрос, а его результат передаётся во внешний запрос (или подзапрос).

7. Что такое соединение (join) в SQL?

Предложение, используемое для объединения и выборки записей из двух или нескольких таблиц. Таблицы соединяются на основании связи между их столбцами. Ознакомьтесь с нашим руководством по соединениям SQL и отдельной подборкой вопросов по join на собеседовании

8. Что такое комментарий в SQL?

Человеко-читаемое пояснение к тому, что делает конкретный фрагмент кода. Комментарии в SQL могут быть однострочными (предваряются двойным дефисом --) или многострочными (в виде /*comment_text*/). Движок SQL игнорирует комментарии при выполнении. Их цель — сделать код более понятным для будущих читателей.

9. Что такое псевдоним (alias) в SQL?

Временное имя, присваиваемое таблице (или столбцу в таблице) при выполнении конкретного запроса. Псевдонимы повышают читаемость и компактность кода. Псевдоним задаётся с помощью ключевого слова AS:

SELECT col_1 AS column
FROM table_name;

Технические вопросы по SQL

Теперь перейдём к техническим вопросам по SQL и возможным ответам на них.

Отвечая на технические вопросы, лучше всего давать максимально точные ответы. Иначе это может выглядеть как уход от темы и спровоцировать дополнительные вопросы, в которых вы менее уверены.

В целом, SQL позволяет по-разному обращаться к базе данных и легко интегрируется с другими языками, такими как Python или R, что позволяет использовать их совместно.

10. Какие типы команд SQL вы знаете?

  • Data Definition Language (DDL) — для определения и изменения структуры базы данных.
  • Data Manipulation Language (DML) — для доступа к данным, их изменения и модификации.
  • Data Control Language (DCL) — для управления доступом пользователей к данным и выдачи/отзыва привилегий отдельным пользователям или группам.
  • Transaction Control Language (TCL) — для управления транзакциями в базе данных.
  • Data Query Language (DQL) — для выполнения запросов к данным и извлечения необходимой информации.

11. Приведите примеры распространённых команд SQL.

  • DDL: CREATE, ALTER TABLE, DROP, TRUNCATE и ADD COLUMN

  • DML: UPDATE, DELETE и INSERT

  • DCL: GRANT и REVOKE

  • TCL: COMMIT, SET TRANSACTION, ROLLBACK и SAVEPOINT

  • DQL:SELECT

12. Что такое СУБД (DBMS) и какие типы СУБД вы знаете?

Database Management System — программный пакет для выполнения различных операций с данными, хранящимися в базе, таких как доступ, обновление, подготовка, вставка и удаление. Существуют разные типы СУБД: реляционные, иерархические, сетевые, графовые, объектно-ориентированные. Тип определяется способом организации, структурирования и хранения данных в системе.

13. Что такое RDBMS? Приведите примеры.

Relational Database Management System — самый распространённый тип СУБД для работы с данными, хранящимися в нескольких таблицах, связанных между собой общими ключами. Язык SQL предназначен для взаимодействия с RDBMS. Примеры: MySQL, PostgreSQL, Oracle, MariaDB и др.

14. Что такое таблицы и поля в SQL?

Таблица — организованный набор связанных данных в табличной форме, то есть в строках и столбцах. Поле — другое название столбца таблицы.

15. Какие типы подзапросов SQL вы знаете?

  • Однострочный — возвращает не более одной строки.
  • Многострочный — возвращает как минимум две строки.
  • Многоколоночный — возвращает как минимум два столбца.
  • Коррелированный — подзапрос, зависящий от данных внешнего запроса.
  • Вложенный — подзапрос внутри другого подзапроса.

16. Что такое ограничение (constraint) и зачем оно нужно?

Набор условий, определяющих тип данных, которые можно вводить в каждый столбец таблицы. Ограничения обеспечивают целостность данных и блокируют нежелательные действия.

17. Какие ограничения SQL вы знаете?

  • DEFAULT — задаёт значение по умолчанию для столбца.

  • UNIQUE — допускает только уникальные значения.

  • NOT NULL — допускает только ненулевые значения.

  • PRIMARY KEY — допускает только уникальные и строго ненулевые значения (NOT NULL и UNIQUE).

  • FOREIGN KEY — задаёт связь (общие ключи) между двумя и более таблицами.

18. Какие типы соединений (join) вы знаете?

  • (INNER) JOIN — возвращает только те записи, которые удовлетворяют условию соединения в обеих (или всех) таблицах. Это соединение по умолчанию в SQL.

  • LEFT (OUTER) JOIN — возвращает все записи из левой таблицы и те записи из правой, которые удовлетворяют условию соединения.

  • RIGHT (OUTER) JOIN — возвращает все записи из правой таблицы и те записи из левой, которые удовлетворяют условию соединения.

  • FULL (OUTER) JOIN — возвращает все записи из обеих (или всех) таблиц. Можно рассматривать как комбинацию левого и правого соединений.

Примечание: FULL OUTER JOIN поддерживается в PostgreSQL, SQL Server, Oracle и MySQL 8.0+, но в MySQL он доступен только через шаблоны UNION; при этом SQLite не поддерживает RIGHT JOIN, который можно сэмулировать с помощью LEFT JOIN в комбинации с UNION.

19. Что такое первичный ключ (primary key) в SQL?

Столбец (или несколько столбцов) таблицы, к которому применено ограничение PRIMARY KEY для обеспечения уникальных и ненулевых значений. Иными словами, первичный ключ — это сочетание ограничений NOT NULL и UNIQUE. Первичный ключ однозначно идентифицирует каждую запись таблицы.

Связанный термин — суррогатный ключ: суррогатный ключ — это искусственно сгенерированный идентификатор (обычно последовательное целое число или UUID), назначаемый каждой записи независимо от фактических значений данных. В отличие от естественных ключей (например, адрес электронной почты) суррогатные ключи остаются стабильными при изменении бизнес-данных, поэтому часто используются в качестве первичных ключей в промышленных базах данных.

 В каждой таблице можно определить не более одного первичного ключа (который может быть составным). PRIMARY KEY  настоятельно рекомендуется, но не во всех СУБД строго обязателен.

20. Что такое уникальный ключ (unique key) в SQL?

Столбец (или несколько столбцов) таблицы, к которому применено ограничение UNIQUE для обеспечения уникальности значений в этом столбце, включая возможное значение NULL (только одно).

Примечание

  • SQL Server: Допускается только одно значение NULL, если только не используется фильтрованный индекс.
  • PostgreSQL / Oracle / MySQL: Допускаются несколько значений NULL, поскольку NULL <> NULL.

21. Что такое внешний ключ (foreign key) в SQL? 

Столбец (или несколько столбцов) таблицы, к которому применено ограничение FOREIGN KEY (или ключ UNIQUE), чтобы связать этот столбец с первичным ключом в другой таблице (или нескольких таблицах). Назначение внешних ключей — поддерживать связь между различными таблицами базы данных.

22. Что такое индекс в SQL?

Специальная структура данных, связанная с таблицей, которая хранит важные части данных и обеспечивает более быстрый поиск и извлечение. Индексы особенно эффективны для больших баз, где они существенно ускоряют выполнение запросов.

23. Какие типы индексов вы знаете?

  • Уникальный индекс — не допускает дубликатов в столбце таблицы и тем самым помогает поддерживать целостность данных.
  • Кластеризованный индекс — определяет физический порядок записей таблицы и выполняет поиск по ключевым значениям. У таблицы может быть только один кластеризованный индекс.
  • Некластеризованный индекс — поддерживает порядок записей, не совпадающий с физическим порядком данных на диске. Данные хранятся в одном месте, а некластеризованный индекс — в другом. У таблицы может быть несколько некластеризованных индексов.

24. Что такое схема?

Набор структурных объектов базы данных: таблицы, хранимые процедуры, индексы, функции, триггеры. Схема отражает общую архитектуру базы, задаёт связи между объектами и определяет права доступа к ним. Подробнее см. в нашем гайде по схемам баз данных.

25. Что такое оператор в SQL?

Зарезервированный символ, комбинация символов или ключевое слово, используемые в запросах SQL для выполнения определённой операции. Операторы часто применяются с предложением WHERE для задания условий фильтрации данных.

26. Какие типы операторов SQL вы знаете?

  • Арифметические (+, -, *, / и др.)

  • Сравнения (>, <, =, >= и др.)

  • Составные (+=, -=, *=, /= и др.)

  • Логические (AND, OR, NOT, BETWEEN и др.)

  • Строковые (%, _, +, ^ и др.)

  • Множеств (UNION, UNION ALL, INTERSECT и MINUS (или EXCEPT))

27. Что такое предложение (clause)?

Условие, накладываемое на SQL-запрос для фильтрации данных и получения нужного результата. Примеры: WHERE, LIMIT, HAVING, LIKE, AND, OR, ORDER BY и т. д.

28. Какие предложения чаще всего используются с запросом SELECT?

Самые распространённые: FROM, GROUP BY, JOIN, WHERE, ORDER BY, LIMIT и HAVING.

29. Как создать таблицу в SQL?

С помощью оператора CREATE TABLE. Например, чтобы создать таблицу с тремя столбцами предопределённых типов данных, используем синтаксис:

CREATE TABLE table_name (col_1 datatype,
                         col_2 datatype,
                         col_3 datatype);

30. Как обновить таблицу?

С помощью оператора UPDATE. Синтаксис:

UPDATE table_name
SET col_1 = value_1, col_2 = value_2
WHERE condition;

31. Как удалить таблицу из базы данных?

С помощью оператора DROP TABLE. Синтаксис: DROP TABLE table_name;.

32. Как получить количество записей в таблице?

С помощью агрегатной функции COUNT() с символом звёздочки в качестве аргумента: SELECT COUNT(*) FROM table_name;.

33. Как отсортировать записи в таблице?

С помощью предложения ORDER BY:

SELECT * FROM table_name
ORDER BY col_1;

Можно указать убывающий порядок с помощью ключевого слова DESC; иначе по умолчанию будет возрастание. Также можно сортировать по нескольким столбцам и отдельно задавать порядок для каждого. Например:

SELECT * FROM table_name
ORDER BY col_1 DESC, col_3, col_6 DESC;

34. Как выбрать все столбцы из таблицы?

С помощью звёздочки * в операторе SELECT. Синтаксис: SELECT * FROM table_name;.

35. Как выбрать общие записи из двух таблиц?

С помощью оператора INTERSECT:

SELECT col1, col2 FROM table_1
INTERSECT
SELECT col1, col2 FROM table_2;

Примечание: INTERSECT требует одинакового числа столбцов и совместимых типов.

36. Что такое оператор DISTINCT и как им пользоваться?

Этот оператор используется с SELECT для удаления дубликатов и возврата только уникальных значений столбца. Синтаксис:

SELECT DISTINCT col_1
FROM table_name;

37. Что такое связи (relationships)? Приведите примеры.

Связи — это отношения и корреляции между сущностями, то есть как две и более таблицы базы данных соотносятся друг с другом. Например, идентификатор одного и того же клиента можно найти и в таблице продаж, и в клиентской таблице.

38. Что такое значение NULL? Чем оно отличается от нуля или пустой строки?

Значение NULL означает отсутствие данных для конкретной ячейки таблицы. Ноль — это корректное числовое значение, а пустая строка — допустимая строка нулевой длины.

39. В чём разница между SQL и NoSQL?

Базы SQL — реляционные, структурированные, используют таблицы с предопределёнными схемами; базы NoSQL — нереляционные, без фиксированной схемы, спроектированы для работы с неструктурированными или полуструктурированными данными.

40. С какими трудностями чаще всего сталкиваются при работе с базами SQL?

Сложности включают оптимизацию производительности на больших наборах данных, управление стратегиями индексации, обеспечение целостности данных с ограничениями, обработку конкурентных транзакций и оптимизацию выполнения запросов.

Вопросы по SQL среднего уровня

41. Что такое Common Table Expression (CTE)?

Общее табличное выражение (CTE) — это временный именованный набор результатов, который можно использовать в операторах SELECT, INSERT, UPDATE или DELETE. CTE повышают читаемость запросов и позволяют разбивать сложные запросы на более простые, многократно используемые части. Синтаксис использует ключевое слово WITH:

WITH sales_summary AS (
  SELECT product_id, SUM(amount) AS total_sales
  FROM sales
  GROUP BY product_id
)
SELECT p.product_name, s.total_sales
FROM products p
JOIN sales_summary s ON p.id = s.product_id
WHERE s.total_sales > 10000;

CTE особенно полезны для рекурсивных запросов (иерархические данные, например оргструктуры) и когда нужно несколько раз ссылаться на один и тот же подзапрос.

42. Что такое оконные функции и чем они отличаются от агрегатных?

Оконные функции выполняют вычисления по набору строк, связанных с текущей строкой, не сворачивая результат в одну строку, как это делают агрегатные функции. Они используют предложение OVER() для определения окна строк.

Ключевые оконные функции:

  • ROW_NUMBER() — присваивает каждой строке уникальный последовательный номер
  • RANK() — присваивает ранг с пропусками при равенствах
  • DENSE_RANK() — присваивает ранг без пропусков при равенствах
  • LAG() / LEAD() — доступ к данным из предыдущей/следующей строки
  • SUM() OVER(), AVG() OVER() — скользящие или накопительные вычисления

Пример: расчёт накопительного итога продаж

SELECT 
  order_date,
  amount,
  SUM(amount) OVER (ORDER BY order_date) AS running_total
FROM orders;

43. В чём разница между RANK(), DENSE_RANK() и ROW_NUMBER()?

Все три — ранжирующие оконные функции, но по-разному обрабатывают равенства:

  • ROW_NUMBER() — всегда присваивает уникальные последовательные номера (1, 2, 3, 4...), даже при равенствах
  • RANK() — присваивает одинаковый ранг при равенствах, затем пропускает номера (1, 2, 2, 4...)
  • DENSE_RANK() — присваивает одинаковый ранг при равенствах без пропусков (1, 2, 2, 3...)
SELECT 
  name, 
  score,
  ROW_NUMBER() OVER (ORDER BY score DESC) AS row_num,
  RANK() OVER (ORDER BY score DESC) AS rank,
  DENSE_RANK() OVER (ORDER BY score DESC) AS dense_rank
FROM students;

Используйте DENSE_RANK() при поиске «n-го по величине» значения, где равные значения должны иметь одну позицию.

В этом разделе рассмотрим самые популярные вопросы и ответы среднего уровня, чтобы вы знали, чего ожидать от интервьюера.

44. Что такое функция в SQL?

Объект базы данных, представляющий набор операторов SQL для часто выполняемой задачи. Функция принимает входные параметры, выполняет над ними вычисления или другую обработку и возвращает результат. Функции повышают читаемость кода и помогают избежать дублирования.

45. Какие типы функций SQL вы знаете?

  • Агрегатные функции — работают по нескольким (обычно сгруппированным) записям для заданных столбцов и возвращают одно значение (обычно на группу).
  • Скалярные функции — работают с каждым отдельным значением и возвращают одно значение.

Функции SQL бывают встроенными (системными) и пользовательскими (созданными пользователем под конкретные нужды).

46. Какие агрегатные функции SQL вы знаете?

  • AVG() — возвращает среднее значение

  • SUM() — возвращает сумму значений

  • MIN() — возвращает минимум

  • MAX() — возвращает максимум

  • COUNT() — возвращает число строк, включая строки с NULL

47. Какие скалярные функции SQL вы знаете?

  • LEN() (в других диалектах SQL — LENGTH()) — возвращает длину строки, включая пробелы

  • UCASE() (в других диалектах SQL — UPPER()) — возвращает строку в верхнем регистре

  • LCASE() (в других диалектах SQL — LOWER()) — возвращает строку в нижнем регистре

  • INITCAP() — возвращает строку в «титульном» регистре (каждое слово с заглавной буквы)

  • MID() (в других диалектах SQL — SUBSTR()) — извлекает подстроку из строки

  • ROUND() — округляет числовое значение до заданного числа знаков

  • NOW() — возвращает текущие дату и время

48. Что такое функции изменения регистра в SQL?

Это подмножество символьных функций, используемых для изменения регистра текстовых данных. С их помощью можно преобразовывать текст в верхний, нижний или титульный регистр.

  • UCASE() (в других диалектах SQL — UPPER()) — верхний регистр

  • LCASE() (в других диалектах SQL — LOWER()) — нижний регистр

  • INITCAP() — титульный регистр

49. Что такое функции обработки строк в SQL?

Это подмножество символьных функций, предназначенных для модификации текстовых данных.

  • CONCAT() — объединяет две и более строки, добавляя вторую в конец первой

  • SUBSTRING()/SUBSTR() — возвращает часть строки по заданным позициям начала и конца

  • LENGTH() (в других диалектах SQL — LEN()) — длина строки, включая пробелы

  • REPLACE() — заменяет все вхождения подстроки в заданной строке другой подстрокой

  • INSTR() — возвращает числовую позицию подстроки в строке

  • LPAD() и RPAD() — добавляют символы слева/справа для выравнивания по правому/левому краю

  • TRIM() — удаляет заданные символы и пробелы слева, справа или с обеих сторон строки

50. В чём разница между локальными и глобальными переменными?

Локальные переменные доступны только внутри функции, в которой объявлены. Глобальные, объявленные вне функций, хранятся в фиксированных структурах памяти и доступны по всей программе.

51. В чём разница между SQL и PL/SQL?

SQL — стандартный язык для запросов и управления реляционными базами данных, в первую очередь для манипулирования и извлечения данных. PL/SQL (Procedural Language/SQL) — расширение SQL, используемое в базах Oracle, которое включает процедурные конструкции (циклы, условия, обработку исключений), позволяя реализовывать сложную бизнес-логику на стороне базы. У нас есть отдельная статья Top 20 PL/SQL Interview Questions and Answers, которая пригодится, если вас спросят об Oracle. 

52. В чём разница между LEFT JOIN и LEFT OUTER JOIN?

Разницы между LEFT JOIN и LEFT OUTER JOIN нет. Это взаимозаменяемые варианты. В SQL ключевое слово OUTER является необязательным, поэтому LEFT JOIN — это просто сокращение для LEFT OUTER JOIN. Обе конструкции возвращают все записи из левой таблицы и совпадающие записи из правой.

53. Что такое индексация в SQL и как она улучшает производительность?

Индексация создаёт специальную структуру данных, ускоряющую извлечение, позволяя базе эффективнее находить строки. Это аналог оптимизированной таблицы поиска, снижающей необходимость в полном сканировании таблицы. Однако избыток индексов замедляет операции вставки, обновления и удаления из‑за необходимости их обслуживания.

54. Что такое хранимая процедура и чем она отличается от функции?

Хранимая процедура — это предварительно скомпилированный набор операторов SQL, выполняемый как единое целое для решения задачи. Процедуры могут изменять данные или объекты схемы, управлять транзакциями и возвращать ноль или более наборов результатов. Функции, напротив, обычно используются в выражениях SQL, обязаны возвращать значение (скалярное или табличное) и во многих СУБД ограничены на побочные эффекты. Точное поведение зависит от СУБД (например, в T‑SQL есть скалярные и табличные функции; в PostgreSQL различают функции и процедуры).

55. Какой порядок сортировки по умолчанию в ORDER BY и как его изменить?

По умолчанию — по возрастанию (NULLS FIRST/LAST зависит от СУБД). Используйте ключевые слова ASC/DESC для каждого столбца, например:

SELECT * FROM table_name 
ORDER BY col_1 DESC;

56. Что такое операторы множеств в SQL?

  • UNION — возвращает записи, полученные хотя бы одним из двух запросов (без дубликатов)

  • UNION ALL — возвращает записи, полученные хотя бы одним из двух запросов (с дубликатами)

  • INTERSECT — возвращает записи, полученные обоими запросами

  • EXCEPT (в MySQL и Oracle — MINUS) — возвращает записи, полученные только первым запросом, но не вторым

57. Какой оператор используется для поиска по шаблону?

Оператор LIKE в сочетании с подстановочными знаками % и _. % представляет любое количество символов, включая ноль, а _ — ровно один символ.

58. В чём разница между первичным и уникальным ключами?

Оба типа ключей обеспечивают уникальность значений в столбце, но первый однозначно идентифицирует каждую запись таблицы, а второй предотвращает дублирование в этом столбце.

59. Что такое составной первичный ключ?

Первичный ключ таблицы, основанный на нескольких столбцах.

60. Каков типичный порядок предложений в операторе SELECT?

SELECTFROMJOINONWHEREGROUP BYHAVINGORDER BYLIMIT

61. В каком порядке интерпретатор выполняет предложения в SELECT?

Вот порядок выполнения SQL

FROMONJOINWHEREGROUP BYHAVINGSELECTORDER BYLIMIT/OFFSET (FETCH)

62. Что такое представление (view) в SQL?

Виртуальная таблица, содержащая подмножество данных, извлечённых из одной или нескольких таблиц базы данных (или других представлений). Обычные представления не хранят данные; материализованные представления — хранят. Представления упрощают запросы, инкапсулируют логику и, в сочетании с привилегиями, ограничивают доступ к столбцам/строкам. Они могут объединять/агрегировать данные из нескольких таблиц.

63. Можно ли создать представление на основе другого представления?

Да. Это также называют вложенными представлениями. Однако не стоит злоупотреблять вложенностью — код становится трудно читать и отлаживать.

64. Можно ли использовать представление, если исходная таблица удалена?

Нет. Любые представления на основе этой таблицы станут недействительными. Попытка их использовать приведёт к ошибке.

65. Какие типы связей в SQL вы знаете?

  • Один к одному — каждая запись одной таблицы соответствует только одной записи другой
  • Один ко многим — каждой записи одной таблицы соответствуют несколько записей другой
  • Многие ко многим — каждой записи обеих таблиц соответствуют несколько записей другой

66. Какие возможные значения у поля типа BOOLEAN?

В некоторых диалектах, например PostgreSQL, тип BOOLEAN существует явно и принимает значения TRUE, FALSE или NULL. В других, например Microsoft SQL Server, для хранения логических значений как целых используется тип BIT: 1 (истина) или 0 (ложь).

67. Что такое нормализация в SQL?

Нормализация — процесс проектирования базы, включающий организацию и реструктуризацию данных с целью уменьшения избыточности, зависимостей, дублирования и несогласованности. Это повышает целостность данных, увеличивает число таблиц, улучшает эффективность доступа и контроля безопасности, а также гибкость запросов.

68. Что такое денормализация в SQL?

Денормализация — противоположный процесс: вводит избыточность данных и объединяет данные из нескольких таблиц. Она оптимизирует производительность инфраструктуры базы в ситуациях, когда чтение важнее записи, поскольку помогает избежать сложных соединений и сокращает время выполнения запросов.

69. В чём разница между переименованием столбца и присвоением ему псевдонима?

Переименование — это постоянное изменение реального имени столбца в исходной таблице. Псевдоним — временное имя при выполнении запроса SQL для повышения читаемости и компактности кода.

70. В чём разница между вложенными и коррелированными подзапросами?

Коррелированный подзапрос — это внутренний запрос внутри внешнего, который для выполнения ссылается на значения из внешнего запроса, то есть зависит от него. Некоррелированный подзапрос не зависит от данных внешнего запроса и может выполняться самостоятельно.

71. В чём разница между кластеризованными и некластеризованными индексами?

Кластеризованный индекс определяет физический порядок записей в таблице и выполняет поиск по ключевым значениям, тогда как некластеризованный поддерживает порядок записей, не совпадающий с физическим порядком данных на диске. У таблицы может быть только один кластеризованный индекс, но много некластеризованных.

72. Что такое функция CASE()?

Способ реализовать логику if-then-else в SQL. Функция последовательно проверяет условия в предложениях WHEN и возвращает значение из соответствующего THEN при первом совпадении. Если ни одно условие не выполнено, возвращает значение из ELSE (если задано), иначе — NULL. Синтаксис:

CASE
    WHEN condition_1 THEN value_1
    WHEN condition_2 THEN value_2
    WHEN condition_3 THEN value_3
    ...
    ELSE value
END;

73. В чём разница между операторами DELETE и TRUNCATE?

DELETE — команда DML (язык манипулирования данными) для удаления одной или нескольких строк из таблицы на основе условия в WHERE. Обратима только в транзакции (через ROLLBACK).

TRUNCATE — команда DDL (язык определения данных), которая удаляет все строки из таблицы путём deallocation страниц. Работает быстрее, но, как правило, необратима и не может применяться к таблицам, на которые ссылаются внешние ключи.

74. В чём разница между операторами DROP и TRUNCATE?

DROP полностью удаляет таблицу из базы, включая структуру, связанные ограничения, связи с другими таблицами и привилегии доступа. TRUNCATE удаляет все строки из таблицы, не затрагивая её структуру и ограничения.  Оба — DDL. DROP удаляет таблицу и метаданные; TRUNCATE удаляет все строки, но сохраняет определение таблицы. Поведение по производительности и транзакциям зависит от СУБД.

75. В чём разница между предложениями HAVING и WHERE?

Первое применяется к агрегированным данным после группировки, второе — проверяет каждую строку по отдельности. Если оба присутствуют в запросе, их порядок таков:WHEREGROUP BYHAVING. Движок SQL интерпретирует их в том же порядке.

76. Как добавить запись в таблицу?

С помощью оператора INSERT INTO в сочетании с VALUES. Синтаксис:

INSERT INTO table_name
VALUES (value_1, value_2, ...);

77. Как удалить запись из таблицы?

С помощью оператора DELETE. Синтаксис:

DELETE FROM table_name
WHERE condition;

Таким образом можно удалить и несколько записей, если они удовлетворяют условию.

78. Как добавить столбец в таблицу?

С помощью оператора ALTER TABLE в сочетании с ADD. Синтаксис:

ALTER TABLE table_name
ADD column_name datatype;

79. Как переименовать столбец таблицы?

С помощью оператора ALTER TABLE в сочетании с RENAME COLUMN ... TO .... Синтаксис:

ALTER TABLE table_name
RENAME COLUMN old_column_name TO new_column_name;

80. Как удалить столбец из таблицы?

С помощью оператора ALTER TABLE в сочетании с DROP COLUMN. Синтаксис:

ALTER TABLE table_name
DROP COLUMN column_name;

81. Как выбрать все чётные или все нечётные записи в таблице?

По остатку от деления на 2. В некоторых версиях SQL (например, PostgreSQL и MySQL) используем функцию MOD, в других (Microsoft SQL Server и SQLite) — оператор модуля (%). Чтобы выбрать все чётные записи с MOD:

SELECT * FROM table_name
WHERE MOD(ID_column, 2) = 0;

Чтобы выбрать все чётные записи с %:

SELECT * FROM table_name 
WHERE ID_column % 2 = 0;

Для нечётных записей синтаксис тот же, только используется оператор неравенства <> вместо =.

82. Как предотвратить дублирование записей при выполнении запроса?

С помощью оператора DISTINCT с SELECT или путём создания уникального ключа для таблицы.

83. Как вставить несколько строк в таблицу?

С помощью INSERT INTO в сочетании с VALUES. Синтаксис:

INSERT INTO table_name
VALUES (value_1, value_2, ...),
      (value_3, value_4, ...),
      (value_5, value_6, ...),
      ...;

84. Как найти n-е по величине значение в столбце?

Используйте оконные функции для корректной обработки равенств:

SELECT column_name
FROM (
  SELECT column_name, DENSE_RANK() OVER (ORDER BY column_name DESC) AS rnk
  FROM table_name
) t
WHERE rnk = :n;

Для n-й строки по порядку (игнорируя равенства): ORDER BY column_name DESC OFFSET n-1 ROWS FETCH NEXT 1 ROW ONLY.

85. Как найти значения в текстовом столбце, начинающиеся с определённой буквы?

С помощью оператора LIKE и подстановочных знаков % и _. Например, нужно найти все фамилии, начинающиеся на «A». Запрос:

SELECT * FROM table_name
WHERE surname LIKE 'A_';

Здесь предполагается, что фамилия содержит минимум две буквы. Без этого предположения (если фамилия может быть просто A) запрос будет таким:

SELECT * FROM table_name
WHERE surname LIKE 'A%';

86. Как найти последний id в таблице?

Самый простой способ — использовать агрегатную функцию MAX().

SELECT MAX(id) AS highest_id
FROM table_name;

С использованием ORDER BY и LIMIT или TOP

SELECT id
FROM table_name
ORDER BY id DESC
LIMIT 1;

87. Как выбрать случайные строки из таблицы?

С помощью функции RAND() в сочетании с ORDER BY и LIMIT. В некоторых диалектах, например PostgreSQL, она называется RANDOM(). Например, следующий код вернёт пять случайных строк в MySQL:

SELECT * FROM table_name
ORDER BY RAND()
LIMIT 5;

Сценарные вопросы по SQL

Сценарные вопросы проверяют вашу способность решать реальные бизнес-задачи с помощью SQL. Они оценивают не только знание синтаксиса, но и подход к решению проблем и умение обрабатывать крайние случаи — дубликаты, значения NULL и равенства.

88. Как найти и удалить дубликаты записей в таблице?

Поиск дубликатов:

SELECT email, COUNT(*) AS duplicate_count
FROM users
GROUP BY email
HAVING COUNT(*) > 1;

Удаление дубликатов (с сохранением одной записи):

WITH duplicates AS (
  SELECT id, 
         ROW_NUMBER() OVER (PARTITION BY email ORDER BY id) AS rn
  FROM users
)
DELETE FROM users 
WHERE id IN (SELECT id FROM duplicates WHERE rn > 1);

Этот подход использует CTE с ROW_NUMBER() для идентификации дубликатов, оставляя запись с наименьшим ID.

89. Как посчитать скользящую сумму (накопительный итог)?

Используйте оконную функцию SUM() с предложением ORDER BY:

SELECT 
  transaction_date,
  amount,
  SUM(amount) OVER (ORDER BY transaction_date) AS running_total
FROM transactions;

Для накопительного итога по категории (например, по клиенту):

SELECT 
  customer_id,
  transaction_date,
  amount,
  SUM(amount) OVER (
    PARTITION BY customer_id 
    ORDER BY transaction_date
  ) AS customer_running_total
FROM transactions;

90. Как найти сотрудников, чья зарплата выше средней по отделу?

Классический случай для коррелированного подзапроса:

SELECT e.name, e.department, e.salary
FROM employees e
WHERE e.salary > (
  SELECT AVG(salary) 
  FROM employees 
  WHERE department = e.department
);

Альтернатива — оконная функция:

SELECT name, department, salary
FROM (
  SELECT 
    name, 
    department, 
    salary,
    AVG(salary) OVER (PARTITION BY department) AS dept_avg
  FROM employees
) t
WHERE salary > dept_avg;

91. Как найти пропуски в последовательности чисел (например, отсутствующие номера счетов)?

Используйте LEAD() для сравнения значения со следующим:

SELECT 
  invoice_number,
  LEAD(invoice_number) OVER (ORDER BY invoice_number) AS next_invoice,
  LEAD(invoice_number) OVER (ORDER BY invoice_number) - invoice_number - 1 AS gap_size
FROM invoices
WHERE LEAD(invoice_number) OVER (ORDER BY invoice_number) - invoice_number > 1;

Так можно определить, где разница между соседними номерами больше 1.

92. Как найти клиентов, совершавших покупки в последовательные месяцы?

Используйте LAG() для сравнения с предыдущей строкой:

WITH monthly_purchases AS (
  SELECT 
    customer_id,
    DATE_TRUNC('month', purchase_date) AS purchase_month,
    LAG(DATE_TRUNC('month', purchase_date)) OVER (
      PARTITION BY customer_id 
      ORDER BY DATE_TRUNC('month', purchase_date)
    ) AS prev_month
  FROM purchases
  GROUP BY customer_id, DATE_TRUNC('month', purchase_date)
)
SELECT DISTINCT customer_id
FROM monthly_purchases
WHERE purchase_month = prev_month + INTERVAL '1 month';

93. Как преобразовать строки в столбцы (pivot)?

Используйте условную агрегацию с CASE:

SELECT 
  product_name,
  SUM(CASE WHEN EXTRACT(MONTH FROM sale_date) = 1 THEN amount ELSE 0 END) AS jan_sales,
  SUM(CASE WHEN EXTRACT(MONTH FROM sale_date) = 2 THEN amount ELSE 0 END) AS feb_sales,
  SUM(CASE WHEN EXTRACT(MONTH FROM sale_date) = 3 THEN amount ELSE 0 END) AS mar_sales
FROM sales
GROUP BY product_name;

В некоторых СУБД (SQL Server, Oracle) есть нативный синтаксис PIVOT для этой операции.

94. Как найти топ-3 продукта по продажам в каждой категории?

Используйте DENSE_RANK() с PARTITION BY:

WITH ranked_products AS (
  SELECT 
    category,
    product_name,
    SUM(sales_amount) AS total_sales,
    DENSE_RANK() OVER (
      PARTITION BY category 
      ORDER BY SUM(sales_amount) DESC
    ) AS sales_rank
  FROM sales
  GROUP BY category, product_name
)
SELECT category, product_name, total_sales
FROM ranked_products
WHERE sales_rank <= 3
ORDER BY category, sales_rank;

95. Что такое свойства ACID в транзакциях?

ACID — акроним четырёх ключевых свойств, гарантирующих надёжные транзакции в базе данных:

  • Атомарность: Транзакция выполняется «всё или ничего» — либо все операции завершены успешно, либо ни одна
  • Согласованность: Транзакция переводит базу из одного корректного состояния в другое, соблюдая все правила и ограничения
  • Изоляция: Параллельные транзакции не мешают друг другу; каждая видит согласованный снимок данных
  • Надёжность: После фиксации изменения сохраняются даже при сбое системы

Пример транзакции:

BEGIN TRANSACTION;

UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;

COMMIT;

96. Что такое взаимоблокировка (deadlock) и как её предотвратить?

Взаимоблокировка возникает, когда две и более транзакции ждут освобождения блокировок друг от друга, образуя циклическую зависимость, и ни одна не может продолжиться.

Пример: Транзакция A блокирует таблицу X и ждёт таблицу Y, а транзакция B блокирует таблицу Y и ждёт таблицу X.

Стратегии предотвращения:

  • Единый порядок блокировок: Во всех транзакциях получать блокировки в одном порядке
  • Короткие транзакции: Фиксировать или откатывать как можно быстрее
  • Подходящие уровни изоляции: Более низкие уровни снижают конкуренцию за блокировки
  • Доступ только к нужным данным: Не блокировать лишние строки
  • Обработка повторов при дедлоке: Большинство СУБД автоматически выявляют и разрешают дедлоки, откатывая одну транзакцию

97. Как оптимизировать медленно работающий SQL-запрос?

Ключевые подходы:

  • Добавьте подходящие индексы: Индексируйте столбцы из WHERE, JOIN и ORDER BY

  • Анализируйте планы выполнения: Используйте EXPLAIN (PostgreSQL/MySQL) или EXPLAIN PLAN (Oracle) для поиска узких мест

  • Избегайте SELECT *: Выбирайте только нужные столбцы

  • Предпочитайте JOIN подзапросам: JOIN часто эффективнее коррелированных подзапросов

  • Ограничивайте выборку: Используйте LIMIT/TOP, если не нужны все строки

  • Не применяйте функции к индексируемым столбцам: WHERE YEAR(date_col) = 2026 не использует индекс; лучше WHERE date_col >= '2026-01-01'

  • Рассмотрите партиционирование: Для очень больших таблиц — по дате или категории

98. Как обрабатывать значения NULL в вычислениях и сравнениях?

NULL обозначает отсутствующие или неизвестные данные и требует особого подхода:

  • Сравнения: Используйте IS NULL или IS NOT NULL вместо = NULL

  • COALESCE(): Возвращает первое не-NULL значение: COALESCE(column, 'default')

  • NULLIF(): Возвращает NULL, если два значения равны: NULLIF(a, b)

  • ISNULL() / NVL(): Специфичные для СУБД функции для замены NULL

SELECT 
  name,
  COALESCE(phone, email, 'No contact') AS contact_info,
  CASE WHEN status IS NULL THEN 'Unknown' ELSE status END AS status
FROM customers;

99. Как найти самую длинную серию последовательных дней входа пользователя?

Это продвинутая задача «острова и разрывы»:

WITH login_groups AS (
  SELECT 
    user_id,
    login_date,
    login_date - ROW_NUMBER() OVER (
      PARTITION BY user_id 
      ORDER BY login_date
    ) * INTERVAL '1 day' AS group_id
  FROM user_logins
)
SELECT 
  user_id,
  MIN(login_date) AS streak_start,
  MAX(login_date) AS streak_end,
  COUNT(*) AS streak_length
FROM login_groups
GROUP BY user_id, group_id
ORDER BY streak_length DESC
LIMIT 1;

Хитрость в вычитании номера строки из каждой даты — последовательные даты дадут одинаковый «group_id».

Прокачка команды в SQL

Подготовка к собеседованиям по SQL важна для соискателей и нанимающих менеджеров, но не менее важно компаниям инвестировать в непрерывное обучение SQL для своих команд. Умение работать с данными сегодня как никогда важно, и сильные навыки SQL у сотрудников могут серьёзно повлиять на успех компании.

Если вы руководитель команды или владелец бизнеса и хотите, чтобы вся команда уверенно владела SQL, DataCamp for Business предлагает адаптированные программы обучения — от азов до продвинутых концепций. Мы можем предоставить:

  • Точечные учебные треки: Настраиваются под текущий уровень и задачи вашего бизнеса.
  • Практика «на руках»: Реальные сценарии и упражнения для закрепления знаний и повышения их усвоения.
  • Отслеживание прогресса: Инструменты мониторинга и оценки результатов, чтобы команда достигала целей обучения.

Инвестиции в развитие SQL через платформы вроде DataCamp не только усиливают компетенции команды, но и дают вашему бизнесу стратегическое преимущество, помогая оставаться конкурентоспособными и достигать результатов. Свяжитесь с нашей командой и запросите демо

Заключение

Подытожим: мы рассмотрели 99 ключевых вопросов по SQL — от базовых до среднего уровня и сценарных — и правильные ответы на них. Надеемся, эта информация поможет вам подготовиться к собеседованию и чувствовать себя увереннее — будь вы соискателем на роль с SQL или нанимающим на позицию со средним уровнем SQL.

Если вам нужна дополнительная практика, посмотрите наш полный список курсов по SQL:

FAQs

Как начать изучать SQL?

Чтобы начать изучать SQL, начните с основ баз данных и реляционных СУБД. На DataCamp есть множество материалов, например курс Introduction to SQL, карьерный трек Data Analyst in SQL и шпаргалка по основам SQL. Или перейдите на страницу SQL courses, чтобы просмотреть все ресурсы.

Где найти реальные задачи по SQL для практики?

На платформе DataCamp есть множество проектов по SQL для отработки навыков, подходящих для любого уровня.

Какие вопросы по SQL часто задают новичкам?

Новичков часто просят объяснить базовые концепции SQL, например разницу между операторами SELECT и INSERT, назначение ключей в базе (первичные и внешние ключи), а также написать простые запросы для выборки данных из одной таблицы с условиями (WHERE).

Какие вопросы по SQL часто задают специалистам среднего уровня?

Специалистам среднего уровня могут попадаться вопросы по более сложным концепциям SQL: соединения (INNER, LEFT, RIGHT, FULL), подзапросы, агрегации и группировка (GROUP BY), использование операторов множеств — UNION, INTERSECT и EXCEPT. Также могут попросить оптимизировать запросы по производительности.

Как подготовиться к собеседованию по SQL?

Подготовка к собеседованию по SQL должна включать:

  • Повторение базовых и продвинутых концепций SQL.
  • Практику написания запросов для решения типовых задач.
  • Понимание проектирования БД и нормализации.
  • Знакомство с конкретным диалектом SQL, используемым работодателем (например, PostgreSQL, MySQL, SQL Server).
  • Решение примеров вопросов и задач из открытых источников.

Чего ожидать на техническом собеседовании по SQL и как лучше показать свои навыки?

В техническом собеседовании по SQL ожидайте вопросы, проверяющие знание синтаксиса SQL, проектирования БД, оптимизации запросов и навыков решения задач с помощью SQL. Чтобы продемонстрировать навыки:

  • Практикуйтесь проговаривать ход мыслей при решении задач.
  • Будьте готовы писать безошибочные запросы на доске или в онлайн-окружении.
  • Покажите понимание сложных концепций (join, подзапросы, транзакции) на примерах.
  • Расскажите о реальном опыте работы с БД, подчеркните решённые проблемы и оптимизации.

Насколько важно изучать конкретные диалекты SQL и на каких стоит сфокусироваться?

Хотя базовый синтаксис SQL во многом единообразен для разных СУБД, у каждой системы (MySQL, PostgreSQL, SQL Server, Oracle) есть свой диалект с уникальными возможностями и функциями. Изучение конкретного диалекта важно, если вы нацелены на роли с использованием определённой СУБД. Сфокусируйтесь на наиболее релевантном вашим карьерным целям или наиболее распространённом в вашей отрасли. При этом крепкая база стандартного SQL облегчает адаптацию к любым диалектам.

Есть ли у DataCamp дополнительные БЕСПЛАТНЫЕ ресурсы для подготовки к собеседованиям по SQL?

Да! Если вы преподаватель или студент университета, вы можете воспользоваться DataCamp Classrooms, чтобы бесплатно получить доступ к нашему полному премиум-каталогу. В него входят треки по SQL и сертификации.

Также посмотрите нашу бесплатную шпаргалку по основам SQL.

Какие темы по SQL самые важные для собеседований в 2026 году?

Сфокусируйтесь на следующих темах: (1) Соединения и подзапросы — понимание INNER, LEFT, RIGHT и FULL, а также коррелированных и некоррелированных подзапросов; (2) Оконные функции — ROW_NUMBER, RANK, DENSE_RANK, LAG, LEAD и накопительные итоги; (3) CTE (Common Table Expressions) — для читаемых и поддерживаемых запросов; (4) Агрегации и GROUP BY — включая использование HAVING; (5) Оптимизация запросов — стратегии индексации и планы выполнения.

В чём разница между ROW_NUMBER, RANK и DENSE_RANK?

Все три — ранжирующие оконные функции, но по-разному обрабатывают равенства: ROW_NUMBER() присваивает уникальные последовательные номера даже при равенствах (1, 2, 3, 4); RANK() даёт одинаковый ранг при равенствах, пропуская следующие номера (1, 2, 2, 4); DENSE_RANK() даёт одинаковый ранг без пропусков (1, 2, 2, 3). Используйте DENSE_RANK для поиска «n-го по величине» значения, где равные значения должны делить одну позицию.

Темы

Узнайте больше о SQL с этими курсами!

Course

Data Manipulation in SQL

4 ч
318.1K
Master the complex SQL queries necessary to answer a wide variety of data science questions and prepare robust data sets for analysis in PostgreSQL.
ПодробнееRight Arrow
Начать курс
Смотрите большеRight Arrow