前端学数据库之子查询【www.129028.com金沙】

日期:2020-04-29编辑作者:数据库

IN运算符:它可以用来匹配一个固定集合中的某一项。比如说一个集合里面的年份有(2001,2003,2005),那么就可以有:

前面的话

  查询数据库,当查询条件比较复杂时,常常需要用到子查询。子查询(Subquery)是指出现在其他SQL语句内的SELECT子句。本文将详细介绍子查询

 

复制代码 代码如下:SELECT * FROM T_BookWHERE FYearPublished IN(2001,2003,2005)

定义

  子查询(Subquery)是指出现在其他SQL语句内的SELECT子句

SELECT * FROM t1 WHERE col1 = (SELECT col2 FROM t2);

  其中,SELECT * FROM t1,称为外层查询(Outer Query/Outer Statement),SELECT col2 FROM t2,称为子查询(SubQuery)

  在使用子查询时,需要注意的是

  1、子查询指嵌套在查询内部,且必须始终出现在圆括号内

  2、子查询语句中可以包含多个关键字或条件,如DISTINCT、GROUP BY、ORDER BY、LIMIT、函数等

  3、子查询的外层查询可以是:SELECT、INSERT、UPDATE、SET或DO

  4、子查询返回值可以是:标量、一行、一列或者子查询

 

IN运算符,除了支持从固定的集合里面去匹配,当然也支持动态的集合方式去匹配。比如如下方式:

比较运算符

  使用比较符是其中一类子查询

operand comparison_operator subquery

  比较运算符包括=、!=、<>、<=> 、>、<、>=、<=

数据准备

  下载数据文件,建立数据库,数据表,并存入相应记录

www.129028.com金沙 1

www.129028.com金沙 2

  求所有电脑产品的平均价格,并且保留两位小数,AVG、MAX、MIN、COUNT、SUM为聚合函数

  [注意]AVG()是一个用来求平均值的函数

www.129028.com金沙 3

  查询所有价格大于平均价格的商品

SELECT goods_id,goods_name,goods_price FROM tdb_goods WHERE goods_price > 5391.30;

www.129028.com金沙 4

  通过子查询来实现相同的需求

SELECT goods_id,goods_name,goods_price FROM tdb_goods WHERE goods_price > (SELECT ROUND(AVG(goods_price),2) FROM tdb_goods);

www.129028.com金沙 5

  查询类型为“超记本”的商品价格

www.129028.com金沙 6

www.129028.com金沙 7

  查询价格大于或等于"超级本"价格的商品

www.129028.com金沙 8

  系统提示错误,子查询返回的多于一行,因为子查询有3条结果,SELECT无法知道要大于子查询中3条结果中的哪一个。所以,这时就需要用到接下来要介绍的修饰关键字

 

复制代码 代码如下:SELECT * FROM T_ReaderWHERE FYearOfJoin IN(select FYearPublished FROM T_Book)

修饰关键字

  修饰关键字包括ANY、SOME、ALL三个,如果子查询返回多个值时,可以使用它们

operand comparison_operator  ANY(子查询)
operand comparison_operator  SOME(子查询)
operand comparison_operator  ALL(子查询)

www.129028.com金沙 9

情况处理

  1、运算符为>或>=,使用ANY关键字时,表示大于子查询结果中的最小值

SELECT goods_id,goods_name,goods_price FROM tdb_goods WHERE goods_price >  ANY (SELECT goods_price FROM tdb_goods WHERE goods_cate = '超级本');

  由结果可知,返回的都大于4299的值,即最小值

www.129028.com金沙 10

www.129028.com金沙 11

  2、运算符为>或>=,使用ALL关键字时,表示大于子查询结果中的最大值

www.129028.com金沙 12

  3、运算符为<或<=,使用ANY或SOME关键字时,表示小于子查询结果中的最大值;使用ALL关键字时,表示小于子查询结果中的最小值

www.129028.com金沙 13

www.129028.com金沙 14

  4、运算符为=,使用ANY或SOME关键字时,表示等于子查询结果中的任意值;使用ALL关键字时,则返回空

www.129028.com金沙 15

 

ANY和SOME集合运算符:在SQL SERVER里面,ANY和SOME是同义词,二者的用法和功能一样。相比于IN运算符,ANY和SOME需要与其它的比较符、等于(=)、小于()、大于等于、小于等)共同使用,而且比较符需要在它们的前面。复制代码 代码如下:SELECT * FROM T_ReaderWHERE FYearOfJoin =ANY(select FYearPublished FROM T_Book)

[NOT]IN

operand comparison_operator [NOT] IN (subquery)

  第二种子查询是由IN 或 NOT IN引发的子查询,与比较运算符使用的方法基本相同 

其中,= ANY 运算符与 IN 等效,!= ALL或 <> ALL运算符与 NOT IN 等效

www.129028.com金沙 16

[NOT] EXISTS

  第三种子查询是由EXISTS 或 NOT EXISTS引发的子查询。如果子查询返回任何行,EXISTS将返回TRUE;否则返回FALSE

 

注意:和IN 运算符不同,ANY 和SOME运算符不能与固定的集合相匹配,比如下面的SQL 语句是错误的:

存储查询结果

  我们可以把查询结果统一存储到一个新的数据表中,而不需要一条一条地录入

  下面,先创建一个“商品分类”空表

www.129028.com金沙 17

   然后,查询tdb_goods表的所有记录,并且按"类别"分组

www.129028.com金沙 18

  将分组结果写入到“商品分类”数据表中

INSERT [INTO] tbl_name [(col_name),...)] SELECT...;

www.129028.com金沙 19

www.129028.com金沙 20

www.129028.com金沙 21

复制代码 代码如下:SELECT * FROM T_BookWHERE FYearPublishedANY(2001,2003,2005)

本文由www.129028.com金沙发布于数据库,转载请注明出处:前端学数据库之子查询【www.129028.com金沙】

关键词:

SQL Server 2000的安全配置

SQLserver2000数据库应用非常广泛,一旦出现安全问题,造成的损失往往难以估量!应提前预防,防患于未然。这里,我...

详细>>

如何查看某个查询用了多少TempDB空间www.129028.com金沙

DECLARE @read BIGINT, @write BIGINT; SELECT @read = SUM(num_of_bytes_read), @write = SUM(num_of_bytes_written) FROM tempdb.sys.database_files AS DBFJOI...

详细>>

浅析SQL语句中GROUP BY的用法

GROUP BY 是分组查询, 一般 GROUP BY 是和 聚合函数配合使用,你可以想想 你用了GROUP BY 按 ITEM.ITEMNUM这个字段分组,那其他字...

详细>>

微软总是试图使它的软件安装尽可能地简单顺www.129028.com金沙

如果你没有特意记录安装日期,那么有没有办法从SQL Server里查询到呢?想想我们在安装的时候,肯定会有Windows认证登...

详细>>