关系数据库语言.ppt
《关系数据库语言.ppt》由会员分享,可在线阅读,更多相关《关系数据库语言.ppt(61页珍藏版)》请在三一办公上搜索。
1、1,第3章 关系数据库语言SQL,2,本章概述,SQL是关系数据库的标准语言,对关系模型的发展和商用DBMS的研制起着重要的作用。SQL语言是介乎于关系代数和元组演算之间的一种语言。本章详细介绍SQL的核心部分内容:数据定义、数据查询、数据更新。,3,关系数据库语言SQL,3.1 SQL的体系结构 3.2 SQL的数据定义 3.3 SQL的数据查询3.4 数据更新 3.5 视图的定义和对视图的操作,4,3.1 SQL的体系结构,3.1.1 SQL的产生与发展 3.1.2 SQL数据库的体系结构 3.1.3 SQL的组成,5,3.1.1 SQL的产生与发展,SQL是20世纪70年代在IBM公司的
2、研究所开发的,其大部分标准首先在SYSTEM R中实现。现在简称为SQL(Structured Query Language),即“结构化查询语言”。SQL已经成为一个标准。SQL的标准化工作一直在进行。SQL86,SQL89,SQL92,SQL99。注意许多具体的DBMS实现的SQL与标准有一定区别。,6,3.1.2 SQL数据库的体系结构,用户1,用户2,用户3,用户4,视图1,视图2,基本表1,基本表2,基本表3,基本表4,存储文件1,存储文件2,存储文件3,存储文件4,图3.1 SQL数据库的体系结构,SQL用户,View,Base table,Stored file,7,3.1.3
3、SQL的组成,核心SQL主要有四个部分:(1)数据定义语言,即SQL DDL,用于定义SQL模式、基本表、视图、索引等结构。(2)数据操纵语言,即SQL DML。数据操纵分成数据查询和数据更新两类。其中数据更新又分成插入、删除和修改三种操作。(3)嵌入式SQL语言的使用规定。这一部分内容涉及到SQL语句嵌入在宿主语言程序中的规则。(4)数据控制语言,即SQL DCL,这一部分包括对基本表和视图的授权、完整性规则的描述、事务控制等内容。,8,3.2 SQL的数据定义,3.2.1 SQL模式的创建和撤销 3.2.2 基本数据类型 3.2.3 基本表的创建、修改和撤销 3.2.4 索引的创建和撤销,
4、9,3.2.1 SQL模式的创建和撤销,SQL模式的创建可用CREATE SCHEMA语句定义,其基本句法如下:CREATE SCHEMA模式名AUTHORIZATION用户名 SQL模式的撤消可用DROP SCHEMA语句定义,其基本句法如下:DROP SCHEMA模式名CASCADERESTRICT 其方式有两种:CASCADE(级联式)方式。RESTRICT(约束式)方式。,执行DROP语句时,把SQL模式及其下属的基本表、视图、索引等所有元素全部撤消。,执行DROP语句时,只有当SQL模式中没有任何下属元素时,才能撤消SQL模式,否则拒绝执行DROP语句。,SCHEMADATABASE
5、,10,3.2.2 基本数据类型,SQL提供的主要数据类型(也称为“域类型”)有:(1)数值型 INTEGER(INT),SMALLINT,REAL,DOUBLE PRECISION,FLOAT(n),NUMBERIC(p,d)(2)字符串型 CHAR(n),VARCHAR(n)(3)位串型 BIT(n),BIT VARYING(n)(4)时间型 DATE,TIME自定义类型 CREATE DOMAIN PERSON_NAME CHAR(8);,11,3.2.3 基本表的创建、修改和撤销,基本表的创建 例3.1 基本表S,C,SC的创建。,CREATE TABLE S(S#CHAR(4)NOT
6、 NULL,SNAME CHAR(8)NOT NULL,AGESMALLINT,SEX CHAR(1),PRIMARY KEY(S#);,CREATE TABLE C(C#CHAR(4)NOT NULL,CNAME CHAR(10)NOT NULL,TEACHER CHAR(8),PRIMARY KEY(C#);,CREATE TABLE SC(S#CHAR(4),C#CHAR(4),GRADE SMALLINT,PRIMARY KEY(S#,C#),FOREIGN KEY(S#)REFERENCES S(S#),FOREIGN KEY(C#)REFERENCES C(C#),CHECK(GR
7、ADE BETWEEN 0 AND 100);,12,基本表的创建、修改和撤销(2),基本表结构的修改(1)增加新的列用“ALTER ADD”语句,其句法如下:ALTER TABLE ADD(2)删除原有的列用“ALTER DROP”语句,句法如下:ALTER TABLE DROP CASCADERESTRICT 此处CASCADE方式表示:在基本表中删除某列时,所有引用到该列的视图和约束也要一起自动地被删除。而RESTRICT方式表示在没有视图或约束引用该属性时,才能在基本表中删除该列,否则拒绝删除操作。(3)修改原有列的类型、宽度用“ALTER MODIFY”语句,句法如下:ALTER T
8、ABLE MODIFY,13,基本表的创建、修改和撤销(3),例3.2 在基本表S中增加一个地址(ADDRESS)列,可用下列语句:ALTER TABLE S ADD ADDRESS VARCHAR(30);应注意,新增加的列不能定义为“NOT NULL”。基本表在增加一 列后,原有元组在新增加的列上的值都被定义为空值(NULL)。例3.3 在基本表S中删除年龄(AGE)列,并且把引用该列的所有视图和约束也一起删除,可用下列语句:ALTER TABLE S DROP AGE CASCADE;例3.4 在基本表S中S#的长度修改为6,可用下列语句:ALTER TABLE S MODIFY S#C
9、HAR(6);,14,基本表的创建、修改和撤销(4),基本表的撤销 撤销语句的句法如下:DROP TABLE CASCADERESTRICT 此处的CASCADE、RESTRICT的语义同前面句法中的语义一样。例3.5需要撤消基本表S。但只有在没有视图或约束引用基本表S中的列时才能撤消,否则拒绝撤消。DROP TABLE S RESTRICT;,15,3.2.4 索引的创建和撤销,索引的创建创建索引可用“CREATE INDEX”语句实现。句法如下:CREATE UNIQUE INDEX ON()例3.6(1)CREATE INDEX S#_INDEX ON S(S#);(2)CREATE U
10、NIQUE INDEX SC_INDEX ON SC(S#ASC,C#DESC);索引的撤销当索引不需要时,可以用“DROP INDEX”语句撤销,其句法如下:DROP INDEX,16,3.3 SQL的数据查询,SELECT查询语句 SELECT语句完整的句法 SELECT语句中的限定 基本表的联接操作 SQL3中的递归查询,17,3.3.1 SELECT查询语句(1),SELECTFROMWHERE句型在关系代数中最常用的式子是下列表达式:A1,An(F(R1Rm)这里R1、Rm为关系,F是公式,A1、An为属性。针对上述表达式,SQL为此设计了SELECTFROMWHERE句型:SELE
11、CT A1,AnFROM R1,RmWHERE F 这个句型是从关系代数表达式演变来的,但WHERE子句中的条件表达式F要比关系代数中公式更灵活。,F中使用的运算符1.算术比较运算符:,=,=,或!=2.逻辑运算符:AND,OR,NOT3.集合成员资格运算符:IN,NOT IN4.谓词:EXISTS(存在量词),ALL,SOME,UNIQUE5.聚合函数:AVG,MIN,MAX,SUM,COUNT6.嵌套:F(SELECT语句)SELECT查询结果运算符UNION(并)、INTERSECT(交)、EXCEPT(差),18,3.3.1 SELECT查询语句(2),SELECT句型使用实例例3.8
12、 教学数据中有三个基本表(关系):S(S#,SNAME,AGE,SEX)SC(S#,C#,SCORE)C(C#,CNAME,T#)下面用SELECT查询语句表达每个查询。(1)检索学习课程号为C2的学生学号与成绩。(2)检索学习课程号为C2的学生学号与姓名。(3)检索选修课程名为MATHS的学生学号与姓名。(4)检索选修课程号为C2或C4的学生学号。(5)检索至少选修课程号为C2和C4的学生学号。(6)检索不学习C2课程的学生姓名与年龄。(7)检索学习全部课程的学生姓名。(8)检索所学课程包含学生S3所学课程的学生学号。,SELECT S#,GRADEFROM SCWHERE C#=C2;,(
13、2)检索学习课程号为C2的学生学号与姓名。连接查询SELECT S.S#,SNAMEFROM S,SCWHERE C#=C2 AND S.S#=SC.S#;嵌套查询 相关子查询SELECT S#,SNAME SELECT S#,SNAMEFROM S FROM SWHERE S#IN(SELECT S#WHERE C2 IN(SELECT C#FROM SC FROM SC WHERE C#=C2);WHERE S.S#=SC.S#);存在量词的嵌套查询SELECT S#,SNAMEFROM SWHERE EXISTS(SELECT*FROM SC WHERE C#=C2 AND S.S#=S
14、C.S#);,(3)检索选修课程名为MATHS的学生学号与姓名。连接查询SELECT S.S#,SNAMEFROM S,SC,CWHERE CNAME=MATHS AND S.S#=SC.S#AND SC.C#=C.C#;嵌套查询SELECT S#,SNAMEFROM SWHERE S#IN(SELECT S#FROM SC WHERE C#IN(SELECT C#FROM C WHERE CNAME=MATHS);,SELECT S#FROM SCWHERE C#=C2 OR C#=C4;,SELECT X.S#FROM SC AS X,SC AS YWHERE X.C#=C2 AND Y.
15、C#=C4 AND X.S#=Y.S#;,SELECT SNAME,AGEFROM SWHERE S#NOT IN(SELECT S#FROM SC WHERE C#=C2);或者SELECT SNAME,AGEFROM SWHERE NOT EXISTS(SELECT*FROM SC WHERE C#=C2 AND S.S#=SC.S#);,语义:在表S中查找学生,要求这个学生选修了全部课程。换言之,在表S中找学生,在C中不存在一门课程,这个学生没有选修。SELECT SNAMEFROM SWHERE NOT EXISTS(SELECT*FROM C WHERE NOT EXISTS(SEL
16、ECT*FROM SC WHERE S.S#=SC.S#AND C.C#=SC.C#);,语义:在表SC中找学生,不存在S3选修的一门课程,这个学生没有选修。SELECT DISTINCT S#FROM SC AS XWHERE NOT EXISTS(SELECT*FROM SC AS Y WHERE Y.S#=S3 AND NOT EXISTS(SELECT*FROM SC AS Z WHERE X.S#=Z.S#AND Y.C#=Z.C#);,19,3.3.1 SELECT查询语句(3),SELECT语句的图示形式 例3.9 对于例3.8中的第二个查询语句的图示形式如下所述。,20,3.3
17、.1 SELECT查询语句(4),聚合函数 COUNT(*)计算元组的个数COUNT(列名)对一列中的值计算个数SUM(列名)求某一列值的总和(此列的值必须是数值型)AVG(列名)求某一列值的平均值(此列的值必须是数值型)MAX(列名)求某一列值的最大值MIN(列名)求某一列值的最小值例3.10 求男同学的总人数和平均年龄。统计选修了课程的学生人数。SELECT COUNT(*),AVG(AGE)SELECT COUNT(DISTINCT S#)FROM S FROM SC;WHERE SEX=M;,21,3.3.2 SELECT语句完整的句法(1),SELECT语句完整的句法如下:SELEC
18、T 目标表的列名或列表达式序列 FROM 基本表名和(或)视图序列 WHERE 行条件表达式 GROUP BY 列名序列 HAVING 组条件表达式 ORDER BY 列名ASC|DESC,,22,3.3.2 SELECT语句完整的句法(2),整个语句的执行过程如下:(1)读取FROM子句中基本表、视图的数据,执行笛卡尔积操作。(2)选取满足WHERE子句中给出的条件表达式的元组。(3)按GROUP子句中指定列的值分组,同时提取满足HAVING子句中组条件表达式的那些组。(4)按SELECT子句中给出的列名或列表达式求值输出。(5)ORDER子句对输出的目标表进行排序,按附加说明ASC升序排列
19、,或按DESC降序排列。,23,3.3.2 SELECT语句完整的句法(3),例3.11 对教学数据库的基本表S、SC、C中数据进行查询和计算。统计每一年龄选修课程的学生人数 SELECT AGE,COUNT(DISTINCT S.S#)FROM S,SC WHERE S.S#=SC.S#GROUP BY AGE;由于要统计每一个年龄的学生人数,因此要把满足WHERE子句中条件的查询结果按年龄分组,在每一组中的学生年龄相同。此时的SELECT子句应对每一组分开进行操作,在每一组中,年龄只有一个值,统计的人数是这一组中的学生人数。,24,3.3.2 SELECT语句完整的句法(4),求基本表S中
20、男同学的每一年龄组(超过50人)有多少人?要求查询结果按人数升序排列,人数相同按年龄降序排列。SELECT AGE,COUNT(S#)FROM SWHERE SEX=MGROUP BY AGE HAVING COUNT(*)50ORDER BY 2,AGE DESC;,25,3.3.3 SELECT语句中的限定(1),SELECT子句中的规定 SELECT子句描述查询输出的表格结构,即输出值的列名或表达式。其形式如下:SELECT ALL|DISTINCT|*条件表达式中的算术比较操作 条件表达式中可出现算术比较运算符(,!),也可以用“BETWEEN AND”比较运算符限定一个值的范围。列和
21、基本表的改名操作,例3.12 在表SC中检索男同学选修的课程号。SELECT DISTINCT C#FROM S,SC WHERE S.S#=SC.S#AND SEX=M;检索每个学生的出生年份。SELECT S#,SNAME,2008-AGEFROM S;,例3.13检索1820岁的学生姓名。SELECT SNAMEFROM SWHERE AGE=18 AND AGE=20;或 SELECT SNAMEFROM SWHERE AGE BETWEEN 18 AND 20;,例3.14 在表S中检索每个学生的出生年份,输出的列名为STUDENT_NAME和BIRTH_YEAR。SELECT SN
22、AME AS STUDENT_NAME,2008-AGE AS BIRTH_YEARFROM S;,26,3.3.3 SELECT语句中的限定(2),字符串的匹配操作条件表达式中字符串匹配操作符是“LIKE”。在表达式中可使用两个通配符:百分号(%):与零个或多个字符组成的字符串匹配。下划线(_):与单个字符匹配。集合的并、交、差操作 当两个子查询结果的结构完全一致时,可以让这两个子查询执行并、交、差操作。并、交、差的运算符为UNION、INTERSECT和EXCEPT。空值的比较操作SQL中允许列值为空,空值用保留字NULL表示。,例3.15 检索以字母D打头的学生姓名。SELECT SNA
23、MEFROM SWHERE SNAME LIKE D%;检索以字母T打头,以M结束的三个字母组成的学生姓名。SELECT SNAMEFROM SWHERE SNAME LIKE T_M;,(SELECT 查询语句1)UNION ALL(SELECT 查询语句2)ALL未消除重复元组(SELECT 查询语句1)INTERSECT ALL(SELECT 查询语句2)(SELECT 查询语句1)EXCEPT ALL(SELECT 查询语句2),例3.16 检索年龄为空值的学生姓名。SELECT SNAMEFROM S WHERE AGE IS NULL;,27,3.3.3 SELECT语句中的限定(
24、3),集合的比较操作SQL提供SELECT语句的嵌套子查询机制。子查询是嵌套在另一个查询中的SELECT语句。(1)集合成员资格的比较 元组 NOT IN(集合)(2)集合成员的算术比较 元组SOMEALL(集合)(3)空关系的测试 NOT EXISTS(集合)(4)重复元组的测试 NOT UNIQUE(集合)导出表的使用 SQL2允许在FROM子句中使用子查询。如果在FROM子句中使用了子查询,那么要给子查询的结果起个表名和相应的列名。,例3.17 检索至少不学C2和C4两门课程的学生学号。SELECT S#FROM SWHERE S#NOT IN(SELECT S#FROM SC WHER
25、E C#IN(C2,C4);,(2)集合成员的算术比较 元组SOMEALL(集合)例3.18 检索学习C2课程的学号与姓名。SELECT S#,SNAMEFROM SWHERE S#=SOME(SELECT S#FROM SC WHERE C#=C2);检索至少有一门成绩超过学生S4一门成绩的学生学号。SELECT DISTINCT S#FROM SCWHERE GRADESOME(SELECT GRADE FROM SC WHERE S#=S4);检索不学C2课程的学生姓名和年龄。SELECT SNAME,AGEFROM S 注意:WHERE S#ALL(SELECT S#IN与“=SOME
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 关系 数据库 语言
链接地址:https://www.31ppt.com/p-5928593.html