关系数据库标准语言SQL

关系数据库标准语言 SQL

3.1 SQL 概述

3.1.1 SQL 的产生与发展

跳过…

3.1.2 SQL 的特点

SQL 集数据查询(data query)、数据操纵(data manipulation)、数据定义(data definition)和数据控制(data control)功能于一体,其主要特点包括以下几部分。

  1. 综合统一
    数据库系统的主要功能是通过数据库支持的数据语言来实现的。
    SQL 集数据定义语言、数据操纵语言、数据控制语言的功能与一体,语言风格统一,可以独立完成数据库生命周期中的全部活动,包括以下一系列操作要求:
  • 定义和修改、删除关系模式,定义和删除视图,插入数据,建立数据库。
  • 对数据库中的数据进行查询和更新。
  • 数据库重构和维护。
  • 数据库安全性、完整性控制,以及事务控制。
  • 嵌入式 SQL 和动态 SQL 定义。
  1. 高度非过程化
    只要提出“做什么”,需芝麻指明“怎么做”,因此无须了解存取路径。存取路径的选择以及 SQL 的操作过程由系统自动完成。
  2. 面向集合的操作方式
    SQL 采用集合操作方式,不仅操作对象、查找结果可以是元组的集合,而且一次插入、删除、更新操作的对象也可以是元组的集合。
  3. 以同一种语法结构提供多种使用方式
    SQL 即是独立的语言,又是嵌入式语言。在两种不同的使用方式下,SQL 的语法结构基本上是一致的。
  4. 语言简洁,易学易用
    SQL 功能极强,由于设计巧妙,语言十分简洁,完成核心功能只用了9个动词。
    SQL 功能 动词
    数据查询 SELECT
    数据定义 CREATE,DROP,ALTER
    数据操纵 INSERT,UPDATE,DELETE
    数据控制 GRANT,REMOVE

3.1.3 SQL 的基本概念

支持 SQL 的关系数据库管理系统同样支持关系数据库三级模式结构。其中外模式包括若干视图(view)和部分基本表(base table),模式包括若干基本表,内模式包括若干存储文件(store file)
图3.1 SQL 对关系数据库模式的支持
用户可以用 SQL 对基本表和视图进行查询或其他操作,基本表和视图一样,都是关系。
基本表是本身独立存在的表,在关系数据库管理系统中一个关系就对应一个基本表。一个或多个基本表对应一个存储文件,一个表可以带若干索引,索引也存放在存储文件中。
存储文件的逻辑结构组成了关系数据库的内模式。存储文件的物理结构对最终用户是隐蔽的。
视图是从一个或几个基本表导出的表。它本身不独立存储在数据库中,即数据库中只存放视图的定义而不存放视图对应的数据。这些数据仍存放在导出视图的基本表中,因此视图是一个虚表。视图在概念上与基本表相同,用户可以在视图上再定义视图。

3.2 学生-课程数据库

跳过…

3.3 数据定义

SQL 的数据定义功能包括模式定义表定义视图和索引的定义
表3.3 SQL 的数据定义语句
一个关系数据库管理系统的实例(instance)中可以建立多个数据库,一个数据库中可以建立多个模式,一个模式下通常包括多个表、视图和索引等数据库对象。

3.3.1 模式的定义与删除

  1. 定义模式

CREATE SCHEMA <模式名> AUTHORIZATION <用户名>;

如果没有指定<模式名>,那么<模式名>隐含为<用户名>。

用户可以在创建模式的同时在这个模式定义中进一步创建基本表、视图,定义授权。即

CREATE SCHEMA <模式名> AUTHORIZATION <用户名> [<表定义子句> | <视图定义子句> | <授权定义子句>];

  1. 删除模式

DROP SCHEMA <模式名> <CASCADE | RESTRICT>;

其中 CASCADE 和 RESTRICT 两者必选其一。选择了 CASCADE(级联),表示在删除模式的同时把该模式中所有的数据库对象全部删除;选择了 RESTRICT(限制),表示如果该模式已经定义了下属的数据库对象(如表、视图等),则拒绝该删除语句的执行

3.3.2 基本表的定义、删除与修改

  1. 定义基本表

CREATE TABLE <表名> ( <列名> <数据类型> [列级完整性约束]
[, <列名> <数据结构> [列级完整性约束条件]] …
[, <表级完整性约束条件>];)

  1. 数据类型
数据类型 含义
CHAR(n) 长度为 n 的定长字符串
VARCHAR(n) 最大长度为 n 的变成字符串
CLOB 字符串大对象
BLOB 二进制大对象
INT 长整数(4字节)
SMALLINT 短整数(2字节)
BIGINT 大整数(8字节)
NUMERIC(p, d) 定点数,由 p 位数字组成,小数点后面有 d 位数字
REAL 取决于机器精度的单精度浮点数
DOUBLE PRECISION 取决于机器精度的双精度浮点数
FLOAT(n) 可选精度的浮点数,精度至少为 n 位数字
BOOLEAN 逻辑布尔量
DATE 日期,YYYY-MM-DD
TIME 时间,HH:MM:SS
TIMESTAMP 时间戳类型
INTERVAL 时间间隔类型
  1. 模式与表

