数据库实验——数据查询by SixInNight

实验目的

通过对实验二建立的数据库关系表和视图的各种查询的操作,
加深对 SQL 语言和 Transact SQL 查询语言的了解,
掌握相关查询语句的语法及使用方法。

实验要求

  1. 分别用 Transact_SQL 语句完成以上操作;
  2. 要求学生独立完成以上内容;
  3. 按照实验步骤完成实验后,撰写报告内容。

实验内容

  1. 简单的查询操作,包括单表的查询、选择条件、结果排序等的练习;
  2. 多表的连接查询,包括等值连接、自然连接等;
  3. 复杂的查询操作,包括使用分组等库函数的查询操作;
  4. 练习带有 IN、比较符的嵌套查询。

实验步骤

  1. 简单查询:
    (1) 查询班号为“g09402”班的学生的学号和姓名;
    (2) 查询“网络技术与实践”课程的周学时和学分;
    (3) 查询选修了课程编号为“dep04_s001”的学生的学号和成绩,并将成绩按降序输出;
    (4) 查询所有姓张的学生的信息;
    (5) 查询出生在 1994 年和 1995 年间的学生信息;
    (6) 查询 1992 年以后出生的女学生的学号、姓名、性别和出生日期,结果按年龄从小到大排序;
    (7) 显示所有学生的相关信息,并汇总学生总人数。

  2. 在多表连接的查询实验中,在 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 程序设计与开发”的老师姓名和职称。

  3. 在嵌套查询实验中,在 SQL SERVER 提供的交互式语言环境下用 Transact SQL 语句完成以下查询操作,要求写嵌套查询语句:
    (1) 查询所有已获“副教授”职称的女教师的姓名、性别;
    (2) 查询开设了课程 ID 为”dep01_s002”的课程的教师的相关信息;
    (3) 查询选修了”dep01_s002”课程的学生学号、姓名;
    (4) 查询课程考试不及格的学生的姓名、性别;
    (5) 查询网页设计课程不及格的学生姓名、性别和家庭地址;
    (6) 查询选修了“计算机基础”的学生的学号和姓名;
    (7) 查询没有选修 “计算机基础”的学生的学号和姓名;
    (8) 查询至少选修了学号为“g0940201”的学生所选修的所有课程的学生的学号和姓名。

Transact_SQL 语句 (和实验步骤对应

  1. 简单查询:
	--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
  1. 在多表连接的查询实验中,在 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程序设计与开发'
  1. 在嵌套查询实验中,在 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号))

实验结果

截图就不放了,本懒蛋溜了溜了(_ _(

猜你喜欢

转载自blog.csdn.net/hongwangdb/article/details/106950977