CROSS JOIN

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 рядків)

Для додаткової візуалізації є відео.

Leave a Reply

Your email address will not be published. Required fields are marked *