MySQL 带有示例的子查询教程
什么是子查询?
子查询是包含在另一个查询中的选择查询。内部选择查询通常用于确定外部选择查询的结果。
让我们看一下子查询语法 –
MyFlix 视频库的一个常见客户投诉是电影数量太少。管理层希望购买电影数量最少的类别的电影。
您可以使用类似以下查询
SELECT category_name FROM categories WHERE category_id =( SELECT MIN(category_id) from movies);
它给出了结果
让我们看看这个查询是如何工作的
以上是 行子查询。在这样的子查询中,内部查询只能给出一个结果。与行子查询一起使用时允许的运算符是 [=、>、=、<=、、!=、]
我们来看另一个例子,
假设您想要获取已租借电影但尚未归还的人员的姓名和电话号码。获取姓名和电话号码后,您可以致电提醒他们。您可以使用类似以下查询
SELECT full_names,contact_number FROM members WHERE membership_number IN (SELECT membership_number FROM movierentals WHERE return_date IS NULL );
让我们看看这个查询是如何工作的
在这种情况下,内部查询返回多个结果。以上是 T 类型可用子查询y.
到目前为止,我们已经看到了两个查询,现在让我们看一个例子 三重查询!
假设管理层想要奖励支付最高的会员。
我们可以运行如下查询
Select full_names From members WHERE membership_number = (SELECT membership_number FROM payments WHERE amount_paid = (SELECT MAX(amount_paid) FROM payments));
上述查询给出以下结果 -
子查询与连接!
与 Joins 相比,子查询使用简单,易于阅读。它们并不像 Joins 那么复杂。 加入
因此经常使用 SQL 初学者.
但子查询存在性能问题。使用连接代替子查询有时可以将性能提高 500 倍。
如果可以选择,建议使用 JOIN 而不是子查询。
子查询仅应在无法使用 JOIN 操作实现上述目的时用作后备解决方案
结语
- 子查询是嵌入在另一个查询中的查询。嵌入查询称为内部查询,容器查询称为外部查询。
- 子查询易于使用,具有很大的灵活性,并且可以轻松分解为构成查询的单个逻辑组件,这在以下情况下非常有用: 测试与验证 并调试查询。
- MySQL 支持三种类型的子查询,标量、行和表子查询。
- 标量子查询仅返回单行和单列。
- 行子查询仅返回一行但可以有多个列。
- 表子查询可以返回多行和多列。
- 子查询也可以用于 INSERT、UPDATE 和 DELETE 查询。
- 出于性能问题,当需要从多个表获取数据时,强烈建议使用 JOIN 而不是子查询。只有在有充分理由的情况下才应使用子查询。






