数据库原理及应用实验指导书
update Course set Cpno = '7' where Cno = '5'; update Course set Cpno = '6' where Cno = '7'; /*为表Course添加数据*/ go
insert into SC values('200215121', '1',92); insert into SC values('200215121', '2',85); insert into SC values('200215121', '3',88); insert into SC values('200215122', '2',90); insert into SC values('200215122', '3',80); /*为表SC添加数据*/ go ② 利用SQL Server集成管理器(简称SSMS)交互式输入数据。
4.4 对学生关系Student、课程关系Course和选修关系SC进行查询。
4.4.1 基本练习
(1)
SELECT语句的基本用法
例如:查询全体学生的详细记录。 SELECT Sno,Sname,Ssex,Sage,Sdept FROM Student
(2) 使用WHERE子句进行有条件的查询
例如:查询选修2号课程且成绩在90分以上的所有学生的学号、姓名 SELECT Student.Sno, student.Sname FROM Student, SC
WHERE Student.Sno = SC.Sno AND SC.Cno= ' 2 ' AND SC.Grade > 90 (3) 使用IN,NOT IN,BETWEEN等谓词查询
例如:查询信息系(IS)、数学系(MA)和计算机科学系(CS)学生的姓名和性别。 SELECT Sname,Ssex FROM Student
WHERE Sdept IN ( 'IS','MA','CS' )
例如:查询年龄在20~23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄。 SELECT Sname,Sdept,Sage
6
数据库原理及应用实验指导书
FROM Student
WHERE Sage BETWEEN 20 AND 23 (4)利用LIKE子句实现模糊查询
例如:查询所有姓刘学生的姓名、学号和性别。 SELECT Sname,Sno,Ssex FROM Student
WHERE Sname LIKE '刘%' (5)利用ORDER子句为结果排序
例如:查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列。 SELECT Sno,Grade FROM SC WHERE Cno= '3' ORDER BY Grade DESC
(6)用SQL Server的统计函数进行统计计算 例如:计算1号课程的学生平均成绩。 SELECT AVG(Grade) FROM SC WHERE Cno= '1'
(7)用GR0UP BY子句实现分组查询的方法 例如:查询选修了3门以上课程的学生学号。 SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*) >3
4.4.2 扩展练习(要求写出并执行SQL语句来完成以下各种操作,记录查询结果)
7
数据库原理及应用实验指导书
(1)查询全体学生的学号、姓名和年龄;
SELECT Sno,Sname,Sage FROM Student
200215121 李勇 20 200215122 刘晨 19 200215123 王敏 18 200215125
张立
19
(2)查询所有计算机系学生的详细记录;
SELECT *
FROM Student
where Sdept IN ('CS')
200215121 李勇 男 20 CS 200215122 刘晨 女 19 CS
(3)找出考试成绩为优秀(90分及以上)或不及格的学生的学号、课程号及成绩;
SELECT Sno,Cno,Grade
FROM SC
WHERE Grade<60 OR Grade>90;
200215121 1 92
(4)查询年龄不在19~20岁之间的学生姓名、性别和年龄;
SELECT Sname,Ssex,Sage
FROM Student
WHERE Sage NOT BETWEEN 19 AND 20; 王敏 女 18
(5)查询数学系(MA)、信息系(IS)的学生的姓名和所在系;
SELECT Sname,Sdept
FROM Student
where Sdept IN ('MA','IS')
王敏 MA 张立
IS
(6)查询名称中包含“数据”的所有课程的课程号、课程名及其学分;
SELECT Cno,Cname,Ccredit FROM Course
WHERE Cname LIKE '数据%';
1 数据库 4 5 数据结构 4 6
数据处理
2
(7) 找出所有没有选修课成绩的学生学号和课程号;
8
数据库原理及应用实验指导书
SELECT Sno,Cno FROM SC
WHERE Grade IS NULL;
(思考:如何查询所有没有选修课成绩的计算机系的学生学号和课程号?)
SELECT SC.Sno,Cno
FROM SC,Student
WHERE Sdept='CS' AND Grade IS NULL ;
(8)查询学生200215121选修课的最高分、最低分以及平均成绩;
SELECT MAX(Grade),MIN(Grade),AVG(Grade) FROM SC
WHERE Sno='200215121'; 92 85 88
(9)查询选修了2号课程的学生的学号及其成绩,查询结果按成绩升序排列;
SELECT Sno,Grade FROM SC
WHERE Cno='2'
ORDER BY Grade ASC;
200215121 200215122
85 90
(10)查询每个系名及其学生的平均年龄。
SELECT Sdept,AVG(Sage) FROM Student GROUP BY Sdept
CS IS MA
19 19 18
(思考:如何查询学生平均年龄在19岁以下(含19岁)的系别及其学生的平均年龄?)
SELECT Sdept,AVG(Sage) FROM Student GROUP BY Sdept HAVING AVG(Sage)<=19
CS IS MA
19 19 18
实验三 SQL的多表数据查询(2学时)
1、实验目的
(3) 掌握RDBMS的数据多表查询功能 (4) 掌握SQL语言的数据多表查询语句
2、实验内容
9
数据库原理及应用实验指导书
(8) 等值连接查询(含自然连接查询)与非等值连接查询 (9) 自身连接查询 (10) 外连接查询
(11) 复合条件连接查询
(12) 嵌套查询(带有IN谓词的子查询) (13) 嵌套查询(带有比较运算符的子查询) (14) 嵌套查询(带有ANY或ALL谓词的子查询) (15) 嵌套查询(带有EXISTS谓词的子查询) (16) 集合查询
3、实验要求
(3) 熟练掌握SQL的连接查询语句 (4) 熟练掌握SQL的嵌套查询语句 (5) 掌握表名前缀、别名前缀的用法
(6) 掌握不相关子查询和相关子查询的区别和用法
(7) 掌握不同查询之间的等价替换方法(一题多解)及限制 (8) 记录实验结果,认真完成实验报告
4、实验步骤
4.1 建立示例数据库S_T(复习)
表Student 学号 姓名 性别 年龄 所在系 Sno Sname Ssex Sage Sdept 200215121 李勇 男 20 CS 200215122 刘晨 女 19 CS 200215123 王敏 女 18 MA 200215125 张立 男 19 IS 表Course 课程号 课程名 现行课 学分 Cno Cname Cpno Ccredit 1 数据库 5 4 2 数学 2 3 信息系统 5 4 4 操作系统 6 3 5 数据结构 7 4 6 数据处理 2 7 PASCAL语言 6 4 表SC 学号 课程号 成绩 Sno Cno Grade 200215121 1 92 200215121 2 85 200215121 3 88 200215122 2 90 200215122 3 80 在SQL Server集成管理器的查询窗口中输入如下SQL语句序列来创建示例数据库。 /* 创建示例数据库S_T,包括3个表,即学生表Student、课程表Course和选课表SC*/ create database S_T; go
use S_T; /*将S_T设为当前数据库*/ create table Student
10