Upload
halyna-melnyk
View
75
Download
5
Embed Size (px)
Citation preview
Мова вибірки даних
1. Багатотабличні запитиБільшість СУБД підтримую три варіанти запитів до множини таблиць з допомогою одного
SQL-запиту на вибірку: з’єднання, підзапити і об'єднання. З'єднання використовується у запитах SELECT для генерації наборів, містять стовпці з
декількох таблиць, які зберігають пов'язані дані. Множина стовпців, вибраних з кожної таблиці, називаються потоками. Процес з'єднання об'єднує вибрані стовпці в єдиний вихідний набір даних. Стандарти SQL підтримують два варіанти синтаксису з'єднання: неявне і явне з'єднання.
Неявне з'єднання відповідає більш старому SQL-стандарту (89). Таблиці, які беруть участь у з'єднанні, задаються списком в реченні FROM запиту SELECT. Умови для зв'язку таблиць задаються серед умов пошуку пропозиції WHERE. Не існує спеціального синтаксису для вказівки, які умови використовуються для пошуку, а які - для з'єднання.
У стандарті SQL92 введений більш універсальний синтаксис явного з'єднання, яке здійснюється за допомогою пропозиції JOIN., яка дає можливість відділити умови з'єднання від умов пошуку.
Підзапитом є запит, взятий у круглі дужки і вкладений в пропозицію SELECT, FROM, WHERE або HAVING основного (зовнішнього) запиту SELECT або інших запитів, що використовують ці пропозиції.
Запити об'єднання, реалізовані за допомогою пропозиції UNION, дають можливість вибрати рядки з різних наборів даних в об'єднаний набір даних, причому підмножини не обов'язково повинні бути пов'язані одна з одною - просто вони повинні відповідати структурно.
1.1. Неявне з’єднання таблиць
де
Алгоритм виконання запитів на неявне з'єднання таблиць складається з наступних етапів:1) обчислюється декартовий добуток таблиць, що входять у з'єднання, тобто для кожного рядка однієї з таблиць беруться всі можливі комбінації рядків з інших таблиць;2) проводиться відбір рядків з отриманої таблиці згідно з умовою пошуку в пропозиції WHERE;3) здійснюється проекція (виведення) по стовпцях, що зазначені у списку елементів, які повертаються.
1.1. Неявне з’єднання таблиць
З'єднання таблиць - це окремий випадок операції декартового добутку (або просто добутку). Декартовий добуток двох таблиць - це таблиця, яка складається з усіх можливих пар рядків обох таблиць. У SQL декартовий добуток виражається зазначенням імен таблиць (множників) у фразі FROM і вказівкою всіх їх стовпців у фразі SELECT. Так, добуток таблиць FACULTY і DEPARTMENT виражається наступним чином:
1.1. Неявне з’єднання таблицьСеред запитів на з'єднання таблиць найбільш поширені запити до таблиць,
які зв'язані за допомогою відношенням батько-нащадок. Щоб використовувати в запиті відношення батько-нащадок, необхідно задати <условие_соединения>, в якому первинний ключ батьківської таблиці порівнюється із зовнішнім ключем таблиці-нащадка (зазвичай імена цих стовпців збігаються в зв'язаних таблицях). Зв'язок повинен завжди явно вказуватися в пропозиції WHERE запиту SELECT.
1.1. Неявне з’єднання таблиць. Псевдоніми
1.2. Явне з’єднання таблиць
де
Таким чином, існують різні типи явного з'єднання таблиць.
Перехресне з'єднання CROSS JOIN
• використовується без конструкції ON <условие_соединения>. • CROSS JOIN еквівалентний декартовому добутку таблиць. Тобто конструкція ... FROM A
CROSS JOIN B повністю еквівалентна конструкції ... FROM A, B
• використовується без конструкції ON <условие_соединения>. • CROSS JOIN еквівалентний декартовому добутку таблиць. Тобто конструкція ... FROM A
CROSS JOIN B повністю еквівалентна конструкції ... FROM A, B
Уточнені з'єднання
• припускають явне завдання умови з'єднання після ON або імен стовпців, по яких проводиться з'єднання, після USING:
• INNER JOIN - «внутрішнє» з'єднання. У таблицях з'єднуються тільки ті рядки, для яких виконується <условие_соединения>;
• OUTER JOIN - «зовнішнє» з'єднання. Дане ключове слово є необов'язковим і має сенс тільки в комбінації з ключовим словом визначення типу зовнішнього з'єднання. Зовнішнє з'єднання буває трьох типів:
• LEFT (OUTER) JOIN - «ліве (зовнішнє)» з'єднання. Це означає, що в результат запиту будуть включені всі рядки лівої таблиці і тільки ті рядки правої таблиці, для яких виконується <условие_соединения>;
• RIGHT (OUTER) JOIN - «праве (зовнішнє)» з'єднання. Це означає, що в результат запиту будуть включені всі рядки правої таблиці і тільки ті рядки лівої таблиці, для яких виконується <условие_соединения>;
• FULL (OUTER) JOIN - «повне (зовнішнє)» з'єднання. Це комбінація «лівого» і «правого» з'єднань таблиць.
• Якщо не зазначений тип з'єднання в реченні JOIN, то він по замовчуванням приймається за INNER.
• припускають явне завдання умови з'єднання після ON або імен стовпців, по яких проводиться з'єднання, після USING:
• INNER JOIN - «внутрішнє» з'єднання. У таблицях з'єднуються тільки ті рядки, для яких виконується <условие_соединения>;
• OUTER JOIN - «зовнішнє» з'єднання. Дане ключове слово є необов'язковим і має сенс тільки в комбінації з ключовим словом визначення типу зовнішнього з'єднання. Зовнішнє з'єднання буває трьох типів:
• LEFT (OUTER) JOIN - «ліве (зовнішнє)» з'єднання. Це означає, що в результат запиту будуть включені всі рядки лівої таблиці і тільки ті рядки правої таблиці, для яких виконується <условие_соединения>;
• RIGHT (OUTER) JOIN - «праве (зовнішнє)» з'єднання. Це означає, що в результат запиту будуть включені всі рядки правої таблиці і тільки ті рядки лівої таблиці, для яких виконується <условие_соединения>;
• FULL (OUTER) JOIN - «повне (зовнішнє)» з'єднання. Це комбінація «лівого» і «правого» з'єднань таблиць.
• Якщо не зазначений тип з'єднання в реченні JOIN, то він по замовчуванням приймається за INNER.
Природне з'єднання
Стандарт SQL визначає це з'єднання як результат з'єднання таблиць по всіх однойменних стовпцях. Якщо однойменних стовпців немає, виконується перехресне з'єднання CROSS JOIN. Не вимагає завдання будь-яких умов після ON. Може застосовуватися при внутрішньому і зовнішньому з'єднанні таблиць.
Стандарт SQL визначає це з'єднання як результат з'єднання таблиць по всіх однойменних стовпцях. Якщо однойменних стовпців немає, виконується перехресне з'єднання CROSS JOIN. Не вимагає завдання будь-яких умов після ON. Може застосовуватися при внутрішньому і зовнішньому з'єднанні таблиць.
1.2. Явне з’єднання таблиць
1.2. Явне з’єднання таблицьабо
1.3. Стандартне з’єднання (об’єднання) таблиць. Декартовий добуток
або
1.3. Стандартне з’єднання (об’єднання) таблиць. Еквіз’єднання
або
1.3. Стандартне з’єднання (об’єднання) таблиць. Природне з’єднання
або
1.3. Стандартне з’єднання (об’єднання) таблиць. Композиція. Тета-з’єднання
Тета-з'єднання призначене для тих випадків, коли необхідно з'єднати дві таблиці на основі деяких умов, відмінних від рівності.
Для створення композиції таблиць потрібно виключити з виведення всі стовпці,за якими проводилось з'єднання таблиць, наприклад таким чином:
1.3. Стандартне з’єднання (об’єднання) таблиць. З’єднання таблиці зі своєю копією
або
2. Функції в SQLЄ два основні класи функцій в SQL СУБД: вбудовані і визначені користувачем. У SQL
визначено множину вбудованих функцій різних категорій. Ці функції діляться на три основні групи:
• Скалярні функції;• Агрегатні функції;• Функції для списку значень.Скалярні функції (їх ще називають однорядковими) обробляють одне значення і
повертають також одне значення. Скалярні функції дозволяється використовувати скрізь, де допускається застосування виразів. Скалярні функції бувають наступних категорій:
• Рядкові функції, які виконують певні дії над рядками і повертають рядкові або числові значення;
• Числові функції, які повертають числові значення на підставі заданих в аргументі значень того ж типу;
• Функції часу і дати, які виконують різні дії над вхідними значеннями часу і дати і повертають рядкове, числове значення або значення у форматі дати і часу;
• Функція перетворення типу.Агрегатні функції використовуються для одержання узагальнюючих значень. Вони, на
відміну від скалярних функцій, оперують значеннями стовпців множини рядків. Функції для списку значень представлені трьома функціями - MAXVALUE, MINVALUE і LIST. Функції, визначені користувачем (UDF), є допоміжними програмами, написаними на мові
програмування (наприклад, C, C + + або Pascal) і скомпільовані як бібліотеки, що спільно використовуються (DLL).
2.1. Скалярні функції. Рядкові функції
2.1. Скалярні функції. Рядкові функції
еквівалентна
2.1. Скалярні функції. Рядкові функції
2.1. Скалярні функції. Рядкові функції
2.1. Скалярні функції. Числові функції
2.1. Скалярні функції. Функції дати та часу
2.1. Скалярні функції. Функції дати та часу
або
або
де
2.1. Скалярні функції. Функція перетворення типу
2.1. Скалярні функції. Функція перетворення типу
2.2. Агрегатні функції
• AVG - середнє значення в стовпці;
• SUM - сума значень в стовпці;
• MAX - найбільше значення в стовпці;
• MIN - найменше значення в стовпці;
• COUNT - кількість значень у стовпці.
2.2. Агрегатні функції
2.3. Функції на списку значень
2.4. Додаткові можливостіПроста форма
З пошуком
2.4. Додаткові можливості
2.4. Додаткові можливості
еквівалентна
для N >= 3 еквівалентна
2.4. Додаткові можливості
або
еквівалентно
2.4. Додаткові можливості
3. Сортування результатів запиту
3. Сортування результатів запиту
4. Групування та створення простих звітів
де
або
4. Групування та створення простих звітів
4. Групування та створення простих звітів
4. Групування та створення простих звітівОбмеження на запити з угрупуванням:1. У пропозиції GROUP BY повинні бути вказані стовпці або вирази, які використовуються в якості елементів, що повертаються пропозиції SELECT (за винятком агрегатних функцій).2. Всі елементи списку стовпців, що повертаються, повинні мати однезначення для кожної групи рядків. Це означає, що елементом, який повертається в пропозиції SELECT може бути:
• Константа;• Агрегатна функція, що повертає
одне значення для всіх рядків, які входять до групи;
• Елемент угруповання, який за визначенням має одне й те ж значення у всіх рядках групи;
• Функція, яка використовується в якості елемента угрупування;
• Вираз, що включає в себе перераховані вище елементи.
4. Групування та створення простих звітів
4. Групування та створення простих звітів
Як і умова пошуку в пропозиції WHERE, умова пошуку в пропозиції HAVING може дати один із трьох наступних результатів:
•Якщо умова пошуку має значення TRUE, то група рядків залишається і для неї генерується один рядок в результа запиту;
•Якщо умова пошуку має значення FALSE, то група рядків виключається і рядок в результа запиту для неї не генерується;
•Якщо умова пошуку має значення NULL, то група рядків виключається і рядок в результаті запиту для неї не генерується.
Правила обробки значень NULL в умовах пошуку для пропозиції HAVING точно такі ж, як і для пропозиції WHERE. Пропозиція HAVING завжди повинна використовуватися в поєднанні з пропозицією GROUP BY, хоча синтаксис запиту SELECT не вимагає цього.
Дякую за увагу !