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

Проверка на соответствие шаблону

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

Однако очень легко можно забыть, какое именно название носит интересующая нас компания: «Грант», «Гранит» или «Гранат». Проверка на соответствие шаблону позволяет выбрать из базы данных строки на основе частичного соответствия текстовых строк.

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

<значение> [NOT] LIKE <шаблон> [ESCAPE <подшаблон>]

Шаблон представляет собой строку, в которую может входить один или более подстановочных знаков, которые интерпретируются особым образом:

  • символ «%» (или «*») обозначает строку любой длины;

  • символ «_» (или «?») используется для указания любого единичного символа.

Подстановочные знаки можно помещать в любое место строки шаблона, и в одной строке может содержаться несколько подстановочных знаков.

При проверке строк на соответствие шаблону может оказаться, что подстановочные знаки входят в строку символов в качестве литералов (например, знак %). Для проверки наличия в строке литералов, использующихся в качестве подстановочных знаков, применяются символы пропуска.

Например, нельзя проверить, содержится ли знак процента в строке, просто включив его в шаблон, поскольку СУБД считает этот знак подстановочным. Но когда в шаблоне встречается символ пропуска, то символ, следующий за ним непосредственно, считается не подстановочным знаком, а литералом. Другими словами, происходит пропуск символа.

Символ пропуска определяется с помощью ключевого слова ESCAPE. Ниже приведен пример использования знака доллара ($) в качестве символа пропуска.

Найти товары, коды которых начинаются с букв 2A%44

SELECT id_mvr, id_prd, description

FROM zakazy.tovary

WHERE id_prd LIKE '2A$%44%' ESCAPE '$'

Первый символ % в шаблоне, следующий за символом пропуска $, считается литералом, второй – подстановочным знаком.

Проверка на значение null

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

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

<значение> IS [NOT] NULL

Неопределенное значение интерпретируется в реляционной модели как значение, неизвестное на данный момент времени. Это значение при появлении дополнительной информации может быть заменено некоторым конкретным значением. Введение NULL – значений вызвало необходимость модификации классической двухзначной логики и превращения ее в трехзначную. Все логические операции, производимые с неопределенными значениями, подчиняются этой логике в соответствии с заданной таблицей истинности.

A

B

NotA

A(B)

A(B)

TRUE

TRUE

FALSE

TRUE

TRUE

TRUE

FALSE

FALSE

FALSE

TRUE

TRUE

NULL

FALSE

NULL

TRUE

FALSE

TRUE

TRUE

FALSE

TRUE

FALSE

FALSE

TRUE

FALSE

FALSE

FALSE

NULL

TRUE

FALSE

NULL

NULL

TRUE

NULL

NULL

TRUE

NULL

FALSE

NULL

FALSE

NULL

NULL

NULL

NULL

NULL

NULL

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

Пример: найти служащих, которые еще не закреплены за офисом

SELECT FAMILY, NAME

FROM SLUZHASCHIE

WHERE ID_OFC IS NULL

Результат:

FAMILY

NAME

Скворцов

Петр

Семшов

Иван

Аршавин

Федор

Может показаться странным, но нельзя проверить значение на равенство NULL с помощью операции сравнения, например,

SELECT FAMILY, NAME

FROM SLUZHASCHIE

WHERE ID_OFC = NULL

Ключевое слово NULL здесь нельзя использовать, поскольку NULL это не значение, а просто сигнал о том, что значение неизвестно.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]