Administrator
Published on 2025-04-10 / 8 Visits
1
0

SQL 过滤条件使用指南

在SQL中,合理使用 ORDER BYGROUP BYBETWEEN AND 及其他过滤条件,需明确它们的用途和执行顺序。以下是详细总结:


1. ORDER BY

  • 用途:对查询结果按指定字段排序(升序 ASC 或降序 DESC)。
  • 使用场景
    • 需要排序结果时,如排行榜、时间线等。
    • 通常位于SQL语句末尾,执行顺序在 SELECT 之后。
  • 示例
    SELECT name, score FROM students ORDER BY score DESC;
    

2. GROUP BY

  • 用途:将数据按指定字段分组,常与聚合函数(SUMAVGCOUNT 等)配合生成汇总数据。
  • 使用场景
    • 统计分组数据,如“每个部门的平均工资”。
    • SELECT 后的字段必须是分组字段或聚合函数。
  • 示例
    SELECT department, AVG(salary) FROM employees GROUP BY department;
    

3. BETWEEN AND

  • 用途:过滤指定范围内的值(包含边界)。
  • 使用场景
    • 替代 >=<= 组合,提升可读性。
    • 可用于 WHEREHAVING 子句。
  • 示例
    SELECT * FROM orders WHERE order_date BETWEEN '2023-01-01' AND '2023-12-31';
    

4. 其他过滤条件

  • WHERE:分组前过滤行,不可直接使用聚合函数。
    SELECT * FROM products WHERE price > 100;
    
  • HAVING:分组后过滤组,需搭配聚合函数。
    SELECT department, AVG(salary) FROM employees GROUP BY department HAVING AVG(salary) > 5000;
    
  • LIKE/IN/IS NULL:用于模式匹配、多值匹配或空值检查。
    SELECT name FROM users WHERE email IS NULL;
    

执行顺序与组合使用

  1. 执行顺序
    FROMWHEREGROUP BYHAVINGSELECTORDER BY

  2. 典型组合示例

    SELECT department, AVG(salary) AS avg_salary
    FROM employees
    WHERE hire_date > '2020-01-01'        -- 先过滤行
    GROUP BY department                   -- 再分组
    HAVING AVG(salary) > 5000             -- 后过滤组
    ORDER BY avg_salary DESC;             -- 最后排序
    

关键区别

  • WHERE vs HAVING
    WHERE 过滤行(分组前),HAVING 过滤组(分组后,可含聚合函数)。
  • GROUP BY vs ORDER BY
    GROUP BY 影响数据分组,ORDER BY 影响最终排序。

通过理解这些关键字的用途和执行顺序,可高效编写逻辑清晰的SQL查询,满足不同数据操作需求。


Comment