Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ใช้ Comma ระหว่าง SELECT Statements ใน MySQL (Cross Join)

Syntax: Comma Join = Cross Join

-- Syntax 1: Comma (Implicit Cross Join)
SELECT * FROM table1, table2;

-- Syntax 2: Explicit Cross Join
SELECT * FROM table1 CROSS JOIN table2;

ทั้งสองให้ผลลัพธ์เหมือนกัน: Cartesian Product

ตัวอย่าง

mysql> CREATE TABLE DemoTable1882 (Id INT);
mysql> INSERT INTO DemoTable1882 VALUES(10), (20), (30);

mysql> CREATE TABLE DemoTable1883 (Id INT);
mysql> INSERT INTO DemoTable1883 VALUES(100), (101), (102);

Comma Join

mysql> SELECT * FROM DemoTable1882, DemoTable1883;

ผลลัพธ์ (3 × 3 = 9 แถว):

+------+------+
| Id   | Id   |
+------+------+
|   10 |  100 |
|   20 |  100 |
|   30 |  100 |
|   10 |  101 |
|   20 |  101 |
|   30 |  101 |
|   10 |  102 |
|   20 |  102 |
|   30 |  102 |
+------+------+

CROSS JOIN (Explicit)

mysql> SELECT * FROM DemoTable1882 CROSS JOIN DemoTable1883;

ผลลัพธ์เหมือนกัน

ความแตกต่างและข้อแนะนำ

รูปแบบข้อดีข้อเสีย
Comma (table1, table2)สั้น กว้างขวางสับสนกับ INNER JOIN, Deprecated Style
CROSS JOINชัดเจน เป็น Standard SQLยาวกว่าเล็กน้อย

ข้อควรระวัง

  • Cartesian Product ขยายขนาดข้อมูลมาก: 10,000 × 10,000 = 100M Rows
  • ใช้ WHERE เพื่อจำกัด (กลายเป็น Implicit Inner Join)
  • MySQL จัดการ Comma Join เป็น CROSS JOIN ภายใน
  • ANSI SQL แนะนำใช้ Explicit JOIN Syntax

เมื่อไหร่ควรใช้ Cross Join

  • สร้าง Test Data / Number Table
  • Generate Combinations (Date × Product × Store)
  • Matrix Operations
  • การคำนวณสถิติที่ต้องการทุกคู่

ตัวอย่างสร้าง Number Table

SELECT a.N + b.N * 10 + 1 AS num
FROM (SELECT 0 N UNION ALL SELECT 1 UNION ALL SELECT 2 ... SELECT 9) a
CROSS JOIN (SELECT 0 N UNION ALL SELECT 1 ... SELECT 9) b
ORDER BY num;  -- 1-100