16 вопросов, около 12 минут
Итоговый тест по курсу «SQL с нуля»
16 вопросов по основам SQL с разбором ответов: SELECT и WHERE, сортировка, агрегаты и NULL, GROUP BY, JOIN, подзапросы, CASE и изменение данных. В конце — какие темы повторить и вывод по вашим ответам.
Тест по всему курсу
Проверьте, как усвоился курс: вопросы по всем урокам, а в конце — разбор ошибок и темы, которые стоит повторить.
-
Аналитик пишет запросы, а данные хранит и выполняет запросы PostgreSQL. Чем PostgreSQL является по отношению к SQL?
SQL — язык, а PostgreSQL, MySQL, SQLite — системы управления базами данных, которые на этом языке разговаривают.
-
В магазине две книги с одинаковым названием. Как заказ однозначно указывает, какую из них купили?
Первичный ключ уникален, поэтому по нему запись находят без путаницы. Название, цена и порядок строк могут совпадать или меняться.
-
Какое условие найдёт книги дешевле 500 рублей среди романов и фэнтези?
IN собирает оба жанра, а AND применяет ограничение по цене к обоим. В первом варианте AND сработает раньше OR, и цена ограничит только фэнтези.
-
Какой образец LIKE найдёт авторов, чья фамилия заканчивается на «ий»?
Знак % перед «ий» означает «сколько угодно символов в начале», а после «ий» ничего нет — значит, на «ий» строка заканчивается.
-
Каталог показывает по 10 книг на странице, отсортированных по названию. Какой запрос вернёт третью страницу?
Первые две страницы — это 20 строк, их пропускает OFFSET 20, а LIMIT 10 берёт следующие десять. Без ORDER BY страницы будут каждый раз разными.
-
Запрос SELECT title, price * 2 AS double_price FROM books выполнили. Что стало с ценами в таблице?
SELECT читает данные. Посчитанный столбец существует только в ответе, а для изменения таблицы есть UPDATE.
-
В столбце bonus три строки: 100, NULL и 200. Что вернёт AVG(bonus)?
Агрегаты пропускают NULL: среднее считается по двум заполненным значениям, (100 + 200) / 2 = 150.
-
В отчёте нужно показать телефон клиента, а если его нет — слово «нет». Как это сделать, не меняя таблицу?
COALESCE подставляет замену вместо NULL только в результате запроса. UPDATE изменил бы сами данные.
-
Нужны жанры, в которых больше двух книг. Какой запрос правильный?
Количество книг в жанре — итог группы, поэтому условие пишут в HAVING после GROUP BY. В WHERE агрегат ещё не посчитан.
-
В каком порядке база выполняет части запроса?
Сначала берётся таблица, затем отбираются строки, собираются группы, отсеиваются группы, вычисляется SELECT и только потом сортировка.
-
Таблица books — 8 строк, orders — 9. После JOIN заказов с книгами по ключу получилось 72 строки. О чём это говорит?
У каждого заказа ровно одна книга, поэтому после верного соединения строк должно остаться девять. 72 = 8 × 9 — признак условия, которое всегда истинно.
-
Нужен список всех книг и количество их продаж, включая книги, которые никто не купил. Как начать запрос?
Книги нужны все, поэтому они стоят слева, а заказы присоединяются через LEFT JOIN. Книга без продаж останется в результате с NULL в полях заказа.
-
Что вернёт запрос SELECT name FROM customers WHERE id NOT IN (SELECT customer_id FROM orders)?
Подзапрос собирает id всех клиентов с заказами, а NOT IN оставляет остальных. Если в подзапросе окажется NULL, NOT IN не вернёт ничего, — тогда надёжнее LEFT JOIN.
-
В CASE первая ветка WHEN amount > 500 THEN 'крупный', вторая WHEN amount > 1000 THEN 'очень крупный'. Как назовут заказ на 1200?
CASE останавливается на первой подходящей ветке. 1200 больше 500, и до второй ветки дело не доходит, поэтому строгое условие ставят первым.
-
Нужно снизить цену одной книги с id = 3. Какой запрос безопасен?
WHERE ограничивает правку одной строкой. Без условия цена 600 станет у всех книг.
-
Вы выполнили BEGIN, затем DELETE и COMMIT. Можно ли теперь вернуть строки командой ROLLBACK?
ROLLBACK отменяет только незавершённую транзакцию. После COMMIT изменения постоянны — поэтому важные правки сначала проверяют и делают копию.
А теперь о вас
Три вопроса без правильных ответов — о том, подходит ли вам это направление.
Что дальше
Если тема зацепила, продолжить можно так.