CROSS JOIN** (Cartesian Product) คือการ Join โดยไม่มีเงื่อนไข ON ทุกแถวของตารางแรกจะจับคู่กับทุกแถวของตารางที่สอง
สูตร: จำนวนแถวผลลัพธ์ = Rows(Table A) × Rows(Table B)
ตัวอย่าง: สร้างตารางและข้อมูล
ตาราง ForeignTableDemo (2 แถว)
CREATE TABLE ForeignTableDemo (
Id INT,
Name VARCHAR(100),
FK INT
);
INSERT INTO ForeignTableDemo VALUES (1, 'John', 1), (2, 'Bob', 2);
ตาราง PrimaryTableDemo (3 แถว)
CREATE TABLE PrimaryTableDemo (
FK INT PRIMARY KEY,
Address VARCHAR(100)
);
INSERT INTO PrimaryTableDemo VALUES (1, 'US'), (2, 'UK'), (3, 'Unknown');
CROSS JOIN Query
SELECT
ForeignTableDemo.Id,
ForeignTableDemo.Name,
PrimaryTableDemo.Address
FROM ForeignTableDemo
CROSS JOIN PrimaryTableDemo;
ผลลัพธ์: 2 × 3 = 6 แถว
+------+------+---------+
| Id | Name | Address |
+------+------+---------+
| 1 | John | US |
| 2 | Bob | US |
| 1 | John | UK |
| 2 | Bob | UK |
| 1 | John | Unknown |
| 2 | Bob | Unknown |
+------+------+---------+
เมื่อไหร่ควรใช้ CROSS JOIN
- สร้าง Test Data / Combinations (เช่น ทุก Product × ทุก Store)
- Matrix / Grid Generation
- การคำนวณทางสถิติที่ต้องการทุกคู่
- ไม่ควรใช้ กับตารางใหญ่ (Performance Disaster)
INNER JOIN (มี ON Condition) - เปรียบเทียบ
SELECT
ForeignTableDemo.Id,
ForeignTableDemo.Name,
PrimaryTableDemo.Address
FROM ForeignTableDemo
INNER JOIN PrimaryTableDemo
ON ForeignTableDemo.FK = PrimaryTableDemo.FK;
ผลลัพธ์: 2 แถว (เฉพาะที่ Match)
+------+------+---------+
| Id | Name | Address |
+------+------+---------+
| 1 | John | US |
| 2 | Bob | UK |
+------+------+---------+
Syntax อื่นๆ
CROSS JOIN table2- Explicittable1, table2- Implicit (Comma Join) ⚠️ ไม่แนะนำ (Legacy)INNER JOIN table2 ON condition- Standard Join
⚠️ คำเตือน
CROSS JOIN กับตาราง 10,000 แถว × 10,000 แถว = 100 ล้านแถว → Out of Memory / Timeout เสมอ ต้องมี WHERE/LIMIT หรือใช้เฉพาะตารางเล็ก