数据库语言:SQL基础与应用
立即解锁
发布时间: 2025-08-30 01:03:33 阅读量: 5 订阅数: 11 AIGC 


SQL与NoSQL数据库精要
### 数据库语言:SQL 基础与应用
#### 1. 关系完备语言概述
关系完备语言是指那些至少与关系代数等价的语言。也就是说,所有能用关系代数对数据执行的操作,关系完备语言也必须支持。关系代数是关系数据库系统常用语言的基准。例如 SQL(结构化查询语言),它与关系代数具有同等的表达能力,因此被认为是一种关系完备语言。
判断一种数据库语言是否关系完备,有一个重要标准:它必须能够实现集合运算符(集合并、集合差、笛卡尔积)以及关系运算符(投影和选择)。并非所有处理表格的语言都是关系完备的,如果一种语言无法通过共享属性组合多个表格,那么它就不等价于关系代数,也就不能被视为关系完备语言。
关系代数是关系数据库语言查询部分的基础。不过,在实际应用中,数据库语言不仅要能分析表格,还需对表格或其部分内容进行操作,如插入、删除或修改元组集。为了具有实际用途,数据库语言通常需要具备以下功能:
- 能够定义表格和属性。
- 支持插入、修改和删除操作。
- 包含聚合函数,如求和、求最大值、求最小值或计算平均值。
- 可以根据各种标准对表格进行格式化和显示,例如排序和设置控制断点以实现表格可视化。
- 具备分配用户权限和保护数据库的功能。
- 最好支持算术表达式和计算。
- 支持多用户访问(遵循事务原则),并包含数据安全命令。
虽然关系代数为关系数据库语言提供了形式化框架,但在实际中,人们更倾向于使用用户友好的语言。因为纯代数运算符对于大多数数据库用户来说较难理解,所以它们通常由更易理解的语言元素表示。下面以 SQL 为例进行说明。
#### 2. 关系语言 SQL 简介
20 世纪 70 年代,为 IBM 的 System R(最早的实用关系数据库系统之一)创建了 SEQUEL(结构化英语查询语言)。SEQUEL 的理念是基于英语单词(如“select”“from”“where”“count”“group by”等)创建一种关系完备的查询语言,而非使用数学符号。后来,其衍生语言 SQL(结构化查询语言)先由美国国家标准协会(ANSI)标准化,随后由国际标准化组织(ISO)进行国际标准化。多年来,SQL 一直是数据库查询和交互的主流语言。
在查询数据之前,需要先将数据输入数据库。下面将介绍如何从表格结构开始创建数据库模式并填充数据。
#### 3. 创建和填充数据库模式
SQL 提供了 `CREATE TABLE` 命令来定义新表格。例如,定义 `EMPLOYEE` 表的语句如下:
```sql
CREATE TABLE
EMPLOYEE
( E#
CHAR(6) NOT NULL,
Name
VARCHAR(20),
...);
```
需要注意的是,在标准 SQL 中,未加双引号的对象名只能包含字母(A - Z 和 a - z)、数字(0 - 9)和下划线字符。因此,像 `E#` 这样的列名如果不加双引号就不是合法名称,若要使用则需在引用时都加上双引号。也可以将其修改为类似 `E_ID` 的名称。
SQL 语言允许定义特征和表格(数据定义语言,即 DDL)。SQL 标准规定了多种数据类型:
| 数据类型 | 说明 |
| ---- | ---- |
| `CHARACTER(n)` 或 `CHAR(n)` | 表示固定长度的字母序列 |
| `CHARACTER VARYING` 或 `VARCHAR` | 允许指定任意长度的字母序列 |
| `NUMERIC` 或 `DECIMAL` | 用于指定数值数据,需指定大小和精度 |
| `INTEGER` 或 `SMALLINT` | 用于指定整数 |
| `DATE` | 按年、月、日表示日期,有不同的格式,如 (yyyy,mm,dd) |
| `TIME` | 返回时、分、秒的时间信息 |
| `TIMESTAMP` | 是 `DATE` 和 `TIME` 类型的组合,还可指定时间精度和时区 |
| `BIT` 或 `BIT VARYING` | 用于位串数据 |
| `CHARACTER LARGE OBJECT` 或 `BINARY LARGE OBJECT` | 用于大对象数据 |
| XML(可扩展标记语言)和 JSON(JavaScript 对象表示法) | 支持复杂对象的集成 |
与 `CREATE TABLE` 相反的命令是 `DROP TABLE`,用于删除表格定义。需要注意的是,该命令会同时删除表格的所有内容和分配的用户权限。
定义好表格后,可以使用 `INSERT` 命令插入新元组:
```sql
INSERT INTO EMPLOYEE VALUES
('E20', 'Mahoney', 'Market Ave S', 'Canton', 'D6'),
('E21', 'Baker', 'O Street', 'Lincoln', 'D5');
```
实际上,SQL 的 `INSERT` 命令更适合处理少量数据。对于大数据量,SQL 数据库系统通常提供特殊的 NoSQL 语言扩展(如 MySQL 的 `LOAD` 命令和 PostgreSQL 的 `COPY` 命令)来支持高效加载大量数据,此外还可以使用提取 - 转换 - 加载(ETL)工具和应用程序编程接口(API)。
可以使用 `UPDATE` 语句修改现有表格:
```sql
UPDATE EMPLOYEE
SET
City = 'Cleveland'
WHERE City = 'Cuyahoga Heights';
```
此示例将 `EMPLOYEE` 表中所有 `City` 属性值为 `Cuyahoga Heights` 的元组更新为 `Cleveland`。`UPDATE` 操作是基于集合的,可以编辑多个元组。
使用 `DELETE` 语句可以删除整个表格或部分表格的内容:
```sql
DELETE FROM EMPLOYEE
WHERE City = 'Cleveland';
```
如果选择谓词适用于表格中的多个条目,`DELETE` 语句通常会影响一组元组。在涉及引用完整性时,删除操作可能会影响相关表格。
#### 4. 关系运算符在 SQL 中的实现
SQL 的基本结构如下:
```sql
SELECT selected attributes -- 输出
FROM tables to be searched -- 输入
WHERE selection condition
```
0
0
复制全文
相关推荐







