《数据库原理与应用CHAP01》由会员分享,可在线阅读,更多相关《数据库原理与应用CHAP01(55页珍藏版)》请在金锄头文库上搜索。
1、第 1 章 关系数据库标准语言SQL 第1章关系数据库标准语言- SQL 1.1 SQL 概述 1.2 SQL的数据定义 1.3 SQL的数据查询 1.4 SQL的数据更新 1.5 SQL的视图1.6 SQL的数据控制 1.7 嵌入式SQL 1.8 查询优化1.1 SQL 概述 1.1.1 SQL的特点1.1.1 SQL的特点 1、综合统一 2、高度非过程化 3、面向集合的操作方式 4、一种语法,两种使用方式 6、支持三级模式结构 5、语言简捷,易学易用 SQL特点1: 综合统一 SQL语言将数据定义语言DDL、数 据操纵语言DML、数据控制语言DCL 的功能集于一体,语言风格统一,可 以独立
2、完成数据库生命周期中的全部 活动SQL特点2:高度非过程化用SQL语言进行数据操作时,只要 提出“做什么”,而无需指明“怎么 做”。SQL特点3:面向集合的操作方式SQL语言操作的对象和操作的结 果都用关系表示。SQL特点4:一种语法,两种使用方式 SQL语言既是自含式语言,又是嵌入式语言。SQL特点5:语言简捷,易学易用 完成核心功能只用9个动词,SQL语言接近 英语句子。SQL特点6:支持三级模式结构SQL命令视图1视图2基本表1基本表2基本表3基本表4存储文件1存储文件2外模式模 式内模式SQL特点6:支持三级模式结构 外模式对应于视图(View),模式对应于基本表,内模式 对应于存储文
3、件。其中: 基本表。基本表是数据库中独立存在的表,每个基本 表对应一个关系模式和关系。基本表由SQL语言的 CREATE TABLE命令创建。一个(或多个)基本表对应 一个存储文件,一个基本表可以建立若干索引,它们都 依附于基本表且存放在存储文件中。 视图(虚拟表)。视图对应于外模式(用户模式),它 是由一个或几个基本表导出的表虚拟表,由SQL语 言的CREATE VIEW命令创建。视图中存放着视图的定义 及其关联的基本表名称等信息而不存放视图对应的具体 数据。用户可以在视图上再定义视图。 存储文件。若干个基本表组成一个存储文件。存储文 件的逻辑结构组成了关系数据库的内模式。视图机制的主要优点
4、: 简化用户的操作。 多角度看待同一数据。 视图为数据库重构提供了一定程度的 逻辑独立性。 对数据安全保护。1.2 SQL的数据定义(1)1.2.1 基本表的定义、删除与修改1.2.2 建立与删除索引 定义基本表(1) 说明:方括为可选项,是所要定义的基本表的名字。 建表时可以定义与该表有关的完整性约束条件,其约束条件 被存入DBMS的数据字典中。当用户操作表中数据时由 DBMS 自动检查该操作是否违背这些完整性约束条件。 如果完整性约束条件涉及到该表的多个属性列,则必须定义 在表级上,否则既可以定义在列级也可以定义在表级。命令格式为: CREATE TABLE ( 列级完整性约 束条件 ,
5、列级完整性约束条件, ADD 完整性约束 DROP 完整性约束名 MODIFY ;说明:是要修改的基本表表名;ADD子句用于增加新列和新的完整性约束条件;MODIFY子句用于修改原有的列定义,包括修; 改列名和 数据类型。 删除基本表 用DROP TABLE语句可删除基本表。 其一般格式为:DROP TABLE ;向表中添加元组 向表中添加耽搁元组使用INSERT命令,其语句格式为: INSERT INTO (, VALUES(,);说明:该命令的功能是将一个新元组添加到指定的表中,且 新元组属性列1的值为常量1,属性列2的值为常量2,。INTO子句中没有出现的属性列,其新元组在这些列上 将取
6、空值。但若在CREATE定义表时使用了NOT NULL约束 的属性列不能取空值,否则会出错。如果INTO子句中没有指明任何列名,则新插入的元组 必须在每个属性列上均有值。1.2.2 建立与删除索引 1 建立索引:使用CREATE INDEX命令,其语句格式为: CREATE UNIQUE CLUSTER INDEXON ( ,); 说明: (1)是要为其创建索引的基本表的名字。索引可以建立在 该表的一列或多列上,各列名之间用逗号分隔。每个 还可以用来指定索引值按照ASC(升序)或DESC(降 序)的方式排序,缺省值为ASC。 (2)UNIQUE表明每一个索引值只对应唯一的一个元组,即索引 值相
7、同的元组只索引一次。 (3)CLUSTER表示要建立的索引是聚簇索引。所谓聚簇索引是指 索引项的顺序与表中元组的物理顺序一致的索引组织。删除索引 使用DROP INDEX语句,其一般格式为:DROP INDEX ;1.3 SQL的数据查询 1.3.1 查询语句1.3.2 连接查询 1.3.3 嵌套查询 1.3.4 集合查询查询语句SELECT语句的一般格式: SELECT ALL|DISTINCT , FROM , WHERE GROUP BY HAVING ORDER BY ASC|DESC;说明:根据WHERE子句的条件,从FROM子句指定的基本 表或视图中找出满足条件的元组,再按目标列表
8、达式规定 的属性列选出元组中对应的属性值形成结果表。 如果有GROUP子句,则将结果按的值进行分组。 如果GROUP子句带HAVING短语,则只输出满足指定条件 的组。如果有ORDER子句,则结果表还要按的值 升序或降序方式排序。1.3.1 简单的选择与投影查询 无条件查询 条件查询 查询结果排序 集函数的使用 查询结果分组无条件查询 在SELECT语句中不使用WHERE字句。条件查询(1)在SELECT语句中使用WHERE子句。常见的条件有:(1)比较条件。例如: where Sdept = 数学; where Sage18 AND Sage 18 NOT BETWEEN 18 AND 22
9、;where Sdept IN (自动化, 数学,计算机); 还有用LIKE和NOT LIKE构成谓词条件的语法格式如下:NOTLIKEESCAPE 其含义是查找指定的属性列值与向匹配的元组。可以是一个 完整的字符串,也可以含有通配符%和-,其意义如下: % (百分号): 代表任意长度(长度可以为0)的字符串。例如a%b表示以a开 头,以b结尾的任意长度的字符串。如acb,abcdb,ab等都满足该匹配串。 _ (下横线): 代表任意单个字符。例如a_b 表示以a开头,以b结尾的长度为 3的任意字符串。如acb,adb等都满足该匹配串。 此外,还有使用IS NULL和IS NOT NULL谓词
10、进行有关空值判断的谓词条件, 如:WHERE Grade IS NULL; 注意:以上的“IS”不能用等号“=”代替。查询结果排序使用ORDER BY 字句以及DESC或ASC命 令关键字。使用集函数 在SELECT语句中使用COUNT()、 AVG等集函数查询结果分组在SELECT语句中使用GROUP BY字句将查询结果 表按照某一列或多列的值分组,使其列值相等的为一 组。还可以用HAVING短语指定结果组满足的条件。1.3.2 连接查询 不同表之间的连接查询 自身连接查询 外连接查询不同表之间的连接查询一般是在WHERE字句中WHERE子句中将两(多)个表的属性列名,作 为连接条件实现,其
11、格式通常为:. . 或者. BETWEEN . AND . 说明: 当连接运算符为“=”时,称为等值连接,其它为非等值连接。连 接条件中列名对应属性的类型必须是可比的,但列名不必是相同的。 DBMS执行连接操作的过程是:首先在表1中找到第1个元组,然后对 表2从头开始扫描逐一查找满足连接条件的元组,找到后就将表1中的 第1个元组与该元组拼接起来,形成结果表中的一个元组。表2全部查 找完后,再找表1中第2个元组,然后再对表2从头开始扫描,逐一查找 满足连接条件的元组,找到后就将表1中的第2个元组与该元组拼接起 来,形成结果表中的一个元组。重复上述操作,直到表1中的全部元组 都处理完毕为止。 自身
12、连接查询自身连接:将同一个表与自己进行连 接的查询,其基本方法是在SELECT语句 的FROM子句中将同一个表取两个不同的 别名。比如:SELECT A.cno, A.cname, B.pre_CnoFROM Courses A, Courses BWHERE A.pre_Cno = B.cno;外连接 选定连接操作中涉及的某个表A为基 准,即使另一个表B中没有与之匹配 的记录,其结果表中也要求包括表A 的所有元组。若表B中没有与之匹配 的记录,结果表中涉及表B的属性列 全部取空值。 1.3.3 嵌套查询嵌套查询:将一个查询块(SELECT-FROM- WHERE)嵌套在另一个查询块的WHER
13、E子句 或HAVING短语条件中的查询。2、常用的嵌套查询 带谓词IN的嵌套查询 带有比较运算符的嵌套查询 带谓词ANY或ALL的嵌套查询 带谓词EXISTS的嵌套查询 1.3.4 集合查询1、并操作查询。标准SQL提供了并操作运 算命令UNION,将多个SELECT语句的结 果进行传统的集合并操作。但这个操作要 求参加UNION操作的各个结果表的列数 必须相同且对应属性的数据类型也相同。 2、标准SQL中没有直接提供集合的交和差 的操作,但可用其它条件查询来实现 1.4 SQL的数据更新1.4.1 插入数据1.4.2 修改数据1.4.3 删除数据1.4.1 插入数据将一个子查询语句的结果集插
14、入到表中的 INSERT命令格式为:INSERT INTO (,)SELECT子查询语句;1.4.2 修改数据修改(UPDATE)操作语句的一般格式为:UPDATE SET =,= WHERE ;说明:该命令修改指定表中满足WHERE子句条 件的元组。其中SET子句是用的值取 代相应的属性列的值。如果省略 WHERE子句,则表示要修改表中的所有元组。1.4.3 删除数据删除(DELETE)语句的一般格式为:DELETE FROM WHERE;说明: DELETE语句的功能是从指定表中删除满足WHERE子句条件的所 有元组。如果省略WHERE子句,表示删除表中全部元组,但表的模 式定义仍在字典中
15、,既DELETE语句使表成为空表。 增删改操作每次只能对一个表进行,且必须注意关系之间的参照 完整性和操作顺序,否则就会操作失败甚至造成数据库的不一致问 题。因此,执行删除操作时,必须将有关参照表的相关元组一起删 除。一般使用以下的两种策略: 系统自动地删除参照表中相应的元组; 系统检查参照表中是否存在相应的元组,如果存在,则操作失 败。1.5 SQL的视图 视图是从一个或几个基本表(或视图)导出的一 个虚拟表。视图可以和基本表一样被查询、被 删除。本节分别介绍如下内容: 1.5.1 定义视图 1.5.2 查询视图 1.5.3 更新视图1.5.1 定义视图SQL语言用CREATE VIEW命令建立视图,其一般格式为: CREATE VIEW (,) AS WITH CHECK OPTION; 说明: 可以是任意复杂的SELECT语句,但通常不允许 含有ORDER BY子句和DISTINCT短语。 WITH CHECK OPTION表示用视图进行UPDATE,INSERT和DELETE 操作时要保证更新、插入或删除的元组满足视图定义中的谓词条件(即子 查询中的条件表达式)。 组成视图的属性列名要么全部省略要么者全部指定。如果视图定义中 省略了属性列名,则隐含该视图由子查询中SELECT子句的目标列组成。 但在下列三种情况下必须明确指定组成视图的所有列名