database-theory-3
本章建议参考同目录下MySQL相关介绍内容,下方仅为简要介绍。
关系数据库标准语言SQL
SQL概述
-
SQL的产生与发展
- 1974年,由Boyce和Chamber提出,称为SEQUEL(Structured English Query Language);
- 1975-1979年,在IBM的San Jose研究室研制的System R上实现;
- 1981年, IBM在推出SQL/DS关系数据库时,将其命名为SQL (Structured Query Language);
- 随着SQL语言应用的日益广泛,ANSI和ISO先后制定了SQL-86、 SQL-89、 SQL-92、 SQL-99、 SQL-2003、SQL-2008、SQL-2011等多个SQL标准。
-
SQL特点
- 综合统一
- 高度非过程化
- 面向集合的操作方式
- 以同一种语法结构提供两种使用方式
- 语言简捷,易学易用
-
基本表与导出表
-
基本表:是实际存在的,每个表在存储中可用一个存储文件来表示。
-
导出表:是从基本表导出的表,有视图(View)和快照(Snapshot)。
- 视图是一个虚表。即视图所对应的数据不实际存储在数据库中,只在数据库的数据字典中存储视图的定义。
- 视图一经定义就可以和基本表一样进行查询等操纵,也可以用来定义新的视图。
-
-
关系数据库的三级模式结构
graph TD A(外模式)-->B(模式)-->C(内模式)
SQL数据查询功能
- 查询语句SELECT的语法:
1 | Select [ALL|DISTINCT]<目标表达式>[{,<目标表达式>}] |
-
查询的基本结构是 SELECT-FROM-WHERE组成的查询块。
- 查询块的结果仍是一个表;
- 查询块执行的过程是在表的水平方向上按“检索条件”选取元组,又在垂直方向上按SELECT指定的列进行投影;
- 查询块可进行关系代数中投影、选取、连接等操作的组合。
-
SELECT-FROM-WHERE查询块中,没有WHERE子句,是单纯的投影操作。
-
采用DISTINCT消去SELECT结果中的重复行。
-
由WHERE子句指出查询条件。
-
在SELECT-FROM-WHERE查询块后接ORDER BY子句,将结果按指定列排序。
-
将多个相互关联的表按照一定条件连接起来,实现多表数据检索。
-
表自身的连接: 通过定义别名,将一个表看成两个表,进行连接。
-
WHERE子句中可以包含另一个查询块,该查询块称为子查询或嵌套查询,包含子查询的语句称为外部查询
-
外部查询利用子查询来获取检索条件的条件值,检索条件根据子查询的结果来确定外部查询的结果数据
-
子查询按照与外部查询的联系不同,分为普通子查询和相关子查询
-
普通子查询:与外部查询无关,可单独执行得一组值。
-
相关子查询:把外查询的列值作为检索条件的条件值。
-
单表查询
查询条件 | 谓词 |
---|---|
比 较 | >, >=, <, <=, =, !=, <>, !>, !<; NOT + 上述比较运算符 |
确定范围 | BETWEEN AND, NOT BETWEEN AND |
确定集合 | IN, NOT IN |
字符匹配 | LIKE, NOT LIKE |
空 值 | IS NULL, IS NOT NULL |
多重条件 | AND, OR |
聚集函数
- Count() 求元组个数
- Sum() 对数值列求总和
- Avg() 求数值列的平均值
- Max() 求最大值
- Min() 求最小值
连接查询
-
连接查询中用来连接两个表的条件称为连接条件或连接谓词,其一般格式为:
1
[<表名> .] <列名> <比较运算符> [<表名> .] <列名>
-
其中的<列名>称为连接字段, 连接条件的各个连接字段类型必须是可比的,但不必是相同的。<比较运算符>主要有:=,>,<,>=,<=,!=。当连接运算符为等号时,称为等值连接,否则称非等值连接。
SQL数据定义功能
操作对象 | 操作方式 | ||
---|---|---|---|
创建 | 删除 | 修改 | |
表 | Create Table | Drop Table | Alter Table |
视图 | Create View | Drop View | |
索引 | Create Index | Drop Index |
定义、删除、修改基本表
- 完整性约束
- NULL/NOT NULL
- UNIQUE
- PRIMARY KEY
- FOREIGN KEY
- CHECK
定义、删除索引
定义、删除视图
-
视图是由一个或几个基本表(或视图)导出的表,数据库不存储视图所对应的 数据,而仅在 数据字典中存储其定义,因此,也称视图为虚表。视图一经定义,就可以像基本表一样被查询和删除。
-
视图的作用
- 能够简化用户操作
- 使用户能够以多种角度看待同一数据
- 对重构数据提供了一定程度的逻辑独立性
- 能够对机密数据提供安全保护
-
视图消解(View Resolution)
DBMS执行对视图的查询时,从数据字典中取出视图的定义,把定义中的子查询和用户的查询结合起来,转换成等价的对基本表的查询,然后再执行修正的查询。这一转换过程称为视图消解。
-
视图更新约束
- select子句中的目标列不能包含聚集函数
- select子句中不能使用distinct关键字
- 不能包括group by子句
- 不能包括经算术表达式计算出来的列
- 对于行列子集视图可以更新(视图是从单个基本表使用选择、投影操作导出的,并且包含了基本表的主码)
SQL数据更新
-
插入数据——Insert语句
-
修改数据——Update语句
-
删除数据——Delete语句
空值的处理
-
空值的含义
-
空值是“不知道”或“不存在”或“无意义”的值,用NULL表示
-
何时可以出现空值
-
元组插入时,属性的具体值不能确定
-
属性不应该有值
-
属性值不便于填写
-
-
何时不能出现空值
- 在表的定义中,属性有NOT NULL或UNIQUE约束,以及主属性都不可取空值
-
-
空值的运算
- 空值是一个特殊的值,具有不确定性,具有特殊的运算
规则
- 空值与另一个值(包括空值)的算术运算结果为NULL
(空值)
-
空值与另一个值(包括空值)的比较运算结果为UNKNOWN
-
( TRUE, FALSE, UNKNOWN ) 的三值逻辑
- 空值的AND、OR、NOT运算的真值表
逻辑表达式 | 值 |
---|---|
T AND U, U AND U | U |
F AND U | F |
F OR U, U OR U | U |
T OR U | T |
NOT U | U |
-
空值的判断
- 判断属性是否为空值,用IS NULL或IS NOT NULL来表示
SQL数据控制
-
定义完整性约束条件
-
支持事务操作
-
提供安全控制功能
嵌入式SQL
-
嵌入式SQL的意义
- 实际的应用系统是非常复杂的,数据库访问只是其中一个部件。有些动作如与用户交互、图形化显示数据等只能用高级语言实现;
- 嵌入式SQL把SQL的最佳特性与程序设计语言的最佳特性(如过程处理能力)结合起来,使SQL功能更强,灵活性更强。
-
对于嵌入式SQL,DBMS多采用预编译方法进行处理。
- 把嵌入在程序中的SQL语句翻译为高级语言(主语言)源码,然后按主语言的通常方式进行编译、连接形成可执行代码。
-
把SQL嵌入主语言使用时必须解决的问题:
-
区分SQL语句与主语言语句。
- 在SQL语句前加前缀 EXEC SQL解决。
-
数据库工作单元和程序工作单元之间的通信。
- 通过定义SQL通信区向主语言传递SQL语句执行状态信息;
- 通过主变量(主语言程序变量)交换参数与数据。
-
-
SQL与主语言之间操作方式的协调。SQL是一次一集合。主语言是一次一记录(一组主变量一次只能存放一条记录)。
- 通过游标解决。游标是系统开辟的存放SQL执行结果的缓冲区,由游标指针执行一组记录。程序通过游标逐一获取记录,并赋给主变量。
-
动态SQL
-
如果在预编译时SQL语句中的主变量、数据库对象等信息不能确定,就必须使用动态SQL技术。
-
动态SQL允许在程序运行过程中“临时”组装SQL语句,主要有三种形式:
-
语句可变
-
条件可变
-
数据库对象,查询条件均可变
-
-
- Title: database-theory-3
- Author: Charles
- Created at : 2023-07-21 07:49:57
- Updated at : 2023-11-05 15:18:01
- Link: https://charles2530.github.io/2023/07/21/database-theory-3/
- License: This work is licensed under CC BY-NC-SA 4.0.