1.5关系数据库标准语言SQL.ppt

上传人:本田雅阁 文档编号:3458148 上传时间:2019-08-27 格式:PPT 页数:24 大小:162.02KB
返回 下载 相关 举报
1.5关系数据库标准语言SQL.ppt_第1页
第1页 / 共24页
1.5关系数据库标准语言SQL.ppt_第2页
第2页 / 共24页
1.5关系数据库标准语言SQL.ppt_第3页
第3页 / 共24页
1.5关系数据库标准语言SQL.ppt_第4页
第4页 / 共24页
1.5关系数据库标准语言SQL.ppt_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《1.5关系数据库标准语言SQL.ppt》由会员分享,可在线阅读,更多相关《1.5关系数据库标准语言SQL.ppt(24页珍藏版)》请在三一文库上搜索。

1、1.5 关系数据库标准语言SQL,学习目标,理解SQL的特点和基本概念 掌握基本表的定义、删除与修改 理解SELECT语句的一般格式 掌握单表查询操作 掌握多表连接查询操作,SQL(Structured Query Language)简介:结构化查询语言,是一个通用的、功能极强的关系数据库标准语言。 1974年由Boyce和Chamberlin提出,并在IBM公司研制的RDBMS原型System R上实现。 1986年10月美国国家标准局ANSI批准为美国标准(SQL-86)。 1987年国际标准化组织ISO通过了这一标准。 随着数据库技术的发展而不断发展,最新标准SQL2003。,1.5 关

2、系数据库标准语言SQL,查 询,SELECT语句的一般格式: SELECT ALL|DISTINCT , FROM , WHERE GROUP BY HAVING ORDER BY ASC|DESC;,示例学生-课程数据库,单表查询:仅涉及一个表的查询。 选择表中的若干列:对应于关系代数的投影运算。 查询指定列 例1查询全体学生的学号与姓名。 SELECT Sno,Sname FROM Student; 例2查询全体学生的姓名、学号、系别。 SELECT Sname,Sno,Sdept FROM Student; 查询全部列 例3查询全体学生的详细记录。 SELECT Sno,Sname,Ss

3、ex,Sage,Sdept FROM Student; 或SELECT * FROM Student;,查询经过计算的值 例4 查询全体学生的姓名及其出生年份。 SELECT Sname,2010-Sage FROM Student; 例5查询全体学生的姓名、出生年份和系别,要求用小写字母表示所有系名。 SELECT Sname,2010-Sage ,LOWER(Sdept) FROM Student; 选择表中的若干元组 消除取值重复的行:两个原不相同的元组,投影到指定的某些列后,可能变成相同的行了,可以用DISTINCT取消它们。 例6查询选修了课程的学生学号。 SELECT Sno FR

4、OM SC; 或 SELECT ALL Sno FROM SC; SELECT DISTINCT Sno FROM SC;,查询满足条件的元组:使用WHERE子句,其中的条件有: 比较 例7查询计算机科学系全体学生的名单。 SELECT Sname FROM Student WHERE Sdept=CS;,例8查询所有年龄在20岁以下的学生姓名及其年龄。 SELECT Sname,Sage FROM Student WHERE Sage20; 例9查询考试成绩有不及格的学生学号。 SELECT DISTINCT Sno FROM SC WHERE Grade60; 确定范围 例10查询年龄在2

5、023(含边界)的学生姓名、系别和年龄。 SELECT Sname,Sdept,Sage FROM Student WHERE Sage BETWEEN 20 AND 23; 例11查询年龄不在2023的学生姓名、系别和年龄。 SELECT Sname,Sdept,Sage FROM Student WHERE Sage NOT BETWEEN 20 AND 23; 确定集合:使用谓词IN或NOT IN查找属性值属于指定集合的元组。,例12查询计算机科学系或数学系的学生姓名和性别。 SELECT Sname,Ssex FROM Student WHERE Sdept IN (IS,MA); 例

6、13查询既非计科系、也非数学系的学生姓名和性别。 SELECT Sname,Ssex FROM Student WHERE Sdept NOT IN (IS,MA); 字符匹配:谓词NOT LIKE 匹配串 ESCAPE 换码字符。其含义是查找指定的属性列值与匹配串相匹配的元组。 例14查询学号为200215121的学生详细情况。 SELECT * FROM Student WHERE Sno LIKE 200215121; 等价于:SELECT * FROM Student WHERE Sno=200215121; 例15查询所有姓刘学生的姓名、学号和性别。 SELECT Sname,Sno

7、,Ssex FROM Student WHERE Sname LIKE 刘%;,例16查询姓”欧阳”且全名为三个汉字的学生的姓名。 SELECT Sname FROM Student WHERE Sname LIKE 欧阳 ; 例17查询名字中第2个字为“阳”字的学生姓名和学号。 SELECT Sname,Sno FROM Student WHERE Sname LIKE 阳%; 例18查询所有不姓刘的学生姓名。 SELECT Sname FROM Student WHERE Sname NOT LIKE 刘%;,空值:使用谓词IS NULL 或 IS NOT NULL。 例21某些学生选修课

8、程后没有参加考试,所以有选课记录,但没有考试成绩。查询缺少成绩的学生学号和相应课程号。 SELECT Sno,Cno FROM SC WHERE Grade IS NULL; 例22查所有有成绩的学生学号和课程号。 SELECT Sno,Cno FROM SC WHERE Grade IS NOT NULL; 多重条件 例23查询计算机科学系年龄在20岁以下的学生姓名。 SELECT Sname FROM Student WHERE Sdept=CS AND Sage20; ORDER BY子句:对查询结果按照一个或多个属性列的升序(ASC)或降序(DESC)排列,缺省值为升序。 例24查询选

