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

20.Предложение where и условия поиска

Чтобы ограничить количество строк, выдаваемых в ответ на запрос, вы можете применить предложение WHERE. В этом разделе мы расскажем о многих операциях, применимых в условиях поиска.

П римечание. Условия поиска применяются не только в предложениях WHERE операторов SELECT, но и в операторах UPDATE и DELETE. (Об операторах UPDATE и DELETE см. лекцию 20.)

Давайте сначала договоримся об используемой терминологии. Условие поиска (search condition) может содержать произвольное количество предикатов (predicates), соединенных логическими операциями (logical operators) AND, OR и NOT (И, ИЛИ и НЕ). Предикаты –это выражения, возвращающие значения TRUE, FALSE или UNKNOWN (ИСТИНА, ЛОЖЬ или НЕИЗВЕСТНО). Выражение (expression) может быть именем колонки, константой, скалярной функцией (т.е. функцией, возвращающей одно значение), переменной, скалярным подзапросом (т.е. запросом, возвращающим одну колонку), либо комбинацией этих элементов, соединенных операциями. В этом разделе нашей книги термин "выражение" применяется также и к предикатам.

Логические операторы

Логические операторы AND, OR и NOT. Операторы AND и OR используются для объединения условий поиска в предложениях WHERE. Оператор NOT обращает значение условия поиска.

Оператор AND соединяет два условия и возвращает TRUE, только если оба условия выполняются. Например, данный запрос возвращает только одну строку, в которой идентификатор заказчика начинается с цифры 1, а название магазина начинается со строки «Bicycle»:

SELECT CustomerID, Name

FROM AdventureWorks.Sales.Store

WHERE CustomerID LIKE '1%' AND Name LIKE N'Bicycle%'

Оператор OR также соединяет два условия, но возвращает TRUE, если выполняется хотя бы одно из условий. Следующий запрос возвращает 116 строк, в которых либо идентификатор заказчика начинается с 1, либо название магазина начинается с «Bicycle»:

SELECT CustomerID, Name

FROM AdventureWorks.Sales.Store

WHERE CustomerID LIKE '1%' OR Name LIKE N'Bicycle%'

Алиасы таблиц

Вы уже видели несколько примеров, в которых применялись алиасы имен таблиц (слово алиас означает замена имени, псевдоним). Ключевое слово AS является необязательным, т.е. "FROM имя_таблицы AS алиас" будет работать точно так же, как и "FROM имя_таблицы алиас". Давайте вернемся к запросу, приведенному в качестве примера в разделе "Правые внешние соединения", в котором применяются алиасы:

SELECT s.stor_id, d.discounttype

FROM stores s RIGHT OUTER JOIN discounts d

ON s.stor_id = d.stor_id

GO

Каждая из двух таблиц из этого примера имеет колонку stor_id. Чтобы различать, какую именно из этих двух колонок вы применяете в запросе, нужно перед именем колонки задать имя таблицы или алиас (отделив точкой). В нашем примере для таблицы stores применяется алиас s, а для таблицы discounts применяется алиас d. Задавая колонку мы должны ставить перед ее именем "s." или " d.", указывая тем самым, в какой таблице содержится эта колонка. Тот же самый запрос с применением ключевых слов AS будет выглядеть так:

SELECT s.stor_id, d.discounttype

FROM stores AS s RIGHT OUTER JOIN discounts AS d

ON s.stor_id = d.stor_id

GO

Операции сравнения

В выражениях можно использовать операции сравнения (comparison operators), перечисленные в табл. 14.1.

Таблица 14.1. Операции сравнения

Операция

Проверяемое условие

=

Проверяется равенство двух выражений

<>

Проверяется неравенство двух выражений

!=

Проверяется неравенство двух выражений (то же самое, что и <> )

>

Проверяется, что первое выражение больше второго

>=

Проверяется, что первое выражение больше второго или равно ему

!>

