MySQL 带有示例的子查询教程

什么是子查询?

子查询是包含在另一个查询中的选择查询。内部选择查询通常用于确定外部选择查询的结果。

让我们看一下子查询语法 –

MySQL 子查询

MyFlix 视频库的一个常见客户投诉是电影数量太少。管理层希望购买电影数量最少的类别的电影。

您可以使用类似以下查询

SELECT category_name FROM categories WHERE category_id =( SELECT MIN(category_id) from movies);

它给出了结果

MySQL 子查询

让我们看看这个查询是如何工作的

MySQL 子查询

以上是 行子查询。在这样的子查询中,内部查询只能给出一个结果。与行子查询一起使用时允许的运算符是 [=、>、=、<=、、!=、]

我们来看另一个例子,

假设您想要获取已租借电影但尚未归还的人员的姓名和电话号码。获取姓名和电话号码后,您可以致电提醒他们。您可以使用类似以下查询

SELECT full_names,contact_number FROM   members  WHERE  membership_number IN (SELECT membership_number FROM movierentals WHERE return_date IS NULL );


MySQL 子查询

让我们看看这个查询是如何工作的

MySQL 子查询

在这种情况下,内部查询返回多个结果。以上是 T 类型可用子查询y.

到目前为止,我们已经看到了两个查询,现在让我们看一个例子 三重查询

假设管理层想要奖励支付最高的会员。

我们可以运行如下查询

Select full_names From members WHERE membership_number = (SELECT membership_number FROM payments WHERE amount_paid = (SELECT MAX(amount_paid) FROM payments));

上述查询给出以下结果 -

MySQL 子查询

子查询与连接!

与 Joins 相比,子查询使用简单,易于阅读。它们并不像 Joins 那么复杂。 加入

因此经常使用 SQL 初学者.

但子查询存在性能问题。使用连接代替子查询有时可以将性能提高 500 倍。

如果可以选择,建议使用 JOIN 而不是子查询。


子查询仅应在无法使用 JOIN 操作实现上述目的时用作后备解决方案

子查询与连接

结语

  • 子查询是嵌入在另一个查询中的查询。嵌入查询称为内部查询,容器查询称为外部查询。
  • 子查询易于使用,具有很大的灵活性,并且可以轻松分解为构成查询的单个逻辑组件,这在以下情况下非常有用: 测试与验证 并调试查询。
  • MySQL 支持三种类型的子查询,标量、行和表子查询。
  • 标量子查询仅返回单行和单列。
  • 行子查询仅返回一行但可以有多个列。
  • 表子查询可以返回多行和多列。
  • 子查询也可以用于 INSERT、UPDATE 和 DELETE 查询。
  • 出于性能问题,当需要从多个表获取数据时,强烈建议使用 JOIN 而不是子查询。只有在有充分理由的情况下才应使用子查询。

总结一下这篇文章: