3 2 Student Sno Sname Ssex Sage Sdept












![例题 [例5] 建立一个“学生”表Student,它由学号 Sno、姓名Sname、性别Ssex、年龄Sage、 所在系Sdept五个属性组成。其中学号不能为 空,值是唯一的,并且姓名取值也唯一。 CREATE TABLE Student (Sno CHAR(12) Primary key, Sname 例题 [例5] 建立一个“学生”表Student,它由学号 Sno、姓名Sname、性别Ssex、年龄Sage、 所在系Sdept五个属性组成。其中学号不能为 空,值是唯一的,并且姓名取值也唯一。 CREATE TABLE Student (Sno CHAR(12) Primary key, Sname](https://slidetodoc.com/presentation_image_h/13ef6ac51b09037ded42c186a045fe53/image-13.jpg)
![例题 [例6] 建立一个“课程”表Course。 CREATE TABLE Course( Cno varchar 2 (6) Primary KEY , Cname 例题 [例6] 建立一个“课程”表Course。 CREATE TABLE Course( Cno varchar 2 (6) Primary KEY , Cname](https://slidetodoc.com/presentation_image_h/13ef6ac51b09037ded42c186a045fe53/image-14.jpg)
![例题 (续) p [例7] 建立一个“学生选课”表SC,它由学号Sno、 课程号Cno,修课成绩Grade组成,其中(Sno, Cno)为主码。 CREATE TABLE SC( Sno CHAR(12) , Cno 例题 (续) p [例7] 建立一个“学生选课”表SC,它由学号Sno、 课程号Cno,修课成绩Grade组成,其中(Sno, Cno)为主码。 CREATE TABLE SC( Sno CHAR(12) , Cno](https://slidetodoc.com/presentation_image_h/13ef6ac51b09037ded42c186a045fe53/image-15.jpg)





![例题 [例10] 增加课程名称必须取惟一值的约束条件 ALTER TABLE Course ADD UNIQUE(Cname) 2021/2/26 21 例题 [例10] 增加课程名称必须取惟一值的约束条件 ALTER TABLE Course ADD UNIQUE(Cname) 2021/2/26 21](https://slidetodoc.com/presentation_image_h/13ef6ac51b09037ded42c186a045fe53/image-21.jpg)

![例题 [例11] 删除Student表 DROP TABLE Student; 2021/2/26 23 例题 [例11] 删除Student表 DROP TABLE Student; 2021/2/26 23](https://slidetodoc.com/presentation_image_h/13ef6ac51b09037ded42c186a045fe53/image-23.jpg)


![例题 [例14] 为学生-课程数据库中的Student,Course二个表建立 索引。其中Student表按姓名升序建索引,Course表按课程名 降序建唯一索引。 CREATE INDEX Stusname ON Student(Sname ASC) CREATE UNIQUE INDEX 例题 [例14] 为学生-课程数据库中的Student,Course二个表建立 索引。其中Student表按姓名升序建索引,Course表按课程名 降序建唯一索引。 CREATE INDEX Stusname ON Student(Sname ASC) CREATE UNIQUE INDEX](https://slidetodoc.com/presentation_image_h/13ef6ac51b09037ded42c186a045fe53/image-26.jpg)







![1. 查询指定列 [例1] 查询全体学生的学号与姓名。 SELECT Sno, Sname FROM Student [例2] 查询全体学生的姓名、学号、所在系。 SELECT Sname, Sno, 1. 查询指定列 [例1] 查询全体学生的学号与姓名。 SELECT Sno, Sname FROM Student [例2] 查询全体学生的姓名、学号、所在系。 SELECT Sname, Sno,](https://slidetodoc.com/presentation_image_h/13ef6ac51b09037ded42c186a045fe53/image-34.jpg)
![2. 查询全部列 [例3] 查询全体学生的详细记录。 SELECT Sno, Sname, Ssex, Sage, Sdept FROM Student 或 SELECT 2. 查询全部列 [例3] 查询全体学生的详细记录。 SELECT Sno, Sname, Ssex, Sage, Sdept FROM Student 或 SELECT](https://slidetodoc.com/presentation_image_h/13ef6ac51b09037ded42c186a045fe53/image-35.jpg)




![[例5. 1] 使用列别名改变查询结果的列标题 SELECT Sname NAME, 'Year of Birth: ' BIRTH, 2000 -Sage BIRTHDAY, [例5. 1] 使用列别名改变查询结果的列标题 SELECT Sname NAME, 'Year of Birth: ' BIRTH, 2000 -Sage BIRTHDAY,](https://slidetodoc.com/presentation_image_h/13ef6ac51b09037ded42c186a045fe53/image-40.jpg)




![ALL 与 DISTINCT [例6] 查询选修了课程的学生学号。 (1) SELECT (ALL) Sno FROM SC 结果: Sno ------- ALL 与 DISTINCT [例6] 查询选修了课程的学生学号。 (1) SELECT (ALL) Sno FROM SC 结果: Sno -------](https://slidetodoc.com/presentation_image_h/13ef6ac51b09037ded42c186a045fe53/image-45.jpg)




![(1) 比较大小 [例7] 查询计算机科学系全体学生的名单 SELECT Sno, Sname, Ssex FROM Student WHERE Sdept = ‘CS’ (1) 比较大小 [例7] 查询计算机科学系全体学生的名单 SELECT Sno, Sname, Ssex FROM Student WHERE Sdept = ‘CS’](https://slidetodoc.com/presentation_image_h/13ef6ac51b09037ded42c186a045fe53/image-50.jpg)
![(1) 比较大小(续) [例8] 查询所有年龄在 20岁以下的学生姓名及其年龄。 SELECT Sname, Sage FROM Student WHERE Sage < 20 (1) 比较大小(续) [例8] 查询所有年龄在 20岁以下的学生姓名及其年龄。 SELECT Sname, Sage FROM Student WHERE Sage < 20](https://slidetodoc.com/presentation_image_h/13ef6ac51b09037ded42c186a045fe53/image-51.jpg)

![(2) 确定范围 p 使用谓词 BETWEEN … AND … NOT BETWEEN … AND … [例10] (2) 确定范围 p 使用谓词 BETWEEN … AND … NOT BETWEEN … AND … [例10]](https://slidetodoc.com/presentation_image_h/13ef6ac51b09037ded42c186a045fe53/image-53.jpg)
![例题(续) [例11] 查询年龄不在 20~23岁之间的学生姓名、系别 和年龄。 SELECT Sname, Sdept, Sage FROM Student WHERE Sage NOT 例题(续) [例11] 查询年龄不在 20~23岁之间的学生姓名、系别 和年龄。 SELECT Sname, Sdept, Sage FROM Student WHERE Sage NOT](https://slidetodoc.com/presentation_image_h/13ef6ac51b09037ded42c186a045fe53/image-54.jpg)





![例题 1) 匹配模板为固定字符串 [例14] 查询学号为 200215121的学生的详细情况。 SELECT * FROM Student WHERE Sno LIKE '200215121'; 例题 1) 匹配模板为固定字符串 [例14] 查询学号为 200215121的学生的详细情况。 SELECT * FROM Student WHERE Sno LIKE '200215121';](https://slidetodoc.com/presentation_image_h/13ef6ac51b09037ded42c186a045fe53/image-60.jpg)




![例题(续) 3) 使用换码字符将通配符转义为普通字符 [例19] 查询DB_Design课程的课程号和学分。 SELECT Cno, Ccredit FROM Course WHERE Cname LIKE 'DB_Design' 例题(续) 3) 使用换码字符将通配符转义为普通字符 [例19] 查询DB_Design课程的课程号和学分。 SELECT Cno, Ccredit FROM Course WHERE Cname LIKE 'DB_Design'](https://slidetodoc.com/presentation_image_h/13ef6ac51b09037ded42c186a045fe53/image-65.jpg)


![例题(续) [例22] 查所有有成绩的学生学号和课程号。 SELECT Sno, Cno FROM SC WHERE Grade IS NOT NULL 2021/2/26 例题(续) [例22] 查所有有成绩的学生学号和课程号。 SELECT Sno, Cno FROM SC WHERE Grade IS NOT NULL 2021/2/26](https://slidetodoc.com/presentation_image_h/13ef6ac51b09037ded42c186a045fe53/image-68.jpg)

![例题 [例23] 查询计算机系年龄在 20岁以下的学生姓名。 SELECT Sname FROM Student WHERE Sdept= 'CS' AND Sage<20 2021/2/26 例题 [例23] 查询计算机系年龄在 20岁以下的学生姓名。 SELECT Sname FROM Student WHERE Sdept= 'CS' AND Sage<20 2021/2/26](https://slidetodoc.com/presentation_image_h/13ef6ac51b09037ded42c186a045fe53/image-70.jpg)
![改写[例12] 查询信息系(IS)、数学系(MA)和计算机科学系( CS)学生的姓名和性别。 SELECT Sname, Ssex FROM Student WHERE Sdept IN ( 'IS', 'MA', 改写[例12] 查询信息系(IS)、数学系(MA)和计算机科学系( CS)学生的姓名和性别。 SELECT Sname, Ssex FROM Student WHERE Sdept IN ( 'IS', 'MA',](https://slidetodoc.com/presentation_image_h/13ef6ac51b09037ded42c186a045fe53/image-71.jpg)
![改写[例10] 查询年龄在 20~23岁(包括 20岁和23岁) 之间的学生的姓名、系别和年龄。 SELECT Sname, Sdept, Sage FROM Student WHERE Sage BETWEEN 改写[例10] 查询年龄在 20~23岁(包括 20岁和23岁) 之间的学生的姓名、系别和年龄。 SELECT Sname, Sdept, Sage FROM Student WHERE Sage BETWEEN](https://slidetodoc.com/presentation_image_h/13ef6ac51b09037ded42c186a045fe53/image-72.jpg)









![使用集函数 (续) [例30] 查询学生 200215012选修课程的总分 SELECT SUM(grade) FROM SC WHERE Sno= ' 200215012 ' 使用集函数 (续) [例30] 查询学生 200215012选修课程的总分 SELECT SUM(grade) FROM SC WHERE Sno= ' 200215012 '](https://slidetodoc.com/presentation_image_h/13ef6ac51b09037ded42c186a045fe53/image-82.jpg)




![使用GROUP BY子句分组 [例31] 求各个课程号及相应的选课人数。 SELECT Cno, COUNT(Sno) FROM SC GROUP BY Cno 结果 Cno 使用GROUP BY子句分组 [例31] 求各个课程号及相应的选课人数。 SELECT Cno, COUNT(Sno) FROM SC GROUP BY Cno 结果 Cno](https://slidetodoc.com/presentation_image_h/13ef6ac51b09037ded42c186a045fe53/image-87.jpg)

![使用HAVING短语筛选最终输出结果 [例32] 查询选修了2门以上课程的学生学号。 SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*) >2 2021/2/26 使用HAVING短语筛选最终输出结果 [例32] 查询选修了2门以上课程的学生学号。 SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*) >2 2021/2/26](https://slidetodoc.com/presentation_image_h/13ef6ac51b09037ded42c186a045fe53/image-89.jpg)
![例题 [例] 查询有2门以上课程是 90分以上的 学生的学号及(90分以上的)课程数 SELECT Sno, COUNT(*) FROM SC WHERE Grade>=90 GROUP BY 例题 [例] 查询有2门以上课程是 90分以上的 学生的学号及(90分以上的)课程数 SELECT Sno, COUNT(*) FROM SC WHERE Grade>=90 GROUP BY](https://slidetodoc.com/presentation_image_h/13ef6ac51b09037ded42c186a045fe53/image-90.jpg)



- Slides: 93
3. 2 学生课程数据库-----学生 Student 学 号 Sno 姓 名 Sname 性 别 Ssex 年 龄 Sage 所在系 Sdept 2002151 21 李勇 男 20 CS 2002151 22 刘晨 女 19 IS 2002151 23 王敏 女 18 MA 2002151 25 张立 男 19 IS (a) 2021/2/26 6
3. 2 学生课程数据库------选课 SC 学 号 课程号 成 绩 Sno Cno Grade 200215121 1 92 200215121 2 85 200215121 3 88 200215122 2 90 200215122 3 80 (c) 2021/2/26 8
3. 3 数 据 定 义 2021/2/26 10
例题 [例5] 建立一个“学生”表Student,它由学号 Sno、姓名Sname、性别Ssex、年龄Sage、 所在系Sdept五个属性组成。其中学号不能为 空,值是唯一的,并且姓名取值也唯一。 CREATE TABLE Student (Sno CHAR(12) Primary key, Sname VARCHAR 2(20) UNIQUE, Ssex CHAR(3) DEFAULT ('男'), Sage NUMBER(3), Sdept VARCHAR(20)) ; 2021/2/26 13
例题 [例6] 建立一个“课程”表Course。 CREATE TABLE Course( Cno varchar 2 (6) Primary KEY , Cname varchar 2 (20), Cpno varchar 2 (6), Ccredit number(2), FOREIGN KEY (Cpno) REFERENCES Course (Cno)); 2021/2/26 14
例题 (续) p [例7] 建立一个“学生选课”表SC,它由学号Sno、 课程号Cno,修课成绩Grade组成,其中(Sno, Cno)为主码。 CREATE TABLE SC( Sno CHAR(12) , Cno varchar 2(6) , Grade number(3) DEFAULT (0), Primary key (Sno, Cno), FOREIGN KEY (Sno) REFERENCES Student (Sno), FOREIGN KEY (Cno) REFERENCES Course (Cno) ); 2021/2/26 15
例题 [例10] 增加课程名称必须取惟一值的约束条件 ALTER TABLE Course ADD UNIQUE(Cname) 2021/2/26 21
例题 [例11] 删除Student表 DROP TABLE Student; 2021/2/26 23
例题 [例14] 为学生-课程数据库中的Student,Course二个表建立 索引。其中Student表按姓名升序建索引,Course表按课程名 降序建唯一索引。 CREATE INDEX Stusname ON Student(Sname ASC) CREATE UNIQUE INDEX Coursename ON Course(Cname desc) 2021/2/26 26
1. 查询指定列 [例1] 查询全体学生的学号与姓名。 SELECT Sno, Sname FROM Student [例2] 查询全体学生的姓名、学号、所在系。 SELECT Sname, Sno, Sdept FROM Student 2021/2/26 34
2. 查询全部列 [例3] 查询全体学生的详细记录。 SELECT Sno, Sname, Ssex, Sage, Sdept FROM Student 或 SELECT * FROM Student 2021/2/26 35
例题(续) 输出结果: Sname 'Yearof. Birth: ' 2004 -Sage ISLOWER(Sdept) --------- 李勇 Year of Birth: 1984 cs 刘晨 Year of Birth: 1985 is 王名 Year of Birth: 1986 ma 张立 Year of Birth: 1985 is 2021/2/26 39
[例5. 1] 使用列别名改变查询结果的列标题 SELECT Sname NAME, 'Year of Birth: ' BIRTH, 2000 -Sage BIRTHDAY, LOWER(Sdept) DEPARTMENT FROM Student; 输出结果: NAME BIRTHDAY DEPARTMENT ----------------- 李勇 Year of Birth: 1984 cs 刘晨 Year of Birth: 1985 is 王名 Year of Birth: 1986 ma 张立 Year of Birth: 1984 is 2021/2/26 40
SELECT Pname, Color, Weight FROM P SELECT Pname 名称, Color 颜色, Weight 重量 FROM P SELECT Pname as 名称, Color as 颜色, Weight as 重量 FROM P 2021/2/26 42
1. 消除取值重复的行 n 在SELECT子句中使用DISTINCT短语 假设SC表中有下列数据 Sno Cno Grade ------- 200215121 1 92 200215121 2 85 200215121 3 88 200215122 2 90 200215122 3 80 2021/2/26 44
ALL 与 DISTINCT [例6] 查询选修了课程的学生学号。 (1) SELECT (ALL) Sno FROM SC 结果: Sno ------- 200215121 200215122 2021/2/26 45
例题(续) (2) SELECT DISTINCT Sno FROM SC; 结果: Sno ------- 200215121 200215122 2021/2/26 46
例题(续) p 注意 DISTINCT短语的作用范围是所有目标列 例:查询选修课程的各种成绩 错误的写法: SELECT DISTINCT Cno, DISTINCT Grade FROM SC; 正确的写法: SELECT DISTINCT Cno, Grade FROM SC; 2021/2/26 47
(1) 比较大小 [例7] 查询计算机科学系全体学生的名单 SELECT Sno, Sname, Ssex FROM Student WHERE Sdept = ‘CS’ 2021/2/26 50
(1) 比较大小(续) [例8] 查询所有年龄在 20岁以下的学生姓名及其年龄。 SELECT Sname, Sage FROM Student WHERE Sage < 20 2021/2/26 51
(2) 确定范围 p 使用谓词 BETWEEN … AND … NOT BETWEEN … AND … [例10] 查询年龄在 20~23岁(包括 20岁和23岁)之间 的学生的姓名、系别和年龄。 SELECT Sname, Sdept, Sage FROM Student WHERE Sage BETWEEN 20 AND 23 2021/2/26 53
例题(续) [例11] 查询年龄不在 20~23岁之间的学生姓名、系别 和年龄。 SELECT Sname, Sdept, Sage FROM Student WHERE Sage NOT BETWEEN 20 AND 23 2021/2/26 54
例题 1) 匹配模板为固定字符串 [例14] 查询学号为 200215121的学生的详细情况。 SELECT * FROM Student WHERE Sno LIKE '200215121'; 等价于: SELECT * FROM Student WHERE Sno = '200215121'; 2021/2/26 60
例题(续) 3) 使用换码字符将通配符转义为普通字符 [例19] 查询DB_Design课程的课程号和学分。 SELECT Cno, Ccredit FROM Course WHERE Cname LIKE 'DB_Design' ESCAPE '' 2021/2/26 65
例题(续) [例22] 查所有有成绩的学生学号和课程号。 SELECT Sno, Cno FROM SC WHERE Grade IS NOT NULL 2021/2/26 68
例题 [例23] 查询计算机系年龄在 20岁以下的学生姓名。 SELECT Sname FROM Student WHERE Sdept= 'CS' AND Sage<20 2021/2/26 70
改写[例12] 查询信息系(IS)、数学系(MA)和计算机科学系( CS)学生的姓名和性别。 SELECT Sname, Ssex FROM Student WHERE Sdept IN ( 'IS', 'MA', 'CS' ) 可改写为: SELECT Sname, Ssex FROM Student WHERE Sdept= 'IS' OR Sdept= 'MA' OR Sdept= 'CS' 2021/2/26 71
改写[例10] 查询年龄在 20~23岁(包括 20岁和23岁) 之间的学生的姓名、系别和年龄。 SELECT Sname, Sdept, Sage FROM Student WHERE Sage BETWEEN 20 AND 23 可改写为: SELECT Sname, Sdept, Sage FROM Student WHERE Sage>=20 AND Sage<=23 2021/2/26 72
SELECT distinct Jno FROM SPJ WHERE Sno='S 1' or Sno='S 2' SELECT Pno, color FROM P WHERE Pname like '%螺%' 2021/2/26 74
使用集函数 (续) [例30] 查询学生 200215012选修课程的总分 SELECT SUM(grade) FROM SC WHERE Sno= ' 200215012 ' 2021/2/26 82
SELECT COUNT(distinct Jno) FROM SPJ WHERE Sno= 'S 1' 2021/2/26 85
使用GROUP BY子句分组 [例31] 求各个课程号及相应的选课人数。 SELECT Cno, COUNT(Sno) FROM SC GROUP BY Cno 结果 Cno COUNT(Sno) 2021/2/26 1 2 2 3 2 87
使用HAVING短语筛选最终输出结果 [例32] 查询选修了2门以上课程的学生学号。 SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*) >2 2021/2/26 89
例题 [例] 查询有2门以上课程是 90分以上的 学生的学号及(90分以上的)课程数 SELECT Sno, COUNT(*) FROM SC WHERE Grade>=90 GROUP BY Sno HAVING COUNT(*)>=2; 2021/2/26 90