ЕГЭ · Информатика

Запросы к базам данных для ЕГЭ по информатике

Тема 'Запросы к БД' в ЕГЭ по информатике охватывает умение работать с реляционными базами данных: формулировать условия выборки, сортировать, группировать и вычислять агрегатные функции. В заданиях требуется либо написать SQL-запрос, либо определить результат выполнения существующего запроса.

В 2025 году в ЕГЭ по информатике задания на базы данных встречаются в номере 9 (базовый SQL) и в номере 18 (работа с многотабличными запросами). Для успешного решения необходимо понимать логику операторов SELECT, WHERE, ORDER BY, GROUP BY, а также уметь комбинировать условия с AND, OR, NOT.

Этот материал поможет систематизировать знания, разобрать типовые задачи уровня ЕГЭ и избежать распространённых ошибок. Рекомендуется для учащихся 10-11 классов, которые готовятся к экзамену самостоятельно или с репетитором.

🧑‍🏫
Разберём эту тему вместе

Без карты, без кредитки. Выбери персонажа — учи голосом, побеждай в баттлах.

Условия выборки: AND, OR, NOT

Условия WHERE в SQL позволяют отфильтровать строки. Логические операторы AND, OR, NOT используются для комбинирования условий.

AND — все условия должны быть истинны. OR — хотя бы одно истинно. NOT — отрицание условия. Приоритет: NOT > AND > OR, но рекомендуется использовать скобки для ясности.

Пример: найти учеников, которые сдали математику (math >= 70) И физику (phys >= 70), НО не сдали русский (rus < 60). Запрос: SELECT * FROM students WHERE math >= 70 AND phys >= 70 AND NOT (rus >= 60).

В ЕГЭ часто встречаются задачи, где нужно по словесному описанию восстановить условие или наоборот. Важно помнить, что NOT применяется к одному условию, а не ко всему WHERE (если нет скобок).

Пример 1
Условие.

Дана таблица 'Книги' с полями: id, название, автор, год, цена. Напишите SQL-запрос для выбора названий книг, изданных после 2010 года, стоимостью от 500 до 1000 рублей (включительно), исключая книги автора 'Пушкин'.

Решение.

Шаг 1. Определяем таблицу и поля: SELECT название FROM Книги.
Шаг 2. Условие 'после 2010 года' → WHERE год > 2010.
Шаг 3. 'Стоимость от 500 до 1000' → AND цена >= 500 AND цена <= 1000 (или BETWEEN 500 AND 1000).
Шаг 4. 'Исключая автора Пушкин' → AND NOT автор = 'Пушкин'.
Итоговый запрос: SELECT название FROM Книги WHERE год > 2010 AND цена BETWEEN 500 AND 1000 AND NOT автор = 'Пушкин'.

Сортировка результатов

ORDER BY сортирует строки по одному или нескольким столбцам. По умолчанию — по возрастанию (ASC), для убывания — DESC. Можно сортировать по нескольким полям: сначала по первому, при равенстве — по второму и т.д.

В ЕГЭ часто просят отсортировать по убыванию какого-либо числового поля, а при совпадении — по возрастанию строкового. Пример: ORDER BY балл DESC, фамилия ASC.

Важно: ORDER BY выполняется после WHERE и GROUP BY, но перед LIMIT (если есть). В заданиях без LIMIT сортировка влияет только на порядок вывода, не на набор строк.

Пример 1
Условие.

Таблица 'Сотрудники': id, имя, отдел, зарплата. Выведите имена и зарплаты сотрудников отдела 'Продажи', отсортировав по убыванию зарплаты. Если зарплата одинаковая, то по возрастанию имени.

Решение.

Шаг 1. Выбор полей: SELECT имя, зарплата FROM Сотрудники.
Шаг 2. Условие: WHERE отдел = 'Продажи'.
Шаг 3. Сортировка: ORDER BY зарплата DESC, имя ASC.
Итоговый запрос: SELECT имя, зарплата FROM Сотрудники WHERE отдел = 'Продажи' ORDER BY зарплата DESC, имя ASC.

Группировка и агрегаты

GROUP BY группирует строки с одинаковыми значениями в указанных столбцах. Агрегатные функции (COUNT, SUM, AVG, MAX, MIN) вычисляются для каждой группы.

В ЕГЭ часто требуется посчитать количество записей в группе (COUNT), сумму (SUM) или среднее (AVG). Условие на группы задаётся через HAVING (а не WHERE). WHERE фильтрует строки до группировки, HAVING — после.

Пример: найти количество книг каждого автора, у которых больше 5 книг. Запрос: SELECT автор, COUNT(*) FROM Книги GROUP BY автор HAVING COUNT(*) > 5.

Ошибки: путают WHERE и HAVING, забывают включить в SELECT все неагрегированные столбцы (должны быть в GROUP BY).

Пример 1
Условие.

Таблица 'Заказы': id, клиент, сумма, дата. Для каждого клиента посчитайте общую сумму его заказов и количество заказов. Выведите только тех клиентов, у которых общая сумма превышает 10000. Отсортируйте по убыванию общей суммы.

Решение.

