SQL 最常用技能详解与实战示例

引言

SQL(Structured Query Language,结构化查询语言)是与关系型数据库交互的核心工具。无论是数据分析师、后端开发工程师还是产品经理,掌握 SQL 的核心技能都至关重要。本文将系统性地介绍 SQL 中最常用、最核心的技能,并通过清晰的示例帮助你快速上手和巩固。

1. 数据查询基础:SELECT 与 FROM

SELECTFROM 是 SQL 的基石,用于从表中检索数据。

核心语法:

sql 复制代码
SELECT 列名1, 列名2, ...
FROM 表名;

示例:

假设我们有一个 employees 表(员工表),包含 id, name, department, salary 等列。

sql 复制代码
-- 查询所有员工的所有信息
SELECT * FROM employees;

-- 查询所有员工的姓名和部门
SELECT name, department FROM employees;

2. 数据过滤:WHERE 子句

WHERE 子句用于根据指定条件过滤记录。

核心语法:

sql 复制代码
SELECT 列名
FROM 表名
WHERE 条件;

常用运算符:

  • =:等于
  • ><>=<=:比较
  • <>!=:不等于
  • BETWEEN ... AND ...:在某个范围内
  • LIKE:模糊匹配(% 匹配任意字符,_ 匹配单个字符)
  • IN (...):在列表中
  • IS NULL:是空值

示例:

sql 复制代码
-- 查询销售部门的所有员工
SELECT * FROM employees WHERE department = 'Sales';

-- 查询薪资大于 50000 的员工姓名
SELECT name FROM employees WHERE salary > 50000;

-- 查询姓名以 '张' 开头的员工
SELECT * FROM employees WHERE name LIKE '张%';

-- 查询部门为 'Sales' 或 'Marketing' 的员工
SELECT * FROM employees WHERE department IN ('Sales', 'Marketing');

3. 数据排序:ORDER BY 子句

ORDER BY 子句用于对结果集进行排序,默认升序(ASC),降序使用 DESC

核心语法:

sql 复制代码
SELECT 列名
FROM 表名
ORDER BY 列名1 [ASC|DESC], 列名2 [ASC|DESC];

示例:

sql 复制代码
-- 按薪资从高到低排序所有员工
SELECT name, salary FROM employees ORDER BY salary DESC;

-- 先按部门升序排列,同部门内按薪资降序排列
SELECT name, department, salary FROM employees ORDER BY department ASC, salary DESC;

4. 数据聚合与分组:GROUP BY 与聚合函数

聚合函数对一组值执行计算并返回单个值。GROUP BY 子句将结果集按一列或多列分组,常与聚合函数一起使用。

常用聚合函数:

  • COUNT():计数
  • SUM():求和
  • AVG():求平均值
  • MAX():求最大值
  • MIN():求最小值

核心语法:

sql 复制代码
SELECT 聚合函数(列名), 分组列
FROM 表名
GROUP BY 分组列;

示例:

sql 复制代码
-- 统计每个部门的员工数量
SELECT department, COUNT(*) as employee_count
FROM employees
GROUP BY department;

-- 计算每个部门的平均薪资和最高薪资
SELECT department, AVG(salary) as avg_salary, MAX(salary) as max_salary
FROM employees
GROUP BY department;

5. 分组后过滤:HAVING 子句

WHERE 子句在分组前过滤行,而 HAVING 子句在分组后过滤分组结果。

核心语法:

sql 复制代码
SELECT 聚合函数(列名), 分组列
FROM 表名
GROUP BY 分组列
HAVING 分组后条件;

示例:

sql 复制代码
-- 查询员工数量超过 5 人的部门
SELECT department, COUNT(*) as employee_count
FROM employees
GROUP BY department
HAVING COUNT(*) > 5;

-- 查询平均薪资超过 60000 的部门
SELECT department, AVG(salary) as avg_salary
FROM employees
GROUP BY department
HAVING AVG(salary) > 60000;

6. 数据连接:JOIN

JOIN 用于根据两个或多个表之间的相关列合并行。这是处理关系型数据的核心技能。

常用 JOIN 类型:

  • INNER JOIN:返回两个表中匹配的行。
  • LEFT (OUTER) JOIN:返回左表的所有行,以及右表中匹配的行。不匹配的右表部分为 NULL。
  • RIGHT (OUTER) JOIN:返回右表的所有行,以及左表中匹配的行。不匹配的左表部分为 NULL。
  • FULL (OUTER) JOIN:返回两个表中所有的行,不匹配的部分为 NULL。

核心语法:

sql 复制代码
SELECT 列名
FROM 表A
JOIN 表B ON 表A.关联列 = 表B.关联列;

示例:

假设我们还有一个 orders 表(订单表),包含 order_id, employee_id, amount 等列,通过 employee_idemployees 表关联。

sql 复制代码
-- 查询所有员工及其订单信息(内连接,只显示有订单的员工)
SELECT e.name, e.department, o.order_id, o.amount
FROM employees e
INNER JOIN orders o ON e.id = o.employee_id;

-- 查询所有员工,以及他们的订单信息(左连接,即使员工没有订单也会显示)
SELECT e.name, e.department, o.order_id, o.amount
FROM employees e
LEFT JOIN orders o ON e.id = o.employee_id;

7. 子查询

子查询是嵌套在其他 SQL 查询中的查询。它可以出现在 SELECTFROMWHEREHAVING 子句中。

示例:

sql 复制代码
-- 在 WHERE 子句中使用子查询:查询薪资高于平均薪资的员工
SELECT name, salary
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);

-- 在 FROM 子句中使用子查询(派生表)
SELECT dept_stats.department, dept_stats.avg_sal
FROM (
    SELECT department, AVG(salary) as avg_sal
    FROM employees
    GROUP BY department
) AS dept_stats
WHERE dept_stats.avg_sal > 50000;

8. 数据操作:INSERT, UPDATE, DELETE

除了查询,SQL 也用于操作数据。

INSERT(插入数据):

sql 复制代码
-- 插入一行完整数据
INSERT INTO employees (id, name, department, salary)
VALUES (101, '张三', 'Engineering', 75000);

-- 插入多行数据
INSERT INTO employees (id, name, department, salary)
VALUES (102, '李四', 'Sales', 60000),
       (103, '王五', 'Marketing', 55000);

UPDATE(更新数据):

sql 复制代码
-- 将员工 '张三' 的部门更新为 'Management'
UPDATE employees
SET department = 'Management'
WHERE name = '张三';

-- 为所有销售部门的员工加薪 10%
UPDATE employees
SET salary = salary * 1.10
WHERE department = 'Sales';

DELETE(删除数据):

sql 复制代码
-- 删除 id 为 101 的员工
DELETE FROM employees WHERE id = 101;

-- 删除所有薪资低于 30000 的员工(谨慎使用!)
DELETE FROM employees WHERE salary < 30000;

9. 数据定义:CREATE TABLE, ALTER TABLE, DROP TABLE

这些语句用于定义和修改数据库结构。

CREATE TABLE(创建表):

sql 复制代码
CREATE TABLE employees (
    id INT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    department VARCHAR(50),
    salary DECIMAL(10, 2),
    hire_date DATE DEFAULT CURRENT_DATE
);

ALTER TABLE(修改表结构):

sql 复制代码
-- 添加一个新列
ALTER TABLE employees ADD COLUMN email VARCHAR(255);

-- 修改列的数据类型
ALTER TABLE employees ALTER COLUMN salary TYPE DECIMAL(12, 2);

-- 删除一个列
ALTER TABLE employees DROP COLUMN email;

DROP TABLE(删除表):

sql 复制代码
-- 删除表(极其危险,会丢失所有数据)
DROP TABLE employees;

总结

掌握以上 SQL 技能,你就能应对日常工作中 80% 以上的数据库操作需求。核心路径是:查询(SELECT) -> 过滤(WHERE) -> 排序(ORDER BY) -> 聚合分组(GROUP BY/HAVING) -> 连接(JOIN)。数据操作(增删改)和表结构操作(DDL)则用于维护数据本身。

建议在本地安装 MySQL、PostgreSQL 或使用在线 SQL 练习平台,结合本文的示例进行实操,是掌握 SQL 最快的方式。

相关推荐
muddjsv2 小时前
大中小型企业数据配置年度成本估算分析
数据库·企业运营
ᰔᩚ. 一怀明月ꦿ3 小时前
MySQL 学习目标
学习·mysql·adb
塔能物联运维3 小时前
存量机房升级成为行业主流方向:热管理重构算力中心价值路径
数据库
lqj_本人3 小时前
鸿蒙electron跨端框架PC工志簿实战:项目、工时、阻塞和下一步都要有位置
数据库·华为·harmonyos
刘一说3 小时前
AI科技热点日报 | 2026年5月22日
数据库·人工智能·科技
LCG元3 小时前
RAG工程指南:从基础检索到生产部署全解析
java·运维·数据库
godspeed_lucip4 小时前
LLM和Agent——专题3: Agentic Workflow 入门(1)
大数据·数据库·人工智能
南境十里·墨染春水4 小时前
讲讲IO复用三个函数的底层逻辑
数据库
吴可可1234 小时前
Teigha处理CAD样条曲线的方法解析
数据库·算法·c#