Программирование >>  Руководство по sql 

1 ... 28 29 30 [ 31 ] 32 33 34 ... 105


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

Что произойдет, если операция сравнения будет применена к нулевому значению? Так как нуль (NULL) представляет неизвестное значение, его нельзя сравнить с любым другим значением, даже с другим нулевым значением. Например, в результаты запроса, который ищет все идентификаторы книг с расходами ниже $5000, не будет включена книга МС3026, The Psychology of Computer Cooking.

SQL:

select title id, advance

from titles

where advance < $5000

Результат:

title id advance

lS7 7 77 ~4000

PS3333 2000

MC2222 0

TC4203 4000

PS2091 2275

Эта книга не будет найдена и при поиске книг с расходами выше $5000: SQL:

select title id, advance

from titles

where advance > $5000

Результат:

title id advance

PC8888 8000

TC7777 8000

PC1035 7000

BU2075 10125

PS2106 6000

MC3021 15000

TC3218 7000

PS1372 7000

Значение NULL не меньше, не больше и не равно $5000, потому что является неизвестным. Однако не расстраивайтесь! С помощью специального условия из таблицы всегда можно извлечь строки с нулевыми значениями:

WHERE имя столбца IS [NOT] NULL

Чтобы найти все книги с нулевыми затратами, можно использовать следующий запрос:

SQL:

select title id, advance

from titles

where advance is null



Результат:

title id advance

MC3026 NULL

PC9999 NULL

Это условие можно использовать совместно с другими операторами. Например, в результате выполнения следующего запроса находятся все книги, расходы на которые были либо нулевыми (NULL), либо составили меньше $5000:

SQL:

select title id, advance from titles where advance < $5000 or advance is null

Результат:

title id advance

PS7777 4000

PS3333 2000

MC2222 0

TC4203 4000

MC3026 NULL

PS2091 2275

PC9999 NULL

Поиск no подстрокам: предложение LIKE

Некоторые задачи нельзя решить только с помощью операторов сравнения. Вот несколько примеров.

Его фамилия начинается с Мс или Мае, а дальше я не помню .

Мне нужен список телефонов, начинающихся с 415 .

Я забыл название книги, но помню, что в ее описании упоминалось слово exercise .

Я не помню, как точно пишется его фамилия - Carson или Karsen .

Его имя Dirk или Dick. Четыре буквы, начинается с Dn заканчивается на к .

В каждом из этих случаев известен некоторый образец, где-то встречающийся в столбце, и с его помощью нужно извлечь всю или часть соответствующей ему строки. Для решения этой задачи и предназначено ключевое слово LIKE. Его можно применять к символьным полям, а в некоторых системах и к полям даты. Однако ключевое слово LIKE не работает с числовыми полями (целыми, денежными, десятичными и плавающими). Его синтаксис имеет следующий вид:

WHERE имя столбца [NOT] LIKE образец [ESCAPE ключевой симвоп]

Образец должен заключаться в кавычки и может содержать один или несколько шаблонов (wildcards) - символов, замещающих в образце пропущенные буквы или строки. Ключевое слово ESCAPE используется в том случае, если в образце содержится один из шаблонов, но его нужно рассматривать как простой литерал.

ANSI SQL предусматривает использование двух символов шаблона совместно с ключевым словом LIKE - знак процента (%) и подчеркивание ( ).

Шаблон Значение

% Любая строка с любым количеством символов

Любой одиночный символ



в разных системах могут использоваться разные символы шаблонов, так что обратитесь к документации по своей системе.

Теперь вернемся к сформулированным выше задачам и приведем соответст-вуюшие запросы. Сначала осуществим поиск по шотландским фамилиям:

SQL:

select au lname, city from authors

where au lname like Mc% or au lname like Mac%

Результат: au lname city

MacFeather Oakland McBadden Vacaville

В соответствии с образцами, приведенными после ключевого слова LIKE, система найдет все фамилии, начинаюшиеся с Мс и Мае. Обратите внимание на то, что шаблон находится внутри кавычек.

С помошью следующего запроса можно получить список всех телефонов, начинающихся с 415:

SQL:

select au lname, phone

from authors

where phone like 415%

Результат:

au Iname

phone

Bennet

4Г5

658-

-9932

Green

986-

-7020

Carson

548-

-7723

Stringer

843-

-2991

Straight

834-

-2919

Karsen

534-

-9219

MacFeather

354-

-7128

Dull

836-

-7128

Yokomoto

935-

-4228

Hunter

836-

-7128

Locksley

585-

-4620

Как и в предыдущем случае, нам известно несколько начальных символов, за которыми следует неизвестная строка.

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

SQL:

select title id, notes from titles

where notes like %xercise%



1 ... 28 29 30 [ 31 ] 32 33 34 ... 105

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика