
1. MySQL基础查询语句入门指南作为关系型数据库的典型代表MySQL的查询语句是每个开发者必须掌握的核心技能。今天我将结合自己多年使用MySQL的经验带大家系统梳理最常用的基础查询语句并分享一些实际工作中的实用技巧。提示本文基于MySQL 8.0版本但大部分语法也适用于其他主流版本2. 基础查询语句详解2.1 SELECT语句基础结构最基本的SELECT查询由以下几个部分组成SELECT 列名1, 列名2... FROM 表名 [WHERE 条件] [GROUP BY 分组字段] [HAVING 分组条件] [ORDER BY 排序字段] [LIMIT 限制条数];实际案例查询学生表中所有计算机系的学生信息按学号排序SELECT student_id, name, gender, department FROM students WHERE department 计算机系 ORDER BY student_id;2.2 WHERE条件查询WHERE子句支持多种条件运算符比较运算符, , , , , 逻辑运算符AND, OR, NOT范围查询BETWEEN...AND...集合查询IN (值1, 值2...)模糊查询LIKE特殊案例查询姓名以张开头且成绩在80-90之间的学生SELECT * FROM students WHERE name LIKE 张% AND score BETWEEN 80 AND 90;2.3 排序与分页ORDER BY支持多字段排序SELECT * FROM products ORDER BY category ASC, price DESC;LIMIT实现分页查询注意偏移量从0开始-- 第一页每页10条 SELECT * FROM articles ORDER BY publish_time DESC LIMIT 0, 10; -- 第二页 SELECT * FROM articles ORDER BY publish_time DESC LIMIT 10, 10;3. 高级查询技巧3.1 聚合函数与分组常用聚合函数COUNT(): 计数SUM(): 求和AVG(): 平均值MAX()/MIN(): 最大/最小值分组统计示例SELECT department, COUNT(*) as student_count, AVG(score) as avg_score FROM students GROUP BY department HAVING COUNT(*) 5;3.2 多表连接查询内连接INNER JOINSELECT s.name, c.course_name, sc.score FROM students s INNER JOIN scores sc ON s.student_id sc.student_id INNER JOIN courses c ON sc.course_id c.course_id;左外连接LEFT JOIN保留左表所有记录SELECT d.dept_name, COUNT(e.emp_id) as emp_count FROM departments d LEFT JOIN employees e ON d.dept_id e.dept_id GROUP BY d.dept_name;3.3 子查询应用WHERE子句中的子查询SELECT product_name, price FROM products WHERE price (SELECT AVG(price) FROM products);FROM子句中的派生表SELECT d.dept_name, t.avg_salary FROM departments d JOIN ( SELECT dept_id, AVG(salary) as avg_salary FROM employees GROUP BY dept_id ) t ON d.dept_id t.dept_id;4. 实用优化建议4.1 索引使用原则WHERE条件中的字段应考虑建立索引ORDER BY/GROUP BY字段建议索引多列条件考虑组合索引避免在索引列上使用函数4.2 查询性能优化只查询需要的列避免SELECT *大数据量分页使用延迟关联复杂查询考虑拆分为多个简单查询合理使用EXPLAIN分析执行计划4.3 常见问题排查编码问题确保连接字符集一致大小写敏感表名/字段名注意大小写保留字冲突使用反引号包裹关键字NULL值处理使用IS NULL/IS NOT NULL5. 实际案例演示5.1 电商商品查询-- 查询价格高于同类平均价的商品 SELECT p.product_id, p.product_name, p.price, c.category_name FROM products p JOIN categories c ON p.category_id c.category_id WHERE p.price ( SELECT AVG(price) FROM products WHERE category_id p.category_id ) ORDER BY p.price DESC;5.2 学生成绩统计-- 统计各科成绩分布 SELECT c.course_name, COUNT(*) as total, SUM(CASE WHEN sc.score 90 THEN 1 ELSE 0 END) as 优秀, SUM(CASE WHEN sc.score 80 AND sc.score 90 THEN 1 ELSE 0 END) as 良好, SUM(CASE WHEN sc.score 60 AND sc.score 80 THEN 1 ELSE 0 END) as 及格, SUM(CASE WHEN sc.score 60 THEN 1 ELSE 0 END) as 不及格 FROM scores sc JOIN courses c ON sc.course_id c.course_id GROUP BY c.course_name;掌握这些基础查询语句后你已经可以应对80%的日常数据库操作需求。在实际开发中我建议多使用EXPLAIN分析查询性能并注意建立合适的索引。对于更复杂的分析需求可以进一步学习窗口函数、CTE等高级特性。