实验4:使用子查询实现复杂查询 实验报告

合集下载

数据库实验简单和复杂的单表查询

数据库实验简单和复杂的单表查询

实验三实验名称:简单和复杂的单表查询一、实验目的1.熟练掌握用SELECT语句实现简单的单表查询。

掌握SELECT子句、FROM子句、WHERE子句及ORDER BY 子句的用法。

2. 熟练掌握SELECT查询语句中的Group by 子句、Having子句的用法,以及汇总函数的使用。

二、实验原理1.用SELECT语句实现简单的单表查询。

在SELECT子句中用TOP关键字来限制返回到结果集中的记录数目,用DISTINCT关键字从结果集中去掉重复的记录。

WHERE子句中用关系比较符、[NOT] BETWEEN、[NOT] IN、LIKE、IS [NOT]NULL及逻辑运算符构成查询条件,对结果集中的记录进行筛选。

ORDER BY子句将根据查询结果集中一个或多个字段对查询结果进行排序。

2. 在查询语句中用Group by子句进行分组;用Having子句对分组进行筛选。

使用MAX(),MIN(),COUNT(),SUM(),A VG()等函数在查询结果集中生成汇总值。

三、实验设备安装有SQL SERVER 2005的计算机。

四、实验内容运行查询文件company.sql,生成上机必要的数据,然后完成以下操作。

1、查找所有经理的姓名、职称、薪水。

2、在销售主表sales中查找销售金额大于等于10000元的订单。

3、在员工表employee中查找薪水在4000至8000元之间的员工。

4、在员工表employee中查找住址为上海、北京、天津这三个城市的员工。

5、在客户表customer中查找住址不在上海、北京、天津这三个城市的客户。

6、在员工表employee中查找姓“王”用姓名最后一个字为“7、在客户表customer中查找姓“刘”的客户名称、电话。

8、查找出职称为“经理”或“职员”的女工的信息。

9、查找薪水最高的前三条员工记录。

10、查找订单金额最高的前10%的订单记录。

select top 10 percent*from salesorder by tot_amt desc11、查找员工表中所属部门。

实验五大数据查询——复杂查询

实验五大数据查询——复杂查询

实验五数据查询——复杂查询一、实验目的1.掌握SQLServer查询语句的基本语法2.熟练使用SQL的Select语句对多表进行查询3.熟练掌握并运用SQLServer所提供的函数4.熟练使用SQL语句进行复杂的连接操作二、实验环境(实验的软件、硬件环境)硬件:PC机软件:SQL2000三、实验指导说明请复习相关的查询知识点并完成如下内容。

四、实验内容1.在订单数据库orderDB中,完成如下的查询:(1)用子查询查询员工“张小娟”所做的订单信息。

(2)查询没有订购商品的且在北京地区的客户编号,客户名称和邮政编码,并按邮政编码降序排序。

(3)查询订购了“32M DRAM”商品的订单编号,订货数量和订货单价。

(4)查询与员工编号“E2008005”在同一个部门的员工编号,姓名,性别,所属部门。

(5)查询既订购了P2*******商品,又订购了P2*******商品的客户编号,订单编号和订单金额(6)查询没有订购“52倍速光驱”或“17寸显示器”的客户编号,客户名称。

(7)查询订单金额最高的订单编号,客户姓名,销售员名称和相应的订单金额。

(8)查询订购了“52倍速光驱”商品的订购数量,订购平均价和订购总金额。

(9)查询订购了“52倍速光驱”商品且订货数量界于2~4之间的订单编号,订货数量和订货金额。

(10)在订单主表中查询每个业务员的订单数量(11)统计在业务科工作且在1973年或1967年出生的员工人数和平均工资。

(12)在订单明细表中统计每种商品的销售数量和金额,并按销售金额的升序排序输出。

(13)统计客户号为“C20050001”的客户的订单数,订货总额和平均订货金额(14)统计每个客户的订单数,订货总额和平均订货金额。

(15)查询订单中至少包含3种(含3种)以上商品的订单编号及订购次数,且订购的商品数量在3件(含3件)以上。

(16)查找订购了“32M DRAM”的商品的客户编号,客户名称,订货总数量和订货总金额。

实验4:使用子查询实现复杂查询 实验报告

实验4:使用子查询实现复杂查询 实验报告
指导教师
日期
注:请用A4纸书写,不够另附纸。第页,共页
3.根据玩具品牌统计每种品牌的平均价格,输出其中平均价格最高的品牌ID以及平均价格。
4.检索每一类(类别用cCategoryId表示)玩具里价格最高的玩具的名称。
5.检索单价最高的玩具的品牌(品牌为Brand)名称。
6.要求必须用带EXISTS量词的嵌套查询实现,检索和‘David Cooper’住在同一个州的订购者(Shopper)的姓和名。
WHEREToyBrand.cBrandId=t1.cBrandId
GROUPBYcBrandName
HAVINGMAX(mToyRate)>=ALL(
SELECTMAX(mToyRate)
FROMToyst2
GROUPBYcBrandId)
6.
SELECTvFirstName,vLastName
FROMShopperX
(NAME=Employeelog2,
FILENAME='D:\课程\数据库\新建文件夹\Employeelog2.ldf',
SIZE=100MB,MAXSIZE=200,FILEGROWTH=20);
四、实验总结
通过这次试验,我基本掌握了SQL Server的带谓词IN的子查询,带存在量词的子查询,使用比较运算符的子查询,掌握使用限量谓词的子查询,对数据库的认识有了更深刻的理解,值得注意的是,第5题和第11题,第一种方法是我自己写的,第二种是网上的参考资料。5.1是利用多层嵌套查询实现,5.2是利用多表连接盒多层嵌套查询实现;11.1建立的两个临时表,比较麻烦,11.2则利用多层嵌套循环实现,思路一样,但11.2比较简明。这次实验对我以后的学习提供了很大的帮助,让我熟悉了数据库实现简单查询。

数据库实验报告 复杂数据查询

数据库实验报告  复杂数据查询
六、调试和测试结果:
七、教师评语与成绩评定:
4
5
(19)查询所开课程的选修情况,包括没有任何学生选修的课程。 SELECT 学号, 课程名, 分数 FROM 成绩 A RIGHT OUTER JOIN 课程 B ON (A.课程编号=B.课程编号)
(20) 查询研究生与其导师的情况。 SELECT * FROM 研究生 A INNER JOIN 教师 B ON A.导师号= B.教工号 也可以写成等价的 SQL 语句: SELECT * FROM 研究生 A,导师 B WHERE A.导师号= B.教工号
(21)查询教师指导研究生的情况,包括不指导研究生的教师。
3
SELECT * FROM 导师 A LEFT OUTER JOIN 研究生 B ON (A.教工号= B.导师) 三、实验平台: Microsoft SQL Sever 四、设计流程: 1、进入查询分析器,参见进入查询分析器演示。 2、在查询分析器的命令编辑窗口输入 SQL 语句,点击执行键 ►,将执行 SQL 语 句。参见执行 SQL 语句的演示。 3、在调试程序过程中,可以用鼠标选择某些要执行的 SQL 语句,再点击执行键, 执行选择的语句。参见执行 SQL 语句的演示。 4、 注意:在各个表中插入数据的顺序,首先在父表中插入数据,然后在子表中 插入数据。另外,由于表的定义中包含完整性约束的定义,所以,当主码重 复,或者外码不是被参照表的有效值时,系统将拒绝插入的数据。 5、保存调试通过的 SQL 程序。 五、程序清单:
(11)根据学生、课程和成绩表,输出“计算机”课程的成绩单,包括姓名和 分数。 SELECT 姓名,分数 FROM 学生 A JOIN 成绩 B ON(A.学号=B.学号) JOIN 课程 C ON(B.课程编号=C.课程编号) WHERE C.课程名称=’计算机’

