SQL 简介
SQL 代表结构化查询语言。 SQL 用于与关系数据库通信。 它是关系数据库管理系统的标准语言。 SQL 语句用于执行任务,如更新数据库中的数据,或从数据库中检索数据。 一些常见的使用 SQL 的关系数据库管理系统包括 Microsoft SQL Server、MySQL、PostgreSQL、MariaDB 和 Oracle。
注释
SQL 最初由1986年美国国家标准研究所(ANSI)标准化,1987年由国际标准化组织(ISO)标准化。 此后,随着关系数据库供应商向其系统添加了新功能,该标准已多次扩展。 此外,大多数数据库供应商都包含自己不属于标准的专有扩展,这导致了各种 SQL 方言。
在本单元中,你将了解 SQL。 你将了解如何在数据库中查询和维护数据,以及可用的不同方言。
了解 SQL 方言
可以使用 SELECT、 INSERT、 UPDATE、 DELETE、 CREATE 和 DROP 等 SQL 语句完成数据库所需的几乎所有作。 尽管这些 SQL 语句是 SQL 标准的一部分,但许多数据库管理系统也有自己的附加专有扩展来处理该数据库管理系统的具体信息。 这些扩展提供了 SQL 标准未包含的功能,包括安全管理和可编程性等领域。 例如,Microsoft SQL Server 使用 Transact-SQL。 此实现包括用于编写存储过程和触发器(可存储在数据库中的应用程序代码)和管理用户帐户的专有扩展。 PostgreSQL 和 MySQL 也有其自己的这些功能版本。
SQL 的一些常用方言包括:
Transact-SQL (T-SQL) 。 此版本的 SQL 由 Microsoft SQL Server 和 Azure SQL 数据库使用。
pgSQL。 这是在 PostgreSQL 中实现了扩展的方言。
PL/SQL。 这是 Oracle 使用的方言。 PL/SQL 代表过程语言/SQL。
计划专门使用单一数据库系统的用户应了解其首选 SQL 方言和平台的复杂情况。
了解 SQL 语句类型
SQL 语句分为两个主要逻辑组,它们是:
- 数据操作语言 (DML)
- 数据定义语言 (DDL)
使用 DML 语句
使用 DML 语句操作关系表中的行。 使用这些语句可以检索(查询)数据、插入新行或编辑现有行。 如果不再需要行,也可以删除它们。
四个主要 DML 语句包括:
| 声明 | DESCRIPTION |
|---|---|
| SELECT | 从表中选择/读取行 |
| INSERT | 将新行插入表中 |
| 更新 | 编辑/更新现有行 |
| DELETE | 删除表中的现有行 |
INSERT 语句的基本形式将一次插入一行。 默认情况下, SELECT、 UPDATE 和 DELETE 语句将应用于表中的每一行。 通常,使用这些语句应用 WHERE 子句来指定条件;仅选择、更新或删除符合这些条件的行。
警告
SQL 不提供 确定吗? 提示,因此在不使用 WHERE 子句的情况下使用 DELETE 或 UPDATE 时要小心,因为可能会丢失或修改大量数据。
下面的代码是一个 SQL 语句的示例,该语句从表中选择与单个筛选器匹配的所有行。 FROM 子句指定要使用的表:
SELECT *
FROM MyTable
WHERE MyColumn2 = 'contoso'
如果查询返回许多行,则它们不一定出现在任何特定序列中。 如果要对数据进行排序,可以添加 ORDER BY 子句。 数据将按指定的列进行排序:
SELECT *
FROM MyTable
ORDER BY MyColumn1
还可以运行 SELECT 语句,这些语句使用 JOIN 子句从多个表中检索数据。 联接指示一个表中的行如何与其他表中的行连接,以确定要返回的数据。 联接条件通过以下方式定义查询中两个表的关联方式:
- 从每个表中指定要用于联接的列。 典型的联接条件指定一个表中的外键以及另一个表中的关联主键。
- 指定在比较列中的值时使用的逻辑运算符(例如 = 或 <>)。
以下查询显示了联接两个表(名为 Inventory 和 CustomerOrder)的示例。 它检索清单表中 ID 列中的值与 CustomerOrder 表中 InventoryID 列中的值匹配的所有行。
SELECT *
FROM Inventory
JOIN CustomerOrder
ON Inventory.ID = CustomerOrder.InventoryID
SQL 提供聚合函数。 聚合函数跨一组行或整个表计算单个结果。 以下示例查找 MyTable 表中所有行的 MyColumn1 列中的最小值:
SELECT MIN(MyColumn1)
FROM MyTable
其他一些聚合函数可用,包括 MAX(它返回列中的最大值)、AVG(它返回平均值,但仅当列包含数值数据)和 SUM(这将返回列中所有值的和,但仅当列为数值时)。
下一个示例演示如何使用 SQL 更新现有行。 它修改第二列的值,但仅针对 MyColumn1 中值为 3 的行。 所有其他行保持不变:
UPDATE MyTable
SET MyColumn2 = 'contoso'
WHERE MyColumn1 = 3
警告
如果省略 WHERE 子句, UPDATE 语句将修改表中 的每 一行。
使用 DELETE 语句删除行。 指定要执行删除操作的表和标识要删除的行的 WHERE 子句:
DELETE FROM MyTable
WHERE MyColumn2 = 'contoso'
警告
如果省略 WHERE 子句,DELETE 语句将从表中删除 整个 行。
INSERT 语句采用略有不同的形式。 在 INTO 子句中指定表和列,以及要存储在这些列中的值的列表。 标准 SQL 一次仅支持插入一行,如以下示例所示。 某些方言允许指定多个 VALUES 子句,以便一次添加多行:
INSERT INTO MyTable(MyColumn1, MyColumn2, MyColumn3)
VALUES (99, 'contoso', 'hello')
使用 DDL 语句
可以使用 DDL 语句在数据库中创建、修改和删除表和其他对象(表、存储过程、视图等)。
最常见的 DDL 语句包括:
| 声明 | DESCRIPTION |
|---|---|
| CREATE | 在数据库中创建新对象,例如表或视图。 |
| ALTER | 修改对象的结构。 例如,更改表以添加新列。 |
| DROP | 从数据库中删除对象。 |
| 重命名 | 重命名现有对象。 |
警告
DROP 语句非常强大。 删除表时,该表中的所有行都将丢失。 除非有备份,否则将无法检索此数据。
以下示例创建新的数据库表。 括号之间的项指定每个列的详细信息,包括名称、数据类型、列是否必须始终包含值(NOT NULL),以及列中的数据是否用于唯一标识行(PRIMARY KEY)。 每个表都应有一个主键,尽管 SQL 不强制实施此规则。
注释
标记为 NOT NULL 的列称为 必需 列。 如果省略 NOT NULL 子句,则可以创建列中不包含值的行。 一行中的空列据说具有 NULL 值。
CREATE TABLE MyTable
(
MyColumn1 INT NOT NULL PRIMARY KEY,
MyColumn2 VARCHAR(50) NOT NULL,
MyColumn3 VARCHAR(10) NULL
);
表中的列可用的数据类型在数据库管理系统之间会有所不同。 但是,大多数数据库管理系统都支持数字类型,例如 INT(整数或整数),以及 VARCHAR(VARCHAR )等字符串类型代表可变长度字符数据。 有关详细信息,请参阅所选数据库管理系统的文档。