[SQL] SQL에서 HAVING 및 WHERE의 차이점은 무엇입니까?
SQLSQL에서 HAVING 및 WHERE의 차이점은 무엇입니까?
SQL SELECT 문에서 HAVING 및 WHERE의 차이점은 무엇입니까?
편집 :이 링크 정보의 키 비트를 포함 나는 올바른 하나 스티븐의 답변을 표시 한 :
내가 본했던 상황은 WHERE에 GROUP BY를 내 혼란이 시작된 곳이다하지 않았다. 물론, 당신이 알고있을 때까지 당신은 질문을 지정할 수 없습니다.
해결법
-
==============================
1.출처
출처
-
==============================
2.갖는 : 집계가 발생 후 조건을 확인하는 데 사용됩니다. WHERE : 집계가 발생하기 전에 조건을 확인하는 데 사용됩니다.
갖는 : 집계가 발생 후 조건을 확인하는 데 사용됩니다. WHERE : 집계가 발생하기 전에 조건을 확인하는 데 사용됩니다.
이 코드 :
select City, CNT=Count(1) From Address Where State = 'MA' Group By City
당신에게 MA에있는 모든 도시의 테이블과 각 도시에있는 주소의 수를 제공합니다.
이 코드 :
select City, CNT=Count(1) From Address Where State = 'MA' Group By City Having Count(1)>5
당신이 5 개 이상의 주소 MA 도시의 테이블과 각 도시에있는 주소의 수를 제공합니다.
-
==============================
3.나를 위해 번호 하나 차이 : 갖는 SQL 언어에서 제거 된 경우 다음 생활이 더 많거나 적은 이전에 갈 것입니다. 물론, 소수 쿼리 등 파생 테이블, CTE를 사용하여 다시 작성해야하지만 그들은 틀림없이 이해하고, 그 결과로 유지하는 것이 더 쉽습니다. 어쩌면 공급 업체의 최적화 코드는 다시,이에 대한 계정에 다시 작성하기 위해 업계의 개선을위한 기회를해야합니다.
나를 위해 번호 하나 차이 : 갖는 SQL 언어에서 제거 된 경우 다음 생활이 더 많거나 적은 이전에 갈 것입니다. 물론, 소수 쿼리 등 파생 테이블, CTE를 사용하여 다시 작성해야하지만 그들은 틀림없이 이해하고, 그 결과로 유지하는 것이 더 쉽습니다. 어쩌면 공급 업체의 최적화 코드는 다시,이에 대한 계정에 다시 작성하기 위해 업계의 개선을위한 기회를해야합니다.
이제 WHERE 언어에서 제거 잠시 생각. 이 시간은 존재 쿼리의 대부분은 명백한 대안 구조없이 다시 작성해야합니다. 코더는 창조적 예를 얻어야 할 것 내측은 종래 절을 시뮬레이션하기 위해 ON 절을 사용하여 (예를 들면, 오라클 DUAL) 정확히 하나의 행을 포함하는 공지 된 테이블에 조인. 이러한 구조는 인위적인 것이다; 뭔가 언어에서 누락 된 상황이 결과적으로 악화 될 것이다 있었다 명백 할 것이다.
TL; DR 우리는 내일 일 가능성이 더 나은, 더 악화 없을 것 HAVING 잃을 수 있지만, 같은 캔은 WHERE 말할 수 없습니다.
여기에 대한 답변에서, 많은 사람들이 HAVING 절은 GROUP BY 절없이 사용할 수 있다는 것을 인식하지 않는 것 같다. 이 경우, HAVING 절은 전체 테이블 식에 적용 만 상수는 SELECT 절에 표시해야한다. 일반적으로 HAVING 절은 집계를 포함 할 것이다.
이것은 생각보다 더 유용하다. 예를 들어, 이름 열은 T의 모든 값에 대해 고유 여부를 테스트하려면이 쿼리를 고려 :
SELECT 1 AS result FROM T HAVING COUNT( DISTINCT name ) = COUNT( name );
단지 두 가지 결과가 있습니다 HAVING 절은 다음 값 1을 포함하는 단일 행 수와 결과에 해당하는 경우, 그렇지 않으면 결과는 공백으로 설정됩니다.
-
==============================
4.WHERE 키워드 집계 함수와 함께 사용할 수 없으므로 HAVING 절은 SQL에 추가되었습니다.
WHERE 키워드 집계 함수와 함께 사용할 수 없으므로 HAVING 절은 SQL에 추가되었습니다.
자세한 내용은이 W3Schools의 링크를 확인하세요
통사론:
SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name HAVING aggregate_function(column_name) operator value
이와 같은 쿼리 :
SELECT column_name, COUNT( column_name ) AS column_name_tally FROM table_name WHERE column_name < 3 GROUP BY column_name HAVING COUNT( column_name ) >= 3;
... 파생 테이블을 이용하여 (상기 HAVING 생략)과 같이 다시 쓸 수있다 :
SELECT column_name, column_name_tally FROM ( SELECT column_name, COUNT(column_name) AS column_name_tally FROM table_name WHERE column_name < 3 GROUP BY column_name ) pointless_range_variable_required_here WHERE column_name_tally >= 3;
-
==============================
5.둘 사이의 차이는 GROUP BY 절의 관계에있다 :
둘 사이의 차이는 GROUP BY 절의 관계에있다 :
참조
-
==============================
6.당신이 GROUP BY로 집계 등을 사용하는 경우에 사용되는 HAVING.
당신이 GROUP BY로 집계 등을 사용하는 경우에 사용되는 HAVING.
SELECT edc_country, COUNT(*) FROM Ed_Centers GROUP BY edc_country HAVING COUNT(*) > 1 ORDER BY edc_country;
-
==============================
7.SQL WHERE 의해 리턴 된 세트에 대한 제한으로서 적용되고 이 필터 결과 집합에 SQL의 내장에 따라서 설정 oeprations 및 인덱스와 가장 빠른 방법을 사용합니다. 항상 WHERE 가능한 사용합니다.
SQL WHERE 의해 리턴 된 세트에 대한 제한으로서 적용되고 이 필터 결과 집합에 SQL의 내장에 따라서 설정 oeprations 및 인덱스와 가장 빠른 방법을 사용합니다. 항상 WHERE 가능한 사용합니다.
있는 것은 일부 집계 필터가 필요합니다. SQL 조립, 검색, 결과를 분류 한 후 쿼리를 필터링합니다. 따라서 훨씬 느린 WHERE보다 그것을 필요로하는 상황을 제외하고 피해야한다.
SQL Server를 사용하면 WHERE 훨씬 더 빨리 될 경우에도 HAVING 사용하여 도망하게됩니다. 하지 마.
-
==============================
8.WHERE 절은 집계 함수가 작동하지 않습니다 의미 :이처럼 사용해서는 안 보너스 : 테이블 이름
WHERE 절은 집계 함수가 작동하지 않습니다 의미 :이처럼 사용해서는 안 보너스 : 테이블 이름
SELECT name FROM bonus GROUP BY name WHERE sum(salary) > 200
여기 대신 WHERE 절을 사용하면 HAVING 사용해야합니다 ..
절, GROUP BY 절을 사용하지 않고 단지 WHERE 절로 작동
SELECT name FROM bonus GROUP BY name HAVING sum(salary) > 200
-
==============================
9.차이 B / WHERE와 HAVING 절 w :
차이 B / WHERE와 HAVING 절 w :
항을 갖는 연속 동작에 사용되는 컬럼 조작에 사용된다 가짐, 여기서와의 주요 차이점.
왜 우리는 HAVING 절 필요?
우리가 알다시피 우리가 WHERE 절에 집계 함수를 사용할 수 있도록 집계 함수에만 열을 수행 할 수 있습니다. 따라서, 우리는 HAVING 절에 집계 함수를 사용합니다.
-
==============================
10.GROUP BY를 사용하지 않을 경우, WHERE와 HAVING 절은 본질적으로 동일합니다.
GROUP BY를 사용하지 않을 경우, WHERE와 HAVING 절은 본질적으로 동일합니다.
그러나, GROUP BY를 사용한다 :
여기에서 자원
-
==============================
11.그것을 생각하는 한 가지 방법은 HAVING 절은 where 절에 추가 필터 것입니다.
그것을 생각하는 한 가지 방법은 HAVING 절은 where 절에 추가 필터 것입니다.
절은 결과에서 필터 기록을 사용되는. 어떤 그룹이되기 전에 필터가 발생합니다. HAVING 절은 그룹에서 필터 값을 사용
-
==============================
12.집계 쿼리에서 집계 중간 결과 집합이 생성되기 전에 평가 WHERE 절 술어 (있는 쿼리 집합 기능이 사용되는 경우),
집계 쿼리에서 집계 중간 결과 집합이 생성되기 전에 평가 WHERE 절 술어 (있는 쿼리 집합 기능이 사용되는 경우),
이 생성 된 후에 HAVING 절에서 술어 집계 결과 집합에 적용됩니다. 즉 집계 값에 술어 조건이되지 Where 절에, HAVING 절에 배치해야하는 이유, 그리고 당신이 HAVING 절에 SELECT 절에 정의 된 별칭을 사용할 수있는 이유는,하지만 WHERE 절을한다.
-
==============================
13.나는 문제가 있었고 및 HAVING의 또 다른 차이점을 발견했다. 이 인덱스 컬럼에 같은 방식으로 행동하지 않습니다.
나는 문제가 있었고 및 HAVING의 또 다른 차이점을 발견했다. 이 인덱스 컬럼에 같은 방식으로 행동하지 않습니다.
my_indexed_row는 = WHERE 123 행을 표시하고 자동으로 다른 인덱스 행에 "주문 ASC"를 수행합니다.
가장 오래된 "삽입"행의 최신 하나, 어떤 순서로 my_indexed_row = 123 개 쇼의 모든 것을 가졌어요.
-
==============================
14.여기에서.
여기에서.
WHERE 절에 반대 데이터베이스 행에 적용되는
-
==============================
15.프로젝트에서 작업하는 동안,이 또한 내 질문이었다. 위에서 언급 한 바와 같이, 질의 결과에 HAVING 검사 조건이 이미 발견했다. 그러나 쿼리 실행되는 동안 상태를 확인하기 위해입니다.
프로젝트에서 작업하는 동안,이 또한 내 질문이었다. 위에서 언급 한 바와 같이, 질의 결과에 HAVING 검사 조건이 이미 발견했다. 그러나 쿼리 실행되는 동안 상태를 확인하기 위해입니다.
내가 이것을 설명하기 위해 예를 들어 보겠습니다. 이 같은 데이터베이스 테이블이 있다고 가정.
다음 행이 테이블에, 가정 :
이제, 우리는 사용자와 그 합 (매일 소득) 합계 (일 수입)> (100)을 얻으려면
우리가 작성하는 경우 :
이 오류 일 것이다. 올바른 쿼리는 다음과 같습니다
-
==============================
16.절 HAVING 절 쿼리 결과 세트의 집합 함수의 결과를 필터링하기 위해 사용될 수있는 반면,베이스 테이블의 값을 비교를 위해 사용되는 경우 여기를 클릭!
절 HAVING 절 쿼리 결과 세트의 집합 함수의 결과를 필터링하기 위해 사용될 수있는 반면,베이스 테이블의 값을 비교를 위해 사용되는 경우 여기를 클릭!
-
==============================
17.GROUP BY를 사용하지 않을 경우, WHERE와 HAVING 절은 본질적으로 동일합니다.
GROUP BY를 사용하지 않을 경우, WHERE와 HAVING 절은 본질적으로 동일합니다.
그러나, GROUP BY를 사용한다 :
-
==============================
18.나는 집계 함수의 결과에 따라 쿼리를 제약하기위한 HAVING 사용합니다. 예를 들면 SOMETHING 갖는 카운트 (문제)> 0으로 blahblahblah 군 *을 선택
나는 집계 함수의 결과에 따라 쿼리를 제약하기위한 HAVING 사용합니다. 예를 들면 SOMETHING 갖는 카운트 (문제)> 0으로 blahblahblah 군 *을 선택
-
==============================
19.그것은 "갖는"의 대상이 그룹 반면의 대상 "은 여기서"행 단지 것일 수있다. 암 I 오른쪽?
그것은 "갖는"의 대상이 그룹 반면의 대상 "은 여기서"행 단지 것일 수있다. 암 I 오른쪽?
from https://stackoverflow.com/questions/287474/what-is-the-difference-between-having-and-where-in-sql by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 사이베이스는 : 설정하는 것이 가능하다 @@ 오류 (0) | 2020.07.18 |
---|---|
[SQL] 일반적인 열 두 dataframes 가입 (0) | 2020.07.18 |
[SQL] 어떻게 오라클의 테이블에 별칭을 줄 수 있습니까? (0) | 2020.07.18 |
[SQL] AddWithValue DBTYPE 쿼리가 느리게 실행하는 원인없이 (0) | 2020.07.18 |
[SQL] 히스토그램 데이터의 백분위 (0) | 2020.07.18 |