Подзапити SELECT
Підзапити можуть використовуватися для наступних цілей: Використання імен кореляції (аліасів, псевдонімів) Іноді доводиться виконувати запити, у яких таблиця з'єднується сама із собою, або одна таблиця з'єднується двічі з іншою таблицею. При цьому икористовуються імена кореляції (аліаси, псевдоніми), які дозволяють розрізняти копії та таблиці-оригінали. Імена кореляції вводяться у розділі FROM і йдуть через пробіл після імені таблиці. Імена кореляції повинні використовуватися як префікс перед ім'ям стовпця й відокремлюються від імені стовпця крапкою. Якщо у запиті вказуються ті самі поля з різних екземплярів однієї таблиці, вони повинні бути перейменовані для усунення неоднозначності в іменуваннях колонок результуючої таблиці. Визначення імені кореляції діє тільки під час виконання запиту. Приклад. Відібрати всі пари постачальників таким чином, щоб перший постачальник у парі мав статус, більший од статусу другого постачальника: SELECT P1.PNAME AS PNAME1, P1.PSTATUS AS PSTATUS1, P2.PNAME AS PNAME2, P2.PSTATUS AS PSTATUS2 FROM P P1, P P2 WHERE P1.PSTATUS1 > P2.PSTATUS2; В результаті одержимо наступну таблицю: PNAME1 PSTATUS1 PNAME2 PSTATUS2 Іванов 4 Петров 1 Іванов 4 Сидоров 2 Сидоров 2 Петров 1
Синтаксис з'єднаної таблиці має такий вигляд: З'єднана таблиця::= Перехресне з'єднання | Природне з'єднання | З'єднання за допомогою предиката | З'єднання за допомогою імен стовпців | З'єднання об'єднання Тип з'єднання::= INNER | LEFT [ OUTER ] | RIGTH [ OUTER ] | FULL [ OUTER ] Перехресне з'єднання::= Таблиця А CROSS JOIN Таблиця В Природне з'єднання::= Таблиця А [ NATURAL ] [ Тип з'єднання ] JOIN Таблиця В З'єднання за допомогою предиката::= Таблиця А [ Тип з'єднання ] JOIN Таблиця В ON Предикат З'єднання за допомогою імен стовпців::= Таблиця А [ Тип з'єднання ] JOIN Таблиця В USING (Ім'я стовпця.,..) З'єднання об'єднання::= Таблиця А UNION JOIN Таблиця В CROSS JOIN - перехресне з'єднання повертає просто декартовий добуток таблиць. Таке з'єднання в розділі FROM може бути замінено списком таблиць через кому. NATURAL JOIN - природне з'єднання відбувається по всіх стовпцях таблиць А і В, що мають однакові імена. У результуючу таблицю однакові стовпці вставляються тільки один раз. JOIN... ON - з'єднання за допомогою предиката з'єднує рядки таблиць А і В за допомогою зазначеного предиката. JOIN... USING - з'єднання за допомогою імен стовпців з'єднує відношення подібно природному з'єднанню по тим загальним стовпцям таблиць А і Б, які зазначені в списку USING. INNER - тип з'єднання "внутрішнє". Внутрішній тип з'єднання використовується за замовчуванням, коли тип явно не заданий. У таблицях А і В з'єднуються ті рядки, для яких знайден збіг. LEFT (OUTER) - тип з'єднання "ліве (зовнішнє)". Ліве з'єднання таблиць А і В містить у собі всі рядки з лівої таблиці А і ті рядки із правої таблиці В, для яких виявлений збіг. Для рядків з таблиці А, для яких не знайдено відповідності у таблиці В, у стовпці, що витягають із таблиці В, заносяться значення NULL. RIGHT (OUTER) - тип з'єднання "праве (зовнішнє)". Праве з'єднання таблиць А і В містить у собі всі рядки із правої таблиці В і ті рядки з лівої таблиці А, для яких виявлений збіг. Для рядків з таблиці В, для яких не знайдено відповідності в таблиці А, у стовпці, що витягають із таблиці А, заносяться значення NULL. FULL (OUTER) - тип з'єднання "повне (зовнішнє)". Це комбінація лівого й правого з'єднань. У повне з'єднання включаються всі рядки з обох таблиць. Оператор декартового добутку Реляційна алгебра: A Times B Оператор SQL: SELECT A.Поле1, A.Поле2,..., B.Поле1, B.Поле2,...FROM A, B; або SELECT A.Поле1, A.Поле2,..., B.Поле1, B.Поле2,...FROM A CROSS JOIN B;
|