3.1 SQL概述
3.1.1 SQL的产生与发展
注意:
- 目前没有一个数据库系统能够支持SQL标准的所有概念与特性
- 许多厂商对SQL基本命令集进行了修改与扩充,可以支持标准以外的一些功能特性
3.1.2SQL的特点
SQL集数据查询,数据操纵,数据定义,数据控制功能于一体:
1.综合统一
非关系模型(层次模型、网状模型)
(1)模式数据定义语言
(2)外模式数据定义语言
(3)数据存储有关的描述语言
(4)数据操纵语言
它们分别用于定义模式。外模式、内模式和进行数据的存取与处置。
SQL的操作要求:
- 定义和修改,删除关系模式,定义和删除视图,插入数据,建立数据库
- 对数据库中的数据进行查询和更新
- 数据库的重构和维护
- 数据库安全性、完整性控制,以及事务控制
2.高度非过程化
非关系数据模型采用的是“面向过程”的语言。
在用SQL语言进行数据操作时,只需要提出做什么,无需指明怎么做,无需了解存取路径。存取路径的选择以及SQL的操作由系统自动完成
3.面向集合的操作方式
4.以同一种语言提供多种使用方式
5.语言简洁,易学易用
SQL功能 | 动词 |
---|
数据查询 | SELECT | 数据定义 | CREATE,DROP,ALTER | 数据操作 | INSERT.UPDATE,DELETE | 数据控制 | GRANT,REVOKE |
3.1.3 SQL的基本概念
支持SQL的关系数据库管理系统同样支持关系数据库的三级模式结构。
基本表是独立存在的表,在关系数据库管理系统中一个关系就对应一个基本表。
3.2 学术-课程数据库
定义以下三个表:
3.3 数据定义
SQL的数据定义功能包括模式定义,表定义,视图和索引的定义
SQL标准不提供修改模式的定义和修改视图的定义的操作,如果用户想修改,就必须先删除然后重建。
3.3.1 模式的定义与删除
1.定义模式
在SQL语句中,模式定义的语句如下:
CREATE SCHEMA<模式名>AY=UTHORIZATION<用户名>
定义模式实际上定义了一个命名空间,在这个空间内可以进一步定义该模式包含的数据库对象,比如基本表,视图,索引。
2.删除模式
在SQL中,删除模式语句如下:
DROP SCHEMA<模式名><CASCADE|RESTRICT>
其中CASCADE,RESTRICT必选其一。
- CASCADE(级联),表示在删除模式的同时把该模式下的所有数据库对象全部删除。
- RESTRICT(限制),表示如果该模式中以及定义了下属的数据库对象,则拒绝该语句的执行。只有在没有任何下属对象时才能执行DROP SCHEMA
3.3.2 基本表的定义、删除与修改
1.定义基本表
**创建了一个模式就建立了一个数据库的命名空间,一个框架。**在这个空间中首先要定义的时该模式包含的数据库基本表。
SQL语言使用到create table语句建立基本表。
(参照表与被参照表可以是同一个表)
2.数据类型
每一个属性来自一个域,它的取值必须是域中的值。SQL中域的概念用数据类型来实现,定义表的各个属性时需要指明数据类型及其长度。注意:不同关系数据库管理系统中支持的数据类型不完全相同。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-89D7uXdn-1639485052632)(C:\Users\小帆\AppData\Roaming\Typora\typora-user-images\image-20211127204310675.png)]
在选择属性的数据类型时,需要根据实际情况进行确定,一个是取值范围,一个是需要进行的运算。
3.模式与表
每个基本表都属于一个模式,一个模式包含了多个基本表。
如果需要定义基本表,有三种方法:
- 在表名中明显地给出模式名
- 在创建模式语句中创建表
- 设置所属的模式,这样在创建表时表名中不必给出模式名。
使用以下语句显示当前搜索路径:
SHOW serch_path
4.修改基本表
随着应用需求的变化,有时需要修改已建立好的基本表。SQL语句使用ALTER TABLE语句修改基本表。其一般格式为:
5.删除基本表
当某个基本表不再需要时,可以使用DROP TABLE语句删除它。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ax8vKjZ4-1639485052634)(C:\Users\小帆\AppData\Roaming\Typora\typora-user-images\image-20211129214838005.png)]
3.3.3 索引的建立和删除
常见的索引有:顺序文件的索引,B+树索引,散列索引,位图索引。
1.建立索引
建立索引时加快查询速度的有效手段。数据库索引类似于弹一首后面的索引,加速定位到需要查询的内容。一般使用的SQL语句为
CREATE [UNIQUE][CLUSTER] INDEX<索引名>
ON<表名>(<列名>)[<次序>]
UNIQUE 表示索引的每一个索引值只对应唯一的数据记录。
CLUSTER表示所有要建立的是聚簇索引。
2.修改索引
对于已经建立好的索引,可以使用ALTER INDEX语句对其重新命名。
ALTER INDEX <OLD> RENAME TO <NEW>
3.删除索引
使用DROP INDEX语句可以删除不必要的索引。
3.3.4 数据字典
3.4 数据查询
数据查询是数据库的核心操作,SQL提供了SELECT语句进行数据查询,一般格式为
整个SELECT语句的意思是,根据WHERE子句的条件表达式从FROM子句指定的基本表,视图,或派生表中找出满足条件的元组,再按SELECT子句的目标表达式选出的元组中的属性值形成结果表。
3.4.1 单表查询
单表查询是仅涉及到一个表的查询。
1.选择表中的若干列
选择表中的全部或者部分列即关系代数的投影运算。
(1)查询指定列
(2)查询全部列
(3)查询经过计算的值
SELECT中的<目标表达式>不仅可以是算术表达式,还可以是字符串常量,函数。
2.选择表中的若干元组
(1)消除取值重复的行
可以使用DISTINCT消除元组投影后的某些列中。
(2)查询满足条件的元组
可以使用WHERE语句实现查询满足条件按的语句。
3.ORDER BY子句
用户可以用ORDER BY子句对查询结果按照一个或多个属性列的升序(ASC)或降序(DESC)排列,默认值为升序。
对于控制,排序时按照具体的系统实现决定。
4.聚集函数
为增强检索功能,SQL提供了很多聚集函数:
当聚集函数遇到空值时,除了COUNT(*)外,都跳过控制而只处理非空值。
3.4.2 连接查询
当一个查询针对两个以上的表时,则称之为连接查询。
连接查询时关系数据库中最主要的查询,包括:等值查询、自然连接查询、非等值连接查询、自身连接查询、外连接查询和符合条件连接查询。
1.等值与非等值连接查询
连接查询的Where子句中用来连接两个表的条件为“连接条件”或“连接谓词”,其一般格式为
连接谓词中的列名称为连接字段。
注意:连接条件中的各个连接字段类型必须是可比的,但是名字不必相同。
2.自身连接
连接操作可以是一个表与其自己进行连接,即表的自身连接。
3.外连接
左外连接列出左边关系中所有元组,右外连接列出右边关系所有的元组。
4.多表连接
两个以上的表进行连接即为多表连接。
3.4.3 嵌套查询
上层循环块称为外层循环或父循环,下层循环称为内层循环或子循环。
嵌套循环使用多个简单循环构成复杂循环,从而增强SQL的查询能力,以层层嵌套循环的方式构造程序正是sql的结构化含义所在。
3.4.4 集合查询
3. 4. 5 基于派生表的查询
子循环不仅出现在where语句中,也可以出现在from语句中,这时子循环生成的临时派生表成为主循环的查询对象。
通过from子句生成的派生表时,AS关键字可以省略,但必须为派生表关系知道的一个别名。
3.4.6 SELECT语句的一般格式
3.5 数据更新
3.5.1 插入数据
1.插入元组
insert into<表名>[<属性列1>...] values(<常量>...)
功能:将新元组插入指定表中。
注意:若INTO语句中没有指明任何属性列名,则新插入的元组必须再每个属性列上均有值。且字符串常量需要用单引号括起来。
2.插入子循环结果
子循环可以嵌套再SELECT语句中用故意构造父循环的条件。
3.5.2 修改数据
3.5.3 删除数据
注意:delete * from table_name 仅仅能删除表中的数据,不能清空标识,删除表中数据后再写入数据时,标识符会从删除前标识最大加一开始
表的定义仍在字典中,DELET语句删除的时表中的数据,而不是表的定义。
3.6 空值的处理
空值即“不知道”,“不存在”,“无意义”的值。一般有以下情况;
因此,空值是一个特殊的值,含有不确定性,对于关系运算带来特殊的问题,需要做特殊的处理。
1.空值的产生
2.空值的判断
判断一个值是否为空值,使用IS NULL或IS NOT NULL来表示。
3.空值的约束条件
4.空值的算数运算、比较运算和逻辑运算。
3.7 视图
3.7.1 定义视图
1.建立视图
2.删除视图
3.7.2 查询视图
首先坚持表,视图是否存在,若存在,则从数据字典中取出视图地定义,把定义中的子查询和用户地查询结合起来,转换为等价地对基本表地查询,然后秩序修正了的查询。这个转换过程为视图消解
3.7.3 更新视图
视图的更新类似于表格:即插入(INSERT)、删除(DELETE)、修改(UPDATE)。
由于视图式不实际存储数据的虚表,因此对视图的更新最终要转换道对基本表的更新。
3.7.4 视图的作用
1.视图可以简化用户的操作
2.视图使用户以多种视角看待同一数据
3.视图对重构数据库提供了一定逻辑独立性
4.视图能对机密数据提供安全保护
5。适当利用视图可以更清晰地表达查询
|