Алгоритм поиска в базе данных
Поиск в базе данных — это последовательное выполнение операций: понять условие задачи, проверить каждую запись, отобрать подходящие строки и выполнить требуемый подсчёт. Такой порядок помогает решать задания экзамена, где ответом может быть количество записей, сумма, среднее значение или список найденных объектов.
1. Что именно ищет алгоритм
База данных обычно представлена таблицей. Запись — одна строка таблицы, описывающая объект. Поле — столбец с одним признаком объектов: названием, датой, числом, категорией. Поиск выполняется не по всей строке сразу, а по значениям выбранных полей.
Условие отбора — логическое выражение, которое для каждой записи принимает значение «истина» или «ложь». В результат поиска попадают только записи, для которых условие истинно. Перед решением изучите условие отбора и составной запрос.
Если условие запроса обозначить \(P\), то запись включается в результат тогда и только тогда, когда \(P=1\) (истина). При нескольких условиях сначала вычисляют каждое простое условие, затем применяют логические операции.
В простом условии сравнивают значение поля с числом, текстом или датой: \(x>10\), \(x=10\), \(x\le 10\). Для текста обычно требуется точное совпадение, например «Москва». Знаки \(>\), \(<\), \(=\), \(\ge\), \(\le\) нельзя заменять рассуждением «примерно больше» или «не меньше», если это не сказано в условии.
- Определите, какие поля участвуют в поиске.
- Переведите условие задачи в логическое выражение.
- Проверьте выражение для каждой записи.
- Подсчитайте или выпишите только подходящие записи.
- Проверьте результат другим способом.
2. Перевод условия в запрос
Сначала выделите ключевые слова. «И» означает одновременное выполнение условий, «или» — выполнение хотя бы одного, «не» — отрицание. Для составного выражения полезно поставить скобки: они показывают порядок вычисления и защищают от ошибки при смешении операций.
Например, фраза «балл не меньше 60 и не больше 90» превращается в \(60\le b\le90\), то есть в два условия: \(b\ge60\) и \(b\le90\). Фраза «город Москва или город Казань» означает \(город=\text{«Москва»}\lor город=\text{«Казань»}\).
Слова «не меньше» и «не больше» включают границу: используйте \(\ge\) и \(\le\). Слова «больше» и «меньше» границу не включают: используйте \(>\) и \(<\). Для интервалов прочитайте страницу интервал в запросе.
Если в условии есть несколько операций, учитывайте приоритет: сначала выполняется НЕ, затем И, затем ИЛИ. Чтобы не ошибиться, расставляйте скобки явно. Подробнее порядок разобран на странице приоритете логических операций в запросе.
Какие записи удовлетворяют условию \(x\ge5\) И \(x<8\)?
3. Пошаговый алгоритм поиска и подсчёта
Рассмотрим таблицу с полями «Город», «Год», «Продажи». Нужно узнать, сколько записей одновременно относятся к Москве и имеют продажи не менее 100.
| № | Город | Год | Продажи |
|---|---|---|---|
| 1 | Москва | 2022 | 120 |
| 2 | Казань | 2022 | 150 |
| 3 | Москва | 2023 | 90 |
| 4 | Москва | 2023 | 100 |
| 5 | Тула | 2023 | 110 |
| 6 | Москва | 2024 | 130 |
Условие состоит из двух частей: город должен быть равен Москве, а продажи — не меньше 100. Поэтому для каждой строки проверяем оба признака. Удобно вести отдельный счётчик: увеличивать его только после получения двух истинных ответов.
| № | Город = Москва | Продажи ≥ 100 | Подходит |
|---|---|---|---|
| 1 | 1 | 1 | 1 |
| 2 | 0 | 1 | 0 |
| 3 | 1 | 0 | 0 |
| 4 | 1 | 1 | 1 |
| 5 | 0 | 1 | 0 |
| 6 | 1 | 1 | 1 |
Подходят записи № 1, 4 и 6. Количество подходящих записей равно 3. Важно: запись № 3 не подходит, потому что «не меньше 100» означает \(\ge100\), а не «примерно 100».
Если требуется не количество записей, а сумма продаж, складывают значения только в подходящих строках: \(120+100+130=350\). Если требуется среднее, сначала находят сумму, затем делят на количество подходящих записей: \(350/3\approx116{,}67\). При другом требуемом поле прочитайте выбор полей в запросе.
4. Подсчёт и проверка результата
После отбора внимательно прочитайте, что именно спрашивается. «Сколько записей» — это количество строк. «Сколько различных городов» — количество уникальных значений, а повторения не учитываются. Для этого полезна страница подсчёт уникальных значений. «Среднее значение» считают только по отобранным строкам, если условие не требует другого.
- Перепроверить каждую границу интервала.
- Убедиться, что текстовые значения сравнены точно.
- Проверить, что при И выполнены все условия, а при ИЛИ — хотя бы одно.
- Не считать заголовок таблицы записью.
- Сверить итог ручным подсчётом или вспомогательным столбцом.
Проверка результата поиска — повторное выполнение отбора независимым способом: по строкам вручную, с помощью вспомогательных столбцов, сортировки или отфильтрованной таблицы. Проверка нужна, чтобы обнаружить пропущенные записи и ошибочно включённые строки. См. проверку результата поиска.
Для сложной задачи можно создать два вспомогательных столбца: в первом отметить выполнение условия \(A\), во втором — условия \(B\), а затем проверить столбец \(A\land B\). При работе в электронной таблице также важно не перепутать фильтрацию с сортировкой: сортировка меняет порядок строк, но не удаляет неподходящие записи.
1. Считают строки, где выполнено только одно условие, хотя требуется И. 2. Включают правую границу при знаке \(<\). 3. При ИЛИ требуют выполнения обоих условий. 4. Считают одинаковые значения несколько раз, хотя спрашиваются различные значения. 5. Используют среднее по всей таблице вместо среднего по найденным записям. 6. Не замечают, что значение поля является текстом, а не числом.
5. Универсальная схема решения экзаменационной задачи
Запишите условие в коротком виде, например \(A\land(B\lor C)\). Затем составьте таблицу истинности для отдельных условий или проверяйте строки по очереди. При необходимости применяйте проверку запроса таблицей. Не начинайте с вычислений: сначала определите множество подходящих записей, а уже потом считайте сумму, количество или среднее.
Мини-разбор с составным условием Алгоритм
Нужно найти записи, где год равен 2023 и город — Москва или Казань. Обозначим \(A=(год=2023)\), \(B=(город=Москва)\), \(C=(город=Казань)\). Итоговое условие:
Сначала для каждой строки проверяем скобки \(B\lor C\), затем соединяем результат с \(A\). Запись 2023 года из Тулы не подходит: \(1\land0=0\). Запись 2022 года из Москвы также не подходит: \(0\land1=0\). Подходят только строки 2023 года с Москвой или Казанью.
Быстрая проверка
Главное
- Поиск выполняется по записям, а условие проверяется для каждой строки.
- Составной запрос переводят в логическое выражение со скобками и явными границами.
- При И нужны все условия, при ИЛИ — хотя бы одно.
- Сначала отбирают записи, затем считают количество, сумму или среднее.
- Результат обязательно проверяют повторным просмотром таблицы или вспомогательными столбцами.