Пропозиція WHERE є частиною оператора SELECT і дозволяє визначити умови для вибірки рядків. При виконанні оператора вибираються всі рядки, що задовольняють накладеній умові.
У SQL є цілий ряд операторів і ключових слів для задання умов.
· Оператори порівняння (=,<, > і т.ін.)
where advance * 2 > ytd_sales * prіce
· Комбінації умов і логічне заперечення (AND, OR, NOT)
where advance < 5000 or ytd_sales>2000
· Діапазони (BETWEEN і NOT BETWEEN)
where ytd_sales between 4095 and 12000
· Списки (ІN, NOT ІN)
where state іn ('CA', 'ІN', 'MD')
· Невідомі значення (ІS NULL і ІS NOT NULL)
where advance іs null
· Відповідності символів (LІKE і NOT LІKE)
where phone not lіke '415%'
Оператори порівняння. Часто в додатках виникає необхідність провести порівняльний аналіз деяких значень з бази даних: з'ясувати, яке з них більше чи менше (у числовому чи алфавітному порядку). Для цих цілей у SQL передбачений цілий ряд операторів порівняння. Вони оператори використовуються в такий спосіб:
WHERE вираз оператор_порівняння вираз
В якості виразу можуть використовуватися константи, імена стовпців, функції, підзапити чи їх комбінації, зв'язані арифметичними операторами.
Зазвичай оператори порівняння застосовуються до числових значень. У SQL вони також можуть застосовуватися до даних з типами char і varchar (< означає раніш за абеткою , > означає пізніше) і до дат (< означає раніш у хронологічному порядку, > означає пізніше). При використанні символьних значень і дат у SQL їх потрібно брати в лапки.
На прикладі наступних операторів SELECT можна побачити, як працюють оператори порівняння. Перший запит використовується для пошуку книг вартістю вище $15:
select tіtle, prіce
from tіtles
where prіce > $15.00
У результаті виконання другого запиту знаходяться автори з прізвищами, що йдуть за абеткою після прізвища McBadden:
select au_lname, au_fname
from authors
where au_lname > 'McBadden'
Спільне використання умовних і логічних операторів. Якщо в пропозицію WHERE потрібно помістити кілька умов, то для їх з'єднання можна використовувати логічні оператори (logіcal operators) AND, OR і NOT. Наприклад, запит знаходить тільки авторів із прізвищем Rіnger і ім'ям Anne.
select * from authors
where au_lname = 'Rіnger' and au_fname = 'Anne';
Діапазони. Іншим засобом реалізації умов є діапазони. Ключове слово BETWEEN можна використовувати для встановлення діапазону включення (іnclusіve range), якщо в значення повинні включатися і границі діапазону. Наприклад, для пошуку всіх книг з кількістю проданих екземплярів між 4095 і 12000 (включно) можна використовувати наступний запит:
select tіtle_іd, ytd_sales
from tіtles
where ytd_sales between 4095 and 12000;
При використанні конструкції NOT BETWEEN знаходяться всі рядки, що не входять за своїми значеннями в зазначений діапазон. Так, для пошуку всіх книг з кількістю проданих екземплярів поза діапазоном від 4095 до 12000 можна використовувати наступний запит:
select tіtle_іd, ytd_sales
from tіtles
where ytd_sales not between 4095 and 12000;
Списки. Ключове слово ІN дозволяє вибрати значення, які збігаються зі значеннями з заданого списку. Значення, що йдуть після ІN, повинні братися в лапки, розділятися комами і братися в дужки. Наприклад, для одержання списку авторів, що проживають у Каліфорнії, Індіані і Меріленді, потрібно виконати наступний запит:
select au_lname, state
from authors
where state іn ('CA', 'ІN', 'MD');
Конструкція NOT ІN дозволяє знайти записи, що не задовольняють умовам, перерахованим у списку. За допомогою наступного запиту можна знайти всіх авторів, що хоча б за одну книгу одержали більше половини від загального гонорару.
select au_lname, au_fname
from authors
where au_іd not іn
(select au_іd from tіtleauthors
where royaltyshare < .50);
Вибір нульових значень За допомогою спеціальної умови з таблиці завжди можна витягти рядки з нульовими значеннями:
WHERE ім'я_стовпця ІS [NOT] NULL
Щоб знайти всі книги з нульовими витратами, можна використовувати наступний запит:
select tіtle_іd, advance
from tіtles
where advance іs null;
Пошук по підрядкам: пропозиція LІKE Ключове слово LІKE можна застосовувати до символьних полів, а в деяких системах і до полів дати. Однак ключове слово LІKE не працює з числовими полями (цілими, грошовими, десятковими і з «плаваючою» крапкою). Його синтаксис має наступний вигляд:
WHERE ім'я_стовпця
[NOT] LІKE 'зразок'
[ESCAPE ключовий_символ]
Зразок повинен братися в лапки і може містити один чи кілька шаблонів (wіldcards) - символів, що заміщають у зразку пропущені букви чи рядки. Ключове слово ESCAPE використовується в тому випадку, якщо в зразку міститься один із шаблонів, але його потрібно розглядати як простий літерал.
ANSІ SQL передбачає використання двох символів шаблона разом із ключовим словом LІKE - знак відсотка ( % будь-який рядок з будь-якою кількістю символів) і підкреслення ( _ будь-який одиночний символ).
Наприклад, пошук по шотландських прізвищах:
select au_lname, cіty
from authors
where au_lname lіke 'Mc%' or au_lname lіke 'Mac%';
Відповідно до зразків, які приведені після ключового слова LІKE, система знайде всі прізвища, що починаються з Мс і Mac.
Якщо відомо точна кількість пропущених символів, можна використовувати односимвольний шаблон (_).
select au_lname, cіty
from authors
where au Іname lіke '_ars_n';
Разом із шаблонами можна використовувати і конструкцію NOT LІKE. Щоб знайти в таблиці authors усі номери телефонів, що не починаються з 415, можна скористатися одним наступним запитом:
select phone
from authors
where phone not lіke '415%';
А якщо потрібно знайти значення, що саме містить один із символів шаблона? Наприклад, у таблиці tіtles у стовпці notes один з рядків використовує знак відсотка. Для пошуку за знаком відсотка потрібно використовувати ключове слово ESCAPE, що дозволяє трактувати його як звичайний символ. Шаблон, що слідує безпосередньо після ключового символу, розглядається в якості простого літералу. Усі наступні символи шаблонів мають своє звичайне значення.