9、修了3号课程的学生学号及成绩,查询结果按分数降序排列。SELECT Sno,Grade FROM SC WHERE Cno=3 ORDER BY Grade DESC;,例25查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列。 SELECT * FROM Student ORDER BY Sdept,Sage DESC; 聚集函数:五类聚集函数: 计数:COUNT(DISTINCT|ALL *) COUNT(DISTINCT|ALL ) 计算总和:SUM(DISTINCT|ALL ) 计算平均值:AVG(DISTINCT|ALL ) 求最大值:MAX(DISTIN

10、CT|ALL ) 求最小值:MIN(DISTINCT|ALL ) 其中:DISTINCT短语在计算时要取消指定列中的重复值,ALL短语不取消重复值,ALL为缺省值。,例26查询学生总人数。 SELECT COUNT(*) FROM Student; 例27查询选修了课程的学生人数。 SELECT COUNT(DISTINCT Sno) FROM SC; 例28计算2号课程的学生平均成绩。 SELECT AVG(Grade) FROM SC WHERE Cno=2; 例29查询选修2号课程的学生最高分数。 SELECT MAX(Grade) FROM SC WHERE Cno=2; 例30查询学

11、生200215121选修课程的总学分数。 SELECT SUM(Ccredit) FROM SC,Course WHERE Sno=200215121 AND SC.Cno=Course.Cno;,GROUP BY子句:将查询结果按某列或多列值分组。 例31求各个课程号及相应的选课人数。 SELECT Cno,COUNT(Sno) FROM SC GROUP BY Cno; 使用HAVING短语筛选最终输出结果:只有满足HAVING短语指定条件的组才输出,HAVING短语与WHERE子句的区别是WHERE子句作用于基表或视图,从中选择满足条件的元组;HAVING短语作用于组,从中选择满足条件的

12、组。 例32查询选修了2门以上课程的学生学号。 SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*) 2;,连接查询:若查询同时涉及两个以上的表,则称之为连接查询。连接查询是关系数据库中最主要的查询,包括等值连接查询、自然连接查询、非等值连接查询、自身连接查询、外连接查询和复合连接查询等 。 等值与非等值连接查询:一般格式为: . . 或 . BETWEEN . AND . 其中:连接谓词中的列名称为连接字段,各连接字段类型必须是可比的,但不必是相同的。 例33查询每个学生及其选修课程的情况。 SELECT Student.*,SC.* FROM St

13、udent,SC WHERE Student.Sno=SC.Sno;,例34对例33用自然连接完成。 SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade FROM Student,SC WHERE Student.Sno=SC.Sno; 自身连接:连接操作不仅可以在两个表之间进行,也可以是一个表与其自己进行连接,称为自连接。 例35查询每一门课的间接先修课(即先修课的先修课)。 SELECT FIRST.Cno,SECOND.Cpno FROM Course FIRST, Course SECOND WHERE FIRST.Cpno=SECON

14、D.Cno;,外连接:一般连接操作中,只有满足连接条件的元组才能作为结果输出。 例36将例32改为: SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade FROM Student LEFT OUTER JOIN SC ON (Student.Sno=SC.Sno); 复合条件连接:WHERE子句中可以多个连接条件。 例37查询选修2号课程且成绩在80分以上所有学生。 SELECT Student.Sno,Sname FROM Student,SC WHERE Student.Sno=SC.Sno AND Cno=2 AND Grade80;,例

15、38查询每个学生的学号、姓名、选修的课程名及成绩。 SELECT Student.Sno,Sname,Cname,Grade FROM Student,SC,Course WHERE Student.Sno=SC.Sno AND SC.Cno=Course.Cno;,基本表的定义、修改与删除 定义基本表: CREATE TABLE ( , , ); 例1建立一个学生表Student。 CREATE TABLE Student (Sno CHAR(9) PRIMARY KEY,Sname CHAR(8) UNIQUE, Ssex CHAR(2),Sage INT,Sdept CHAR(20);,

16、数据定义,例2建立一个课程表Course。 CREATE TABLE Course (Cno CHAR(4) PRIMARY KEY,Cname CHAR(40), Cpno CHAR(4),Ccredit INT, FOREIGN KEY (Cpno) REFERENCES Course(Cno); 例3建立一个选课表SC。 CREATE TABLE SC (Sno CHAR(9),Cno CHAR(4),Grade INT, PRIMARY KEY (Sno,Cno), FOREIGN KEY (Sno) REFERENCES Student(Sno), FOREIGN KEY (Cno)

17、 REFERENCES Course(Cno);,数据类型:关系模型中每一个属性来自一个域,SQL中域的概念用数据类型来实现,SQL提供了以下常用数据类型:,修改基本表:ALTER TABLE ADD 完整性约束 DROP ALTER COLUMN ; 例8向Student表增加“入学时间”列,类型为日期时间型。 ALTER TABLE Student ADD S_entrance DATETIME; 不论基本表中原来是否已有数据,新增加的列一律为空值。 例9将年龄的数据类型改为整数。 ALTER TABLE Student ALTER COLUMN Sage INT; 例10增加课程名称必须取惟一值的约束条件。 ALTER TABLE Course ADD UNIQUE(Cname); 删除基本表:DROP TABLE ; CASCADE:表示删除表的同时相关的对象如视图也被删除。,

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1