关系数据库标准语言SQL-POWERPOINT.ppt
《关系数据库标准语言SQL-POWERPOINT.ppt》由会员分享,可在线阅读,更多相关《关系数据库标准语言SQL-POWERPOINT.ppt(79页珍藏版)》请在三一办公上搜索。
1、第三章 关系数据库标准语言SQL SQL(Structured Query Language)是1974年由Boyce和Chamberlin提出的。在IBM公司San Jose Research Laboratory 研制的System R上实现了这种语言。由于它功能丰富、使用方式灵活、语言简洁易学等突出优点,在计算机工业界和计算机用户中倍受欢迎并深深扎根。1986年10月,美国国家标准局(ANSI)的数据库委员会X3H2批准了SQL作为关系数据库语言的美国标准。同年公布了标准SQL文本。此后不久,国际标准化组织(ISO)也作出了同样的决定。,本章介绍SQL语言,并进一步讨论关系数据库的基本概
2、念.SQL标准文本和实施的SQL语言相比,后者常常作了许多必要的扩充,因此我们选用IBM公司在DB2上的SQL语言.它基本上和标准SQL一致,而在对关系模型的符合程度上比标准SQL更好.,3.1 SQL 概 述 SQL(Structured Query Language)的英文名称是结构查询语言。实际上它的功能包括查询(Query),操纵(Manipulation),定义(Definition)和控制(Control)四个方面,是一个综合的、通用的、功能极强的关系数据库语言。3.1.1 SQL的主要特点,1.综合统一 2.高度非过程化 3.面向集合的操作方式 4.两种使用方式,统一的语法结构
3、5.语言简洁,易学易用,(1).数据库查询 SELECT(2).数据定义 CREATE,DROP(3).数据操纵 INSERT,UPDATE,DELETE(5).数据控制 GRANT,REVOKE,3.1.2 SQL语言的基本概念,3.2 SQL 数据定义 SQL的数据定义功能包括三部分:定义基本表,定义视图和定义索引,他们是:CREATE TABLE CREATE VIEW CREATE INDEX DROP TABLE DROP VIEW DROP INDEX ALTER TABLE,定义、删除和修改基本表 一.定义基本表的语句 1.格式:CREATE TABLE(列级完整性约束条件,列级
4、完整性约束条件;),2.举 例:例1:P88 CREATE TABLE Student(Sno CHAR(5)NOT NULL UNIQUE,Sname CHAR(20)UNIQUE,Ssex CHAR(1),Sage INT Sdept CHAR(15);,二.修改基本表 1.格式:ALTER TABLE ADD 完整性约束;DROP MODIFY;2.举例 例2:ALTER TABLE Student ADD Scome date;,三.删除基本表 1.格式:DROP TABLE;2.举例 例5:删除Student表 ALTER TABLE Student;,例3:ALTER TABLE
5、Student MODIFY Sage SMALLINT;,例4:ALTER TABLE Student DROP UNIQUE(Sname);,5.2.2 建立与删除索引 通常索引的建立和删除由DBA(Dada Base Administrator)或表的主人负责.,一.建立索引 1.格式 CREATE UNIQUE CLUSTER INDEX ON(,次序.);,2.举例:例6:CREATE UNIQUE INDEX Stusno ON Student(Sno);CREATE UNIQUE INDEX Coucno ON Couse(Cno);CREATE UNIQUE INDEX SCn
6、o ON SC(Sno ASC,Cno DESC);,二.删除索引 1.格式 DROP INDEX;2.举例 例7:删除Student表的Stusname索引.DROP INDEX Stusname,小 结 在关系数据库中允许DBA随时使用SQL数据定义语句来定义基本表、索引和视图,系统十分方便灵活。在非关系系统中,数据库的模式一经建立再要加入新的记录型或修改老的记录型是十分费事的工作。而象DB2这样的SQL关系数据库系统,增删改基本表、索引和视图都不必停止系统的其它处理,不会影响其它用户对数据库的正常使用。,3.3 查 询 数据库查询是数据库的核心操作。SQL语句提供了SELECT语句进行数
7、据库的查询。,查询语句的一般格式 SELECT ALL|DISTINCT,FROM,WHERE GROUP BY HAVING ORDER BY ASC|DESC;,单表查询 一、选择表中的若干列 1.查询指定列 例1.查询全体学生的学号与姓名。SELECT Sno,Sname FROM Student;,例2.查询全体学生的姓名、学号、所在系。SELECT Sname,Sno,Sdept FROM Student;,2.查询全部列 例3.查询全体学生的详细信息。SELECT*FROM Student;,等价于:SELECT Sno,Sname,Ssex,Sage,Sdept FROM Stu
8、dent;,3.查询经过计算的值。例4.查询全体学生学号和出生年份.SELECT Sno,2003-Sage FROM Student;,二、选择表中的若干元组 1.消除取值重复的行 例6.查询选修了课程的学生的学号.SELECT Sno FROM SC;指定DISTINCT短语,可去掉结果表中的重复行.SELECT DISTINCT Sno FROM SC;,2.查询满足条件的元组 查询满足指定条件的元组可以通过WHERE子句实现.,(1)比较大小 例7.查询计算机系全体学生的名单.SELECT Sname FROM Student WHERE Sdept=CS;,例8.查询所有年龄在20岁
9、以下的学生的姓名及年龄.SELECT Sname,Sage FROM Student WHERE Sage20;,SELECT Sname,Sage 或 FROM Student WHERE NOT Sage=20;,(2)确定范围 例10.查询年龄在2023岁之间(包括20岁和23岁)的学生的姓名、系别和年龄。SELECT Sname,Sdept,Sage FROM Student WHERE Sage BETWEEN 20 AND 23;,例11.查询年龄不在2023岁之间的学生的姓名、系别和年龄。SELECT Sname,Sdept,Sage FROM Student WHERE Sag
10、e NOT BETWEEN 20 AND 23;,(3)确定集合 谓词IN可以用来查找属性值属于指定集合的元组.例12.查询信息系(IS)、数学系(MA)、计算机科学系(CS)学生的姓名和性别.SELECT Sname,Ssex FROM Student WHERE Sdept IN(IS,MA,CS);,谓词IN实际上是一系列谓词OR的缩写.等价的WHERE子句为:WHERE Sdept=IS OR Sdept=MA OR Sdept=CS;,例13.查询既不是信息系(IS)、数学系(MA),也不是计算机科学系(CS)的学生的姓名和性别.SELECT Sname,Ssex FROM Stud
11、ent WHERE Sdept NOT IN(IS,MA,CS);,(4)字符匹配 LIKE 谓词的一般形式为:NOT LIKE ESCAPE 字符串中通配符的含义:.字符“_”,表示任意的单个字符;.字符“%”,表示任意字符串(长度可以为零);,例14.查询学号为95001的学生的详细情况。SELECT*FROM Student WHERE Sno LIKE 95001;,等价的WHERE子句为:WHERE Sno=95001;,例15.查询所有姓刘的学生的姓名、学号和性别。SELECT Sname,Sno,Ssex FROM Student WHERE Sname LIKE 刘%;,例16
12、.查询姓“欧阳”且全名为三个汉字的学生的姓名。SELECT Sname FROM Student WHERE Sname LIKE 欧阳_ _;,例19.查询DB_Design课程的课程号和学分。SELECT Cno,Ccredit FROM Course WHERE Cname LIKE DB_Design ESCAPE;,(5).涉及空值的查询.例21 查询缺少学习成绩的学生的学号和课程号。SELECT Sno,Cno FROM SC WHERE Grade IS NULL;,例22 查询所有有成绩的学生的学号和课程号。SELECT Sno,Cno FROM SC WHERE Grade
13、IS NOT NULL;,(6).多重条件查询 用逻辑运算符AND和OR来联结多个查询条件.例23 查询计算机科学系年龄在20岁以下的学生的姓名及年龄.SELECT Sname,Sage FROM Student WHERE Sdept=CS AND Sage20;,三、对查询结果排序 可以用ORDER BY 字句对查询结果按照一个或多个属性列的升序(ASC)或降序(DESC)排列,缺省值为升序.,例24 查询选修了3号课程的学生的学号和成绩,查询结果按分数的降序排序。SELECT Sno,Grade FROM SC WHERE Cno=3 ORDER BY Sdept,Sage DESC;,
14、例25 查询全体学生的详细信息,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排序。SELECT*FROM Student;ORDER BY Sdept,Sage DESC;,四、使用集函数(库函数)SQL提供了6种库函数.其功能如下:COUNT(DISTINCT|ALL*)统计元组个数 COUNT(DISTINCT|ALL)统计一列中值的个数 SUM(DISTINCT|ALL)计算某一列值的总和 AVG(DISTINCT|ALL)计算某一列值的平均值 MAX(DISTINCT|ALL)求某一列值中的最大值 M I N(DISTINCT|ALL)求某一列值中的最小值,例26.查询学生
15、总人数.SELECT COUNT(*)FROM Student;,例27 查询选修了课程的学生人数.SELECT COUNT(DISTINCT Sno)FROM SC;,例28 计算1号课程的学生的平均成绩.SELECT AVG(Grade)FROM SC WHERE Cno=1;,五、对查询结果分组 GROUP BY子句将查询结果表按某列或多列值分组,值相等的为一组。例30 求各课程号及选修该课程的学生人数.SELECT Cno,COUNT(Sno)FROM SC GROUP BY Cno;,可以使用HAVING 短语指定筛选条件。例31 查询选修了3门以上课程的学生学号.SELECT Sn
16、o FROM SC GROUP BY Sno HAVING COUNT(*)3;,连接查询 定义:若查询涉及两个以上的表,则称之为连接查询.,一、等值与非等值连接查询 例32.查询每个学生以及其选修课程的情况。SELECT Student.*,SC.*FROM Student,SC WHERE Student.Sno=SC.Sno;,例33.用自然连接完成例32的查询.SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade FROM Student,SC WHERE Student.Sno=SC.Sno;,二、自身连接 例34 查询每一门课程的间接
17、先行课(即先行课的先行课).此例中的FIRST和SECOND为引入的别名;,SELECT FIRST.Cno,SECOND.Cpno FROM Course FIRST,Course SECOND WHERE FIRST.Cpno=SECOND.Cno;,三、外连接,如果我们想以Student表为主体列出每个学生的基本情况及其选课情况,若某个学生没有选课,只输出其基本情况信息,其选课信息为空值即可,这时就需要外连接。SELECT Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade FROM Student,SC WHERE Student.Sno=SC.Sn
18、o(*);,四、复合条件连接,例35 查询选修2号课程且成绩在90分以上的学生.,SELECT Student.Sno,Sname FROM Student,SC WHERE Student.Sno=SC.Sno AND SC.Cn=2 AND SC.Grade90;,例如:SELECT Sname FROM Student WHERE Sno IN SELECT Sno FROM SC WHERE Cno=2;,3.3.3 嵌 套 查 询 嵌套查询亦称为子查询.嵌套查询是指一个SELECT-FROM-WHERE查询块嵌入另一个查询块之中.SQL中允许多层嵌套.,一、带有IN谓词的查询,例37
19、 查询与“刘晨”在同一个系学习的学生。,确定“刘晨”所在的系名。SELECT Sdept FROM Student WHERE Sname=刘晨;,查询所有在IS系学习的学生.SELECT Sno,Sname,Sdept FROM Student WHERE Sdept=IS;,将第1步查询嵌入到第2步查询的条件中,构造嵌套查询,SQL语句如下:SELECT Sno,Sname,Sdept FROM Student WHERE Sdept IN(SELECT Sdept FROM Student WHERE Sname=刘晨);,SELECT Sno,Sname FROM Student WH
20、ERE Sno IN(SELECT Sno FROM SC WHERE Cno IN(SELECT Cno FROM Course WHERE Cname=信息系统);,例38.查询选修了课程名为信息系统的学生的学号和姓名.,上述查询可用连接查询实现:SELECT Sno,Sname FROM Student,SC,Course WHERE Student.Sno=SC.Sno AND SC.Cno=Course.Cno AND Course.Cname=信息系统,二.带有比较运算符的子查询 当确切知道内层查询返回的是单值时,可以用比较运算符.用比较运算符=代替IN改写例37,SELECT S
21、no,Sname,Sdept FROM Student WHERE Sdept=(SELECT Sdept FROM Student WHERE Sname=刘晨);,三.带有ANY或ALL谓词的子查询 子查询返回的是单值时,可以用比较运算符,而使用ANY或ALL谓词时则必须同时使用比较运算符。,例39 查询其他系中比信息系某一学生年龄小的学生的姓名和年龄。,SELECT Sname,Sage FROM Student WHERE SageIS;,四.代有EXISTS的嵌套查询.例41 查询所有选修了1号课程的学生姓名.,SELECT Sname FROM Student WHERE EXIS
22、TS(SELECT*FROM SC WHERE Sno=Student.Sno AND Cno=1);,例42 查询没有选修1号课程的学生姓名.,SELECT Sname FROM Student WHERE NOT EXISTS(SELECT*FROM SC WHERE Sno=Student.Sno AND Cno=1);,例43.查询选修了全部课程的学生姓名.,SELECT Sname FROM Student WHERE NOT EXISTS(SELECT*FROM Course WHERE NOT EXISTS(SELECT*FROM SC WHERE Sno=Student.Sno
23、 AND Cno=Course.Cno);,例45 查询计算机科学系的学生以及年不大于19岁的学生.SELECT*FROM Student WHERE Sdept=CS UNION SELECT*FROM Student WHERE Sage=19;,3.3.4 集合查询,例46 查询选修了1号课程或选修了2号课程的学生.SELECT Sno FROM SC WHERE Cno=1 UNION SELECT Sno FROM SC WHERE Cno=2;,例48 查询选修了1号课程的学生集合与选修了2号课程的学生集合的交集.SELECT*FROM Student WHERE Cno=1 AN
24、D Sno IN(SELECT Sno FROM SC WHERE Cno=2);,3.4.1 插入数据 一、插入单个元组 语句的一般格式:INSERT INTO 表名(,)VALUES(,);,例1 将一个新学生:95020(学号),陈东(姓名),男(性别),IS(信息系),18(年龄),插入到Student表中.INSERT INTO Student VALUES(95020,陈东,男,IS,18);,3.4 数 据 更 新 SQL更新语句包括修改、删除和插入三类语句。,例2.插入一个选课记录(95020,1)INSERT INTO SC(Sno,Cno)VALUES(95020,1);,
25、二.插入子查询结果 语句的一般格式:INSERT INTO 表名(,)子查询;,CREATE TABEL Deptage(Sdept CHAR(15),Avgage SMALLINT);INSERT INTO Deptage(Sdept,Avgage)SELECT Sdept,AVG(SA)FROM Student GROUP BY Sdept;,例3.对每个系,求学生的平均年龄,并把结果插入数据库中.,一、修改某一个元组的值,例4.把学生95001的姓名改为王平.UPDATE Student SET Sname=王平 WHERE Sno=95001;,3.4.2 修改数据 语句的一般格式:U
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 关系 数据库 标准 语言 SQL POWERPOINT
链接地址:https://www.31ppt.com/p-5928564.html