Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OBDZ5_Lect13-14_SQL_Basics.docx
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
514 Кб
Скачать
☆

Перехресне з’єднання

Це найпростіша форма з’єднання. Наприклад, для отримання декартового добутку двох відношень

можна написати

і результатом буде відношення з дев’ятьма атрибутами – усі можливі пари кортежів Movie та StarsIn. З тим же результатом можна написати

Movie, StarsIn

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

Перехресне з’єднання в чистому вигляді використовується рідко. Ширше застосовується тета-з’єднання

R JOIN S ON C

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

Приклад 5.11. Нехай треба з’єднати відношення

при умові, що злиттю підлягають лише кортежі, які посилаються на один і той же фільм. Тобто вони повинні мати однакові значення компонентів

  • Title = movieTitle

  • Та year = movieYear.

Речення FROM запиту має вигляд:

Результат – також відношення з дев’ятьма атрибутами з початковими іменами. Кожний кортеж Movie з’єднується з деякими кортежами StarsIn, але лише з тими, де співпадають значення назви і року виробництва. В підсумку 2 стовпця будуть зайвими, оскільки містять однакові значення. Для уникнення цього слід вираз з’єднання помістити у речення FROM, а у речення WHERE – бажані атрибути.

Натуральне з’єднання

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

Відношення з’єднуються по атрибутах з однаковими іменами. Результат матиме вигляд:

R(name, address, gender, birthDate, cert#, netWorth).

Для його отримання треба виконати запит

SELECT * FROM MovieStar NATURAL JOIN MovieExec

На жаль, ні в Jet SQL, ні у Transact SQL нема цього оператора. Реалізація такого запиту існуючими засобами Jet SQL:

SELECT MovieStar.name AS name, MovieStar.address AS address, gender, birthDate, cert#, netWorth

FROM MovieStar INNER JOIN MovieExec

ON MovieStar.name=MovieExec.name AND MovieStar.address=MovieExec.address

Зовнішнє тета-з’єднання

Оператори зовнішнього з’єднання, які ми розглядали як операції реляційної алгебри, призначені для поповнення підсумкового відношення інформацією висячих кортежів (dangling tuples). При з’єднанні деякі кортежі одного з відношень R залишаються „висячими”, якщо умова відповідності в реченні ON не виконується для жодного кортежу з другого відношення S.

Розглянемо операцію зовншнього тета-з’єднання (theta-outerjoin). Нехай знову (приклад 5.5) треба з’єднати відношення

при умові співпадання назви і року випуску фільму.

Запит на повне зовнішнє з’єднання:

SELECT title, year, starName

FROM Movie FULL OUTER JOIN StarsIn ON title=movieTitle AND year=movieYear

У результат будуть уключені:

  • Кортежі Movie для фільмів за участі акторів, згаданих у StarsIn;

  • Висячі кортежі Movie для фільмів, відсутніх у StarsIn;

  • Висячі кортежі StarsIn для акторів, що не знімались у фільмах, перелічених у Movie.

Запит на ліве зовнішнє з’єднання:

SELECT title, year, starName

FROM Movie LEFT OUTER JOIN StarsIn ON title=movieTitle AND year=movieYear

У результат будуть уключені:

  • Кортежі Movie для фільмів за участі акторів, згаданих у StarsIn;

  • Висячі кортежі Movie для фільмів, відсутніх у StarsIn.

  • Висячі кортежі StarsIn для акторів, що не знімались у фільмах, перелічених у Movie.

Запит на праве зовнішнє з’єднання:

SELECT title, year, starName

FROM Movie RIGHT OUTER JOIN StarsIn ON title=movieTitle AND year=movieYear

У результат будуть уключені:

  • Кортежі Movie для фільмів за участі акторів, згаданих у StarsIn;

  • Висячі кортежі Movie для фільмів, відсутніх у StarsIn;

  • Висячі кортежі StarsIn для акторів, що не знімались у фільмах, перелічених у Movie.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]