English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

SQL HAVING 구문

이 튜토리얼에서는 GROUP BY 구문이 반환하는 그룹을 필터링하는 방법을 배울 것입니다.

조건에 따라 그룹을 필터링합니다

HAVING 구문은 일반적으로GROUP BY구문을 함께 사용하여 그룹이나 집합의 필터링 조건을 지정합니다. HAVING 구문은SELECT구문을 함께 사용하여

이를 쉽게 이해하기 위해 다음과 같은 예를 보겠습니다:employeesdepartments표.

+--------+--------------+------------+---------+
| emp_id | emp_name     | hire_date  | dept_id |
+--------+--------------+------------+---------+
|      1 | Ethan Hunt   | 2001-05-01 |       4 |
|      2 | Tony Montana | 2002-07-15 |       1 |
|      3 | Sarah Connor | 2005-10-18 |       5 |
|      4 | Rick Deckard | 2007-01-03 |       3 |
|      5 | Martin Blank | 2008-06-24 |    NULL |
+--------+--------------+------------+---------+

+---------+------------------+
| dept_id | dept_name        |
+---------+------------------+
|       1 | Administration   |
|       2 | Customer Service |
|       3 | Finance          |
|       4 | Human Resources  |
|       5 | Sales            |
+---------+------------------+
표: employees
표: departments

이제, 직원과 그 부서의 이름을 찾기만 아니라 직원이 없는 부서의 이름도 찾아야 합니다.

작은 테이블에 대해서는 단순히 적용할 수 있습니다.좌 연결각 부서를 수동으로 확인할 수 있지만, 수천 명의 직원이 포함된 테이블이 있다고 가정해 보면 그렇지 않을 것입니다.

이 경우, HAVING 구문을 함께 사용하여GROUP BY구문을 함께 사용하여 예를 들어 다음과 같이 사용할 수 있습니다:

SELECT t1.dept_name, count(t2.emp_id) AS total_employees
FROM departments AS t1 LEFT JOIN employees AS t2
ON t1.dept_id = t2.dept_id
GROUP BY t1.dept_name
HAVING total_employees = 0;

위의 문장을 실행하면 다음과 같은 출력을 얻을 수 있습니다:

+------------------+-----------------+
| dept_name        | total_employees |
+------------------+-----------------+
| 고객 서비스 |               0 |
+------------------+-----------------+

힌트:HAVING 문장은 WHERE 문장과 유사하지만, 그러나 전체 그룹에만 적용됩니다.WHERE문장은 단일 행에 적용됩니다.

SELECT 쿼리는 WHERE와 HAVING 문장을 포함할 수 있지만, 이 경우WHERE문장은 GROUP BY 문장 앞에 나타나야 하며, HAVING 문장은 GROUP BY 문장 이후에 나타나야 하지만ORDER BY문장 앞에.