| CROSS JOIN — це тип з’єднання, який створює декартовий добуток двох таблиць. Це означає, що: Кожен рядок першої таблиці поєднується з кожним рядком другої таблиці, незалежно від будь-яких умов. |
| Формально: |A| = кількість рядків у таблиці A |B| = кількість рядків у таблиці B A CROSS JOIN B → |A| × |B| |
| Синтаксис SELECT * FROM table1 CROSS JOIN table2; |
| CROSS JOIN Без умови – Декартовий добуток SELECT * FROM products CROSS JOIN colors; CROSS JOIN з умовою – Технічно перетворюється на INNER JOIN SELECT * FROM products CROSS JOIN colors WHERE products.id = colors.product_id; |
Навіщо потрібен CROSS JOIN
| Генерація комбінацій Наприклад, створити всі комбінації: • продукт × колір • колір × розмір • місто × дата • користувач × роль |
| Генерація тестових даних Ви можете побудувати 1000×1000=1,000,000 рядків для тестів |
| Підготовка матриць для аналітики Наприклад: • усі користувачі × усі продукти • усі магазини × усі місяці • усі показники × всі періоди |
| Створення календарів, часових сіток Для створення: • графіків роботи, • всіх днів року, • timetable-комбінацій (день × годинний слот) |
Чому слід бути обережним
| • Може випадково створити мільйони рядків. • Може працювати повільно. • Часто плутають з INNER JOIN. |
| Будьте уважні. Завжди перевіряйте обсяг таблиць перед використанням. |
Приклад
-- Створення бази даних
CREATE DATABASE cross_join_practice;
USE cross_join_practice;
-- Створення таблиць
-- Ми створимо три таблиці: products — товари, colors — кольори, sizes — розміри
CREATE TABLE products (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50)
);
CREATE TABLE colors (
id INT AUTO_INCREMENT PRIMARY KEY,
color VARCHAR(50)
);
CREATE TABLE sizes (
id INT AUTO_INCREMENT PRIMARY KEY,
size VARCHAR(10)
);
-- Наповнення таблиць даними
-- products
INSERT INTO products (name) VALUES
('Phone'),
('Laptop'),
('Tablet');
-- colors
INSERT INTO colors (color) VALUES
('Black'),
('Silver'),
('Blue');
-- sizes
INSERT INTO sizes (size) VALUES
('Small'),
('Medium'),
('Large');
-- товар × колір
SELECT p.name AS product, c.color
FROM products p
CROSS JOIN colors c;
-- Результат (3 × 3 = 9 рядків)
-- товар × колір × розмір
SELECT p.name AS product, c.color, s.size
FROM products p
CROSS JOIN colors c
CROSS JOIN sizes s;
-- Результат (3 × 3 × 3 = 27 рядків)
Для додаткової візуалізації є відео.