简单查询和复杂查询实验.docx
《简单查询和复杂查询实验.docx》由会员分享,可在线阅读,更多相关《简单查询和复杂查询实验.docx(12页珍藏版)》请在冰豆网上搜索。
简单查询和复杂查询实验
岭南师范学院
《数据库原理与应用》实验报告手册
学号:
姓名:
班级:
成绩:
2015年09月
实验二简单查询和复杂查询实验
一、实验目的
1.熟练使用T-SQL语句进行数据查询。
2.掌握SELECT语句的基本结构和多表连接查询。
3.掌握SELECT语句和子查询、分组查询及统计查询、查询结果的排序等操作
二、实验内容
1.要求利用T-SQL语句进行单表和多表的简单查询和链接查询实验。
参照实验五,完成实验报告。
2.要求利用T-SQL语句进行单表和多表的嵌套查询实验。
参照实验五,完成实验报告。
3.参照”数据查询练习题2014”
三、实验步骤和结果
写出你的实验步骤以及实验结果图以及关键代码,要求条理清晰。
查询全体学生学号和姓名
usestudents_courses
selectsno,sname
fromstudent
查询全体学生的姓名、学号、所在系
usestudents_courses
selectsno,sname,dno
fromstudent
查询全体学生的详细记录
usestudents_courses
select*
fromstudent
查询全体学生的姓名及出生年份
usestudents_courses
selectsname,year(getdate())-sage出生年份
fromstudent
查询全体学生的姓名、出生年份和所在的系*/
/*要求用小写字母表示所有系名*/
usestudents_courses
selectsname,year(getdate())-sage出生年,dno
fromstudent
/*EXP34_5_2查询全体学生的姓名、出生年份和所在的系*/
/*要求用小写字母表示所有系名;并使用新的列名称*/
usestudents_courses
selectsname姓名,year(getdate())-sage出生年,sno
fromstudent
--------------------------------------------------------------------------------
/*EXP34_6_1查询选修了课程的学生学号*/
usestudents_courses
selectsno
fromsc
--------------------------------------------------------------------------------
/*EXP34_6_2查询选修了课程的学生学号,去掉结果表中的重复行*/
usestudents_courses
selectdistinctsno
fromsc
--------------------------------------------------------------------------------
/*EXP34_7查询数学与应用数数系全体学生的名单*/
usestudents_courses
selectsname
fromstudent
whereDno='sx'
--------------------------------------------------------------------------------
/*EXP34_8查询年龄20岁以下的学生姓名及年龄*/
usestudents_courses
selectsname,sage
fromstudent
wheresage<20
-------------------------------------------------
/*EXP34_9查询考试成绩有不及格的学生的学号*/
usestudents_courses
selectsno
fromsc
wheregrade<60
--------------------------------------------------------------------------------
/*EXP34_10查询年龄在20~23岁(包括22和23岁)之间的学生的姓名、系别和年龄*/
usestudents_courses
selectsname,dno,sage
fromstudent
wheresage>=20andsage<=23
--------------------------------------------------------------------------------
/*EXP34_11查询年龄不在20~23
usestudents_courses
selectsname,dno,sage
fromstudent
wheresage<20orsage>23
--------------------------------------------------------------------------------
/*EXP34_12_1查询计信息管理与信息系统、数学与应用数学和信息与计算科学三个系的学生的姓名和性别*/
usestudents_courses
selectsname,ssex
fromstudent
wherednoin('xg','sx','xx')
--------------------------------------------------------------------------------
/*EXP34_12_1查询不是计信息管理与信息系统、数学与应用数学和信息与计算科学三个系的学生的姓名和性别*/
usestudents_courses
selectsname,ssex
fromstudent
wherednonotin('xg','sx','xx')
--------------------------------------------------------------------------------
/*EXP34_14_1查询学号为2012254110的学生的详细情况*/
usestudents_courses
select*
fromstudent
wheresno='2012254110'
--------------------------------------------------------------------------------
/*EXP34_15_1查询所有姓刘的学生的详细情况*/
usestudents_courses
select*
fromstudent
wheresnamelike'刘%'
--------------------------------------------------------------------------------
/*EXP34_15_2查询所有不姓刘的学生的详细情况*/
usestudents_courses
select*
fromstudent
wheresnamenotlike'刘%'
----------------------------------------
/*EXP34_16查询姓“林”且全名为2个汉字的学生的姓名*/
usestudents_courses
selectsname
fromstudent
wheresnamelike'林_'
--------------------------------------------------------------------------------
/*EXP34_17查询名字中第二个字为“香”字的学生的姓名和学号*/
usestudents_courses
selectsname,sno
fromstudent
wheresnamelike'_香%'
--------------------------------------------------------------------------------
/*EXP34_18查询所有不姓刘的学生的姓名*/
usestudents_courses
selectsname
fromstudent
wheresnamenotlike'刘%'
--------------------------------------------------------------------------------
/*EXP34_20查询课程名中第二个字为“据”的课程的详细情况*/
usestudents_courses
select*
fromcourse
wherecnamelike'_据%';
--------------------------------------------------------------------------------
/*EXP34_21查询有选课记录但选课记录中缺少考试成绩的学生的学号和相应的课程号*/
usestudents_courses
selectsno,cno
fromsc
wheregradeisnull
--------------------------------------------------------------------------------
/*EXP34_22查询有成绩的学生的学号和相应的课程号*/
usestudents_courses
selectsno,cno
fromsc
wheregradeisnotnull
-------------------------------------------------------------------------------
/*EXP34_23查询应用化学系年龄在22岁以下的学生的姓名*/
usestudents_courses
selectsname
fromstudent
wheredno='yyhx'andsage<22
--------------------------------------------------------------------------------
/*EXP34_24查询选修了06130060课程的学生的学号及成绩,查询结果按分数降序排列*/
usestudents_courses
selectsno,grade
fromsc
orderbygradedesc
--------------------------------------------------------------------------------
/*EXP34_25查询全体学生的情况,查询结果按所在系的系号升序(默认)排列*/
/*同一系中的学生按年龄降序排列*/
usestudents_courses
select*
fromstudent
orderbydno,sagedesc
--------------------------------------------------------------------------------
/*EXP34_26查询学生的总人数*/
usestudents_courses
selectCOUNT(*)总人数
fromstudent
--------------
/*EXP34_27查询选修了课程的学生人数*/
--------------------------------------------------------------------------------
/*EXP34_28_1广播电视选修13110110课程的学生平均成绩*/
usestudents_courses
selectAVG(grade)
fromstudentjoinsc
onstudent.SNO=sc.sno
wheredno='gbds'andcno='13110110'
groupbycno
--------------------------------------------------------------------------------
/*EXP34_30查询学生06130060选修课程的总学分数*/
usestudent_course
selectsum(ccredit)as'总学分数'
fromcourse
whereo='06130060'
--------------------------------------------------------------------------------
/*EXP34_31求各个课程及相应的选课人数*/
usestudent_course
selectcno,COUNT(*)as'人数'
fromsc
wheregradeisnotnull
groupbycno
--------------------------------------------------------------------------------
/*EXP34_32查询选修了3门以上(包括3门)课程的学生的学号*/
usestudent_course
selectsno
fromsc
groupbysno
havingCOUNT(*)>=3
--------------------------------------------------------------------------------
/*EXP34_33查询每个学生及其选修课程的情况*/
usestudent_course
selectstudent.*,sc.*
fromstudentinnerjoinsc
onstudent.sno=sc.sno
--------------------------------------------------------------------------------
/*EXP34_34用自然连接查询每个学生及其选修课程的情况*/
usestudent_course
selectstudent.*,sc.*
fromstudent,sc
wherestudent.sno=sc.sno
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
/*EXP34_36_1使用外连接查询每个学生及其选修课程的情况*/
/*即:
若某个学生没有选课就在sc表的属性位置上填空值NULL*/
usestudent_course
selectstudent.sno,sname,ssex,sage,sdept,cno,grade
fromstudentLEFTJOINscON(student.sno=sc.sno);
--------------------------------------------------------------------------------
/*EXP34_37查询选修07190002课程且成绩在80分以上(包括80分)的所有学生的情况*/
usestudent_course
select*
fromstudentinnerjoinsc
onstudent.sno=sc.snoandcno='07190002'andgrade>=80
--------------------------------------------------------------------------------
/*EXP34_38查询每个学生的学号、姓名、选修的课程名及成绩*/
/*注:
本查询涉及到3个表*/
usestudent_course
selectstudent.sno,student.sname,ame,sc.grade--selectstudent.sno,sname,cname,grade
fromstudentjoin(scjoincourseono=o)--fromstudent,sc,course
onstudent.sno=sc.sno--wherestudent.sno=sc.snoando=o
--------------------------------------------------------------------------------
/*EXP34_39_1用嵌套查询查询与吴梅泳同在一个系学习的学生*/
usestudent_course
selectsno,sname,dno
fromstudent
wherednoin
(selectdno
fromstudent
wheresname='吴梅泳')
--------------------------------------------------------------------------------
/*EXP34_39_2用自身连接查询与刘晨同在一个系学习的学生*/
usestudent_course
selectb.sno,b.sname,b.dno
fromstudentasajoinstudentasb
ona.dno=b.dnoanda.sname='刘晨
--------------------------------------------------------------------------------
/*EXP34_40_1用嵌套查询查询选修了课程名为“大学英语Ⅱ”的学生的学号和姓名*/
usestudent_course
selectsno,sname
fromstudent
wheresnoin
(selectsno
fromsc
wherecnoin
(selectcno
fromcourse
wherecname='大学英语Ⅱ')
);
/*注:
本查询实际上涉及到3个关系*/
--------------------------------------------------------------------------------
/*EXP34_40_2用自然连接法查询选修了课程名为“C语言程序设计”的学生的学号和姓名*/
usestudent_course
selectstudent.sno,sname
fromstudent,sc,course
wherestudent.sno=sc.snoand
o=oand
ame='信息系统';
--------------------------------------------------------------------------------
/*EXP34_48查询计算机系的学生及年龄不大于19岁的学生*/
usestudent_course
select*
fromstudent
wheresdept='CS'
union/*集合并操作*/
select*
fromstudent
wheresage<=19;
-----------------------------------
/*EXP34_49查询选修了06151030课程或者选修了08190000课程的学生的学号*/
usestudent_course
selectstudent.sno
fromstudentinnerjoinsc
onstudent.sno=sc.snoandcno='06151030'orcno='08190000'
--------------------------------------------------------------------------------
/*EXP34_50查询数学与应用数学系年龄不大于21岁的学生*/
usestudent_course
select*
fromstudent
wheresdept='SX'and
snoin(selectsno
fromstudent
wheresage<=19);
--------------------------------------------------------------------------------
/*EXP34_51查询既选1号课程又选2号课程的学生的学号*/
--------------------------------------------------------------------------------
usestudent_course
selectsno
fromsc
wherecno='1'
intersect
selectsno
fromsc
wherecno='2'
四、总结和体会
写出实验过程中遇到问题以及解决的方法和实验的收获。
(不得少于200字)
查询语句的功能非常强大,其选项也非常丰富,同时查询语句的完整句法也很复杂。
简单查询是不带任何子句的单表查询,多表查询是数据库中最主要的查询,其中,多表查询包括连接查询和子查询(子查询也称为嵌套查询)。
连接查询中需要熟悉内连接、外连接和交叉连接;子查询分为无关子查询和相关子查询。
总的来说,简单查询是多表查询的基础,多表查询是简单查询的进一步体现,要更好的运用查询,我们必须巩固简单查询,然后不断的提高对多表查询的理解。