SQL基础教程(第2版)第5章 复杂查询:5-2 子查询

第5章 复杂查询:5-2 子查询

一言以蔽之,子查询就是一次性视图( SELECT语句)。与视图不同,子查询在SELECT语句执行完毕之后就会消失。
由于子查询需要命名,因此需要根据处理内容来指定恰当的名称。
标量子查询就是只能返回一行一列的子查询。


■ 子查询和视图

前一节我们学习了视图这个非常方便的工具,本节将学习以视图为基础的子查询。 子查询的特点概括起来就是一张一次性视图。

我们先来复习一下视图的概念,视图并不是用来保存数据的,而是通过保存读取数据的 SELECT 语句的方法来为用户提供便利。
反之,子查询就是将用来定义视图的SELECT语句直接用于FROM子句当中。

 

能够实现同样功能的子查询如代码清单 5-9 所示。

增加子查询的层数

■ 子查询的名称

原则上子查询必须设定名称,因此请大家尽量从处理内容的角度出发为子查询设定恰当的名称。 


■ 标量子查询

标量子查询则有一个特殊的限制,那就是必须而且只能返回 1 行 1 列的结果,也就是返回表中某一行的某一列的值。

 

 

 

■ WHERE子句中使用标量子查询

在 4-2 节中,我们练习了通过各种各样的条件从 Product(商品)表中读取数据。大家有没有想过通过下面这样的条件查询数据呢?
“查询出销售单价高于平均销售单价的商品。”

 

这样计算出的平均单价大约就是 2100 日元。不难发现,代码清单 5-11 中的 SELECT 语句的查询结果是单一的值(2097.5)。因此,我们可以直接将这个结果用到之前失败的查询之中。正确的SQL如代码清单5-12所示。



■ 标量子查询的书写位置

标量子查询的书写位置并不仅仅局限于 WHERE 子句中,通常任何可以使用单一值的位置都可以使用。 

几乎所有的地方都可以使用


■ 使用标量子查询时的注意事项

最后我们来介绍一下使用标量子查询时的注意事项,那就是该子查询
绝对不能返回多行结果。也就是说,如果子查询返回了多行结果,那么
它就不再是标量子查询,而仅仅是一个普通的子查询了。

posted @ 2020-01-23 10:08  Marlon康  阅读(243)  评论(0编辑  收藏  举报