SQL基础

简介

SQL 是一种操作数据库的语言,包括创建数据库、删除数据库、查询记录、修改记录、添加字段等。SQL 虽然是一种被 ANSI 标准化的语言,但是它有很多不同的实现版本。ANSI 是 American National Standards Institute 的缩写,中文译为“美国国家标准协会”。

SQL 是 Structured Query Language 的缩写,中文译为“结构化查询语言”。SQL 是一种计算机语言,用来存储、检索和修改关系型数据库中存储的数据。

SQL 是关系型数据库的标准语言,所有的关系型数据库管理系统(RDBMS),比如 MySQL、Oracle、SQL Server、MS Access、Sybase、Informix、Postgres 等,都将 SQL 作为其标准处理语言。

此外,SQL 也有一些变种,就像中文有很多方言,比如:

  • 微软的 SQL Server 使用 T-SQL;
  • Oracle 使用 PL/SQL;
  • 微软 Access 版本的 SQL 被称为 JET SQL(本地格式)。

SQL执行过程

当你在任何一款 RDBMS 中执行 SQL 命令时,系统首先确定执行请求的最佳方式,然后 SQL 引擎将会翻译 SQL 语句,并处理请求任务。

整个执行过程包含了多种组件,比如:

  • 查询调度程序;
  • 优化引擎;
  • 传统的查询引擎;
  • SQL 查询引擎。

传统查询引擎能够处理所有的非 SQL 命令,但是 SQL 引擎并不能处理逻辑文件。

下图展示了 SQL 的体系结构:

image

SQL命令

与关系型数据库有关的 SQL 命令包括 CREATE、SELECT、INSERT、UPDATE、DELETE、DROP 等,根据其特性,可以将它们分为以下几个类别。

1) DDL - Data Definition Language,数据定义语言

对数据的结构和形式进行定义,一般用于数据库和表的创建、删除、修改等。

命令 说明
CREATE 用于在数据库中创建一个新表、一个视图或者其它对象。
ALTER 用于修改现有的数据库,比如表、记录。
DROP 用于删除整个表、视图或者数据库中的其它对象

2) DML - Data Manipulation Language,数据处理语言

对数据库中的数据进行处理,一般用于数据项(记录)的插入、删除、修改和查询。

命令 说明
SELECT 用于从一个或者多个表中检索某些记录。
INSERT 插入一条记录。
UPDATE 修改记录。
DELETE 删除记录。

3) DCL - Data Control Language,数据控制语言

控制数据的访问权限,只有被授权的用户才能进行操作。

命令 说明
GRANT 向用户分配权限。
REVOKE 收回用户权限。

数据库

最常见的数据库可以分为下面的两种类型:

  • RDBMS(关系型数据库):常见的关系型数据库有 Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL;
  • NoSQL(非关系型数据库):常见的非关系型数据库有 MongoDB、Redis、Voldemort、Cassandra、Riak、Couchbase、CouchDB 等。

RDBMS 是 Relational Database Management System 的缩写,中文译为“关系数据库管理系统”,它是 SQL 语言以及所有现代数据库系统(例如 SQL Server、DB2、Oracle、MySQL 和 Microsoft Access)的基础。

关系数据库管理系统(RDBMS)是一种基于 E. F. Codd 发明的关系模型的数据库管理系统(DBMS)。

Database

数据库: 数据库是一些关联表的集合。

Table

在 RDBMS 中,数据被存储在一种称为表(Table)的数据库对象中,它和 Excel 表格类似,都由许多行(Row)和列(Column)构成。每一行都是一条数据,每一列都是数据的一个属性,整个表就是若干条相关数据的集合。

数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。由 行(row)和 列 (column)组成,是一个二维的网格结构,每个列都是一个字段。

如website表:

1+----+----------------+----------------------------+-----+-------+---------+---------+
2| id | name           | url                        | age | alexa | uv      | country |
3+----+----------------+----------------------------+-----+-------+---------+---------+
4|  1 | 百度           | https://www.baidu.com/     |  21 |     4 |  5010.5 | CN      |
5|  2 | 淘宝           | https://www.taobao.com/    |  17 |     8 | 3996.75 | CN      |

Field

每个表都由若干列构成,每一列都称为一个字段(Field),上表 website 所包含的字段有 id、name、url、age、alexa、uv 和 country。

字段用来维护数据表中每一条数据(记录)的特定信息。

Column

列(Column)是从垂直方向观察表中的数据,它包含了与某个字段相关联的所有信息。

例如,website 表中有一列为 url,它表示网站的地址。

程序员往往不刻意区分字段(Field)和列(Column)的概念,而是将它们等同看待,因此您可以说“website 表的 age 字段”,也可以说“website 表的 age 列”,它们都是等价的。

Record

数据表中的每一行数据都称为一条记录(Record),有多少行数据就有多少条记录。

字段是从垂直方向看表中的数据,记录是从水平方向看表中的数据。

上表website 共有 2 条记录,以下是第 2 条记录:

1+----+----------------+----------------------------+-----+-------+---------+---------+
2|  2 | 百度    | https://www.taobao.com/    |  17 |  8 |   3996.75 | CN      |
3+----+----------------+----------------------------+-----+-------+---------+---------+

关系型数据库

关系型数据库管理系统(RDBMS)有很多种,它们都有各自的优缺点,下表是由 DB-Engines 发布的2025年1月份数据库排名:流行趋势与数据分析

排名 2025年1月 2024年12月 2024年1月 DBMS 数据库模型 2025年1月得分 2024年12月得分变化 2024年1月得分变化
1 1 1 1 Oracle Relational, Multi-model 1258.76 -5.03 +11.27
2 2 2 2 MySQL Relational, Multi-model 998.15 -5.61 -125.31
3 3 3 3 Microsoft SQL Server Relational, Multi-model 798.55 -7.14 -78.05
4 4 4 4 PostgreSQL Relational, Multi-model 663.41 -2.97 +14.45
5 5 5 5 MongoDB Document, Multi-model 402.50 +2.12 -14.98
6 ↑7 ↑9 9 Snowflake Relational 153.90 +6.54 +27.98
7 ↓6 ↓6 6 Redis Key-value, Multi-model 153.36 +3.08 -6.03
8 8 ↓7 7 Elasticsearch Multi-model 134.92 +2.60 -1.15
9 9 ↓8 8 IBM Db2 Relational, Multi-model 122.97 +0.19 -9.43
10 10 ↑11 11 SQLite Relational 106.69 +4.97 -8.51
11 11 ↑12 12 Apache Cassandra Wide column, Multi-model 99.19 +1.26 -11.84
12 12 ↓10 10 Microsoft Access Relational 92.70 +1.88 -24.97
13 13 ↑17 17 Databricks Multi-model 87.85 +0.16 +7.31
14 ↑15 ↓13 13 MariaDB Relational, Multi-model 85.58 +1.81 -13.65
15 ↓14 ↓14 14 Splunk Search engine 83.09 -2.27 -9.63
16 16 ↓15 15 Microsoft Azure SQL Database Relational, Multi-model 73.78 -2.59 -7.29
17 17 ↓16 16 Amazon DynamoDB Multi-model 73.00 +0.27 -7.94
18 18 18 18 Apache Hive Relational 56.87 +3.78 -10.08
19 19 19 19 Google BigQuery Relational 53.04 +0.75 -10.44
20 20 ↑22 22 Neo4j Graph 43.69 +0.62 -4.49

除了“关系型数据库”,其它类型的数据库统称为 NoSQL 数据库。NoSQL = Not Only SQL ,也即“不仅仅是 SQL”。