
- •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.2. Засоби пошуку даних 73
Розділ 4
Мова SQL
Засоби пошуку даних
Засоби маніпулювання даними
Операції над схемою бази даних
Віртуальні таблиці та індекси
Транзакцм
Додаткові можливості мови
4.1. Історія мови sql та огляд її можливостей
Історія SQL починається з 70-х років XX століття, коли в дослідницькій лабораторії IBM у штаті Каліфорнія було розроблено першу версію цієї мови. Назва SQL є абревіатурою від Structured Query Language (структурована мова запитів), й іноді її вимовляють як «sequel» (первісна назва). Спочатку ця мова була реалізована в реляційній СКБД DB2 виробництва IBM. На відміну від мов третього покоління (COBOL, C), які з'явилися в той самий час, мова SQL не є процедурною. Непроцедурна мова — це мова, в якій описується, що потрібно одержати, а не як це зробити.
Особливість реляційних СКБД полягає у тому, що вони надають множинно-орієнтовану мову маніпулювання базами даних, тобто результатом дії мовного оператора є таблиця, яка містить множину даних. Більшість сучасних реляційних СКБД використовують саме мову SQL.
Американський інститут національних стандартів (American National Standards Institute — ANSI) та Міжнародна організація стандартів (International Standards Organization — ISO) займаються описом і підтримкою стандартів цієї мови. Усі сучасні СКБД підтримують певний стандарт, проте є й відхилення, які в кожному конкретному випадку специфікуються в документації програмного продукту. Окрім того, у багатьох системах розроблено розширення SQL, що дають змогу використовувати мову запитів у середовищі програмування.
SQL надає такі можливості:
створювати й видаляти таблиці бази даних, а також змінювати заголовки таблиць;
вставляти, змінювати й видаляти рядки в таблицях;
виконувати пошук даних у багатьох таблицях та впорядковувати результати цього пошуку;
описувати процедури підтримки цілісності;
визначати та змінювати інформацію про захист даних.
Керуючись стандартами ANSI-92 та ANSI-99, розглянемо можливості SQL на численних прикладах. Усі запити конструюватимуться для тієї ж бази даних, що була використана під час розгляду реляційної алгебри та реляційного числення:
ФАКУЛЬТЕТІ. Назва. Декан. Корпус. Фонд) KA<DEflPA(#D. #F. Назва. #ЗАВІДУВАЧ. Корпус. Фонд) ВИКЛАДАЧ(#Т. #D, Прізвище. Посада. Тел) ГРУПА(#С #D. Курс, Номер. Кількість. #КУРАТ0Р) ПРЕДМЕТІ. Назва)
АУДИТОРІЯШ. Номер. Корпус. Місткість) ЛЕКЦІЯ(#Т. #G. #S, #R. Тип. День. Тиждень)
4.2. Засоби пошуку даних
4.2.1. Основні конструкції мови, призначені для вибирання даних
Основна конструкція, призначена у мові SQL для вибирання даних, складається з фраз SELECT і FROM. Фраза FROM вказує, з якої таблиці потрібно вибрати дані, а фраза SELECT — які саме атрибути (стовпці) з цієї таблиці мають бути вибрані. Запит
SELECT Назва FROM ФАКУЛЬТЕТ
здійснює виведення назв факультетів. Ці дві фрази обов'язково мають бути в будь-якому запиті.
Виведення окремих стовпців
У фразі SELECT можна зазначати список імен стовпців. Передбачається, що результат виведення буде впорядкований за стовпцями відповідно до того, як розташовані імена у фразі:
SELECT Номер. Курс, Кількість FROM ГРУПА
Виведення всіх стовпців
Якщо необхідно вивести всі стовпці таблиці, то у фразі SELECT використовується символ *:
SELECT *
FROM КАФЕДРА
Неповторювані рядки
Хоча в реляційних відношеннях не має бути повторюваних рядків (дублікатів), У SQL за замовчуванням встановлено, що всі дублікати рядків у таблиці-резуль-таті виводяться. Щоб унаслідок виконання запиту одержати унікальні (неповторювані) значення, потрібно використовувати модифікатор DISTINCT (за замовчуванням застосовується модифікатор ALL). Наприклад, щоб отримати список усіх
т
ипів
лекцій, які читаються у вузі, і щоб кожен
тип виводився лише один раз, потрібно
записати:
SELECT DISTINCT Тип FROM ЛЕКЦІЯ
Без модифікатора DISTINCT ми одержали б список із кількох сотень рядків (його довжина дорівнювала б кількості всіх лекцій у вузі).
Зазначимо, що весь запит можна розмістити в одному рядку.
Перевизначення імен стовпців
Фраза SELECT надає можливість перевизначити імена стовпців кінцевої таблиці. Для цього після імені стовпця вихідної таблиці необхідно зазначити ім'я стовпця кінцевої таблиці (з використанням необов'язкової фрази AS). Наприклад, у наведеному нижче запиті перевизначаються імена обох стовпців:
SELECT Назва AS Назва_факультету. Декан AS Декан_факультету FROM ФАКУЛЬТЕТ
Умова вибирання
Для запису умови вибирання використовується фраза WHERE. У ній зазначено, якій умові мають відповідати вихідні дані. Алгоритм обробки запиту з фразою WHERE є таким:
4- вибрати рядок із таблиці;
4- перевірити його відповідність вказаній умові;
4- якщо рядок відповідає умові, то вивести значення стовпців, вказаних у фразі
SELECT.
Цей запит виводить список усіх професорів вузу:
SELECT Прізвище FROM ВИКЛАДАЧ
WHERE Посада = "професор"