您的位置:首页 > 数据库

关系数据库SQL语言简介

2015-10-26 23:30 246 查看
SQL(structrued query language)是1974年由Boyce和Chamberlin提出的,主要包括:数据查询(query)、数据操纵(manipulation)、数据定义(definition)和数据控制(control)功能,是一种通用的、功能强大的关系数据库的标准语言。

SQL的特点
综合统一:SQL是集数据定义、数据操纵和数据控制功能于一体,语言风格统一,可独立完成数据库生命周期的所有活动。

高度非过程化:SQL语言是高度非过程化的,当进行数据操作时,存储路径对用户来说是透明的,提高了数据的独立性。

面向集合的操作方式:操作对象、查找结果可以是记录的集合。

两种使用方式:既可以在终端键盘上输入SQL命令,对数据库进行操作,也可以将SQL语言嵌入到高级语言程序中。

语言简洁,易学易用:SQL语言功能极强,完成核心功能只用了9个动词,包括以下4类。
数据查询:SELECT
数据定义:CREATE DROP ALTER
数据操纵:INSERT UPDATE DELETE
数据控制:GRANT REVOKE

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所示。

表1 WHERE 子句的条件表达式中可以使用的运算符
运算符含义运算符含义
集合成员运算符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所示。
表2 集函数的功能
集函数名功能
COUNT ([DISTINCT|ALL]*)统计元组个数
COUNT ([DISTINCT|ALL]<列名>)统计一列中值得个数
SUM ([DISTINCT|ALL]<列名>)计算一列(该列应为数值型)中值得总和
AVG ([DISTINCT|ALL]<列名>)计算一列(该列应为数值型)中值的平均值
MAX ([DISTINCT|ALL]<列名>)求一列值的最大值
MIN ([DISTINCT|ALL]<列名>)求一列值的最小值
使用 ANY 和 ALL 谓词必须同时使用比较运算符,其含义及等价的转换关系见表3.用集函数实现子查询通常要比直接用ALL 或 ANY 查询效率要高。

表3 ANY、ALL 谓词含义及等价的转换关系
谓词语义等价转换关系
>ANY大于子查询结果中的某个值>MIN
>ALL大于子查询结果中的所有值>MAX
<ANY小于子查询结果中的某个值<MAX
<ALL小于子查询结果中的所有值<MIN
>=ANY大于等于子查询结果中的某个值>=MIN
>=ALL大于等于子查询结果中的所有值>=MAX
<=ANY小于等于子查询结果中的某个值<=MAX
<=ALL小于等于子查询结果中的所有值<=MIN
<>ANY
不等于子查询结果中的某个值-
<>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。

表4 常见的操作权限
对象对象类型操作权限
属性列TABLESELECT, INSERT, UPDATE, DELETE, ALL PRIVILEGES(四种权限的总和)
视图TABLESELECT, INSERT, UPDATE, DELETE, ALL PRIVILEGES(四种权限的总和)
基本表TABLESELECT, INSERT, UPDATE, DELETE, ALTER, INDEX,
ALL PRIVILEGES(六种权限的总和)
数据库DATABASECREATEAB 建立表的权限,可由 DBA 授予普通用户
说明:
接受权限的用户可以是单个或者多个具体的用户,也可以是 PUBLIC, 即全体用户。

若指定了 WITH GRANT OPTION 子句,则获得了某种权限的用户还可以将此权限赋给其他用户。

2.收回权限语句格式

REVOKE <权限> [,<权限>]...
[ON <对象类型> <对象名>]
FROM <用户> [,<用户>]...;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: