SQL 简介

在动手装数据库之前,我们先认识一下 SQL 到底是什么、为什么值得学、能用它做什么。理解了背景,学习的时候会更有的放矢。

SQL 是什么?

SQL(全称 Structured Query Language,结构化查询语言)是专门用来操作关系型数据库(RDBMS)的语言。它和我们平时学的 Java、Python 不一样——不是用来写通用程序的,而是和数据库对话:存数据、查数据、统计数据,都靠它。

看一条最经典的 SQL:

-- 经典的 SQL 查询:从学生表里找出所有成年人
SELECT name, age
FROM students
WHERE age >= 18
ORDER BY name;
-- 结果返回一张表(行 + 列),和 Excel 长得很像

是不是很像"自然语言版的 Excel 操作"?SELECT(选哪些列) FROM(从哪张表) WHERE(满足什么条件) ORDER BY(怎么排序)。这种声明式风格是 SQL 的核心:你说"我要什么",数据库自己决定"怎么找",不用关心底层算法。

诞生历史:从一篇论文到工业标准

SQL 的故事可以追溯到 1970 年。那一年,IBM 研究员 Edgar F. Codd 发表了一篇划时代的论文,提出"关系模型"——把数据组织成一张张二维表(行 + 列),表之间通过共同的字段关联。这成了所有关系型数据库的理论基础,Codd 也因此获得了图灵奖。

随后 IBM 在 1970 年代开发了 SEQUEL 语言(后改名 SQL,因为 SEQUEL 是英国某公司的商标),用来实现 Codd 的关系模型。1979 年,Oracle 公司的前身 Relational Software 把 SQL 做成了第一款商业数据库产品,SQL 从此走向工业标准。1986 年 ANSI(美国国家标准学会)和 ISO 把 SQL 列为国际标准,从此它成了关系数据库的通用语言

SQL 标准至今已迭代多次(SQL-86、SQL-92、SQL:1999、SQL:2003、SQL:2008、SQL:2011、SQL:2016、SQL:2023),每次都加入新特性(窗口函数、JSON、GraphQL 互操作等),但核心语法四十多年几乎没变——这也是它"学了能用一辈子"的原因。

关系模型:把世界看成一张张表

理解 SQL 的前提是理解关系模型。Codd 的洞见是:任何复杂数据都能拆成二维表,表和表之间用"外键"关联。比如一个电商系统:

这种"拆成多张表、用外键关联"的设计避免了数据冗余——同一条商品信息只存一次,不会因为出现在多个订单里而重复。要查"小明买了什么",就用 JOIN 把 orders 和 users 连起来。

关系模型的核心概念有三个:表(Table,又称 Relation)行(Row,又称 Tuple/Record)列(Column,又称 Field/Attribute)。SQL 的所有操作都围绕这三个概念展开。

主流关系型数据库

虽然 SQL 是标准,但实现它的数据库产品很多,各有侧重:

-- 主流关系型数据库(语法大同小异,核心 SELECT/INSERT/UPDATE/DELETE 通用)
-- MySQL      互联网最流行,WordPress / 淘宝早期都在用
-- PostgreSQL 功能最强、开源,支持 JSON / 地理空间 / 全文搜索
-- SQLite     单文件、零配置,手机 App / 浏览器内置
-- Oracle     企业级老大,银行 / 电信首选
-- SQL Server 微软系,.NET 生态标配
-- MariaDB    MySQL 的社区分支,完全兼容

好消息是:虽然各家有些"方言"(比如取当前时间 MySQL 用 NOW()、PostgreSQL 用 CURRENT_TIMESTAMP),但 SQL 核心语法——SELECTINSERTUPDATEDELETEJOINGROUP BY——在所有数据库都通用。本教程讲的 90% 内容,换个数据库一样能用。

SQL 都用在哪?典型应用场景

只要项目需要"持久化存储 + 复杂查询",SQL 几乎都在场:

-- 场景 1:用户登录验证
SELECT id, name, password_hash
FROM users
WHERE email = 'xm@example.com';

-- 场景 2:统计昨天的销售额
SELECT SUM(amount) AS total
FROM orders
WHERE DATE(created_at) = CURDATE() - INTERVAL 1 DAY;

-- 场景 3:推荐好友(共同好友数排序)
SELECT friend_id, COUNT(*) AS mutual
FROM friendships
WHERE user_id IN (SELECT friend_id FROM friendships WHERE user_id = 1)
GROUP BY friend_id
ORDER BY mutual DESC
LIMIT 10;

更广义地说,下面这些场景全是 SQL 的舞台:

SQL vs NoSQL

近十年 NoSQL(MongoDB、Redis、Cassandra)崛起,常有人问"SQL 会被取代吗?"答案是:不会,它们解决不同问题

真实项目里两者常常配合使用:核心数据存 MySQL,热点数据缓存到 Redis,搜索走 Elasticsearch,日志写 ClickHouse。SQL 是这套生态的"地基",学它是绕不开的。

该不该学 SQL?

无论你是后端工程师、数据分析师、产品经理、运维,只要和"数据"打交道,SQL 都是必修课。它是为数不多"学了能用一辈子"的技能——编程语言十年一换,数据库的核心概念四十多年几乎没变。学完本系列,你将能独立设计数据库表结构、写出复杂的多表统计查询、用索引优化慢查询、用事务保证数据一致性。

← 返回 SQL 教程目录

下一篇 SELECT 基础语法

✈️💬