3. 简要说明SQL中where子句和having子句的不同之处
时间: 2024-06-04 19:12:36 浏览: 155
SQL中where子句和having子句都可以用来限制查询结果,但它们的作用对象不同:where子句用于筛选行,而having子句用于筛选分组后的结果。
where子句在查询时作为过滤条件来筛选满足条件的行,例如:SELECT * FROM customers WHERE age > 18;
having子句在查询时作为过滤条件来筛选满足条件的分组后的结果,例如:SELECT city, COUNT(*) FROM customers GROUP BY city HAVING COUNT(*) > 10;
总的来说,where子句用于过滤行,having子句用于过滤分组后的结果。
相关问题
3、条件查询可以使用where子句、case…when子句以及having关键字,简要说明其用法区别?
在 SQL 中,`WHERE`, `CASE...WHEN` 和 `HAVING` 子句都是用于过滤数据库查询结果的重要部分,各有其特定用途:
1. **WHERE** 子句:这是最基本的条件筛选语句,用于基于列的值确定哪些行应该出现在查询结果中。它应用于 SELECT 语句的主表上,对每一行进行检查,只返回满足给定条件的行。例如:
```
SELECT * FROM table_name WHERE column_name = 'some_value';
```
2. **CASE...WHEN** 子句:这是一种条件表达式,用于根据条件返回不同的值。它主要用于计算列的值,而不是直接筛选行。比如,你可以创建一个新的列,根据原列的不同值返回不同的结果:
```
SELECT column_name,
CASE WHEN condition THEN 'result1' ELSE 'result2' END AS new_column
FROM table_name;
```
3. **HAVING** 子句:不同于 WHERE,HAVING 用于对 GROUP BY 分组后的数据进行过滤。这意味着它只能应用在聚合函数(如 SUM, COUNT, AVG 等)之后的结果上,因为只有聚合后的数据才有分组的概念。例如:
```
SELECT column1, COUNT(*) as count
FROM table_name
GROUP BY column1
HAVING COUNT(*) > 5;
```
这里会返回每个 `column1` 值分组后,计数大于5的记录。
总结来说,WHERE 用于单行级别的筛选,CASE...WHEN 主要用于列级计算,而 HAVING 用于对分组后的数据进行条件筛选。
阅读全文