复杂查询实验报告

复杂查询实验报告

复杂查询实验报告江培健 10140421510计教(2)班(1) 查找有销售记录的客户编号、名称和订单总额。

SELECT a.CustomerNo,CustomerName, sum(qua ntity*price) orderSumFROM OrderMaster a,OrderDetail b,Customer cWHERE b.orderNo=a.orderNo AND c.CustomerNo=a.CustomerNo GROUP BY a.CustomerNo,CustomerNameORDER BY a.CustomerNo,orderSum DESC (2) 在订单明细表中查询订单金额最高的订单 (3) SELECT top 1 orderNo,sum(quantity*price)FROM OrderDetail GROUP BY orderNo ORDER BY 订单金额DESC订单金额3查询没有订购商品的客户编号和客户名称SELECT CustomerNo,CustomerNameFROM CustomerWHERE CustomerNo NOT IN (SELECT CustomerNo FROM OrderMaster)(4) (4)找出至少被订购3次的商品编号、订单编号、订货数量和订货金额,并按订货数量的降序排序输出。

SELECT productNo ,orderNo ,qua ntity ,qua ntity *price 订货金额FROM OrderDetailWHERE productNO IN(SELECT productNoFROM OrderDetailGROUP BY productNoHAVING cou nt(*)>=3)ORDER BY productNo desc⑸(5)使用子查询查找16M DRAM的销售情况,要求显示相应的销售员的姓名、性别, 销售日期、销售数量和金额(6) SELECT employeeName,case sex⑺whe n 'F' then ' 女'(8) whe n 'M' then ' 男'end sex,(9) orderDate,qua ntity,qua ntity*price 金额(10) FROM Employee a,OrderMaster b,OrderDetail c(11) WHERE a.employeeNo=b.salerNo AND b.orderNo=c.orderNo(12) AND c.ProductNo IN ((13) SELECT f.ProductNo(14) FROM OrderMaster d,OrderDetail e,Product f(15) WHERE d.orderNo=e.orderNo AND ProductName='32M DRAM')idien ' F* then '玄' when F then '男'end sex,orderDat e, quarrt ity, quant it y*p rice 金额FROM Employee OrderMauSt er b?Or de rDet ail cWHERE a. employeeNo=b. salerNo AND b. orderN^c. or de rNoAND c^Product No IN (SELECT f.PraductNoFROM OrdetMaster dj OtderDetail e f Product fWHERE d. orderNo=e< orderN口AND ProductName=* 32M DRAHI*) IlkSELECT orderNo ,orderSumFROM OrderMasterWHERE orderSum =(SELECT max(orderSum ) FROM OrderMaster )(7) 计算出一共销售了几种商品SELECT COUNT(*)种类FROM (SELECT DISTINCT ProductNo FROM OrderDetail)a(8) 显示OrderDetail表中每种商品的订购金额总和,并且依据销售金额由大到小排序输出。

子查询实验报告

子查询实验报告

实验报告———第三章实验一、实验目的1、理解嵌套子查询2、理解公用表达式3、会使用排序函数4、掌握集合运算二、实验内容1、从一个查询结果中继续查找2、编写代码,选择分数大于90分的所有学生3、列出每个学员的信息,并且列出这个学员最高的分数4、在列出所有学生信息的同时,列出学生成绩总合三、实验步骤A、实验基础搭建:1、创建数据库StuDBUSE masterGOIF EXISTS(SELECT*FROM SYSDATABASES WHERE NAME='Student')BEGINDROP DATABASE StudentENDCREATE DATABASE StudentON PRIMARY(NAME='Student_data',FILENAME='H:\DATA\Student_data.mdf',SIZE= 3MB,MAXSIZE= 5MB,FILEGROWTH= 1MB)LOG ON(NAME='Student_log',FILENAME='H:\DATA\Student_log.ldf',SIZE= 3MB,MAXSIZE= 3MB,FILEGROWTH= 10%)GO2、创建学生信息表StuInfoUSE StudentGOIF EXISTS(SELECT*FROM SYSOBJECTS WHERE NAME='StuInfo') BEGINDROP TABLE StuInfoENDCREATE TABLE StuInfo(StuID INT IDENTITY(1,1)PRIMARY KEY NOT NULL,StuName VARCHAR(10)NOT NULL,StuSex CHAR(2)NOT NULL,ClassID CHAR(2)NOT NULL)GO3、创建学生成绩表StuMarksUSE StudentGOIF EXISTS(SELECT*FROM SYSOBJECTS WHERE NAME='StuMarks') BEGINDROP TABLE StuMarksENDCREATE TABLE StuMarks(ExamNO INT NOT NULL,StuID INT REFERENCES StuInfo(StuID),Subject VARCHAR(10)NOT NULL,Score INT NOT NULL)GO4、插入数据USE StudentGOINSERT INTO StuInfo VALUES('李四','男',1)INSERT INTO StuInfo VALUES('钱七','女',2)INSERT INTO StuInfo VALUES('王五','男',1)INSERT INTO StuInfo VALUES('张三','女',1)INSERT INTO StuInfo VALUES('赵六','女',2)INSERT INTO StuMarks VALUES(1,1,'HTML',85)INSERT INTO StuMarks VALUES(2,1,'Java',80)INSERT INTO StuMarks VALUES(3,1,'SQL',82)INSERT INTO StuMarks VALUES(4,2,'HTML',70)INSERT INTO StuMarks VALUES(5,2,'Java',81)INSERT INTO StuMarks VALUES(6,2,'SQL',60)INSERT INTO StuMarks VALUES(7,3,'HTML',70)INSERT INTO StuMarks VALUES(8,3,'Java',90)INSERT INTO StuMarks VALUES(9,3,'SQL',85)INSERT INTO StuMarks VALUES(10,4,'HTML',61)INSERT INTO StuMarks VALUES(11,4,'Java',68)INSERT INTO StuMarks VALUES(12,3,'HTML',90)INSERT INTO StuMarks VALUES(13,4,'Java',81)INSERT INTO StuMarks VALUES(14,4,'SQL',65)B、实验详细过程及代码练习一:从一个查询结果中继续查找--查询分数大于的记录SELECT*FROM StuMarks WHERE Score> 80--查询学员编号为的学员SELECT*FROM StuMarks WHERE StuID=2--3把第二个查询中的表换成第一个查询,并给这个查询一个别名SELECT*FROM (SELECT*FROM StuMarks WHERE Score> 80)AS S1 WHERE StuID= 2实验结果:练习二:选择有分数大于分的所有学生USE StudentGO--1 查询分数大等于分的所有的学生编号SELECT*FROM StuMarks WHERE Score>=90--2 查询学生信息SELECT*FROM StuInfo--3然后给这个查询添加一个条件,学员编号是否存在于第一查询中SELECT*FROM StuInfoWHERE StuID IN(SELECT StuID FROM StuMarksWHERE Score>= 90)--4 不如子查询直观的写法SELECT distinct StuInfo.*FROM StuInfo,StuMarksWHERE StuInfo.StuID=StuMarks.StuIDANDStuMarks.Score>= 90实验结果:小结:开始自己的写法--查询成绩大于等于分的所有的信息SELECT StuInfo.StuID,StuName,StuSex,Subject,ScoreFROM StuInfo,StuMarksWHERE StuInfo.StuID=StuMarks.StuIDANDScore>= 90结果:练习三:选择有分数大于分的所有学生USE StudentGO--1 首先查询学员的最高分SELECT StuID,MAX(Score) AS MaxMarks FROM StuMarks GROUP BY StuID --2 查询所有学员信息并在最后一列添加MaxMarks,这一列的-- 值将上一个表中跟当前行的StuID一致的结果填充过来SELECT*,(SELECT MAX(Score)FROM StuMarksWHERE StuInfo.StuID=StuMarks.StuID GROUP BY StuID)AS MaxMarks FROM StuInfo实验结果练习四:在列出所有学生信息的同时,列出学生成绩的总和USE StudentGOSELECT b.*,a.Subject,a.Score FROM StuMarks AS a,StuInfo AS b WHERE a.StuID=b.StuID--聚合技术COMPUTE SUM(Score)实验结果习题--1,查询成绩小于分的学员编号SELECT DISTINCT StuID FROM StuMarks WHERE Score< 80--2,以查询的结果作条件,查询成绩小于分的学员信息SELECT*FROM StuInfoWHERE StuID IN(SELECT StuID FROM StuMarks WHERE Score< 80)-------------------------------------------------------------- --习题,查询没有考试学员的信息----------------------------------------------------------------1,查询考试的学员的编号SELECT StuID FROM StuMarks--2,查询没有考试学员的信息--分析:学号在信息表中有在成绩表中没有的即没考试SELECT*FROM StuInfoWHERE StuInfo.StuID NOT IN(SELECT StuID FROM StuMarks)四、实验总结实验一中,相当于把一个查询出来在内存中的表当作查询的表。

