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

Корельовані підзапити

У простих випадках підзапит виконується один раз, повертає константу, і результат використовується у „зовнішніх” запитах. У більш складних випадках підзапит має виконуватись багатократно, по одному разу для кожного значення, отриманого підзапитом ззовні. Такі підзапити називають корельовані (correlated subquery).

Приклад 5.9. Нехай треба знайти кінофільми, назви яких повторюються два рази і більше, а роки випуску різні (оскільки атрибути title, year становлять ключ). БД представлена схемою

Повний текст запиту:

Рис.5.18. Запит з корельованим підзапитом

  • Підзапит (рядки 4-6) шукає значення року випуску фільму з заданою назвою, хоча ця назва невідома (підзапит схожий на функцію з параметром).

  • По мірі проглядання кортежів Movie у процесі обробки зовнішнього запиту (рядки 1-3) кожний з них надає значення Old.title для використання у вкладеному запиті з метою обчислення умови WHERE (рядки 3-6).

Умова в рядку 3 виконується, допоки зміст компонента year змінної кортежу old не дорівнює максимальному з років фільмів з одною назвою. Тому при виконанні „основного” запиту буде повернуто копій певної назви, на одиницю менше загальної кількості фільмів з такою назвою: назва, використана двічі, буде повернута один раз; тричі – два рази і т.д.

У підзапиті є атрибути двох видів:

  • Або атрибут належить до одної зі змінних кортежу підзапиту (title),

  • Або атрибут належить до запиту вищого рівня (old.title). Для звернення до нього введений псевдонім відношення (змінна кортежу) old.

Підзапити в реченнях from

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

Приклад 5.10. Повернімося до прикладу 5.2: з якими продюсерами співпрацював актор ‘Harrison Ford’?

Реляційна схема БД наступна:

Нехай є запит, який повертає сертифікаційні номери всіх цих продюсерів. Пов’язавши це відношення з відношенням MovieExec, визначимо імена продюсерів.

Рис.5.19. Запит з підзапитом у реченні FROM

Підзапит повертає відношення Prod з сертифікаційними номерами продюсерів, які співробітничали з актором ‘Harrison Ford’. Умова рівності сертифікаційних номерів (рядок 8) з’єднує відношення MovieExec та Prod. Увесь запит повертає множину значень атрибуту Name відношення MovieExec, яким відповідають значення producerC# відношення Prod.

Вирази з’єднання в sql

SQL дозволяє використовувати різні варіанти оператора з’єднання (join) двох відношень для створення нових відношень:

Український термін

Англійський термін

Відповідник у реляційній алгебрі

Декартів добуток

Cartesian product

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

natural join

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

theta-join

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

outerjoin

Оператори можуть використовуватись як у самостійних запитах, так і в підзапитах.

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