欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

关系数据库SQL语言简介

程序员文章站 2022-07-07 20:18:38
SQL(structrued query language)是1974年由Boyce和Chamberlin提出的,主要包括:数据查询(query)、数据操纵(manipulatio...
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 常见的操作权限

对象 对象类型 操作权限
属性列 TABLE SELECT, INSERT, UPDATE, DELETE, ALL PRIVILEGES(四种权限的总和)
视图 TABLE SELECT, INSERT, UPDATE, DELETE, ALL PRIVILEGES(四种权限的总和)
基本表 TABLE

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

ALL PRIVILEGES(六种权限的总和)

数据库 DATABASE CREATEAB 建立表的权限,可由 DBA 授予普通用户

 

说明:

 

接受权限的用户可以是单个或者多个具体的用户,也可以是 PUBLIC, 即全体用户。

 

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

 

2.收回权限语句格式

 

REVOKE <权限> [,<权限>]...

[ON <对象类型> <对象名>]

FROM <用户> [,<用户>]...;