Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2_ПростыеВыборкиДанных_SQL.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
263.68 Кб
Скачать

Оператор where

Условия поиска в операторе WHERE (где) являются логическими выражениями, т. е. принимающими одно из двух возможных значений — true (ИСТИНА) или false (ЛОЖЬ). Например, выражение Сумма_заказа > 500 является истинным (имеет значение true), если в текущей записи таблицы значение столбца Сумма_заказа превышает 500. В противном случае это выражение ложно (имеет значение false). Одно и то же логическое выражение может быть истинным для одних записей и ложным для других. Вообще говоря, в SQL логические выражения могут принимать еще и неопределенное значение. Это происходит тогда, когда в выражении некоторые элементы имеют значение NULL. Тaким образом, в SQL мы имеем дело не с классической двузначной, а с трехзначной логикой.

Выражение, следующее за оператором WHERE, возвращает одно из трех значений: true, false или NULL. При выполнении запроса (SQL-выражения) логическое выражение WHERE применяется ко всем записям исходной таблицы. Если оно истинно для данной записи исходной Таблицы, то эта запись выбирается и будет представлена в результатной таблице; в противном случае запись не попадет в результатную таблицу.

При составлении логических выражений используются специальные ключевые слова и символы операций сравнения, которые называют предикатами. Предикат впервые появился в SQL: 1999. Например, в выражении Сумма_заказа > 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 'А' 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.