Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Базисн_ засоби ман_пулювання реляц_йними даними.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
85.55 Кб
Скачать

2.6. Спеціальні реляційні операції: операція взяття вибірки, проекції, операції об’єднання та ділення відношень

Вибірка (обмеження, селекція) (SELECT)

ВизначенняВибіркою (обмеженням, селекцією) на відношенні А з умовою с називається відношення з тим же заголовком, що й у відношення  А, і тілом, що складається з кортежів, значення атрибутів яких при підстановці в умову с дають значення ІСТИНА. С являє собою логічний вираз, у який можуть входити атрибути відношення А і (чи) скалярні вирази.

У найпростішому випадку умова с має вигляд ХQY, де Q - один з операторів порівняння, а Х та Yатрибути відношення  А чи скалярні значення. Такі вибірки називаються Q-вибірки(тета-выбірки) чи Q-обмеження чи Q-селекції.

            Синтаксис операції вибірки має вигляд: SELECT  A WHERE c або  SELECT  A WHERE ХQY.

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

Ефект застосування оператора SELECT наведений нижче.

Приклад. Нехай задано відношення А з інформацією про співробітників.

Табельний номер

Прізвище

Зарплата

1

Іванов

1000

2

Петров

2000

3

Сидорук

3000

Таблиця 9 Відношення A

Результат вибірки SELECT ALL буде мати вигляд:

Табельний номер

Прізвище

Зарплата

1

Іванов

1000

2

Петров

2000

3

Сидоров

3000

Результат вибірки SELECT  A WHERE Зарплата < 3000 буде мати вигляд:

Табельний номер

Прізвище

Зарплата

1

Іванов

1000

2

Петров

2000

Таблиця 10 Відношення A WHERE Зарплата<3000

Зміст операції вибірки очевидний – вибрати кортежі відношення, що задовольняють деякій умові. Таким чином, операція вибірки дає «горизонтальний зріз» відношення по деякій умові.

Проекція (PROJECT)

Визначення.  Проекцією відношення А по атрибутах XY, …, Z, де кожний з атрибутів належить відношенню А, називається відношення з заголовком  (XY, …, Z) і тілом, що містить множину кортежів вигляду (xy,…,z),таких, для яких у відношенні A знайдуться кортежі зі значенням атрибута X рівним  x, значенням атрибута Y рівним y, ……, значенняматрибута Z рівним z.

Синтаксис операції проекції: A[XY, …, Z]…

Оператор PROJECT виводить всі значення вибраних атрибутів. Іншими словами, він виводить вертикальну підмножину таблиці. Операція проекції дає «вертикальний зріз» відношення, у якому вилучені усі виниклі при такому зрізі дублікати кортежів.

Ефект застосування оператора PROJECT наведений нижче.

Приклад. Нехай задано відношення А з інформацією про постачальників, що містить найменування і місце розташування (місто постачальника):

Номер постачальника

Найменування постачальника

Місто постачальника

1

Іванов

Київ

2

Петров

Москва

3

Сидорук

Москва

4

Сидорук

Львів

Таблиця 11 Відношення A (Постачальники)

Проекція A[Місто постачальника] буде мати вигляд:

Місто постачальника

Київ

Москва

Львів

Таблиця 12 Відношення A[Місто постачальника]

З’єднання (JOIN)

Операція з’єднання відношень, поряд з операціями вибірки і проекції, є однією з найважливіших реляційних операцій.

Звичайно розглядається кілька різновидів операції з’єднання:

  • загальна операція з’єднання

  • Q-з’єднання

  • еквІ-з'єднання

  • Природне з'єднання

Найбільш важливим з цих окремих випадків є операція природного з’єднання. Усі різновиди з’єднання є окремими випадками загальної операції з’єднання.

Загальна операція з’єднання

ВизначенняЗ’єднанням відношень А та В за умовою с називається відношення (A ТІМЕS B) WHERE c. Умова с являє собою логічний вираз, у який можуть входити атрибути відношень А та В і (чи) скалярні вирази.

Таким чином, операція з’єднання є результатом послідовного застосування операцій декартового добутку і вибірки. Якщо у відношеннях А та В є атрибути з однаковими найменуваннями, то перед виконанням з’єднання такі атрибути необхідно перейменувати.

Тета-з’єднання

Визначення. Нехай відношення А містить атрибут Х, відношення В містить атрибут Y, а Q - один з операторів порівняння (<, >, = тощо). Тоді Q-з’єднанням відношення А заатрибутом Х з відношенням В за атрибутом Y називають відношення (A ТІМЕS B) WHERE ХQY.

Це окремий випадок операції загального з’єднання.

Іноді, для операції Q-з’єднання застосовують наступний, більш короткий синтаксис: A [ХQY].

Екві-з’єднання

Найбільш важливим частковим випадком тета-з’єднання є випадок, коли тета - проста рівність.

Синтаксис екві-з’єднанняA [Х=Y].

Недоліком екві-з’єднання є те, що якщо з’єднання відбувається по атрибутах з однаковими найменуваннями (а так найчастіше і відбувається!), те в результуючому відношенні з’являється два атрибути з однаковими значеннями. Позбутися від цього недоліку можна, узявши проекцію по всіх атрибутах, крім одного з дублюючих. Саме так діє природне з’єднання.

Приклад. Нехай є відношення PD i PD, що зберігають інформацію про постачальників, деталі і поставки відповідно (для зручності введемо короткі найменування атрибутів):

Номер постачальника

PNUM

Найменування постачальника

PNAME

1

Іванов

2

Петров

3

Сидорук

Таблиця 13 Відношення P (Постачальники)

Номер деталі

DNUM

Найменування деталі

DNAME

1

Болт

2

Гайка

3

Гвинт

Таблиця 14 Відношення D (Деталі)

Номер постачальника

PNUM

Номер деталі

DNUM

 Кількість, що поставляється

VOLUME

1

1

100

1

2

200

1

3

300

2

1

150

2

2

250

3

1

1000

Таблиця 15 Відношення PD (Постачання)

Відповідь на питання, які деталі поставляються цими постачальниками, дає екві-з’єднання P[PNUM=PNUM]PD. Насправді, внаслідок того, що у відношеннях є однакові атрибути, потрібно спочатку перейменувати атрибути, а потім виконати екві-з’єднання . Запис стає більш громіздким:

Звичайно, такою складною формою запису не користаються. Але як би то не було, у результаті маємо відношення:

Номер постачальника

PNUM1

Найменування постачальника

PNAME

Номер постачальника

PNUM2

Номер деталі

DNUM

 Кількість, що поставляється

VOLUME

1

Іванов

1

1

100

1

Іванов

1

2

200

1

Іванов

1

3

300

2

Петров

2

1

150

2

Петров

2

2

250

3

Сидорук

3

1

1000

Таблиця 16 Відношення «Які деталі поставляються якими постачальниками»

Недоліком екві-з’єднання є те, що якщо з’єднання відбувається за атрибутами з однаковими іменами, те в результуючому відношенні з’являється два атрибути з однаковими значеннями. У нашому прикладі атрибути PNUM1 і PNUM2 містять дублюючі дані. Позбутися від цього недоліку можна, узявши проекцію по всіх атрибутах, крім одного з дублюючих. Саме так діє природне з’єднання.

Природне з’єднання

Визначення. Нехай дані відношення A(A1A2,…,An,Х1Х2,…,Хр ) та  B(Х1Х2,…,ХрB1B2,…,Bm), що мають однакові атрибути, Х1, Х2…,Хр (тобто атрибути з однаковими іменами і визначені на однакових доменах).

