database-theory-3

database-theory-3

Charles Lv7

本章建议参考同目录下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)。

      • 视图是一个虚表。即视图所对应的数据不实际存储在数据库中,只在数据库的数据字典中存储视图的定义。
      • 视图一经定义就可以和基本表一样进行查询等操纵,也可以用来定义新的视图。
  • 关系数据库的三级模式结构

    image-20231105144842223

graph TD
A(外模式)-->B(模式)-->C(内模式)

SQL数据查询功能

  • 查询语句SELECT的语法:
1
2
3
4
5
Select [ALL|DISTINCT]<目标表达式>[{,<目标表达式>}]
From <表名或视图名>[{,<表名或视图名>}]
[Where <条件表达式>]
[Group By <分组列> [{,<分组列>}][HAVING <条件表达式>]]
[Order By <排序列> <排序方式>[{,<排序列> <排序方式>}]
  • 查询的基本结构是 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.
Comments