logo

WHERE와 HAVING의 차이점

이 문서에서는 WHERE 및 HAVING 절에 대해 자세히 설명합니다. 또한 SQL 쿼리에서 레코드를 필터링하는 데에도 사용됩니다. WHERE 절과 HAVING 절의 차이점은 인터뷰 시간 동안 제기되는 가장 일반적인 질문입니다. 이들 간의 주요 차이점은 WHERE 절은 그룹화가 이루어지기 전에 레코드를 필터링하기 위한 조건을 지정하는 데 사용되는 반면, HAVING 절은 그룹에서 값을 필터링하기 위한 조건을 지정하는 데 사용된다는 것입니다. 비교하기 전에 먼저 알아두셔야 할 점은 SQL 조항.

어디서 vs 가지고 있는지

WHERE 절

MySQL의 WHERE 절은 SELECT와 함께 사용됩니다. 끼워 넣다 , 업데이트 , 그리고 삭제 테이블이나 관계에서 데이터를 필터링하는 쿼리입니다. JOIN 절을 사용하여 단일 테이블 또는 여러 테이블에서 레코드를 검색할 때 특정 조건을 설명합니다. 지정된 조건이 만족되면 테이블에서 특정 값을 반환합니다. WHERE 절은 선택한 열에 조건을 배치합니다.

MySQL의 WHERE 절은 또한 논리적 연결 구현 AND, OR 및 NOT. 이는 부울 조건으로 알려져 있습니다. 진실 데이터를 검색합니다. 논리 연결 표현식은 비교 연산자를 다음과 같은 피연산자로 사용합니다.<, ,>=, = 및 . 비교 연산자는 일반적으로 문자열과 산술 표현식을 비교하는 데 사용됩니다.

다음 구문은 WHERE 절의 사용을 보여줍니다.

 SELECT column_lists, FROM table_name WHERE conditions GROUP BY column_lists; 

이 조항을 이해하기 위해 예를 들어 보겠습니다. 라는 이름의 테이블이 있다고 가정해 보겠습니다. 직원 여기에는 다음 데이터가 포함됩니다.

어디서 vs 가지고 있는지

우리가 원한다면 근무 시간이 9시를 초과하는 직원 세부 정보를 가져오려면 , 그러면 다음과 같이 명령문을 사용할 수 있습니다.

 mysql&gt; SELECT * FROM employees WHERE working_hour &gt; 9; 

근무 시간이 9시를 초과하는 직원 세부 정보를 볼 수 있는 아래 출력을 얻을 수 있습니다.

날짜를 문자열로 변환
어디서 vs 가지고 있는지

위의 쿼리를 그룹 기준 절을 사용하면 다른 결과를 얻게 됩니다.

 mysql&gt; SELECT * FROM employees WHERE working_hour &gt; 9 GROUP BY name; 

출력은 다음과 같습니다.

어디서 vs 가지고 있는지

HAVING 절

MySQL의 HAVING 절 GROUP BY와 함께 사용 절을 사용하면 결과에 표시되는 그룹 결과를 필터링하는 조건을 지정할 수 있습니다. 특정 조건을 충족하는 최종 결과의 그룹 값만 반환합니다. 선택하는 동안 WHERE 및 HAVING 절을 함께 사용할 수도 있습니다. 이 경우 WHERE 절은 먼저 개별 행을 필터링한 다음 행을 그룹화하고 집계 계산을 수행하며 마지막으로 HAVING 절이 그룹을 필터링합니다.

이 절은 GROUP BY 절로 생성된 그룹에 조건을 적용합니다. SQL 문이 GROUP BY 키워드를 사용하지 않는 경우 WHERE 절처럼 동작합니다. SUM, MIN, MAX, AVG, 등의 집계(그룹) 함수를 사용할 수 있습니다. 세다 SELECT와 HAVING이라는 두 개의 절만 사용합니다.

다음 구문은 HAVING 절의 사용을 보여줍니다.

문자열을 int로 변환 자바
 SELECT column_lists, aggregate_function (expression) FROM table_name WHERE conditions GROUP BY column_lists HAVING condition; 

이 조항을 이해하기 위해 예를 들어 보겠습니다. 여기서 우리는 동일한 테이블을 고려하고 있습니다. 직원 시연용.