Тоді природним з’єднанням відношень А та В називається відношення з заголовком (A1A2,…,An,Х1Х2,…,Хр B1B2,…,Bm)і тілом, що містить множину кортежів (a1a2,…,an,х1,х2,…,хрb1,b2,…,bm) таких, що (a1a2,…,anх1х2,…,хрА,  (х1х2,…,хрb1b2,…,bmВ.

Природне з’єднання настільки важливе, що для нього використовують спеціальний синтаксис:

A JOIN B.

 

У синтаксисі природного з’єднання не вказуються, по яких атрибутах провадиться з’єднання. Природне з’єднання провадиться по всіх однакових атрибутах.

 

Природне з’єднання еквівалентне наступної послідовності реляційних операцій:

  1. Перейменувати однакові атрибути у відносинах

  2. Виконати декартів добуток відносин

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

  4. Виконати проекцію, видаливши повторювані атрибути

  5. Перейменувати атрибути, повернувши їм первісні імена

 

Можна виконувати послідовне природне з’єднання декількох відношень. Неважко перевірити, що природне з’єднання (як, утім, і з’єднання загального вигляду) має властивістьасоціативності, тобто

(A JOIN B) JOIN З = A JOIN (B JOIN З), тому такі з’єднання можна записувати, опускаючи дужки

= A JOIN B JOIN С.

            Таким чином, застосування оператору JOIN дає змогу компонувати інформацію з двох чи більше таблиць. Оператор JOIN посідає великі можливості у середовищі реляційних БД, дозволяючи використовувати незалежні таблиці, пов’язані спільними атрибутами. Для дослідження ефекту застосування цього оператору скористаємося  таблицями ПОКУПЕЦЬ та ПРОДАВЕЦЬ.

Пок_Код

Пок_Прізвище

Пок_КодМіста

Прод_Код

1132445

Вовк

32145

231

1217782

Адамчик

32145

125

1312243

Раковський

34129

167

1321242

Робак

37134

125

1542311

Сищишин

37134

421

1657399

Яремчук

32145

231

Таблиця 17. Відношення ПОКУПЕЦЬ

Прод_Код

Прод_Телефон

125

6152439887

167

6153426778

231

6152431124

333

9041234445

Таблиця 18. Відношення ПРОДАВЕЦЬ

            Природне з’єднання (natural Join) зв’язує таблиці, вибираючи лише рядки зі спільними значеннями їх спільних атрибутів. Природне з’єднання – це результат тристадійної процедури:

1)      спочатку застосовуємо оператор PRODUCT, при цьому отримуємо результат, представлений у таблиці 19;

Пок_Код

Пок_Прізвище

Пок_КодМіста

Прод_Код

Прод_Код

Прод_Телефон

1132445

Вовк

32145

231

125

6152439887

1132445

Вовк

32145

231

167

6153426778

1132445

Вовк

32145

231

231

6152431124

1132445

Вовк

32145

231

333

9041234445

1217782

Адамчик

32145

125

125

6152439887

1217782

Адамчик

32145

125

167

6153426778

1217782

Адамчик

32145

125

231

6152431124

1217782

Адамчик

32145

125

333

9041234445

1312243

Раковський

34129

167

125

6152439887

1312243

Раковський

34129

167

167

6153426778

1312243

Раковський

34129

167

231

6152431124

1312243

Раковський

34129

167

333

9041234445

1321242

Робак

37134

125

125

6152439887

1321242

Робак

37134

125

167

6153426778

1321242

Робак

37134

125

231

6152431124

1321242

Робак

37134

125

333

9041234445

1542311

Сищишин

37134

421

125

6152439887

1542311

Сищишин

37134

421

167

6153426778

1542311

Сищишин

37134

421

231

6152431124

1542311

Сищишин

37134

421

333

9041234445

1657399

Яремчук

32145

231

125

6152439887

1657399

Яремчук

32145

231

167

6153426778

1657399

Яремчук

32145

231

231

6152431124

1657399

Яремчук

32145

231

333

9041234445

Таблиця 19. Природне з'єднання, крок 1: PRODUCT

2)      до отриманого результату застосовується оператор SELECT, який виводить лише рядки, у яких збігаються значення Прод_Код. Спільні стовпці називаються стовпцями з’єднання (join column). Результат цього кроку наведено у таблиці 20.

