Проверка результата поиска
Проверка результата поиска — это повторная проверка каждой найденной записи и самого условия, по которому выполнялся отбор. Такой алгоритм помогает обнаружить пропущенные строки, лишние записи, ошибки в знаках сравнения и неправильную обработку составных условий.
Зачем проверять результат поиска
При решении задач по базам данных и электронным таблицам ответ часто получают после фильтрации таблицы или выполнения запроса. Однако даже верно понятое условие можно ошибочно перенести в таблицу: перепутать AND и OR, включить граничное значение, принять текстовое поле за числовое или проверить не тот столбец.
Проверка результата состоит из двух независимых частей: нужно установить, что каждая выбранная запись подходит, и убедиться, что ни одна подходящая запись не пропущена. В задачах на количество записей достаточно дополнительно проверить число строк, удовлетворяющих условию, но надёжнее сначала найти сами записи, а затем пересчитать их.
Результат поиска — множество записей, для которых логическое условие запроса имеет значение «истина». Запись включается в ответ только тогда, когда условие выполнено полностью.
Корректный результат поиска должен удовлетворять двум требованиям: каждая включённая запись проходит условие, а каждая исключённая запись не проходит его. Проверка только выбранных строк не обнаруживает пропущенные записи.
Алгоритм проверки записей
Перед началом полезно обратиться к составному запросу и операциям сравнения в запросе: это помогает правильно разобрать условие на простые части. Саму проверку выполняйте в следующем порядке.
- Перепишите условие без сокращений. Например: «год не ранее 2020 и рейтинг не меньше 80» превратите в \(year \ge 2020\) и \(rating \ge 80\).
- Разделите условие на простые проверки по отдельным полям. Для каждой части определите, какой столбец используется и с каким значением сравнивается.
- Уточните логическую связь. При AND должны выполняться все части, при OR — хотя бы одна, при NOT — результат соответствующей части меняется на противоположный.
- Проверьте каждую найденную запись слева направо. Запишите значение каждой простой проверки: истина или ложь.
- Просмотрите все остальные записи. Ищите строку, которая тоже удовлетворяет условию, но не попала в результат.
- Сверьте количество найденных строк с требуемым ответом и убедитесь, что заголовок таблицы не посчитан как запись.
В электронной таблице удобно временно добавить вспомогательный столбец «Подходит». В каждой строке записывают результат условия, например =И(B2>=2020;C2>=80) или аналогичную формулу на языке используемой программы. Затем сравнивают этот столбец с фактически выбранными строками.
Подчёркивайте в условии название поля и рядом выписывайте значение из текущей строки. Так легко заметить, что сравнивается, например, дата публикации, а не дата обновления, или цена, а не количество.
Границы, типы данных и пустые значения
Особенно часто ошибки возникают около границы. Знаки \(>\) и \(\ge\) различаются включением граничного значения: условие \(x>10\) не принимает 10, а условие \(x\ge10\) принимает. Аналогично, \(x<10\) исключает 10, тогда как \(x\le10\) включает его.
| Запись в условии | Что включается | Что не включается |
|---|---|---|
| \(x>5\) | 6, 7, 10 | 5 и меньшие значения |
| \(x\ge5\) | 5, 6, 7 | 4 и меньшие значения |
| \(x<5\) | 4, 3, 0 | 5 и большие значения |
| \(x\le5\) | 5, 4, 0 | 6 и большие значения |
Проверьте и тип данных. Число 25 и текст «25» могут отображаться одинаково, но сравниваться по-разному. Дата должна быть распознана как дата, а не как произвольная строка. Пустая ячейка не равна нулю во всех операциях: смысл зависит от программы и формулы, поэтому такие строки нужно проверять отдельно.
Если условие содержит сортировку, не путайте порядок с отбором. Сортировка записей базы изменяет порядок строк, но сама по себе не удаляет записи и не делает их подходящими или неподходящими.
Какая запись удовлетворяет условию \(year\ge2020\) И \(score>70\)?
Разобранный пример проверки
Пусть дана таблица о фильмах. Требуется найти фильмы, выпущенные не ранее 2020 года, с рейтингом не ниже 8,0 и длительностью не более 120 минут. Условие имеет вид: \(year\ge2020 \land rating\ge8.0 \land duration\le120\).
| Фильм | Год | Рейтинг | Длительность, мин |
|---|---|---|---|
| A | 2020 | 8,0 | 120 |
| B | 2021 | 8,4 | 130 |
| C | 2019 | 9,1 | 110 |
| D | 2022 | 7,9 | 100 |
| E | 2020 | 8,2 | 115 |
| F | 2023 | 8,7 | 119 |
Предположим, после поиска получены фильмы A, E и F. Нужно проверить не только их, но и строки B, C, D.
Все включённые строки прошли три проверки, а каждая исключённая строка нарушает хотя бы одну часть условия. Следовательно, результат A, E, F корректен, а количество найденных записей равно 3.
1. Считать условие «не менее 8» как \(>8\), хотя правильно \(\ge8\). 2. Использовать OR вместо AND и включить запись, прошедшую только одну проверку. 3. Проверить найденные строки, но не просмотреть исключённые. 4. Посчитать строку заголовков. 5. Перепутать пустое значение с нулём. 6. При использовании фильтра забыть, что скрытые строки могут оставаться в таблице и влиять на ручной подсчёт.
Проверка в базе и электронной таблице
В базе данных начните с полей, указанных в запросе, и для каждой записи мысленно вычислите условие. Если используется поиск в базе данных, полезно сверить не только отображённый результат, но и исходные значения в записи. Для подсчёта строк можно применить идеи страницы подсчёт записей по условию, но итоговое число следует подтвердить просмотром самих строк.
В таблице сначала проверьте диапазон формулы: ссылка должна начинаться с первой строки данных и изменяться построчно. Абсолютные ссылки, например $A$1, не должны случайно заменить относительные ссылки на текущую строку. После копирования формулы сравните несколько строк вручную, особенно первую, последнюю и строки с граничными значениями.
Если в условии есть вычисляемый показатель, например среднее или сумма, сначала проверьте агрегатные показатели базы данных, а затем применяйте фильтр. Не округляйте промежуточные значения без указания в условии: число 7,95 может отображаться как 8,0, но фактически не достигать порога 8,0.
Для каждой записи задайте вопрос: «Выполнены ли все требования условия?» Для всей таблицы задайте второй вопрос: «Не пропустил ли я другую подходящую запись?» Только оба ответа вместе дают надёжную проверку.
Quick-test
Проверьте себя
Главное
- Разберите запрос на простые условия и определите логические связи между ними.
- Проверяйте знаки сравнения, особенно включение граничных значений.
- Для каждой найденной строки убедитесь, что истинны все необходимые части условия.
- Просмотрите исключённые строки, чтобы обнаружить пропущенные подходящие записи.
- Не смешивайте фильтрацию, сортировку и подсчёт: это разные операции.
- В таблицах дополнительно контролируйте диапазоны формул, типы данных и пустые ячейки.