"Пристрелка" к нужным данным
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. Если вам неизвестно количество углеводов и белков, то нельзя сказать, являются ли эти величины одинаковыми.