Пок_Код

Пок_Прізвище

Пок_КодМіста

Прод_Код

Прод_Код

Прод_Телефон

1132445

Вовк

32145

231

231

6152431124

1217782

Адамчик

32145

125

125

6152439887

1312243

Раковський

34129

167

167

6153426778

1321242

Робак

37134

125

125

6152439887

1657399

Яремчук

32145

231

231

6152431124

Таблиця 20. Природне з'єднання, крок 2: SELECT

3)       до результату другого кроку застосовується оператор PROJECT для виведення однієї-єдиної копії кожного атрибуту. Таким чином, стовпці, які дублюються, усуваються з таблиці. Результат цього кроку наведено у таблиці 21.

Пок_Код

Пок_Прізвище

Пок_КодМіста

Прод_Код

Прод_Телефон

1132445

Вовк

32145

231

6152431124

1217782

Адамчик

32145

125

6152439887

1312243

Раковський

34129

167

6153426778

1321242

Робак

37134

125

6152439887

1657399

Яремчук

32145

231

6152431124

                Таблиця 21. Природне з’єднання, крок 3: PROJECT

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

            При роботі з оператором природного з’єднання слід звернути увагу на наступні його важливі властивості:

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

2)      стовпець, за яким проводилося об’єднання (Прод_Код), у новій таблиці присутній один раз;

3)      якщо одне й те саме значення спільного атрибуту зустрічається у одній з таблиць (чи обидвох) кілька разів, то і результат збіжності буде введено кілька разів. Наприклад, якщо було б два рядки з Прод_Код 167, то двічі б появився у результуючій таблиці і покупець Раковський. Очевидно, що це було б результатом помилкової організації таблиці ПРОДАВЕЦЬ, бо значення Прод_Код мають бути нікальними.

Інша форма оператору JOIN, яку називають еквіз’єднанням (equiJOIN) або з’єднанням за еквівалентністю, зв’язує таблиці за умовою рівності, за якою порівнюються вказані стовпці кожної таблиці. У результуючій таблиці стовпці, що дублюються, не усуваються, а умова (критерій) з’єднання таблиць має бути чітко визначена.

Назва оператору equiJOIN походить від операції еквівалентного з’єднання (==), яка використовується в умовних операторах. Якщо використовуються інші операції порівняння, з’єднання називають тета-з’єднанням (tetaJOIN).

Окремим випадком з’єднання є так зване зовнішнє з’єднання (outer JOIN), яке являє собою розширення природного з’єднання.  У зовнішньому з’єднанні залишаються пари, що збігаються, а всі значення з іншої таблиці, що не збігаються з жодним значенням першої таблиці, у результуючій таблиці приймають порожні значення (null). Наприклад, якщо ми виконуємо операцію зовнішнього з’єднання для таблиць ПОКУПЕЦЬ та ПРОДАВЕЦЬ, то можливі два сценарії:

3)                 лівобічне зовнішнє з’єднання (left outer JOIN) виводить всі рядки першої таблиці ПОКУПЕЦЬ, з тими рядками, що не мають спільних значень атрибутом Прод_Код у таблиці ПРОДАВЕЦЬ, включно. Результат застосування такого оператору з’єднання наведений у таблиці 22.

Пок_Код

Пок_Прізвище

Пок_КодМіста

Прод_Код

Прод_Телефон

1132445

Вовк

32145

231

6152431124

1217782

Адамчик

32145

125

6152439887

1312243

Раковський

34129

167

6153426778

1321242

Робак

37134

125

6152439887

1657399

Яремчук

32145

231

6152431124

1542311

Сищишин

37134

421

 

                Таблиця 22. Лівобічне зовнішнє з’єднання

      2) правобічне зовнішнє з’єднання (right outer JOIN) виводить всі рядки другої таблиці ПРОДАВЕЦЬ, з тими рядками, що не мають спільних значень атрибутом Прод_Код у таблиці ПОКУПЕЦЬ, включно. Результат застосування такого оператору з’єднання наведений у таблиці 23.

