Елементи мови SQL
У даному розділі розглядаються елементи мови SQL (Structured Query Language). Поточна версія стандарту мови SQL прийнята в 1992 р. (Офіційна назва стандарту - Міжнародний стандарт мови баз даних SQL (1992) (International Standart Database Language SQL), неофіційна назва - SQL/92, або SQL-92, або SQL2). Документ, що описує стандарт, містить більше 600 сторінок. Ми дамо тільки деякі поняття мови.
Мова SQL стала фактично стандартною мовою доступу до баз даних. Всі СУБД, що претендують на назву "реляційні", реалізують той або інший діалект SQL. Багато нереляційних систем також мають в даний час засоби доступу до реляційних даних. Метою стандартизації є переносимість додатків між різними СУБД.
Потрібно помітити, що в даний час, жодна система не реалізує стандарт SQL в повному об'ємі. Крім того, у всіх діалектах мови є можливості, що не є стандартними. Таким чином, можна сказати, що кожний діалект - це надмножина деякої підмножини стандарту SQL. Це утрудняє переносимість додатків, розроблених для одних СУБД в інші СУБД.
Мова SQL оперує термінами, дещо відмінними від термінів реляційної теорії, наприклад, замість "відносин" використовуються "таблиці", замість "кортежів" - "рядка", замість "атрибутів" - "колонки" або "стовпці".
Стандарт мови SQL, хоча і заснований на реляційній теорії, але в багатьох місцях відходить він її. Наприклад, відношення в реляційній моделі даних не допускає наявності однакових кортежів, а таблиці в термінології SQL можуть мати однакові рядки. Є і інші відмінності.
Мова SQL є реляційно повною. Це означає, що будь-який оператор реляційної алгебри може бути виражений відповідним оператором SQL.
Оператори SQL
Основу мови SQL складають оператори, умовні розбиті не декілька груп по виконуваних функціях.
Можна виділити наступні групи операторів (перераховані не всі оператори SQL):
Оператори DDL (Data Definition Language) - оператори визначення об'єктів бази даних
CREATE SCHEMA - створити схему бази даних
DROP SHEMA - видалити схему бази даних
CREATE TABLE - створити таблицю
ALTER TABLE - змінити таблицю
DROP TABLE - видалити таблицю
CREATE DOMAIN - створити домен
ALTER DOMAIN - змінити домен
DROP DOMAIN - видалити домен
CREATE COLLATION - створити послідовність
DROP COLLATION - видалити послідовність
CREATE VIEW - створити представлення
DROP VIEW - видалити представлення
Оператори DML (Data Manipulation Language) - оператори маніпулювання даними
SELECT - відібрати рядки з таблиць
INSERT - додати рядки в таблицю
UPDATE - змінити рядки в таблиці
DELETE - видалити рядки в таблиці
COMMIT - зафіксувати внесені зміни
ROLLBACK - відкотити внесені зміни
Оператори захисту і управління даними
CREATE ASSERTION - створити обмеження
DROP ASSERTION - видалити обмеження
GRANT - надати привілеї користувачу або додатку на маніпулювання об'єктами
REVOKE - відмінити привілеї користувача або додатки
Крім того, є групи операторів установки параметрів сеансу, отримання інформації про базу даних, оператори статичного SQL, оператори динамічного SQL.
Найважливішими для користувача є оператори маніпулювання даними (DML).
Приклади використовування операторів маніпулювання даними
INSERT - вставка рядків в таблицю
Приклад 1. Вставка одного рядка в таблицю:
INSERT INTO
P (PNUM, PNAME)
VALUES (4, "Іванов");
Приклад 2. Вставка в таблицю декількох рядків, вибраних з іншої таблиці (в таблицю TMP_TABLE вставляються дані про постачальників з таблиці P, що мають номери, великі 2):
INSERT INTO
TMP_TABLE (PNUM, PNAME)
SELECT PNUM, PNAME
FROM P
WHERE P.PNUM>2;
UPDATE - оновлення рядків в таблиці
Приклад 3. Оновлення декількох рядків в таблиці:
UPDATE P
SET PNAME = "Хутровиків"
WHERE P.PNUM = 1;
DELETE - видалення рядків в таблиці
Приклад 4. Видалення декількох рядків в таблиці:
DELETE FROM P
WHERE P.PNUM = 1;
Приклад 5. Видалення всіх рядків в таблиці:
DELETE FROM P;
Приклади використовування оператора SELECT
Оператор SELECT є фактично найважливішим для користувача і найскладнішим оператором SQL. Він призначений для вибірки даних з таблиць, тобто він, власне, і реалізує одне їх основних призначення бази даних - надавати інформацію користувачу.
Оператор SELECT завжди виконується над деякими таблицями, що входять в базу даних.
Зауваження. Насправді в базах даних можуть бути не тільки постійно бережені таблиці, а також тимчасові таблиці і так звані представлення. Представлення - це просто дані SELECT-вирази, що зберігаються в базі. З погляду користувачів представлення - це таблиця, яка не зберігається постійно в базі даних, а "виникає" у момент звернення до неї. З погляду оператора SELECT і постійно збережені таблиці, і тимчасові таблиці і представлення виглядають абсолютно однаково. Звичайно, при реальному виконанні оператора SELECT системою враховуються відмінності між збереженими таблицями і представленнями, але ці відмінності приховані від користувача.
Результатом виконання оператора SELECT завжди є таблиця. Таким чином, за наслідками дій оператор SELECT схожий на оператори реляційної алгебри. Будь-який оператор реляційної алгебри може бути виражений відповідним чином сформульованим оператором SELECT. Складність оператора SELECT визначається тим, що він містить в собі всі можливості реляційної алгебри, а також додаткові можливості, яких в реляційній алгебрі немає.
Відбір даних з однієї таблиці
Приклад 6. Вибрати всі дані з таблиці постачальників (ключові слова SELECT. FROM.):
SELECT *
FROM P;
Зауваження. В результаті одержимо нову таблицю, що містить повну копію даних з початкової таблиці P.
Приклад 7. Вибрати всі рядки з таблиці постачальників, що задовольняють деякій умові (ключове слово WHERE.):
SELECT *
FROM P
WHERE P.PNUM > 2;
Зауваження. Як умова в розділі WHERE можна використовувати складні логічні вирази, що використовують поля таблиць, константи, порівняння (> < = і т.д.), дужки, союзи AND і OR, заперечення NOT.
Приклад 8. Вибрати деякі колонки з початкової таблиці (вказівка списку відбираних колонок):
SELECT P.NAME
FROM P;
Зауваження. В результаті одержимо таблицю з однією колонкою, що містить всі найменування постачальників.
Зауваження. Якщо в початковій таблиці було присутнє декілька постачальників з різними номерами, але однаковими найменуваннями,