实验四查询设计实验.docx

上传人:b****6 文档编号:8622062 上传时间:2023-02-01 格式:DOCX 页数:12 大小:372.49KB
下载 相关 举报
实验四查询设计实验.docx_第1页
第1页 / 共12页
实验四查询设计实验.docx_第2页
第2页 / 共12页
实验四查询设计实验.docx_第3页
第3页 / 共12页
实验四查询设计实验.docx_第4页
第4页 / 共12页
实验四查询设计实验.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

实验四查询设计实验.docx

《实验四查询设计实验.docx》由会员分享,可在线阅读,更多相关《实验四查询设计实验.docx(12页珍藏版)》请在冰豆网上搜索。

实验四查询设计实验.docx

实验四查询设计实验

《数据库原理与应用》

课程实验报告

实验四查询设计实验

 

所在院(系):

数学与信息技术学院

班级:

学号:

姓名:

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-1所示:

图1-1查询所有课程信息

(b)查询来自江苏或山东的学生学号和姓名,并以中文名称显示输出的列名。

selectS_IDas学号,S_Nameas姓名fromStudent

whereBirth_Placein('江苏','山东')

执行结果如下图1-2所示:

图1-2查询来自山东或江苏的学生学号和姓名

(c)查询选修了课程的学生学号(一人选了多门课程的话,学号只显示一次)。

selectdistincts_IDas学号fromSC

执行结果如下图1-3所示:

图1-3选修了课程的学生学号

(d)查询选修课程号为07253001的学号和成绩,并要求对查询结果按成绩降序排列,如果成绩相同则按学号升序排列。

selectS_ID,EXAM_GradefromSC

whereC_ID='07253001'

orderbyEXAM_Gradedesc,S_IDasc

执行结果如下图1-4所示:

图1-4查询课程号为07253001的学号和成绩

(e)查询所有学生的学号、姓名和年龄。

selectS_IDas学号,S_NAMEas姓名,year(getdate())-year(Date_of_Birth)as年龄fromStudent

执行结果如下图1-5所示:

图1-5查询所有学生的学号姓名和年龄

(f)查询选修课程号为07253001的成绩在85-95之间的学生学号和成绩,并将成绩乘以0.7输出。

selectS_ID,EXAM_Grade*0.7asgradefromSC

whereC_ID='07253001'andEXAM_Gradebetween85and95

执行结果如下图1-6所示:

图1-6查询选修课程号位07253001的成绩

(g)查询数学与信息技术学院(DEPT_ID为07)或物理与电子工程学院(DEPT_ID为09)姓张的学生的信息。

select*fromStudentwhereDEPT_IDin('07','09')andS_Namelike'张%'

执行结果如下图1-7所示:

图1-7查询数信院或物电院姓张的学生信息

(h)查询所有核心课程(课程名中带*的)的情况。

select*fromCoursewhereC_Namelike'%*%'

执行结果如下图1-8所示:

图1-8查询所有带*的核心课程

(i)查询缺少了成绩的学生的学号和课程号,查询结果按课程号升序排列。

selectS_ID,C_IDfromSCwhereEXAM_GradeisnullorderbyC_ID

执行结果如下图1-9所示:

图1-9查询缺少了成绩的学生的学号和课程号

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-1所示:

图2-1查询每个学生的情况和所选课程

(b)查询学生的学号、姓名、选修的课程名及成绩。

selectStudent.S_ID,S_Name,C_Name,EXAM_Grade

fromStudentinnerjoinSConStudent.S_ID=SC.S_IDinnerjoinCourseonSC.C_ID=Course.C_ID

执行结果如下图2-1所示:

图2-2查询学生的学号姓名选修的课程名及成绩

(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-3所示:

图2-3查询C语言成绩在85分以上的学生学号姓名和成绩

(d)查询和学生柏文楠是同一个民族的学生(用自身联接实现)。

selectS_NamefromStudent

whereNationality=(selectNationalityfromStudentwhereS_Name='柏文楠')

执行结果如下图2-4所示:

图2-4查询和柏文楠是同一个民族的学生

(e)分别用等值联接和内联接查询有授课记录的老师的姓名。

●等值联接

selectdistinctT_NamefromTeacherinnerjoinTConTeacher.T_ID=TC.T_ID

●内联接

selectdistinctT_NamefromTeacher,TCwhereTeacher.T_ID=TC.T_ID

执行结果如下图2-5所示:

图2-5查询和柏文楠是同一个民族的学生

(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-5所示:

图2-5外联接查询所有老师的授课情况

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通配符及实例

通配符

说明

实例

%

表示包含零个或多个字符的任意字符串。

select*

fromStudent

whereS_Namelike'%王%'

将查找在“姓名”字段中任意位置包含"王"的所有学生。

_(下划线)

表示任何单个字符。

select*

fromStudent

whereS_Namelike'_ean'将查找以“ean”结尾的所有4个字母的名字(dean、sean等)的学生。

[]

指定范围([a-f])或集合([abcdef])中的任何单个字符。

select*

fromStudent

whereS_Namelike'[c-p]arsen'将查找以arsen结尾并且以介于c与p之间的任何单个字符开始的作者姓氏,例如carsen、larsen、karsen等。

[^]

不属于指定范围([a-f])或集合([abcdef])的任何单个字符。

select*

fromStudent

whereS_Namelike'de[^l]%'将查找以de开始并且其后的字母不为l的所有作者的姓氏。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 可爱清新

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1