Sql повне керівництво

Рис 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.

Схожі статті