SQL 基础教程

欢迎来到 SQL 基础教程!SQL(Structured Query Language)是一种用于管理关系数据库的标准化语言。通过本教程,您将学会如何使用 SQL 进行数据查询、分析和操作。

什么是 SQL?

SQL 是一种声明式语言,用于:

  • 📊 查询数据:从数据库中检索所需信息
  • 📈 数据分析:统计、汇总和分析数据
  • 🔗 关联数据:连接多个表格获取完整信息
  • 📋 数据管理:筛选、排序和组织数据

为什么学习 SQL?

SQL 是数据分析的核心技能!无论您是数据分析师、产品经理还是开发者,SQL 都是必备技能。它能帮您快速从海量数据中获取洞察。

本教程特色

  • 🎯 实战导向:每个概念都配有实际示例
  • 📊 真实数据:使用企业员工管理系统数据
  • 🚀 循序渐进:从基础到高级,逐步深入
  • 💡 最佳实践:分享实用技巧和注意事项
立即开始练习 →

数据库结构介绍

在开始学习 SQL 之前,让我们先了解本教程使用的数据库结构。我们使用一个模拟的企业管理系统,包含员工、部门和项目信息。

数据表概览

employees(员工表)

字段名 数据类型 描述 示例
id INTEGER 员工ID(主键) 1, 2, 3...
name TEXT 员工姓名 张三, 李四
department TEXT 所属部门 技术部, 销售部
salary INTEGER 月薪(元) 8000, 9500
hire_date DATE 入职日期 2022-01-15

departments(部门表)

字段名 数据类型 描述 示例
id INTEGER 部门ID(主键) 1, 2, 3...
name TEXT 部门名称 技术部, 销售部
manager_id INTEGER 部门经理ID 3, 2

projects(项目表)

字段名 数据类型 描述 示例
id INTEGER 项目ID(主键) 1, 2, 3...
name TEXT 项目名称 网站重构
department_id INTEGER 负责部门ID 1, 2
budget INTEGER 项目预算(元) 50000
status TEXT 项目状态 进行中, 已完成

表关系图

表关系说明:
  • employees.department → departments.name(员工属于部门)
  • departments.manager_id → employees.id(部门经理是员工)
  • projects.department_id → departments.id(项目属于部门)
在练习场查看数据 →

基础查询 - SELECT

SELECT 是 SQL 中最基本也是最重要的语句,用于从数据库表中检索数据。

查询所有数据

使用 SELECT * 可以查询表中的所有列和所有行:

SELECT * FROM employees;

查询结果:

id name department salary hire_date
1 张三 技术部 8000 2022-01-15
2 李四 销售部 6000 2022-03-20
3 王五 技术部 9500 2021-12-10
... 更多数据

查询指定列

通常我们不需要所有列的数据,可以指定需要的列:

SELECT name, salary FROM employees;

查询结果:

name salary
张三 8000
李四 6000
王五 9500

去重查询

使用 DISTINCT 关键字可以去除重复的数据:

SELECT DISTINCT department FROM employees;

查询结果:

department
技术部
销售部
人事部
财务部
最佳实践:
  • 避免使用 SELECT * 在生产环境中,明确指定需要的列
  • 列名顺序会影响结果显示顺序
  • DISTINCT 会对性能有一定影响,谨慎使用
练习基础查询 →

条件查询 - WHERE

WHERE 子句用于筛选满足特定条件的数据行,是数据查询中最常用的功能之一。

基本条件查询

使用 WHERE 子句筛选特定条件的数据:

SELECT * FROM employees WHERE department = '技术部';

查询结果:只显示技术部的员工

id name department salary hire_date
1 张三 技术部 8000 2022-01-15
3 王五 技术部 9500 2021-12-10
6 周八 技术部 8800 2021-11-30

比较运算符

SQL 支持多种比较运算符:

数值比较

-- 查询薪资大于8000的员工 SELECT name, salary FROM employees WHERE salary > 8000; -- 查询薪资在6000到9000之间的员工 SELECT name, salary FROM employees WHERE salary BETWEEN 6000 AND 9000;

文本比较

-- 查询不是技术部的员工 SELECT name, department FROM employees WHERE department != '技术部'; -- 查询特定部门的员工 SELECT name FROM employees WHERE department IN ('技术部', '销售部');

逻辑运算符

使用 AND、OR、NOT 组合多个条件:

-- AND:同时满足多个条件 SELECT name, department, salary FROM employees WHERE department = '技术部' AND salary > 8500; -- OR:满足任一条件 SELECT name, department, salary FROM employees WHERE department = '技术部' OR salary > 9000; -- NOT:不满足条件 SELECT name, department FROM employees WHERE NOT department = '技术部';

模糊查询

使用 LIKE 进行模糊匹配:

-- 查询姓名包含"王"的员工 SELECT name FROM employees WHERE name LIKE '%王%'; -- 查询2022年入职的员工 SELECT name, hire_date FROM employees WHERE hire_date LIKE '2022%'; -- 查询姓名以"张"开头的员工 SELECT name FROM employees WHERE name LIKE '张%';
LIKE 通配符说明:
  • %:匹配任意长度的字符(包括0个字符)
  • _:匹配单个字符
  • 例如:'张%' 匹配所有以"张"开头的姓名
注意事项:
  • 字符串比较区分大小写(取决于数据库设置)
  • LIKE 查询可能影响性能,避免在大表上频繁使用
  • NULL 值需要使用 IS NULL 或 IS NOT NULL 判断
练习条件查询 →

实战练习

通过实际练习巩固所学知识。以下是一些综合性的练习题:

练习题目

练习1:员工信息查询
查询技术部中薪资超过8500的员工姓名和薪资,按薪资降序排列。
练习2:部门统计
统计每个部门的员工数量和平均薪资。
练习3:项目管理
查询所有进行中的项目及其负责部门的信息。

开始练习

点击下面的按钮开始练习,系统会自动验证您的答案:

开始基础练习 → 自由练习场 →