Операція JOIN — об’єднання таблиць



Для задання об’єднання кількох таблиць у фразі FROM виконують операцію JOIN , яка реалізує операцію з’єднання реляційної алгебри.

 

Синтаксис:

FROM
 <таблиця1> [AS <,псевдонім>]
 [ INNER | LEFT | RIGHT | FULL ] JOIN
 <таблиця2> [AS <,псевдонім>]
 ON
 {<таблиця1>.<поле1>} <операція> {<таблиця2>.<поле2>}

Тут <таблиця1>, <таблиця2> – імена таблиць, записи яких підлягають об’єднанню; <поле1>, <поле2> – імена полів, що об’єднуються; якщо поля не є числовими, то повинні мати однаковий тип даних і містити дані одного виду; поля можуть мати різні імена, <операція> – будь-яка операція порівняння.

Якщо в результат вибірки необхідно включити всі рядки з обох таблиць, що задовольняють умові вибірки, використовується операція INNER JOIN. При цьому результуюча таблиця міститиме всі заголовки обох таблиць.

 

Нехай дано дві таблиці Т1 і Т2:


              T1

F1 F2
A 100
B 101
C 102
D 103

 


              T2

F3 F4
B 200
C 201
F 202
G 203

 

 


Задамо запит:

SELECT *

FROM

    T1 INNER JOIN T2;

Результатом такого запиту буде таблиця :

F1 F2 F3 F4
A 100 B 200
B 101 C 201
C 102 F 202
D 103 G 203

 

Задамо запит:

SELECT *
FROM
 T1 join T2 on T1.F1=T2.F3;

Результатом такого запиту буде таблиця 12, яка містить співпадаючі атрибути у полях F1 таблиці Т1 і  F3 таблиці Т2:

                                                                                Таблиця 12

F1 F2 F3 F4
B 101 B 200
C 102 C 201

 

Операція LEFT JOIN використовується для створення лівого зовнішнього об’єднання, при якому всі записи з першої (лівої) таблиці включаються в динамічний набір, навіть якщо в другій (правій) таблиці немає відповідних до них записів. Якщо у лругій таблиці, з якою виконується з’єднання, не має відповідних рядків, то замість значень її полів додається значення Null.

Задамо запит:

SELECT *
FROM
 T1 left join T2 on T1.F1=T2.F3;

Результат – табл.13

Таблиця 13

F1 F2 F3 F4
A 100 null null
B 101 B 201
C 102 C 202
D 103 null null

 

Операція RIGHT JOIN використовується для створення правого зовнішнього об’єднання, при якому всі записи з другої (правої) таблиці включаються в динамічний набір, навіть якщо в першій (лівій) таблиці немає відповідних до них записів. Якщо у першій таблиці, з якою виконується з’єднання, не має відповідних рядків, то замість значень її полів додається значення Null.

Операції JOIN можуть бути вкладеними.

Синтаксис:

SELECT <поля>
FROM
 <таблиця1> INNER JOIN ( <таблиця2> INNER JOIN
[ ( ] <таблиця3> [INNER JOIN
[ ( ] <таблицяX> [INNER JOIN…)]
[ ON <таблиця3>.<поле3> <операція> <таблицяХ>.<полеХ> ]
[ ON <таблиця2>.<поле2> <операція> <таблиця3>.<поле3>) ]
 ON <таблиця1>.<поле1> <операція>

 

 

Вкладені підзапити

SQL дозволяє використовувати одні запити всередені інших запитів, тобто вкладати один запит у інший. При цьому верхнього рівня оператор SELECT використовує результат внутрішнього оператора SELECT для визначення отримання кінцевого результату всього запиту. Внутрішні оператори можуть бути розміщені у реченнях WHERE і HAVING і в такому разі отримують назву підзапитів, або вкладених запитів. Крім того, внутрішні оператори SELECT можуть використовуватись в операторах INSERT, UPDATE  і DELETE.

Існує три типи підзапитів, а саме:

ñ скалярний підзапит який повертає значення вибране із перетину одного стовпця і одного запису чи результату виразу;

ñ рядковий підзапит який повертає значення декількох стовпців таблиці у вигляді одного рядка;

ñ табличний підзапит який повертає значення одного чи більше стовпців таблиці розміщених у більше ніж одному рядку.

При побудові підзапитів потрібно дотримуватись наступних правил і обмежень:

1. У підзапитах не повинна використовуватись фраза ORDER BY, хоча вона може бути присутня у зовнішньому запиті.

2. Список у визначенні SELECT підзапиту повинні складатись із імен окремих стовпців або складених із них виразів за виключенням того випадку, коли у підзапиті використовується ключове слово EXIST. Дане слово використовується тільки разом із підзапитом і результатом його дії є логічне значення True чи False. Істина буде в тому випадку коли у результуючій таблиці підзапиту присутній хоча би один рядок.

3. За замовчуванням імена стовпців у підзапиті відносяться до таблиці, ім’я якої вказано у фразі FROM.

4. Якщо підзапит є одним із двох операндів, які беруть участь в операції порівняння, то підзапит повинен бути вказаний у правій частині даної операції.

5. У вкладених підзапитах використовується предикат IN ( Select … From … Where … IN).

6. У підзапитах, які повертають один стовпець числових значень, можуть використовуватись ключові слова ALL і  ANY.

Якщо підзапиту буде передувати ключове ключове слово ALL, то умова порівняння вважається виконаною тільки в тому випадку, якщо воно виконується для всіх значень у результуючому стовпці підзапиту.

Якщо запиту, підзапиту передує ключове слово ANY, то умова порівняння буде вважатись виконаною, якщо вона виконується хоча би для одного із значень у результуючому стовпці підзапиту. Якщо в результаті виконання підзапиту буде отримано порожнє значення, то для слова ALL умова порівняння буде вважатись виконаною, а для ANY ні.

Приклад 12.

 Вибрати прізвища студентів, вік яких дорівнює мінімальному.

Запит матиме вигляд:

SELECT
 Surname, Age
FROM
 Students
WHERE
 Age =
 ( SELECT MIN(Age) FROM Students );

У даному запиті спочатку вибереться мінімальний вік студентів, а тоді прізвища всіх студентів із мінімальним віком.

Вкладений підзапит працює наступним чином:

1. вибирається рядок з таблиці, назва якого вказана у зовнішньому запиті;

2. виконується підзапит і отримане значення застосовується для аналізу цього рядка в умові речення WHERE зовнішнього запиту;

3. за результатами оцінки умови приймається рішення про включення або не включення рядка у склад вихідних даних;

4. аналогічно процедура виконується для наступного рядка таблиці зовнішнього запиту.

 

У мові SQL можна використовувати стандартні операції над множинами, а саме: об’єднання, перетин і різниця, які дозволяють комбінувати результати виконання двох і більше запитів в одну результуючу таблицю.

На таблиці, які можуть комбінуватись з допомогою операцій над множинами накладаються певні обмеження, а саме:

– вони повинні мати одну і ту ж структуру, тобто одну і ту ж кількість стовпців;

– у відповідних стовпцях повинні міститись дані однакового типу і довжини.

 

Операція UNION

Дана операція створює запит на об’єднання, що поєднує результати кількох незалежних запитів.

Синтаксис:

<запит1> [ UNION [ALL] <запит2> […] ];

<запит1>, <запит2> – інструкція SELECT.

Всі запити, включені в операцію UNION, повинні відбирати однакове число полів.

Приклад 13. Об’єднати два запити, один з яких вибирає прізвище та ім’я із таблиці Students, а другий  із відповідних двох полів P1і P2 із таблиці NTab:

SELECT
 Surname, Name
FROM
 Students
UNION
SELECT
 P1, P2
FROM
 Ntab;

5.5 Оператор SELECT…INTO

Даний оператор формує запит на створення нової таблиці. У новій таблиці можна визначити ключове поле. При створенні нової таблиці поля у ній успадковують типи даних і розміри тільки базових полів.

Синтаксис:

SELECT
 <назва поля> [, …]
 INTO <нова таблиця>
FROM
 <ім’я таблиці> [, …];

<назва поля> – поле, що копіюється у нову таблицю, <нова таблиця> – ім’я таблиці, що створюється. Запит на створення нової таблиці можна використати наприклад для створення резервних копій.

Приклад 13.

Створити нову таблицю з назвою Informatics із даними про студентів, що вчаться на спеціальності ’Інформатика’.

Запит матиме вигляд:

SELECT
 Num, Surname, Name, Age
INTO
 Informatics
FROM
 Students
WHERE
 Speciality='Інформатика';

Результат – таблиця з назвою Informatics (див. Табл.14), яка буде містити дані тільки про студентів із спеціальності інформатика .

Таблиця 14                  

Num Surname Name Age
1 Крупик Віктор 19
2 Прапій Степан 19
3 Працків Оксана 18
5 Ятрів Олег 17

 

Маніпулювання даними

Оператор INSERT INTO

Даний оператор додає запис або записи у таблицю. Він створює запит, що дописує записи у таблицю.

INSERT INTO <призначення> [(<назва поля>)[, …]]
VALUES (<значення> [, …]);

<призначення> – ім’я таблиці у яку додають записи. <назва поля> – ім’я поля для дозапису даних. <значення> – значення, що дозаписується у вказане поле. Самі значення розділяються між собою комами, а текстові значення беруться у апострофи.

Якщо оператор INSERT INTO присутній у запиті, то він повинен знаходитись перед оператором SELECT.

Якщо вихідна таблиця містить ключ, то необхідно впевнитись, що у ключове поле або поля додаються унікальні не порожні значення, інакше значення не будуть дозаписані.

Приклад. З’явися новий студент. Необхідно занести у БД його дані. Для цього використаємо оператор INSERT INTO.

INSERT INTO Students ( num, Surname, Name, Age, Speciality )
VALUES (6, ' Куцик ', ' Олександр ', 18, ' Математика ');

Даний запит додасть у кінець таблиці новий запис з інформацією про студента, що прибув (табл. 13).

Таблиця 13

Num Surname Name Age Speciality
1 Крупик Віктор 19 Інформатика
2 Прапій Степан 19 Інформатика
3 Працків Оксана 18 Інформатика
4 Селань Віктор 20 Математика
5 Ятрів Олег 17 Інформатика
6 Куцик Олександр 16 Математика

 

Оператор UPDATE

Даний оператор створює запит на оновлення, що змінює значення полів вказаної таблиці на основі умови відбору.

UPDATE <таблиця> SET <поле1> = <нове значення>
[ ,<поле2> = <нове значення> [, …]]

WHERE <умова відбору>;

<таблиця> – ім’я таблиці, у якій змінюють дані. <нове значення> – вираз, що визначає значення, яке заміняє значення у полях <полеХ>, котрі оновлюються. <умова відбору> – вираз, що відбирає записи, які необхідно змінити.

Одночасно можна змінювати значення кількох полів. Оператор UPDATE не приводить до створення результуючого набору записів.

При використанні цього оператора необхідно регулярно створювати резервну копію даних. При ненавмисному оновленні записів їх можна буде відновити.

Приклад. Спеціальність «Інформатика» вирішено було перейменувати на «Прикладна математика», використавши для цього скорочену назву «ПМ». Для того, щоб вручну не змінювати усі записи, доцільно створити запит на оновлення даних.

UPDATE Students SET Speciality = ' ПМ '
WHERE Speciality=' Інформатика ';

Даний запит зробить заміну значень у вже існуючій таблиці (табл. 14).

Таблиця 14

Num Surname Name Age Speciality
1 Крупик Віктор 19 ПМ
2 Прапій Степан 19 ПМ
3 Працків Оксана 18 ПМ
4 Селань Віктор 20 Математика
5 Ятрів Олег 17 ПМ
6 Куцик Олександр 16 Математика

 

Оператор DELETE

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

DELETE

FROM <ім’я таблиці>
WHERE <умова відбору>;

<ім’я таблиці> – ім’я таблиці з якої вилучають записи. <умова відбору> – вираз, який визначає записи, що необхідно вилучити.

Дана операція зручна для видалення значної кількості записів. При знищенні даних, структура таблиць не втрачається та інші властивості.

Запит на вилучення вилучає записи повністю. Щоб вилучити дані у конкретному полі, необхідно створити запит на оновлення, що змінює значення на NULL.

Відновити видалені записи можна тільки за допомогою резервної копії.

Приклад. В армію почався набір. Усі студенти, які старше сімнадцяти років, вирішили стати військовими і назавжди забрати свої документи. Інформація у БД про них стає зайвою, оскільки всі студенти і так занесені до архіву. Було вирішено видалити їх дані із робочих таблиць. Для цього був створений запит на видалення даних.

DELETE *
FROM Students
WHERE Students.Age>17;

Даний запит після виконання видалить усі записи про студентів, які старші за сімнадцять (табл. 15).

Таблиця 15

Num Surname Name Age Speciality
5 Ятрів Олег 17 ПМ
6 Куцик Олександр 16 Математика

 


Дата добавления: 2022-01-22; просмотров: 61; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!