教学课件:第4章-1-关系数据库标准语言SQL.ppt
《教学课件:第4章-1-关系数据库标准语言SQL.ppt》由会员分享,可在线阅读,更多相关《教学课件:第4章-1-关系数据库标准语言SQL.ppt(239页珍藏版)》请在三一办公上搜索。
1、anliping,1,第4章 关系数据库标准语言SQL,4.1 SQL概述4.2 数据定义4.3 数据查询4.4 数据更新 4.5 视图的定义和对视图的操作4.6 数据控制4.7 嵌入式SQL,anliping,2,4.1 SQL概述,SQL的产生和发展1970年,美国IBM研究中心的E.F.Codd连续发表多篇论文,提出关系模型。1972年,IBM公司开始研制实验型关系数据库管理系统SYSTEM R,配制的查询语言称为SQUARE(Specifying Queries As Relational Expression)语言,在语言中使用了较多的数学符号。1974年,Boyce和Chamber
2、lin把SQUARE修改为SEQUEL(Structured English QUEry Language)语言。后来SEQUEL简称为SQL(Structured Query Language),即“结构式查询语言”,SQL的发音仍为“sequel”。现在SQL已经成为一个标准。,anliping,3,4.1.1 SQL的特点,SQL语言之所以能够为用户和业界所接受,成为国际标准,是因为它是一个综合的、通用的、功能极强同时又简洁易学的语言。SQL语言集数据查询(data query)、数据操纵(data manipulation)、数据定义(data definition)和数据控制(dat
3、a control)功能于一体,充分体现了关系数据语言的特点和优点。,anliping,4,1.综合统一,SQL语言则集数据定义语言DDL、数据操纵语言DML、数据控制语言DCL的功能于一体,语言风格统一;可以独立完成数据库生命周期中的全部活动,包括定义关系模式、录入数据以建立数据库、查询、更新、维护、数据库重构、数据库安全性控制等一系列操作要求,这就为数据库应用系统开发提供了良好的环境。例如用户在数据库投入运行后,还可根据需要随时地逐步地修改模式,并不影响数据库的运行,从而使系统具有良好的可扩充性。,anliping,5,2.高度非过程化,非关系数据模型的数据操纵语言是面向过程的语言,用其完
4、成某项请求,必须指定存取路径。用SQL语言进行数据操作,用户只需提出“做什么”,而不必指明“怎么做”,因此用户无需了解存取路径,存取路径的选择以及SQL语句的操作过程由系统自动完成。这不但大大减轻了用户负担,而且有利于提高数据独立性。,anliping,6,3.面向集合的操作方式,SQL语言采用集合操作方式,不仅查找结果可以是元组的集合,而且一次插入、删除、更新操作的对象也可以是元组的集合。非关系数据模型采用的是面向记录的操作方式,任何一个操作其对象都是一条记录。例如查询所有平均成绩在80分以上的学生姓名,用户必须说明完成该请求的具体处理过程,即如何用循环结构按照某条路径一条一条地把满足条件的
5、学生记录读出来。,anliping,7,5.语言简洁,易学易用,SQL语言功能极强,但由于设计巧妙,语言十分简洁,完成数据定义、数据操纵、数据控制的核心功能只用了9个动词:CREATE、DROP、SELECT、INSERT、UPDATE、DELETE、GRANT、REVOKE。SQL语言语法简单,接近英语口语,因此容易学习,容易使用。,anliping,8,SQL语言的动词,anliping,9,4.以同一种语法结构提供两种使用方式SQL语言既是自含式语言,又是嵌入式语言。,anliping,10,4.1.2 SQL语言的基本概念,SQL语言支持关系数据库三级模式结构。,anliping,11
6、,模式对应于基本表基本表是本身独立存在的表,在SQL中一个关系就对应一个表。一些基本表对应一个存储文件,一个表可以带若干索引,索引也存放在存储文件中。内模式对应于存储文件存储文件的逻辑结构组成了关系数据库的内模式。存储文件的物理文件结构是任意的。,anliping,12,外模式对应于视图和部分基本表视图是从基本表或其他视图中导出的表,它本身不独立存储在数据库中,也就是说数据库中只存放视图的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中,因此视图是一个虚表。用户可以用SQL语言对视图和基本表进行查询。在用户眼中,视图和基本表都是关系。,anliping,13,4.2 数据定义,定
7、义表 CREATE TABLE删除表 DROP TABLE修改表 ALTER TABLE定义视图 CREATE VIEW(4.4节)删除视图 DROP VIEW定义索引 CREATE INDEX删除索引 DROP INDEX,anliping,14,4.2.1 定义、删除与修改基本表,一、定义基本表一般格式如下:CREATE TABLE(列级完整性约束条件,列级完整性约束条件.,);,anliping,15,其中:是所要定义的基本表的名字,它可以由一个或多个属性(列)组成。完整性约束条件建表的同时通常还可以定义与该表有关的完整性约束条件,这些完整性约束条件被存入系统的数据字典中,当用户操作表中
8、数据时由DBMS自动检查该操作是否违背这些完整性约束条件。如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上,否则既可以定义在列级也可以定义在表级。,anliping,16,下面以一个“学生-课程”数据库为例说明各种语句的用法。“学生-课程”数据库中包括三个表:(1)“学生”表Student由学号(Sno)、姓名(Sname)、性别(Ssex)、年龄(Sage)、所在系(Sdept)五个属性组成,可记为:Student(Sno,Sname,Ssex,Sage,Sdept)(2)“课程”表Course由课程号(Cno)、课程名(Cname)、先修课号(Cpno)、学分(Ccredit)
9、四个属性组成,可记为:Course(Cno,Cname,Cpno,Ccredit)(3)“学生选课”表SC由学号(Sno)、课程号(Cno)、成绩(Grade)三个属性组成,可记为:SC(Sno,Cno,Grade),anliping,17,例1 建立一个“学生”表Student,它由学号Sno、姓名Sname、性别Ssex、年龄Sage、所在系Sdept五个属性组成,其中学号属性不能为空,并且其值是唯一的。CREATE TABLE Student(Sno CHAR(5)NOT NULL UNIQUE,Sname CHAR(20),Ssex CHAR(1),Sage INT,Sdept CHA
10、R(15);,anliping,18,数据类型说明定义表的各个属性时需要指明其数据类型及长度。不同的数据库系统支持的数据类型不完全相同,例如IBM DB2 SQL主要支持以下数据类型:SMALLINT 半字长二进制整数。INTEGER或INT 全字长二进制整数。DECIMAL(p,q)或DEC(p,q)压缩十进制数,共p位,其中小数点后有q位。0qp15,q=0时可以省略。FLOAT 双字长浮点数。CHARTER(n)或CHAR(n)长度为n的定长字符串。VARCHAR(n)最大长度为n的变长字符串。GRAPHIC(n)长度为n的定长图形字符串。VARGRAPHIC(n)最大长度为n的变长图形
11、字符串。DATE 日期型,格式为YYYY-MM-DD。TIME 时间型,格式为。TIMESTAMP 日期加时间。,anliping,19,二、修改基本表,一般格式为:ALTER TABLE ADD 完整性约束DROP MODIFY;其中:指定需要修改的基本表,ADD子句用于增加新列和新的完整性约束条件,DROP子句用于删除指定的完整性约束条件,MODIFY子句用于修改原有的列定义。,anliping,20,例2 向Student表增加“入学时间”列,其数据类型为日期型 ALTER TABLE Student ADD Scome DATE;不论基本表中原来是否已有数据,新增加的列一律为空值。例3
12、 将年龄的数据类型改为半字长整数 ALTER TABLE Student MODIFY Sage SMALLINT;修改原有的列定义有可能会破坏已有数据。例4 删除关于学号必须取唯一值的约束 ALTER TABLE Student DROP UNIQUE(Sno);,anliping,21,说明:SQL没有提供删除属性列的语句,用户只能间接实现这一功能,即:先把原表中要保留的列及其内容复制到一个新表中;然后删除原表;将新表重命名为原表名。,anliping,22,三、删除基本表,一般格式为:DROP TABLE 例5 删除Student表DROP TABLE Student 基本表定义一旦删除
13、,表中的数据、在此表上建立的索引都将自动被删除掉,而建立在此表上的视图虽仍然保留,但已无法引用。因此执行删除操作一定要格外小心。,anliping,23,4.2.2 建立与删除索引一、建立索引,一般格式为:CREATE UNIQUE CLUSTER INDEX ON(,.);其中:指定要建索引的基本表的名字。索引可以建在该表的一列或多列上,各列名之间用逗号分隔。每个后面还可以用指定索引值的排列次序,包括ASC(升序)和DESC(降序)两种,缺省值为ASC。UNIQUE表明此索引的每一个索引值只对应唯一的数据记录。CLUSTER表示要建立的索引是聚簇索引。,anliping,24,所谓聚簇索引是
14、指索引项的顺序与表中记录的物理顺序一致的索引组织。例如,执行下面的CREATE INDEX语句:CREATE CLUSTER INDEX Stusname ON Student(Sname);将会在Student表的Sname(姓名)列上建立一个聚簇索引,而且Student表中的记录将按照Sname值的升序存放。,anliping,25,用户可以在最常查询的列上建立聚簇索引以提高查询效率。显然在一个基本表上最多只能建立一个聚簇索引。建立聚簇索引后,更新索引列数据时,往往导致表中记录的物理顺序的变更,代价较大,因此对于经常更新的列不宜建立聚簇索引。,anliping,26,例6 为学生-课程数据
15、库中的Student、Course、SC三个表建立索引。其中Student表按学号升序建唯一索引,Course表按课程号升序建唯一索引,SC表按学号升序和课程号降序建唯一索引。CREATE UNIQUE INDEX Stusno ON Student(Sno);CREATE UNIQUE INDEX Coucno ON Course(Cno);CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC);,anliping,27,二、删除索引,一般格式为:DROP INDEX;例7 删除Student表的Stusname索引 DROP INDEX Stusn
16、ame;说明:索引一经建立,就由系统使用和维护它,不需用户干预。建立索引是为了减少查询操作的时间,但如果数据增删改频繁,系统会花费许多时间来维护索引。这时,可以删除一些不必要的索引。删除索引时,系统会同时从数据字典中删去有关该索引的描述。,anliping,28,4.3 查询,是数据库的核心操作,一般格式为:SELECT ALL|DISTINCT,FROM,.WHERE GROUP BY HAVING ORDER BY ASC|DESC;,anliping,29,整个SELECT语句的含义是:根据WHERE子句的条件表达式,从FROM子句指定的基本表或视图中找出满足条件的元组;(选择)再按SE
17、LECT子句中的目标列表达式,选出元组中的属性值形成结果表;(投影)如果有GROUP子句,则将结果按的值进行分组,该属性列值相等的元组为一个组,通常会在每组中作用集函数;如果GROUP子句带HAVING短语,则只有满足指定条件的组才予输出;如果有ORDER 子句,则结果表还要按的值的升序或降序排序。,anliping,30,4.3.1 单表查询一、选择表中的若干列,1.查询指定列 例1 查询全体学生的学号与姓名 SELECT Sno,Sname FROM Student;中各个列的先后顺序可以与表中的顺序不一致。也就是说,用户在查询时可以根据应用的需要改变列的显示顺序。,anliping,31
18、,例2 查询全体学生的姓名、学号、所在系 SELECT Sname,Sno,Sdept FROM Student;这时结果表中的列的顺序与基表中不同,是按查询要求,先列出姓名属性,然后再列学号属性和所在系属性。,anliping,32,2.查询全部列,例3 查询全体学生的详细记录 SELECT*FROM Student;该SELECT语句实际上是无条件地把Student表的全部信息都查询出来,所以也称为全表查询,这是最简单的一种查询。,anliping,33,3.查询经过计算的值,SELECT子句的不仅可以是表中的属性列,也可以是有关表达式,即可以将查询出来的属性列经过一定的计算后列出结果。例
19、4 查全体学生的姓名及其出生年份 SELECT Sname,2006-Sage FROM Student;本例中,中第二项不是通常的列名,而是一个计算表达式,是用当前的年份(假设为2006年)减去学生的年龄,这样,所得的即是学生的出生年份。,anliping,34,输出的结果为:,anliping,35,不仅可以是算术表达式,还可以是字符串常量、函数等。例5 查全体学生的姓名、出生年份和所在系,要求用小写字母表示所有系名。SELECT Sname,Year of Birth:,2006-Sage,LOWER(Sdept)FROM Student;,anliping,36,结果为:,anlipi
20、ng,37,用户可以通过指定别名来改变查询结果的列标题,这对于含算术表达式、常量、函数名的目标列表达式尤为有用。例如对于上例,可以如下定义列别名:SELECT Sname NAME,Year of Birth:BIRTH,2006-Sage BIRTHDAY,LOWER(Sdept)DEPARTMENT FROM Student;,anliping,38,结果为:,anliping,39,说明:ISLOWER()Function:Determines whether the leftmost character of the specified character expression is
21、a lowercase alphabetic character.Syntax:ISLOWER(cExpression)Returns:LogicalLOWER()Function:Returns a specified character expression in lowercase letters.Syntax:LOWER(cExpression)Returns:Character,anliping,40,二、选择表中的若干元组,1.消除取值重复的行 例6 查所有选修过课的学生的学号 SELECT Sno FROM SC;,anliping,41,假设SC表中有下列数据,anliping
22、,42,执行上面的SELECT语句后,结果为:Sno-95001 95001 95001 95002 95002,anliping,43,该查询结果里包含了许多重复的行。如果想去掉结果表中的重复行,必须指定DISTINCT短语:SELECT DISTINCT SnoFROM SC;执行结果为:Sno-95001 95002,anliping,44,2.查询满足条件的元组,查询满足指定条件的元组可以通过WHERE子句实现。WHERE子句常用的查询条件如表4-3所示。表4-3 常用的查询条件,anliping,45,(1)比较大小 例7 查计算机系全体学生的名单 SELECT SnameFROM
23、StudentWHERE Sdept=CS;例8 查所有年龄在20岁以下的学生姓名及其年龄 SELECT Sname,SageFROM StudentWHERE Sage 20;,anliping,46,或:SELECT Sname,SageFROM Student WHERE NOT Sage=20;例9 查询考试成绩有不及格的学生的学号。SELECT DISTINCT Sno FROM SC WHERE Grade 60;这里使用了DISTINCT短语,当一个学生有多门课程不及格,他的学号也只列一次。,anliping,47,(2)确定范围 BETWEENAND 和 NOT BETWEEN
24、 AND 例10 查询年龄在20至23岁之间的学生的姓名、系别和年龄.SELECT Sname,Sdept,SageFROM Student WHERE BETWEEN(Sage,20,23);教材:WHERE Sage BETWEEN 20 AND 23;,anliping,48,与BETWEEN().相对的谓词是NOT BETWEEN()。例11 查询年龄不在20至23岁之间的学生姓名、系别和年龄。SELECT Sname,Sdept,Sage FROM StudentWHERE NOT BETWEEN(Sage,20,23)教材:WHERE Sage NOT BETWEEN 20 AND
25、 23;,anliping,49,(3)确定集合 IN,NOT IN 查找属性值是否属于指定集合的元组.例12 查信息系(IS)、数学系(MA)和计算机科学系(CS)的学生的姓名和性别.SELECT Sname,Ssex FROM Student WHERE Sdept IN(IS,MA,CS);,anliping,50,与IN相对的谓词是NOT IN,用于查找属性值不属于指定集合的元组。例13 查既不是信息系、数学系,也不是计算机科学系的学生的姓名和性别.SELECT Sname,Ssex FROM Student WHERE Sdept NOT IN(IS,MA,CS),anliping,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教学 课件 关系 数据库 标准 语言 SQL
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-6289587.html