MySQL Scalar Subquery คืนค่า คอลัมน์เดียวจากแถวเดียว (exactly one column value from one row) และใช้ได้ที่อนุญาตให้ใช้คอลัมน์เดียว กรณีที่คืนค่าไม่ใช่ 1 แถว มี 2 กรณี:
กรณีที่ 1 - คืน 0 แถว
ถ้า Subquery คืน 0 แถว ค่าของ Scalar Subquery จะเป็น NULL
กรณีที่ 2 - คืนมากกว่า 1 แถว
ถ้า Subquery คืนมากกว่า 1 แถว MySQL จะคืนข้อผิดพลาด (Error) เนื่องจาก Scalar Subquery ต้องคืนได้มากสุด 1 แถว
ตัวอย่าง
ใช้ข้อมูลจากตาราง Customers และ Reservations:
mysql> Select * from Customers; +-------------+----------+ | Customer_Id | Name | +-------------+----------+ | 1 | Rahul | | 2 | Yashpal | | 3 | Gaurav | | 4 | Virender | +-------------+----------+ 4 rows in set (0.00 sec) mysql> Select * from Reservations; +------+-------------+------------+ | ID | Customer_id | Day | +------+-------------+------------+ | 1 | 1 | 2017-12-30 | | 2 | 2 | 2017-12-28 | | 3 | 2 | 2017-12-29 | | 4 | 1 | 2017-12-25 | | 5 | 3 | 2017-12-26 | +------+-------------+------------+ 5 rows in set (0.00 sec)
คืนค่า 1 แถว 1 คอลัมน์ (ปกติ)
mysql> Select Name from Customers WHERE customer_id = (Select Customer_id FROM reservations where id = 3); +---------+ | Name | +---------+ | Yashpal | +---------+ 1 row in set (0.00 sec)
คืนค่า 0 แถว (เป็น NULL)
mysql> Select Name from Customers WHERE customer_id = (Select Customer_id FROM reservations where id = 10); Empty set (0.00 sec)
MySQL คืน Empty set เพราะ Scalar subquery เป็น NULL (ไม่มี id = 10)
ข้อจำกัด
ไม่สามารถใช้ Scalar Subquery กับคำสั่งที่ต้องการค่าคงที่ (Literal) เท่านั้น เช่น LIMIT ต้องการจำนวนเต็มแบบ Literal จึงไม่สามารถใช้ Scalar Subquery ให้ค่า LIMIT ได้