实验四SQL(三)SQL进行复杂查询实验报告

实验四SQL(三)SQL进行复杂查询实验报告

实验四SQL(三)SQL进行复杂查询实验报告实验四SQL(三)SQL进行复杂查询实验报告实验目的:1. 熟练掌握各种连接查询及其连接条件。

2. 掌握各种嵌套查询的使用。

3. 掌握复杂的集合查询。

实验内容:1.实验一中的数据为基础2.对各表中的数据进行不同条件的连接查询和嵌套查询;1)查询每个学生及其选课情况;2)查询每门课的间接先修课3)将STUDENT,SC进行右连接4)查询有不及格的学生姓名和所在系5)查询所有成绩为优秀(大于90分)的学生姓名6)查询既选修了2号课程又选修了3号课程的学生姓名、学号;7)查询和刘晨同一年龄的学生8)选修了课程名为“数据库”的学生姓名和年龄9)查询其他系比IS系任一学生年龄小的学生名单10)查询其他系中比IS系所有学生年龄都小的学生名单11)查询选修了全部课程的学生姓名12)查询计算机系学生及其性别是男的学生13)查询选修课程1的学生集合和选修2号课程学生集合的差集14)查询李丽同学不学的课程的课程号15)查询选修了3号课程的学生平均年龄16)求每门课程学生的平均成绩17)统计每门课程的学生选修人数(超过3人的才统计)。

要求输出课程号和选修人数,结果按人数降序排列,若人数相同,按课程号升序排列18)查询学号比刘晨大,而年龄比他小的学生姓名。

19)求年龄大于女同学平均年龄的男同学姓名和年龄20)求年龄大于所有女同学年龄的男同学姓名和年龄21)查询至少选修了95002选修的全部课程的学生号码22)查询95001和95002两个学生都选修的课程的信息实验步骤与过程:1.创建学生表student、课程表course和选课表SC,可以用使用实验一中已经建立的表和数据。

2.并输入数据,设置主键。

3.建立索引及三表之间关系。

4.按照SQL语句格式及题目要求输入语句进行不同条件的连接查询(SELECTFROM和WHERE等查询的语句)和嵌套查询:1、查询每个学生及其选课情况;2、查询每门课的间接先修课;3、将STUDENT,SC进行右连接;4、查询有不及格的学生姓名和所在系;5、查询所有成绩为优秀(大于90分)的学生姓名;6、查询既选修了2号课程又选修了3号课程的学生姓名、学号;7、查询和刘晨同一年龄的学生;8、选修了课程名为“数据库”的学生姓名和年龄;9、查询其他系比IS系任一学生年龄小的学生名单;10、查询其他系中比IS系所有学生年龄都小的学生名单;11、查询选修了全部课程的学生姓名;12、查询计算机系学生及其性别是男的学生;13、查询选修课程1的学生集合和选修2号课程学生集合的差集;14、查询李丽同学不学的课程的课程号;15、查询选修了3号课程的学生平均年龄;16、求每门课程学生的平均成绩;17、统计每门课程的学生选修人数(超过3人的才统计)。

数据库的复杂查询

数据库的复杂查询

实验三数据库的复杂查询一、实验学时2学时二、实验目的(1)熟练掌握复杂查询的select语句。

(2)熟练掌握连接查询方法。

(3)熟练掌握嵌套查询方法。

三、实验要求(1)硬件设备:奔腾II或奔腾II以上计算机,局域网。

(2)软件环境:WINDOWS 9X/NT、WINDOWS SERVER、WINDOWS XP、WINDOWS 7、SQL SERVER 2000/2005/2008中文版企业版或标准版。

(3)实验课前预习,课后及时完成实验内容。

(4)实验过程及记录按题目格式要求填写代码清单。

四、实验内容(一)复杂查询1.查询比“王敏”年纪大的男学生信息。

T-SQL语句:select*from Studentwhere Ssex='男'and Sage> (select Sage from Student where Sname='王敏')2.检索所有学生的选课信息。

(提示:使用外连接)T-SQL语句:select Student.Sno,Sname,Cno,Gradefrom Student left outer join SC on(Student.Sno=SC.Sno);3.查询已选课学生的学号、姓名、课程名、成绩。

(提示:连接查询)T-SQL语句:select Student.Sno,Sname,Cname,Gradefrom Student,SC,Coursewhere Student.Sno=SC.Sno and o=o4.查询选修了“信息系统”的学生的学号和姓名。

T-SQL语句:select SC.Sno,Snamefrom SC,Studentwhere Student.Sno=SC.Sno and Cno in (select Cnofrom Coursewhere Cname='信息系统')5.查询与“刘晨”在同一个系的学生学号、姓名、性别。

数据库实验 复杂查询

数据库实验 复杂查询

实验4 复杂查询一.实验目的:1.掌握SQL语句中的group by 子句。

2.掌握SQL语句中的子查询。

3.掌握SQL语句中的order by 子句。

二.实验内容:1.在自己的文件夹下建立一个“教学数据库”,表如下:2.S(学生表)C(课程表)SC(成绩表)S(学生表)SNO SN SEX AGE DEPT S1 赵亦女17 计算机S2 钱尔男18 信息S3 孙珊女20 信息S4 李思男21 自动化S5 周武男19 计算机S6 孙丽女20 自动化C(课程表)CNO CN CTC1 程序设计60C2 微机原理80C3 数字逻辑60C4 数据结构80C5 数据库60C6 编译原理60C7 操作系统60SC(成绩表)SNO CNO SCORES1 C1 90S1 C2 85S2 C5 57S2 C6 80S2 C7S2 C4 70S3 C1 75S3 C2 70S3 C4 85S4 C1 93S4 C2 85S4 C3 83S5 C2 893.利用SQL语句完成下列查询:(1)查询全体学生的学号、姓名、课程名和成绩。

(2)查询选修了课程的学生的人数。

(3)查询选修C1或C2且分数大于等于85分学生的姓名、课程名和成绩。

(4)查询所有姓孙的学生的学号和姓名。

(5)查询没有考试成绩的学生的学号、姓名和课程名。

(6)查询选修C1课程的最高分,显示课程号、课程名和最高分。

(7)查询每个学生的学号、姓名和平均成绩,按平均成绩的降序排列。

(8)查询比孙珊同学所选修课程最高成绩还高的学生的姓名、课程名和成绩。

(9)查询至少选修两门课程学生的学号、姓名和选课门数。

(10)查询考试成绩不及格学生的姓名、课程名和成绩。

高级查询实验总结

高级查询实验总结

高级查询实验总结一、引言高级查询是数据库操作中非常重要的一部分,它不仅可以帮助我们更精准、高效地获取数据库中的信息,还可以对数据进行聚合、计算等操作。

通过对高级查询的学习和实验,我们可以更好地掌握数据库操作的技巧,提高数据处理的能力。

在本次实验中,我们将总结高级查询的相关知识和实验结果,并进行深入分析和总结。

二、实验过程1. 数据库准备首先我们需要准备一个数据库和相应的数据表,以便进行高级查询的实验。

在实验中,我们选择了一个包含学生信息的数据库作为实验对象,其中包括学生表、课程表和成绩表等。

2. 实验环境我们使用了MySQL作为实验环境,通过控制台或者可视化工具对数据库进行操作和查询。

我们还使用了一些辅助工具来提高查询效率和性能。

3. 实验内容在实验中,我们主要对高级查询的各种操作进行了实验,包括但不限于:- 使用子查询进行数据过滤和筛选- 多表连接查询和相关子查询- 使用聚合函数进行数据统计和计算- 对查询结果进行排序和分组- 对查询结果进行分页和限制4. 实验结果通过实验,我们得到了大量的查询结果和数据处理的操作,对于每一种查询方式,我们都进行了分析和总结,并对比了不同查询方式的性能和效果。

同时还结合了具体的实际案例,对相关查询进行了演练和应用,以更好地理解和掌握高级查询的技巧和方法。

三、实验总结1. 高级查询的优势通过本次实验,我们深刻认识到高级查询在数据库操作中的重要性和优势,它可以帮助我们更快速、高效地获取所需信息,并且可以对数据进行复杂的处理和计算。

高级查询还能够有效提高数据库的性能和查询效率,优化数据检索的速度和精准度。

2. 高级查询的应用在实际应用中,高级查询可以广泛应用于各种数据处理和业务场景中,例如报表生成、数据分析、决策支持等方面。

通过合理地运用高级查询,我们可以更好地实现数据挖掘和价值发现,为企业决策和发展提供有力的支持。

3. 高级查询的挑战尽管高级查询有诸多优势,但在实际操作过程中也会遇到一些挑战和难点。

实验五--数据查询——复杂查询

实验五--数据查询——复杂查询

实验五数据查询——复杂查询一、实验目的1.掌握SQLServer查询语句的基本语法2.熟练使用SQL的Select语句对多表进行查询3.熟练掌握并运用SQLServer所提供的函数4.熟练使用SQL语句进行复杂的连接操作二、实验环境(实验的软件、硬件环境)硬件:PC机软件:SQL2000三、实验指导说明请复习相关的查询知识点并完成如下内容。

四、实验内容1.在订单数据库orderDB中,完成如下的查询:(1)用子查询查询员工“张小娟”所做的订单信息。

(2)查询没有订购商品的且在北京地区的客户编号,客户名称和邮政编码,并按邮政编码降序排序。

(3)查询订购了“32M DRAM”商品的订单编号,订货数量和订货单价。

(4)查询与员工编号“E2008005”在同一个部门的员工编号,姓名,性别,所属部门。

(5)查询既订购了P2*******商品,又订购了P2*******商品的客户编号,订单编号和订单金额(6)查询没有订购“52倍速光驱”或“17寸显示器”的客户编号,客户名称。

(7)查询订单金额最高的订单编号,客户姓名,销售员名称和相应的订单金额。

(8)查询订购了“52倍速光驱”商品的订购数量,订购平均价和订购总金额。

(9)查询订购了“52倍速光驱”商品且订货数量界于2~4之间的订单编号,订货数量和订货金额。

(10)在订单主表中查询每个业务员的订单数量(11)统计在业务科工作且在1973年或1967年出生的员工人数和平均工资。

(12)在订单明细表中统计每种商品的销售数量和金额,并按销售金额的升序排序输出。

(13)统计客户号为“C20050001”的客户的订单数,订货总额和平均订货金额(14)统计每个客户的订单数,订货总额和平均订货金额。

(15)查询订单中至少包含3种(含3种)以上商品的订单编号及订购次数,且订购的商品数量在3件(含3件)以上。

(16)查找订购了“32M DRAM”的商品的客户编号,客户名称,订货总数量和订货总金额。

数据库原理复杂查询实验报告

数据库原理复杂查询实验报告

计算机科学与信息学院 软件工程系上机实验报告《数据库原理》实验报告《数据库原理》实验报告题目题目实验4 复杂查询(一)姓名姓名 *** 班级班级 *** 日期日期 ***实验环境:实验环境:SQL Server 2000 SQL Server 2000实验内容与完成情况:一、实验目的本实验的目的使学生熟练掌握SQL Server 查询分析器的使用方法,本实验的目的是使学生进一步掌握SQL Server 查询分析器的使用方法,加深SQL 语言的连接查询的理解。

语言的连接查询的理解。

二、实验内容本实验使用实验三中建立的基本表Student Student、、Course 、SC 和Teacher 中的元组。

中的元组。

Student 学 号 Sno 姓 名 Sname 性 别 Ssex 年 龄 Sage 所在系所在系 Sdept 200215121 李勇李勇 男 20 CS 200215122 刘晨刘晨 女 19 CS 200215123 王敏王敏 女 18 MA 200215125 张立张立 男 19 IS 200215126 欧阳丽欧阳丽女21FL Course课程号课程号 Cno 课程名课程名Cname 先行课先行课 Cpno 学分学分 Ccredit 1 数据库数据库 5 4 2数学数学 2 3 信息系统信息系统 1 4 4 操作系统操作系统 6 3 5 数据结构数据结构 7 4 6 数据处理数据处理 2 7 PASCAL6 4 8DB_Design12SC学号学号 Sno 课程号课程号 Cno 成绩成绩 Grade 200215121 1 92 200215121 2 85 200215121 3 88 200215122 2 90 200215122 3 80 200215122 1 200215123 2 50 200215123 3 70Teacher教师编号教师编号 Tno 教师教师姓名姓名Tname 性 别 Tsex 年 龄 Tage 所在系所在系 Tdept 职称职称 Ttitles 工资工资Twage系主任系主任编号编号 Tdno 110001 钟灵钟灵 女27 CS 讲师讲师 2800110005 110002 杨毅杨毅 男 42 CS 副教授副教授 3500 110005 110003 周倩周倩 女 25 CS 讲师讲师 2800 110005 110005 陈文茂陈文茂 男 48 CS 教授教授 4000 110005 120001 江南江南 男 30 IS 副教授副教授 3500 120003 120002 刘洋刘洋 男 28 IS 讲师讲师 2800 120003 120003 汪明汪明 男 44 IS 教授教授 4000 120003 120004 张蕾张蕾 女 35 IS 副教授副教授 3500 120003 130001 邹佳羽邹佳羽 女 25 MA 讲师讲师 2800 130003 130002 王力王力 男 30 MA 讲师讲师 2800 130003 130003 王小峰王小峰 男 35 MA 副教授副教授 3500 130003 130004 魏昭魏昭 男 40 MA 副教授副教授 3500 130003 140001 王力王力 男 32 FL 副教授副教授 3500 140005 140002 张小梅张小梅 女 27 FL 讲师讲师 2800 140005 140003 吴娅吴娅 女 27 FL 讲师讲师 2800 140005 140004 陈姝陈姝 女 35 FL 副教授副教授 3500 140005 140005 周斌周斌男44FL教授教授4000140005在SQL Server2000查询分析器中,使用查询分析器中,使用连接查询连接查询完成如下查询要求:完成如下查询要求: (1) 求选课学生的基本情况以及他的选修情况;求选课学生的基本情况以及他的选修情况;SELECT Student .*,SC .* FROM S tudent Student ,SCWHERE Student .Sno =SC .Sno ;(2) 求学生的学号、姓名、选修的课程号及成绩;求学生的学号、姓名、选修的课程号及成绩;SELECT Student.Sno,Student.Sname,o,SC.GradeStudent,SCFROM S tudentWHERE Student.Sno=SC.Sno;(3) 求选修课程号为1且成绩在90以上的学生学号、姓名和成绩;以上的学生学号、姓名和成绩; SELECT Student.Sno,Student.Sname,SC.GradeFROM S tudentStudent,SC;WHERE Student.Sno=SC.Sno AND o=1 AND Grade>90(4) 求每一门课程的间接先行课(即先行课的先行课);求每一门课程的间接先行课(即先行课的先行课); SELECT o,SECOND.Cpno as '该课程的先行课'FROM C ourseCourse FIRST, Course SECONDWHERE o=o;(5) 求选修了数学课的学生的学号和姓名;求选修了数学课的学生的学号和姓名;SELECT Student.Sno,Student.SnameStudent,SC,CourseFROM S tudentWHERE Student.Sno=SC.Sno AND o=o AND ame='数学';(6) 求学生李勇选修的总学分;求学生李勇选修的总学分;SELECT SC Sno,SUM(SC Grade) as '总学分'Student,SCFROM S tudentWHERE Student.Sno=SC.Sno AND Student.Sname='李勇'Group by SC.Sno;(7) 求各学生选修的总学分;求各学生选修的总学分;SELECT Student.Sname,SUM(SC.Grade) as '总学分'Student,SCFROM S tudentWHERE Student.Sno=SC.SnoGroup by Student.Sname;(8) 求课程“数据库”的平均成绩;求课程“数据库”的平均成绩;SELECT ame as'数据库',AVG(SC.Grade) as '平均成绩' Course,SCFROM C ourseWHERE o=o AND ame='数据库'Group by ame;(9) 求计算机系学生的选课情况;求计算机系学生的选课情况;SELECT SC.*,Student.Sname,Student.SdeptFROM SC,StudentWHERE SC.Sno=Student.Sno AND Student.Sdept ='CS' ;W HERE(10) 求和钟灵在同一个系的老师姓名;和钟灵在同一个系的老师姓名;SELECT TnameFROM TeacherWHERE Tdept=SELECT Tdept(TeacherFROMTname ='钟灵');WHERE(11) 求吴娅所在系的教师人数;吴娅所在系的教师人数;SELECT COUNT(Tdept)FROM TeacherWHERE Tdept =(SELECT TdeptFROM TeacherWHERE Tname = ‘‘吴娅’);WHERE Tname =(12) 求和王小峰同一职称的教师姓名和所在系;和王小峰同一职称的教师姓名和所在系; SELECT Tname,TdeptFROM TeacherWHERE Ttitles=(SELECT TtitlesFROM TeacherWHERE Tname = ‘‘王小峰’)WHERE Tname =AND Tname != ‘‘王小峰’;AND Tname !=(13) 求和邹佳羽工资相同的教师人数;和邹佳羽工资相同的教师人数;SELECT count(Twage)FROM TeacherWHERE Twage=(TwageSELECT T wageFROM TeacherWHERE Tname= '邹佳羽')AND Tname != '邹佳羽';(14) 求汪明所在系教师的平均工资和最高工资;汪明所在系教师的平均工资和最高工资; SELECT AVG(Twage) as '平均工资',MAX(Twage) as '最高工资' FROM TeacherWHERE Tdept=(TdeptSELECT T deptFROM TeacherWHERE Tname= '汪明');(15) 求至少选修了8个学分的学生学号。

数据库实验报告复杂查询

数据库实验报告复杂查询

实验五复杂查询1 实验目的与要求(1) 熟练掌握SQL语句的使用。

(2) 熟练使用SQL语句进行连接操作。

2 实验内容(1) 在订单明细表中查询订单金额最高的订单。

实验脚本:实验结果图-1 (1)查询结果(2) 找出至少被订购3次的商品编号、订单编号、订货数量和订货金额,并按订货数量的降序排序输出。

实验脚本:实验结果图-2 (2)查询结果(3) 查找销售总额少于5000元的销售员编号、姓名和销售额。

实验脚本:实验结果图-3 (3)查询结果(4) 找出目前业绩未超过5000元的员工,并按销售业绩的降序排序输出。

实验结果图-4 (4)查询结果(5) 查询订购的商品数量没有超过10个的客户编号和客户名称。

实验结果图-5 (5)查询结果(6) 查找订货金额最大的客户名称和总货款。

实验脚本:实验结果:图-6 (6)查询结果(7) 查找至少订购了3种商品的客户编号、客户名称、商品编号、商品名称、数量和金额。

实验结果:图-7 (7)查询结果(8) 找出目前销售业绩超过4000元的业务员编号及销售业绩,并按销售业绩从大到小排序。

实验脚本:实验结果:图-8 (8)查询结果(9) 求每位客户订购的每种商品的总数量及平均单价,并按客户号、商品号从小到大排列。

实验结果:图-9 (9)查询结果(10) 查询业绩最好的的业务员号、业务员名及其总销售金额。

实验脚本:实验结果:图-10 (10)查询结果(11) 查询订购的商品至少包含了订单“200803010001”中所订购商品的订单。

实验结果:图-11 (11)查询结果(12) 查询总订购金额超过“C20070002”客户的总订购金额的客户号、客户名及其住址。

图-12 (12)查询结果(13) 查询总销售金额最高的销售员编号、订单编号、订单日期和订单金额。

实验脚本:图-13 (13)查询结果(14) 用存在量词查找没有订货记录的客户名称。

实验脚本:图-14 (14)查询结果(15) 查询既订购了“52倍速光驱”商品,又订购了“17寸显示器”商品的客户编号、订单编号和订单金额。

实验2复杂查询

