---
title: Основные понятия SQL
questionDates:
  q-transfer-0335: '2026-10-01'
  q-transfer-0336: '2026-10-01'
  q-transfer-0355: '2026-10-01'
  q-transfer-0356: '2026-10-01'
seo:
  description: >-
    Тема «Основные понятия SQL» для собеседования Systems Analyst. Приходилось
    ли вам писать SQL-запросы? Для чего? Зачем нужны индексы в таблицах БД?
  title: Основные понятия SQL — Systems Analyst
---

[Все темы Systems Analyst](/prep/systems-analyst)

## <strong>Приходилось ли вам писать SQL-запросы? Для чего?</strong> [#q-14bee738d69b81779148da7a374d4393]

Приведите реальный пример SQL-запроса и его задачи&#58; извлечение, проверка, изменение или анализ данных. Не заявляйте о практике, которой не было.

:::note[Ссылки для изучения]

1. [Практический SQL-запрос: выборка, условие, сортировка и уникальные значения](https://postgrespro.ru/docs/postgresql/18/tutorial-select)
   :::

---

## <strong>Зачем нужны индексы в таблицах БД?</strong> [#q-14bee738d69b817f8f8ffe24fdf8400d]

Индексы в таблицах баз данных играют ключевую роль для ускорения выполнения запросов. Основные причины использования индексов&#58;

1. <strong>Ускорение доступа к данным</strong>&#58; Индексы позволяют быстрее
   находить строки в таблице по значению индексируемого столбца. Это особенно
   полезно при выполнении SELECT запросов с условиями WHERE, которые используют
   индексированные столбцы.

1. <strong>Улучшение производительности запросов</strong>&#58; Запросы, которые
   используют индексы, выполняются быстрее, так как база данных может применять
   оптимизированный доступ к данным.

1. <strong>Повышение эффективности соединений (JOIN)</strong>&#58; Индексы могут
   улучшить производительность запросов, которые соединяют несколько таблиц.

1. <strong>Поддержание уникальности данных</strong>&#58; Уникальные индексы
   гарантируют, что значения в столбце (или группе столбцов) уникальны, что
   особенно важно для первичных ключей.

1. <strong>Поддержка внешних ключей</strong>&#58; Индексы могут использоваться
   для ускорения операций проверки ограничений внешних ключей.

1. <strong>Оптимизация сортировки</strong>&#58; Индексы ускоряют операции
   сортировки результатов запросов.

:::note[Ссылки для изучения]

1. [Зачем нужны индексы и когда планировщик использует их — PostgreSQL 18](https://postgrespro.ru/docs/postgresql/18/indexes-intro)
   :::

---

## <strong>Знакомы ли вы с нормализацией баз данных?</strong> [#q-14bee738d69b814b85e3c629d72167bb]

Да, я знаком с нормализацией баз данных. Нормализация представляет собой процесс организации данных в реляционной базе данных для уменьшения избыточности и повышения их структурной целостности. Основные формы нормализации включают&#58;

1. <strong>Первая нормальная форма (</strong>
   <code>1NF</code>
   <strong>)</strong>&#58; Все значения в таблице должны быть атомарными
   (неделимыми). Это значит, что каждая ячейка должна содержать только одно
   значение, а не списки значений или структуры данных.

1. 2NF&#58; отношение находится в 1NF, и каждый атрибут, не входящий ни в один кандидатный ключ, полностью зависит от каждого кандидатного ключа, без зависимости от его части.

1. <strong>Третья нормальная форма (</strong>
   <code>3NF</code>
   <strong>)</strong>&#58; Таблица должна быть в 2NF, и все неключевые столбцы
   должны зависеть только от первичного ключа, а не от других неключевых
   столбцов.

1. BCNF&#58; для каждой нетривиальной функциональной зависимости X → Y набор X должен быть суперключом.

1. 4NF&#58; для каждой нетривиальной многозначной зависимости X →→ Y набор X должен быть суперключом.

1. 5NF&#58; каждая нетривиальная зависимость соединения должна следовать из кандидатных ключей. Она касается декомпозиции с восстановлением соединением без потерь.

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

:::note[Ссылки для изучения]

1. [Первые нормальные формы и аномалии обновления — курс Сергея Кузнецова](https://citforum.ru/database/advanced_intro/22.shtml)
1. [Возможные ключи и нормальная форма Бойса — Кодда](https://citforum.ru/database/advanced_intro/23.shtml)
1. [Многозначные зависимости и четвёртая нормальная форма](https://citforum.ru/database/advanced_intro/24.shtml)
1. [Зависимости соединения и пятая нормальная форма](https://citforum.ru/database/advanced_intro/25.shtml)
   :::

---

## <strong>Задача на нормализацию таблиц базы данных. Дают две таблицы с некоторыми полями. Что в них не так и почему? Как исправить?</strong> [#q-14bee738d69b81528c05df1927c3299d]

В задаче на нормализацию таблицы, проблемы могут включать&#58;

1. <strong>Дублирование данных</strong>&#58; Если в обеих таблицах содержатся
   одни и те же данные (например, повторяющиеся столбцы или строки), это может
   привести к избыточности и потере целостности данных.

1. <strong>Нарушение нормальных форм</strong>&#58; Таблицы могут не
   соответствовать требованиям нормализации, таким как первая, вторая или третья
   нормальные формы, что может привести к аномалиям при обновлении или удалении
   данных.

Для исправления можно предложить следующее&#58;

1. <strong>Разделение таблиц</strong>&#58; Разделите данные на более мелкие,
   нормализованные таблицы, чтобы устранить избыточность данных и
   соответствовать требованиям нормальных форм.

1. <strong>Создание связей</strong>&#58; Используйте внешние ключи для
   связывания данных между таблицами, если они имеют взаимосвязанные данные,
   чтобы обеспечить целостность и эффективность запросов.

1. <strong>Удаление повторяющихся данных</strong>&#58; Избавьтесь от
   дублирования данных, чтобы упростить обслуживание и минимизировать риск
   ошибок.

:::note[Ссылки для изучения]

1. [Нормализация: аномалии, декомпозиция и первые три нормальные формы](https://citforum.ru/database/advanced_intro/22.shtml)
1. [Возможные ключи и границы третьей нормальной формы](https://citforum.ru/database/advanced_intro/23.shtml)
   :::

---

## <strong>Даются следующие три операции SQL. Какой будет результат?</strong> <code>TRUNCATE TABLE&#59; ROLLBACK&#59; SELECT \* FROM TABLE&#59;</code> [#q-14bee738d69b81c88b29c77d2cb32c23]

Эти три операции SQL выполняют следующее&#58;

1. TRUNCATE TABLE имя_таблицы очищает таблицу. Возможность отката зависит от СУБД&#58; в PostgreSQL TRUNCATE можно откатить внутри незавершённой транзакции; в MySQL он вызывает неявный COMMIT. В условии не указаны имя таблицы, СУБД и начало транзакции, поэтому однозначного результата нет.

1. <code>ROLLBACK&#59;</code> - Отменяет изменения, сделанные в текущей
   транзакции. Если транзакция еще не была зафиксирована (committed), все
   изменения возвращаются к состоянию до начала транзакции.

1. <code>SELECT &#42; FROM TABLE&#59;</code> - Выполняет выборку всех записей из
   таблицы и возвращает результат в виде набора строк.

Каждая операция имеет свое специфическое назначение в управлении данными и транзакциями в SQL.

:::note[Ссылки для изучения]

1. [TRUNCATE и возможность отката в PostgreSQL 18](https://postgrespro.ru/docs/postgresql/18/sql-truncate)
1. [BEGIN, COMMIT, ROLLBACK и неявные транзакции PostgreSQL](https://postgrespro.ru/docs/postgresql/18/tutorial-transactions)
   :::

---

## Чем TRUNCATE отличается от DELETE? [#q-14bee738d69b81b08d0ad2cb8fa9a25e]

<code>TRUNCATE</code> и <code>DELETE</code> - это две разные операции для
удаления данных в SQL&#58;

{/* prettier-ignore */}
1. <code>TRUNCATE</code><strong>&#58;</strong>

    - Очищает все данные из таблицы.

    - Обычно освобождает данные целиком, без построчного удаления. Операция всё равно журналируется в объёме, необходимом конкретной СУБД для восстановления.

    - Нельзя использовать с условиями WHERE для удаления конкретных строк.

    - Не вызывает DELETE-триггеры. В PostgreSQL существуют отдельные ON TRUNCATE-триггеры.

1. <code>DELETE</code><strong>&#58;</strong>

    - Удаляет определенные строки из таблицы в соответствии с заданными условиями с использованием WHERE.

    - Удаленные строки сохраняются в журнале транзакций, что позволяет откатить транзакцию (если она не зафиксирована).

    - Можно использовать с условиями WHERE для выборочного удаления.

    - Вызывает триггеры, если они определены на удаление.

:::note[Ссылки для изучения]

1. [TRUNCATE: полная очистка таблицы, блокировки и триггеры](https://postgrespro.ru/docs/postgresql/18/sql-truncate)
1. [DELETE: выборочное удаление строк по WHERE](https://postgrespro.ru/docs/postgresql/18/sql-delete)
   :::

---

## <strong>Что такое транзакция?</strong> [#q-14bee738d69b81dcb734d7f9580edb78]

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

:::note[Ссылки для изучения]

1. [Транзакции: атомарность, фиксация, откат и точки сохранения — PostgreSQL 18](https://postgrespro.ru/docs/postgresql/18/tutorial-transactions)
   :::

---

## <strong>Какими свойствами должна обладать транзакция? (</strong><code>ACID</code><strong>)</strong> [#q-14bee738d69b8139b49dd50defa8491a]

Транзакция должна обладать следующими свойствами <code>ACID</code>&#58;

1. <strong>Атомарность (</strong>
   <code>Atomicity</code>
   <strong>)</strong>&#58; Все операции транзакции выполняются либо все, либо ни
   одна из них. Нет промежуточных состояний.

1. <strong>Согласованность (</strong>
   <code>Consistency</code>
   <strong>)</strong>&#58; Транзакция должна переводить базу данных из одного
   согласованного состояния в другое согласованное состояние. Все правила
   целостности должны быть соблюдены.

1. Изолированность&#58; параллельные транзакции взаимодействуют согласно выбранному уровню изоляции. При SERIALIZABLE результат эквивалентен некоторому последовательному выполнению; более слабые уровни допускают определённые аномалии.

1. <strong>Долговечность (</strong>
   <code>Durability</code>
   <strong>)</strong>&#58; Результаты успешно завершенной транзакции должны быть
   постоянно сохранены в базе данных даже в случае сбоя системы или
   перезагрузки.

:::note[Ссылки для изучения]

1. [Транзакции: атомарность, фиксация, откат и точки сохранения — PostgreSQL 18](https://postgrespro.ru/docs/postgresql/18/tutorial-transactions)
1. [Уровни изоляции и аномалии параллельных транзакций — PostgreSQL18](https://postgrespro.ru/docs/postgresql/18/transaction-iso)
   :::

---

## <strong>Чем отличается</strong> <code>UNION</code> <strong>от</strong> <code>UNION ALL</code><strong>?</strong> [#q-14bee738d69b81e3bb40f65ec597ba41]

Основное различие между операторами <code>UNION</code> и <code>UNION ALL</code> в SQL заключается в том, как они обрабатывают дублирующиеся строки при объединении результатов запросов&#58;

1. <code>UNION</code>&#58; Оператор UNION удаляет дублирующиеся строки из
   результатов объединения. Если два запроса объединяются оператором UNION, он
   вернет только уникальные строки из обоих запросов.

1. <code>UNION ALL</code>&#58; Оператор UNION ALL возвращает все строки из обоих
   запросов, включая дублирующиеся строки. Он не производит удаление дубликатов
   и просто объединяет все строки.

:::note[Ссылки для изучения]

1. [UNION и UNION ALL: объединение результатов и дубликаты — PostgreSQL 18](https://postgrespro.ru/docs/postgresql/18/queries-union)
   :::

---

## <strong>Можете назвать три первые формы нормализации?</strong> [#q-14bee738d69b81baa996d946b46c0736]

<strong>Конечно!</strong>

1. <strong>Первая нормальная форма (</strong>
   <code>1NF</code>
   <strong>)</strong>&#58; В этой форме все атрибуты таблицы должны быть
   атомарными, то есть не должны содержать повторяющихся или составных значений.
   Каждая ячейка в таблице должна содержать только одно значение.

1. 2NF&#58; отношение находится в 1NF, и каждый атрибут, не входящий ни в один кандидатный ключ, полностью зависит от каждого кандидатного ключа, без зависимости от его части.

1. <strong>Третья нормальная форма (</strong>
   <code>3NF</code>
   <strong>)</strong>&#58; Таблица находится в третьей нормальной форме, если
   она находится во второй нормальной форме и все неключевые атрибуты являются
   функционально зависимыми только от первичного ключа, а не от других
   неключевых атрибутов.

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

:::note[Ссылки для изучения]

1. [Нормализация: аномалии, декомпозиция и первые три нормальные формы](https://citforum.ru/database/advanced_intro/22.shtml)
1. [Возможные ключи и границы третьей нормальной формы](https://citforum.ru/database/advanced_intro/23.shtml)
   :::

---

## <strong>Что такое первичный ключ? Каким свойством обладает первичный ключ? Что такое внешний ключ?</strong> [#q-14bee738d69b81c2a311d8a7ecf70c92]

Определения&#58;

{/* prettier-ignore */}
1. <strong>Первичный ключ (</strong><code>Primary Key</code><strong>)</strong>&#58; Первичный ключ в базе данных уникально идентифицирует каждую запись в таблице. Он гарантирует уникальность данных в столбце или комбинации столбцов и обеспечивает быстрый доступ к записям. Первичный ключ не может содержать пустых значений (NULL).

1. <strong>Свойства первичного ключа</strong>&#58;

    - Уникальность&#58; Каждое значение первичного ключа должно быть уникальным в пределах таблицы.

    - Неизменяемость&#58; Значения первичного ключа обычно не изменяются после создания записи.

    - Не может быть NULL&#58; Первичный ключ не может содержать пустые значения.

1. Внешний ключ связывает столбцы со столбцами уникального ключа другой или той же таблицы и обеспечивает ссылочную целостность. Целью может быть PRIMARY KEY или подходящее ограничение UNIQUE. NULL допустим, если его не запрещает отдельное ограничение.

    Пример использования внешнего ключа&#58; если в таблице "Заказы" есть столбец "КлиентID", который является внешним ключом, он ссылается на столбец "ID" в таблице "Клиенты", обеспечивая связь между заказами и клиентами.

:::note[Ссылки для изучения]

1. [Первичные и внешние ключи: уникальность, NULL и ссылочная целостность](https://postgrespro.ru/docs/postgresql/18/ddl-constraints#DDL-CONSTRAINTS-PRIMARY-KEY)
   :::

---

## <strong>Что такое поисковые пути в базах данных?</strong> [#q-14bee738d69b8128a3d6cc8f2d7a3709]

Термин требует контекста. В PostgreSQL search_path задаёт порядок схем для поиска объектов, указанных без имени схемы. Пути доступа к данным в плане запроса, например последовательное или индексное сканирование, являются другим понятием.

:::note[Ссылки для изучения]

1. [search_path: порядок поиска объектов по схемам PostgreSQL](https://postgrespro.ru/docs/postgresql/18/ddl-schemas#DDL-SCHEMAS-PATH)
   :::

---

## <strong>Какие бывают представления в БД?</strong> [#q-14bee738d69b81ebaed6cd5caea177ee]

Обычное представление сохраняет определение запроса и вычисляет данные при обращении; само по себе оно не гарантирует ускорения. Материализованное представление хранит результат и требует обновления, чтобы отразить изменения исходных данных. Поддержка обновляемых представлений и правила доступа зависят от СУБД.

:::note[Ссылки для изучения]

1. [Обычное представление: сохранённый запрос без материализации](https://postgrespro.ru/docs/postgresql/18/sql-createview)
1. [Материализованные представления: хранение результата и REFRESH](https://postgrespro.ru/docs/postgresql/18/rules-materializedviews)
   :::

---

## <strong>Для чего используется</strong> <code>HAVING</code> <strong>в SQL?</strong> [#q-14bee738d69b8128910fdfd7c38dec29]

Клауза <code>HAVING</code> в SQL используется для фильтрации данных в результирующем наборе запроса, который включает операции группировки (<code>GROUP BY</code>). Она применяется для задания условий, которым должны удовлетворять агрегированные значения, чтобы быть включенными в результат. Это позволяет делать выборки данных на основе агрегатных функций (например, <code>SUM</code>, <code>COUNT</code>, <code>AVG</code>) после их вычисления в запросе с использованием <code>GROUP BY</code>.

:::note[Ссылки для изучения]

1. [Шпаргалка по SQL](https://habr.com/ru/articles/564390/)
   :::

---

## Как построить логическую модель данных из требований? [#q-transfer-0335]

Из требований выписывают бизнес-сущности, их атрибуты и устойчивые идентификаторы. Затем для каждой пары сущностей определяют смысл связи, кардинальность и обязательность, включая допустимость отсутствующего значения. Бизнес-правила переводят в ограничения: уникальность, допустимые значения, составные ключи и зависимости атрибутов. Модель нормализуют, чтобы один факт хранился в одном месте и обновление не порождало противоречий, но не добавляют физические детали вроде индексов и партиций. Результат проверяют на реальных сценариях создания, изменения и удаления данных, а также на граничных примерах вместе с владельцами требований.

:::note[Ссылки для изучения]

1. [Построение логической модели: сущности, ключи, связи и проверка бизнес-правил — AWS](https://aws.amazon.com/ru/compare/the-difference-between-logical-and-physical-data-model/)
   :::

---

## Чем отличаются уровни модели данных? [#q-transfer-0336]

Концептуальная модель отвечает, какие бизнес-понятия существуют и как они связаны. Она понятна заказчику и обычно не содержит атрибутов, ключей и особенностей СУБД. Логическая модель уточняет сущности, атрибуты, идентификаторы, кардинальности, обязательность и правила целостности, оставаясь независимой от конкретного хранилища. Физическая модель описывает реализацию в выбранной СУБД: таблицы и столбцы, типы, индексы, ограничения, партиционирование и денормализацию. Переход между уровнями не механический: один логический объект может превратиться в несколько физических, и наоборот.

:::note[Ссылки для изучения]

1. [Уровни модели данных: бизнес-понятия, логические связи и реализация в СУБД — AWS](https://aws.amazon.com/ru/compare/the-difference-between-logical-and-physical-data-model/)
   :::

---

## Какие ограничения и действия задают для внешнего ключа? [#q-transfer-0355]

Внешний ключ требует, чтобы непустое значение ссылалось на существующий уникальный или первичный ключ совместимого типа. Допустимость `NULL` задаётся отдельно и означает отсутствие обязательной связи. Для обновления и удаления родительской строки выбирают действие по бизнес-правилу: `RESTRICT` или `NO ACTION` запрещает операцию при зависимостях, `CASCADE` переносит изменение или удаление, `SET NULL` разрывает необязательную связь. Поддержка и точная семантика действий зависят от СУБД. `CASCADE` опасно выбирать по умолчанию: оно может удалить большую цепочку данных, поэтому последствия проверяют явно.

:::note[Ссылки для изучения]

1. [Внешние ключи и действия ON DELETE/ON UPDATE в PostgreSQL 18](https://postgrespro.ru/docs/postgresql/18/ddl-constraints#DDL-CONSTRAINTS-FK)
   :::

---

## Когда выбрать графовую БД, а когда key-value? [#q-transfer-0356]

Графовую БД выбирают, когда главные запросы обходят связи переменной глубины: маршруты, зависимости, рекомендации, поиск сообществ. Она хранит вершины и рёбра как основные элементы и удобна, когда форма обхода важнее доступа к одной записи. Key-value подходит для быстрого чтения и записи значения по известному ключу: сессий, кеша, профилей или счётчиков. Обычно он не даёт богатых запросов по содержимому значения и связям. Решение проверяют на реальных запросах, требованиях к транзакциям, объёме и эксплуатации. Категории пересекаются, поэтому название продукта не заменяет проверку его конкретных возможностей.

:::note[Ссылки для изучения]

1. [Модели и применение key-value и графовых БД — обзор AWS](https://aws.amazon.com/ru/nosql/)
   :::
