Рис 6. 9 Синтаксична діаграма перевірки на членства в безлічі (оператор XN)
За допомогою перевірки not in можна переконатися в тому, що елемент даних не є членом заданої множини. Проверяемое вираз в операторі in може бути будь-яким допустимим виразом, проте зазвичай воно являє собою коротку назву стовпчика, як в попередніх прикладах. Якщо результатом перевіряється виразу є значення null, то перевірка in також повертає null Всі елементи в списку заданих значень повинні мати один і той же тип даних, який повинен бути порівняний з типом даних перевіряється виразу.
Як і перевірка between, перевірка in Не додає в можливості SQL нічого нового, оскільки умова
повністю еквівалентна умові
(X = А) OR (X = У) OR (X = С)
Однак перевірка in пропонує набагато більш ефективний спосіб вираження умови відбору, особливо, якщо постійно містить больщое число елементів. У стандарті ANS1 / 1S0 не визначене максимальну кількість елементів множини, і в більшості СУБД не заданий явно верхня межа. З міркувань переносимості краще уникати множин, що містять один елемент, на зразок такого:
CITY IN (Mew York)
Їх слід замінювати наступним простим порівнянням:
Перевірка на відповідність шаблону (оператор LIKE)
Для вибірки рядків, в яких вміст деякого текстового стовпчика збігається з заданим текстом, можна використовувати просте порівняння. Наприклад, наступний запит витягує рядок з таблиці customers по імені:
Показати ліміт кредиту для Smithson Corp.
SELECT COMPANY, CREDIT LIMIT FROM CUSTOMERS WHERE COMPANY = Smithson Corp.
Однак дуже легко можна забути, яке саме назву носить цікавить нас компанія: Smith. Smithson або Smithsonian. Перевірка на відповідність шаблону дозволяє вибрати з бази даних рядка на основі часткового відповідності імені клієнта
Півроку на відповідність шаблону (оператор like), схематично зображена на рис. 6.10, дозволяє визначити, чи відповідає значення даних в стовпці деякого шаблоном. Шаблон являє собою рядок, в яку може входити один або більше символів узагальнення. Ці знаки інтерпретуються особливим чином.
- ESCAPE символ пропуску
Рис 6. 10 Оннтакстеская діаграма перевірки на відповідність шаблону (оператор LIKE)
Підстановлювальний знак% збігається з будь-якою послідовністю з нуля або більше символів. Нижче наведена змінена версія попереднього запиту, в якій використовується щаблон, що містить знак відсотка:
SELECT COMPANY, CREDIT LIMIT FROM CUSTOMERS WHERE COMPANY LIKE Smith% Corp.
Оператор like вказує СУБД, що необхідно порівнювати вміст стовпця name з шаблоном Smith% Corp. Цьому шаблоном відповідають всі перераховані імена.
Smith Corp. Smithson Corp. Smithsen Corp. Smithsonian Corp.
A ось такі імена даному шаблоном не відповідають:
SmithCorp Smithson Inc.
Підстановлювальний знак (символ підкреслення) збігається з будь-яким окремим символом. Наприклад, якщо ви впевнені, що назва компанії - або Smithson. або Smithsen. то можете скористатися наступним запитом:
SELECT COMPANY, CREDIT LIMIT FROM CUSTOMERS WHERE COMPANY LIKE Smithsen Corp.
У такому випадку будь-яка з цих імен буде відповідати шаблоном
Smithson Corp. Smithsen Corp. Smithsun Corp.
a жодне з цих нічого очікувати йому відповідати:
Smithsoon Corp. Smithsn Corp.
Символи узагальнення можна поміщати в будь-яке місце рядка шаблону, і в одному рядку може міститися декілька символів узагальнення. Наступний запит допускає як написання Smithson і Smithsen. так і будь-яке інше закінчення назви компанії, включаючи Corp. Inc. або якесь інше:
SELECT COMPANY, CREDIT LIMIT TROM CUSTOMERS WHERE COMPANY LIKE Smiths n%
За допомогою форми not like можна знаходити рядки, які не відповідають шаблону. Перевірку like можна застосовувати тільки до стовпців, які мають строковий ип даних. Якщо в стовпці міститься значення null, то результатом перевірки like
Ймовірно, ви вже зустрічалися з перевіркою на відповідність шаблону в операційних системах, що мають інтерфейс командного рядка (Unix, MS-DOS). У цих системах зірочка (*) використовується для тих же цілей, що і символ відсотка (%) в SQL, а знак питання (?) Відповідає символу підкреслення () в SQL, але в цілому можливості роботи з шаблонами рядків в них такі ж
При перевірці рядків на відповідність шаблону може виявитися, що символи узагальнення входять в рядок символів як литералов. Наприклад, не можна перевірити, чи міститься знак відсотка в рядку, просто включивши його в шаблон, оскільки СУБД буде вважати цей знак підстановлювальний. Як правило, це не викликає серйозних проблем, оскільки символи узагальнення досить рідко зустрічаються в іменах, назвах товарів та інших текстових даних, які зазвичай зберігаються в базі даних.
У стандарті ANSI / ISO визначено спосіб перевірки наявності в рядку литералов, що використовуються в якості символів узагальнення. Для цього застосовуються символи пропуску. Коли в шаблоні зустрічається такий символ, то символ, наступний безпосередньо за ним, вважається не Символи узагальнення, а літералом (Відбувається пропуск символу) Безпосередньо за символом пропуску може слідувати або один з двох символів узагальнення, або сам символ пропуску, оскільки він теж набуває в шаблоні особливе значення.
Символ пропуску визначається у вигляді рядка, що складається з одного символу, і пропозиції escape (рис 6.10) Нижче наведено приклад використання знака долара ($) в якості символу пропуску:
Знайти товари, коди яких починаються з чотирьох букв А% ВС.
SELECT ORDER NUM, PRODUCT FROM ORDERS WHERE PRODUCT LIKE A $% BC% ESCAPE $
Перший символ відсотка в шаблоні, наступний за символом пропуску, вважається літералом, другий - символи узагальнення
Символи пропуску часто використовуються при перевірці на відповідність шаблону, саме тому вони були включені в стандарт ANSI / ISO Однак вони не входили в перші реалізації SQL і тому не дуже поширені. Для забезпечення переносимості додатків слід уникати використання пропозиції escape
Перевірка на рівність значенню NULL (оператор IS NULL)
Значення null забезпечують можливість застосування тризначної логіки в умовах відбору. Для будь-якої заданої рядки результат застосування умови відбору може бути true, false або null (в разі, коли в одному з стовпців міститься значення null) Іноді буває необхідно явно перевіряти значення стовпців на рівність null і безпосередньо обробляти їх. Для цього в SQL є спеціальна перевірка is null, синтаксична діаграма якій зображена на рис. 6.11.