实验四 查询设计实验.docx
- 文档编号:12283706
- 上传时间:2023-04-17
- 格式:DOCX
- 页数:13
- 大小:472.92KB
实验四 查询设计实验.docx
《实验四 查询设计实验.docx》由会员分享,可在线阅读,更多相关《实验四 查询设计实验.docx(13页珍藏版)》请在冰豆网上搜索。
实验四查询设计实验
《数据库原理与应用》
课程实验报告
实验四查询设计实验
所在院(系):
班级:
学号:
姓名:
1.实验目的
(1)了解查询的目的,掌握SELECT语句的基本语法和查询条件的表示方法。
(2)掌握数据排序和数据联接查询的方法。
(3)掌握SQLServer查询分析器的使用方法。
2.实验要求
(1)针对“TM”数据库,在SQLServer查询分析器中,用T-SQL语句实现以下单表查询操作,并将将调试成功的T-SQL命令,填入实验报告中。
a)查询所有课程的详细情况。
b)查询来自江苏或山东的学生学号和姓名,并以中文名称显示输出的列名。
c)查询选修了课程的学生学号(一人选了多门课程的话,学号只显示一次)。
d)查询选修课程号为07253001的学号和成绩,并要求对查询结果按成绩降序排列,如果成绩相同则按学号升序排列。
e)查询所有学生的学号、姓名和年龄。
f)查询选修课程号为07253001的成绩在85-95之间的学生学号和成绩,并将成绩乘以0.7输出。
g)查询数学与信息技术学院(DEPT_ID为07)或物理与电子工程学院(DEPT_ID为09)姓张的学生的信息。
。
h)查询所有核心课程(课程名中带*的)的情况。
i)查询缺少了成绩的学生的学号和课程号,查询结果按课程号升序排列。
(2)在SQLServer查询分析器中,用T-SQL语句实现下列数据联接查询操作:
a)查询每个学生的情况以及他(她)所选修的课程。
b)查询学生的学号、姓名、选修的课程名及成绩。
c)查询选修C语言程序设计且成绩为85分以上的学生学号、姓名及成绩。
d)查询和学生柏文楠是同一个民族的学生(用自身联接实现)。
e)分别用等值联接和内联接查询有授课记录的老师的姓名。
f)用外联接查询所有老师的授课情况,输出老师的工号、姓名、职称、院系、担任的课程号和授课的学期,结果按院系和职称升序排列。
如果该老师没有授课历史,在课程号和授课的学期中显示空值
(3)在SQLServerManagementStudio中新建查询,完成以上查询命令的同时,熟悉SQL编辑器工具栏中各快捷按钮的作用。
(4)按要求完成实验报告。
3.实验步骤、结果和总结实验步骤/结果
将调试成功的T-SQL语句写在下方(标明题号)。
1、针对“TM”数据库,在SQLServer查询分析器中,用T-SQL语句实现以下单表查询操作,并将将调试成功的T-SQL命令,填入实验报告中。
(a)查询所有课程的详细情况:
select*fromCourse
表1-a
(b)查询来自江苏或山东的学生学号和姓名,并以中文名称显示输出的列名。
SELECTS_IDas学号,S_Nameas姓名FROMSTUDENT
WHEREBirth_Place='江苏'orBirth_Place='山东'
表1-b
(c)查询选修了课程的学生学号(一人选了多门课程的话,学号只显示一次)。
selectdistinctS_IDfromsc
表1-c
(d)查询选修课程号为07253001的学号和成绩,并要求对查询结果按成绩降序排列,如果成绩相同则按学号升序排列。
selectS_ID,EXAM_Gradefromsc
whereC_ID='07253001'
orderbyEXAM_Gradedesc,S_IDasc
表1-d
(e)查询所有学生的学号、姓名和年龄。
SELECTS_ID,S_NAME,year(getdate())-year(Date_of_Birth)as年龄FROMStudent
表1-e
(f)查询选修课程号为07253001的成绩在85-95之间的学生学号和成绩,并将成绩乘以0.7输出。
SelectS_ID,EXAM_Grade*0.7asgradefromSC
whereC_ID='07253001'andEXAM_Gradebetween85and95
表1-f
(g)查询数学与信息技术学院(DEPT_ID为07)或物理与电子工程学院(DEPT_ID为09)姓张的学生的信息。
select*fromStudentwhereDEPT_IDin('07','09')andS_Namelike'张%'
表1-g
(h)查询所有核心课程(课程名中带*的)的情况。
SELECT*FROMCourseWHEREC_Namelike'%*%'
表1-h
(i)查询缺少了成绩的学生的学号和课程号,查询结果按课程号升序排列。
selectS_ID,C_IDfromSCwhereEXAM_GradeISNULL
orderbyC_ID
表1-i
2、在SQLServer查询分析器中,用T-SQL语句实现下列数据联接查询操作:
(a)查询每个学生的情况以及他(她)所选修的课程。
SelectStudent.S_ID,S_Name,Gender,Birth_Place,DEPT_ID,Class_ID,Course.C_namefromStudentjoinSConStudent.S_ID=SC.S_IDjoinCourseonCourse.C_ID=SC.C_ID
表2-a
(b)查询学生的学号、姓名、选修的课程名及成绩。
selectStudent.S_ID,S_Name,C_Name,EXAM_Grade
fromStudentinnerjoinSConStudent.S_ID=SC.S_IDinnerjoinCourseonSC.C_ID=Course.C_ID
表2-b
(c)查询选修C语言程序设计且成绩为85分以上的学生学号、姓名及成绩。
SelectStudent.S_ID,S_NAME,EXAM_GradefromStudent,SC,Course
whereStudent.S_ID=SC.S_IDandCourse.C_ID=SC.C_IDandC_Name='C语言程序设计'andEXAM_Grade>=85
表2-c
(d)查询和学生柏文楠是同一个民族的学生(用自身联接实现)。
SELECTS_NamefromStudent
whereNationality=(selectNationalityfromStudentwhereS_Name='柏文楠')
表2-d
(e)分别用等值联接和内联接查询有授课记录的老师的姓名。
●等值联接
selectDISTINCTT_Namefrom
TeacherinnerjoinTConTeacher.T_ID=TC.T_ID
●内联接
selectDISTINCTT_NamefromTeacher,TCwhereTeacher.T_ID=TC.T_ID
表2-e
(f)用外联接查询所有老师的授课情况,输出老师的工号、姓名、职称、院系、担任的课程号和授课的学期,结果按院系和职称升序排列。
如果该老师没有授课历史,在课程号和授课的学期中显示空值。
selectTeacher.T_ID,Teacher.T_Name,Teacher.Academic_Title,Department.
DEPT_Name,TC.C_ID,TC.Semester
fromTeacherRightjoinTConTeacher.T_ID=TC.T_IDjoinDepartmentONDepartment.DEPT_ID=Teacher.DEPT_ID
orderbyDepartment.DEPT_Name,Teacher.Academic_Title
表2-f
4.实验思考:
①联接查询中,输出列名时何时可以忽略列名前的表名,何时不能?
Ø完整写法
表名.列名
若选择的字段名在各个表中是唯一的,则可以省略字段名前的表名。
②联接查询中,INNERJOIN、LEFTOUTERJOIN、RIGHTOUTERJOIN、FULLOUTERJOIN的结果各有什么不同?
vINNERJOIN:
Innerjoin产生的结果集中,是A和B的交集
SELECT*FROMTableAINNERJOINTableBONTableA.name=TableB.name
vLEFTOUTERJOIN:
(1)Leftouterjoin产生表A的完全集,而B表中匹配的则有值,没有匹配的则以null值取代。
SELECT*FROMTableALEFTOUTERJOINTableBONTableA.name=TableB.name
(2)产生在A表中有而在B表中没有的集合。
SELECT*FROMTableALEFTOUTERJOINTableBONTableA.name=TableB.name
WHERETableB.idISnull
vRIGHT[OUTER]JOIN
RIGHTOUTERJOIN是后面的表为基础,与LEFTOUTERJOIN用法类似。
vFULL[OUTER]JOIN
(1)Fullouterjoin产生A和B的并集。
但是需要注意的是,对于没有匹配的记录,则会以null做为值。
可以使用IFNULL判断。
SELECT*FROMTableAFULLOUTERJOINTableBONTableA.name=TableB.name
(2)产生A表和B表没有交集的数据集。
SELECT*FROMTableAFULLOUTERJOINTableBONTableA.name=TableB.name
WHERETableA.idISnullORTableB.idISnull
③LIKE匹配字符有几种?
如果要检索的字符中包含匹配字符,该如何处理?
LIKE通配符及实例
通配符
说明
实例
%
表示包含零个或多个字符的任意字符串。
wheretitlelike'%computer%'将查找在书名中任意位置包含单词"computer"的所有书名。
_(下划线)
表示任何单个字符。
whereau_fnamelike'_ean'将查找以ean结尾的所有4个字母的名字(dean、sean等)。
[]
指定范围([a-f])或集合([abcdef])中的任何单个字符。
whereau_lnamelike'[c-p]arsen'将查找以arsen结尾并且以介于c与p之间的任何单个字符开始的作者姓氏,例如carsen、larsen、karsen等。
[^]
不属于指定范围([a-f])或集合([abcdef])的任何单个字符。
whereau_lnamelike'de[^l]%'将查找以de开始并且其后的字母不为l的所有作者的姓氏。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验四 查询设计实验 实验 查询 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)