SQL HAVING子句

SQL HAVING子句

HAVING子句将条件放置在SELECT语句中由GROUP BY子句定义的分组中。

此SQL子句在SELECT语句中的’GROUP BY’子句之后实现。

在SQL中使用此子句,因为我们不能使用WHERE子句与SQL聚合函数。WHERE和HAVING子句都用于筛选SQL查询中的记录。

HAVING子句与WHERE子句的区别

在数据库中WHERE和HAVING子句的区别是IT面试中最重要的问题。

下表显示了这两个子句之间的比较,但主要区别是WHERE子句在进行任何分组之前使用条件来筛选记录,而HAVING子句使用条件来筛选来自群组的值。

HAVING WHERE
1. HAVING子句用于根据给定条件从组中获取数据/值。 1. WHERE子句用于根据给定条件从表中获取数据/值。
2. HAVING子句始终与GROUP BY子句一起执行。 2. WHERE子句可以在没有GROUP BY子句的情况下执行。
3. HAVING子句可以在查询或语句中包含SQL聚合函数。 3. 我们不能在语句中使用带有WHERE子句的SQL聚合函数。
4. 我们只能在HAVING子句中使用SELECT语句来过滤记录。 4. 而可以轻松地在UPDATE、DELETE和SELECT语句中使用WHERE子句。
5. HAVING子句在SQL查询中在GROUP BY子句之后使用。 5. WHERE子句始终在SQL查询中在GROUP BY子句之前使用。
6. 我们可以在列操作中实现这个SQL子句。 6. 我们可以在行操作中实现这个SQL子句。
7. 这是一个后置过滤器。 7. 这是一个前置过滤器。
8. 它用于过滤组。 8. 它用于过滤表的单个记录。

在SQL中HAVING子句的语法

SELECT column_Name1, column_Name2, ....., column_NameN aggregate_function_name(column_Name) FROM table_name GROUP BY column_Name1 HAVING condition;

SQL中HAVING子句的示例

在本文中,我们提供了以下四个不同的示例,将帮助您了解如何在不同的SQL聚合函数中使用HAVING子句:

示例1: 让我们看下面的 Employee 表,它将帮助您分析使用SUM聚合函数的HAVING子句:

Emp_Id Emp_Name Emp_Salary Emp_City
201 Abhay 2000 Goa
202 Ankit 4000 Delhi
203 Bheem 8000 Jaipur
204 Ram 2000 Goa
205 Sumit 5000 Delhi

如果您想为每个城市添加员工的薪水,请编写以下查询:

SELECT SUM(Emp_Salary), Emp_City FROM Employee GROUP BY Emp_City;

以上查询的输出显示如下输出:

SUM(Emp_Salary) Emp_City
4000 Goa
9000 Delhi
8000 Jaipur

现在,假设您想显示那些员工总薪水超过5000的城市。为此情况下,您需要在SQL中使用以下具有HAVING子句的查询进行输入:

SELECT SUM(Emp_Salary), Emp_City FROM Employee GROUP BY Emp_City HAVING SUM(Emp_Salary)>5000;

上述SQL查询的输出在输出中显示以下表格:

SUM(Emp_Salary) Emp_City
9000 Delhi
8000 Jaipur

例子2: 让我们来看下面的 Student_details 表,它可以帮助你分析带有COUNT聚合函数的HAVING子句:

Roll_No Name Marks Age
1 Rithik 91 20
2 Kapil 60 19
3 Arun 82 17
4 Ram 92 18
5 Anuj 50 20
6 Suman 88 18
7 Sheetal 57 19
8 Anuj 64 20

假设您要根据上表中的学生按年龄进行计数。为此,您必须编写以下查询:

SELECT COUNT(Roll_No), Age FROM Student_details GROUP BY Age ;

以上查询将显示以下输出:

Count(Roll_No) Age
3 20
2 19
1 17
2 18

