实验目的
通过对实验二建立的数据库关系表和视图的各种查询的操作,
加深对 SQL 语言和 Transact SQL 查询语言的了解,
掌握相关查询语句的语法及使用方法。
实验要求
- 分别用 Transact_SQL 语句完成以上操作;
- 要求学生独立完成以上内容;
- 按照实验步骤完成实验后,撰写报告内容。
实验内容
- 简单的查询操作,包括单表的查询、选择条件、结果排序等的练习;
- 多表的连接查询,包括等值连接、自然连接等;
- 复杂的查询操作,包括使用分组等库函数的查询操作;
- 练习带有 IN、比较符的嵌套查询。
实验步骤
-
简单查询:
(1) 查询班号为“g09402”班的学生的学号和姓名;
(2) 查询“网络技术与实践”课程的周学时和学分;
(3) 查询选修了课程编号为“dep04_s001”的学生的学号和成绩,并将成绩按降序输出;
(4) 查询所有姓张的学生的信息;
(5) 查询出生在 1994 年和 1995 年间的学生信息;
(6) 查询 1992 年以后出生的女学生的学号、姓名、性别和出生日期,结果按年龄从小到大排序;
(7) 显示所有学生的相关信息,并汇总学生总人数。 -
在多表连接的查询实验中,在 SQL SERVER 提供的交互式语言环境下用 Transact SQL 语句完成以下查询操作:
(1) 查询选修了课程编号为“dep04_s002”且成绩高于 85 分的学生的学号、姓名和成绩;
(2) 查询所有学生的学号、姓名、选修的课程名称和成绩;
(3) 查询计算机科学系林红同学选修的课程名称、学分和成绩(考试成绩>=60 有学分,否则无学分);
(4) 查询每个教师的基本信息及教师类别;
(5) 使用完全外联接查看“学生选课”数据库中每位教师的授课情况;
(6) 查询选课程最多的学生由高到低排序;
(7) 查询计算机系的教师授课课程的选修情况;
(8) 查询纪云老师和乔红老师教授的同 1 门课程并列出课程名称;
(9) 查询由严为老师授课而没有由乔红老师授课的课程;
(10) 查询至少选修了三门课程的学生的学号和姓名;
(11) 查询选修课程号为“dep04_b001”的学生的平均成绩;
(12) 查询所有学生的学号和其选修课程的最高成绩,要求他的选修课程中没有成绩为空的;
(13) 查询严为老师 2011/2012 学年所授“软件开发技术”课程的最高成绩及此学生的学号、姓名、班级;
(14) 查询 SQL SERVER 数据库开发技术课程用过的教材名称,作者和出版社;
(15) 查询计算机科学系讲授过“JAVA 程序设计与开发”的老师姓名和职称。 -
在嵌套查询实验中,在 SQL SERVER 提供的交互式语言环境下用 Transact SQL 语句完成以下查询操作,要求写嵌套查询语句:
(1) 查询所有已获“副教授”职称的女教师的姓名、性别;
(2) 查询开设了课程 ID 为”dep01_s002”的课程的教师的相关信息;
(3) 查询选修了”dep01_s002”课程的学生学号、姓名;
(4) 查询课程考试不及格的学生的姓名、性别;
(5) 查询网页设计课程不及格的学生姓名、性别和家庭地址;
(6) 查询选修了“计算机基础”的学生的学号和姓名;
(7) 查询没有选修 “计算机基础”的学生的学号和姓名;
(8) 查询至少选修了学号为“g0940201”的学生所选修的所有课程的学生的学号和姓名。
Transact_SQL 语句 (和实验步骤对应
- 简单查询:
--1.1 查询班号为“g09402”班的学生的学号和姓名
USE 学生选课
SELECT 学生ID号, 学生姓名 FROM STUDENT
WHERE 班级ID号='g09402'
--1.2 查询“网络技术与实践”课程的周学时和学分
SELECT 周学时, 课程学分 FROM COURSE
WHERE 课程名称='网络技术与实践'
--1.3 查询选修了课程编号为“dep04_s001”的学生的学号和成绩,并将成绩按降序输出
SELECT 学生ID号, 分数 FROM STUDENT_COURSE
WHERE 课程ID号='dep04_s001' ORDER BY 分数 DESC
--1.4 查询所有姓张的学生的信息
SELECT * FROM STUDENT
WHERE 学生姓名 LIKE '张%'
--1.5 查询出生在1994年和1995年间的学生信息
SELECT * FROM STUDENT
WHERE 出生时间>'1994-01-01' AND 出生时间<'1995-12-31'
--1.6 查询1992年以后出生的女学生的学号、姓名、性别和出生日期,结果按年龄从小到大排序
SELECT 学生ID号, 学生姓名, 性别, 出生时间 FROM STUDENT
WHERE 出生时间>'1992-01-01' AND 性别='女' ORDER BY 出生时间
--1.7 显示所有学生的相关信息,并汇总学生总人数
SELECT * FROM STUDENT
SELECT COUNT(*) FROM STUDENT
- 在多表连接的查询实验中,在 SQL SERVER 提供的交互式语言环境下用 Transact SQL 语句完成以下查询操作:
--2.1 查询选修了课程编号为“dep04_s002”且成绩高于85分的学生的学号、姓名和成绩
USE 学生选课
SELECT STUDENT.学生ID号, STUDENT.学生姓名, STUDENT_COURSE.分数 FROM STUDENT, STUDENT_COURSE
WHERE STUDENT.学生ID号=STUDENT_COURSE.学生ID号 AND STUDENT_COURSE.课程ID号='dep04_s002' AND STUDENT_COURSE.分数>85
--2.2 查询所有学生的学号、姓名、选修的课程名称和成绩
SELECT STUDENT.学生ID号, STUDENT.学生姓名, STUDENT_COURSE.课程ID号, STUDENT_COURSE.分数 FROM STUDENT, STUDENT_COURSE
WHERE STUDENT.学生ID号=STUDENT_COURSE.学生ID号
--2.3 查询计算机科学系林红同学选修的课程名称、学分和成绩
SELECT COURSE.课程名称, STUDENT_COURSE.学分, STUDENT_COURSE.分数 FROM COURSE, STUDENT, STUDENT_COURSE
WHERE STUDENT.学生姓名='林红' AND STUDENT.学生ID号=STUDENT_COURSE.学生ID号 AND STUDENT_COURSE.课程ID号=COURSE.课程号
--2.4 查询每个教师的基本信息及教师类别
SELECT TEACHER.*, 教师类别.类别名称 FROM TEACHER, 教师类别
WHERE TEACHER.类别编号=教师类别.类别编号
--2.5 使用完全外联接查看“学生选课”数据库中每位教师的授课情况
SELECT TEACHER.教师ID号, TEACHER.教师姓名, TEACHER_COURSE_CLASS.* FROM TEACHER FULL OUTER JOIN TEACHER_COURSE_CLASS
ON TEACHER.教师ID号=TEACHER_COURSE_CLASS.教师编号
--2.6 查询选课程最多的学生由高到低排序
SELECT STUDENT_COURSE.学生ID号, COUNT(STUDENT_COURSE.课程ID号) FROM STUDENT_COURSE
GROUP BY STUDENT_COURSE.学生ID号 ORDER BY COUNT(STUDENT_COURSE.课程ID号) DESC
--2.7 查询计算机系的教师授课课程的选修情况
SELECT STUDENT_COURSE.* FROM TEACHER_COURSE_CLASS, TEACHER, STUDENT_COURSE
WHERE TEACHER.部门ID号='dep_04' AND TEACHER.教师ID号=TEACHER_COURSE_CLASS.教师编号 AND TEACHER_COURSE_CLASS.课程号=STUDENT_COURSE.课程ID号
--2.8 查询纪云老师和乔红老师教授的同1门课程并列出课程名称
SELECT COURSE.课程名称 FROM COURSE, TEACHER_COURSE_CLASS, TEACHER
WHERE COURSE.课程号=TEACHER_COURSE_CLASS.课程号 AND TEACHER_COURSE_CLASS.教师编号=TEACHER.教师ID号 AND TEACHER.教师姓名='纪云'
AND EXISTS(
SELECT COURSE.课程号 FROM TEACHER_COURSE_CLASS, TEACHER
WHERE COURSE.课程号=TEACHER_COURSE_CLASS.课程号 AND TEACHER_COURSE_CLASS.教师编号=TEACHER.教师ID号 AND TEACHER.教师姓名='乔红'
)
--2.9 查询由严为老师授课而没有由乔红老师授课的课程
USE 学生选课
SELECT COURSE.* FROM COURSE, TEACHER, TEACHER_COURSE_CLASS
WHERE TEACHER.教师姓名='严为' AND TEACHER.教师姓名!='乔红' AND TEACHER.教师ID号=TEACHER_COURSE_CLASS.教师编号
AND TEACHER_COURSE_CLASS.课程号=COURSE.课程号
--2.10 查询至少选修了三门课程的学生的学号和姓名
SELECT STUDENT.学生ID号, STUDENT.学生姓名 FROM STUDENT, STUDENT_COURSE
WHERE STUDENT.学生ID号=STUDENT_COURSE.学生ID号 GROUP BY STUDENT.学生ID号, STUDENT.学生姓名
HAVING COUNT(STUDENT_COURSE.课程ID号)>=3
--2.11 查询选修课程号为“dep04_b001”的学生的平均成绩
SELECT AVG(STUDENT_COURSE.分数) FROM STUDENT_COURSE
WHERE STUDENT_COURSE.课程ID号='dep04_b001'
--2.12 查询所有学生的学号和其选修课程的最高成绩,要求他的选修课程中没有成绩为空的
SELECT STUDENT_COURSE.学生ID号, MAX(STUDENT_COURSE.分数) FROM STUDENT_COURSE
WHERE STUDENT_COURSE.分数>0 GROUP BY STUDENT_COURSE.学生ID号
--2.13 查询严为老师2011/2012学年所授“软件开发技术”课程的最高成绩及此学生的学号、姓名、班级
SELECT STUDENT.学生ID号, STUDENT.学生姓名, STUDENT.班级ID号 FROM STUDENT, TEACHER, TEACHER_COURSE_CLASS, STUDENT_COURSE, COURSE
WHERE TEACHER.教师姓名='严为' AND TEACHER.教师ID号=TEACHER_COURSE_CLASS.教师编号 AND TEACHER_COURSE_CLASS.学年='2011/2012'
AND TEACHER_COURSE_CLASS.课程号=COURSE.课程号 AND COURSE.课程名称='软件开发技术' AND COURSE.课程号=STUDENT_COURSE.课程ID号
AND STUDENT_COURSE.学生ID号=STUDENT.学生ID号 AND STUDENT_COURSE.分数>=ALL(
SELECT STUDENT_COURSE.分数 FROM STUDENT_COURSE
WHERE STUDENT_COURSE.课程ID号=COURSE.课程号 AND COURSE.课程名称='软件开发技术'
)
--2.14 查询SQL SERVER数据库开发技术课程用过的教材名称,作者和出版社
SELECT BOOK.教材名, BOOK.作者, BOOK.出版社 FROM BOOK, COURSE
WHERE BOOK.教材ID号=COURSE.书号 AND COURSE.课程名称='SQL Server数据库开发技术'
--2.15 查询计算机科学系讲授过“JAVA程序设计与开发”的老师姓名和职称
SELECT TEACHER.教师姓名, TEACHER.职称或职业 FROM TEACHER, DEPARTMENT, COURSE, TEACHER_COURSE_CLASS
WHERE DEPARTMENT.部门名称='计算机科学' AND DEPARTMENT.部门ID号=TEACHER.部门ID号 AND TEACHER.教师ID号=TEACHER_COURSE_CLASS.教师编号
AND TEACHER_COURSE_CLASS.课程号=COURSE.课程号 AND COURSE.课程名称='JAVA程序设计与开发'
- 在嵌套查询实验中,在 SQL SERVER 提供的交互式语言环境下用 Transact SQL 语句完成以下查询操作,要求写嵌套查询语句:
--3.1 查询所有已获“副教授”职称的女教师的姓名、性别
USE 学生选课
SELECT 教师姓名, 性别 FROM TEACHER
WHERE 职称或职业='副教授' AND 教师ID号 IN (
SELECT 教师ID号 FROM TEACHER
WHERE 性别='女')
--3.2 查询开设了课程ID为”dep01_s002”的课程的教师的相关信息
SELECT * FROM TEACHER
WHERE 教师ID号 IN (
SELECT 教师编号 FROM TEACHER_COURSE_CLASS
WHERE 课程号='dep01_s002')
--3.3 查询选修了”dep01_s002”课程的学生学号、姓名
SELECT SC.学生ID号, 学生姓名 FROM STUDENT, (
SELECT 学生ID号 FROM STUDENT_COURSE
WHERE 课程ID号='dep01_s002') AS SC
WHERE SC.学生ID号=STUDENT.学生ID号
--3.4 查询课程考试不及格的学生的姓名、性别
SELECT 学生姓名, 性别 FROM STUDENT
WHERE 学生ID号 IN (
SELECT 学生ID号 FROM STUDENT_COURSE
WHERE 分数<60)
--3.5 查询网页设计课程不及格的学生姓名、性别和家庭地址
SELECT 学生姓名, 性别, 家庭住址 FROM STUDENT
WHERE 学生ID号 IN (
SELECT 学生ID号 FROM STUDENT_COURSE, COURSE
WHERE 分数<60 AND 课程名称='网页设计' AND COURSE.课程号=STUDENT_COURSE.课程ID号)
--3.6 查询选修了“计算机基础”的学生的学号和姓名
SELECT 学生ID号, 学生姓名 FROM STUDENT
WHERE 学生ID号 IN (
SELECT STUDENT_COURSE.学生ID号 FROM COURSE, STUDENT_COURSE
WHERE STUDENT_COURSE.课程ID号=COURSE.课程号 AND COURSE.课程名称='计算机基础')
--3.7 查询没有选修 “计算机基础”的学生的学号和姓名
SELECT 学生ID号, 学生姓名 FROM STUDENT
WHERE 学生ID号 NOT IN (
SELECT STUDENT_COURSE.学生ID号 FROM COURSE, STUDENT_COURSE
WHERE STUDENT_COURSE.课程ID号=COURSE.课程号 AND COURSE.课程名称='计算机基础')
--3.8 查询至少选修了学号为“g0940201”的学生所选修的所有课程的学生的学号和姓名
SELECT DISTINCT SC.学生ID号, S.学生姓名 FROM STUDENT S, STUDENT_COURSE SC
WHERE SC.学生ID号=S.学生ID号 AND NOT EXISTS(
SELECT * FROM STUDENT_COURSE SD
WHERE SD.学生ID号='g0940201' AND NOT EXISTS(
SELECT * FROM STUDENT_COURSE SE
WHERE SE.课程ID号=SD.课程ID号 AND SE.学生ID号=SC.学生ID号))
实验结果
截图就不放了,本懒蛋溜了溜了(_ _(