Шаг 1. Группировка по клиенту: GROUP BY клиент.
Шаг 2. Агрегаты: SUM(сумма) AS общая_сумма, COUNT(*) AS количество.
Шаг 3. Условие на группу: HAVING SUM(сумма) > 10000.
Шаг 4. Сортировка: ORDER BY общая_сумма DESC.
Итоговый запрос: SELECT клиент, SUM(сумма) AS общая_сумма, COUNT(*) AS количество FROM Заказы GROUP BY клиент HAVING SUM(сумма) > 10000 ORDER BY общая_сумма DESC.

Базовый SQL: SELECT, WHERE, ORDER BY, GROUP BY

Это основа запросов к одной таблице. Порядок выполнения в SQL: FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY. Понимание этого порядка помогает избежать ошибок.

SELECT указывает столбцы для вывода. Можно использовать * для всех столбцов, но в ЕГЭ обычно просят конкретные поля. DISTINCT убирает дубликаты.

Пример полного запроса: SELECT город, COUNT(*) AS кол_во FROM покупатели WHERE возраст > 18 GROUP BY город HAVING COUNT(*) > 10 ORDER BY кол_во DESC.

В заданиях ЕГЭ также встречаются подзапросы и JOIN, но для базового уровня достаточно уверенного владения этими конструкциями. Рекомендуется практиковаться на реальных базах данных (например, SQLite в браузере).

Пример 1
Условие.

Таблица 'Оценки': id, ученик, предмет, балл. Выведите предметы, средний балл по которым выше 80. Результат отсортируйте по убыванию среднего балла. Используйте агрегатную функцию AVG.

Решение.

Шаг 1. Группировка по предмету: GROUP BY предмет.
Шаг 2. Вычисление среднего: AVG(балл) AS средний_балл.
Шаг 3. Условие: HAVING AVG(балл) > 80.
Шаг 4. Сортировка: ORDER BY средний_балл DESC.
Итоговый запрос: SELECT предмет, AVG(балл) AS средний_балл FROM Оценки GROUP BY предмет HAVING AVG(балл) > 80 ORDER BY средний_балл DESC.

Разбор типовой задачи ЕГЭ №9

Рассмотрим задачу из демоверсии 2025 года (аналог). Дана таблица 'Спортсмены' с полями: id, имя, вид_спорта, возраст, медали. Напишите запрос для получения списка видов спорта, в которых участвуют спортсмены старше 25 лет, имеющие не менее 3 медалей. Вывести вид спорта и количество таких спортсменов. Отсортировать по убыванию количества.

Решение: группируем по виду_спорта, фильтруем строки WHERE возраст > 25 AND медали >= 3, затем группируем и считаем COUNT(*). Условие HAVING не нужно, так как фильтр по строкам, а не по группам. Сортировка по COUNT(*) DESC.

Запрос: SELECT вид_спорта, COUNT(*) AS количество FROM Спортсмены WHERE возраст > 25 AND медали >= 3 GROUP BY вид_спорта ORDER BY количество DESC.

Важно: WHERE применяется до группировки, поэтому отбираются только подходящие спортсмены. Если бы требовалось отфильтровать виды спорта с минимальным количеством спортсменов, использовали бы HAVING.

Частые вопросы

Как отличить WHERE от HAVING?
WHERE фильтрует строки до группировки, HAVING — после. Если условие относится к отдельным записям (например, возраст > 18) — используйте WHERE. Если условие относится к группе (например, COUNT(*) > 5) — используйте HAVING. Ошибка: написать HAVING возраст > 18 — неправильно, так как возраст не агрегат.
Можно ли в одном запросе использовать AND, OR и NOT вместе?
Да, но важно помнить приоритет: NOT > AND > OR. Для избежания путаницы используйте скобки. Например: WHERE (город = 'Москва' OR город = 'СПб') AND NOT возраст < 18.
Зачем нужна сортировка, если в ЕГЭ часто не спрашивают порядок вывода?
В некоторых заданиях явно указано 'отсортировать по...'. Даже если не указано, сортировка может быть частью условия задачи. Кроме того, умение сортировать проверяется, и неправильный ORDER BY может привести к неверному ответу, если порядок влияет на выборку (например, LIMIT).
Как подготовиться к заданиям по БД на ЕГЭ?
Решайте задачи из открытого банка ФИПИ и демоверсий. Практикуйтесь в написании SQL на онлайн-тренажёрах (например, SQLite). Обратите внимание на типичные ловушки: путаница COUNT(*) и COUNT(столбец), неправильное использование GROUP BY, забытые скобки. Для углублённого разбора можно использовать AI-репетитора, например Наставника, который объяснит тему в диалоге и разберёт ваши ошибки.
Что такое агрегатные функции и какие из них чаще всего встречаются?
Агрегатные функции вычисляют одно значение по набору строк: COUNT (количество), SUM (сумма), AVG (среднее), MAX (максимум), MIN (минимум). В ЕГЭ чаще всего используются COUNT и SUM. Важно: они игнорируют NULL, кроме COUNT(*), который считает все строки.
Можно ли использовать GROUP BY без агрегатных функций?
Да, но это бессмысленно: GROUP BY без агрегатов просто группирует строки, и SELECT может содержать только столбцы из GROUP BY. Результат будет похож на SELECT DISTINCT. В ЕГЭ такое задание маловероятно, но знать полезно.
🧑‍🏫
Разберём эту тему вместе

Без карты, без кредитки. Выбери персонажа — учи голосом, побеждай в баттлах.

Запросы к БД ЕГЭ: разбор темы, примеры и FAQ