🗄️ Вопросы интервью по SQL

Вопросы 61-70 для разработчиков

Вопрос SQL 61
В чем заключается назначение оператора EXCEPT?

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

Синтаксис:

SELECT column_list FROM Table1
EXCEPT
SELECT column_list FROM Table2;
                
Пример: Найти продукты, которые проданы, но не возвращены:

SELECT ProductID FROM ProductsSold
EXCEPT
SELECT ProductID FROM ProductsReturned;
                
Use Cases:
  • Найти расхождения между наборами данных
  • Проверить что определённые данные существуют в одном наборе, но не в другом
Соображения производительности:
  • EXCEPT работает лучше всего когда наборы данных имеют подходящие индексы
  • Большие наборы данных без индексов могут иметь медленнее производительность, так как БД должна сравнить каждую строку
Вопрос SQL 62
Как constraints улучшают целостность БД?

Ответ: Constraints обеспечивают правила, которые должны соблюдаться данными, предотвращая невалидные или несогласованные данные:

Типы constraints:
  • NOT NULL: Гарантирует, что столбец не может содержать NULL значения
  • UNIQUE: Гарантирует, что все значения в столбце различны
  • PRIMARY KEY: Объединяет NOT NULL и UNIQUE, гарантируя уникальную идентификацию
  • FOREIGN KEY: Гарантирует ссылочную целостность, требуя чтобы значения совпадали с первичным ключом другой таблицы
  • CHECK: Валидирует что значения соответствуют определённому критерию (например, CHECK (Salary > 0))
Как это улучшает целостность:

Автоматически применяя эти правила, constraints поддерживают надёжность и консистентность данных в БД.

Вопрос SQL 63
В чем разница между локальной и глобальной временной таблицей?
Local Temporary Table:
  • Префикс: # (например, #TempTable)
  • Существует только в текущей сессии
  • Автоматически удаляется при завершении сессии
Global Temporary Table:
  • Префикс: ## (например, ##GlobalTempTable)
  • Видна всем сессиям
  • Удаляется только когда все сессии, ссылающиеся на неё, закрыты
Примеры:

-- Local Temporary Table
CREATE TABLE #LocalTemp (ID INT);

-- Global Temporary Table
CREATE TABLE ##GlobalTemp (ID INT);
                
Вопрос SQL 64
В чем заключается назначение MERGE statement?

Ответ: MERGE statement объединяет множественные операции INSERT, UPDATE и DELETE в одну. Используется для синхронизации двух таблиц:

Функции MERGE:
  • Вставляет строки, которые не существуют в целевой таблице
  • Обновляет строки, которые уже существуют
  • Удаляет строки из целевой таблицы на основе условий
  • В SQL Server, MERGE может вызвать проблемы конкурентности (race conditions или deadlocks)
Синтаксис MERGE:

MERGE INTO TargetTable T
USING SourceTable S
ON T.ID = S.ID
WHEN MATCHED THEN
    UPDATE SET T.Value = S.Value
WHEN NOT MATCHED THEN
    INSERT (ID, Value) VALUES (S.ID, S.Value);
                
Вопрос SQL 65
Как обработать дубликаты в запросе без DISTINCT?
Способ 1: GROUP BY - Агрегировать строки для устранения дубликатов

SELECT Column1, MAX(Column2)
FROM TableName
GROUP BY Column1;
                
Способ 2: ROW_NUMBER() - Присвоить уникальный номер и фильтровать

WITH CTE AS (
    SELECT
        Column1,
        Column2,
        ROW_NUMBER() OVER (
            PARTITION BY Column1
            ORDER BY Column2
        ) AS RowNum
    FROM TableName
)
SELECT *
FROM CTE
WHERE RowNum = 1;
                
Вопрос SQL 66
Какие ACID свойства транзакции?

Ответ: ACID гарантирует что транзакции БД надежны и поддерживают целостность данных.

