当前位置:   article > 正文

mysql 子表_MySQL子查询,派生表和通用表达式

派生表和子查询区别

一:子查询

1.介绍

在另一个查询(外部查询)中嵌套另一个查询语句(内部查询),并使用内部查询的结果值作为外部查询条件。

2.子查询在where中

SELECT

customerNumber, checkNumber, amount

FROM

payments

WHERE

amount = (SELECT

MAX(amount)

FROM

payments);

6f7f831c59c484c49f71ac36ec1d9dc9.png

除等式运算符之外,还可以使用大于(>),小于(

3.具有IN和NOT IN的子查询

如果子查询返回多个值,则可以在WHERE子句中使用IN或NOT IN运算符等其他运算符。

b7c1445045f398f3a6c60e4161659e5c.png

可以使用带有NOT IN运算符的子查询来查找没有下过任何订单的客户:

1f2176a05da1f58dbf5c3ce090566499.png

00eb077aac4788a3171d631129df769a.png

4.From子句中的子查询

在FROM子句中使用子查询时,从子查询返回的结果集将用作临时表。 该表称为派生表或物化子查询。

以下子查询将查找订单表中的最大,最小和平均数:

ccbed95f95936e8f824ec81acd5fede1.png

a4393f14816a4d5e47271da8a50e39c4.png

5.相关子查询

在前面的例子中,注意到一个子查询是独立的。 这意味着您可以将子查询作为独立查询执行。

与独立子查询不同,相关子查询是使用外部查询中的数据的子查询。 换句话说,相关的子查询取决于外部查询。 对外部查询中的每一行对相关子查询进行一次评估。

在以下查询中,我们查询选择购买价格高于每个产品线中的产品的平均购买价格的产品。

965da3f779aaae14c255549ae6d6b1f3.png

235f9d6f31c145b742b4bbd84835c915.png

6.MySQL子查询与EXISTS和NOT EXISTS

当子查询与EXISTS或NOT EXISTS运算符一起使用时,子查询返回一个布尔值为TRUE或FALSE的值。

用法:

44c5e3eb52e1996f48ac6c91439d116b.png

在上面的查询中,如果子查询(subquery)有返回任何行,则EXISTS子查询返回TRUE,否则返回FALSE。

通常在相关子查询中使用EXISTS和NOT EXISTS。

下面我们来看看示例数据库(yiibaidb)中的orders和orderDetails表:

·

0201ef4de9138ce6328450d29fc21d2b.png

以下查询选择总额大于60000的销售订单。

75f7c58fe6cf910aee083ea975091c67.png

或者:

d1c9cde7561702b2dca14e006670a3eb.png

二:派生表

1.介绍

派生表是从SELECT语句返回的虚拟表。派生表类似于临时表,但是在SELECT语句中使用派生表比临时表简单得多,因为它不需要创建临时表的步骤。

派生表*和子查询通常可互换使用。当SELECT语句的FROM子句中使用独立子查询时,我们将其称为派生表。

与子查询不同,派生表必须具有别名,以便稍后在查询中引用其名称。 如果派生表没有别名,MySQL将发出错误

2.示例

orders表和orderdetails表中获得2013年销售收入最高的前5名产品。

5ce2207da2455a1fda4024ffec2d705d.png

95f27e46c6d974e3d301cc0fe1341952.png =》

0e7fc16fd6ea759627605303c9a3a443.png

81a32aa21cdc6e31b78c7d626f7daa3a.png

4767dfcd199849cb5574718df03119dc.png

3.更复杂的派生表

假设必须将2013年的客户分为3组:铂金,白金和白银。 此外,需要了解每个组中的客户数量,具体情况如下:

订单总额大于100000的为铂金客户;

订单总额为10000至100000的为黄金客户

订单总额为小于10000的为银牌客户

要构建此查询,首先,您需要使用CASE表达式和GROUP BY子句将每个客户放入相应的分组中。

ff239ffe4fd8f884110f98a7df0d61aa.png=》

7eef1fdb2e2d0765cb616fb3a831f6a7.png

6a1b5874c85e8a3860d54492d8340d48.png

f0a7c651716d3674e71b4acbc2ce6c09.png

三:公共表表达式

1.介绍

公用表表达式是一个命名的临时结果集,仅在单个SQL语句(例如SELECT,INSERT,UPDATE或DELETE)的执行范围内存在。

与派生表类似,CTE不作为对象存储,仅在查询执行期间持续。 与派生表不同,CTE可以是自引用(递归CTE),也可以在同一查询中多次引用。 此外,与派生表相比,CTE提供了更好的可读性和性能。

2.语法

CTE的结构包括名称,可选列列表和定义CTE的查询。

定义CTE后,可以像SELECT,INSERT,UPDATE,DELETE或CREATE VIEW语句中的视图一样使用它。

f365086adaadfe0e14d5caeeb270ee67.png

请注意,查询中的列数必须与column_list中的列数相同。 如果省略column_list,CTE将使用定义CTE的查询的列列表。

3.简单的CTE

f67cdfe49445a49e363512ba175ef2b9.png

在此示例中,CTE的名称为customers_in_usa,定义CTE的查询返回两列:customerName和state。因此,customers_in_usa CTE返回位于美国的所有客户。

在定义美国CTE的客户之后,我们可在SELECT语句中引用它。

4.

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/871380
推荐阅读
相关标签
  

闽ICP备14008679号