SQL 仍然是与关系型数据库沟通的核心语言。无论数据库使用 MySQL、PostgreSQL、SQL Server 还是 Oracle,开发者都需要掌握一组稳定的基础能力:查询数据、筛选结果、排序分组,以及安全地新增、修改和删除记录。
在 2026 年 Texas Linuxfest 的 “Structured Query Language 101” 课程中,Dave Stokes 将用约 80 分钟介绍这些基础操作。课程材料原本按 3 小时设计,现场会根据进度覆盖尽可能多的内容,并使用 DBeaver Community Edition 和示例数据库进行练习。
SQL 入门应该先建立什么概念
关系型数据库把数据组织成表。表由行和列组成:列描述字段,行代表一条记录。SQL 查询的重点不是“把整张表导出来”,而是明确回答三个问题:
- 要读取哪些列?
- 要读取哪些行?
- 结果需要怎样排序或汇总?
最基本的查询如下:
SELECT customer_id, name, email
FROM customers;
生产环境中更推荐显式列出字段,而不是长期依赖 SELECT *。这样可以避免表结构增加字段后返回结果突然变化,也能减少网络传输和应用端解析压力。
四类修改数据的核心语句
SQL 基础课程通常会从四类语句展开:
SELECT 用于读取数据,INSERT 新增数据,UPDATE 修改已有数据,DELETE 删除数据。
下面的示例假设存在一张 customers 表,字段包括 customer_id、name、email 和 status。字段名需要根据你在 DBeaver 中打开的示例数据库进行调整。
-- 查询指定列
SELECT customer_id, name, status
FROM customers;
-- 新增一条记录
INSERT INTO customers (name, email, status)
VALUES ('Lin Wei', 'lin.wei@example.com', 'active');
-- 修改符合条件的记录
UPDATE customers
SET status = 'inactive'
WHERE email = 'lin.wei@example.com';
-- 删除符合条件的记录
DELETE FROM customers
WHERE email = 'lin.wei@example.com';
最需要警惕的是 UPDATE 和 DELETE。如果忘记 WHERE,语句可能会影响整张表。可以先把同样的条件放进 SELECT 中确认目标记录,再执行修改:
SELECT customer_id, name, email
FROM customers
WHERE status = 'inactive';
在真实系统中,修改操作还应放进事务,并在确认结果后提交:
BEGIN;
UPDATE customers
SET status = 'inactive'
WHERE customer_id = 42;
-- 确认影响范围和结果
SELECT customer_id, name, status
FROM customers
WHERE customer_id = 42;
COMMIT;
-- 发现条件写错时,可以使用 ROLLBACK; 代替 COMMIT;
不同数据库对事务启动语法和自动提交行为可能存在差异,执行前应确认当前数据库的配置。
用 WHERE、ORDER BY 和 GROUP BY 组织结果
没有筛选条件的查询适合探索数据,但不适合大表。WHERE 可以缩小结果范围:
SELECT customer_id, name, email
FROM customers
WHERE status = 'active'
ORDER BY name ASC;
ORDER BY 只负责结果展示顺序,不会永久改变表中的数据。可以同时使用多个排序字段:
SELECT order_id, customer_id, total_amount, created_at
FROM orders
WHERE total_amount > 100
ORDER BY created_at DESC, total_amount DESC;
当问题从“有哪些记录”变成“每个类别有多少记录”时,就需要分组和聚合函数:
SELECT status, COUNT(*) AS customer_count
FROM customers
GROUP BY status
ORDER BY customer_count DESC;
常见的内置聚合函数包括 COUNT、SUM、AVG、MIN 和 MAX。例如,统计每位客户的订单金额:
SELECT customer_id,
COUNT(*) AS order_count,
SUM(total_amount) AS total_spent,
AVG(total_amount) AS average_order
FROM orders
GROUP BY customer_id
ORDER BY total_spent DESC;
需要注意 NULL。它表示“未知”或“缺失”,不等同于空字符串,也不等同于零。判断空值应使用 IS NULL 或 IS NOT NULL,而不是 = NULL:
SELECT customer_id, email
FROM customers
WHERE email IS NULL;
可以这样用 DBeaver 练习
可以在 Mac、Windows 或 Linux 上安装 DBeaver Community Edition,然后打开随软件提供的示例数据库。练习时建议按照下面的顺序进行:
- 先运行一个只读的
SELECT,确认表名和字段名。 - 用
WHERE查询少量目标记录。 - 在测试表或事务中练习
INSERT、UPDATE和DELETE。 - 用
ORDER BY、GROUP BY和聚合函数整理结果。 - 查看执行结果和受影响的行数,再决定是否提交事务。
如果示例数据库中没有 customers 或 orders 表,不要直接照抄表名。可以在 DBeaver 的数据库导航器中查看实际表结构,或者先执行数据库对应的表结构查询。SQL 的关键是理解语句结构和数据关系,而不是记住某个示例数据库的名称。
学习和落地时的检查清单
SQL 入门不难,但数据修改的后果通常比查询严重。形成下面几条习惯,可以显著降低误操作风险:
- 查询时显式指定列,谨慎使用
SELECT *。 UPDATE和DELETE执行前,先用相同的WHERE条件运行SELECT。- 在测试环境验证语句,生产环境执行修改前确认备份、权限和事务策略。
- 关注
NULL、重复记录和时区等数据语义,而不只是语法是否报错。 - 使用参数化查询处理用户输入,避免把字符串拼接进 SQL。
- 数据量变大后,再进一步学习索引、执行计划、连接和权限管理。
从 SELECT 开始,逐步掌握筛选、排序、聚合和事务,开发者就能从“会看数据”走向“可靠地操作数据”。DBeaver 适合快速观察结果,而真正重要的是把每条 SQL 与明确的数据问题、影响范围和回滚方案对应起来。