Иллюстрированный самоучитель по SQL для начинающих

"Пристрелка" к нужным данным

SIMILAR

Вместе с SQL: 1999 появился и предикат SIMILAR (подобный), который позволяет находить частичное соответствие более эффективно, чем это делает предикат LIKE. С помощью предиката SIMILAR можно сравнить символьную строку с регулярным выражением. Скажем, например, вы просматриваете в таблице программной совместимости столбец OperatingSystem (операционная система), чтобы проверить совместимость с Microsoft Windows. Можно составить примерно такое предложение WHERE:

WHERE OperatingSystem SIMILAR TO
'(Windows (3.1195|98|Millenium Edition|CE|NT|2 000|XP)) '

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

NULL

С помощью предиката NULL выполняется поиск всех тех строк, в которых выбранный столбец содержит неопределенное значение. Именно такие значения имелись в столбце Carbohydrate (углеводы) в нескольких строках таблицы FOODS (продукты питания) (см. главу7). Названия продуктов из этих строк можно получить с помощью такого оператора:

SELECT (FOOD)
FROM FOODS
WHERE Carbohydrate IS NULL;

Этот запрос возвращает следующие значения:

Гамбургер с нежирной говядиной
Нежное мясо цыплят
Жареный опоссум
Свиной окорок

Как вы, возможно, и предполагаете, если вставить ключевое слово NOT (нет), то получится совершенно противоположный результат:

SELECT (FOOD)
FROM FOODS
WHERE Carbohydrate IS NOT NULL;

Этот запрос возвращает все строки таблицы FOODS, за исключением тех четырех, которые были выведены предыдущим запросом.

Внимание:
Выражение Carbohydrate IS NULL– это не то же самое, что CARBOHYDRATE = NULL. Для иллюстрации этого утверждения предположим, что в текущей строке таблицы FOODS значения в столбцах Carbohydrate и Protein (белки) являются неопределенными. Из этого можно сделать несколько выводов
.

  • Carbohydrate IS NULL истинно.
  • Protein IS NULL истинно.
  • Carbohydrate IS NULL AND Protein IS NULL истинно.
  • Истинность Carbohydrate = Protein не может быть определена.
  • Carbohydrate = NULL является недопустимым выражением.

Использовать ключевое слов NULL в сравнениях бессмысленно, так как всегда возвращается ответ NULL.

Почему же истинность выражения Carbohydrate = Protein определяется как неизвестная, даже если Carbohydrate и Protein имеют одно и то же неопределенное значение? Да потому, что NULL просто означает "я не знаю". Вы же не знаете, каким должно быть значение в Carbohydrate, и не знаете, каким – в Protein. Следовательно, вам не известно, являются ли эти неизвестные значения одинаковыми. Возможно, в Carbohydrate следует ввести 37, а в Protein – 14, а может, у каждого из них должно быть значение 93. Если вам неизвестно количество углеводов и белков, то нельзя сказать, являются ли эти величины одинаковыми.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.