每一个基本表都属于某一个模式,一个模式包含多个基本表。当定义基本表时一般可以有三种方式定义它所属的模式。

  1. 在表中明显地给出模式名
  2. 在创建模式语句中同时创建表
  3. 设置所属的模式

当用户创建基本表(其他数据库对象也一样)时若没有指定模式,系统根据搜索路径(search path)来确定该对象所属的模式。

  1. 修改基本表

ALTER TABLE <表名>
[ADD [COLUMN] <新列名> <数据类型> [完整性约束]]
[ADD <表级完整性约束>]
[DROP [COLUMN] <列名> [CASCADE | RESTRICT]]
[DROP CONSTRAINT <完整性约束名> [CASCADE | RESTRICT]]
[ALTER COLUMN <列名> <数据类型>];

  1. 删除基本表

DROP TABLE <表名> [RESTRICT | CASCADE];

3.3.3 索引的建立与删除

数据库索引有多种类型,常见索引包括顺序文件上的索引、B+树索引、散列(hash)索引、位图索引等。

索引是关系数据库管理系统的内部实现技术,属于内模式的范畴。

  1. 建立索引

CREATE [UNIQUE] [CLUSTER] INDEX <索引名>
ON <表名> (<列名> [<次序>] [, <列名> [<次序>]] …)

其中,<表名>是要建索引的基本表的名字。索引可以建立在该表的一列或多列上,各列名之间用逗号分隔。每个<列名>后面还可以用<次序>指定索引值的排列次序,可以选 ASC(升序)DESC(降序),默认值为 ASC

UNIQUE 表明此索引的每一个索引值只对应唯一的数据记录。
CLUSTER 表示要建立的索引是聚簇索引。

  1. 修改索引

ALTER INDEX <旧索引名> RENAME TO <新索引名>;

  1. 删除索引

DROP INDEX <索引名>;

3.3.4 数据字典

数据字典是关系数据库管理系统内部的一组系统表,它记录了数据库中所有的定义信息,包括关系模式定义、视图定义、索引定义、完整性约束定义、各类用户对数据库的操作权限、统计信息等。

3.4 数据查询

数据查询是数据库的核心操作。SQL 提供了 SELECT 语句进行数据查询,该语句具有灵活的使用方式和丰富的功能。其一般格式为:
SELECT [ALL | DISTINCT] <目标列表达式> [, <目标列表达式>] …
FROM <表名或视图名> [, <表名或视图名> …] | (<SELECT 语句> [AS]
[WHERE <条件表达式>]
[GROUP BY <列名 1> [HAVING <条件表达式>]]
[ORDER BY <列名 2> [ASC | DESC]];

整个 SELECT 语句的含义是,根据 WHERE 子句的条件表达式FROM 子句指定的基本表、视图或派生表中找出满足条件的元组,再按照 SELECT 子句中的目标列表达式选出元组中的属性值形成结果表。

如果有 GROUP BY 子句,则将结果按<列名 1>的值进行分组,该属性列值相等的元组为一个组。通常会在每组中作用聚集函数。如果 GROUP BY 子句带有 HAVING 短语,则只有满足指定条件的组才予以输出。

如果有 ORDER BY 子句,则结果表还要按<列名 2>的值的升序或降序排序。

3.4.1 单表查询

  1. 选择表中的若干列

    选择表中的全部或部分列即关系代数的投影运算

    1. 查询指定列

SELECT <列名 1> [, <列名 2> …]
FROM <表 1> [, <表 2> …]
2. 查询全部列
SELECT *
FROM <表 1> [, <表 2> …]
3. 查询经过计算的值
SELECT <目标列表达式> [, <目标列表达式> …]
FROM <表 1> [, <表 2> …]

  1. 选择表中的若干元组

    1. 消除取值重复的行
      SELECT DISINCT <列名 1> [, <列名 2> …]
      FROM <表 1> [, <表 2> …]

    2. 查询满足条件的元组

    查询条件 谓词
    比较 =, >, <, >=, <=, !=, <>, !>, !<;
    确定范围 BETWEEN AND, NOT BETWEEN AND
    确定集合 IN, NOT IN
    字符匹配 LIKE, NOT LIKE
    空值 IS NULL, IS NOT NULL
    逻辑运算 AND, OR, NOT
    1. 比较大小
    2. 确定范围
      BETWEEN 后是范围下限,AND 后是范围的上限
    3. 确定集合
    4. 字符匹配
      [NOT] LIKE ‘<匹配串>’ [ESCAPE ‘<换码字符>’]
      % 代表任意长度的字符串
      _ 代表任意单个字符

关系数据库标准语言SQL
http://yjh-2860674406.github.io/2022/09/12/数据库原理/课本/关系数据库标准语言SQL/
Author
Ye JinHua
Posted on
September 12, 2022
Licensed under