现在假设您想显示那些学号大于等于2的学生的年龄。对于这种情况,您必须在SQL查询中使用以下语句和HAVING子句:

SELECT COUNT(Roll_No), Age FROM Student_details GROUP BY Age HAVING COUNT(Roll_No) >= 2 ;

上述SQL查询的输出在输出中显示了以下表格:

Count(Roll_No) Age
3 20
2 19
2 18

示例3: 让我们来看一下以下 Employee 表格,它可以帮助您分析HAVING子句的MIN和MAX聚合函数:

Emp_ID Name Emp_Salary Emp_Dept
1001 Anuj 9000 Finance
1002 Saket 4000 HR
1003 Raman 3000 Coding
1004 Renu 6000 Coding
1005 Seenu 5000 HR
1006 Mohan 10000 Marketing
1007 Anaya 4000 Coding
1008 Parul 8000 Finance

MIN函数和HAVING子句:

如果您想显示每个部门及每个部门的最低工资,您必须编写以下查询:

SELECT MIN(Emp_Salary), Emp_Dept FROM Employee GROUP BY Emp_Dept;

上述查询的输出显示如下输出:

MIN(Emp_Salary) Emp_Dept
8000 Finance
4000 HR
3000 Coding
10000 Marketing

现在,假设您只想显示那些员工的最低工资大于4000的部门。针对这种情况,您需要在SQL中使用以下查询,并使用HAVING子句:

SELECT MIN(Emp_Salary), Emp_Dept FROM Employee GROUP BY Emp_Dept HAVING MIN(Emp_Salary) > 4000 ;

上述SQL查询在输出中显示了以下表格:

MIN(Emp_Salary) Emp_Dept
8000 Finance
10000 Marketing

MAX函数与HAVING子句:

在上述员工表中,如果你想列出每个部门以及每个部门中的最高工资。为此,你需要编写以下查询:

SELECT MAX(Emp_Salary), Emp_Dept FROM Employee GROUP BY Emp_Dept;

上述查询将显示以下输出:

MAX(Emp_Salary) Emp_Dept
9000 Finance
5000 HR
6000 Coding
10000 Marketing

现在假设你想要只显示那些员工的最高工资小于8000的部门。对于这种情况,你需要在SQL中使用以下带有HAVING子句的查询:

SELECT MAX(Emp_Salary), Emp_Dept FROM Employee GROUP BY Emp_Dept HAVING MAX(Emp_Salary) < 8000 ;

上述SQL查询的输出在输出中显示了以下表:

MAX(Emp_Salary) Emp_Dept
5000 HR
6000 Coding

示例 4: 让我们来看一下下面的 Employee_Dept 表格,它可以帮助您分析带有AVG聚合函数的HAVING子句:

Emp_ID Name Emp_Salary Emp_Dept
1001 Anuj 8000 Finance
1002 Saket 4000 HR
1003 Raman 3000 Coding
1004 Renu 6000 Coding
1005 Seenu 5000 HR
1006 Mohan 10000 Marketing
1007 Anaya 4000 Coding
1008 Parul 6000 Finance

如果您想查找每个部门员工的平均工资,您必须编写以下查询:

SELECT AVG(Emp_Salary), Emp_Dept FROM Employee_Dept GROUP BY Emp_Dept;

上述查询将显示以下输出:

AVG(Emp_Salary) Emp_Dept
7000 Finance
4500 HR
6500 Coding
10000 Marketing

现在,假设您想要显示那些平均工资大于等于6500的部门。对于这种情况,您需要在SQL中使用以下查询语句和HAVING子句:

SELECT AVG(Emp_Salary), Emp_Dept FROM Employee_Dept GROUP BY Emp_Dept HAVING AVG(Emp_Salary) > 6500 ;

上述SQL查询将在输出中显示以下表格:

AVG(Emp_Salary) Emp_Dept
7000 Finance
6500 Coding
10000 Marketing

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程