
- •4.1. Історія мови sql та огляд її можливостей
- •4.2. Засоби пошуку даних
- •4.2.1. Основні конструкції мови, призначені для вибирання даних
- •4.2.2. Вирази, умови та оператори
- •4.2.3. Вибирання з кількох таблиць
- •4.2.4. Використання агрегатних функцій
- •4.2.5. Фраза group by. Групування таблиці за рядками
- •4.2.6. Фраза having. Умова вибирання для груп рядків
- •4.2.7. Фраза order by. Впорядкування рядків
- •4.2.8. Порядок обчислення запитів
- •4.2.9. Підзапити
- •4.2.10. Використання предикатів any, all, exists та in
- •4.2.11. Використання теоретико-множинних операторів
- •4.2.12. Запити, в яких реалізується квантор загальності
- •4.2.13, Використання невизначених значень
- •4.3. Засоби маніпулювання даними
- •4.3.1. Додавання рядків до таблиці. Оператор insert
- •4.3.2. Оновлення даних. Оператор update
- •4.3.3. Видалення рядків таблиці. Оператор delete
- •4.4. Операції над схемою бази даних
- •4.4.1. Створення бази даних. Оператор create database
- •4.4.2. Створення таблиці. Оператор create table
- •4.5.2. Використання індексів
- •4.6. Транзакції
- •4.6.1. Початок і завершення транзакції
- •4.6.2. Скасування транзакції. Точки збереження
- •4.7. Тригери
- •4.8. Додаткові можливості
4.4.2. Створення таблиці. Оператор create table
Процедура створення таблиці є більш стандартизованою. Базовий синтаксис відповідного оператора є таким:
CREATE TABLE <ім'я таблиці> (<поле 1> <тип даних 1> [ NOT NULL ] [. <поле 2> <тип даних 2> [ NOT NULL ]]...)
Після ключових слів CREATE TABLE задаються ім'я таблиці та імена стовпців з типами даних і деякими іншими характеристиками. Специфікатор NOT NULL забороняє введення у стовпець NULL-значень і застосовується зокрема до ключових полів.
Типи даних
Кожна система має свої типи даних. Наведемо типи даних у СКБД Oracle (табл. 4.2).
Таблиця 4.2. Типи даних у СКБД Oracle
Тип даних Коментарі
CHAR Текстові рядки довжиною від 1 до 255 символів. Довжина рядків фіксована
VARCHAR2 Текстові рядки довжиною від 1 до 2000 символів. Довжина рядків змінна
DATE Дата: рік, місяць, день, година, хвилина, секунда
LONG Рядок символьних даних змінної довжини до 2 Гбайт
LONG RAW Двійкові дані довжиною до 2 Гбайт
NUMBER Додатні чи від'ємні числа з фіксованою чи плаваючою комою
RAW Двійкові дані довжиною до 255 байтів
ROW ID Шістнадцятковий рядок, що містить унікальну адресу рядка в таблиці
Унікальні значення
Певні системи надають можливість зазначати, що те чи інше поле має містити унікальні (не повторювані) значення. Це особливо важливо для ключових полів. Інші системи, наприклад Oracle та SQL Server, дають змогу оголошувати унікальні (UNIQUE) індекси. Є системи, в яких визначено тип даних, що його значення автоматично надаються створюваним рядкам. Ці значення є унікальними в межах таблиці протягом усього часу її існування. В Oracle таким типом даних є R0WID. Окрім того, в Oracle модифікатор UNIQUE застосовується для позначення полів, що разом забезпечують унікальність записів у межах таблиці.
Запит 4.48
Створити таблицю ФАКУЛЬТЕТ (застосовуємо типи даних Oracle).
CREATE TABLE ФАКУЛЬТЕТ (#F NUMBER (10).
Назва CHAR(50) NOT NULL.
Декан CHAR(25).
Корпус CHAR(5).
Фонд NUMBER(6.2))
Створення таблиці на базі існуючої
Для створення таблиць найчастіше використовують команду CREATE TABLE. Однак деякі системи надають альтернативний спосіб означення таблиць із використанням формату та даних наявної таблиці. Цей метод корисний для вибирання даних із таблиці з метою тимчасового зберігання та модифікації. В СКБД Oracle синтаксис цієї команди виглядає так:
CREATE TABLE <нова таблиця>(<список полі в>)
AS (SELECT <список полів>
FROM <стара таблиця> [WHERE...])
Ця команда дає змогу створити нову таблицю з типами даних полів наявної таблиці та за необхідності перейменувати поля.
4.4.3. Модифікація таблиці. Оператор ALTER TABLE
Можливі ситуації, коли вже створена таблиця не відповідає зміненим вимогам до бази даних. Команда ALTER TABLE дає змогу змінити структуру таблиці після її створення: додати до вже визначеної таблиці стовпець або змінити наявний. Синтаксис команди такий:
ALTER TABLE <iм'я таблиці> [ADD <поле> <означення поля>|
ALTER <поле> <параметри>|
DROP <поле> <параметри>]
4.4.4. Видалення таблиці. Оператор DROP TABLE
У SQL є команда, призначена для видалення з бази даних усієї таблиці. Оператор DROP TABLE видаляє таблицю з усіма зв'язаними з нею віртуальними таблицями й індексами. Найчастіше він застосовується до тимчасових таблиць, які видаляються через певний час після створення. Синтаксис команди такий:
DROP TABLE <ім'я таблиці>
4.4.5. Видалення бази даних. Оператор DROP DATABASE
Команда DROP DATABASE застосовується для видалення всієї бази даних і має такий синтаксис:
DROP DATABASE <ім'я бази даних>
4.5. Віртуальні таблиці та індекси
У цьому підрозділі ми розглянемо два засоби SQL, які дають змогу зображувати дані не в тому вигляді, в якому вони зберігаються в БД. Мова йтиме про віртуальні таблиці та індекси.
4.5.1. Використання віртуальних таблиць
Віртуальна таблиця — це пойменована таблиця, одержана в результаті виконання оператора SELECT з можливою заміною імен стовпців.
Віртуальна таблиця застосовується для створення складних запитів. Вона може використовуватися в операторах SELECT, INSERT, INPUT, UPDATE, DELETE, хоча фізично не займає місця в базі даних, як звичайна таблиця. Синтаксис створення віртуальної таблиці такий:
CREATE VIEW <віртуальна таблиця> [(<список полів>)] AS
SELECT <список полі в>
FROM <імена таблиць> [WHERE ...] [WITH CHECK OPTION]
Необов'язкова фраза WITH CHECK OPTION (з контролем) вказує на те, що для операцій INSERT та UPDATE над цією таблицею має здійснюватися контроль, який забезпечує виконання умов, заданих у фразі WHERE підзапиту.
Проста віртуальна таблиця
Це віртуальна таблиця, що є копією вихідної, але має інше ім'я:
CREATE VIEW КОПІЯ_ФАКУЛЬТЕТУ AS
SELECT *
FROM ФАКУЛЬТЕТ
У результаті виконання наведеного оператора створюється віртуальна таблиця КОПІЯ_ФАКУЛЬТЕТУ, що є точною копією таблиці ФАКУЛЬТЕТ. Можна також створювати віртуальні таблиці на базі інших віртуальних таблиць.
Вибирання стовпців
До віртуальної таблиці можна копіювати окремі стовпці вихідної таблиці:
CREATE VIEW ДЕКАНИ_ФАКУЛЬТЕТІВ (Назва. Декан) AS
SELECT *
FROM ФАКУЛЬТЕТ
Перейменування стовпців
Синтаксис створення віртуальних таблиць дає змогу перейменовувати стовпці вихідної таблиці. Для цього необхідно явно зазначити стовпець у фразі SELECT та імена стовпців у фразі CREATE VIEW:
CREATE VIEW ВИКЛАДАЧ_ПРІЗВИЩЕ_П0САДА (Прізвище. Положення) AS SELECT Прізвище. Посада FROM ВИКЛАДАЧ
Складні конструкції
Фраза WHERE у складі оператора CREATE VIEW може містити підзапити. Наведемо приклад.
Запит 4.49
Створити віртуальну таблицю зі списком викладачів факультету інформатики, які працюють також на інших факультетах.
CREATE VIEW ВИКЛАДАЧ_2 (Прізвище. Посада) AS SELECT ВИКЛАДАЧ.Прізвище. Посада
FROM ФАКУЛЬТЕТ. КАФЕДРА. ВИКЛАДАЧ
WHERE ФАКУЛЬТЕТ.#F = КАФЕДРА.#F AND
КАФЕДРА.#D = ВИКЛАДАЧ.#D AND ФАКУЛЬТЕТ.Назва = "інформатики" AND ВИКЛАДАЧ.Прізвище IN
(SELECT ВИКЛАДАЧ.Прізвище FROM ФАКУЛЬТЕТ. КАФЕДРА. ВИКЛАДАЧ
WHERE ФАКУЛЬТЕТ.#F = КАФЕДРАМ AND КАФЕДРА.#D = ВИКЛАДАЧ.#D ФАКУЛЬТЕТ.Назва ф "інформатики")
Обмеження, накладені на структуру запиту в операторі CREATE VIEW
SQL накладає певні обмеження на структуру запиту, що використовується для означення віртуальної таблиці: в ньому забороняється застосовувати оператор UNION та фразу ORDER BY.
Зміна даних через віртуальні таблиці
Віртуальні таблиці можна використовувати в операторах UPDATE, INSERT, DELETE для зміни даних у БД, але в цьому разі слід дотримуватися таких правил:
забороняється застосовувати оператор DELETE до віртуальних таблиць, визначених на багатьох базових таблицях;
директиву INSERT дозволяється використовувати лише в тому випадку, якщо віртуальна таблиця містить усі значення NOT NULL-стовпця базової таблиці;
під час додавання чи оновлення через віртуальну таблицю всі записи, що оновлюються, мають належати одній і тій самій фізичній таблиці;
забороняється додавати чи оновлювати записи через віртуальну таблицю, визначену із застосуванням модифікатора DISTINCT;
не дозволяється оновлювати віртуальні стовпці (тобто стовпці, значення в яких є результатами обчислення виразів).
Застосування віртуальних таблиць
Віртуальна таблиця може використовуватися для захисту, конвертування й забезпечення логічної незалежності даних, а також для спрощення складних запитів.
♦ Забезпечення логічної незалежності. Одне з основних завдань, вирішити яке дають змогу віртуальні таблиці, полягає в забезпеченні незалежності користу вацьких програм від змін у логічній структурі бази даних, зумовлених розши ренням таблиці та/або зміною розташування стовпців (наприклад, під час роз щеплення таблиць).
Захист даних. Надаючи користувачам доступ до певної інформації лише через віртуальні таблиці, можна вирішити проблему захисту даних.
Конвертування даних. Віртуальні таблиці стають у нагоді, коли постає потреба надати користувачу дані не в тому форматі, в якому вони зберігаються в базі даних.
Спрощення конструкцій складних запитів. Складний запит, що має ієрархічну структуру, легше сформулювати, використовуючи віртуальні таблиці як допоміжні.
Видалення віртуальної таблиці
Для видалення віртуальної таблиці застосовується оператор DROP VIEW. Його синтаксис такий:
DROP VIEW <ім'я віртуальної таблиці>
Слід пам'ятати, що під час видалення віртуальної таблиці видаляються також всі інші таблиці, у визначеннях яких дана таблиця використовувалась.