第3章关系数据库标准语言SQL.ppt
《第3章关系数据库标准语言SQL.ppt》由会员分享,可在线阅读,更多相关《第3章关系数据库标准语言SQL.ppt(138页珍藏版)》请在三一文库上搜索。
1、2019年4月3日10时4分,周口师范学院计算机科学系,1,第3章 关系数据库标准语言SQL,2019年4月3日10时4分,周口师范学院计算机科学系,2,在数据库系统中,数据查询是最常用的操作。SQL是目前使用最广泛的数据库语言。利用SQL可以通过功能强大而又简捷的查询语言与数据库打交道,从数据库中得到想要的数据。 SQL语句主要被用于进行数据库的查询、定义、操纵和控制几个方面,是一种功能齐全的数据库语言。 SQL的数据定义是指对关系模式一级的定义。数据操纵是指对关系中的具体数据进行增、删、改等更新操作。数据控制是指对数据访问权限的授予与取消。,2019年4月3日10时4分,周口师范学院计算机
2、科学系,3,3.1 SQL语言基本知识 3.1.1 SQL的发展史 1974年IBM圣约瑟实验室的Boyce和Chamberlin为关系数据库管理系统System-R设计的一种查询语言,当时称为SEQUEL语言(Structured English Query Language),后简称为SQL。 1981年IBM推出关系数据库系统SQL/DS后,SQL得到了广泛应用。 1986年美国国家标准协会(ANSI)公布了第一个SQL标准SQL86。 1987年,ISO通过SQL86标准。,2019年4月3日10时4分,周口师范学院计算机科学系,4,1989年,ISO制定SQL89标准,SQL89标准
3、在SQL86基础上增补了完整性描述。 1990年,我国制定等同SQL89的国家标准。 1992年,ISO制定SQL92标准,即SQL2。 1999年,ANSI制定SQL3标准。 SQL成为国际标准后,对数据库以外的领域产生了很大的影响,有不少软件产品将SQL语言的数据查询功能与图形功能、软件工程工具、软件开发工具、人工智能程序结合起来。SQL已成为数据库领域中一个主流语言。,2019年4月3日10时4分,周口师范学院计算机科学系,5,在许多软件产品中,软件厂商都对SQL的基本命令集进行了扩充,将其扩展成嵌入式SQL语言。SQL Server 2000中使用Transact-SQL语言与数据库服
4、务器打交道。,2019年4月3日10时4分,周口师范学院计算机科学系,6,3.1.2 SQL的特点 SQL具有如下特点: 1综合统一。 2高度非过程化。 3面向集合的操作方式。 4以同一种语法结构提供两种使用方式 5. 语言简捷、易学易用。 SQL语言功能极强,但由于设计巧妙,语言十分简捷,完成核心功能只用了9个动词,如下表示,SQL语言接近英语口语,因此容易学习,容易使用。,2019年4月3日10时4分,周口师范学院计算机科学系,7,SQL语言的动词,2019年4月3日10时4分,周口师范学院计算机科学系,8,SQL语言支持关系数据库三级模式结构,如下图示。其中外模式对应于视图和部分基本表,
5、模式对应于基本表,内模式对应于存储文件。 基本表是本身独立存在的表,在SQL中一个关系就对应一个表。一个(或多个)基本表对应一个存储文件。一个表可以带若干个索引,索引也存放在存储文件中。 存储文件的逻辑结构组成了关系数据库的内模式,存储文件的物理结构是任意的,对用户是透明的。 视图是从一个或几个基本表导出的表。它本身不独立存储在数据库中,是一个虚表。即数据库中只存放视图的定义而不存放视图对应的数据。,2019年4月3日10时4分,周口师范学院计算机科学系,9,外模式,内模式,模式,2019年4月3日10时4分,周口师范学院计算机科学系,10,3.1.3 SQL的分类 1、数据定义语言(DDL:
6、Data Definition Language) 创建、修改或删除数据库中各种对象,包括表、视图、索引等。 2、查询语言(QL:Query Language) 按照指定的组合、条件表达式或排序检索已存在的数据库中的数据,但并不改变数据库中数据。 3、数据操纵语言(DML:Data Manipulation Language ) 对已经存在的数据库进行记录的插入、删除、修改等操作,2019年4月3日10时4分,周口师范学院计算机科学系,11,4、数据控制语言(DCL:Data Control Language) 用来授予或收回访问数据库的某种特权、控制数据操纵事务的发生时间及效果、对数据库进行
7、监视 注意:在书写各种SQL 命令时,命令中所涉及的标点符号,如括号、逗号、分号、圆点(英文句号)等都应是英文半角,如果写成中文全角符号,则会在执行命令时出错。,2019年4月3日10时4分,周口师范学院计算机科学系,12,3.2 数据定义 数据定义命令用于建立数据库和建立、修改、 删除基本表。,SQL的数据定义语句,2019年4月3日10时4分,周口师范学院计算机科学系,13,3.2.1 定义、删除与修改基本表 一、定义基本表 建立数据库最重要的一步就是定义一些基本表。SQL语言使用CREATE TABLE 语句定义基本表,其一般格式如下: CREATE TABLE (列级完整性约束条件 列
8、级完整性约束条件表级完整性约束条件); 其中是所要定义的基本表的名字,它可以由一个或多个属性(列)组成。,2019年4月3日10时4分,周口师范学院计算机科学系,14,建表的同时通常还可以定义与该表有关的完整性约束条件。这些完整性约束条件被存入系统的数据字典中,当用户操作表中数据时由DBMS自动检查该操作是否违背这些完整性约束条件。如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上,否则既可以定义在列级上也可以定义在表级上,2019年4月3日10时4分,周口师范学院计算机科学系,15,例1 建立一个“学生”表Student,它由学号Sno,姓名Sname,性别Ssex,年龄Sdept
9、、所在系Sdept五个属性组成。其中学号不能为空,值是唯一的,并且姓名取值也唯一。 CREATE TABLE Student (Sno CHAR(5) NOT NULL UNIQUE, Sname CHAR(20) UNIQUE, Ssex CHAR(1), Sage INT, Sdept CHAR(15); 其中:NOT NULL指的是该列的值不能为空值, UNIQUE指的是该列的值唯一。,2019年4月3日10时4分,周口师范学院计算机科学系,16,Student,2019年4月3日10时4分,周口师范学院计算机科学系,17,例2:建立如下表所示学生基本情况表的命令是: create ta
10、ble jbqk (number char(8)not null, name char(8)not null, sex char(2)not null, Birthday datetime, department char(12);,jbqk,2019年4月3日10时4分,周口师范学院计算机科学系,18,2019年4月3日10时4分,周口师范学院计算机科学系,19,建立课程表的命令是: create table course(c_number char(4)not null, c_name char(20) not null, period decimal(3,0), t_number cha
11、r(4) not null); 建立教师表(teacher)的命令是:: create table teacher(t_number char(4) not null, t_name char(8), title char(10); 建立选课表(sle_course)的命令是:: Create table sle_course(s_number char(8) not null, c_number char(4), score decimal(3,0);,2019年4月3日10时4分,周口师范学院计算机科学系,20,二、修改基本表 随着应用环境和应用需求的变化,有时需要修改已建立好的基本表,S
12、QL语言使用ALTER TABLE 语句定义基本表,其一般格式如下: ALTER TABLE ADD 列级完整 性约束条件 DROP MODIFY ;,2019年4月3日10时4分,周口师范学院计算机科学系,21,例1:向Student表中增加“入学时间”列,其数据类型为日期型。 ALTER TABLE Student ADD Scome DATE; 不论基本表中原来是否已有数据,新增加的列一律为空值。 例2:将Student表中年龄的数据类型改为短整型 ALTER TABLE Student MODIFY Sage SMALLINT;,2019年4月3日10时4分,周口师范学院计算机科学系,
13、22,例3 将Student表中学生姓名必须取唯一值的约束删除 ALTER TABLE Student DROP UNIQUE(Sname); SQL没有提供删除属性列的语句,用户只能间接实现这一功能,即先把表中要保留的列及其内容复制到一个新表中,然后删除原表,再将新表重命名为原表名。,2019年4月3日10时4分,周口师范学院计算机科学系,23,三、 数据表的删除 DROP TABLE ; 例4:删除Student表,使用如下命令格式: DROP TABLE Student; 注意: 基本表定义一旦删除,表中的数据、此表上建立的索引和视图都将自动被删除掉。因此执行删除基本表的操作一定要格外小
14、心。,2019年4月3日10时4分,周口师范学院计算机科学系,24,3.2.2 索引的建立与删除 索引是对数据库表中一个或多个列的值进行排序的结构。可以利用索引快速访问数据库表中的特定信息。 一、建立索引语句 CREATE UNIQUECLUSTER INDEX ON (列名次序,列名次序); 说明:索引可以建立在一列和多列之上,索引顺序可以是ASC(升序)或DESC(降序),缺省值是ASC(升序) 。UNIQUE表示每一个索引值对应唯一的数据记录。,2019年4月3日10时4分,周口师范学院计算机科学系,25,UNIQUE表明此索引的每一个索引值只对应唯一的数据记录。 CLUSTER表示要建
15、立的索引是聚簇索引。所谓聚簇索引是指索引项的顺序与表中记录的物理顺序一致的索引组织。 例如,执行下面的索引语句: CREATE CLUSTER INDEX Stusname ON Student(Sname); 将会在Student表的Sname列上建立一个聚簇索引,而且Student表中的记录将按照Sname值的升序存放。,2019年4月3日10时4分,周口师范学院计算机科学系,26,用户可以在最常查询的列上建立聚簇索引以提高查询效率。显然在一个基本表上最多只能建立一个聚簇索引。建立聚簇索引后,更新索引列数据时,往往导致表中记录的物理顺序的变更,代价较大,因此对于经常更新的列不宜建立聚簇索引
16、。,2019年4月3日10时4分,周口师范学院计算机科学系,27,例1:为学生数据库中的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);,2019年4月3日10时4分,周口师范学院计算机科学系,28,S
17、tudent,(a),设有一个学生-课程数据库,包括学生关系Student,课程关系Course和选修关系SC。如下图示,68,2019年4月3日10时4分,周口师范学院计算机科学系,29,Course,(b),2019年4月3日10时4分,周口师范学院计算机科学系,30,( c ),SC,2019年4月3日10时4分,周口师范学院计算机科学系,31,二、删除索引 索引一经建立,就由系统使用和维护它,不需用户干预。建立索引是为了减少查询操作时间,但如果数据增、删、改频繁,系统会花费许多时间来维护索引,这时,可以删除一些不必要的索引 DROP INDEX ; 注意:该命令不能删除由CREATE
18、TABLE或者ALTER TABLE命令创建的主键和唯一性约束索引,也不能删除系统表中的索引。 例2、删除例1中建立的索引Stusno DROP INDEX Stusno;,2019年4月3日10时4分,周口师范学院计算机科学系,32,3.3 数据查询语言,数据库查询是数据库的核心操作。SQL语言提供了SELECT语句进行数据库的查询,该语句具有灵活的使用方式和丰富的功能。,2019年4月3日10时4分,周口师范学院计算机科学系,33,SQL语言的查询语句一般格式是: SELECT ALL|DISTINCT , FROM , WHERE GROUP BY HAVING ORDER BY ASC
19、|DESC; 下面对该命令进行一些说明:,2019年4月3日10时4分,周口师范学院计算机科学系,34,1命令含义 从FROM子句指定的基本表或视图中,根据WHERE子句的条件表达式查找出满足该条件的元组(记录),再按照SELECT子句指定的目标列表达式,选出元组中的属性值形成结果表。如果有GROUP BY子句,则将结果按“列名1”的值进行分组,该属性列值相等的元组为一个组;如果GROUP BY子句带有短语HAVING,则只有满足短语指定条件的分组才会输出。如果有ORDER BY子句,则结果表要按照的值进行升序和降序排列。,2019年4月3日10时4分,周口师范学院计算机科学系,35,SELE
20、CT ALL|DISTINCT实现的是对表的投影操作, WHERE 中实现的是选择操作。 FROM ,实现的是对指定表的广义笛卡尔积,2019年4月3日10时4分,周口师范学院计算机科学系,36,2目标列表达式 列表达式可以是“列名1,列名2”的形式;如果FROM子句指定了多个表,则列名应是“表名.列名”的形式。 列表达式可以使用SQL提供的库函数形成表达式,常用的函数如下: COUNT(*):统计记录条数。 COUNT(列名):统计一列值得个数。 SUM(列名):计算某一数值型列的值的总和。 AVG(列名):计算某一数值型列的值的平均值 MAX(列名):计算某一数值型列的值的最大值 DIST
21、INCT参数:表示在结果集中,查询出的内容相同的记录只留下一条。 MIN(列名):计算某一数值型列的值的最小值,2019年4月3日10时4分,周口师范学院计算机科学系,37,3.3.1 单表查询 单表查询是指仅涉及一个表的查询。 一、选择表中的若干列 选择表中的全部列和部分列,就是投影运算。 1、查询指定列 在很多情况下,用户只对表中的一部分属性列感兴趣,这时可以通过在SELECT子句的中指定要查询的属性。,2019年4月3日10时4分,周口师范学院计算机科学系,38,例1:查询全体学生的学号和姓名。 SELECT Sno,Sname FROM Student; 例2:查询全体学生的姓名、学号
22、、所在系。 SELECT Sname, Sno,Sdept FROM Student;,2019年4月3日10时4分,周口师范学院计算机科学系,39,2、查询全部列 将表中所有属性列都选出来,可以有两种方法。一种方法是在SELECT关键字后列出所有的列名。如果列的显示顺序与其在基表中的顺序相同,也可以简单地将指定为*。 例3:查询全体学生的详细记录。 SELECT * SELECT Sno,Sname, FROM Student FROM Student,2019年4月3日10时4分,周口师范学院计算机科学系,40,3、查询经过计算的值 SELECT子句的不仅可以是表中的属性列,也可以是表达式
23、。 例4:查全体学生的姓名及其出生年份 SELECT Sname,2004-Sage FROM Student; 输出的结果为: 不仅可以是算术表达式,还可以是字符串常量、函数等。,2019年4月3日10时4分,周口师范学院计算机科学系,41,例5:查询全体学生的姓名,出生年份和所在系,要求用小写字母表示所在系名。 SELECT Sname,Year of Birth, 2004-Sage,ISLOWER(Sdept) FROM Student; 输出结果为: 用户可以通过指定别名来改变查询结果的列标题。这对于含算术表达式、常量、函数名的目标列表达式尤为有用。例如,对上例,可定义如下:,201
24、9年4月3日10时4分,周口师范学院计算机科学系,42,SELECT Sname NAME,Year of Birth; BIRTH,2004-Sage BIRTHDAY, ISLOWER(Sdept) DEPARTMENT FROM Student; 结果为:,(c),2019年4月3日10时4分,周口师范学院计算机科学系,43,(a),(b),2019年4月3日10时4分,周口师范学院计算机科学系,44,二、选择表中的若干元组 1、消除取值重复的行 两个本来并不完全相同的元组,投影到指定的某些列上后,可能变成相同的行。如果想去掉表中的重复行,必须在SELECT子句中指定DISTINCET短
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 关系 数据库 标准 语言 SQL
链接地址:https://www.31doc.com/p-2497461.html