《数据库系统概论》实验报告
实验名称: 多表查询
实验人:
实验地点: 实验楼317
实验日期: 20##-10-12
一、 实验准备
1.硬件及软件环境要求
为了使该实验顺利进行,需要有一台计算机,计算机必须安装Windows 20##、Windows XP或Windows NT操作系统,还必须安装Microsoft SQL Server 20## 任意一版本(个人版、标准版、企业版)。实验开始之前,必须将实验1.2节中创建好的SCDB数据库和ShiYan数据库附加到当前SQL数据库服务器中。
2.本实验涉及的主要SQL语句的语法格式及各种操作说明
数据库各数据表中存放着不同的数据,用户经常需要用多个表中的数据来组合提炼出所需的数据信息,如果一个查询需要对多个表进行操作,这一查询就称为多表查询(或关联查询)。多表查询是通过各个表之间共同的关联属性列来实现数据查询的,它是关系数据库查询操作的一种最常见的方法。多表查询主要表现为连接查询、嵌套查询、集合查询等几种形式。
(1) 连接查询
连接查询是关系数据库中最主要的查询,包括等值连接查询、自然连接查询、非等值连接查询、自身连接查询、外连接查询和复合条件连接查询。
1) 等值、非等值和自然连接查询
连接查询中用来连接两张表的条件称为连接条件或连接谓词,其语法为:
SELECT column_name [ ,...n ]
[ FROM tablename1,tablename2 ]
WHERE [tablename1].< column_name ><operator>[tablename2].< column_name >
【说明】
operator
:连接运算符。当为“=”时,称为等值连接;否则称为非等值连接;在等值连接中,如果将目标列中重复的属性列去掉则称为自然连接。
2) 外连接查询
在通常的连接操作中,只有满足条件的元组才能作为结果输出,但如果想以某张表作为主体列出所有的情况,在没有信息的情况下,只能输出其基本情况信息,这时就需要使用外连接查询。其语法为:
SELECT column_name [ ,...n ]
[ FROM tablename1,tablename2 ]
WHERE [tablename1].< column_name >[(*)]<operator>[(*)]
[tablename2].< column_name >
【说明】
外连接的表示方法为在连接谓词的某一边加符号“*”(外连接符)。外连接符出现在<operator>
的
左边称为左外连接;外连接符出现在<operator>
的
右边称为右外连接。
3) 复合条件连接查询
如果在查询语句的WHERE子句中有多个连接条件,则称为复合条件连接查询。其语法为:
SELECT column_name [ ,...n ]
[ FROM tablename1,tablename2 ]
WHERE [tablename1].< column_name ><operator>[tablename2].< column_name >
<link> [tablename1].< column_name ><operator>
[tablename2].< column_name >[ ,...n ]
【说明】
link:逻辑连接词,可以是AND、OR、NOT或其他限定条件。
(2) 嵌套查询
一个SELECT-FROM-WHERE语句称为一个查询块。将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询。在嵌套查询中,子查询的结果往往是一个集合,因此IN、EXISTS等谓词经常使用在嵌套查询中。
(3) 集合查询
如果有多个不同的查询结果数据集,但又希望它们连接在一起,组成一组数据,这组数据就是这多个结果集的逻辑联合。在这种情况下,通常可以使用UNION子句。使用UNION子句时的两条基本原则:
·每一个查询结果集的数据类型必须相同;
·每一个查询结果集中的列数必须相同,列的排列顺序必须相互对应。
二、 实验目的
1.了解查询的概念和方法;
2.掌握查询分析器的使用方法;
3.掌握复杂查询的实现方法;
4.掌握多表连接的方法;
5.掌握嵌套查询与集合查询的基本方法;
6.掌握SELECT语句在多表查询中的应用。
三、 实验内容
针对实验数据库ShiYan,完成以下多表查询操作:
1.查询为工程J1供应红色零件的供应商号码SNO。
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='S1'
4.找出工程项目J2使用的各种零件的名称及其重量。
select P.PNAME,P.WEIGHT
from P
where P.PNO in (
select SPJ.PNO
from SPJ
where SPJ.JNO='J2')
5.找出上海厂商供应的所有零件号码。
select DISTINCT SPJ.PNO
from SPJ
where SPJ.SNO in (
select S.SNO
from S
where S.CITY='上海')
6.找出使用上海产的零件的工程名称。
select DISTINCT SPJ.JNO
from SPJ
where SPJ.SNO in (
select S.SNO
from S
where S.CITY='上海')
7.找出没有使用天津产的零件的工程号码。
select DISTINCT SPJ.JNO
from SPJ
where SPJ.JNO not in (
select DISTINCT SPJ.JNO
from SPJ
where SPJ.SNO in (
select S.SNO
from S
where S.CITY='天津'))
8.找出重量最轻的红色零件的零件编号PNO。
select P.PNO
from P
where P.WEIGHT <=all(
select P.WEIGHT
from P
where P.COLOR='红')
9.找出供应商与工程所在城市相同的供应商提供的零件号码。
SELECT DISTINCT P.PNO
FROM S,J,SPJ,P
WHERE S.CITY = J.CITY AND
J.JNO = SPJ.JNO AND
S.SNO = SPJ.SNO AND
SPJ.PNO = P.PNO
10.找出所有这样的一些<CITY,CITY,PNAME>三元组,使得第一个城市的供应商为第二个城市的工程供应零件的名称为PNAME。
SELECT S.CITY,J.CITY,P.PNAME
FROM S,J,SPJ,P
WHERE
J.JNO = SPJ.JNO AND
S.SNO = SPJ.SNO AND
SPJ.PNO = P.PNO
11.重复第15题,但不检索两个CITY值相同的三元组。
SELECT S.CITY,J.CITY,P.PNAME
FROM S,J,SPJ,P
WHERE S.CITY!=J.CITY AND
J.JNO = SPJ.JNO AND
S.SNO = SPJ.SNO AND
SPJ.PNO = P.PNO
12.找出供应商S1为工程名中含有“厂”字的工程供应的零件数量总和。
select SUM(SPJ.QTY) as '零件数量总和'
from SPJ
where SPJ.SNO='S1' AND SPJ.JNO in(
select J.JNO
from J
where J.JNAME LIKE '%厂%')
四、 总结
这次多表查询是对第一个实验的扩展和融合,对自己来说,也是提高实验能力的一种方式。 这次实验也使得我理解了查询分析器的大致使用方法,嵌套和集合查询的基本方法。 对select语句也有了更深一步的认识。
第二篇:多用电表使用实验报告
西峰育才中学物理实验报告
班级: 时间: 指导教师:
实验学生名单:
【实验内容】:多用电表的使用
【实验目的】:学会使用多用电表测量电阻、二极管正负极、电压、电流
【实验原理】:
欧姆表:欧姆表由灵敏电流计表头、电池、变阻器改装而成,欧姆表内阻就是这三部分电阻的串联阻值,根据闭合电路欧姆定律: 电流与有一一对应关系,就可测出不同的电阻。可画出其内部如图1所示:
多用电表:电流表和电压表都是由灵敏电流计表头改装来的,所以欧姆表、电流表和电压表可以公用一个表头改装成一个多用电表。可画出其内部结构如图2所示:
【注意事项】:
因为表头是多用的,而电流必须从其正接线柱流入,表内又有电池,所以红表笔接的是表头的正接线柱,但却与电池负极相连,而黑表笔与电池正极相连。
测电阻时,用的是表内的电池,待测电阻必须与电源断开;测电压和电流时,不用表内电池,多用电表必须按照电压表和电流表的接法接入电路。
【实验过程及数据记录】:
1、测量定值电阻:
(1)、将多用电表的 、 表笔分别插入+、-插孔,选择开关旋至 (“Ω”)档。
(2)、试测一下桌面上的电阻,根据指针所指示的位置,判断目前所选的 是否合适,然后将选择开关调到合适的位置。
(3)、将两个表笔 在一起,调节 旋钮,直至指针指到 侧0位置。
(4)、测量电阻并读出数据。R= Ω
(5)、如果测量另一电阻时改变了量程,必须重新进行 。
2、测量二极管的正反向电阻:
(1)、将多用电表选择开关调至 档,并选择×10或×100的档位。
(2)、将两个表笔 在一起,调节 旋钮,直至指针指到 侧0位置。
(3)、用右手像握筷子那样抓住两表笔,接触到左手拿的二极管两端的电极。
(4)、测量出二极管的电阻并读出数据。
R= Ω,说明现在连接黑表笔的是二极管的 极。
(5)、将多用电表选择开关调至×100或×10的档位。并将二极管电极颠倒,重新测量。
R= Ω,说明现在连接黑表笔的是二极管的 极。
3、测量小灯泡两端电压:
(1)、按照黑板上的电路图连接电池、开关、变阻器、小灯泡。
(2)、将多用电表选择开关调至 档,为了安全先选择最大量程,试测以后再选择合适的量程。
(3)、通过两个表笔将多用电表与小灯泡 联在一起,读出小灯泡两端电压为 伏。
4、测量小灯泡中的电流:
(1)、将多用电表选择开关调至 档,为了安全先选择最大量程,试测以后再选择合适的量程。
(2)、通过两个表笔将多用电表与小灯泡 联在一起,读出小灯泡两端电压为 伏。
(3)、通过两个表笔将多用电表与小灯泡 联,读出小灯泡中通过的电流为 安。