ACID компоненты:
  • Atomicity (Атомарность): Транзакция выполняется полностью или не выполняется совсем. Если одна операция не удаётся, все изменения откатываются. Пример: передача денег либо успешна либо отменена полностью
  • Consistency (Консистентность): БД остаётся валидной, следуя всем правилам и constraints. Пример: количество товара не может быть отрицательным
  • Isolation (Изоляция): Множественные транзакции выполняются независимо без влияния друг на друга. Пример: два пользователя не могут забронировать одно место одновременно
  • Durability (Долговечность): После коммита, изменения сохранены постоянно, даже при системном сбое. Пример: подтверждённый заказ остаётся сохранённым после перезагрузки сервера
Вопрос SQL 67
В чем различие между уровнями изоляции в SQL?

Ответ: Уровни изоляции контролируют как транзакции взаимодействуют и поддерживают консистентность данных.

Уровни изоляции (от низшего к высшему):
  • Read Uncommitted: Позволяет читать невыполненные данные, что может вызвать грязные чтения
  • Read Committed: Читает только выполненные данные, предотвращая грязные чтения
  • Repeatable Read: Гарантирует что одинаковые данные остаются неизменными во время транзакции, предотвращая грязные и неповторяемые чтения
  • Serializable: Наивысший уровень изоляции, предотвращающий грязные чтения, неповторяемые чтения и фантомные чтения, но может снизить производительность из-за увеличенной блокировки
Вопрос SQL 68
В чем заключается назначение подсказки WITH (NOLOCK) в SQL Server?

Ответ: Подсказка WITH (NOLOCK) позволяет запросу читать данные без получения общих блокировок, эффективно читая невыполненные данные.

Синтаксис:

SELECT *
FROM Orders WITH (NOLOCK);
                
Преимущества:
  • Улучшает производительность путём снижения конфликтов блокировок, особенно на больших таблицах, часто обновляемых
Недостатки:
  • Результаты могут быть несогласованны или ненадежны, так как читаемые данные могут измениться или откатиться
Вопрос SQL 69
Как обработать deadlocks в SQL базах?

Ответ: Deadlock возникает когда две или более транзакции ждут друг друга, чтобы освободить ресурсы.

Стратегии обработки deadlocks:
  • Deadlock Detection & Retry: БД обнаруживает deadlock, прерывает одну транзакцию и повторяет её позже
  • Reduce Lock Contention: Используйте индексы, оптимизируйте запросы и сокращайте длительность транзакций
  • Choose Appropriate Isolation Levels: Выберите уровни изоляции, которые балансируют консистентность и блокировку
  • Consistent Resource Ordering: Доступу к ресурсам в одинаковом порядке во всех транзакциях, чтобы избежать циклических ожиданий
Пример логики повтора:

DECLARE @retry_count INT = 0;
DECLARE @max_retries INT = 3;

WHILE @retry_count < @max_retries
BEGIN
    BEGIN TRY
        BEGIN TRANSACTION;
        -- SQL операции
        COMMIT TRANSACTION;
        BREAK;
    END TRY
    BEGIN CATCH
        IF ERROR_NUMBER() = 1205  -- Deadlock error
        BEGIN
            SET @retry_count = @retry_count + 1;
            ROLLBACK TRANSACTION;
            WAITFOR DELAY '00:00:00.100';  -- Подождать перед повтором
        END
        ELSE
        BEGIN
            THROW;
        END
    END CATCH
END
                
Вопрос SQL 70
Что такое database snapshot и как он используется?

Ответ: Database Snapshot — это read-only копия БД на определённый момент времени.

Использование:
  • Отчёты на согласованном наборе данных
  • Восстановление в определённый момент времени
  • Тестирование без влияния на оригинальную БД
Создание Database Snapshot:

CREATE DATABASE MySnapshot ON
(
    NAME = MyDatabase_Data,
    FILENAME = 'C:\Snapshots\MyDatabase_Data.ss'
)
AS SNAPSHOT OF MyDatabase;
                
Свойства:
  • Read-only копия БД
  • Не требует отдельного резервного копирования
  • Использует разреженные файлы для экономии дискового пространства
  • Можно использовать для сравнения данных между моментами времени