Основные понятия SQL
Приходилось ли вам писать SQL-запросы? Для чего?
Приведите реальный пример SQL-запроса и его задачи: извлечение, проверка, изменение или анализ данных. Не заявляйте о практике, которой не было.
Ссылки для изучения
Зачем нужны индексы в таблицах БД?
Индексы в таблицах баз данных играют ключевую роль для ускорения выполнения запросов. Основные причины использования индексов:
-
Ускорение доступа к данным: Индексы позволяют быстрее находить строки в таблице по значению индексируемого столбца. Это особенно полезно при выполнении SELECT запросов с условиями WHERE, которые используют индексированные столбцы.
-
Улучшение производительности запросов: Запросы, которые используют индексы, выполняются быстрее, так как база данных может применять оптимизированный доступ к данным.
-
Повышение эффективности соединений (JOIN): Индексы могут улучшить производительность запросов, которые соединяют несколько таблиц.
-
Поддержание уникальности данных: Уникальные индексы гарантируют, что значения в столбце (или группе столбцов) уникальны, что особенно важно для первичных ключей.
-
Поддержка внешних ключей: Индексы могут использоваться для ускорения операций проверки ограничений внешних ключей.
-
Оптимизация сортировки: Индексы ускоряют операции сортировки результатов запросов.
Ссылки для изучения
Примеры хороших ответов из реальных собеседований
- Интервью Senior Python Developer · 1:03:47–1:06:17Собеседование · Ответ кандидата
Кандидат объясняет, почему индекс не гарантирует ускорение: он требует ресурсов, а планировщик может предпочесть сканирование. Показывает роль EXPLAIN при проверке пользы индекса.
Знакомы ли вы с нормализацией баз данных?
Да, я знаком с нормализацией баз данных. Нормализация представляет собой процесс организации данных в реляционной базе данных для уменьшения избыточности и повышения их структурной целостности. Основные формы нормализации включают:
-
Первая нормальная форма (
1NF): Все значения в таблице должны быть атомарными (неделимыми). Это значит, что каждая ячейка должна содержать только одно значение, а не списки значений или структуры данных. -
2NF: отношение находится в 1NF, и каждый атрибут, не входящий ни в один кандидатный ключ, полностью зависит от каждого кандидатного ключа, без зависимости от его части.
-
Третья нормальная форма (
3NF): Таблица должна быть в 2NF, и все неключевые столбцы должны зависеть только от первичного ключа, а не от других неключевых столбцов. -
BCNF: для каждой нетривиальной функциональной зависимости X → Y набор X должен быть суперключом.
-
4NF: для каждой нетривиальной многозначной зависимости X →→ Y набор X должен быть суперключом.
-
5NF: каждая нетривиальная зависимость соединения должна следовать из кандидатных ключей. Она касается декомпозиции с восстановлением соединением без потерь.
Эти нормальные формы помогают обеспечить минимизацию избыточности данных, повышают эффективность операций с базой данных и обеспечивают структурную целостность данных.
Ссылки для изучения
Задача на нормализацию таблиц базы данных. Дают две таблицы с некоторыми полями. Что в них не так и почему? Как исправить?
В задаче на нормализацию таблицы, проблемы могут включать:
-
Дублирование данных: Если в обеих таблицах содержатся одни и те же данные (например, повторяющиеся столбцы или строки), это может привести к избыточности и потере целостности данных.
-
Нарушение нормальных форм: Таблицы могут не соответствовать требованиям нормализации, таким как первая, вторая или третья нормальные формы, что может привести к аномалиям при обновлении или удалении данных.
Для исправления можно предложить следующее:
-
Разделение таблиц: Разделите данные на более мелкие, нормализованные таблицы, чтобы устранить избыточность данных и соответствовать требованиям нормальных форм.
-
Создание связей: Используйте внешние ключи для связывания данных между таблицами, если они имеют взаимосвязанные данные, чтобы обеспечить целостность и эффективность запросов.
-
Удаление повторяющихся данных: Избавьтесь от дублирования данных, чтобы упростить обслуживание и минимизировать риск ошибок.
Ссылки для изучения
Даются следующие три операции SQL. Какой будет результат? TRUNCATE TABLE; ROLLBACK; SELECT * FROM TABLE;
Эти три операции SQL выполняют следующее:
-
TRUNCATE TABLE имя_таблицы очищает таблицу. Возможность отката зависит от СУБД: в PostgreSQL TRUNCATE можно откатить внутри незавершённой транзакции; в MySQL он вызывает неявный COMMIT. В условии не указаны имя таблицы, СУБД и начало транзакции, поэтому однозначного результата нет.
-
ROLLBACK;- Отменяет изменения, сделанные в текущей транзакции. Если транзакция еще не была зафиксирована (committed), все изменения возвращаются к состоянию до начала транзакции. -
SELECT * FROM TABLE;- Выполняет выборку всех записей из таблицы и возвращает результат в виде набора строк.
Каждая операция имеет свое специфическое назначение в управлении данными и транзакциями в SQL.
Ссылки для изучения
Чем TRUNCATE отличается от DELETE?
TRUNCATE и DELETE - это две разные операции для
удаления данных в SQL:
-
TRUNCATE:-
Очищает все данные из таблицы.
-
Обычно освобождает данные целиком, без построчного удаления. Операция всё равно журналируется в объёме, необходимом конкретной СУБД для восстановления.
-
Нельзя использовать с условиями WHERE для удаления конкретных строк.
-
Не вызывает DELETE-триггеры. В PostgreSQL существуют отдельные ON TRUNCATE-триггеры.
-
-
DELETE:-
Удаляет определенные строки из таблицы в соответствии с заданными условиями с использованием WHERE.
-
Удаленные строки сохраняются в журнале транзакций, что позволяет откатить транзакцию (если она не зафиксирована).
-
Можно использовать с условиями WHERE для выборочного удаления.
-
Вызывает триггеры, если они определены на удаление.
-
Ссылки для изучения
Что такое транзакция?
Транзакция в контексте баз данных - это логическая операция, состоящая из одного или нескольких SQL запросов, которая либо выполняется целиком, либо не выполняется вообще. Транзакция должна быть атомарной (выполняться полностью или не выполняться вовсе), согласованной (соответствовать всем правилам целостности), изолированной (изменения не видны другим транзакциям до их фиксации) и долговечной (изменения сохраняются после завершения транзакции).
Ссылки для изучения
Примеры хороших ответов из реальных собеседований
- Техническое собеседование на Junior Java-разработчика · 35:47–36:12Мок-собеседование · Ответ кандидата
Кандидат объясняет транзакцию как единое целое: либо все операции фиксируются, либо ошибка приводит к откату без частично сохранённых изменений.
Какими свойствами должна обладать транзакция? (ACID)
Транзакция должна обладать следующими свойствами ACID:
-
Атомарность (
Atomicity): Все операции транзакции выполняются либо все, либо ни одна из них. Нет промежуточных состояний. -
Согласованность (
Consistency): Транзакция должна переводить базу данных из одного согласованного состояния в другое согласованное состояние. Все правила целостности должны быть соблюдены. -
Изолированность: параллельные транзакции взаимодействуют согласно выбранному уровню изоляции. При SERIALIZABLE результат эквивалентен некоторому последовательному выполнению; более слабые уровни допускают определённые аномалии.
-
Долговечность (
Durability): Результаты успешно завершенной транзакции должны быть постоянно сохранены в базе данных даже в случае сбоя системы или перезагрузки.
Ссылки для изучения
Чем отличается UNION от UNION ALL?
Основное различие между операторами UNION и UNION ALL в SQL заключается в том, как они обрабатывают дублирующиеся строки при объединении результатов запросов:
-
UNION: Оператор UNION удаляет дублирующиеся строки из результатов объединения. Если два запроса объединяются оператором UNION, он вернет только уникальные строки из обоих запросов. -
UNION ALL: Оператор UNION ALL возвращает все строки из обоих запросов, включая дублирующиеся строки. Он не производит удаление дубликатов и просто объединяет все строки.
Ссылки для изучения
Примеры хороших ответов из реальных собеседований
- Проваленное собеседование на аналитика данных | Компания BetCore · 8:20–8:47Разбор интервью · Объяснение интервьюера
Интервьюер объясняет объединение результатов по строкам: UNION удаляет полные дубликаты, UNION ALL сохраняет все строки.
Можете назвать три первые формы нормализации?
Конечно!-
Первая нормальная форма (
1NF): В этой форме все атрибуты таблицы должны быть атомарными, то есть не должны содержать повторяющихся или составных значений. Каждая ячейка в таблице должна содержать только одно значение. -
2NF: отношение находится в 1NF, и каждый атрибут, не входящий ни в один кандидатный ключ, полностью зависит от каждого кандидатного ключа, без зависимости от его части.
-
Третья нормальная форма (
3NF): Таблица находится в третьей нормальной форме, если она находится во второй нормальной форме и все неключевые атрибуты являются функционально зависимыми только от первичного ключа, а не от других неключевых атрибутов.
Эти нормальные формы помогают структурировать данные в базах данных, уменьшая избыточность и повышая эффективность хранения и обработки информации.
Ссылки для изучения
Что такое первичный ключ? Каким свойством обладает первичный ключ? Что такое внешний ключ?
Определения:
-
Первичный ключ (
Primary Key): Первичный ключ в базе данных уникально идентифицирует каждую запись в таблице. Он гарантирует уникальность данных в столбце или комбинации столбцов и обеспечивает быстрый доступ к записям. Первичный ключ не может содержать пустых значений (NULL). -
Свойства первичного ключа:
-
Уникальность: Каждое значение первичного ключа должно быть уникальным в пределах таблицы.
-
Неизменяемость: Значения первичного ключа обычно не изменяются после создания записи.
-
Не может быть NULL: Первичный ключ не может содержать пустые значения.
-
-
Внешний ключ связывает столбцы со столбцами уникального ключа другой или той же таблицы и обеспечивает ссылочную целостность. Целью может быть PRIMARY KEY или подходящее ограничение UNIQUE. NULL допустим, если его не запрещает отдельное ограничение.
Пример использования внешнего ключа: если в таблице “Заказы” есть столбец “КлиентID”, который является внешним ключом, он ссылается на столбец “ID” в таблице “Клиенты”, обеспечивая связь между заказами и клиентами.
Ссылки для изучения
Что такое поисковые пути в базах данных?
Термин требует контекста. В PostgreSQL search_path задаёт порядок схем для поиска объектов, указанных без имени схемы. Пути доступа к данным в плане запроса, например последовательное или индексное сканирование, являются другим понятием.
Ссылки для изучения
Какие бывают представления в БД?
Обычное представление сохраняет определение запроса и вычисляет данные при обращении; само по себе оно не гарантирует ускорения. Материализованное представление хранит результат и требует обновления, чтобы отразить изменения исходных данных. Поддержка обновляемых представлений и правила доступа зависят от СУБД.
Ссылки для изучения
Для чего используется HAVING в SQL?
Клауза HAVING в SQL используется для фильтрации данных в результирующем наборе запроса, который включает операции группировки (GROUP BY). Она применяется для задания условий, которым должны удовлетворять агрегированные значения, чтобы быть включенными в результат. Это позволяет делать выборки данных на основе агрегатных функций (например, SUM, COUNT, AVG) после их вычисления в запросе с использованием GROUP BY.
Ссылки для изучения
Примеры хороших ответов из реальных собеседований
- Мок-интервью по SQL и Java для Junior-разработчика · 2:02–3:43Мок-собеседование · Ответ кандидата
Кандидатка различает фильтрацию строк через WHERE и групп через HAVING, затем составляет запрос для пользователей с более чем пятью заказами.
Как построить логическую модель данных из требований?
Из требований выписывают бизнес-сущности, их атрибуты и устойчивые идентификаторы. Затем для каждой пары сущностей определяют смысл связи, кардинальность и обязательность, включая допустимость отсутствующего значения. Бизнес-правила переводят в ограничения: уникальность, допустимые значения, составные ключи и зависимости атрибутов. Модель нормализуют, чтобы один факт хранился в одном месте и обновление не порождало противоречий, но не добавляют физические детали вроде индексов и партиций. Результат проверяют на реальных сценариях создания, изменения и удаления данных, а также на граничных примерах вместе с владельцами требований.
Ссылки для изучения
Чем отличаются уровни модели данных?
Концептуальная модель отвечает, какие бизнес-понятия существуют и как они связаны. Она понятна заказчику и обычно не содержит атрибутов, ключей и особенностей СУБД. Логическая модель уточняет сущности, атрибуты, идентификаторы, кардинальности, обязательность и правила целостности, оставаясь независимой от конкретного хранилища. Физическая модель описывает реализацию в выбранной СУБД: таблицы и столбцы, типы, индексы, ограничения, партиционирование и денормализацию. Переход между уровнями не механический: один логический объект может превратиться в несколько физических, и наоборот.
Ссылки для изучения
Какие ограничения и действия задают для внешнего ключа?
Внешний ключ требует, чтобы непустое значение ссылалось на существующий уникальный или первичный ключ совместимого типа. Допустимость NULL задаётся отдельно и означает отсутствие обязательной связи. Для обновления и удаления родительской строки выбирают действие по бизнес-правилу: RESTRICT или NO ACTION запрещает операцию при зависимостях, CASCADE переносит изменение или удаление, SET NULL разрывает необязательную связь. Поддержка и точная семантика действий зависят от СУБД. CASCADE опасно выбирать по умолчанию: оно может удалить большую цепочку данных, поэтому последствия проверяют явно.
Ссылки для изучения
Когда выбрать графовую БД, а когда key-value?
Графовую БД выбирают, когда главные запросы обходят связи переменной глубины: маршруты, зависимости, рекомендации, поиск сообществ. Она хранит вершины и рёбра как основные элементы и удобна, когда форма обхода важнее доступа к одной записи. Key-value подходит для быстрого чтения и записи значения по известному ключу: сессий, кеша, профилей или счётчиков. Обычно он не даёт богатых запросов по содержимому значения и связям. Решение проверяют на реальных запросах, требованиях к транзакциям, объёме и эксплуатации. Категории пересекаются, поэтому название продукта не заменяет проверку его конкретных возможностей.
Ссылки для изучения







