WHERE comm BETWEEN .10 AND .12

AND NOT comm IN ( .10, .12 );

Вывод для этого запроса показывается в Рисунке 17.

Рисунок 17 Сделать BETWEEN – невключенным

 

Вы можете использовать BETWEEN, чтобы выбирать ряд значений из упорядоченных по алфавиту значений.

Этот запрос выбирает всех заказчиков чьи имена попали в определенный алфавитный диапазон:

SELECT *
FROM Customers
WHERE cname BETWEEN 'A' AND 'G';

Вывод для этого запроса показывается в Рисунке 18.

Рисунок 18 Использование BETWEEN в алфавитных порядках

 

Обратите Внимание, что Grass и Giovanni отсутствуют, даже при включенном BETWEEN. Это происходит из-за того что BETWEEN сравнивает строки неравной длины. Строка 'G' более короткая чем строка Giovanni, поэтому BETWEEN выводит 'G' с пробелами. Пробелы предшествуют символам в алфавитном порядке (в большинстве реализаций), поэтому Giovanni не выбирается. То же самое происходит с Grass. Важно помнить это когда вы используете BETWEEN для извлечения значений из алфавитных диапазонов. Обычно вы указываете диапазон с помощью символа начала диапазона и символа конца (вместо которого можно просто поставить z ).

Оператор LIKE

LIKE применим только к полям типа CHAR или VARCHAR, с которыми он используется, чтобы находить подстроки. Т.е. он ищет поле символа, чтобы видеть, совпадает ли с условием часть его строки. В качестве условия он использует групповые символы (wildkards) - специальные символы которые могут соответствовать чему-нибудь. Имеются два типа групповых символов используемых с LIKE:

· символ ( ? ) замещает любой одиночный символ. Например, 'b?t' будет соответствовать словам 'bat' или 'bit', но не будет соответствовать 'brat'.

· символ (*) замещает последовательность любого числа символов (включая символы нуля). Например '*p*t' будет соответствовать словам 'put', 'posit',или'opt',но не'spite'.

Давайте найдем всех заказчиков, чьи имена начинаются с G (вывод показывается в Рисунке 19):

SELECT *
FROM Customers
WHERE cname LIKE 'G*';

 

Рисунок 19: SELECT использует LIKE с *

 

LIKE может быть удобен, если вы ищете имя или другое значение, и не помните, как они точно пишутся. Предположим, что вы не уверенны как пишется по буквам имя одного из ваших продавцов PealилиPeel. Вы можете просто использовать ту часть которую вы знаете и групповые символы чтобы находить все возможные пары (вывод этого запроса показывается в Рисунке 20):

SELECT *
FROM Salespeople
WHERE sname LIKE 'P??l*';

 

Рисунок 20 SELECT использует LIKE с (?)

 

Символ «?», каждый из которых представляет один символ, добавят только два символа к уже существующим 'P' и 'l', поэтому имя наподобие Prettel не может быть показано. Символ 'l' не будет рассматриваться концом строки т.к. символ «*» - просто соответствует этим пробелам. Это необязательно, если поля sname имеет тип - VARCHAR.

А что же Вы будете делать если вам нужно искать знак «?» или «*». В LIKE предикате, вы можете определить любой одиночный символ взяв его [*].

Допустим, в таблице Salespeople, написано имя с символом * (например: Po*l). Нам необходимо найти все имена с таким символом. То запрос будет выглядеть так:

SELECT *

FROM Salespeople

WHERE sname LIKE '*[*]*';

А если имя написано с символом ? (например: Po?l), то запрос будет выглядеть:

SELECT *

FROM Salespeople

WHERE sname LIKE '*[?]*';

 

NULL оператор

Так как NULL указывает на отсутствие значения, вы не можете знать каков будет результат любого сравнения с использованием NULL. Когда NULL сравнивается с любым значением, даже с другим таким же NULL, результат будет ни верным, ни неверным, он - неизвестен. Неизвестный Булев, вообще ведет себя также как неверная строка, которая произведя неизвестное значение в предикате не будет выбрана запросом - имейте ввиду, что в то время как NOT (неверное) - равняется верно, NOT (неизвестное) - равняется неизвестно.

Следовательно, выражение типа 'city = NULL' или 'city IN (NULL)' будет неизвестно, независимо от значения city.

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

Найдем все записи в нашей таблице Заказчиков с NULL (не заполненными значениями) в city:

SELECT *
FROM Customers
WHERE city IS NULL;

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