本资料为《吉林大学数据库系统概论》课程的简答题汇总,覆盖了该课程的核心知识点与常见考点,适用于学生复习及巩固学习成果。
在SQL查询语言中,“WHERE”子句与“HAVING”子句是两个至关重要的概念,在数据筛选、处理方面发挥着巨大作用。
### WHERE 子句
#### 定义
“WHERE”子句用于对数据库中的数据进行过滤,它帮助我们指定特定的条件以只返回满足这些条件的数据行。简单来说,“WHERE”子句是在执行任何分组或汇总操作之前应用的一系列筛选条件,用来缩小搜索范围。
#### 使用场景
1. **基础查询**:例如,在员工信息表中查找所有年薪超过50万的员工。“WHERE 年薪 > 500000”可以实现这一需求。
2. **复杂条件组合**:“AND”和“OR”等逻辑运算符可用于多个筛选条件之间的组合。比如,“WHERE 年龄 BETWEEN 25 AND 35 AND 性别 = 男”,表示查找年龄在25到35岁之间且性别为男性员工。
3. **模式匹配**:使用通配符(如%、_)进行模糊搜索。“WHERE 姓名 LIKE 张%”可用来找出所有以“张”开头的姓名记录。
#### 作用范围
“WHERE”子句检查表中每一行数据,只有满足指定条件的数据才会被包含在最终结果集中。
### HAVING 子句
#### 定义
不同于“WHERE”,“HAVING”子句用于过滤通过GROUP BY操作产生的分组。换句话说,“HAVING”允许我们根据聚合函数的结果来进一步筛选这些分组。“HAVING”的独特之处在于它可以使用聚合函数,这是“WHERE”不能做到的。
#### 使用场景
1. **过滤分组**:例如统计每个部门员工平均工资,并仅列出高于特定阈值的部门。“HAVING AVG(工资) > 70000”可以实现这一目标。
2. **多条件筛选**:“WHERE”和“HAVING”的结合可用于更复杂的查询。比如,“WHERE 部门编号 IN (1, 2, 3) GROUP BY 部门编号 HAVING COUNT(*) > 5”,表示只列出员工人数超过五人的部门(编号为1、2或3)。
3. **高级分析**:“HAVING SUM(销售额) > 100000”可用于找出总销售额超过一定金额的分组。
#### 作用范围
“HAVING”子句仅应用于已经通过GROUP BY操作生成的结果集,而不是原始数据表中的每一行。这意味着它只对每个分组进行处理和筛选。
### 总结
尽管两者都用于过滤数据,“WHERE”主要用于基础的数据行过滤;而“HAVING”更侧重于在聚合后的结果上进一步筛选条件。“WHERE”子句与“HAVING”子句的正确使用对于高效地管理和分析大型数据库至关重要。