SQL 教程(长文讲解)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战(已更新的所有项目都能学习) / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新开坑项目:《Spring AI 项目实战》 正在持续爆肝中,基于 Spring AI + Spring Boot 3.x + JDK 21..., 点击查看 ;
  • 《从零手撸:仿小红书(微服务架构)》 已完结,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;演示链接: http://116.62.199.48:7070 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 90w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 3100+ 小伙伴加入学习 ,欢迎点击围观

前言:为什么学习 SQL?

在数字化时代,数据是企业决策的核心资源。无论是分析用户行为、优化业务流程,还是构建智能应用,都离不开对数据的存储、查询和分析。SQL(Structured Query Language) 正是操作关系型数据库的通用语言,它如同一把钥匙,能打开数据宝库的大门。

本篇 SQL 教程 专为编程初学者和中级开发者设计,通过循序渐进的讲解、实际案例和形象比喻,帮助读者掌握 SQL 的核心概念与实用技巧。无论你是零基础入门者,还是希望系统化提升技能的开发者,都能在本文中找到适合自己的内容。


第一部分:SQL 的基础语法与核心概念

1.1 数据库的比喻:图书馆与书架

想象一个图书馆:

  • 数据库就像一座图书馆,存储着各类书籍(数据)。
  • 表(Table) 是书架,每个书架对应一个主题(如“员工信息”),书架上的每本书(行/记录)代表具体的数据条目。
  • 列(Column) 则是书的分类标签(如“书名”“作者”“ISBN”)。

SQL 的作用就是通过指令(如“SELECT”“WHERE”)告诉数据库如何检索、修改或组织这些“书籍”。


1.2 SQL 的基本语法结构

SQL 语句通常以关键词开头,以分号结尾。以下是最简单的查询语句示例:

SELECT column1, column2  
FROM table_name  
WHERE condition;  

示例:从员工表中查询数据

假设有一个名为 employees 的表,包含以下列:

  • employee_id(员工编号)
  • name(姓名)
  • department(部门)
  • salary(薪资)
-- 查询所有员工的姓名和薪资  
SELECT name, salary  
FROM employees;  

关键点解释:

  • SELECT:指定要查询的列,用逗号分隔多个列。
  • FROM:指定数据来源的表。
  • WHERE:添加过滤条件(可选)。

1.3 过滤数据:WHERE 子句与运算符

WHERE 子句通过条件筛选数据。支持的运算符包括:

  • =(等于)
  • <>!=(不等于)
  • > >= < <=(比较运算符)
  • LIKE(模糊匹配,结合 % 通配符)
  • IN(多值匹配)

案例:筛选高薪资员工

-- 查询薪资高于 10000 的员工  
SELECT name, salary  
FROM employees  
WHERE salary > 10000;  

模糊查询示例:

-- 查询姓“王”的员工  
SELECT *  
FROM employees  
WHERE name LIKE '王%';  

第二部分:数据操作与高级查询

2.1 插入、更新与删除数据

2.1.1 插入数据(INSERT INTO)

INSERT INTO employees (name, department, salary)  
VALUES ('张三', '技术部', 12000);  

2.1.2 更新数据(UPDATE)

UPDATE employees  
SET salary = 13000  
WHERE employee_id = 101;  

2.1.3 删除数据(DELETE)

DELETE FROM employees  
WHERE department = '市场部';  

注意:操作前务必确认条件,避免误删数据!


2.2 数据排序与分组:ORDER BY 和 GROUP BY

2.2.1 排序(ORDER BY)

-- 按薪资从高到低排序  
SELECT name, salary  
FROM employees  
ORDER BY salary DESC;  

2.2.2 分组与聚合函数(GROUP BY)

聚合函数(如 COUNTSUMAVG)常与 GROUP BY 结合使用,统计分组数据:

函数作用示例
COUNT()统计记录数量COUNT(employee_id)
SUM()计算数值列总和SUM(salary)
AVG()计算数值列平均值AVG(salary)
MAX()/MIN()获取最大/最小值MAX(salary)
-- 统计各部门的平均薪资  
SELECT department, AVG(salary) AS avg_salary  
FROM employees  
GROUP BY department;  

2.3 连接查询:JOIN 的艺术

当需要从多个表中获取数据时,使用 JOIN

2.3.1 内连接(INNER JOIN)

-- 查询员工及其所属部门的详细信息  
SELECT employees.name, departments.department_name  
FROM employees  
INNER JOIN departments  
ON employees.department_id = departments.department_id;  

2.3.2 左连接(LEFT JOIN)

-- 包含所有员工,即使部门信息缺失  
SELECT employees.name, departments.department_name  
FROM employees  
LEFT JOIN departments  
ON employees.department_id = departments.department_id;  

第三部分:SQL 的高级技巧与优化

3.1 子查询与临时表

子查询允许在 WHEREFROM 子句中嵌套查询:

-- 查询薪资高于公司平均薪资的员工  
SELECT name, salary  
FROM employees  
WHERE salary > (SELECT AVG(salary) FROM employees);  

临时表(如 CREATE TEMPORARY TABLE)则用于存储中间结果:

CREATE TEMPORARY TABLE temp_employees  
SELECT * FROM employees  
WHERE department = '技术部';  

3.2 窗口函数:数据透视与分析

窗口函数(Window Functions)无需分组即可对数据进行计算:

-- 为每个员工添加薪资排名  
SELECT name, salary,  
       RANK() OVER (ORDER BY salary DESC) AS salary_rank  
FROM employees;  

3.3 索引优化:加速查询的关键

索引(Index)如同书的目录,能大幅加快数据检索速度。

-- 为员工表的 department 列创建索引  
CREATE INDEX idx_department  
ON employees(department);  

注意:索引会占用存储空间,且可能降低写入速度,需权衡使用。


第四部分:实战案例:电商数据分析

4.1 数据库表设计

假设我们有以下两个表:

  • orders(订单表):order_id, customer_id, order_date, total_amount
  • customers(客户表):customer_id, name, email, country

4.2 案例 1:查询高价值客户

-- 找出总消费超过 10000 的客户  
SELECT c.name, SUM(o.total_amount) AS total_spent  
FROM orders o  
INNER JOIN customers c  
ON o.customer_id = c.customer_id  
GROUP BY c.customer_id  
HAVING total_spent > 10000;  

4.3 案例 2:按国家统计订单量

-- 统计各国订单数量  
SELECT c.country, COUNT(o.order_id) AS order_count  
FROM orders o  
LEFT JOIN customers c  
ON o.customer_id = c.customer_id  
GROUP BY c.country  
ORDER BY order_count DESC;  

结论:SQL 的学习路径与进阶建议

通过本篇 SQL 教程,你已掌握 SQL 的核心语法、数据操作、高级查询及优化技巧。以下是进一步学习的建议:

  1. 实践优先:使用 SQLite 或 MySQL 等工具,亲手创建表并执行查询。
  2. 复杂场景:尝试多表连接、子查询和窗口函数的组合应用。
  3. 性能优化:学习索引原理、查询执行计划(如 EXPLAIN)。
  4. 进阶学习:探索事务(Transaction)、存储过程(Stored Procedure)和数据库设计范式。

SQL 是数据驱动时代的核心工具,掌握它不仅能提升技术竞争力,更能让你在数据分析、业务决策等领域游刃有余。从今天开始,用 SQL 解锁数据的价值吧!


关键词布局验证

  • 标题包含“SQL 教程”
  • 正文通过上下文自然提及 SQL 的应用场景、学习路径等,关键词密度合理。

最新发布