DISTINCT用于去除重复行;2. GROUP BY按列分组并配合聚合函数使用;3. HAVING过滤分组后数据,WHERE不能用于聚合条件;4. union合并查询结果,UNION ALL保留重复;5. 其他选项包括sql_CALC_FOUND_ROWS、for UPDATE和STRaiGHT_JOIN;理解各选项执行顺序可提升查询准确性与效率。

mysql查询选项指的是在执行select语句时可以使用的各种关键字和参数,它们用于控制查询的行为、结果的格式以及数据的处理方式。理解这些选项有助于写出更高效、更精确的查询语句。
1. 查询去重(DISTINCT)
DISTINCT 用于去除结果中的重复行。当你只关心唯一的值组合时使用。
- 例如:
SELECT DISTINCT name FROM users;只返回不同的用户名。
2. 结果限制(LIMIT)
LIMIT 控制返回的结果行数,常用于分页或调试。
- 语法:
LIMIT n返回前n条记录;LIMIT offset, count跳过offset行,取count行。 - 例如:
SELECT * FROM orders LIMIT 10, 5;表示跳过前10条,取接下来的5条,适合做分页。
3. 排序控制(ORDER BY)
ORDER BY 按一个或多个列对结果排序,默认升序(ASC),可用DESC降序。
- 可结合多个字段排序:
ORDER BY status ASC, created_time DESC。 - 支持使用字段别名或位置编号(不推荐用数字)。
4. 条件筛选(WHERE 和 HAVING)
WHERE 用于在分组前筛选行,而 HAVING 用于分组后对聚合结果进行筛选。
- 例如:
SELECT dept, COUNT(*) FROM emp GROUP BY dept HAVING COUNT(*) > 5; - 注意:HAVING通常与GROUP BY配合使用,WHERE不能用于聚合函数条件。
5. 分组统计(GROUP BY)
GROUP BY 将数据按指定列分组,常与COUNT、SUM、AVG等聚合函数一起使用。
- SELECT中的非聚合字段必须出现在GROUP BY中(遵循SQL标准)。
- 可按多个字段分组:
GROUP BY year, month。
6. 联合查询(UNION)
UNION 合并两个或多个SELECT结果,默认去重;UNION ALL保留重复。
- 各查询的字段数量和类型需兼容。
- 适用于将结构相似的数据整合输出。
7. 其他常用选项
- SQL_CALC_FOUND_ROWS:计算实际总行数(即使有LIMIT),配合FOUND_ROWS()使用(已逐渐被弃用)。
- FOR UPDATE / LOCK IN SHARE MODE:在事务中锁定查询到的行,防止并发修改。
- STRAIGHT_JOIN:强制表的连接顺序,优化性能时使用。
基本上就这些。掌握这些选项能让你更灵活地操作数据,写出符合业务需求的查询语句。关键是理解每个选项的作用阶段:比如WHERE先于GROUP BY,HAVING在分组之后,ORDER BY通常在最后。顺序错了,结果可能完全不同。


