Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Mova_SQL.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
106 Кб
Скачать
☆

4.1.2. Еквіз’єднання таблиць

Якщо з декартового добутку забрати непотрібні рядки і стовпці, то можна одержати актуальні таблиці, що відповідають кожному з з'єднань.

Такий скоректований запит

SELECT Меню.*, Трапези.*, Вид_блюд.*, Блюда.*

FROM Меню, Трапези, Вид_блюд, Блюда

WHERE Меню.Т = Трапези.Т

AND Меню.У = Вид_блюд.У

AND Меню.БЛ = Блюда.БЛ;

дозволить одержати еквіз’єднання таблиць Меню, Трапези, Вид_блюд і Блюда:

4.1.3. Природне з'єднання таблиць

Легко помітити, що в еквіз’єднання таблиць увійшли дублікати стовпців, по яких проводилося з'єднання (Т, В и БЛ). Для виключення цих дублікатів можна створити природне з'єднання тих же таблиць:

SELECT Т, У, БЛ, Трапеза, Вид, Блюдо, Основа,

Вихід, Праця

FROM Меню, Трапези, Вид_блюд, Блюда

WHERE Меню.Т = Трапези.Т

AND Меню.У = Вид_блюд.У

AND Меню.БЛ = Блюда.БЛ;

4.1.4. Композиція таблиць

Для виключення всіх стовпців, по яких проводиться з'єднання таблиць, треба створити композицію

SELECT Трапеза, Вид, Блюдо, Основа, Вихід, Праця

FROM Меню, Трапези, Вид_блюд, Блюда

WHERE Меню.Т = Трапези.Т

AND Меню.У = Вид_блюд.У

AND Меню.БЛ = Блюда.БЛ;

4.1.5. З'єднання таблиць з додатковою умовою

При формуванні з'єднання створюється робоча таблиця, до якої застосовні всі операції, розглянуті вище: добір потрібних рядків з'єднання (WHERE фраза), упорядкування одержуваного результату (ORDER BY фраза) і агрегатування даних (SQL-функції і GROUP BY фраза). Наприклад, для одержання переліку блюд, пропонованих у меню на сніданок, можна сформувати запит на основі композиції:

SELECT Вид, Блюдо, Основа, Вихід, 'Номер -', БЛ

FROM Меню, Трапези, Вид_блюд, Блюда

WHERE Меню.Т = Трапези.Т

AND Меню.У = Вид_блюд.У

AND Меню.БЛ = Блюда.БЛ

AND Трапеза = 'Сніданок';

4.2. Вкладені підзапити

4.2.1. Види вкладених підзапитів

Вкладений підзапит - це запит, взятий у круглі дужки і вкладений у WHERE (HAVІNG) фразу команди SELECT чи інших команд, що використовують WHERE фразу. Вкладений підзапит може містити у своїй фразі інший вкладений підзапит і т.д. Неважко здогадатися, що вкладений підзапит створено для того, щоб при доборі рядків таблиці, сформованої основним запитом, можна було використовувати дані з інших таблиць (наприклад, при доборі блюд для меню використовувати дані про наявність продуктів у коморі пансіонату).

Існують прості і корельовані вкладені підзапити. Вони включаються в WHERE (HAVІNG) фразу за допомогою умов ІN, EXІSTS чи однієї з умов порівняння ( = | <> | < | <= | > | >= ). Прості вкладені підзапити обробляються системою "знизу нагору". Першим обробляється вкладений підзапит самого нижнього рівня. Множина значень, отримана в результаті його виконання, використовується при реалізації подзапроса більш високого рівня і т.д.

4.2.2. Використання однієї і тієї ж таблиці в зовнішньому і вкладеному під запиті

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

SELECT DІSTІNCT ПС

FROM Постачання

WHERE ПР ІN

( SELECT ПР

FROM Постачання

Відзначимо, що посилання на Постачання у вкладеному підзапиті означає не те ж саме, що посилання на Постачання в зовнішньому запиті. У дійсності, два імена Постачання позначають різні значення. Щоб цей факт став явним, корисно використовувати псевдоніми, наприклад, X і Y:

SELECT DІSTІNCT X.ПС

FROM Постачання X

WHERE X.ПР ІN

( SELECT Y.ПР

FROM Постачання Y

WHERE Y.ПС = 6 );

Тут X і Y - довільні псевдоніми таблиці Постачання, обумовлені у фразі FROM і використовувані як явні уточнители у фразах SELECT і WHERE. Нагадаємо, що псевдоніми визначені лише в межах одного запиту.

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