- •Дисциплина «базы данных»
- •1. Реляционная модель данных. Организация данных и ограничение целостности.
- •Выборка с условием
- •Выборка с упорядочением
- •Агрегирование данных. Sql-функции
- •Фраза group by
- •Использование фразы having
- •Запросы с использованием нескольких таблиц
- •Декартово произведение таблиц
- •Внутреннее соединение
- •Простые запросы и порядок их выполнения (условно отделенный пункт)
- •In ( select [Связь с продуктом]
Выборка с условием
Выборка с использованием фразы 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-значения.)
