- •Розділ 1. Вступ
- •1.1.Основні поняття
- •1.2.Типи даних в sql
- •1.3. Таблиці sql
- •Розділ 2. Запити з використанням єдиної таблиці
- •2.1. Про команду select
- •2.2. Вибірка без використання фрази where
- •2.2.1. Проста вибірка
- •2.2.2. Виключення дублікатів
- •2.2.3. Вибірка значень, що обчислюються
- •2.3. Вибірка c використанням фрази where
- •2.3.1. Використання операторів порівняння
- •2.3.2. Використання between
- •2.3.3. Використання іn
- •2.3.4. Використання lіke
- •2.3.5. Залучення невизначеного значення (null-значення)
- •2.4. Вибірка з упорядкуванням
- •Розділ 3. Агрегація даних
- •3.2. Фраза group by
- •3.3. Використання фрази havіng
- •Розділ 4. Запити з використанням декількох таблиць
- •4.1. Запити, що використовують з'єднання
- •4.1.1. Декартів добуток таблиць
- •4.1.2. Еквіз’єднання таблиць
- •4.1.3. Природне з'єднання таблиць
- •4.1.4. Композиція таблиць
- •4.1.5. З'єднання таблиць з додатковою умовою
- •4.2. Вкладені підзапити
- •4.2.1. Види вкладених підзапитів
- •4.2.2. Використання однієї і тієї ж таблиці в зовнішньому і вкладеному під запиті
- •4.2.3. Запити, що використовують exіsts
- •4.2.4. Функції в підзапиті
- •4.3. Об'єднання (unіon)
- •Розділ 5. Інструкції модифікації даних в sql. Створення базових таблиць
- •5.1. Особливості і синтаксис інструкцій модифікації даних
- •5.2. Створення і знищення базових таблиць
- •5.3. Індекси
1.3. Таблиці sql
До тепер поняття "таблиця", як правило, зв'язувалося з реальною чи базовою таблицею, тобто c таблицею, для кожного рядка якої в дійсності мається деякий двійник, що зберігається у фізичній пам'яті ЕОМ. Однак SQL використовує і створює ряд віртуальних (начебто існуючих) таблиць: представлень, курсорів і неіменованих робочих таблиць, у яких формуються результати запитів на одержання даних з базових таблиць і, можливо, представлень. Це таблиці, що не існують у базі даних, але як би існують з погляду користувача.
Базові таблиці створюються за допомогою команди CREATE TABLE (створити таблицю).
Представлення - це порожня іменована таблиця, обумовлена переліком тих стовпців таблиць і ознаками тих їхніх рядків, що хотілося б у ній побачити. Представлення є як би "вікном" в одну чи кілька базових таблиць. Воно створюється за допомогою пропозиції CREATE VІEW (створити представлення).
Курсор - це порожня іменована таблиця, обумовлена переліком тих стовпців базових таблиць і ознаками тих їхніх рядків, що хотілося б у ній побачити. У чому ж розходження між курсором і представленням?
Для користувача представлення майже не відрізняються від базових таблиць (є лише деякі обмеження при виконанні різних операцій маніпулювання даними). Вони можуть використовуватися як в інтерактивному режимі, так і в прикладних програмах. Курсори ж створені для процедурної роботи з таблицею в прикладних програмах.
Розділ 2. Запити з використанням єдиної таблиці
2.1. Про команду select
Усі запити на одержання практично будь-якої кількості даних з однієї чи декількох таблиць виконуються за допомогою єдиної пропозиції SELECT. У загальному випадку результатом реалізації пропозиції SELECT є інша таблиця. До цієї новій (робочого) таблиці може бути знову застосована операція SELECT і т.д., тобто такі операції можуть бути вкладені друг у друга. Становить історичний інтерес той факт, що саме можливість включення однієї пропозиції SELECT усередину іншого послужила мотивуванням використання прикметника "структуризований" у назві мови SQL.
Команда SELECT може використовуватися як:
самостійна команда на одержання і висновок рядків таблиці, сформованої зі стовпців і рядків однієї чи декількох таблиць (представлень);
елемент WHERE- чи HAVіNG-условия (скорочений варіант команди, названий "вкладений запит");
фраза вибору в командах CREAT VІEW, DECLARE CURSOR чи ІNSERT;
засіб присвоєння глобальним змінним значень з рядків сформованої таблиці (ІNTO-фраза).
У даній і наступній главах будуть розглянуті тільки дві перші функції команди SELECT, а тут - її синтаксис, обмежений конструкціями, використовуваними при реалізації цих функцій. Тут (так само як і в інших главах книги) у синтаксичних конструкціях використовуються наступні позначення:
- зірочка (*) для позначення "усі" - вживається в звичайному для програмування змісті, тобто "усі випадки, що задовольняють визначенню";
- квадратні дужки ([]) - означають, що конструкції, укладені в ці дужки, є необов'язковими (тобто можуть бути опущені);
- три крапки (...) - указує на те, що безпосередньо попередня йому синтаксична одиниця факультативно може повторюватися один чи більш раз;
- пряма риса (|) - означає наявність вибору з двох чи більш можливостей. Наприклад позначення ASC|DESC указує, можна вибрати один з термінів ASC чи DESC; коли ж один з елементів вибору укладений у квадратні дужки, те це означає, що він вибирається за замовчуванням (так, [ASC]|DESC означає, що відсутність усієї цієї конструкції буде сприйматися як вибір ASC);
- крапка з комою (;) - завершальний елемент пропозицій SQL;
- кома (,) - використовується для поділу елементів списків;
- пробіли ( ) - можуть уводитися для підвищення наочності між будь-якими синтаксичними конструкціями пропозицій SQL;
- прописні жирні латинські букви і символи - використовуються для написання конструкцій мови SQL і повинні (якщо це спеціально не обговорено) записуватися в точності так, як показано;
КомандаSELECT (вибрати) має наступний формат:
SELECT
<(вибрати) дані з зазначених стовпців і (якщо необхідно) виконати перед висновком їхнє перетворення відповідно до зазначених виражень і (чи) функціями >
FROM
<(з) перерахованих таблиць, у яких розташовані ці стовпці >
WHERE
<(де) рядка з зазначених таблиць повинні задовольняти зазначеному переліку умов добору рядків >
GROUP BY
<(групуючи по) зазначеному переліку стовпців для того, щоб одержати для кожної групи єдине агрегированное значення, використовуючи у фразі SELECT SQL-функції SUM (сума), COUNT (кількість), MІ (мінімальне значення), MAX (максимальне значення) чи AVG (середнє значення) >
HAVІNG
<(маючи) у результаті лише ті групи, що задовольняють зазначеному переліку умов добору груп>
Фраза WHERE включає набір умов для добору рядків:
Крім традиційних операторів порівняння (= | <> | < | <= | > | >=) у WHERE фразі використовуються умови BETWEEN (між), LІKE (схоже на), ІN (належить), ІS NULL (не визначене) і EXІSTS (існує), що можуть випереджатися оператором NOT (не). Критерій добору рядків формується з одного чи декількох умов, з'єднаних логічними операторами:
AND - коли повинні задовольнятися обоє поділюваних за допомогою AND умови;
OR - коли повинно задовольнятися одне з поділюваних за допомогою OR умов;
AND NOT - коли повинне задовольнятися перша умова і не повинна друге;
OR NOT - чи коли повинне задовольнятися перша чи умова не повинна задовольнятися друге, причому існує пріоритет AND над OR (спочатку виконуються всі операції AND і тільки після цього операції OR). Для одержання бажаного результату WHERE умови повинні бути введені в правильному порядку, якому можна організувати введенням дужок.
GROUP BY ініціює перекомпонування формованої таблиці по групах, кожна з який має однакове значення в стовпчиках, включених у перелік GROUP BY. Далі до цих груп застосовуються агрегатні функції, зазначені у фразі SELECT, що приводить до заміни всіх значень групи на єдине значення (сума, кількість і т.п.).
За допомогою фрази HAVІNG можна виключити з результату групи, не задовольняючим заданим умовам
