Задание 3 ЕГЭ по информатике: поиск в реляционной базе данных
Задание 3 ЕГЭ по информатике даёт файл с базой данных из нескольких связанных таблиц и вопрос, для ответа на который нужно отобрать записи по нескольким условиям. Решается в электронной таблице: сведения из справочных таблиц подтягивают функцией ВПР, строки отбирают фильтром и считают сумму.
- Что проверяет: Умение поиска информации в реляционных базах данных. Базовый уровень сложности, для выполнения нужен редактор электронных таблиц.
- Баллы: 1 первичный балл
- Формат ответа: Целое число в тех единицах, которые указаны в вопросе.
- Программа: задание решают без программы, ответ можно проверить на Python
- Уровень сложности: базовый
- Время: около 3 минут по спецификации
- Кодификатор: 4.5 — табличные (реляционные) базы данных: поиск, сортировка, фильтрация, запросы к многотабличным базам данных; Требование 1.6 — сведения о базах данных, их структуре, средствах создания и работы с ними
Как решать
На экзамене база дана файлом электронной таблицы: каждая таблица на своём листе. Главная таблица содержит операции (поступления, продажи, выдачи), справочные — сведения о товарах или книгах и о магазинах или библиотеках. Таблицы связаны по номерам: ID магазина, артикулу, шифру книги.
Шаг 1. На листе с операциями добавьте справа столбцы для сведений из справочных таблиц. Функция ВПР ищет значение в первом столбце другого листа и возвращает значение из нужного столбца той же строки. Например, =ВПР(C2;Магазин!A:C;2;0) вернёт район магазина с номером из ячейки C2. Последний аргумент 0 означает точное совпадение.
Шаг 2. Включите автофильтр и отберите строки по всем условиям вопроса: тип операции, район, период, раздел или наименование. Для наименования используйте условие «начинается с» или «содержит», если в вопросе сказано «все виды».
Шаг 3. Добавьте столбец с нужной величиной, например количество упаковок, умноженное на количество в упаковке, и найдите сумму по отобранным строкам. Функция ПРОМЕЖУТОЧНЫЕ.ИТОГИ(9;диапазон) складывает только видимые строки, обычная СУММ учитывает и скрытые фильтром.
Вместо фильтра можно использовать СУММЕСЛИМН по добавленным столбцам. Если удобнее программа, сохраните листы в формате CSV и прочитайте их на Python, как в примерах ниже. В примерах таблицы небольшие, чтобы ответ можно было проверить вручную; в экзаменационном файле строк сотни.
Примеры с решением
Пример 1
В файле 03_ex1.txt — фрагмент базы данных «Канцелярия» о поставках и продажах в магазинах города. В файле три таблицы, они разделены пустой строкой, столбцы разделены табуляцией.
Таблица «Движение товаров» содержит записи о поступлении товаров в магазины и о продажах с 1 по 14 марта 2026 года. Поле «Тип операции» содержит значение «Поступление» или «Продажа», в поле «Количество упаковок» записано, сколько упаковок поступило или продано за день. Столбцы: ID операции, Дата, ID магазина, Артикул, Количество упаковок, Тип операции.
Таблица «Товар»: Артикул, Отдел, Наименование товара, Ед. изм., Количество в упаковке, Цена за упаковку.
Таблица «Магазин»: ID магазина, Район, Адрес.
Используя информацию из базы данных, определите, сколько тетрадей всех видов (в штуках) поступило в магазины Заречного района с 3 по 10 марта включительно. В ответе запишите только число.
Файл данных: 03_ex1.txt — 64 строки, 2,9 КБ. Первые строки файла:
# Движение товаров ID операции Дата ID магазина Артикул Количество упаковок Тип операции 1 01.03.2026 1 108 2 Поступление 2 01.03.2026 6 106 22 Продажа 3 01.03.2026 2 107 13 Поступление 4 02.03.2026 5 103 11 Продажа 5 02.03.2026 6 102 11 Продажа 6 02.03.2026 1 105 15 Продажа
Проверка ответа на Python
def read_tables(name):
"""Файл примера: три таблицы, между ними пустая строка; первая строка блока — имя таблицы."""
tables = {}
with open(name, encoding="utf-8") as f:
for block in f.read().strip().split("\n\n"):
lines = block.splitlines()
header = lines[1].split("\t")
tables[lines[0].lstrip("# ")] = [dict(zip(header, line.split("\t"))) for line in lines[2:]]
return tables
t = read_tables("03_ex1.txt")
district = {s["ID магазина"]: s["Район"] for s in t["Магазин"]}
goods = {g["Артикул"]: g for g in t["Товар"]}
total = 0
for op in t["Движение товаров"]:
day, month, year = map(int, op["Дата"].split("."))
item = goods[op["Артикул"]]
if (op["Тип операции"] == "Поступление"
and district[op["ID магазина"]] == "Заречный"
and month == 3 and 3 <= day <= 10
and item["Наименование товара"].startswith("Тетрадь")):
total += int(op["Количество упаковок"]) * int(item["Количество в упаковке"])
print(total)Ответ: 484
Магазины Заречного района — номера 1 и 3. Тетради — товары с артикулами 101, 102 и 106: их наименование начинается со слова «Тетрадь».
С 3 по 10 марта в магазины 1 и 3 поступили тетради два раза: операция 8 — 14 упаковок товара 106 по 6 штук, операция 17 — 20 упаковок товара 102 по 20 штук. Продажи и поступления в другие дни и районы в ответ не входят.
Итого 14 · 6 + 20 · 20 = 84 + 400 = 484 тетради.
Пример 2
В файле 03_ex2.txt — фрагмент базы данных «Библиотеки района» о выдаче и возврате книг. Таблицы разделены пустой строкой, столбцы — табуляцией.
Таблица «Движение книг» содержит записи с 8 по 21 апреля 2026 года: ID записи, Дата, ID библиотеки, Шифр книги, Количество экземпляров, Операция. Поле «Операция» содержит значение «Выдача» или «Возврат».
Таблица «Книга»: Шифр книги, Раздел, Название, Год издания, Количество страниц.
Таблица «Библиотека»: ID библиотеки, Район, Адрес.
Определите, сколько всего страниц в экземплярах книг раздела «История», которые выдали библиотеки Центрального района с 12 по 18 апреля включительно. В ответе запишите только число.
Файл данных: 03_ex2.txt — 62 строки, 2,6 КБ. Первые строки файла:
# Движение книг ID записи Дата ID библиотеки Шифр книги Количество экземпляров Операция 1 08.04.2026 5 Ф-01 2 Выдача 2 08.04.2026 1 Н-01 6 Выдача 3 08.04.2026 3 Н-02 4 Возврат 4 09.04.2026 2 И-03 2 Выдача 5 09.04.2026 1 Н-01 6 Возврат 6 09.04.2026 5 Ф-01 2 Выдача
Проверка ответа на Python
def read_tables(name):
"""Файл примера: три таблицы, между ними пустая строка; первая строка блока — имя таблицы."""
tables = {}
with open(name, encoding="utf-8") as f:
for block in f.read().strip().split("\n\n"):
lines = block.splitlines()
header = lines[1].split("\t")
tables[lines[0].lstrip("# ")] = [dict(zip(header, line.split("\t"))) for line in lines[2:]]
return tables
t = read_tables("03_ex2.txt")
district = {lib["ID библиотеки"]: lib["Район"] for lib in t["Библиотека"]}
books = {b["Шифр книги"]: b for b in t["Книга"]}
pages = 0
for rec in t["Движение книг"]:
day, month, year = map(int, rec["Дата"].split("."))
book = books[rec["Шифр книги"]]
if (rec["Операция"] == "Выдача"
and district[rec["ID библиотеки"]] == "Центральный"
and month == 4 and 12 <= day <= 18
and book["Раздел"] == "История"):
pages += int(rec["Количество экземпляров"]) * int(book["Количество страниц"])
print(pages)Ответ: 3584
Библиотеки Центрального района — номера 1 и 3. Книги раздела «История» — шифры И-01, И-02 и И-03.
Подходящих выдач три: запись 16 (13 апреля, 5 экземпляров И-02 по 280 страниц), запись 19 (14 апреля, 4 экземпляра И-03 по 390 страниц) и запись 25 (16 апреля, 2 экземпляра И-01 по 312 страниц). Возвраты не учитываются.
Сумма: 5 · 280 + 4 · 390 + 2 · 312 = 1400 + 1560 + 624 = 3584 страницы.
Типичные ошибки
- Считают упаковки вместо штук, килограммов или страниц. Единица измерения указана в вопросе, пересчитайте через поле с количеством в упаковке или числом страниц.
- Забывают условие на тип операции и складывают поступления с продажами или выдачи с возвратами.
- Неверно задают границы периода. «С 3 по 10 марта включительно» означает, что обе даты входят в отбор.
- Складывают отфильтрованные строки функцией СУММ: она учитывает и скрытые строки. Используйте ПРОМЕЖУТОЧНЫЕ.ИТОГИ или скопируйте отобранные строки на новый лист.
- Ищут товар по точному наименованию, когда в вопросе сказано «все виды». Нужен фильтр «начинается с» или «содержит».
Потренироваться на тренажёре
- Списки в Python: задачи с проверкой
- Python для школьников: бесплатный курс
- Задачи по Python для начинающих
Частые вопросы
В какой программе решать задание 3 ЕГЭ по информатике?
В редакторе электронных таблиц на экзаменационном компьютере. В спецификации 2027 года для этого задания указано специализированное программное обеспечение. Можно решить и на Python, если сохранить листы в формате CSV, но таблица обычно быстрее.
Зачем в задании 3 функция ВПР?
ВПР добавляет к каждой операции сведения из справочной таблицы: район магазина, наименование товара, количество в упаковке. После этого все условия вопроса проверяются на одном листе одним фильтром.
Сколько времени и баллов приходится на задание 3?
Около 3 минут по спецификации 2027 года, за верный ответ ставят 1 первичный балл.
Официальные материалы
- Демоверсия, спецификация и кодификатор ЕГЭ 2027 по информатике (архив, проект)
- Демоверсии, спецификации и кодификаторы ЕГЭ по всем предметам
- Открытый банк заданий ЕГЭ
Другие задания
Все задания и структура экзамена — на странице ЕГЭ по информатике. Соседние разборы: задание 2 и задание 4.
Описание задания сверено 28 сентября 2026 года со спецификацией 2027 года (документы 2027 года). Примеры составлены нами по структуре демоверсии, каждое решение запущено, и напечатанный им ответ совпадает с ответом на странице. Кодолимп не связан с разработчиками экзамена. Заметили неточность — напишите нам.