欢迎光临
我们一直在努力

大工21秋《数据库原理》在线作业答卷五【标准答案】

可做奥鹏国开全部院校作业论文!答案请添加qq:599792888 或 微信:1095258436

数据库道理领导材料五

主 题:第六章 子查询、凑集查询(课件)

进修时光:2021年10月25日-10月31日

内 容:

我们这周重要进修《数据库道理》这门课程的第6章对于子查询、凑集查询方面的介绍以及顺次相干内容。盼望经由过程下面的内容能使同窗们对SQL查询语句有进一步的懂得。

知识要点

嵌套查询的不雅点

带有IN谓语的子查询

带有比较运算符的子查询

带有ANY或ALL谓词的子查询

带有EXISTS谓词的子查询

凑集查询

重点难点

嵌套查询

凑集查询

子查询(嵌套查询)

在SQL言语中,一个SELECT-FROM-WHERE语句称为一个查询块。将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的前提中的查询称为嵌套查询, 又称子查询。其中处于内层的查询称为子查询,嵌套查询命令在履行时,每个子查询在上一级查询处理之前求解,即由里向外查,子查询的成果用于树破其父查询的查找前提。子查询是SQL 语句的扩大,其语句情势如下:

SELECT [,…]

FROM

WHERE [表达式] (SELECT [,…]

FROM <表或视图名2)

[GROUP BY

HAVING [比较运算符] (SELECT [,…]

FROM )]

例 查询“清华大学出版社”出版的图书已销售的书名、数量

SELECT BookName,Quantity

FROM SalesDetail

WHERE BookNo IN

SELECT BookNo

FROM BookRecord

WHERE Publisher =’清华大学出版社’;

嵌套查询使得可能用一系列简单查询构成复杂的查询,从而明显地加强了SQL的查询才能。以层层嵌套的方法来构造顺序恰是 SQL(Structurred Query Language)中“构造化”的含义地点。

带有IN谓语的子查询

带有IN谓词的子查询是指父查询与子查询之间用IN停止连接,断定父查询的某个属性列值能否在子查询的成果中。因为在嵌套查询中,子查询的成果每每是一个凑集,所以谓词IN是嵌套查询中最常常利用的谓词。

例 查询作者为“谭浩强”的图书的销售数量

查询作者为“谭浩强”的图书的销售数量,可能起首查询全部“谭浩强”所编写的图书,然后在全部已销售的图书中查找作者是“谭浩强”的图书销售数量。可能分步来实现此查询:

先查询全部“谭浩强”所编写的图书

SELECT BookNo

FROM BookRecord

WHERE Author =“谭浩强”;

成果为:

BookNo

9787302778211

9787302778252

在全部已销售的图书中查找作者是“谭浩强”的图书销售数量

SELECT BookName,Quantity

FROM SalesDetail

WHERE BookNo=“9787302778211”

SELECT BookName,Quantity

FROM SalesDetail

WHERE BookNo=“9787302778252”

分步誊写查询毕竟比较费事,上述查询现实上可能用子查询来实现,即将第一步查询嵌入到第二步查询中,用以构造第二步查询的前提。SQL语句如下:

SELECT BookName,Quantity

FROM SalesDetail

WHERE BookNo IN (SELECT BookNo FROM BookRecord WHERE Author =“谭浩强”)

可见,实现同一个查询可能多种方法,固然差其余方法其履行效力可能会有差别,乃至会差别很大,以上嵌套查询还可能用下面的连接查询来实现:

SELECT BookName,Quantity

FROM SalesDetail ,BookRecord

WHERE SalesDetail .BookNo =BookRecord.BookNo AND BookRecord.Author =“谭浩强”

带有比较运算符的子查询

带有比较运算符的子查询是指父查询与子查询之间用比较运算符停止连接。当用户能确切晓得内层查询前去的是单值时,可能用>、 =、<=、!=或等比较运算符。

例查询“国平易近邮电出版社”出版的并且单价小于该全部图书均匀价格的图书

因为全部图书均匀价格的成果是一个独一值,因此该查询也可能用比较运算符来实现,其SQL语句如下:

SELECT BookName

FROM BookRecord

WHERE Publisher =’国平易近邮电出版社’ AND SalesPrice ANY 大于子查询成果中的某个值 即表示大于查询成果中最小值

= ANY 大于等于子查询成果中的某个值即表示大于等于成果会合最小值

<= ANY 小于等于子查询成果中的某个值即表示小于等于成果会合最大值

= ANY 等于子查询成果中的某个值

!= ANY或 ANY 不等于子查询成果中的某个值 即相称于IN

!= ANY或 ANY 不等于子查询成果中的某个值 即相称于IN

= ALL 大于等于子查询成果中的全部值即表示大于等于成果会合最大值

<= ALL 小于等于子查询成果中的全部值即表示小于等于成果会合最小值

= ALL 等于子查询成果中的全部值

!= ALL或 ALL 不等于子查询成果中的任何一个值即相称于 NOT IN

例 查询其他出版社中比“国平易近邮电出版社”任一图书单价都低的图书的书名、单价

SELECT BookName, SalesPrice

FROM BookRecord奥鹏大工答案请进:opzy.net或请联系微信:1095258436

