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 最快的方式。

相关推荐
安_13 小时前
RAG的向量数据库:为LLM提供语义搜索能力
数据库
喜欢的名字被抢了13 小时前
程序出问题怎么查,以及如何让它不掉线
java·运维·数据库
这个DBA有点耶14 小时前
3000万个应用共享一套数据库:多租户“逻辑表”架构是如何做到的?
数据库·架构·dba
测试运维日常笔记14 小时前
Oracle 数据库连接认证方式详解
数据库·oracle
ClouGence15 小时前
PostgreSQL 同步到 Iceberg:开源、私有部署与 SaaS 方案对比
数据库·postgresql·开源
这个DBA有点耶15 小时前
DBA进阶之路:从“修数据库”到“管架构债”
数据库·架构·dba
ACP广源盛1392462567315 小时前
WAIC2026 国产超节点算力浪潮下@ACP#IX9104 在算力矩阵中的定位与落地场景
大数据·数据库·人工智能·嵌入式硬件·线性代数·矩阵
珠***格16 小时前
通信链路全打通:西格电力四可装置的 4G/5G + 加密认证技术详解
大数据·数据库·分布式·5g·架构·能源
盗理者16 小时前
AI Agent 技能分享|从零实现 MCP Server,让 Agent 安全读取数据库
数据库·oracle
xqqxqxxq16 小时前
Redis 五大常用数据类型 + 通用命令笔记
数据库·redis·笔记