实验2复杂查询
(4)显示雇员scott的管理者名
(5)查询emp表和salgrade表显示部门20的雇员名,工资及其工E同部门的所有雇员,但不显示BLAKE.
(2)显示超过平均工资的所有雇员名,工资及其部门号
(3)显示超过该部门平均工资的所有该部门雇员名,工资及部门号。
(4)显示高于CLERK岗位所有雇员工资的所有雇员名,工资及岗位
2.select ename,comm,dname from emp e,dept d where e.deptno=d.deptno and comm is not null;
3.select ename,sal,dname from emp e,dept d where d.deptno=e.deptno and loc='LALLAS';
【实验步骤和方法】
1、启动oracle的相关服务。
2、启动SQL*plus工具,用scott普通用户登录oracle。
3、完成实验内容。
【实验预习要求】
重点复习oracle的多表查询,子查询和外连接。
【实验报告要求】
除按实验报告纸的内容进行填写外,主体部分包括以下内容:
(1)程序中用到哪些命令
(2)实验步骤
2.实验步骤
3.实验运行结果及结果分析
4.上机调试中遇到的主要问题及解决办法
倒数第二个显示超过该部门平均工资的所有该部门雇员名,工资及部门号。
查看课本P102例子和p130
还有一种解决方法
select ename,sal,emp.deptno from emp,(select avg(sal) a,deptno from emp group by deptno) t where emp.deptno=t.deptno and emp.sal>t.a;

数据库实训报告子查询

数据库实训报告子查询

随着信息技术的发展,数据库技术在各行各业中得到了广泛的应用。

为了更好地掌握数据库技术,提高数据库设计、开发、维护能力,我们进行了一次数据库实训。

本次实训的主要内容是学习并应用子查询。

通过本次实训,我对子查询有了更深入的理解,以下是对子查询实训的总结。

二、实训目的1. 理解子查询的概念、类型和作用;2. 掌握子查询的语法和编写技巧;3. 学会使用子查询解决实际问题。

三、实训内容1. 子查询的概念子查询是嵌套在另一个查询语句中的查询语句。

它可以用于查询、过滤、排序等操作。

子查询可以返回单个值、多个值或一个结果集。

2. 子查询的类型(1)单行子查询:返回单个值的结果集。

(2)多行子查询:返回多个值的结果集。

(3)多列子查询:返回多列的结果集。

(4)关联子查询:子查询与外部查询之间有关联,用于过滤外部查询的数据。

3. 子查询的语法(1)SELECT 子查询SELECT 子查询用于返回单个值的结果集。

例如:SELECT MAX(salary) FROM employees;(2)FROM 子查询FROM 子查询用于返回一个结果集,并将其作为外部查询的表。

SELECT FROM (SELECT employee_id, salary FROM employees WHERE department_id = 10) AS dept_sal;(3)WHERE 子查询WHERE 子查询用于在WHERE子句中返回单个值的结果集。

例如:SELECT FROM employees WHERE salary > (SELECT AVG(salary) FROM employees);4. 子查询的应用(1)查询部门平均工资高于公司平均工资的员工信息。

SELECT e.employee_id, , e.salary, d.department_nameFROM employees eJOIN departments d ON e.department_id = d.department_idWHERE e.salary > (SELECT AVG(salary) FROM employees);(2)查询没有上级领导的员工信息。

数据库原理实验报告模板-实验四高级查询

数据库原理实验报告模板-实验四高级查询

大连海事大学数据库原理课程实验报告(2013-2014学年第二学期)实验四高级查询班级:网络工程2班学号:2220133079姓名:祁恩星指导教师:张德珍成绩:大连海事大学网络工程系2014年5月27日目录1实验目的 (3)2实验内容 (3)2.1掌握SQL高级查询使用方法 (3)3实验要求 (3)4实验步骤 (3)4.1掌握SQL高级查询使用方法 (3)5总结与体会 (4)5.1实验中出现的问题及其解决方案............................................. 错误!未定义书签。

5.2总结............................................................................................. 错误!未定义书签。

5.3体会............................................................................................. 错误!未定义书签。

1实验目的(1)掌握SQL的高级查询的使用方法,如分组统计、嵌套查询、集合查询等等。

2实验内容2.1 掌握SQL高级查询使用方法(1)分组统计。

(2)嵌套查询,包括IN查询、EXISTS查询。

(3)集合查询。

3实验要求(1)深入复习教材第三章SQL有关高级查询语句。

(2)根据书上的例子,针对DBTestBed数据库模式设计分组统计查询、嵌套查询(IN、EXISTS)语句和集合查询语句,每种类型的基本查询至少要设计一个查询,描述清楚查询要求,运行你所设计的查询语句,并截图相应的实验结果,每幅截图并要有较为详细的描述。

也可以按照附1所列示例查询做实验。

(3)实验步骤和实验总结中要详细描述实验过程中出现的问题、原因和解决方法。

4实验步骤4.1 掌握SQL高级查询使用方法(1)不带分组过滤条件的分组统计查询。

实验五数据查询复杂查询

实验五数据查询复杂查询

实验五数据查询——复杂查询一、实验目的1.掌握SQLServer查询语句的基本语法2.熟练使用SQL的Select语句对多表进行查询3.熟练掌握并运用SQLServer所提供的函数4.熟练使用SQL语句进行复杂的连接操作二、实验环境(实验的软件、硬件环境)硬件:PC机软件:SQL2000三、实验指导说明请复习相关的查询知识点并完成如下内容。

四、实验内容1.在订单数据库orderDB中,完成如下的查询:(1)用子查询查询员工“张小娟”所做的订单信息。

(2)查询没有订购商品的且在北京地区的客户编号,客户名称和邮政编码,并按邮政编码降序排序。

(3)查询订购了“32M DRAM”商品的订单编号,订货数量和订货单价。

(4)查询与员工编号“E2008005”在同一个部门的员工编号,姓名,性别,所属部门。

(5)查询既订购了P商品,又订购了P商品的客户编号,订单编号和订单金额(6)查询没有订购“52倍速光驱”或“17寸显示器”的客户编号,客户名称。

(7)查询订单金额最高的订单编号,客户姓名,销售员名称和相应的订单金额。

(8)查询订购了“52倍速光驱”商品的订购数量,订购平均价和订购总金额。

(9)查询订购了“52倍速光驱”商品且订货数量界于2~4之间的订单编号,订货数量和订货金额。

(10)在订单主表中查询每个业务员的订单数量(11)统计在业务科工作且在1973年或1967年出生的员工人数和平均工资。

(12)在订单明细表中统计每种商品的销售数量和金额,并按销售金额的升序排序输出。

(13)统计客户号为“C”的客户的订单数,订货总额和平均订货金额(14)统计每个客户的订单数,订货总额和平均订货金额。

(15)查询订单中至少包含3种(含3种)以上商品的订单编号及订购次数,且订购的商品数量在3件(含3件)以上。

(16)查找订购了“32M DRAM”的商品的客户编号,客户名称,订货总数量和订货总金额。

(17)查询每个客户订购的商品编号,商品所属类别,商品数量及订货金额,结果显示客户名称,商品所属类别,商品数量及订货金额,并按客户编号升序和按订货金额的降序排序输出。

实验五--数据查询——复杂查询

实验五--数据查询——复杂查询

实验五数据查询——复杂查询一、实验目的1.掌握SQLServer查询语句的基本语法2.熟练使用SQL的Select语句对多表进行查询3.熟练掌握并运用SQLServer所提供的函数4.熟练使用SQL语句进行复杂的连接操作二、实验环境(实验的软件、硬件环境)硬件:PC机软件:SQL2000三、实验指导说明请复习相关的查询知识点并完成如下内容。

四、实验内容1.在订单数据库orderDB中,完成如下的查询:(1)用子查询查询员工“张小娟”所做的订单信息。

(2)查询没有订购商品的且在北京地区的客户编号,客户名称和邮政编码,并按邮政编码降序排序。

