| INNER JOIN — це оператор SQL, який використовується для поєднання рядків із двох або більше таблиць на основі логічної умови. Він повертає лише ті рядки, де існує співпадіння між таблицями відповідно до умов, визначених у ON. |
| У реляційних базах даних інформація розбивається на логічні частини (таблиці), щоб уникнути дублювання. Наприклад: • Таблиця users — інформація про користувачів • Таблиця orders — інформація про замовлення • Таблиця products — інформація про товари Щоб знайти, який користувач зробив яке замовлення, потрібно з’єднати таблиці. Це і робить INNER JOIN. |
Як працює INNER JOIN?
| INNER JOIN виконує такі кроки: 1. Береться кожен рядок з першої таблиці (лівої). 2. Для кожного рядка шукаються рядки у другій таблиці (правій), що відповідають умові ON. 3. Якщо знайдено хоча б один збіг, рядки об’єднуються у новий рядок у результаті. 4. Якщо відповідності немає — рядок не потрапляє в результат. Отже, INNER JOIN повертає перетин множин двох таблиць. |
| Синтаксис INNER JOIN SELECT t1.*, t2.* FROM table1 AS t1 INNER JOIN table2 AS t2 ON t1.column = t2.column; ON — ключовий блок, який визначає умову з’єднання. |
INNER JOIN на прикладі

В цьому прикладі таблиця users та orders мають звязок через id таблиці users та user_id таблиці orders. Стандартний select з inner join дасть нам результат у вигляді імен користувачів і їхніх замовлень, себто перетин двох таблиць. В нашому прикладі в результат select потраплять користувачі Anna та Olga, оскільки їхні id є в переліку user_id таблиці orders.
Приклад
-- Створення бази даних
CREATE DATABASE inner_join_practice_db;
USE inner_join_practice_db;
-- Створення двох пов’язаних таблиць
-- Створимо таблицю customers (клієнти) та orders (замовлення).
-- Зв’язок: customers.id - orders.customer_id
CREATE TABLE customers (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
email VARCHAR(100)
);
CREATE TABLE orders (
id INT AUTO_INCREMENT PRIMARY KEY,
customer_id INT NOT NULL,
product VARCHAR(50),
amount DECIMAL(10,2),
order_date DATE,
FOREIGN KEY (customer_id) REFERENCES customers(id)
);
-- Наповнення таблиць даними
-- Таблиця customers:
INSERT INTO customers (name, email) VALUES
('Anna Petrenko', 'anna@example.com'),
('Ivan Stepanenko', 'ivan@example.com'),
('Olga Melnyk', 'olga@example.com'),
('Petro Savchenko', 'petro@example.com'),
('Marta Koval', 'marta@example.com'),
('Vitaliy Bondar', 'vitaliy@example.com'),
('Roman Kovalenko', 'roman@example.com'),
('Vira Shevchenko', 'vira@example.com');
-- Таблиця orders:
INSERT INTO orders (customer_id, product, amount, order_date) VALUES
(1, 'Laptop', 1200.00, '2024-01-12'),
(1, 'Mouse', 25.00, '2024-01-15'),
(2, 'Keyboard', 45.00, '2024-02-03'),
(3, 'Monitor', 300.00, '2024-02-10'),
(3, 'USB Cable', 8.50, '2024-02-11'),
(5, 'Tablet', 500.00, '2024-03-01'),
(7, 'Headphones', 90.00, '2024-03-05'),
(7, 'Microphone', 150.00, '2024-03-07');
-- INNER JOIN (клієнт + його замовлення)
SELECT customers.name, orders.product, orders.amount
FROM customers
INNER JOIN orders ON customers.id = orders.customer_id;
-- отримаємо - тільки клієнтів, які мають хоча б одне замовлення.
-- Показати всі замовлення із сортуванням за датою
SELECT c.name, o.product, o.amount, o.order_date
FROM customers c
JOIN orders o ON c.id = o.customer_id
ORDER BY o.order_date DESC;
-- INNER JOIN з умовою фільтрації
-- Показати замовлення дорожчі 100$:
SELECT c.name, o.product, o.amount
FROM customers c
JOIN orders o ON c.id = o.customer_id
WHERE o.amount > 100;
-- INNER JOIN з умовою по датах
-- Отримати замовлення за лютий 2024:
SELECT c.name, o.product, o.amount, o.order_date
FROM customers c
JOIN orders o ON c.id = o.customer_id
WHERE o.order_date BETWEEN '2024-02-01' AND '2024-02-29';
Для додаткової візуалізації є відео.