- •1. Dмl: команди вибірки даних
- •2. Вибірка без використання фрази where
- •2.1. Проста вибірка
- •2.2. Виключення дублікатів
- •3. Вибірка з використанням фрази where
- •3.1. Використання операторів порівняння
- •3.2. Використання between
- •3.3. Використання in
- •3.4. Використання like
- •3.5. Залучення невизначеного значення (null-значення)
- •4. Вибірка з упорядкуванням
- •5. Запити з обчисленням. Обчислення у межах Select
- •6. Агрегування даних. Використання агрегатних функцій у запитах
- •6.1. Агрегатні sql-функції
- •6.2. Функції без використання фрази group by
- •6.3. Використання агрегатних функцій з угрупованнями. Фраза group by
- •6.4. Використання фрази having
- •7. Dмl: Запити з використанням кількох таблиць
- •7.1. Засоби одночасної роботи з множиною таблиць
- •7.2. Запити, що використовують з'єднання
Мова реляційних БД SQL: засоби маніпулювання даними. Тривіальні запити
1. Dмl: команди вибірки даних
Усі запити на одержання практично будь-якої кількості даних з однієї чи кількох таблиць виконуються за допомогою єдиного речення SELECT. У загальному випадку результатом реалізації речення SELECT є інша таблиця. До цієї нової (робочої) таблиці може бути знову застосована операція SELECT і т.д., тобто такі операції можуть бути вкладені друг у друга. Оператор SELECT визначений у SQL для будь-якого добування записів з таблиць. За допомогою цієї команди здійснюється не тільки операція реляційної алгебри "вибірка" (горизонтальна підмножина), але і попереднє з'єднання (join) двох і більш таблиць. Це найбільш складний і могутній засіб SQL. Становить історичний інтерес той факт, що саме можливість включення одного речення SELECT усередину іншого послужила мотивуванням використання прикметника "структурований" у назві мови SQL.
Речення SELECT може використовуватися як:
самостійна команда на одержання і виведення рядків таблиці, сформованої зі стовпців і рядків однієї чи кількох таблиць (представлень);
елемент WHERE- чи HAVING-умови (скорочений варіант речення, називана "вкладений запит");
фраза вибору в командах СRЕАTЕ VIEW, DECLARE CURSOR чи INSERT;
засіб присвоєння глобальним перемінним значень з рядків сформованої таблиці (INTO-фраза).
При описі синтаксичних конструкцій речення SELECT використовуються наступні позначення:
зірочка (*) для позначення "усі" - вживається в звичайному для програмування змісті, тобто "усі випадки, що задовольняють визначенню";
квадратні дужки ([]) - означають, що конструкції, укладені в ці дужки, є необов'язковими (тобто можуть бути опущені);
фігурні дужки ({}) - означають, що конструкції, укладені в ці дужки, повинні розглядатися як цілі синтаксичні одиниці, тобто вони дозволяють уточнити порядок розбору синтаксичних конструкцій, заміняючи звичайні дужки, використовувані в синтаксисі SQL. Елементи цих конструкцій іноді укладені при поясненні синтаксису в кутові дужки (< >);
трикрапка (...) - вказує на те, що безпосередньо попередня йому синтаксична одиниця факультативно може повторюватися один чи більш разів;
пряма риса (|) - означає наявність вибору з двох чи більш можливостей. Наприклад, позначення ASC|DESC указує, можна вибрати один з термінів ASC чи DESC; коли ж один з елементів вибору укладений у квадратні дужки, те це означає, що він вибирається за замовчуванням (так, [ASC]|DESC означає, що відсутність усієї цієї конструкції буде сприйматися як вибір ASC);
точка з комою (;) v завершальний елемент речень SQL;
кома (,) - використовується для поділу елементів списків;
пробіли ( ) - можуть уводитися для підвищення наочності між будь-якими синтаксичними конструкціями речень SQL;
прописні жирні латинські букви і символи - використовуються для написання конструкцій мови SQL і повинні (якщо це спеціально не обговорено) записуватися в точності так, як показано;
малі літери - використовуються для написання конструкцій, що повинні замінятися конкретними значеннями, обраними користувачем, причому для визначеності окремі слова цих конструкцій зв'язуються між собою символом підкреслення (_);
терміни таблиця, стовпець, ... v- заміняють (з метою скорочення тексту синтаксичних конструкцій) терміни ім'я_таблиці, ім'я_стовпця, ..., відповідно;
термін таблиця v використовується для узагальнення таких видів таблиць, як базова_таблиця, представлення чи псевдонім; тут псевдонім служить для тимчасового (на момент виконання запиту) перейменування і (чи) створення робочої копії базової_таблиці (представлення).
Речення SELECT (вибрати) має наступний формат:
підзапит [UNION [ALL] підзапит] ...
[ORDER BY {[таблиця.]стовпець | номер_елементу_SELECT} [[ASC] | DESC]
[,{[таблиця.]стовпець | номер_елементу_SELECT} [[ASC] | DESC]] ...;
і дозволяє об'єднати (UNION) а потім упорядкувати (ORDER BY) результати вибору даних, отриманих за допомогою кількох "підзапитов". При цьому упорядкування можна робити в порядку зростання - ASC (ASCending) чи убування DESC (DESCending), а за замовчуванням приймається ASC.
Повний синтаксис оператора SELECT має вигляд:
SELECT [ALL | DISTINCT] <список_вибору>
FROM <ім'я_таблиці>, ...
[ WHERE <умова> ]
[ GROUP BY <ім'я_стовпця>,... ]
[ HAVING <умова> ]
[ORDER BY <ім'я_стовпця> [ASC | DESC],... ];
Порядок речень в операторі SELECT повинен строго дотримуватися (наприклад, GROUP BY повинне завжди передувати ORDER BY), інакше це призведе до появи помилок.
У цьому реченні підзапит дозволяє вказати умови для вибору потрібних даних і (якщо потрібно) їхньої обробки:
SELECT
(вибрати) дані з зазначених стовпців і (якщо необхідно) виконати перед виведенням їхнє перетворення відповідно до зазначених виразів і (чи) функціями
FROM
(з) перерахованих таблиць, у яких розташовані ці стовпці
WHERE
(де) рядка з зазначених таблиць повинні задовольняти зазначеному переліку умов добору рядків
GROUP BY
(групуючи по) зазначеному переліку стовпців для того, щоб одержати для кожної групи єдине агреговане значення, використовуючи у фразі SELECT SQL-функції SUM (сума), COUNT (кількість), MIN (мінімальне значення), MAX (максимальне значення) чи AVG (середнє значення)
HAVING
(маючи) у результаті лише ті групи, що задовольняють зазначеному переліку умов добору груп
і має формат
SELECT [[ALL] | DISTINCT]{ * | елемент_SELECT [,елемент_SELECT] ...}
FROM {базова_таблиця | представлення} [псевдонім]
[,{базова_таблиця | представлення} [псевдонім]] ...
[WHERE фраза]
[GROUP BY фраза [HAVING фраза]];
Елемент_SELECT - це одна з наступних конструкцій:
[таблиця.]* | значення | SQL_функція | системна_3мінна
У залежності від набору умов і реалізованих у запиті операцій одержують різні вибірки, причому будь-який запит завжди починається словом SELECT.
