1. MySQL SQL基础练习的价值与意义
对于任何想要掌握数据库操作的人来说,SQL基础练习都是必不可少的环节。MySQL作为最流行的开源关系型数据库管理系统,其SQL语法的掌握程度直接决定了开发者与数据库交互的效率和质量。
100道基础练习题的价值在于:
- 覆盖SELECT、INSERT、UPDATE、DELETE等CRUD基础操作
- 包含WHERE条件、JOIN连接、GROUP BY分组等核心语法
- 涉及子查询、函数、视图等进阶内容
- 通过实际问题培养SQL思维模式
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 练习环境准备
2.1 MySQL安装与配置
推荐使用MySQL 8.0社区版,这是目前最新的稳定版本。安装过程需要注意:
- 设置合适的root密码(建议12位以上包含大小写字母、数字和特殊字符)
- 配置字符集为utf8mb4以支持完整Unicode字符
- 调整innodb_buffer_pool_size参数(建议设置为可用内存的50-70%)
bash复制# 示例:Ubuntu系统安装MySQL
sudo apt update
sudo apt install mysql-server
sudo mysql_secure_installation
2.2 练习数据库创建
建议创建一个专门的练习数据库:
sql复制CREATE DATABASE sql_practice CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE sql_practice;
3. 基础查询练习(1-30题)
3.1 单表查询基础
sql复制-- 示例1:基本SELECT查询
SELECT * FROM employees WHERE department = 'Sales';
-- 示例2:使用LIMIT分页
SELECT product_name, unit_price FROM products
ORDER BY unit_price DESC LIMIT 10 OFFSET 20;
常见问题:
- 忘记WHERE条件的引号导致语法错误
- LIMIT和OFFSET顺序错误
- 未使用ORDER BY导致分页结果不稳定
3.2 条件查询与运算符
sql复制-- BETWEEN AND范围查询
SELECT order_id, order_date FROM orders
WHERE order_date BETWEEN '2023-01-01' AND '2023-01-31';
-- IN运算符使用
SELECT * FROM customers
WHERE country IN ('USA', 'UK', 'Japan');
4. 多表连接查询(31-60题)
4.1 内连接与外连接
sql复制-- 内连接示例
SELECT o.order_id, c.customer_name
FROM orders o
JOIN customers c ON o.customer_id = c.customer_id;
-- 左外连接示例
SELECT d.department_name, e.employee_name
FROM departments d
LEFT JOIN employees e ON d.department_id = e.department_id;
4.2 自连接与复合连接
sql复制-- 自连接示例(查找同一部门的员工)
SELECT e1.employee_name, e2.employee_name, e1.department
FROM employees e1
JOIN employees e2 ON e1.department = e2.department
AND e1.employee_id < e2.employee_id;
-- 三表连接示例
SELECT o.order_id, c.customer_name, p.product_name
FROM orders o
JOIN customers c ON o.customer_id = c.customer_id
JOIN order_items oi ON o.order_id = oi.order_id
JOIN products p ON oi.product_id = p.product_id;
5. 聚合函数与分组查询(61-80题)
5.1 常用聚合函数
sql复制-- 基本聚合查询
SELECT
COUNT(*) AS total_orders,
SUM(order_amount) AS total_sales,
AVG(order_amount) AS avg_order,
MAX(order_date) AS latest_order
FROM orders;
-- 分组统计
SELECT
department,
COUNT(*) AS employee_count,
AVG(salary) AS avg_salary
FROM employees
GROUP BY department;
5.2 HAVING子句使用
sql复制-- 筛选分组结果
SELECT
product_category,
SUM(quantity) AS total_quantity
FROM order_items
GROUP BY product_category
HAVING SUM(quantity) > 100;
6. 子查询与高级功能(81-100题)
6.1 子查询应用
sql复制-- WHERE子句中的子查询
SELECT product_name, unit_price
FROM products
WHERE unit_price > (SELECT AVG(unit_price) FROM products);
-- FROM子句中的子查询
SELECT dept.dept_name, emp_count.count
FROM departments dept
JOIN (
SELECT department_id, COUNT(*) AS count
FROM employees
GROUP BY department_id
) emp_count ON dept.department_id = emp_count.department_id;
6.2 视图与索引
sql复制-- 创建视图
CREATE VIEW customer_order_summary AS
SELECT
c.customer_id,
c.customer_name,
COUNT(o.order_id) AS order_count,
SUM(o.order_amount) AS total_spent
FROM customers c
LEFT JOIN orders o ON c.customer_id = o.customer_id
GROUP BY c.customer_id, c.customer_name;
-- 创建索引
CREATE INDEX idx_customer_name ON customers(customer_name);
CREATE INDEX idx_order_date ON orders(order_date);
7. 练习技巧与优化建议
7.1 高效练习方法
- 先理解题目需求再写SQL
- 从简单查询开始逐步构建复杂查询
- 使用EXPLAIN分析查询执行计划
- 记录常见错误和解决方案
- 定期复习已完成的题目
7.2 性能优化要点
- 避免SELECT *,只查询需要的列
- 为常用查询条件创建适当索引
- 注意JOIN操作的性能影响
- 合理使用临时表和子查询
- 关注数据类型匹配和隐式转换
重要提示:MySQL 8.0+版本中,窗口函数已成为标准功能,建议在掌握基础后学习使用ROW_NUMBER()、RANK()等高级函数
8. 常见错误排查
-
语法错误:
- 检查引号、括号是否匹配
- 确认关键字拼写正确
- 验证表名和列名是否存在
-
逻辑错误:
- WHERE条件是否覆盖所有需求
- JOIN条件是否正确关联表
- GROUP BY是否包含所有非聚合列
-
性能问题:
- 使用EXPLAIN分析执行计划
- 检查是否使用了合适的索引
- 评估查询是否扫描过多数据
通过系统性地完成这100道基础练习题,你将建立起扎实的SQL基础,能够应对大多数日常数据库操作需求。建议每完成20题进行一次复习,并尝试在实际项目中应用所学知识。
