10级《数据库系统》上机作业03—单号 下载本文

内容发布更新时间 : 2024/5/10 8:06:43星期一 下面是文章的全部内容请认真阅读。

麦档网 www.maidoc.com

班级:学号:姓名:

实验5 SQL表中数据的连接查询

1.实验目的

(1)掌握SELECT语句在连接查询中的应用 2.背景知识

若查询涉及多个表,此时可以使用连接进行查询。连接查询是关系数据库中最主要的核心查询,包括普通连接和外连接查询。 (1)普通连接

普通连接操作只输出满足连接条件的元组,连接查询中用来连接两个表的条件称为连接条件或连接谓词,连接谓词中的列名称为连接字段,其一般格式为:

[<表名1>.]<列名1> <比较运算符> [<表名2>.]<列名2>

连接条件中的各连接字段类型必须是可比的,但名称不必是相同的。且连接条件在WHERE中。在连接查询中为了避免混淆,在属性名前面加上表名前缀。若没有指定两表的连接条件,则两表做广义笛卡尔积,即两表元组交叉乘积。其连接结果会产生一些没有意义的远祖。若在连接条件中的连接运算符是等号(=)则是等值连接,其中会有相同的重复属性列,如果去掉重复的属性,则是自然连接。连接不仅可以在两个不同的表中进行,也可以四一个表与其自身进行连接,这个称为自身连接,在实际查询中经常会用到;还可以是两个表以上的多表进行连接,称为多表连接。多数时候,WHERE子句中会有多个条件,称为复合条件连接。 (2)外连接 通常情况下,连接操作只有满足条件的元组才会作为结果输出。外连接Outer Join是参与连接的一方(左方或右方),即使不满足条件,也要出现在结果中。不满足条件的元组的另一方属性置空值NULL。左外连接 Left Outer Join表示左面关系的所有元组将出现在结果中;右外连接 Right Outer Join表示右面关系的所有元组将出现在结果中;全外连接 Full Outer Join表示两面关系的所有元组将出现在结果中。 (3)集合查询

SELECT语句的查询结果是元组的集合,所以多个SELECT语句的结果可以进行集合操作。集合操作的种类主要有并操作UNION、交操作INTERSECT、差操作EXCEPT,参加集合操作的各查询结果的列数必须相同;对应项的数据类型也必须相同。

麦档网 www.maidoc.com

3.实验内容

要求:实现对关系数据库product中相关数据的连接查询操作。 product(maker,model,type)

PC(model,speed,ram,hd,rd,price)

Laptop(model,speed,ram,hd,screen,price) Printer(model,color,type,price)

a) 查询硬盘容量至少30GB的笔记本电脑制造商及该电脑的速度。

b) 查询制造商B生产的任意类型的所有产品的型号和价格。

c) 查询只卖笔记本电脑不卖PC的厂商。

!d)查询出现在两种或两种以上PC中硬盘的大小。

!e)查询每对具有相同速度和RAM容量的PC型号。每一对只能列出一次,例如若(i,j)已被列出,则(j,i)就不能再被列出。

!!f)查询生产至少两种速度至少3.0的电脑(PC或笔记本电脑)的厂商。

麦档网 www.maidoc.com

实验6 SQL表中数据的复杂查询

1.实验目的

(1)掌握SELECT语句在复杂查询中的应用 2.背景知识 在SQL语言中,一个SELECT-FROM-WHERE语句称为一个查询块。将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询。 在SQL语言中可以有多层嵌套查询,即一个子查询还可以嵌套另外一个子查询。特别要注意子查询不能有ORDER BY子句,只有在最外层的最终查询结果才可以使用ORDER BY子句进行排序。嵌套查询一般的求解方法是由里向外处理,即每一个子查询在其上一级查询处理之前求解,子查询结果用于建立其父查询的查询条件。嵌套查询可以使用多个简单查询嵌套成一个复杂的查询,这样通过层层嵌套的方法构造查询,提高SQL语言的查询能力。当目标中涉及的属性在同一个表中,就可以使用嵌套查询,需要注意的是连接查询和嵌套查询可以在一个查询中同时出现。

(1)带有IN谓词的子查询。在嵌套查询中,子查询的结果往往是一个集合,所以谓词IN是嵌套查询中最常用的谓词。当查询涉及多个关系时,用嵌套查询实现求解,层次清晰,易于构造,具有结构化程序的优点。有些嵌套查询可以用连接查询实现,有些则不行,对于可以用连接查询代替嵌套查询的,最终想用哪种方法实现查询由用户习惯决定。

(2)带有比较运算符的子查询。当子查询结果返回一个单值时,父查询和子查询之间可用比较运算符进行连接,可以用>、>=、<、<=、=、!=、<>等比较运算符。求解相关子查询不像求解普通子查询那样一次将子查询求解出来,然后求解父查询。内查询由于与外查询相关,必须反复求值。

(3)带有ANY和ALL谓词的子查询。若子查询结果返回一个集合时,就要使用带有ANY或ALL谓词的比较运算符。

表 带有ANY和ALL谓词的比较运算符及其含义

运算符 > ANY > ALL >= ANY >= ALL <> ANY <> ALL < ANY < ALL <= ANY <= ALL = ANY = ALL 描述 大于子查询结果中的某个值 大于子查询结果中的所有值 大于或等于子查询结果中的某个值 大于或等于子查询结果中的所有值 不等于子查询结果中的某个值 不等于子查询结果中的任何一个值 小于子查询结果中的某个值 小于子查询结果中的所有值 小于或等于子查询结果中的某个值 小于或等于子查询结果中的所有值 等于子查询结果中的某个值 等于子查询结果中的所有值(通常没有实际意义) 实际上用聚集函数实现子查询通常比直接用ANY或ALL查询效率要高,ANY、ALL谓词与聚集函数、IN谓词的等价转换关系。 ANY ALL < 或!= NOT IN > >MIN >MAX >= >=MIN >=MAX 3.实验内容

要求:实现对关系数据库product中相关数据的复杂查询操作。