В этой статье мы познакомимся и разберемся с такими операторами как:
- Оператор IN;
- Оператор BETWEEN;
- Оператор LIKE;
- Оператор NULL;
Оператор IN
Оператор IN определяет набор значений в которое данное значение может или не может быть включено. Если вы хотите найти всех продавцов, которые размещены в Barcelona или в London, вы должны использовать следующий запрос:
SELECT *
FROM TABLE_1
WHERE city = 'Barcelona'
OR city = 'London';
Имеется и более простой способ получить ту же информацию:
SELECT *
FROM TABLE_1
WHERE city IN ( 'Barcelona', 'London' );
Как вы можете заметить, IN определяет набор значений с помощью набора заключённых в круглые скобки и отделенных запятыми. Он затем проверяет различные значения указанного поля пытаясь найти совпадение со значениями из набора. Если это случается, то предикат верен. Когда набор содержит значения номеров, а не символов, одиночные кавычки опускаются. Давайте найдем всех заказчиков относящихся к продавцам имеющих значения number = 1001, 1007, и 1004.
SELECT *
FROM TABLE_1
WHERE number IN ( 1001, 1007, 1004 );
Оператор BETWEEN
Оператор BETWEEN похож на оператор IN. В отличии от определения по номерам из набора, как это делает IN, BETWEEN определяет диапазон, значения которого должны уменьшаться, что делает предикат верным. Вы должны ввести ключевое слово BETWEEN с начальным значением, ключевое слово AND и конечное значение. В отличие от IN, BETWEEN чувствителен к порядку, и первое значение в предложении должно быть первым по алфавитному или числовому порядку. Следующий пример будет извлекать из таблицы "Продавцов" всех продавцов с комиссионными между .10 и .12:
SELECT *
FROM TABLE_1
WHERE comm BETWEEN .10 AND .12;
Для включенного оператора BETWEEN, значение совпадающее с любым из двух значений границы (в этом случае, .10 и .12) заставляет предикат быть верным.
SQL не делает непосредственной поддержки не включения BETWEEN. Вы должны или определить ваши граничные значения так, чтобы включающая интерпретация была приемлема, или сделать что-нибудь типа этого:
SELECT *
FROM TABLE_1
WHERE (comm BETWEEN .10, AND .12)
AND NOT comm IN (.10, .12);
По общему признанию, это немного неуклюже, но зато показывает как эти новые операторы могут комбинироваться с операторами Буля чтобы производить более сложные предикаты. Чаще всего, вы используете IN и BETWEEN также как вы использовали реляционные операторы чтобы сравнивать значения, которые берутся либо из набора (для IN) либо из диапазона (для BETWEEN).
Также, подобно реляционным операторам, BETWEEN может работать с символьными полями. Это означает что вы можете использовать BETWEEN чтобы выбирать ряд значений из упорядоченных по алфавиту значений.
Оператор LIKE
LIKE применим только к полям типа CHAR или VARCHAR, с которыми он используется чтобы находить подстроки. Т.е. он ищет поле символа чтобы видеть, совпадает ли с условием часть его строки. В качестве условия он использует групповые символы — специальные символы которые могут соответствовать чему-нибудь. Имеются два типа групповых символов используемых с LIKE:
- символ подчеркивания (_) замещает любой одиночный символ. Например, 'b_t' будет соответствовать словам 'bat' или 'bit', но не будет соответствовать 'brat'.
- знак процента (%) замещает последовательность любого числа символов (включая символы нуля). Например '%p%t' будет соответствовать словам 'put', 'posit', или 'opt', но не 'spite'.
Давайте найдем всех заказчиков чьи имена начинаются с G:
SELECT *
FROM TABLE_1
WHERE name LIKE 'G%';
LIKE может быть удобен если вы ищете имя или другое значение, и если вы не помните как они точно пишутся. Предположим что вы не уверены как записано по буквам имя одного из ваших продавцов Peal или Peel. Вы можете просто использовать ту часть которую вы знаете и групповые символы чтобы находить все возможные пары:
SELECT *
FROM TABLE_1
WHERE name LIKE 'P _ _ l %';
Групповые символы подчеркивания, каждый из которых представляет один символ, добавят только два символа к уже существующим 'P' и 'l', поэтому имя наподобие Prettel не может быть показано. Групповой символ '%' — в конце строки необходим в большинстве реализаций если длина поля name больше, чем число символов в имени Peel (потому что некоторые другие значения name — длиннее чем четыре символа). В таком случае, значение поля name, фактически сохраняемое как имя Peel, сопровождается рядом пробелов. Следовательно, символ 'l' не будет рассматриваться концом строки. Групповой символ '%' — просто соответствует этим пробелам. Это необязательно, если поля name имеет тип — VARCHAR.
Если же вам надо искать знак подчеркивание или процента в LIKE предикате, вы можете определить любой одиночный символ как символ ESC. Символ ESC используется сразу перед процентом или подчеркиванием в предикате, и означает что процент или подчеркивание будет интерпретироваться как символ, а не как групповой символ. Например, мы могли бы найти наш name столбец где присутствует подчеркивание, следующим образом:
SELECT *
FROM TABLE_1
WHERE name LIKE '%/_%'ESCAPE'/';
Предложение ESCAPE определяет '/' как символ ESC. Символ ESC используемый в LIKE строке, сопровождается знаком процента, знаком подчеркивания, или знаком ESCAPE, который будет искаться в столбце, а не обрабатываться как групповой символ. Символ ESC должен быть одиночным символом и применяться только к одиночному символу сразу после него. В примере, символ процента начала и символ процента окончания обрабатываются как групповые символы; только подчеркивание предоставлено само себе. Символ ESC может также использоваться самостоятельно.
Если вы будете искать столбец с вашим символом ESC, вы просто вводите его дважды. Во-первых это будет означать что символ ESC "берет следующий символ буквально как символ", и во-вторых что символ ESC самостоятелен.
Давайте посмотрим на пример, с помощью которого мы можем искать местонахождение строки '_/' в name столбце:
SELECT *
FROM TABLE_1
WHERE name LIKE ' % /_ / / %'ESCAPE'/';
Работа с нулевыми (NULL) значениями
Часто, будут иметься записи в таблице, которые не имеют никаких значений для каждого поля, например потому что информация не завершена, или потому что это поле просто не заполнялось. SQL учитывает такой вариант, позволяя вам вводить значение NULL (ПУСТОЙ) в поле, вместо значения. Когда значение поля равно NULL, это означает, что программа базы данных специально промаркировала это поле как не имеющее никакого значения для этой записи. Это отличается от просто назначения полю значения нуля или пробела, которые база данных будет обрабатывать также как и любое другое значение. Точно также, как NULL не является техническим значением, оно не имеет типа данных. Оно может помещаться в любой тип поля.
NULL оператор
Так как NULL указывает на отсутствие значения, вы не можете знать, каков будет результат любого сравнения с использованием NULL. Когда NULL сравнивается с любым значением, даже с другим таким же NULL, результат будет неизвестен.
Неизвестный Булев, вообще ведет себя также как неверная строка, которая произведя неизвестное значение в предикате не будет выбрана запросом — имейте ввиду, что в то время как NOT (неверное) — равняется верно, NOT (неизвестное) — равняется неизвестно.
Следовательно, выражение типа 'city = NULL' или 'city IN (NULL)' будет неизвестно, независимо от значения city. Часто вы должны делать различия между неверно и неизвестно — между строками содержащими значения столбцов, которые не соответствуют условию предиката и которые содержат NULL в столбцах. По этой причине, SQL предоставляет специальный оператор IS, который используется с ключевым словом NULL, для размещения значения NULL. Найдем все записи в нашей таблице с NULL значениями в city столбце:
SELECT *
FROM TABLE_1
WHERE city IS NULL;
Использование NOT со специальными операторами
Специальные операторы, которые мы разбирали в этой статье могут немедленно предшествовать Булеву NOT.
Он противоположен реляционным операторам, которые должны иметь оператор NOT вводимым выражением. Например, если мы хотим устранить NULL из нашего вывода, мы будем использовать NOT, чтобы изменить на противоположное значение предиката:
SELECT *
FROM TABLE_1
WHERE city NOT NULL;
При отсутствии значений NULL, будет выведена вся таблица "Заказчиков". Аналогично можно ввести следующее:
SELECT *
FROM TABLE_1
WHERE NOT city IS NULL;
что также приемлемо.
Мы можем также использовать NOT с IN:
SELECT *
FROM TABLE_1
WHERE city NOT IN ( 'London', 'Barcelona' );
А это — другой способ подобного же выражения:
SELECT *
FROM TABLE_1
WHERE NOT city IN ( 'London', ' Barcelona' );
Таким же способом Вы можете использовать NOT BETWEEN и NOT LIKE.
Подведём итог
Вы можете искать значения в определенном диапазоне (BETWEEN) или в числовом наборе (IN), или вы можете искать символьные значения, которые соответствуют тексту внутри параметров (LIKE).
Мы также изучили некоторые вещи относительно того, как SQL поступает при отсутствии данных — используя NULL вместо конкретных значений. Мы можете извлекать или исключать значения NULL из нашего вывода используя оператор IS NULL.
Если статья была Вам полезна, ставьте пальцы вверх и подписывайтесь. Оставляйте свои пожелания и вопросы в комментариях, с удовольствием отвечу.
#it #sql #обучение #курс