MySQL标量子查询返回什么类型的输出?在MySQL查询中使用它有哪些限制?


MySQL标量子查询从一行返回精确的一列值,我们可以在允许单列的地方使用它。以下是标量子查询返回非单行值的情况:

情况1 - 返回0行

如果子查询返回0行,则标量子查询表达式的值为NULL。

情况2 - 返回多行

如果子查询返回多行,则由于标量子查询的特性,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(没有id等于10)。

在MySQL查询中使用标量子查询的限制是,我们只能将标量子查询与仅允许字面值的语句一起使用。例如,众所周知,LIMIT需要字面整数参数,因此我们不能使用标量子查询来提供这些值。

更新于:2020年6月22日

341 次浏览

启动你的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.