Single Row Subquery
ใช้เมื่อ Outer Query ต้องการค่าเดียวที่ไม่ทราบล่วงหน้า ชื่อว่า Single-row แต่หมายถึงคืน 1 แถว (อาจหลายคอลัมน์) แต่สำหรับ Scalar ต้องคืน 1 แถว 1 คอลัมน์เท่านั้น
SELECT first_name, salary, department_id FROM employees WHERE salary = (SELECT MIN(salary) FROM employees);
ใช้ใน HAVING Clause เมื่อเปรียบเทียบกับ Group Function:
SELECT department_id, MIN(salary) FROM employees GROUP BY department_id HAVING MIN(salary) < (SELECT AVG(salary) FROM employees);
Multiple Row Subquery
คืนมากกว่า 1 แถว ใช้ใน WHERE/HAVING ต้องใช้ Set Comparison Operators (IN, ALL, ANY) ตัวอย่างที่ Error เพราะคืนหลายแถว:
SELECT first_name, department_id FROM employees WHERE department_id = (SELECT department_id FROM employees WHERE LOCATION_ID = 100)
แก้ไข: ใช้ IN แทน =