우리가 원한다면 근무 시간이 6시간을 초과하는 각 직원의 총 근무 시간을 구하려면 , 그러면 다음과 같이 명령문을 사용할 수 있습니다.

 mysql&gt; SELECT name, SUM(working_hour) AS &apos;Total working hours&apos; FROM employees GROUP BY name HAVING SUM(working_hour) &gt; 6; 

각 직원의 총 근무 시간을 확인할 수 있는 아래 출력을 얻을 수 있습니다.

어디서 vs 가지고 있는지

WHERE 절과 HAVING 절의 주요 차이점

다음 사항은 데이터베이스와 스키마의 주요 차이점을 설명합니다.

  • WHERE 절은 개별 행을 필터링하는 반면, HAVING 절은 한 번에 한 행씩 필터링하는 대신 그룹을 필터링합니다.
  • WHERE 절은 개별 행을 필터링하는 데 작동하므로 집계 함수와 함께 사용할 수 없습니다. 대조적으로 HAVING은 그룹을 필터링하는 데 사용되므로 집계 함수와 함께 작동할 수 있습니다.
  • 행 작업은 WHERE 절에 의해 처리되는 반면 HAVING 절은 요약된 행 또는 그룹에 대한 열 작업을 처리합니다.
  • WHERE는 GROUP BY 앞에 옵니다. 이는 집계 계산을 수행하기 전에 WHERE 절이 행을 필터링함을 의미합니다. HAVING은 GROUP BY 뒤에 옵니다. 이는 HAVING 절이 집계 계산을 수행한 후 행을 필터링함을 의미합니다. 결과적으로 HAVING은 효율성 측면에서 WHERE보다 느리므로 가능한 한 피해야 합니다.
  • SELECT 쿼리에서 WHERE 및 HAVING 절을 함께 결합할 수 있습니다. 이 경우 개별 행을 필터링하기 위해 먼저 WHERE 절이 사용됩니다. 그런 다음 행을 그룹화하고 집계 계산을 수행한 다음 마지막으로 HAVING 절을 사용하여 그룹을 필터링합니다.
  • WHERE 절은 지정된 조건에 따라 원하는 데이터를 검색합니다. 반면 HAVING 절은 먼저 전체 데이터를 가져온 후 지정된 조건에 따라 분리를 수행합니다.
  • SELECT 문이 없으면 HAVING 절을 사용할 수 없습니다. 반대로 SELECT, UPDATE 및 DELETE 문과 함께 WHERE를 사용할 수 있습니다.
  • WHERE 절은 사전 필터인 반면 HAVING 절은 사후 필터입니다.

WHERE와 HAVING 비교 차트

다음 비교 차트에서는 주요 차이점을 빠르게 설명합니다.

비교 기준 WHERE 절 HAVING 절
정의 개별 행에 대해 필터링을 수행하는 데 사용됩니다. 그룹에 대한 필터링을 수행하는 데 사용됩니다.
기초적인 이는 행 작업으로 구현됩니다. 이는 열 작업에서 구현됩니다.
데이터 가져오기 WHERE 절은 지정된 조건에 따라 특정 행에서 특정 데이터를 가져옵니다. HAVING 절은 먼저 전체 데이터를 가져옵니다. 그런 다음 주어진 조건에 따라 분리합니다.
집계 함수 WHERE 절은 집계 함수 작업을 허용하지 않습니다. HAVING 절은 집계 함수와 함께 작동할 수 있습니다.
역할을 하다 WHERE 절은 사전 필터 역할을 합니다. HAVING 절은 사후 필터 역할을 합니다.
함께 사용 SELECT, UPDATE 및 DELETE 문과 함께 WHERE 절을 사용할 수 있습니다. HAVING 절은 SELECT 문에서만 사용할 수 있습니다.
그룹 기준 GROUP BY 절은 WHERE 절 뒤에 옵니다. GROUP BY 절은 HAVING 절 앞에 옵니다.

결론

이번 글에서는 WHERE 절과 HAVING 절을 비교했습니다. 여기서는 HAVING 절을 더 많이 사용하는 추가 기능을 제외하고 두 절이 데이터 필터링에서 동일한 방식으로 작동한다는 결론을 내렸습니다. HAVING 절에서는 집계 함수를 효율적으로 사용할 수 있지만 WHERE에서는 집계 함수를 허용하지 않습니다.