Запросы к базам данных для ЕГЭ по информатике
Тема 'Запросы к БД' в ЕГЭ по информатике охватывает умение работать с реляционными базами данных: формулировать условия выборки, сортировать, группировать и вычислять агрегатные функции. В заданиях требуется либо написать 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 (если нет скобок).
Дана таблица 'Книги' с полями: 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 сортировка влияет только на порядок вывода, не на набор строк.
Таблица 'Сотрудники': 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).
Таблица 'Заказы': 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 в браузере).
Таблица 'Оценки': 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.
Частые вопросы
Без карты, без кредитки. Выбери персонажа — учи голосом, побеждай в баттлах.