0Pricing
SQL Academy · บทเรียน

การเชื่อมแบบ Cross และผลคูณคาร์ทีเซียน

ใช้ CROSS JOIN อย่างมีเจตนาเพื่อสร้างคู่แบบผสมทุกแบบ และหลีกเลี่ยงผลคูณคาร์ทีเซียนขนาดใหญ่จากคีย์การเชื่อมที่หายไป

การเชื่อมแบบ Cross และผลคูณคาร์ทีเซียน เป็นบทเรียน SQL Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน SQL Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน

CROSS JOIN คืออะไร

CROSS JOIN สร้างชุดผสมของแถวทุกคู่: ได้แถวผลลัพธ์จำนวน m × n แถว และไม่มีส่วนคำสั่ง ON

SELECT * FROM a CROSS JOIN b;

-- Equivalent:
SELECT * FROM a, b;        -- comma join, no condition

ผลคูณคาร์ทีเซียนโดยไม่ได้ตั้งใจ

ข้อผิดพลาดคลาสสิกคือ ลืมเงื่อนไข JOIN ทำให้ทุกแถวของ A ถูกจับคู่กับทุกแถวของ B

SELECT u.email, o.id
FROM users u, orders o;     -- missing WHERE u.id = o.user_id !
-- m users × n orders rows — millions!

กรณีใช้งานที่ตั้งใจ

CROSS JOIN มีประโยชน์เมื่อคุณต้องการคู่ผสมทั้งหมดจริง ๆ:

  • การผสมหมวดหมู่ × ช่วงเวลา สำหรับรายงานที่ต้องแสดงช่วงที่ไม่มีข้อมูล
  • ข้อมูลทดสอบ: ผู้ใช้ทุกคน × ผลิตภัณฑ์ทุกชิ้น
  • ปฏิทิน: ร้านค้าทุกแห่ง × วันที่ทุกวัน

ตัวอย่างปฏิทิน × ร้านค้า

เติมวันที่มียอดเป็นศูนย์ให้ร้านค้าทุกแห่ง:

SELECT d.day, s.id, COALESCE(SUM(o.total), 0) AS revenue
FROM generate_series(CURRENT_DATE - 30, CURRENT_DATE, '1 day') AS d(day)
CROSS JOIN stores s
LEFT JOIN orders o ON o.store_id = s.id
                  AND date_trunc('day', o.created_at) = d.day
GROUP BY d.day, s.id
ORDER BY d.day, s.id;

ผลคูณคาร์ทีเซียนและ EXPLAIN

ผลคูณคาร์ทีเซียนที่ไม่ได้ตั้งใจจะแสดงเป็นจำนวนแถวมหาศาลใน EXPLAIN ANALYZE:

EXPLAIN ANALYZE
SELECT u.email, o.id FROM users u, orders o;
-- Nested Loop  (rows=10000000)  ← warning sign

LATERAL: CROSS JOIN แบบมีเงื่อนไข

LATERAL JOIN คล้ายกับ CROSS JOIN แต่ด้านขวาสามารถอ้างอิงด้านซ้ายได้ ซึ่งจะกล่าวถึงในบทเรียนถัดไป

การเรียงสับเปลี่ยนและการจัดหมู่

สำหรับคู่ (A,B) ที่ไม่ต้องการรายการซ้ำ ให้เพิ่มการเปรียบเทียบใน ON:

SELECT a.id, b.id
FROM products a
JOIN products b ON a.id < b.id;
-- All unique pairs of products, no (A,A), no (B,A) duplicates of (A,B)

CROSS JOIN กับ VALUES

แทรกชุดข้อมูลขนาดเล็กไว้ในคำสั่ง:

SELECT u.email, c.code
FROM users u
CROSS JOIN (VALUES ('EUR'), ('USD'), ('GBP')) AS c(code);

หลีกเลี่ยงรูปแบบการ JOIN ด้วยจุลภาค

การ JOIN โดยนัยด้วยจุลภาค (FROM a, b) สามารถใช้ได้ตามกฎหมาย SQL แต่ซ่อนเจตนาของคำสั่งไว้ ควรใช้ CROSS JOIN อย่างชัดเจนแทน:

-- Don't (looks like a typo):
FROM users, orders

-- Do:
FROM users CROSS JOIN orders

ประสิทธิภาพ

CROSS JOIN เองมีต้นทุนต่ำ เพราะไม่มีเงื่อนไขให้ประเมิน ต้นทุนอยู่ที่จำนวนแถวผลลัพธ์: 10k × 10k = 100M แถว

สรุป

CROSS JOIN = คู่ผสมทั้งหมด

  • ใช้โดยตั้งใจสำหรับสร้างชุดผสม
  • ระวังผลคูณคาร์ทีเซียนโดยไม่ได้ตั้งใจ (ไม่มี WHERE)
  • ใช้ร่วมกับ generate_series สำหรับรายงานที่ต้องเติมช่วงข้อมูลที่หายไป

ตรวจสอบความเข้าใจ

คุณเขียน SELECT * FROM users u, orders o; โดยไม่มี WHERE ผลลัพธ์คืออะไร

คำถามที่พบบ่อย

บทเรียน “การเชื่อมแบบ Cross และผลคูณคาร์ทีเซียน” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การเชื่อมแบบ Cross และผลคูณคาร์ทีเซียน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส SQL Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การเชื่อมแบบ Cross และผลคูณคาร์ทีเซียน”

ใช้ CROSS JOIN อย่างมีเจตนาเพื่อสร้างคู่แบบผสมทุกแบบ และหลีกเลี่ยงผลคูณคาร์ทีเซียนขนาดใหญ่จากคีย์การเชื่อมที่หายไป คุณปฏิบัติ SQL Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน SQL Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน SQL Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “การเชื่อมแบบ Cross และผลคูณคาร์ทีเซียน” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน SQL Academy นี้ได้ไหม

ได้ บทเรียน SQL Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การเชื่อมแบบ Cross และผลคูณคาร์ทีเซียน
  2. การเชื่อมแบบ Lateral (LATERAL JOIN)
  3. การเชื่อมแบบตัดออกและกึ่งเชื่อม (NOT EXISTS)
  4. การปรับประสิทธิภาพการเชื่อมหลายตาราง
← กลับไปที่ SQL Academy