
2. Запити до декількох відношень.
SQL дозволяє звертатися у одному запиті до декількох відношень, для цього у реченні FROM слід привести найменування відношень, розділяючи їх комою. Після цього можна звертатися до їх атрибутів у реченнях SELECT і WHERE.
Приклад 6.5. Визначити продюсера кінофільму “Star Wars”.
Для цього слід звернутися до відношень Movie, яке містить дані про назви фільмів і коди продюсерів, і MovieExec, яке містить дані про прізвище і код продюсера. Процедуру пошуку відповіді можна виконати двома шляхами:
Звернутися до відношення Movie із запитом для пошуку коду продюсера кінофільму “Star Wars”. Потім звернутися до відношення MovieExec із запитом для пошуку імені продюсера на основі його коду.
Звернутися із запитом до обох відношень Movie і MovieExec разом на основі наступного запиту
SELECT name
FROM Movie, MovieExec
WHERE title = ‘Star Wars’ AND producerC# = cert#;
Запит передбачає перегляд всіх пар кортежів, по одному із відношення Movie і MovieExec. Умови сполучення кортежів задаються реченням WHERE, а саме:
компонент title кортежу відношення Movie повинен містити значення ‘Star Wars’;
значення компонентів producerC# кортежа Movie і cert# кортежу MovieExec повинні бути однаковими.
Якщо пара кортежів, що задовольняє обом умовам знайдена, відповіддю на запит буде значення компонента name кортежу відношення MovieExec.
Розрізнення атрибутів з однаковими іменами. Для цього використовується конструкція, коли до імені атрибуту додається у якості префіксу найменування відношення, до якого відноситься атрибут, і символ крапки. Тоді, наприклад, запит Прикладу 6.5 буде мати вигляд:
SELECT MovieExec.name
FROM Movie, MovieExec
WHERE Movie.title = ‘Star Wars’ AND Movie.producerC# = MovieExec.cert#;
Змінні кортежів і псевдоніми відношень.
Якщо виникає потреба з’єднання декількох кортежів одного відношення, необхідно наділяти унікальним псевдонімом кожний екземпляр імені відношення у реченні FROM, відділяючи його пробілом або службовим словом AS. Ці псевдоніми можуть використовуватися для посилання на однойменні атрибути у реченнях SELECT і WHERE. Тоді запит може мати, наприклад, такий вигляд (рис.6.2):
SELECT Star1.name, Star2.name
FROM MovieStar Star1, MovieStar Star2
WHERE Star1.address= Star2.address
AND Star1.name < Star2.name;
Рис.6.2. Запит передбачає відшукати у відношенні MovieStar інформацію про двох кіноакторів, що мешкають по одній і тій же адресі.
3. Способи виконання запитів до декількох відношень.
Існує три способи виконання запитів на основі SQL – конструкції виду “SELECT-FROM-WHERE”, а саме:
Вкладені цикли. Якщо існує декілька змінних кортежу, можна представити, що з кожною із них зв’язано певний цикл, у тілі якого змінна “пробігає ” по всім кортежам відповідного відношення. Здійснюючи “присвоювання ” змінній чергового кортежу, система перевіряє умову речення WHERE. Якщо умова є вірною, конструюється кортеж із значень виразів, вказаних в реченні SELECT.
Паралельне присвоювання. У довільному порядку (або паралельно) розглядаються усі можливі комбінації операцій присвоєння кортежів відношень відповідним змінним. При кожному присвоєнні перевіряється вірність умові речення WHERE. Якщо умова є вірною, конструюється кортеж із значень виразів, вказаних в реченні SELECT.
Використання апарату реляційної алгебри для опису запиту (наприклад, на рис.6.2.)
pA1,A5 (sA2=A6 AND A1<A5(rM(A1,A2,A3,A4)(MovieStar)´(rN(A5,A6,A7,A8)(MovieStar)))