关系数据库SQL语言简介
SQL的特点
综合统一:SQL是集数据定义、数据操纵和数据控制功能于一体,语言风格统一,可独立完成数据库生命周期的所有活动。
高度非过程化:SQL语言是高度非过程化的,当进行数据操作时,存储路径对用户来说是透明的,提高了数据的独立性。
面向集合的操作方式:操作对象、查找结果可以是记录的集合。
两种使用方式:既可以在终端键盘上输入SQL命令,对数据库进行操作,也可以将SQL语言嵌入到高级语言程序中。
语言简洁,易学易用:SQL语言功能极强,完成核心功能只用了9个动词,包括以下4类。
数据查询:SELECT
数据定义:CREATEDROPALTER
数据操纵:INSERTUPDATEDELETE
数据控制:GRANTREVOKE
SQL数据定义
1.创建表(CREATE TABLE)
语句格式:
CREATE TABLE <表名>(<列名><数据类型>[列级完整性约束条件]
[,<列名><数据类型>[列级完整性约束条件]]...
[,<表级完整性约束条件>]);
列级完整性约束条件有:NULL(空)、UNIQUE(取值唯一)等。
2.修改表(ALTER TABLE)
语句格式:
ALTER TABLE <表名>[ADD<新列名><数据结构>[完整性约束条件]]
[DROP<完整性约束名>]
[MODIFY<列名><数据类型>];
3.删除表(DROP TABLE)
语句格式:
DROP TABLE <表名>;
4.建立索引
语句格式:
CREATE [UNIQUE][CLUSTER] INDEX <索引名>
ON <表名>(<列名>[<次序>][,<列名>[<次序>]]...);
参数说明:
次序。可选ASC(升序)或者DSC(降序),默认值为ASC。
UNIQUE。表明此索引的每一个索引值只对应唯一的数据记录。
CLUSTER。表明要建立的索引是聚集索引,意为索引项的顺序是与表中记录的物理顺序一致的索引组织。
5.删除索引
语句格式:
DROP INDEX <索引名>;
6.定义视图
视图是从一个或者多个表或视图中导出的表,其结构和数据是建立在对表的查询基础上的。视图不是真实存在的基础表而是一个虚拟表,视图所对应的数据并不真实存在以视图结构存储的数据库中,而是存储在视图所引用的表中。
语句格式:
CREATE VIEW 视图名 [(列名)[,<列名>]]
AS <子查询>
[WITH CHECK OPTION];
注意:
a.子查询可以是任意复杂的SELECT语句,但通常不允许含有ORDER BY 子句和 DISTINCT 短语。
b.WITH CHECK OPTION 表示对 UPDATE, INSERT, DELETE 操作时保证更新、插入或删除的行满足视图定义中的谓语条件(即子查询中的条件表达式)。
c.组成视图的属性列名或者全部省略或者全部指定。如果省略属性列名,则隐含该视图由 SELECT 子查询目标列的诸属性组成。
7.删除视图
语句格式:
DROP VIEW <视图名>;
SQL数据查询
SQL的数据操纵功能包括SELECT(查询)、INSERT(插入)、DELETE(删除)和UPDATE(修改)4条语句。SQL语言对数据库的操作十分灵活方便,原因在于SELECT语句中的成分丰富多样的元组,有许多可选形式,尤其是目标列和条件表达式。
1.SELECT基本结构
语句格式
SELECT [ALL | DISTINCT] <目标列表达式> [,<目标列表达式>]...
FROM <表名或视图名>[,<表名或视图名>]
[WHERE <条件表达式>]
[GROUP BY <列名1>[HAVING<条件表达式>]]
[ORDER BY <列名2>[ASC | DESC]...];
SQL查询中的字句顺序:SELECT、FROM、WHERE、GROUP BY、HAVING 和 ORDER BY。但是 SELECT、FROM 是必须的,而且,HAVING 子句只能与 GROUP BY 搭配起来使用。
SELECT 子句对应的是关系代数中的投影运算,用来列出查询结果中的属性。其输出可以是:列名、表达式、集函数(AVG、COUNT、MAX、MIN、SUM),DISTINCT 选项可以保证查询的结果集中不存在重复元组。
FROM 子句对应的是关系代数中的笛卡尔积,它列出的是表达式求值过程中需扫描的关系,即在FROM 子句中出现多个基本表或视图时,系统首先执行笛卡尔积操作。
WHERE 子句对应的是关系代数中的选择谓词。WHERE 子句的条件表达式中可以使用的运算符如表1所示。
运算符 | 含义 | 运算符 | 含义 | ||
集合成员运算符 | IN | 在集合中 | 算术运算符 | > | 大于 |
NOT IN | 不在集合中 | >= | 大于等于 | ||
< | 小于 | ||||
字符串匹配运算符 | LIKE | 与_和%进行单个多个字符匹配 | <= | 小于等于 | |
= | 等于 | ||||
!= | 不等于 | ||||
空值比较运算符 | IS NULL | 为空 | 逻辑运算符 | AND | 与 |
IS NOT NULL | 不能为空 | OR | 或 | ||
NOT | 非 |
2.简单查询
简单查询只需要使用3个保留字 SELECT、FROM 和 WHERE。
3.连接查询
若查询涉及两个以上的表,则成为连接查询。
4.子查询
子查询也称嵌套查询。嵌套查询是指一个SELECT-FROM-WHERE 查询块可以嵌入另一个查询块之中。在SQL中允许多重嵌套。
5.聚集函数
聚集函数是一个值得集合为输入,返回单个值的函数。SQL提供了5个预定义集函数:平均值 AVG、最小值 MIN、最大值 MAX、求和 SUM 以及计数 COUNT。如表2所示。
集函数名 | 功能 |
COUNT ([DISTINCT|ALL]*) | 统计元组个数 |
COUNT ([DISTINCT|ALL]<列名>) | 统计一列中值得个数 |
SUM ([DISTINCT|ALL]<列名>) | 计算一列(该列应为数值型)中值得总和 |
AVG ([DISTINCT|ALL]<列名>) | 计算一列(该列应为数值型)中值的平均值 |
MAX ([DISTINCT|ALL]<列名>) | 求一列值的最大值 |
MIN ([DISTINCT|ALL]<列名>) | 求一列值的最小值 |
使用 ANY 和 ALL 谓词必须同时使用比较运算符,其含义及等价的转换关系见表3.用集函数实现子查询通常要比直接用ALL 或 ANY 查询效率要高。
谓词 | 语义 | 等价转换关系 |
>ANY | 大于子查询结果中的某个值 | >MIN |
>ALL | 大于子查询结果中的所有值 | >MAX |
<ANY | 小于子查询结果中的某个值 | <MAX |
<ALL | 小于子查询结果中的所有值 | <MIN |
>=ANY | 大于等于子查询结果中的某个值 | >=MIN |
>=ALL | 大于等于子查询结果中的所有值 | >=MAX |
<=ANY | 小于等于子查询结果中的某个值 | <=MAX |
<=ALL | 小于等于子查询结果中的所有值 | <=MIN |
不等于子查询结果中的某个值 | ||
<>ALL | 不等于子查询结果中的任何一个值 | NOT IN |
=ANY | 等于子查询结果中的某个值 | IN |
=ALL | 等于子查询结果中的所有值 | - |
6.分组查询
1)GROUP BY 子句
在 WHERE 子句后面加上 GROUP BY 子句可以对元组进行分组,保留字 GROUP BY 后面跟着一个分组属性的列表。最简单的情况是,FROM 子句后面只有一个关系,根据分组属性对它的元组进行分组。SELECT 子句中使用的聚集操作符仅用在每个分组上。
2)HAVING 子句
假如元组在分组前按照某种方式加上限制,使得不需要的分组为空,可以在GROUP BY子句后面跟一个HAVING 子句即可。
注意,当元组含有空值时,需要注意:
第一,空值在任何聚集操作中被忽视。它对求和、求平均值和计数都没有影响。它也不能是某列的最大值或最小值。
第二,NULL值又可以在分组属性中看做是一个一般的值。
7.更名运算
SQL 提供可为关系和属性重新命名的机制,这是通过使用具有如下形式的 AS 子句来实现的
Old-name AS new-name
AS 子句即可出现在SELECT 子句,也可出现在 FROM 子句中。
8.字符串操作
对于字符串进行的最通常的操作是使用操作符 LIKE 的模式匹配。使用两个特殊的字符来描述模式:“%”匹配任意字符串;“_”匹配任意一个字符。模式是大小写敏感的。
“__”匹配只含两个字符的字符串;“_%”匹配至少包含两个字符的字符串。
为了使模式中包含特殊模式字符(即%和_),在SQL中允许使用 ESCAPE 关键词来定义转义符。转义字符紧靠着特殊字符,并放在它的前面,表示该特殊字符被当成普通字符。例如使用反斜杠“\”作为转义符。
LIKE 'ab\%cd%' ESCAPE '\'//匹配所有以ab%cd开头的字符串
LIKE 'ab\\cd%' ESCAPE '\'//匹配所有以ab\cd开头的字符串
9.视图的查询
系统执行视图查询语句时,通常先将其转换成等价的对基本表的查询,然后执行查询语句。即当查询视图时,系统先从数据字典中取出该视图的定义,然后将定义中的查询语句和对该视图的查询语句结合起来,形成一个修正的查询语句。
SQL数据更新
1.插入语句
要在关系数据库中插入数据,可以指定被插入的元组,或者用查询语句选出一批待插入的元组。语句格式:
INSERT INTO <基本表名> [(字段名[,字段名]...)]
VALUES (常量[,常量]...);
INSERT INTO <基本表名> (字段名[,字段名]...)
SELECT 查询语句;
2.删除语句
语句格式:
DELETE FROM <基本表名>
[WHERE 条件表达式];
3.修改语句
语句格式:
UPDATE <基本表名>
SET <列名>=<值表达式>[,<列名>=<值表达式>...]
[WHERE <条件表达式>];
SQL的访问控制
访问控制是指对数据访问数据的控制,有授权语句和收回权限语句。
1.授权的语句格式
GRANT <权限> [,<权限>]...
[ON <对象类型><对象名>]
TO <用户> [,<用户>]...
[WITH GRANT OPTION];
注意:不同类型的操作对象有不同的操作权限,常见的操作权限见表4。
对象 | 对象类型 | 操作权限 |
属性列 | TABLE | SELECT, INSERT, UPDATE, DELETE, ALL PRIVILEGES(四种权限的总和) |
视图 | TABLE | SELECT, INSERT, UPDATE, DELETE, ALL PRIVILEGES(四种权限的总和) |
基本表 | TABLE | |
数据库 | DATABASE | CREATEAB 建立表的权限,可由 DBA 授予普通用户 |
说明:
接受权限的用户可以是单个或者多个具体的用户,也可以是 PUBLIC, 即全体用户。
若指定了 WITH GRANT OPTION 子句,则获得了某种权限的用户还可以将此权限赋给其他用户。
2.收回权限语句格式
REVOKE <权限> [,<权限>]...
[ON <对象类型> <对象名>]
FROM <用户> [,<用户>]...;
上一篇: SQL关于日期时间处理方法
下一篇: 现在好不等于将来好
推荐阅读