(3)查询订购了“32M DRAM”商品的订单编号,订货数量和订货单价。

(4)查询与员工编号“E2008005”在同一个部门的员工编号,姓名,性别,所属部门。

(5)查询既订购了P2*******商品,又订购了P2*******商品的客户编号,订单编号和订单金额(6)查询没有订购“52倍速光驱”或“17寸显示器”的客户编号,客户名称。

(7)查询订单金额最高的订单编号,客户姓名,销售员名称和相应的订单金额。

(8)查询订购了“52倍速光驱”商品的订购数量,订购平均价和订购总金额。

(9)查询订购了“52倍速光驱”商品且订货数量界于2~4之间的订单编号,订货数量和订货金额。

(10)在订单主表中查询每个业务员的订单数量(11)统计在业务科工作且在1973年或1967年出生的员工人数和平均工资。

(12)在订单明细表中统计每种商品的销售数量和金额,并按销售金额的升序排序输出。

(13)统计客户号为“C20050001”的客户的订单数,订货总额和平均订货金额(14)统计每个客户的订单数,订货总额和平均订货金额。

(15)查询订单中至少包含3种(含3种)以上商品的订单编号及订购次数,且订购的商品数量在3件(含3件)以上。

(16)查找订购了“32M DRAM”的商品的客户编号,客户名称,订货总数量和订货总金额。

编写复杂查询-子查询

编写复杂查询-子查询

编写复杂查询-⼦查询主要是对SELECT⼦查询进⾏嵌套使⽤对于某些问题不容易解决, 可以考虑使⽤⼦查询-- Find products that are more-- expensive than Lettuce (id = 3)USE sql_store;SELECT *FROM productsWHERE unit_price > (SELECT unit_priceFROM productsWHERE product_id = 3);-- Exercise-- in sql_hr database:-- Find employees whose earn more than averageUSE sql_hr;SELECT *FROM employeesWHERE salary > (SELECT AVG(salary)FROM employees);-- ⼦查询IN-- Find the products that have never been orderedUSE sql_store;SELECT *FROM productsWHERE product_id NOT IN (SELECT DISTINCT product_idFROM order_items);-- Exercise-- Find clients without invoicesUSE sql_invoicing;SELECT *FROM clientsWHERE client_id NOT IN (SELECT DISTINCT client_idFROM invoices);-- ⼦查询和连接SELECT *FROM clientsLEFT JOIN invoices USING(client_id)WHERE invoice_id IS NULL;-- Find customers who have ordered Lettuce (id = 3)-- Select customer_id, first_name, last_nameUSE sql_store;SELECTcustomer_id,first_name,last_nameFROM customersWHERE customer_id IN (SELECT customer_idFROM ordersWHERE order_id IN (SELECT order_idFROM order_itemsWHERE product_id = 3));-- 连接SELECTDISTINCT customer_id,first_name,last_nameFROM customersJOIN orders o USING (customer_id)JOIN order_items oi USING(order_id)WHERE oi.product_id = 3;-- ALL 关键字-- Select invoices larger than all invoices of -- client 3SELECT MAX(invoice_total)FROM invoicesWHERE client_id = 3;SELECT *FROM invoicesWHERE invoice_total > (SELECT MAX(invoice_total)FROM invoicesWHERE client_id = 3);-- ALL ⾼于所有SELECT *FROM invoicesWHERE invoice_total > ALL (SELECT (invoice_total)FROM invoicesWHERE client_id = 3);-- ANY SOME ⾼于任何⼀个即可SELECT *FROM invoicesWHERE invoice_total > ANY(SELECT (invoice_total)FROM invoicesWHERE client_id = 3);-- SELECT clients with at least two invoices USE sql_invoicing;SELECT *FROM clientsWHERE client_id IN (SELECTclient_idFROM invoicesGROUP BY client_idHAVING COUNT(*) >= 2);SELECT *FROM clientsWHERE client_id = ANY(SELECTclient_idFROM invoicesGROUP BY client_idHAVING COUNT(*) >= 2);-- 相关⼦查询-- Select employees whose salary is-- above the average in their officeUSE sql_hr;SELECT *FROM employees eWHERE salary > (SELECTAVG(salary)FROM employeesWHERE office_id = e.office_id);-- Exercise-- Get invoices that are larger than the-- client's average invoice amountUSE sql_invoicing;SELECT *FROM invoices iWHERE invoice_total >(SELECTAVG(invoice_total)FROM invoicesWHERE client_id = i.client_id);-- Exist-- Select clients that have an invoiceSELECT *FROM clientsWHERE client_id IN(SELECT DISTINCT client_idFROM invoices);SELECT *FROM clients cWHERE EXISTS(SELECT client_idFROM invoicesWHERE client_id = c.client_id);-- Find the products that have never been orderedUSE sql_store;SELECT *FROM productsWHERE product_id NOT IN(SELECT product_idFROM order_items);USE sql_store;SELECT *FROM products pWHERE NOT EXISTS (SELECT product_idFROM order_itemsWHERE product_id = p.product_id);-- SELECT ⼦查询USE sql_invoicing;SELECTinvoice_id,invoice_total,(SELECT AVG(invoice_total)FROM invoices) AS invoice_average,invoice_total - (SELECT invoice_average) AS difference FROM invoices;SELECTclient_id,name,(SELECT SUM(invoice_total)FROM invoicesWHERE client_id = c.client_id) AS total_sales,(SELECT AVG(invoice_total) FROM invoices) AS average, (SELECT total_sales - average) AS differenceFROM clients c;-- FROM ⼦语句查询SELECT *FROM (SELECTclient_id,name,(SELECT SUM(invoice_total)FROM invoicesWHERE client_id = c.client_id) AS total_sales,(SELECT AVG(invoice_total) FROM invoices) AS average, (SELECT total_sales - average) AS differenceFROM clients c) AS sales_summary;。

数据库原理实验报告模板-实验四高级查询

数据库原理实验报告模板-实验四高级查询

大连海事大学数据库原理课程实验报告(2013-2014学年第二学期)实验四高级查询班级:软件工程四班学号:2220121787姓名:马跃指导教师:曹志英成绩:大连海事大学软件工程系2014年6 月23 日目录1实验目的 (3)2实验内容 (3)2.1掌握SQL高级查询使用方法 (3)3实验要求 (3)4实验步骤 (3)4.1掌握SQL高级查询使用方法 (3)5总结与体会 (6)5.1实验中出现的问题及其解决方案 (6)5.2总结 (7)5.3体会 (7)1实验目的(1)掌握SQL的高级查询的使用方法,如分组统计、嵌套查询、集合查询等等。

2实验内容2.1 掌握SQL高级查询使用方法(1)分组统计。

(2)嵌套查询,包括IN查询、EXISTS查询。

(3)集合查询。

3实验要求(1)深入复习教材第三章SQL有关高级查询语句。

(2)根据书上的例子,针对DBTestBed数据库模式设计分组统计查询、嵌套查询(IN、EXISTS)语句和集合查询语句,每种类型的基本查询至少要设计一个查询,描述清楚查询要求,运行你所设计的查询语句,并截图相应的实验结果,每幅截图并要有较为详细的描述。

也可以按照附1所列示例查询做实验。

(3)实验步骤和实验总结中要详细描述实验过程中出现的问题、原因和解决方法。

4实验步骤4.1 掌握SQL高级查询使用方法(1)不带分组过滤条件的分组统计查询。

统计2013-2014上学期信息学院(01)开设的每门课程的最高分,最低分,及平均成绩。

