ตาราง employee_salary บันทึกประวัติเงินเดือนของพนักงาน ประกอบด้วยคอลัมน์ emp_id, salary, start_date และ end_date โดยที่ end_date IS NULL หมายถึงระเบียนที่มีผลอยู่ในปัจจุบัน หากต้องการดึงข้อมูลเงินเดือนปัจจุบันของพนักงานทุกคน คำสั่ง SQL ใดมีความตรงกับแบบจำลองข้อมูลมากที่สุด
กSELECT emp_id, salary FROM employee_salary WHERE start_date = (SELECT MAX(start_date) FROM employee_salary)
ขSELECT emp_id, MAX(salary) FROM employee_salary GROUP BY emp_id
คSELECT emp_id, salary FROM employee_salary WHERE end_date NOT IN (SELECT end_date FROM employee_salary)
งSELECT emp_id, salary FROM employee_salary WHERE end_date IS NULL
เฉลยอธิบาย
การใช้ WHERE end_date IS NULL เป็นวิธีที่ตรงกับเงื่อนไขที่กำหนดโดยตรง ตรงกับนิยาม end_date IS NULL โดยตรง ส่วนการใช้ index และความเร็วจริงขึ้นกับชนิด index สัดส่วนข้อมูล และแผนของ DBMS ตัวเลือก B ใช้ MAX(salary) ซึ่งไม่ใช่เงินเดือนปัจจุบัน แต่เป็นเงินเดือนสูงสุด ตัวเลือก C ใช้ NOT IN ซึ่งจะเกิดปัญหาเมื่อมีค่า NULL ในชุดผลลัพธ์ย่อย และไม่ตรงตามเงื่อนไข ตัวเลือก D ใช้ subquery หา MAX(start_date) โดยไม่มีการจับคู่กับ emp_id ทำให้ผลลัพธ์ไม่ถูกต้อง