ตาราง 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 ทำให้ผลลัพธ์ไม่ถูกต้อง

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

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