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 в наших типовых таблицах.