select C.coursename,avg(score)AVGS,max(score)MAXS,min(score)MINS from tb_select_course A,Tb_Cultivate_Scheme B,Tb_Course_info Cwhere A.schemeid=B.schemeid and B.cyear='2013'and B.term='上'andC.courseid=B.courseid and C.deptid='01'group by C.coursename(2)带分组过滤条件的分组统计查询。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
8.
SELECTCOUNT(cShopperId)ASSumShopper
FROMShopper
WHEREvCreditCardTypeIN(
SELECTvCreditCardType
FROMShopper
WHEREvFirstName='Lisa'
ANDvLastName='Lee')
9.
SELECTvFirstname,vLastName
11.检索曾订购过玩具表中所有玩具的订购者名单。
12.创建数据库Employee,其中包含一个主文件,一个辅文件,两个日志文件组成。
三、实验过程
1.
SELECT*
INTO#TexasShopper
FROMShopper
WHEREcState='Texas'
2.
SELECTvFirstName+' '+vLastNameASClientName,cCity
WHEREToyBrand.cBrandId=t1.cBrandId
GROUPBYcBrandName
HAVINGMAX(mToyRate)>=ALL(
SELECTMAX(mToyRate)
FROMToyst2
GROUPBYcBrandId)
6.
SELECTvFirstName,vLastName
FROMShopperX
FROMShopper
WHEREdExpiryDate<='2001-5-31'ANDdExpiryDate>='2001-5-1'
3.
SELECTcBrandId,AVG(mToyRate)ASAvgToyRate
FROMToys
GROUPBYcBrandId
HAVINGAVG(mToyRate)>=ALL(
(NAME=Employee4,
FILENAME='D:\课程\数据库\新建文件夹\Employee4.ndf')
LOGON
(NAME=Employlog1,
FILENAME='D:\课程\数据库\新建文件夹\Employeelog1.ldf',
SIZE=100MB,MAXSIZE=200,FILEGROWTH=20),
SELECTcOrderNo,Toys.cToyId
INTO#NEW1
FROMOrderDetail,Toys
WHEREOrderDetail.cToyId=Toys.cToyId
SELECTcOrderNo,COUNT(cToyId)ASSumToyId
INTO#NEW2
FROM#NEW1
GROUPBYcOrderNo
二、实验内容
完成在,GlobalToyz数据库基础上的操作,按要求完成给出的下列题目,要求写出相应数据库的T-SQL语句。
1.将’Texas’州的订购者(Shopper)信息拷贝到一张全局临时表中(表名自定义)。
2.查询截止日期(dExpiryDate)在2001年5月的订购者(Shopper)的姓名和所在城市。
SELECTAVG(mToyRate)
FROMToys
GROUPBYcBrandId)
4.--自身连接
SELECTvToyName
FROMToysX
WHEREmToyRate=(
SELECTMAX(mToyRate)
FROMToysY
ategoryId=ategoryId)
7.检索订购玩具数量在3个或3个以上的订单号。(Orderdetail表的siQty表示数量)
8.检索和‘Lisa Lee’使用同一种类型的信用卡的订购者的人数。
9.检索订购了玩具品牌为‘Largo’的订购者的姓和名。(多层嵌套查询实现)
10.列出价格不低于所有品牌ID为‘005’的玩具(要求显示玩具ID和名称)。
SIZE=100MB,
MAXSIZE=200,
FILEGROWTH=20),
(NAME=Employee2,
FILENAME='D:\课程\数据库\新建文件夹\Employee2.ndf')AME='D:\课程\数据库\新建文件夹\Employee3.ndf'),
FROMTOYS))
11.2
SELECTvFirstName,vLastName
FROMShopper
WHEREcShopperIdIN(
SELECTcShopperId
FROMOrders
WHEREcOrderNo=(
SELECTcOrderNo
FROMOrderDetail
GROUPBYcOrderNo
3.根据玩具品牌统计每种品牌的平均价格,输出其中平均价格最高的品牌ID以及平均价格。
4.检索每一类(类别用cCategoryId表示)玩具里价格最高的玩具的名称。
5.检索单价最高的玩具的品牌(品牌为Brand)名称。
6.要求必须用带EXISTS量词的嵌套查询实现,检索和‘David Cooper’住在同一个州的订购者(Shopper)的姓和名。
广东海洋大学学生实验报告书
实验名称
实验四:使用子查询
课程名称
数据库原理与应用
成绩
学院(系)
专业
班级
学生姓名
学号
实验地点
实验日期
一、实验目的
1.掌握带谓词IN的子查询;
2.掌握带存在量词的子查询;
3.掌握使用比较运算符的子查询;
4.掌握使用限量谓词的子查询;
5.综合运用所学知识实现查询;
6.掌握SELECT INTO语句;
FROMShopper
WHEREcShopperIdIN(
SELECTcShopperId
FROMOrders
WHEREcOrderNoIN(
SELECTcOrderNo
FROMOrderDetail
WHEREcToyIdIN(
SELECTcToyId
FROMToys
WHEREcBrandIdIN(
指导教师
日期
注:请用A4纸书写,不够另附纸。第页,共页
HAVINGCOUNT(DISTINCTcToyId)=(
SELECTCOUNT(DISTINCTcToyId)
FROMToys)))
12.
CREATEDATABASEEmployee
ON
PRIMARY
(NAME=Employee1,
FILENAME='D:\课程\数据库\新建文件夹\Emplpyee1.mdf',
SELECTcBrandId
FROMToyBrand
WHEREcBrandName='Largo'))))
10.
SELECTcToyId,vToyName
FROMToys
WHEREmToyRate>=(
SELECTMAX(mToyRate)
FROMToys
WHEREcBrandId='005')
11.1
(NAME=Employeelog2,
FILENAME='D:\课程\数据库\新建文件夹\Employeelog2.ldf',
SIZE=100MB,MAXSIZE=200,FILEGROWTH=20);
四、实验总结
通过这次试验,我基本掌握了SQL Server的带谓词IN的子查询,带存在量词的子查询,使用比较运算符的子查询,掌握使用限量谓词的子查询,对数据库的认识有了更深刻的理解,值得注意的是,第5题和第11题,第一种方法是我自己写的,第二种是网上的参考资料。5.1是利用多层嵌套查询实现,5.2是利用多表连接盒多层嵌套查询实现;11.1建立的两个临时表,比较麻烦,11.2则利用多层嵌套循环实现,思路一样,但11.2比较简明。这次实验对我以后的学习提供了很大的帮助,让我熟悉了数据库实现简单查询。
WHEREEXISTS(
SELECT*
FROMShopperY
WHEREY.vFirstName='David'
ANDY.vLastName='Cooper'ANDX.cState=Y.cState)
7.
SELECTcOrderNo
FROMOrderDetail
GROUPBYcOrderNo
HAVINGSUM(siQty)>='3'
SELECTvFirstName,vLastName
FROMShopper
WHEREcShopperIdIN(
SELECTcShopperId
FROMOrders,#NEW2
WHEREOrders.cOrderNo=#NEW2.cOrderNo
AND#NEW2.SumToyId=(
SELECTCOUNT(DISTINCTcToyId)
5.1
SELECTcBrandName
FROMToyBrand
WHEREcBrandIdIN(
SELECTcBrandId
FROMToys
WHEREmToyRateIN(
SELECTMAX(mToyRate)
FROMToys))
5.2
SELECTcBrandName
FROMToyst1,ToyBrand
相关文档
最新文档