WHERE Publisher ‘国平易近邮电出版社’ AND SalesPrice<ANY(SELECT SalesPrice FROM BookRecord WHERE Publisher =’国平易近邮电出版社’

SELECT BookName, SalesPrice

FROM BookRecord

WHERE Publisher ‘国平易近邮电出版社’ AND SalesPrice< (SELECT MAX(SalesPrice) FROM BookRecord WHERE Publisher =’国平易近邮电出版社’

例 查询其他出版社中比“国平易近邮电出版社”全部图书单价都低的图书的书名、单价

SELECT BookName, SalesPrice

FROM BookRecord

WHERE Publisher ‘国平易近邮电出版社’ AND SalesPrice<ALL(SELECT SalesPrice FROM BookRecord WHERE Publisher =’国平易近邮电出版社’

以上查询现实上也可能用集函数实现。先利用求最小值函数找出“国平易近邮电出版社”出版的图书中最低单价,然后在父查询中查找出全部单价比前面的最低单价都低并且不是“国平易近邮电出版社”出版的图书表现其书名,单价。

SELECT BookName, SalesPrice

FROM BookRecord

WHERE Publisher ‘国平易近邮电出版社’ AND SalesPrice100,则取此 BookRecord. BookName,BookRecord. Quantity送入查询成果中。写成SQL语句就是:

SELECT BookName,Publisher

FROM BookRecord

WHERE EXISTS ( SELECT * FROM SalesDetail WHERE SalesDetail. BookNo = BookRecord. BookNo AND Quantity>100);

利用存在量词EXISTS后,若内层查询成果非空,则外层的WHERE子句前去真值,不然前去假值。

由EXISTS引出的子查询,其目标列表达式平日都用*,因为带EXISTS的子查询只前去真值或假值,给出列名亦无现实意思。

这类查询与我们前面的不相干子查询有一个明显差别,即子查询的查询前提依附于外层父查询的某个属性值(在本例中是依附于BookRecord表的 BookNo值),我们称这类查询为相干子查询(Correlated Subquery)。相干子查询的内层查询因为与外层查询有关,因此必须反复求值。从不雅点上讲,相干子查询的一般处理过程是:

起首取外层查询中BookRecord表的的第一个元组,根据它与内层查询相干的属性值(即BookNo值)处理内层查询, 若WHERE子句前去值为真(即内层查询成果非空),则取此元组放入成果表; 然后再检查Student表的下一个元组;反复这一过程,直至BookRecord表全部检查结束为止。

本例中的查询也可能用连接运算来实现,可能参照有关的例子,本人给出响应的SQL语句。

与EXISTS谓词绝对应的是NOT EXISTS谓词。利用存在量词NOT EXISTS后,若内层查询成果为空,则外层的WHERE子句前去真值,不然前去假值。

例 查询以后不销售图书的书名、出版社

SELECT BookName,Publisher

FROM BookRecord

WHERE NOT EXISTS ( SELECT * FROM SalesDetail WHERE SalesDetail. BookNo = BookRecord. BookNo)

例 查询以后不销售图书的书名、出版社

SELECT BookName,Publisher

FROM BookRecord

WHERE NOT EXISTS ( SELECT * FROM SalesDetail WHERE SalesDetail. BookNo = BookRecord. BookNo)

SELECT BookName,Quantity

FROM SalesDetail

WHERE EXISTS (SELECT * FROM BookRecord WHERE BookRecord .BookNo =SalesDetai.BookNo AND Author =“谭浩强”)

因为带EXISTS量词的相干子查询只关怀内层查询能否有前去值,并不须要查具体值,因此其效力并不必定低于不相干子查询,乃至偶然是最高效的方法。

凑集查询

把多个SELECT语句的构造完全雷同的成果兼并为一个成果,用凑集操纵来实现,这种查询称为凑集查询,标准SQL凑集操纵只有并操纵UNION。

利用UNION将多个查询成果兼并起来,构成一个完全的查询成果时,体系可能去掉落反复的元组。须要留神的是,参加UNION操纵的各成果表的列数必须雷同;对应项的数据范例也必须雷同。

UNION的语法格局为:

(Select查询语句1

UNION [ALL]

(select查询语句2)

ALL选项表示将全部行兼并到成果凑会合。不指定该项时,被结合查询成果凑会合的反复即将只保存一行。

结合查询时,查询成果的列标题为第一个查询语句的列标题。因此,要定义列标题必须在第一个查询语句中定义。要对结合查询成果排序时,也必须利用第一查询语句中的列名、列标题或许列序号。

在利用UNION 运算符时,应保证每个结合查询语句的抉择列表中有雷同数量的表达式,并且每个查询抉择表达式应存在雷同的数据范例,或是可能主动将它们转换为雷同的数据范例。在主动转换时,对数值范例,体系将低精度的数据范例转换为高精度的数据范例。

例 查询清华大学出版社跟出版的图书的书名、单价

(SELECT BookName, SalesPrice

FROM BookRecord

WHERE Publisher =‘清华大学出版社’ AND BookName= ‘C++顺序计划’)

UNION

(SELECT BookName, SalesPrice

FROM BookRecord

WHERE Publisher =’国平易近邮电出版社’ AND BookName= ‘C++顺序计划’)

上例也可用前面讲到的逻辑运算符or来实现,其SQL语句为:

SELECT BookName, SalesPrice

FROM BookRecord

WHERE ( Publisher = ‘清华大学出版社’ )or( Publisher = ‘国平易近邮电出版社’ ) AND BookName= ‘C++顺序计划’

例题

一、填空题

1、()使得可能用一系列简单查询构成复杂的查询,从而明显地加强了SQL的查询才能。

2、利用存在量词EXISTS后,若内层查询成果(),则外层的WHERE子句前去真值,不然前去假值。

3、凑集查询利用并操纵()。

二、断定题

1、带有EXISTS谓词的子查询不前去任何现实数据。()

例题答案

一、填空题

嵌套查询

非空

UNION

二、断定题

正确

 

赞(0)
未经允许不得转载:奥鹏作业网 » 大工21秋《数据库原理》在线作业答卷五【标准答案】

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址