多表查询实验报告
《数据库系统概论》实验报告
实验名称: 多表查询
实 验 人:
实验地点: 实验楼317
实验日期: 2009-10-12
实验准备
1.硬件及软件环境要求
为了使该实验顺利进行,需要有一台计算机,计算机必须安装Windows 2000、Windows XP或Windows NT操作系统,还必须安装Microsoft SQL Server 2000 任意一版本(个人版、标准版、企业版)。实验开始之前,必须将实验1.2节中创建好的SCDB数据库和ShiYan数据库附加到当前SQL数据库服务器中。
2.本实验涉及的主要SQL语句的语法格式及各种操作说明
数据库各数据表中存放着不同的数据,用户经常需要用多个表中的数据来组合提炼出所需的数据信息,如果一个查询需要对多个表进行操作,这一查询就称为多表查询(或关联查询)。多表查询是通过各个表之间共同的关联属性列来实现数据查询的,它是关系数据库查询操作的一种最常见的方法。多表查询主要表现为连接查询、嵌套查询、集合查询等几种形式。
(1) 连接查询
连接查询是关系数据库中最主要的查询,包括等值连接查询、自然连接查询、非等值连接查询、自身连接查询、外连接查询和复合条件连接查询。
1) 等值、非等值和自然连接查询
连接查询中用来连接两张表的条件称为连接条件或连接谓词,其语法为:
SELECT column_name [ ,...n ]
?[ FROM tablename1,tablename2 ]
?WHERE [tablename1].< column_name >[tablename2].< column_name >
【说明】
operator:连接运算符。当为“=”时,称为等值连接;否则称为非等值连接;在等值连接中,如果将目标列中重复的属性列去掉则称为自然连接。
2) 外连接查询
在通常的连接操作中,只有满足条件的元组才能作为结果输出,但如果想以某张表作为主体列出所有的情况,在没有信息的情况下,只能输出其基本情况信息,这时就需要使用外连接查询。SELECT column_name [ ,...n ]
?[ FROM tablename1,tablename2 ]
?WHERE [tablename1].< column_name >[(*)][(*)]
[tablename2].< column_name >
【说明】
外连接的表示方法为在连接谓词的某一边加符号“*”(外连接符)。外连接符出现在的左边称为左外连接;外连接符出现在的右边称为右外连接。
SELECT column_name [ ,...n ]
?[ FROM tablename1,tablename2 ]
?WHERE [tablename1].< column_name >[tablename2].< column_name >
[tablename1].< column_name >
[tablename2].< column_name > [ ,...n ]
【说明】
link:逻辑连接词,可以是AND、OR、NOT或其他限定条件。
(2) 嵌套查询
一个SELECT-FROM-WHERE语句称为一个查询块。将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询。在嵌套查询中,子查询的结果往往是一个集合,因此IN、EXISTS等谓词经常使用在嵌套查询中。
(3) 集合查询
如果有多个不同的查询结果数据集,但又希望它们连接在一起,组成一组数据,这组数据就是这多个结果集的逻辑联合。
SELECT SPJ.SNO
FROM SPJ
WHERE SPJ.JNO='j1' AND SPJ.PNO in(
select P.PNO
from P
where P.COLOR='红')
2.查询没有使用天津供应商生产的零件并且当前工程所使用零件的颜色全部为红色的工程号JNO。
select SPJ.JNO
from SPJ
where SPJ.PNO in(
select P.PNO
from P
where P.COLOR='红') AND
SPJ.SNO in(
select S.SNO
from S
where S.CITY!='天津')
3.查询至少选用了供应商S1所供应的全部零件的工程号JNO。
select SPJ.JNO
from SPJ
where SPJ.SNO