Пок_Код

Пок_Прізвище

Пок_КодМіста

Прод_Код

Прод_Телефон

1132445

Вовк

32145

231

6152431124

1217782

Адамчик

32145

125

6152439887

1312243

Раковський

34129

167

6153426778

1321242

Робак

37134

125

6152439887

1657399

Яремчук

32145

231

6152431124

 

 

 

333

9041234445

                Таблиця 23. Правобічне зовнішнє з’єднання

            Назви (лівобічне та правобічне) пов’язані з тим, у якому порядку таблиці перераховуються у SQL-командах.

            Зовнішні з’єднання особливо корисні при визначенні того, які зі значень у зв’язаних таблицях викликають проблеми цілісності на рівні посилань – які з них були створені, коли значення зовнішнього ключа не відповідали значенням первинного ключа у зовнішніх таблицях.

 

Ділення (DIVIDE)

Визначення. Нехай дані відношення A(Х1Х2,…,ХnY1Y2,…,Ym) та  B(Y1Y2,…,Ym),причому атрибути  (Y1Y2,…,Ym) –спільні для двох відношень. Діленням відношення А на Вназивається відношення з заголовком (Х1Х2,…,Хn) і тілом, що містить множину кортежів (х1х2,…,хп) таких, що для всіх кортежів (y1y2,…,ym)ÎВ у відношенні А знайдеться кортеж (х1х2,…,хпy1y2,…,ym)…

Відношення А виступає в ролі діленого, відношення В виступає у ролі дільника. Ділення відносин аналогічно діленню чисел із залишком.

Синтаксис операції ділення:

A DIVIDE BYB.

            Оператор ділення вимагає застосування двох таблиць – одної з двох стовпців, другої – з одного.

Наприклад:

Код

Діяльність

DIVIDE BY

Код

дорівнює

Діяльність

А

5

 

А

 

5

А

9

 

В

 

 

А

4

 

 

 

 

В

5

 

 

 

 

В

3

 

 

 

 

С

6

 

 

 

 

Е

8

 

 

 

 

Як видно, обидві початкові таблиці містять стовпець Код, але не використовують сумісно атрибут Діяльність. При включенні у результуючу таблицю значення у цьому, не використовуваному сумісне, стовпці Діяльність має бути асоційовано в таблиці 2 (дільник) з кожним значенням у таблиці 1. Єдине значення, асоційоване як з А, так і з В – це 5.

Типові запити, які реалізують за допомогою операції ділення, звичайно у своєму формулюванні мають слово «усі» – «які постачальники поставляють усі деталі?».

У прикладі з постачальниками, деталями і поставками відповімо на запитання, «які постачальники поставляють усі деталі?».

Як ділене візьмемо проекцію X=PD[PNUM,DNUM], що містить номера постачальників і номера деталей, що поставляються ними,:

Номер постачальника

PNUM

Номер деталі

DNUM

1

1

1

2

1

3

2

1

2

2

3

1

Таблиця 24 Проекція X=PD[PNUM,DNUM]

Як дільник візьмемо проекцію Y =D[DNUM], що містить список номерів усіх деталей (не обов’язково тих, що поставляються хоч ким-небудь):

Номер деталі

DNUM

1

2

3

Таблиця 25 Проекція Y=D[DNUM]

Ділення X DEVIDE BY Y дає список номерів постачальників, що поставляють усі деталі:

Номер постачальника

PNUM

1

Таблиця 26 Відношення X DEVIDEBY Y

Виявилося, що тільки постачальник з номером 1 поставляє всі деталі.

 

 

Залежні реляційні оператори

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

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

Оператор перетину. Оператор перетину виражається через вирахування в такий спосіб:

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

Решта реляційних операторів (об’єднаннярізницядекартів добутоквибіркапроекція) є примітивними операторами – їх не можна виразити один через одного.

 

Обмеження реляційних операторів

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