关系数据库SQL语言简介

来源:互联网 时间:1970-01-01

SQL(structrued query language)是1974年由Boyce和Chamberlin提出的,主要包括:数据查询(query)、数据操纵(manipulation)、数据定义(definition)和数据控制(control)功能,是一种通用的、功能强大的关系数据库的标准语言。 
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所示。
 

表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(四种权限的总和)基本表TABLE

SELECT, INSERT, UPDATE, DELETE, ALTER, INDEX,

ALL PRIVILEGES(六种权限的总和)

数据库DATABASECREATEAB 建立表的权限,可由 DBA 授予普通用户
 
说明:
 
接受权限的用户可以是单个或者多个具体的用户,也可以是 PUBLIC, 即全体用户。
 
若指定了 WITH GRANT OPTION 子句,则获得了某种权限的用户还可以将此权限赋给其他用户。
 
2.收回权限语句格式
 
REVOKE <权限> [,<权限>]...
[ON <对象类型> <对象名>]
FROM <用户> [,<用户>]...;



相关阅读:
Top