46
Мова вибірки даних

Sql select 2

Embed Size (px)

Citation preview

Page 1: Sql select 2

Мова вибірки даних

Page 2: Sql select 2

1. Багатотабличні запитиБільшість СУБД підтримую три варіанти запитів до множини таблиць з допомогою одного

SQL-запиту на вибірку: з’єднання, підзапити і об'єднання. З'єднання використовується у запитах SELECT для генерації наборів, містять стовпці з

декількох таблиць, які зберігають пов'язані дані. Множина стовпців, вибраних з кожної таблиці, називаються потоками. Процес з'єднання об'єднує вибрані стовпці в єдиний вихідний набір даних. Стандарти SQL підтримують два варіанти синтаксису з'єднання: неявне і явне з'єднання.

Неявне з'єднання відповідає більш старому SQL-стандарту (89). Таблиці, які беруть участь у з'єднанні, задаються списком в реченні FROM запиту SELECT. Умови для зв'язку таблиць задаються серед умов пошуку пропозиції WHERE. Не існує спеціального синтаксису для вказівки, які умови використовуються для пошуку, а які - для з'єднання.

У стандарті SQL92 введений більш універсальний синтаксис явного з'єднання, яке здійснюється за допомогою пропозиції JOIN., яка дає можливість відділити умови з'єднання від умов пошуку.

Підзапитом є запит, взятий у круглі дужки і вкладений в пропозицію SELECT, FROM, WHERE або HAVING основного (зовнішнього) запиту SELECT або інших запитів, що використовують ці пропозиції.

Запити об'єднання, реалізовані за допомогою пропозиції UNION, дають можливість вибрати рядки з різних наборів даних в об'єднаний набір даних, причому підмножини не обов'язково повинні бути пов'язані одна з одною - просто вони повинні відповідати структурно.

Page 3: Sql select 2

1.1. Неявне з’єднання таблиць

де

Алгоритм виконання запитів на неявне з'єднання таблиць складається з наступних етапів:1) обчислюється декартовий добуток таблиць, що входять у з'єднання, тобто для кожного рядка однієї з таблиць беруться всі можливі комбінації рядків з інших таблиць;2) проводиться відбір рядків з отриманої таблиці згідно з умовою пошуку в пропозиції WHERE;3) здійснюється проекція (виведення) по стовпцях, що зазначені у списку елементів, які повертаються.

Page 4: Sql select 2

1.1. Неявне з’єднання таблиць

З'єднання таблиць - це окремий випадок операції декартового добутку (або просто добутку). Декартовий добуток двох таблиць - це таблиця, яка складається з усіх можливих пар рядків обох таблиць. У SQL декартовий добуток виражається зазначенням імен таблиць (множників) у фразі FROM і вказівкою всіх їх стовпців у фразі SELECT. Так, добуток таблиць FACULTY і DEPARTMENT виражається наступним чином:

Page 5: Sql select 2

1.1. Неявне з’єднання таблицьСеред запитів на з'єднання таблиць найбільш поширені запити до таблиць,

які зв'язані за допомогою відношенням батько-нащадок. Щоб використовувати в запиті відношення батько-нащадок, необхідно задати <условие_соединения>, в якому первинний ключ батьківської таблиці порівнюється із зовнішнім ключем таблиці-нащадка (зазвичай імена цих стовпців збігаються в зв'язаних таблицях). Зв'язок повинен завжди явно вказуватися в пропозиції WHERE запиту SELECT.

Page 6: Sql select 2

1.1. Неявне з’єднання таблиць. Псевдоніми

Page 7: Sql select 2

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. Може застосовуватися при внутрішньому і зовнішньому з'єднанні таблиць.

Page 8: Sql select 2

1.2. Явне з’єднання таблиць

Page 9: Sql select 2

1.2. Явне з’єднання таблицьабо

Page 10: Sql select 2
Page 11: Sql select 2
Page 12: Sql select 2
Page 13: Sql select 2
Page 14: Sql select 2
Page 15: Sql select 2

1.3. Стандартне з’єднання (об’єднання) таблиць. Декартовий добуток

або

Page 16: Sql select 2

1.3. Стандартне з’єднання (об’єднання) таблиць. Еквіз’єднання

або

Page 17: Sql select 2

1.3. Стандартне з’єднання (об’єднання) таблиць. Природне з’єднання

або

Page 18: Sql select 2

1.3. Стандартне з’єднання (об’єднання) таблиць. Композиція. Тета-з’єднання

Тета-з'єднання призначене для тих випадків, коли необхідно з'єднати дві таблиці на основі деяких умов, відмінних від рівності.

Для створення композиції таблиць потрібно виключити з виведення всі стовпці,за якими проводилось з'єднання таблиць, наприклад таким чином:

Page 19: Sql select 2

1.3. Стандартне з’єднання (об’єднання) таблиць. З’єднання таблиці зі своєю копією

або

Page 20: Sql select 2

2. Функції в SQLЄ два основні класи функцій в SQL СУБД: вбудовані і визначені користувачем. У SQL

визначено множину вбудованих функцій різних категорій. Ці функції діляться на три основні групи:

• Скалярні функції;• Агрегатні функції;• Функції для списку значень.Скалярні функції (їх ще називають однорядковими) обробляють одне значення і

повертають також одне значення. Скалярні функції дозволяється використовувати скрізь, де допускається застосування виразів. Скалярні функції бувають наступних категорій:

• Рядкові функції, які виконують певні дії над рядками і повертають рядкові або числові значення;

• Числові функції, які повертають числові значення на підставі заданих в аргументі значень того ж типу;

• Функції часу і дати, які виконують різні дії над вхідними значеннями часу і дати і повертають рядкове, числове значення або значення у форматі дати і часу;

• Функція перетворення типу.Агрегатні функції використовуються для одержання узагальнюючих значень. Вони, на

відміну від скалярних функцій, оперують значеннями стовпців множини рядків. Функції для списку значень представлені трьома функціями - MAXVALUE, MINVALUE і LIST. Функції, визначені користувачем (UDF), є допоміжними програмами, написаними на мові

програмування (наприклад, C, C + + або Pascal) і скомпільовані як бібліотеки, що спільно використовуються (DLL).

Page 21: Sql select 2

2.1. Скалярні функції. Рядкові функції

Page 22: Sql select 2

2.1. Скалярні функції. Рядкові функції

еквівалентна

Page 23: Sql select 2

2.1. Скалярні функції. Рядкові функції

Page 24: Sql select 2

2.1. Скалярні функції. Рядкові функції

Page 25: Sql select 2

2.1. Скалярні функції. Числові функції

Page 26: Sql select 2

2.1. Скалярні функції. Функції дати та часу

Page 27: Sql select 2

2.1. Скалярні функції. Функції дати та часу

або

або

де

Page 28: Sql select 2

2.1. Скалярні функції. Функція перетворення типу

Page 29: Sql select 2

2.1. Скалярні функції. Функція перетворення типу

Page 30: Sql select 2

2.2. Агрегатні функції

• AVG - середнє значення в стовпці;

• SUM - сума значень в стовпці;

• MAX - найбільше значення в стовпці;

• MIN - найменше значення в стовпці;

• COUNT - кількість значень у стовпці.

Page 31: Sql select 2

2.2. Агрегатні функції

Page 32: Sql select 2

2.3. Функції на списку значень

Page 33: Sql select 2

2.4. Додаткові можливостіПроста форма

З пошуком

Page 34: Sql select 2

2.4. Додаткові можливості

Page 35: Sql select 2

2.4. Додаткові можливості

еквівалентна

для N >= 3 еквівалентна

Page 36: Sql select 2

2.4. Додаткові можливості

або

еквівалентно

Page 37: Sql select 2

2.4. Додаткові можливості

Page 38: Sql select 2

3. Сортування результатів запиту

Page 39: Sql select 2

3. Сортування результатів запиту

Page 40: Sql select 2

4. Групування та створення простих звітів

де

або

Page 41: Sql select 2

4. Групування та створення простих звітів

Page 42: Sql select 2

4. Групування та створення простих звітів

Page 43: Sql select 2

4. Групування та створення простих звітівОбмеження на запити з угрупуванням:1. У пропозиції GROUP BY повинні бути вказані стовпці або вирази, які використовуються в якості елементів, що повертаються пропозиції SELECT (за винятком агрегатних функцій).2. Всі елементи списку стовпців, що повертаються, повинні мати однезначення для кожної групи рядків. Це означає, що елементом, який повертається в пропозиції SELECT може бути:

• Константа;• Агрегатна функція, що повертає

одне значення для всіх рядків, які входять до групи;

• Елемент угруповання, який за визначенням має одне й те ж значення у всіх рядках групи;

• Функція, яка використовується в якості елемента угрупування;

• Вираз, що включає в себе перераховані вище елементи.

Page 44: Sql select 2

4. Групування та створення простих звітів

Page 45: Sql select 2

4. Групування та створення простих звітів

Як і умова пошуку в пропозиції WHERE, умова пошуку в пропозиції HAVING може дати один із трьох наступних результатів:

•Якщо умова пошуку має значення TRUE, то група рядків залишається і для неї генерується один рядок в результа запиту;

•Якщо умова пошуку має значення FALSE, то група рядків виключається і рядок в результа запиту для неї не генерується;

•Якщо умова пошуку має значення NULL, то група рядків виключається і рядок в результаті запиту для неї не генерується.

Правила обробки значень NULL в умовах пошуку для пропозиції HAVING точно такі ж, як і для пропозиції WHERE. Пропозиція HAVING завжди повинна використовуватися в поєднанні з пропозицією GROUP BY, хоча синтаксис запиту SELECT не вимагає цього.

Page 46: Sql select 2

Дякую за увагу !