Проверяется, что первое выражение не больше второго

<

Проверяется, что первое выражение меньше второго

<=

Проверяется, что первое выражение меньше второго или равно ему

!<

Проверяется, что первое выражение не меньше второго

В простом предложении WHERE может производиться сравнение двух выражений при помощи операции сравнения на равенство (=). Ниже приведен пример оператора SELECT, проверяющего значения в колонке lname для всех строк (а эти значения имеют тип данных char) и возвращающего TRUE, если это значение равно "Latimer" (в набор результатов будут включены строки, для которых возвращается значение TRUE ):

SELECT *

FROM employee

WHERE lname = "Latimer"

GO

Запрос, приведенный в этом примере, вернет одну строку. Имя Latimer должно быть задано в кавычках, потому что оно является текстовой строкой.

П римечание. По умолчанию, SQL Server допускает применение как символов одинарных кавычек ('...'), так и символов двойных кавычек ("..."), т.е. можно применять и 'Latimer', и "Latimer". В нашей книге в примерах во избежание путаницы применяются только символы двойных кавычек. Если вы хотите использовать в качестве имени объекта зарезервированное ключевое слово и использовать в качестве литералов (текстовых констант) только одиночные кавычки, то примените опцию SET QUOTED_IDENTIFIER. Установите для этой опции значение TRUE (по умолчанию установлено значение FALSE ).

В следующем запросе применяется операция неравенства ( <> ), на этот раз по отношению к колонке job_id, имеющей тип данных integer:

SELECT job_desc

FROM jobs

WHERE job_id <> 1

GO

Этот запрос выдает текст с описанием должностных обязанностей из строк таблицы jobs, имеющих значения job_id, не равные 1. Будет выдано 13 строк. Если в строке содержится значение NULL, то оно считается не равным ни 1, ни какому- либо другому значению, поэтому будут выведены и строки null-значениями.

Логические операции

Логические операции (logical operators) AND и OR проверяют два выражения и, в зависимости от их значений, возвращают булево значение TRUE, FALSEили UNKNOWN. Операция NOT выдает булево значение, противоположное значению выражения, следующего за ним. Значения, возвращаемые операциямиAND, OR и NOT, показаны в таблицах на рис. 14.3. Таблицами для операций AND и OR надо пользоваться так: найдите результат первого выражения в левой колонке, найдите результат второго выражения в верхней строке, а затем посмотрите результат логической операции в ячейке на пересечении соответствующих строки и колонки. Таблица для операции NOT – совсем понятная. Результат может получить значение UNKNOWN, если среди операндов имеется значение NULL.

Рис. 14.3.  Значения, возвращаемые операциями AND, OR и NOT при различных значениях операндов

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

SELECT job_desc, min_lvl, max_lvl

FROM jobs

WHERE min_lvl >= 100 AND

max_lvl <= 225

GO

Как видно из таблицы (рис. 14.3), операция AND возвращает значение TRUE, когда оба условия возвращают TRUE. Этот запрос вернет четыре строки.

В следующем запросе операция OR применяется для поиска издателей из Вашингтона (федеральный округ Колумбия) и из Массачусетса. Будут возвращены строки, для которых значение TRUE явилось результатом хотя бы одного из условий.

SELECT p.pub_name, p.state, t.title

FROM publishers p, titles t

WHERE p.state = "DC" OR

p.state = "MA" AND

t.pub_id = p.pub_id

GO

Этот запрос вернет 23 строки.

Операция NOT возвращает просто отрицание булева значения выражения, следующего за ним. Например, чтобы получить список всех названий книг, у которых авторские отчисления составляют не менее 20%, можно применить операцию NOT:

SELECT t.title, r.royalty

FROM titles t, roysched r

WHERE t.title_id = r.title_id AND NOT

r.royalty < 20

GO

Этот запрос выдаст 18 названий книг, у которых авторские отчисления составляют 20% или более.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]