รายงานต้องแสดงสินค้าทุกชิ้นพร้อมจำนวนคำสั่งซื้อ แม้สินค้าที่ยังไม่เคยถูกสั่งซื้อก็ต้องแสดงเป็น 0 รูปแบบใดรักษาสินค้าครบและนับได้ถูกต้อง

products p INNER JOIN orders o ON o.product_id = p.id แล้วใช้ COUNT(*)
products p LEFT JOIN orders o ON o.product_id = p.id แล้วใช้ COUNT(o.id)
orders o LEFT JOIN products p ON p.id = o.product_id แล้วใช้ COUNT(p.id)
products p CROSS JOIN orders o แล้วใช้ COUNT(o.id)

เฉลยอธิบาย

LEFT JOIN รักษาทุกแถวจาก products และเติมค่า NULL ทาง orders เมื่อไม่พบคู่ การใช้ COUNT(o.id) นับเฉพาะรหัสคำสั่งซื้อที่ไม่เป็น NULL จึงได้ 0 สำหรับสินค้าที่ไม่มีคำสั่งซื้อ ขณะที่ INNER JOIN ตัดสินค้าเหล่านั้นและ COUNT(*) จะนับแถวที่เติมขึ้นมาด้วย

ข้อสอบอื่นในวิชาการใช้ภาษา SQL

ดูข้อสอบวิชานี้ทั้งหมด →