Тема: "Створення  SQL-запитів на вибір інформації з пов’язаних таблиць".

 

Важливим компонентом будь-якої системи реляційних баз даних є зв'язок між таблицями. Це ставлення полегшує з'єднання двох таблиць з урахуванням даних, які вони «загальні». Воно виконується за допомогою JOIN, який є операцією, що зіставляє рядки з однієї таблиці з рядками в іншій. Зіставлення виконується таким чином, щоб стовпці обох таблиць розташовувалися поруч, хоча вони могли бути отримані з окремих таблиць. Проте слід сказати, що менше таблиць об'єднується, тим швидше виконуватиметься запит.

 

Зв'язок між таблицями створюється за допомогою виразів INNER JOIN та  ON

При цьому INNER JOIN вказує між якими таблицями слід встановити зв'язок,

SELECT Облік.№_складу, Довідник.Назва складу, Облік.Дата надходження, Облік.Матеріал, Облік.Кількість, Облік.Ціна, Облік.Кількість*Облік.Ціна AS Загальна вартість

        FROM Облік INNER JOIN Справочник ON Облік.№_складу = Справочник.№_складу;

 

Для подальшого розгляду матеріалу лавайте створимо таблиці: CUSTOMERS та ORDERS наступним чином:

CUSTOMERS (cust_id [PK], cust_fname, cust_lname, phone, address, country);

ORDERS (order_id [PK], order_date, reqd_date, ship_date, cust_id [FK]);

 

ЛІВЕ З'ЄДНАННЯ (LEFT JOIN)

Це З'ЄДНАННЯ витягує всі записи в таблиці, які знаходяться (літерально) в ЛІВИЙ бік від умови з'єднання І ... будь-які стовпці, які відповідають таблиці в ПРАВОМУ СТОРІНКУ умови. Таким чином, клієнт без замовлень буде повернено з таблиці клієнтів, але значення NULL буде повернено для стовпців у таблиці замовлень для рядків, які не відповідають умові JOIN.

 

SELECT

     customers.cust_fname, orders.order_id, orders.order_date

FROM

     customers LEFT JOIN orders

ON customer.cust_id = orders.cust_id;

 

 

ПРАВЕ  З'ЄДНАННЯ (RIGHT JOIN)

Це З'ЄДНЕННЯ робить інверсію ЛІВОГО З'ЄДНАННЯ. Він повертає всі записи з таблиці праворуч із усіма рядками, які можуть відповідати умові з лівої таблиці. Так само значення NULL повертаються для стовпців у лівій таблиці для рядків, які відповідають умові JOIN.

 

SELECT

     customers.cust_fname, orders.order_id, orders.order_date

FROM

     customers RIGHT JOIN orders

ON customer.cust_id = orders.cust_id;

 

Оператори LEFT та RIGHT JOIN іноді пишуться з необов'язковим ключовим словом OUTER:

 

ЛІВОЕ ЗОВНІШНЕ З'ЄДНАННЯ (LEFT OUTER JOIN)

ПРАВО ЗОВНІШНЕ З'ЄДНАННЯ (RIGHT OUTER JOIN)

 

ПЕРЕХРЕСНЕ З'ЄДНАННЯ (CROSS JOIN)

Перехресне з'єднання повертає стільки комбінацій всіх рядків, скільки містяться в таблицях. Тобто кожен рядок лівої таблиці поєднується з кожним рядком у правій таблиці. Отже, якщо таблиці A є всього M рядків, а таблиці B - N рядків, перехресне з'єднання призведе до створення M x N рядків. Є два способи зробити це. CROSS JOIN полягають у наступному:

 

1) 

SELECT

     customers.cust_fname, orders.order_id, orders.order_date

FROM customers CROSS JOIN orders;

 

2) 

SELECT

     customers.cust_fname, orders.order_id, orders.order_date

FROM

     customers, orders;

 

ПОВНЕ З'ЄДНАННЯ (FULL JOIN)

Повне з'єднання дозволяє повністю поєднати дві таблиці, повертаючи повні рядки, де виконується умова JOIN, та значення NULL на стороні.

 

SELECT

     customers.cust_fname, orders.order_id, orders.order_date

FROM

     customers FULL JOIN orders

ON customer.cust_id = orders.cust_id;

 

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

Last modified: Wednesday, 22 March 2023, 4:25 AM