MySQL标量子查询返回什么类型的输出?在MySQL查询中使用它有哪些限制?
MySQL标量子查询从一行数据中仅返回一个列值,我们可以将其用于只允许单个列的情况。以下情况会使标量子查询返回一行外的其他值 –
阅读更多:MySQL 教程
情况1 – 当它返回0行时
如果子查询返回0行,则标量子查询表达式的值为NULL。
情况2 – 当它返回多于1行时
如果子查询返回多于1行,则由于标量子查询的属性,MySQL会返回一个错误。
以下示例可以帮助理解,该示例使用以下表中的数据 –
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)
现在,以下查询将返回仅一个行的一个列值 –
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返回空集即0行,因为标量子查询表达式的值为NULL(没有等于10的ID)。
在MySQL查询中使用标量子查询的限制是,我们只能使用允许字面值的语句与标量子查询一起使用。例如,我们知道LIMIT需要字面整数参数,因此无法使用标量子查询来提供这些值。
极客教程