2 Компонент where
За допомогою WHERE-параметра користувач визначає, які блоки даних з приведених в списку FROM таблиць з'являться в результаті запиту. За ключовим словом WHERE слідує перелік умов пошуку, що визначають ті рядки, які повинні бути вибрані при виконанні запиту. Існує п'ять основних типів умов пошуку (або предикатів):
Порівняння: порівнюються результати обчислення одного виразу з результатами обчислення іншого.
Діапазон: перевіряється, чи потрапляє результат обчислення виразу в заданий діапазон значень.
Приналежність множині: перевіряється, чи належить результат обчислень виразу заданій безлічі значень.
Відповідність шаблону: перевіряється, чи відповідає деяке рядкове значення заданому шаблону.
Значення NULL: перевіряється, чи містить даний стовпець визначник NULL (невідоме значення).
Порівняння
В мові SQL можна використовувати наступні оператори порівняння: = – рівність; < – менше; > – більше; <= – менше або рівно; >= – більше або рівно; <> – не рівно.
Приклад 5.3. Показати всі операції відпуску товарів об'ємом кількістю більше 20.
SELECT * FROM Операція
WHERE Кількість > 20
Приклад 5.3. Операції відпустки товарів кількістю більше 20.
Складніші предикати можуть бути побудовані за допомогою логічних операторів AND, OR або NOT, а також дужок, що використовуються для визначення порядку обчислення виразу. Обчислення виразу в умовах виконується за наступними правилами:
-
Вираз обчислюється зліва направо.
-
Першими обчислюються підвирази в дужках.
-
Оператори NOT виконуються до виконання операторів AND і OR.
-
Оператори AND виконуються до виконання операторів OR.
Для усунення будь-якої можливої неоднозначності рекомендується використовувати дужки.
Приклад 5.4. Вивести список товарів, ціна яких більше або дорівнює 100 і менше або дорівнює 150.
SELECT Назва, Ціна
FROM Товар
WHERE Ціна > = 100 And Ціна < = 150
Приклад 5.4. Список товарів, ціна яких більше або рівно 100 і менше або рівно 150.
Приклад 5.5. Вивести список клієнтів з Москви або з Самари.
SELECT Прізвище, ГородКлієнта
FROM Клієнт
WHERE ГородКлиента="Москва" Or ГородКлиента="Самара"
Приклад 5.5. Список клієнтів з Москви або з Самари.
Діапазон
Оператор BETWEEN використовується для пошуку значення усередині деякого інтервалу, визначуваного своїми мінімальним і максимальним значеннями. При цьому вказані значення включаються в умову пошуку.
Приклад 5.6. Вивести список товарів, ціна яких лежить в діапазоні від 100 до 150 (запит еквівалентний прикладу 5.4).
SELECT Назва, Ціна
FROM Товар
WHERE Ціна BETWEEN 100 And 150
Приклад 5.6. Список товарів, ціна яких лежить в діапазоні від 100 до 150.
Використання заперечення NOT BETWEEN потрібне, щоб значення, що перевіряється, лежало поза межами заданого діапазону.
Приклад 5.7. Вивести список товарів, ціна яких не лежить в діапазоні від 100 до 150.
SELECT Товар.Назва, Товар.Ціна
FROM Товар
WHERE Товар.Ціна NOT BETWEEN 100 And 150
Або (що еквівалентно)
SELECT Товар.Назва, Товар.Ціна
FROM Товар
WHERE (Товар.Цена<100) OR (Товар.Цена>150)
Приклад 5.7. Список товарів, ціна яких не лежить в діапазоні від 100 до 150.
Приналежність множині
Оператор IN використовується для порівняння деякого значення із списком заданих значень, при цьому перевіряється, чи відповідає результат обчислення виразу одному із значень в наданому списку. За допомогою оператора IN може бути досягнутий той же результат, що і у разі вживання оператора OR, проте оператор IN виконується швидше.
Приклад 5.8. Вивести список клієнтів з Москви або з Самари (запит еквівалентний прикладу 5.5).
SELECT Прізвище, ГородКлієнта
FROM Клієнт
WHERE ГородКлієнта IN ("Москва", "Самара")
Приклад 5.8. Список клієнтів з Москви або з Самари
NOT IN використовується для відбору будь-яких значень, окрім тих, які вказані в представленому списку.
Приклад 5.9. Вивести список клієнтів, що проживають не в Москві і не в Самарі.
SELECT Прізвище, ГородКлієнта
FROM Клієнт
WHERE ГородКлієнта NOT IN ("Москва","Самара")
Приклад 5.9. Список клієнтів, що проживають не в Москві і не в Самарі.
Відповідність шаблону
За допомогою оператора LIKE можна виконувати порівняння виразу із заданим шаблоном, в якому допускається використовування символів-замінників:
Символ % – замість цього символу може бути підставлено будь-яку кількість довільних символів.
Символ _ замінює один символ рядка.
[] – замість символу рядка буде підставлений один з можливих символів, вказаний в цих обмежувачах.
[^] – замість відповідного символу рядка будуть підставлені всі символи, окрім вказаних в обмежувачах.
Приклад 5.10. Знайти клієнтів, у яких в номері телефону друга цифра – 4.
SELECT Клієнт.Прізвище, Клієнт.Телефон
FROM Клієнт
WHERE Клієнт.Телефон LIKE '_4%'
Приклад 5.10. Вибірка клієнтів, у яких в номері телефону друга цифра – 4.
Приклад 5.11. Знайти клієнтів, у яких в номері телефону друга цифра – 2 або 4.
SELECT Клієнт.Прізвище, Клієнт.Телефон
FROM Клієнт
WHERE Клієнт.Телефон LIKE '_ [2,4]%'
Приклад 5.11. Вибірка клієнтів, у яких в номері телефону друга цифра – 2 або 4.
Приклад 5.12. Знайти клієнтів, у яких в номері телефону друга цифра 2, 3 або 4.
SELECT Клієнт.Прізвище, Клієнт.Телефон
FROM Клієнт
WHERE Клієнт.Телефон LIKE '_[2-4]%'
Приклад 5.12. Вибірка клієнтів, у яких в номері телефону друга цифра 2, 3 або 4.
Приклад 5.13. Знайти клієнтів, у яких в прізвищі зустрічається склад "ро".
SELECT Клієнт.Прізвище
FROM Клієнт
WHERE Клієнт.Прізвище LIKE "%ро%"
Приклад 5.13. Вибірка клієнтів, у яких в прізвищі зустрічається склад "ро".
Значення NULL
Оператор IS NULL використовується для порівняння поточного значення із значенням NULL – спеціальним значенням, вказуючим на відсутність будь-якого значення. NULL – це не те ж саме, що знак пропуску (пропуск – допустимий символ) або нуль (0 – допустиме число). NULL відрізняється і від рядка нульової довжини (порожнього рядка).
Приклад 5.14. Знайти співробітників, у яких немає телефону (поле Телефон не містить ніякого значення).
SELECT Прізвище, Телефон
FROM Клієнт
WHERE Телефон IS NULL
Приклад 5.14. Вибірка співробітників, у яких немає телефону (поле Телефон не містить ніякого значення).
IS NOT NULL використовується для перевірки присутності значення в полі.
Приклад 5.15. Вибірка клієнтів, у яких є телефон (поле Телефон містить яке-небудь значення).
SELECT Клієнт.Прізвище, Клієнт.Телефон
FROM Клієнт
WHERE Клієнт.Телефон Is Not Null
Приклад 5.15. Знайти клієнтів, у яких є телефон (поле Телефон містить яке-небудь значення).
Компонент ORDER
В загальному випадку рядка в результуючій таблиці SQL-запиту ніяк не впорядковані. Проте їх можна необхідним чином відсортувати, для чого в оператор SELECT поміщається фраза ORDER, яка сортує дані вихідного набору в заданій послідовності. Сортування може виконуватися по декількох полях, в цьому випадку вони перераховуються за ключовим словом ORDER через кому. Спосіб сортування задається ключовим словом, указуваним в рамках параметра ORDER слідом за назвою поля, по якому виконується сортування. За умовчанням реалізується сортування за збільшенням. Явно вона задається ключовим словом ASC. Для виконання сортування в зворотній послідовності необхідно після імені поля, по якому вона виконується, вказати ключове слово DESC. Фраза ORDER дозволяє упорядкувати вибрані записи в порядку зростання або убування значень будь-якого стовпця або комбінації стовпців, незалежно від того, присутні ці стовпці в таблиці результату чи ні. Фраза ORDER завжди повинна бути останнім елементом в операторі SELECT.
Приклад 5.16. Вивести список клієнтів в алфавітному порядку.
SELECT Клієнт.Прізвище, Клієнт.Фірма
FROM Клієнт
ORDER Клієнт.Прізвище
Приклад 5.16. Список клієнтів в алфавітному порядку.
У фразі ORDER може бути вказане і більше одного елемента. Головний (перший) ключ сортування визначає загальну впорядкованість рядків результуючої таблиці. Якщо у всіх рядках результуючої таблиці значення головного ключа сортування є унікальними, немає необхідності використовувати додаткові ключі сортування. Проте, якщо значення головного ключа не унікальні, в результуючій таблиці буде присутні декілька рядків з одним і тим же значенням старшого ключа сортування. В цьому випадку, можливо, доведеться упорядкувати рядки з одним і тим же значенням головного ключа по якому-небудь додатковому ключу сортування.
Приклад 5.17. Вивести список фірм і клієнтів. Назви фірм упорядкувати в алфавітному порядку, імена клієнтів в кожній фірмі відсортувати в зворотному порядку.
SELECT Клієнт.Фірма, Клієнт.Прізвище
FROM Клієнт
ORDER Клієнт.Фірма, Клієнт.Прізвище DESC
Приклад 5.17. Список фірм і клієнтів. Назви фірм в алфавітному порядку, імена клієнтів в кожній фірмі в зворотному порядку.
Контрольні питання
-
Поясніть, як ви розумієте призначення оператору SELECT?
-
Чи надає оператор SELECT здійснювати відбір з кількох таблиць? Як саме?
-
Яким чином оператор SELECT пов'язаний з основоположними принципами промислових СУБД?
-
Наведіть формальний синтаксис та поясніть призначення його складових.
-
Які з цих частин, на вашу думку, є обов’язковими? Чому?
-
В чому полягає призначення компонента FROM?
-
Перерахуйте порядок опрацювання елементів оператору вибірки.
