Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БД.docx
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
71 Кб
Скачать
☆

Выборка с условием

Выборка с использованием фразы WHERE

Использование операторов сравнения. В синтаксисе фразы WHERE показано, что для отбора нужных строк таблицы можно использовать операторы сравнения = , <>, <, <=, >, >=, которые могут предваряться оператором NOT, создавая, например, отношения "не меньше" и "не больше".

Так, для получения перечня продуктов, практически не содержащих углеводов, можно сформировать запрос:

SELECT Продукт, Белки, Жиры, Углев, K, Ca, Na, B2, PP, C

FROM Продукты

WHERE Углев = 0;

Возможность использования нескольких условий, соединенных логическими операторами, позволяет осуществить более детальный отбор строк: WHERE Углев = 0 AND Na = 0;

Использование BETWEEN. С помощью BETWEEN ... AND ... (находится в интервале от ... до ...) можно отобрать строки, в которых значение какого-либо столбца находятся в заданном диапазоне: WHERE Белки BETWEEN 10 AND 50;

Можно задать и NOT BETWEEN (не принадлежит диапазону «между»).

BETWEEN особенно удобен при работе с данными, задаваемыми интервалами, начало и конец которых расположены в разных столбцах, например:

... WHERE Начало BETWEEN '1-9-1993' AND '31-8-1994'

... WHERE Начало BETWEEN '1-9-1993' AND '31-8-1994'

OR Конец BETWEEN '1-9-1993' AND '31-8-1994'

... WHERE '15-05-1994' BETWEEN Начало AND Конец

Использование IN. форма IN, по сути, является краткой записью последовательности отдельных сравнений, соединенных операторами OR, то есть

WHERE Основа IN (Яйца Крупа Овощи);

фактически эквивалентно:

WHERE Основа=Яйца OR Основа=Крупа OR Основа=Овощи;

Также можно задать и NOT IN, а также есть возможность использования IN (NOT IN) с подзапросом.

Использование LIKE. Пример:

WHERE Блюдо LIKE 'Салат%';

Обычная форма имя_столбца LIKE текстовая_константа для столбца текстового типа позволяет отыскать все значения указанного столбца, соответствующие образцу, заданному текстовой_константой. Символы этой константы интерпретируются следующим образом (стандарт):

  • _ подчеркивание – заменяет любой одиночный символ,

  • % процент – заменяет любую последовательность из N символов (где N может быть нулем),

  • все другие символы означают просто сами себя.

В Microsoft Access символы маски дополнены:

  • ? знак вопроса – заменяет любой одиночный символ,

  • * звездочка – заменяет любую последовательность из N символов (где N может быть нулем),

  • # - любая цифра,

  • [список_знаков] - любой одиночный знак, входящий в список_знаков,

  • [!список_знаков] - любой одиночный знак, не входящий в список_знаков,

  • все другие символы означают просто сами себя.

Следовательно, в приведенном примере SELECT будет осуществлять выборку записей из таблицы Блюда, для которых значение в столбце Блюдо начинается сочетанием 'Салат' и содержит любую последовательность из нуля или более символов, следующих за сочетанием 'Салат'. Если бы среди блюд были "Луковый салат", "Фруктовый салат" и т.п., то они не были бы найдены. Для их отыскания надо изменить фразу WHERE:

WHERE Блюдо LIKE '%салат%';

Вовлечение неопределенного значения (NULL-значения). Как было сказано выше, если при загрузке данных не введено значение в какое-либо поле таблицы, то СУБД поместит в него NULL-значение. Аналогичное значение можно ввести в поле таблицы, выполняя операцию изменения данных. Так, при отсутствии сведений о наличии у поставщиков судака и моркови в столбцы Цена и К_во соответствующих строк таблицы Поставки вводится NULL и там будет храниться код NULL-значения.

В этом случае для выявления названий продуктов, отсутствующих в кладовой, можно дать запрос:

WHERE К_во IS NULL;

Использование условий столбец IS NULL и столбец IS NOT NULL вместо, например, столбец = NULL и столбец <> NULL связано с тем, что ничто – даже само NULL-значение – не считается равным другому NULL-значению! (Несмотря на это, два неопределенных значения рассматриваются, однако, как дубликаты друг друга при исключении дубликатов, и предложение SELECT DISTINCT даст в результате не более одного NULL-значения.)