Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практические SQL запросы на выборку.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
9.64 Mб
Скачать

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