Лекція №10
Мова структурованих запитів SQL. Пошук та вибірка даних
1. Мова структурованих запитів SQL
На початку 1970-х праці дослідника з IBM Едгара Кодда дали поштовх для створення продукту, пов’язаного з реляційною моделлю даних, під назвою SEQUEL (Structured English Query Language, структурована англійська мова для запитів), яка з часом перетворилася в SQL (Structured Query Language). І тому, згідно історичних причин, абревіатуру SQL іноді читали як «сіквел», але правильною назвою є все таки «ескюель». Як випливає з назви, SQL є інформаційно-логічною мовою, що використовується для організації взаємодії
користувача з базою даних. Однак SQL працює лише з реляційними базами даних.
Спочатку ця мова була реалізована в реляційній СКБД DB2 виробництва IBM. На відміну від мов третього покоління (COBOL, С), які з'явилися в той самий час, мова SQL не є процедурною. Непроцедурна мова ‒ це мова, в якій описується, що потрібно одержати, а не як це зробити.
Особливість реляційних СКБД полягає у тому, що вони надають множинно- орієнтовану мову маніпулювання базами даних, тобто результатом дії мовного оператора є таблиця, яка містить множину даних. Більшість сучасних реляційних СКБД використовують саме мову SQL.
Хоча IBM і була розробником теорії реляційних БД, однак на ринок з технологією першою вийшла компанія Oracle. Оскільки діалекти SQL почали швидко розмножуватися, то у 1986 р. Американський національний інститут стандартів ANSI видав перший стандарт SQL для узгодження роботи виробників, а у 1989 р. – другий стандарт, який був також підтверджений Міжнародною організацією по стандартизації ISO. У 1992 р. ANSI випустила обновлення стандарту, відомого як SQL92 чи SQL2. У 1999 р. вийшло чергове
обновлення SQL99 чи SQL3. На сьогодні існує стандарт SQL2003, з незначними модифікаціями внесеними пізніше (у 2006 та 2008 роках).
Однак, не зважаючи на існуючі стандарти, все одно існують діалекти для мови SQL. Існування діалектів пов’язане в першу чергу з необхідністю додаткових інструментів, які не передбачені у стандартах, наприклад, засоби умовної обробки (оператор IF … THEN), керуючі оператори (наприклад, цикли WHILE), змінні, оброблення помилок.
SQL надає такі можливості:
- створювати й видаляти таблиці бази даних, а також змінювати заголовки таблиць;
- вставляти, змінювати й видаляти рядки в таблицях;
- виконувати пошук даних у багатьох таблицях та впорядковувати результати цього пошуку;
- описувати процедури підтримки цілісності;
- визначати та змінювати інформацію про захист даних.
Деякі популярні діалекти SQL:
PL/SQL (Procedural Language/SQL) – використовується в Oracle;
T-SQL (Transact-SQL) – використовується в Microsoft SQL Server та Sybase Adaptive Server;
PSQL (Procedural SQL) – використовується в InterBase та Firebird;
SQL PL (SQL Procedural Language) – використовується в IBM DB2;
SQL/PSM (SQL/Persistent Stored Module) – використовується в MySQL;
PL/pgSQL (Procedural Language/PostgreSQL Structured Query Language) –
використовується в PostgreSQL (читається як «Пост-Грес-Кью-ел» або «Постгрес») та є подібний до Oracle PL/SQL.
Рисунок 8.1 ‒ Використання SQL для роботи з базою даних
Мова SQL поділяється на три частини:
1. Оператори визначення даних – DDL (Data Definition Language). Призначені для опису структури баз даних. Такі як: CREATE (створити), ALTER (змінити), DROP (видалити).
2. Оператори маніпулювання даними – DML (Data Manipulation Language). Призначені для отримання, вставки, видалення чи зміни даних у БД. Такі як: SELECT (вибрати), INSERT (вставити), UPDATE (обновити), DELETE (видалити).
3. Оператори визначення доступу до даних – DCL (Data Control Language). Такі як: GRANT (надати доступ), DENY (заборонити доступ), REVOKE (анулювати видані раніше дозволи чи заборони).
Надалі синтаксис SQL будемо розглядати з огляду на діалект Transact-SQL для Microsoft SQL Server.
2. Оператор для вибірки даних SELECT
SELECT [ DISTINCT ]
< * | перелік стовпців | формули | статистичні функції >
FROM < перелік таблиць [ псевдоніми ] >
[ WHERE < умова відбору даних > ]
[ GROUP BY < ім’я стовпця(ів) >
[ HAVING < умова відбору для групи > ] ]
[ ORDER BY < перелік стовпців | порядкові № стовпців > ] [ ;]
Рис.1. Робоча таблиця Model
3. Вибірка даних
3.1. Вибір усіх стовпців з даними
SELECT * FROM Model
Відобразиться уся базова таблиця, як на рис. 1.
При вказанні групового символу * повертаються усі стовпці з даними.
3.2. Вибір декількох стовпців
SELECT Year, Price FROM Model
При виборі лише декількох стовпців вони будуть виведені у тому порядку, в якому були вказані уSQL-запиті.
3.3. Використання псевдонімів для назв стовпців
SELECT Year AS Y, Price AS P FROM Model
або
SELECT Year Y, Price P FROM Model
Ключове слово AS
є необов’язковим. Використання псевдоніма дає нову назву стовпцю при виведенню.
3.4. Фільтрація дублікатів стрічок
SELECT DISTINCT Name, Price FROM Model
Ключове слово DISTINCT забезпечує унікальний вивід стрічок (без їхніх дублікатів) для вибраних стовпців з даними.
4. Сортування вибраних даних.
4.1. Сортування даних відносно певного
стовпця.
SELECT Name, Price FROM Model
ORDER BY Price
4.2. Сортування за декількома стовпцями
SELECT Name, Price FROM Model
ORDER BY Price, Name
Спершу сортування виконується за першим вказаним у переліку сортування стовпцем, а при співпадінні значень – вже за другим, і т.д.
4.3. Сортування за номером стовпця
SELECT Name, Price FROM Model
ORDER BY 2, 1
Результат буде аналогічним попередньому.
Тут цифри вказують на відносне положення у переліку стовпців після слова SELECT.
Недолік: цей спосіб неможливо використати при сортуванні за стовпцями, що не вказані у переліку SELECT.
SELECT Name, Price FROM Model
ORDER BY Year
4.4. Задання напряму сортування
SELECT Name, Price FROM Model
ORDER BY Name DESC, Price
За замовчуванням порядок сортування задається за зростанням даних. При необхідності можна вказати порядок за спаданням за допомогою ключового слова DESC після назви чи номера стовпця. Порядок сортування за зростанням можна вказати явно за допомогою ключового слова ASC. ASC та DESC є скороченнями для ключових слів, відповідно, ASCENDING та DESCENDING.
5. Фільтрація даних
5.1. Операції порівняння
SELECT Name FROM Model
WHERE Price >= 65
Для порівняння використовують такі стандартні операції:
= (рівно); <>, != (не рівно); < (менше ніж); <= (менше або рівно); !< (не менше ніж); > (більше ніж); >= (більше або рівно); !> (не більше ніж); BETWEEN (між двома вказаними значеннями); IS NULL (значення рівне null).
Однакові операції: <> та !=; !< та >=; !> та <=.
Однак не всі ці операції підтримуються усіма СКБД.
SELECT Name FROM Model
WHERE Price BETWEEN 30 AND 65
Для логічного оператора BETWEEN необхідно вказувати два значення – менше та більше із вибраного діапазону, та які розділені ключовим словом AND. Оператор BETWEEN еквівалентний такому поєднанню логічних операцій:
Price >= 30 AND Price <= 65
SELECT Name FROM Model
WHERE Price IS NULL
Операція IS NULL здійснює вибірку стрічок із пустими, тобто null-значенями для вказаного стовпця. Протилежна до неї операція – IS NOT NULL.
5.2. Комбіновані умови: логічні оператори AND та OR
SELECT Name, Price FROM Model
WHERE Name = 'Z' OR Name = 'B' AND Price < 50
Пріоритет оператора AND є вищим за пріоритет оператора OR; для задання необхідного порядку виконання логічних виразів слід використовувати дужки (…).
SELECT Name, Price FROM Model
WHERE (Name = 'Z' OR Name = 'B') AND Price < 50
5.3. Логічний оператор IN
SELECT Name FROM Model
WHERE Name IN ('A', 'C', 'D')
Оператор IN використовується для задання переліку допустимих значень, які вказуються у дужках через кому. Оператор IN еквівалентний логічній сумі OR усіх операцій рівності для допустимих значень:
SELECT Name FROM Model
WHERE Name = 'A' OR Name = 'C' OR Name = 'D'
5.4. Логічний оператор NOT
SELECT Name FROM Model
WHERE NOT (Name = 'B' OR Name = 'Z')
Логічний оператор NOT використовується для заперечення логічного виразу, що розташований за ним. NOT має вищий пріоритет за оператори AND та OR.
Зауваження: логічний оператор NOT не підтримується MySQL.
5.5. Логічний оператор LIKE
SELECT Email FROM Model
WHERE Email LIKE '%@ukr.net'
Оператор LIKE дає можливість здійснювати пошук за заданим шаблоном, що містить комбінацію тексту та метасимволів (символів-шаблонів).
Метасимволи:
% – замінює довільну послідовність з нуль або більше символів.
_ (підкреслення) – замінює довільний одиничний символ.
[ перелік символів ] – замінює довільний одиничний символ, що вказаний у діапазоні, наприклад: [bcz] чи [b-z].
[^ перелік символів ] – замінює довільний одиничний символ, що не входить у вказаний діапазон чи набір, наприклад: [^bk-p].
Зауваження 1: метасимвол [ ] підтримується не усіма СКБД.
Зауваження 2: залежність від регістру літер при пошуку залежить від СКБД та її конфігурації.
Питання для самоперевірки:
1. Дайте характеристику мови структурованих запитів SQL.
2. Мова структурованих запитів SQL ‒ історична довідка та діалекти.
3. Охарактеризуйте оператори вибірки даних в мові SQL.
4. Охарактеризуйте оператори сортування вибраних даних в мові SQL.
5. Охарактеризуйте оператори фільтрації даних в мові SQL.