Материал: Graber_Martin_-_SQL_dlya_prostykh_smertnykh_-_2014

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Оператор IS NULL

символ надо понимать буквально так, как он указан", а второй раз указывает на то, что речь идет непосредственно об Еsсаре-символе. Далее представлен пример поиска строки '_}' в столбце sname:

SELECT •

FROM Salespeople

WHERE sname LIKE 'Х/_//Х' ESCAPE. /';

В этом случае выходных данных нет. Просматриваемая строка состоит из любой последовательности символов(%), за которыми следуют символ подчеркивания(/_), Еsсаре-символ (//)и любая последовательность заключительных символов(%).

Работа с NULL-значениями

Часто в таблице встречаются записи с незаданными значениями какого-либо из по­ лей, потому что значение поля неизвестно или его просто нет. В таких случаях SQL по­ зволяет указать в поле NULL-значение. Строго говоря, NULL-значение вовсе не представлено в поле. Когда значение поля есть NULL это значит, что программа базы данных специальным образом помечает поле, как не содержащее какого-либо значения для данной строки (записи). Дело обстоит не так в случае простого приписывания полю значения "нуль" или "пробел", которые база данных трактует как любое другое значе­ ние. Поскольку NULL не является значением как таковым, он не имеет типа данных. NULL может размещаться в поле любого типа. Тем не менее, NULL, как NULL- значение, часто используется в SQL.

Предположим, появился покупатель, которому еще не назначен продавец. Чтобы констатировать этот факт, нужно ввести значение NULL в поле snum, а реальное зна­ чение включить туда позже, когда данному покупателю будет назначен продавец.

Оператор IS NULL

Поскольку NULL фиксирует пропущенные значения, результат любого сравнения при наличии NULL-значений неизвестен. Когда NULL-значение сравнивается с лю­ бым значением, даже с NULL-значением, результат просто неизвестен. Булево значе­ ние "неизвестно" ведет себя также, как "ложь" - строка, на которой предикат принимает значение "неизвестно", не включается в результат запроса - при одном важном исключении: NOT от лжи есть истина (NOT (false)=true), тогда как NOT от не­ известного значения есть также неизвестное значение. Следовательно, такое выраже­ ние как "city = NULL" или "city IN (NULL)" является неизвестным независимо от значения city.

Часто необходимо различать false и unknown - строки, содержащие значения столбца, не удовлетворяющие предикату, и строки, которые содержат NULL. Для этой цели SQL располагает специальным оператором IS, который используется с ключевым словом NULL для локализации NULL-значения.

47

Глава 5. Использование с11ециаль11ых операторов в "условиях"

Для нахождения всех записей со значениями NULL в таблице Customers в столбце city следует ввести:

SELECT •

FROM Customers

WHERE city IS NULL;

В данном случае выходных данных не будет, поскольку в конкретных простых таб­

лицах нет NULL-значений.

NULL-значения чрезвычайно важны, поэтому имеет смысл вернуться к ним

позже.

Использование NOT со специшzьными 01~ераторами

Специальные операторы, которые были рассмотрены в этой главе, могут непосред­ ственно предшествовать булеву оператору NOT. Этим они отличаются от операторов сравнения, которые должны содержать NOT перед всем выражением. Например, если не осуществляется поиск NULL-значений, а, напротив, необходимо исключить их из выходных данных, то нужно использовать NOT для того, чтобы придать предикату

противоположное значение:

SELECT •

FROM Customers

WHERE city IS NOT NULL;

Если NULL-значения отсутствуют (в данном случае это именно так), то в результа­ те выполнения этого запроса будет получена вся таблица Customers, что эквивалентно

вводу:

SELECT •

FROM Customers

WHERE NOT city IS NULL;

что тоже приемлемо.

Можно также использовать NOT и IN:

SELECT •

FROM Salespeople

WHERE city NOT IN ('London', ·san Jose');

Другой способ выразить то же самое:

SELECT •

FROM Salespeople

WHERE NOT city IN ( 'London' , 'San Jose');

Выходные данные для этого запроса представлены на рис. 5.9.

48

Использование NOT с IN
Аналогичным образом можно использовать NOT BETWEEN

Итоги

 

 

SQl

lcxecut1on Log-- --

- -- -~

ст

*

 

 

11

Salespeople

 

 

WHERE

c1t

NOl IN ('London','San Josc'):

 

WilifШM

i1#iШ-

,,,

э.1,,r,81

 

HIHIJ7

Ri fi<in

Barcelona

". 15

 

1011!3

Axelrod

 

0. 111!

Рис. 5.9.

и NOT LIKE.

Итоги

Теперь вы научились конструировать предикаты в терминах отношений, специаль­ но определенных для SQL, искать значения в определенном диапазоне (BETWEEN) или значения, принадлежащие определенному множеству (IN), искать символьные

значения, удовлетворяющие заданному символьному шаблону (LIКE).

Вы поняли, как SQL реагирует на пропуски данных ( вполне реальная ситуация для мира баз данных) с помощью NULL-значений. Вы умеете извлекать NULL-значения или исключать их из выходных данных, применяя оператор IS NULL (или IS NOT NULL). Полный набор стандартных математических функций и специальных опера­ торов позволяет переходить к специальным функциям SQL, которые оперируют целы­

ми группами, а не на единичными значениями. Этому посвящена глава 6.

49

Работаем на SQL

1.Запишите два запроса, которые выдают сведения о всех заявках, принятых 3 или 4 октября 1990 года.

2.Запишите запрос, который выбирает всех покупателей, обслуживаемых Рее! или Motika. (Подсказка: поле snum связывает две таблицы друг с другом.)

3.Запишите запрос, который выбирает всех покупателей, имена которых начина­ ются на любую из букв от 'А' до 'G'.

4.Запишите запрос, который выбирает всех покупателей, имена которых начина­ ются на 'С'.

5.Запишите запрос, который выбирает все заявки, у которых в поле amt (amount) указано значение О или NULL.

(Ответы см. в 11риложении А.)

50

6

8J П []] ~ D D u

Суммирование данных

с помощью функций

агрегирования

Источник: https://studfile.net/preview/16418473/