(一)SQL数据库体系结构
1. SQL的特点
- 综合统一
- 高度非过程化
- 面向集合的操作方式
- 两种使用方式
- 语言简洁、易学易用
2. SQL支持三级模式结构
SQL
语言支持关系数据库的三级模式结构,其中,视图对应外模式、基本表对应模式、存储文件对应内模式。如下图所示:

(二)SQL的基本组成
- 数据定义语言
- 交互式数据操纵语言
- 事务控制
- 嵌入式
SQL
和动态SQL
- 完整性
- 权限管理
(三)SQL数据定义
1. 创建表
语句格式:
CREATE TABLE <表名>(<列名><数据类型>[列级完整性约束条件]
[,<列名><数据类型>[列级完整性约束条件]]...
[,<表级完整性约束条件>]
);
列级完整性约束条件有NULL
(空)和UNIQUE
(取值唯一),如NOT NULL UNIQUE
表示取值唯一,不能取空值。
2. 修改和删除表
(1)修改表
语句格式:
ALTER TABLE <表名>[ADD <新列名><数据类型>[完整性约束条件]]
[DROP <完整性约束名>]
[MODIFY <列名><数据类型>];
(2)删除表
语句格式:
DROP TABLE <表名>;
3. 索引建立与删除
在数据库中,索引使数据库程序无须对整个表进行扫描,就可以在其中找到所需数据。
数据库中的索引是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。
索引的作用:
- 通过创建唯一索引,可以保证数据记录的唯一性
- 可以大大加快数据的检索速度
- 可以加速表与表之间的连接,这一点在实现数据的参照完整性方面有特别的意义
- 在使用
ORDER BY
和GROUP BY
子语句进行检索数据时,可以显著减少查询中分组和排序的时间 - 使用检索可以在检索数据的过程中使用优化隐藏器,提高系统性能
索引分为聚集索引和非聚集索引。聚集索引是指索引表中索引项的顺序与表中记录的物理顺序一致的索引。
(1)建立索引
语句格式:
CREATE [UNIQUE] [CLUSTER] INDEX <索引名>
ON <表名>(<列名>[<次序>][,<列名>[<次序>]]...);
参数说明:
- 次序:可选
ASC
(升序)或DSC
(降序),默认值为ASC
-
UNIQUE
:表明此索引的每一个索引值只对应唯一的数据记录 -
CLUSTER
:表明要建立的索引的聚簇索引,意为索引项的顺序是与表中记录的物理顺序一致的索引组织
(2)删除索引
语句格式:
DROP INDEX <索引名>
4. 视图创建与删除
视图是从一个或多个基本表或视图中导出的表,其结构和数据是建立在对表的查询基础上的。
和真实的表一样,视图也包括几个被定义的数据列和多个数据行,但从本质上讲,这些数据列和数据行来源于其所引用的表。因此,视图不是真实存在的基本表,而是一个虚拟表,视图所对应的数据并不实际地以视图结构存储在数据库中,而是存储在视图所引用的表中。
优点和作用:
- 可以使视图集中数据、简化和定制不同用户对数据库的不同数据要求
- 使用视图可以屏蔽数据的复杂性,用户不必了解数据库的结构,就可以方便地使用和管理数据,简化数据权限管理和重组数据以便输出到其他应用程序中
- 视图可以使用户只关心他感兴趣的某些特定数据和他们所负责的特定任务,而那些不需要的或者无用的数据则不在视图中显示
- 视图大大地简化了用户对数据的操作
- 视图可以让不同的用户以不同的方式看到不同或者相同的数据集
- 在某些情况下,由于表中数据量太大,因此在设计表时常将表进行水平或者垂直分割,以免表的结构的变化对应用程序产生不良的影响
- 视图提供了一个简单而有效的安全机制
(1)视图的创建
语句格式:
CREATE VIEW 视图名(列表名)
AS SELECT 查询子句
[WITH CHECK OPTION];
注意:
- 子查询可以是任意复杂的
SELECT
语句,但通常不允许含有ORDER BY
子句和DISTINCT
短语 -
WITH CHECK OPTION
表示对UPDATE、INSERT、DELETE
操作时保证更新、插入或删除的行满足视图定义中的谓语条件(即子查询中的条件表达式) - 组成视图的属性列名或者全部省略或者全部指定
(2)视图的删除
语句格式:
DROP VIEW 视图名
(四)SQL数据查询
1. SELECT基本结构
语句格式:
SELECT [ALL|DISTINCT] <目标列表达式> [,<目标列表达式>]...
FROM <表名或视图名> [,<表名或视图名>]
[WHERE <条件表达式>]
[GROUP BY <列名 1> [HAVING <条件表达式>]]
[ORDER BY <列名 2> [ASC|DESC]...]
-
SELECT
子句对应的是关系代数中的投影运算,用来列出查询结果中的属性 -
FROM
子句对应的是关系代数中的笛卡尔积,它列出的是表达式求值过程中需要扫描的关系,即在FROM
子句中出现多个基本表或视图时,系统首先执行笛卡尔积操作 -
WHERE
子句对应的是关系代数中的选择谓词
2. 简单查询
简单查询只需要三个保留字,即SELECT
、FROM
和WHERE
。
3. 连接查询
若查询涉及两个以上的表,则称为连接查询。
4. 子查询与聚集函数
子查询也称为嵌套查询。嵌套查询是指一个SELECT-FROM-WHERE
查询块可以嵌入另一个查询块中。
聚集函数是以一个值的集合为输入,返回单个值的函数。
包括:
- 平均值
AVG
- 最小值
MIN
- 最大值
MAX
- 求和
SUM
- 计数
COUNT
5. 分组查询
-
GROUP BY
子句
在WHERE
子句后面加上GROUP BY
子句可以对元组进行分组,保留字GROUP BY
后面跟着一个分组属性列表。最简单的情况是FROM
子句后面只有一个关系,根据分组属性对它的元组进行分组。 -
HAVING
子句
假如元组在分组前按照某种方式加上限制,使得不需要的分组为空,在GROUP BY
子句后面跟一个HAVING
子句即可。
6. 更名运算
通过使用AS
来实现,例如:old-name AS new -name
。
AS
子句既可以出现在SELECT
子句,也可以出现在FROM
子句中。
7. 字符串操作
对于字符串进行的最常用的操作是使用操作符LIKE
的模式匹配。使用两个特殊的字符来描述模式:
-
%
匹配任意字符串 -
_
匹配任意一个字符
8. 视图的查询
当查询视图表时,系统先从数据字典中取出该视图的定义,然后将定义中的查询语句和对该视图的查询语句结合起来,形成一个修正的查询语句。
(五)SQL数据更新
1. 插入
语句格式:
INSERT INTO 基本表名(字段名[,字段名]...)
VALUES(常量[,常量]...);
或
INSERT INTO 基本表名(列表名)
SELECT 查询语句;
2. 删除
语句格式:
DELETE FROM 基本表名
[WHERE 条件表达式]
3. 修改
语句格式:
UPDATE 基本表名
SET 列名=值表达式(,列名=值表达式...)
[WHERE 条件表达式];
(六)SQL访问控制
数据控制控制的是用户对数据的存储权力。
1. 授权的语句格式
语句格式:
GRANT <权限>[,<权限>]...
[ON <对象类型> <对象名>]
TO <用户> [,<用户>]...
[WITH GRANT OPTION];
不同类型的操作对象有不同的操作权限,常见的操作权限如下图所示:

2. 收回权限语句格式
语句格式:
REVOKE <权限> [,<权限>]...
[ON <对象类型> <对象名>]
FROM <用户> [,<用户>]...;
(七)嵌入式SQL
通常采用预编译的方法识别嵌入到高级语言中的SQL
语句。
嵌入式SQL
与主语言之间的通信通常有以下三种方式:
-
SQL
通信区向主语言传递SQL
语句执行的状态信息,使主语言能够据此信息控制程序流程 - 主变量也称共享变量。主语言向
SQL
语句提供参数主要通过主变量,主变量由主语言的程序定义,并用SQL
的DECLARE
语句说明。在引用时,为了与SQL
属性名相区别,需要在主变量前加“:” - 游标
SQL
语言是面向集合的,一条SQL
语句可产生或处理多态记录,而主语言是面向记录的,一组主变量一次只能放一条记录。所以,引入游标,通过移动游标指针来决定获取哪一条记录
网友评论