Database Questions and Answers (SQL)

Summary

This document contains practice questions and answers related to SQL and databases. It covers topics such as SQL queries, database design, transaction management, concurrency control, and database optimization. The questions are designed to test knowledge of SQL and relational database concepts.

Full Transcript

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

Question Основное требование к атрибутам, входящим в составной первичный ключ: Тип зависимости, нарушающий третью нормальную форму: Отличие декларативного подхода SQL от процедурного языка (например, PL/SQL или T-SQL): Основное различие между кластеризованным и некластеризованным индексом в реляционной базе данных: Команда, устанавливающая эксклюзивную блокировку на строку в PostgreSQL: В MySQL указание оптимизатору использовать определенный индекс idx_salary в запросе: Уровень изоляции, гарантирующий защиту от фантомного чтения: Получение плана выполнения запроса в PostgreSQL: Запрос для вывода чисел от 1 до 5 с помощью рекурсивного CTE: SQL-запрос для вывода списка сотрудников, у которых зарплата выше средней по их отделу: Приведение отношения к пятой нормальной форме (5НФ) нарушает … Альтернативный ключ – … Утверждение, определяющую транзитивную зависимость в контексте нормализации: Триггер, который можно использовать для предотвращения удаления строк из таблицы: Запрос, вычисляющий среднюю зарплату только по сотрудникам, у которых зарплата больше средней по всей таблице: Тип блокировки, который предотвращает доступ к строке для чтения и записи другими транзакциями: Разрешение взаимоблокировки (deadlock): Агрегатная функция COUNT(DISTINCT column) возвращает … Подзапрос, являющийся скалярным: SQL-запрос с GROUP BY без агрегатных функций: К взаимоблокировке (deadlock) в СУБД может привести: SELECT COUNT(*) FROM orders GROUP BY customer_id HAVING COUNT(*) > 1; Тип JOIN для получения всех записей из левой таблицы и совпадающих – из правой: Запрос для подсчёта общего количества сотрудников в каждом департаменте: EXISTS в SQL: ROLLBACK TO SAVEPOINT: θ-соединение: Оператор реляционной алгебры, соответствующий SQL-команде SELECT WHERE: Если одна транзакция читает данные, которые позже были изменены другой, ещё не зафиксированной транзакцией: Запрос SELECT customer_id, COUNT(*) FROM orders GROUP BY customer_id HAVING COUNT(*) = (SELECT MAX(order_count) FROM (SELECT customer_id, COUNT(*) AS order_count FROM orders GROUP BY customer_id) t); возвращает: При попытке удаления строки, заблокированной другой транзакцией, произойдёт следующее: Подход, который предотвращает взаимоблокировки при работе с транзакциями: Тип JOIN, который следует использовать, чтобы найти записи, не имеющие соответствий в другой таблице: SELECT * FROM A CROSS JOIN B: SQL-запрос с GROUPING SETS ((A, B), (C)) возвращает: Деление в реляционной алгебре R ÷ S даст следующий результат: Оператор в SQL, который можно рассматривать как проекцию в реляционной алгебре: SELECT FOR UPDATE в SQL: При MERGE в SQL Server (или UPSERT в PostgreSQL) происходит следующее: Команда SET TRANSACTION ISOLATION LEVEL REPEATABLE READ: Оператор для объединения результатов двух SELECT с удалением дубликатов: Операция σ(A > 5)(R) в реляционной алгебре – … Индекс, лучше всего подходящий для быстрого поиска по диапазону значений: Если в подзапросе NOT IN хотя бы одно значение – NULL: Уровень изоляции REPEATABLE READ гарантирует: Тип индекса, который лучше всего подходит для точного поиска по ключу (=): Тип индекса, который лучше всего использовать для столбца с двумя возможными значениями: TRUNCATE в SQL: При попытке вставить строку, нарушающую внешний ключ, произойдёт следующее: Оператор для фильтрации агрегированных данных: Операция π_{A,B}(R) в реляционной алгебре – … Уровень изоляции SERIALIZABLE … При попытке обновить строку, заблокированную другой транзакцией в режиме FOR UPDATE, произойдёт следующее: EXCEPT в SQL: Связь «многие-ко-многим» в реляционной модели реализуется через … «Фантомное чтение» – … Оконная функция FIRST_VALUE(salary) OVER (ORDER BY hire_date) возвращает: Команда LOCK TABLE employees IN ACCESS EXCLUSIVE MODE в PostgreSQL … Нормальная форма Бойса-Кодда (BCNF) – … Агрегатная функция COUNT(*) считает … WITH CHECK OPTION при создании представления … Способ оптимизации, который может ускорить работу SELECT-запроса с условием WHERE – … FULL OUTER JOIN … Вид индекса для быстрого поиска значений в текстовых полях в PostgreSQL – … AUTO_INCREMENT в MySQL … CREATE MATERIALIZED VIEW в SQL … SQL-запрос SELECT p.name, COUNT(DISTINCT o.id) FROM products p LEFT JOIN orders o ON p.id = o.product_id GROUP BY p.name; вернёт: Запрос SELECT name, salary, RANK() OVER (PARTITION BY department_id ORDER BY salary DESC) AS dept_rank FROM employees; Запрос SELECT p.id, p.name FROM products p WHERE NOT EXISTS ( SELECT 1 FROM order_items oi WHERE oi.product_id = p.id ); возвращает … DENSE_RANK() в оконной функции … Оконная функция для определения порядкового номера строки в пределах раздела – … Обобщенное табличное выражение (CTE) – … Команда REVOKE SELECT ON table_name FROM user_name; SEQUENCE в контексте СУБД – … Функция словаря данных в СУБД – … Важный параметр при оптимизации запросов в плане выполнения – … Тип хранилища по умолчанию, который используется в MySQL с поддержкой транзакций – … Метаданные в СУБД – … Следующий SQL-запрос SELECT e.name FROM employees e WHERE NOT EXISTS ( SELECT 1 FROM projects p WHERE p.manager_id = e.id ); вернёт … План выполнения Index Only Scan означает, что … heap-таблица в PostgreSQL – … Уровень изоляции REPEATABLE READ означает … Фактор, наиболее сильно влияющий на выбор оптимизатором Index Only Scan – … Способ, который может ухудшить производительность SQL-запроса – … Важно использовать EXISTS вместо IN в подзапросах с большой вложенной выборкой, потому что … Запрос может проигнорировать индекс, потому что … Point-in-Time Recovery (PITR) в PostgreSQL обеспечивает … Ограничить выполнение SELECT для таблицы только из указанной схемы можно через … Журнал транзакций (transaction log) – … Принцип, лежащий в основе безопасной аутентификации в СУБД – … Логическое резервное копирование представляет собой … Механизм, обеспечивающий наибольшую защиту от SQL-инъекций – … Риск несанкционированного доступа к базе снижает … Целостность данных в базе обеспечивает … Принцип «наименьших привилегий» означает, что … К утечке данных при хранении резервных копий может привести … Механизм, позволяющий ограничить команды, доступные роли – … Коррелированный подзапрос – … Логическая модель БД описывает … Число физических чтений уменьшает … Процесс, при котором СУБД удаляет устаревшие версии строк, называется … Если в предложении SELECT используется столбец, не входящий в список GROUP BY и не охваченный агрегатной функцией, произойдёт … Таблица приведена к пятой нормальной форме (5НФ), если … Таблица приведена к шестой нормальной форме (6НФ), если … Тип зависимости, который устраняется при переходе к четвёртой нормальной форме (4НФ) – … Отличие системной базы данных от пользовательской … Системная таблица в БД … При соединении маленькой и большой таблицы по индексу эффективнее план выполнения … Если для таблицы в SQL Server не был создан кластеризованный индекс, она … Выберите верное утверждение относительно создания кластеризованного индекса на столбце, содержащем дубликаты: Correct Answer A C все атрибуты должны быть внешними ключами D зависимость от составного ключа C отсутствие циклов кластеризованный индекс создаётся только на столбцах с типом C varchar, а некластеризованный – только на числовых B LOCK ROW IN ACCESS SHARE MODE; SELECT * FROM employees USE INDEX (idx_salary) WHERE salary > A 10000; D READ UNCOMMITED B SELECT PLAN * FROM employees WHERE salary > 5000; WITH RECURSIVE numbers(n) AS ( SELECT 1 AS n UNION ALL SELECT n + 1 WHERE n < 5 ) B SELECT * FROM numbers; SELECT * FROM Employees C WHERE Salary > (SELECT AVG(Salary) FROM Employees); C наличие атрибута, транзитивно зависящего от ключа любой ключ, не являющийся первичным, но потенциально A уникальный один неключевой атрибут зависит от другого неключевого A атрибута B AFTER DELETE SELECT AVG(salary) FROM employees A WHERE salary > (SELECT AVG(salary) FROM employees); C Shared Lock (S-lock) D все транзакции автоматически завершаются B общее количество NULL в столбце SELECT name FROM employees WHERE department_id IN C (SELECT department_id FROM departments); D возвращает только уникальные строки D использование только индексов C подсчитывает все заказы C INNER JOIN SELECT department_id, SUM(*) FROM employees GROUP BY B department_id; C проверяет, содержит ли столбец значение NULL C сохраняет данные в журнале транзакций C соединение по равенству C ∪ (объединение) B произойдёт фантомное чтение B всех клиентов A операция выполнится с ожиданием C случайный выбор порядка обновлений C INNER JOIN C соединяет таблицы по внешнему ключу C только группы A, B B строки, не содержащие значения из S B SELECT с * C защищает строки от удаления C удаляются все дубликаты C устанавливает глобальный уровень изоляции A UNION C отбор столбца A из отношения R, где A больше 5 C Hash Index D возникает синтаксическая ошибка B отсутствие фантомных чтений C B-Tree B B-Tree B удаление всех строк таблицы с возможностью отката C операция выполнится с предупреждением B WHERE C селекция по A и B C предотвращаетт грязное чтение B операция выполнится с ошибкой C объединяет два результата C внешний ключ C чтение устаревших данных C первое значение из всей таблицы B разрешает доступ к таблице только SELECT B усиленная форма 2НФ, устраняющая дублирование данных C только уникальные значения C позволяет вставлять строки в базовую таблицу C удаление индексов C возвращает только совпадающие строки C B-tree C создаёт индекс B создаёт обычное логическое представление количество заказов по каждому продукту, включая продукты без A заказов C сортирует сотрудников по убыванию зарплаты по всей компании C продукты, которые были заказаны назначает одинаковые номера при одинаковых значениях, без A пропуска C RANK() C временная таблица, доступная только в текущей сессии C предоставляет пользователю право на SELECT C таблица с упорядоченными значениями C физическое хранение всех строк таблиц Важный параметр при оптимизации запросов в плане C выполнения – … C MyISAM C фактические данные строк таблиц A сотрудников, не являющихся менеджерами проектов C используется индекс, но данные читаются из таблицы B таблица с использованием B-Tree B только чтение зафиксированных данных B использование ORDER BY B использование LIMIT B EXISTS быстрее при наличии NULL C таблица пуста C автоматическое восстановление структуры таблицы B CONSTRAINT C таблица с пользовательскими паролями C хранение паролей в открытом виде B побайтовое копирование файлов базы данных D использование глобальных переменных C доступ по HTTP C журналы доступа C пользователь имеет только временный доступ C хранение бэкапа в зашифрованном виде D представления C подзапрос, не зависящий от внешнего запроса B физическое размещение данных C JOIN C JOIN D результатом будет случайное значение из группы она не содержит транзитивных зависимостей и мультизначных C зависимостей B таблица содержит только один столбец и ключ C транзитивная зависимость A хранит системные объекты, метаданные, журналы и настройки B содержит пользовательские данные C Hash Join C будет недоступна для запросов кластеризованный индекс не может быть создан на столбце с C повторяющимися значениями Answer B все атрибуты должны быть индексируемыми частичная зависимость прямой доступ к памяти кластеризованный индекс хранится в отдельной таблице, а некластеризованный – внутри основной таблицы SELECT * FROM employees WHERE employee_id = 10 FOR UPDATE; SELECT * FROM employees FORCE INDEX idx_salary WHERE salary > 10000; READ COMMITED EXPLAIN ANALYZE SELECT * FROM employees WHERE salary > 5000; WITH RECURSIVE numbers(n) AS ( SELECT 1 UNION ALL SELECT n + 1 FROM numbers WHERE n < 5 ) SELECT * FROM numbers; SELECT * FROM Employees E WHERE Salary > ALL (SELECT AVG(Salary) FROM Employees GROUP BY DepartmentID); отсутствие минимального суперключа внешний ключ, ссылающийся на первичный ключ один ключевой атрибут зависит от другого ключевого атрибута INSTEAD OF DELETE SELECT AVG(salary) OVER() FROM employees WHERE salary > ALL (SELECT AVG(salary) FROM employees); Row-level Lock СУБД замораживает таблицу, где произошла блокировка количество уникальных значений в столбце SELECT name FROM employees WHERE EXISTS (SELECT * FROM departments WHERE location_id = 100); ошибка – без агрегатов GROUP BY невозможен выполнение COMMIT внутри триггера подсчитывает заказы только по одному клиенту FULL JOIN SELECT department_id, COUNT(*) FROM employees GROUP BY department_id; определяет, существует ли таблица полностью отменяет транзакцию соединение по диапазону значений π (проекция) это называется «грязным» чтением клиентов с наибольшим числом заказов сразу произойдёт ошибка использование READ UNCOMMITTED NATURAL JOIN возвращает объединение строк таблиц только группы C строки из R, соответствующие всем строкам из S SELECT с конкретными столбцами блокирует строки для чтения только обновление данных гарантирует отсутствие фантомов UNION ALL объединение отношения R с результатом выражения A > 5 GiST Index запрос возвращает строки, не совпадающие с NULL отсутствие грязных и неповторяющихся чтений Bitmap Bitmap быстрое удаление строк без журналирования и отката значение будет заменено на NULL HAVING упорядочивание по A и B предотвращает фантомные и неповторяющиеся чтения операция будет заблокирована до снятия блокировки возвращает пересечение двух множеств триггер повторное чтение одной строки самую высокую зарплату полностью блокирует все операции уточнение 3НФ, в котором каждая детерминирующая – суперключ только строки с NOT NULL запрещает удаление представления использование SELECT * возвращает строки только из одной таблицы Hash обеспечивает уникальность строк хранит данные физически и позволяет обновление только те продукты, которые были заказаны хотя бы один раз возвращает порядковый номер сотрудника в компании продукты, которых нет в наличии назначает уникальные значения всем строкам DENSE_RANK() подзапрос, определённый в секции FROM удаляет таблицу table_name индекс по строковому ключу хранение промежуточных результатов запросов синтаксическая длина запроса Aria значения ячеек менеджеров всех проектов индекс используется только частично таблица без порядка хранения строк повторные чтения одной и той же строки гарантированно одинаковы индекс покрывает все поля, используемые в SELECT и WHERE использование SELECT * EXISTS быстрее, потому что останавливается при первом совпадении используется OR без IN восстановление БД до последнего CHECKPOINT GRANT/REVOKE архив системных ошибок верификация по IP-адресу без пароля копирование схемы и данных в виде SQL-выражений динамическое формирование SQL хранение паролей в скриптах сжатие таблиц все пользователи администраторы отказ от журналирования триггеры подзапрос, использующий агрегатные функции связи между сущностями и атрибутами без привязки к СУБД иерархия представлений COMMIT система автоматически применит агрегатную функцию MAX() она не содержит нетривиальных зависимостей от части ключа таблица приведена к 5НФ и не содержит нетривиальных зависимостей, зависящих от времени зависимость от части ключа хранит только SELECT-запросы хранит метаданные и структуру БД Merge Join хранится в виде представления кластеризованный индекс автоматически удаляет дубликаты в столбце Answer C все атрибуты должны быть функционально зависимы от всей совокупности ключа зависимость от суперключа описание того, что нужно получить, а не как это сделать кластеризованный индекс переупорядочивает строки таблицы на физическом уровне в соответствии со значениями индексируемого столбца, а некластеризованный – нет LOCK TABLE employees ROW EXCLUSIVE; SELECT * FROM employees HINT INDEX idx_salary WHERE salary > 10000; REPEATABLE READ SHOW PLAN FOR SELECT * FROM employees WHERE salary > 5000; WITH RECURSIVE numbers(n) AS ( SELECT 1 UNION SELECT n + 1 FROM nums WHERE n < 5 ) SELECT * FROM numbers; SELECT * FROM Employees E WHERE Salary > (SELECT AVG(E2.Salary) FROM Employees E2 WHERE E2.DepartmentID = E.DepartmentID); зависимость соединения, которая не может быть выражена в терминах функциональных или многозначных зависимостей ключ, составленный только из внешних ключей один неключевой атрибут зависит от всего составного ключа BEFORE INSERT SELECT AVG(salary) FROM employees HAVING salary > (SELECT AVG(salary) FROM employees); Exclusive Lock (X-lock) все процессы ожидают завершения друг друга бесконечно минимальное уникальное значение SELECT name FROM employees WHERE salary = (SELECT MAX(salary) FROM employees); упорядочивает строки по полю группировки конкурентный доступ к разным строкам таблицы без блокировок выводит количество заказов для клиентов, у которых заказов больше одного LEFT JOIN SELECT COUNT(department_id) FROM employees; возвращает TRUE, если подзапрос возвращает хотя бы одну строку отменяет изменения до указанной точки сохранения соединение с дополнительным условием сравнения σ (селекция) это блокировка shared уровня клиентов, у которых ни одного заказа DELETE будет проигнорирован последовательный захват ресурсов в одном порядке LEFT JOIN + WHERE IS NULL выполняет декартово произведение строк A и B группы по A, B и отдельно по C все объединённые строки WHERE блокирует строки от изменений другими транзакциями выполняется либо вставка, либо обновление в зависимости от условия гарантирует, что прочитанные строки не изменятся INTERSECT выбор всех кортежей из R, удовлетворяющих условию A > 5 B-Tree Index запрос возвращает все строки полную сериализуемость Hash Hash полное удаление таблицы произойдёт ошибка FILTER выбор только атрибутов A и B эмулирует выполнение транзакций в последовательном порядке операция отменит блокировку возвращает строки из первого запроса, которых нет во втором связывающую таблицу чтение новых строк, добавленных другими транзакциями между запросами зарплату первого нанятого сотрудника разрешает только UPDATE состояние, допускающее только функциональные зависимости от части составного ключа все строки, включая NULL обеспечивает соответствие вставляемых строк условиям представления создание индекса на соответствующий столбец возвращает все строки из обеих таблиц, включая не совпавшие GIN автоматически увеличивает значение поля при вставке удаляет представление продукты с уникальными заказами, исключая NULL показывает зарплату и позицию сотрудника по зарплате внутри отдела продукты без заказов всегда возвращает 1 ROW_NUMBER() именованный подзапрос, определённый с помощью WITH отзывает у пользователя право на SELECT объект, генерирующий уникальные числовые значения хранение информации о структуре баз данных оценка селективности условия WHERE InnoDB описание структуры и ограничений объектов БД сотрудников, участвующих в проектах данные извлекаются только из индекса, таблица не читается таблица с автоматическим индексацией видны изменения других транзакций наличие агрегатных функций использование покрывающего индекса IN всегда лучше используется выражение с функцией на индексированном столбце восстановление состояния базы данных на конкретный момент времени временные таблицы последовательность записей о выполненных изменениях данных хэширование паролей и использование токенов снимок диска хранение SQL в файлах принцип наименьших привилегий ограничения, транзакции и механизмы контроля пользователь получает только минимально необходимые права хранение дампа на открытом сервере без ограничений ограничения CHECK подзапрос, который ссылается на столбцы внешнего запроса индексы кеширование буферов Vacuum / Garbage Collection запрос выполнится корректно, если столбец содержит только NULL любая соединительная зависимость (join dependency) представима в виде проекций, и таблица теряет данных при разбиении все строки имеют одинаковое количество атрибутов мультизначная зависимость не поддерживает транзакции заполняется только вручную Nested Loop организуется как куча (heap) без сортировки строк кластеризованный индекс может быть создан на столбце с дубликатами, при этом СУБД автоматически добавит уникальность, например, с помощью внутреннего идентификатора для различения строк Answer D все атрибуты должны быть одного типа транзитивная зависимость между неключевыми атрибутами использование переменных некластеризованный индекс может быть только один на таблице, а кластеризованных может быть сколько угодно UPDATE employees SET salary = salary WHERE employee_id = 10 FOR EXCLUSIVE LOCK; SELECT * FROM employees WITH INDEX idx_salary WHERE salary > 10000; SERIALIZABLE TRACE SELECT * FROM employees WHERE salary > 5000; WITH RECURSIVE numbers(n) AS ( SELECT 1, 2 UNION ALL SELECT n + 1 FROM numbers WHERE n < 5 ) SELECT * FROM numbers; SELECT * FROM Employees WHERE Salary > ( SELECT AVG(Salary) FROM Employees GROUP BY DepartmentID); использование составного внешнего ключа ключ, обеспечивающий транзитивную зависимость один атрибут зависит от всех остальных в таблице BEFORE UPDATE SELECT AVG(salary) FROM employees WHERE salary IN (SELECT AVG(salary) FROM employees); Optimistic Lock одна из транзакций откатывается, чтобы разорвать цикл количество строк с одинаковыми значениями SELECT name FROM employees WHERE department_id = (SELECT department_id FROM departments WHERE location_id = 100); возвращает одну строку на каждую группу обновление ресурсов в разном порядке в разных транзакциях возвращает ID клиентов RIGHT JOIN SELECT department_id, COUNT(ALL) FROM employees GROUP BY department_id; обеспечивает атомарность транзакций завершает транзакцию объединение без условия ⨝ (соединение) это нормальное поведение при REPEATABLE READ только уникальных клиентов выполнится частично жёсткие ограничения на JOIN FULL JOIN объединяет таблицы с учетом NULL объединение A, B, C только дубликаты GROUP BY обновляет выбранные строки автоматически создаётся временная таблица обеспечивает сериализуемость EXCEPT удаление из R всех кортежей, где A > 5 Bitmap Index запрос может вернуть пустое множество только блокировку записей при вставке GiST GIN удаление структуры и данных ограничение будет проигнорировано GROUP BY объединение A и B ограничивает количество соединений строка будет продублирована возвращает строки, удовлетворяющие обоим условиям вложенный подзапрос повторная блокировка одной строки среднюю зарплату по отделу блокирует только индекс нормальная форма, допускающая транзитивные зависимости только значения первичного ключа ускоряет запрос преобразование в представление возвращает NULL вместо всех значений GiST удаляет строки по триггеру хранит только схему таблицы заказы, сгруппированные по продуктам, где COUNT может быть NULL сортирует отделы по численности все товары используется только с DISTINCT NTILE() постоянное представление в базе данных блокирует таблицу для всех пользователей тип представления сжатие и шифрование данных название схемы MEMORY архивные данные сотрудников без проектов индекс применяется только к представлениям индексированное представление не допускается ни одно чтение использование подзапросов применение фильтрации до JOIN IN быстрее на маленьких таблицах используется JOIN сжатие базы данных ограничение уровня строки хранилище хранимых процедур использование только root-аккаунта использование WAL использование параметризованных запросов использование общего логина индексация пользователь может сам управлять доступом использование закрытого доступа явное назначение привилегий (GRANT/REVOKE) подзапрос, вызываемый хранимой процедурой права доступа параллельный SELECT ROLLBACK возникнет ошибка выполнения из-за нарушения правил группировки таблица содержит только атомарные значения таблица допускает наличие циклических зависимостей соединительная зависимость не допускает подключения не поддерживается транзакциями Materialize автоматически преобразуется в кластеризованную по первому столбцу кластеризованный индекс всегда требует наличия первичного ключа