
- •!!! Для дальнейшей работы откройте файл Учебной базы данных!!!
- •1. Основное sql-выражение для выборки данных
- •2. Уточнения запроса
- •2.1. Оператор where
- •Предикаты сравнения
- •Предикаты для вложенных запросов
- •2.2. Оператор group by
- •2.3. Оператор having
- •2.4. Оператор order by
- •2.5. Логические операторы
- •Список контрольных вопросов:
- •Задачи для самостоятельного выполнения:
2.1. Оператор where
Условия поиска в операторе where (где) являются логическими выражениями, т. е. принимающими одно из двух возможных значений — true (ИСТИНА) или false (ЛОЖЬ). Например, выражение Сумма__заказа > 500 является истинным (имеет значение true), если в текущей записи таблицы значение столбца Сумма_заказа превышает 500. В противном случае это выражение ложно (имеет значение false). Одно и то же логическое выражение может быть истинным для одних записей и ложным для других. Вообще говоря, в SQL логические выражения могут принимать еще и неопределенное значение. Это происходит тогда, когда в выражении некоторые элементы имеют значение null. Таким образом, в SQL мы имеем дело не с классической двузначной, а с трехзначной логикой.
Таким образом, выражение, следующее за оператором where, возвращает одно из трех значений: true, false или null. При выполнении запроса (SQL-выражения) логическое выражение where применяется ко всем записям исходной таблицы. Если оно истинно для данной записи исходной таблицы, то эта запись выбирается и будет представлена в результатной таблице; в противном случае запись не попадет в результатную таблицу.
При составлении логических выражений используются специальные ключевые слова и символы операций сравнения, которые называют предикатами. Например, в выражении Сумма_заказа > 500 применен предикат сравнения (>).
Выражения с оператором where используются не только при выборке данных (т. е. с оператором select), но и при вставке, модификации и удалении записей.
Наиболее часто используются предикаты сравнения, такие как =, > , <, <>, <= и >=. Однако имеются и другие.
Далее приведен список всех предикатов:
Предикаты сравнения:
(=), (<), (>), (<>), (<=), (>=);
BETWEEN;
IN, NOT IN;
LIKE, NOT LIKE;
IS NULL;
Предикаты для вложенных запросов:
ALL, SOME, ANY;
EXISTS;
UNIQUE;
DISTINCT;
OVERLAPS;
MATCH;
SIMILAR.
Предикаты сравнения
В первую очередь это операторы сравнения: (=), (<), (>), (<>), (<=), (>=).
BETWEEN
Предикат between (между) позволяет задать выражение проверки вхождения какого-либо значения в диапазон, определяемый граничными значениями. Например:
WHERE Сумма_заказа BETWEEN 100 AND 750
Здесь ключевое слово and представляет собой логический союз И. Граничные значения (в примере это 100 и 750) входят в диапазон. Причем первое граничное значение должно быть не больше второго.
Эквивалентным приведенному является выражение с предикатами сравнения:
WHERE Сумма_заказа >= 100 AND Сумма_заказа <= 750
Кроме данных числового типа, в выражениях с beetween можно использовать данные следующих типов: символьные, битовые, даты-времени. Так например, чтобы выбрать записи, в которых имена клиентов находятся в диапазоне от А до Ж, можно использовать такое выражение:
SELECT Имя, Адрес FROM Клиенты
WHERE Имя BETWEEN 'A' AND 'Ж';
IN и NOT IN
Предикаты in (в) и not in (не в) применяются для проверки вхождения какого-либо значения в заданный список значений. Например, для выборки записей о клиентах из некоторых регионов можно использовать такое выражение:
SELECT Имя, Адрес FROM Клиенты
WHERE Регион IN ('Северо-запад', 'Ставропольский край', 'Иркутская область');
Если требуется получить данные о всех клиентах не из Москвы и Северо-Запада, то можно использовать предикат not in:
SELECT Имя, Адрес FROM Клиенты
WHERE Регион NOT IN ('Москва', 'Санкт-Петербург');
LIKE и NOT LIKE
Предикаты like (похожий) и not like (не похожий) применяются для проверки частичного соответствия символьных строк. Например, столбец телефон в некоторой таблице содержит полные номера телефонов, а вам требуется выбрать лишь те записи, в которых номера телефонов начинаются с 348 или содержат такое сочетание цифр.
Критерий частичного соответствия задается с помощью двух символов-масок: знака процента (%) и подчеркивания (_). Знак процента означает любой набор символов, в том числе и пустой, а символ подчеркивания — любой одиночный символ.
Например, чтобы выбрать записи о клиентах, у которых номера телефонов начинаются с 348, можно использовать такое выражение:
SELECT Имя, Адрес, Телефон FROM Клиенты
WHERE Телефон LIKE '348%';
Допустим, столбец Адрес содержит полный почтовый адрес (индекс, название города, улицы и т. д.). Если вам требуется выбрать записи о клиентах, проживающих в Санкт-Петербурге, то для этого подойдет следующее выражение:
SELECT Имя, Адрес, Телефон FROM Клиенты
WHERE Адрес LIKE '%Санкт-Петербург%';
Если вы хотите исключить всех клиентов, проживающих в Москве, то воспользуйтесь таким выражением:
SELECT Имя, Адрес, Телефон FROM Клиенты
WHERE Адрес NOT LIKE '%Москва%';
Возможно, вам потребуется выбрать записи, содержащие символы процента и/или подчеркивания. Тогда необходимо, чтобы такие символы воспринимались интерпретатором SQL не как символы-маски. Чтобы знак процента или подчеркивания воспринимался буквально, перед ним необходимо указать специальный управляющий символ. Этот символ можно определить произвольно, лишь бы он не встречался в качестве элемента данных. В следующем примере показано, как это можно сделать:
SELECT Имя, Адрес, Процент_скидки FROM Клиенты
WHERE Процент_скидки LIKE '20#%' ESCAPE '# ' ;
Здесь за ключевым словом escape указывается символ, который используется в качестве управляющего. Таким же способом можно отключить и сам управляющий символ.
IS NULL
Предикат IS NULL применяется для выявления записей, в которых тот или иной столбец не имеет значения. Например, для получения записей о клиентах, для которых не указан адрес, можно использовать следующее выражение:
SELECT Имя, Адрес, Регион FROM Клиенты
WHERE Адрес IS NULL;
Для получения записей, в которых столбец Адрес содержит некоторые определенные значения (т. е. отличные от null), можно использовать аналогичное выражение, но с логическим оператором not (не):
SELECT Имя, Адрес, Регион FROM Клиенты
WHERE Адрес IS NOT NULL;
Не следует использовать предикаты сравнения с null, такие как Адрес = NULL.