join
Підтримувані типи об'єднань у MySQL
INNER JOIN: повертає записи, які мають відповідні значення в обох таблицях
LEFT JOIN: повертає всі записи з лівої таблиці та відповідні записи з правої таблиці
RIGHT JOIN: повертає всі записи з правої таблиці та відповідні записи з лівої таблиці
CROSS JOIN: повертає всі записи з обох таблиць
Inner Join
Ключове слово INNER JOIN вибирає записи, які мають відповідні значення в обох таблицях.
Синтаксис INNER JOIN
SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;
MySQL INNER JOIN Приклад
Наступний оператор SQL вибирає всі замовлення з інформацією про клієнта:
SELECT Orders.OrderID, Customers.CustomerName
FROM Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID;
Примітка. Ключове слово INNER JOIN вибирає всі рядки з обох таблиць, якщо є збіг між стовпцями. Якщо в таблиці
«Замовлення» є записи, які не збігаються в «Клієнти», ці замовлення не відображатимуться!
ОБ'ЄДНАЙТЕся до трьох таблиць
Наступний оператор SQL вибирає всі замовлення з інформацією про клієнта та відправника:
SELECT Orders.OrderID, Customers.CustomerName, Shippers.ShipperName
FROM ((Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID)
INNER JOIN Shippers ON Orders.ShipperID = Shippers.ShipperID);
Left Join
Ключове слово LEFT JOIN повертає всі записи з лівої таблиці (таблиця1) і відповідні записи (якщо є) з правої таблиці
(таблиця2).
Синтаксис LEFT JOIN
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name;
Наступний оператор SQL вибере всіх клієнтів і будь-які замовлення, які вони можуть мати:
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID
ORDER BY Customers.CustomerName;
Примітка. Ключове слово LEFT JOIN повертає всі записи з лівої таблиці (Клієнти), навіть якщо в правій таблиці
(Замовлення) немає збігів.
Right Join
Ключове слово RIGHT JOIN повертає всі записи з правої таблиці (таблиця2) і відповідні записи (якщо є) з лівої таблиці
(таблиця1).
Синтаксис RIGHT JOIN
SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name;
Наступний оператор SQL поверне всіх співробітників і будь-які замовлення, які вони могли розмістити:
SELECT Orders.OrderID, Employees.LastName, Employees.FirstName
FROM Orders
RIGHT JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID
ORDER BY Orders.OrderID;
Примітка. Ключове слово RIGHT JOIN повертає всі записи з правої таблиці (Співробітники), навіть якщо в лівій таблиці
(Замовлення) немає збігів.
Cross Join
Ключове слово CROSS JOIN повертає всі записи з обох таблиць (table1 і table2).
CROSS JOIN Синтаксис
SELECT column_name(s)
FROM table1
CROSS JOIN table2;
Примітка: CROSS JOIN потенційно може повернути дуже великі набори результатів!
Наступний оператор SQL вибирає всіх клієнтів і всі замовлення:
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
CROSS JOIN Orders;
Примітка. Ключове слово CROSS JOIN повертає всі відповідні записи з обох таблиць незалежно від того, відповідає
інша таблиця чи ні. Отже, якщо є рядки в «Клієнти», які не мають збігів у «Замовленнях», або якщо є рядки в
«Замовленнях», які не мають збігів у «Клієнтах», ці рядки також будуть перераховані.
Якщо додати пропозицію WHERE (якщо table1 і table2 мають зв’язок), CROSS JOIN дасть той самий результат, що й
пропозиція INNER JOIN:
Q&A
Дякую всім за заняття!🙌🏻
❗️🎓Тема уроку: 4. JOIN-s
Нагадую, що дедлайн здачі домашніх робіт – до наступного уроку.
Якщо виникають складнощі, пишіть, допоможу із задоволенням 😌
Запис лекції тренер опублікує трохи пізніше 🖥
Не забудьте повторити матеріал та підготуватися до наступного уроку📚
Прості завдання:
Завдання 1: Список клієнтів та їх замовлень. Складіть SQL-запит, який виведе імена всіх клієнтів та ідентифікатори їхніх замовлень. Використовуйте таблиці Customers (з колонками CustomerID, FirstName, LastName) та Orders (з колонками OrderID, CustomerID).
Завдання 2: Товари та їх категорії. Напишіть SQL-запит, який покаже назви всіх товарів та назви категорій, до яких вони належать. Використовуйте таблиці Products (з колонками ProductID, ProductName, CategoryID) та Categories (з колонками CategoryID, CategoryName).
Завдання 3: Інформація про співробітників та їхні відділи. Складіть SQL-запит, щоб отримати імена всіх співробітників та назви відділів, в яких вони працюють. Використовуйте таблиці Employees (з колонками EmployeeID, FirstName, LastName, DepartmentID) та Departments (з колонками DepartmentID, DepartmentName).
Завдання середньої складності:
Завдання 4: Клієнти, які зробили замовлення. Напишіть SQL-запит, який виведе імена лише тих клієнтів, які мають хоча б одне замовлення. Використовуйте таблиці Customers та Orders (з попередніх завдань).
Завдання 5: Замовлення з інформацією про клієнта та товар. Складіть SQL-запит, щоб отримати ідентифікатор замовлення, ім'я клієнта, назву товару та кількість для кожного рядка в таблиці OrderDetails. Використовуйте таблиці Orders (з колонкою OrderID, CustomerID), Customers (з колонками CustomerID, FirstName, LastName), OrderDetails (з колонками OrderDetailID, OrderID, ProductID, Quantity), та Products (з колонками ProductID, ProductName).
Завдання 6: Співробітники та їхні керівники. Припустимо, у таблиці Employees є колонка ManagerID, яка вказує на ідентифікатор керівника співробітника (який також є співробітником). Напишіть SQL-запит, який виведе ім'я співробітника та ім'я його керівника. (Потрібен self-join).
Складніші завдання:
Завдання 7: Клієнти без замовлень. Напишіть SQL-запит, який виведе імена всіх клієнтів, які не мають жодного замовлення в таблиці Orders. Використовуйте таблиці Customers та Orders.
Завдання 8: Середня кількість товарів у замовленні для кожного клієнта. Складіть SQL-запит, щоб отримати ім'я кожного клієнта та середню кількість товарів у його замовленнях. Використовуйте таблиці Customers, Orders та OrderDetails. (Потрібне групування та агрегатні функції).
Завдання 9: Товари, які ніколи не були замовлені. Напишіть SQL-запит, який виведе назви всіх товарів, які не зустрічаються в таблиці OrderDetails. Використовуйте таблиці Products та OrderDetails.
Ці завдання допоможуть вам попрактикуватися з різними типами JOIN (INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN, SELF JOIN) та зрозуміти їхнє застосування у різних сценаріях. Бажаю успіху!