복붙노트

[SQL] SQL에서 HAVING 및 WHERE의 차이점은 무엇입니까?

SQL

SQL에서 HAVING 및 WHERE의 차이점은 무엇입니까?

SQL SELECT 문에서 HAVING 및 WHERE의 차이점은 무엇입니까?

편집 :이 링크 정보의 키 비트를 포함 나는 올바른 하나 스티븐의 답변을 표시 한 :

내가 본했던 상황은 WHERE에 GROUP BY를 내 혼란이 시작된 곳이다하지 않았다. 물론, 당신이 알고있을 때까지 당신은 질문을 지정할 수 없습니다.

해결법

  1. ==============================

    1.출처

    출처

  2. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    5.둘 사이의 차이는 GROUP BY 절의 관계에있다 :

    둘 사이의 차이는 GROUP BY 절의 관계에있다 :

    참조

  6. ==============================

    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. ==============================

    7.SQL WHERE 의해 리턴 된 세트에 대한 제한으로서 적용되고 이 필터 결과 집합에 SQL의 내장에 따라서 설정 oeprations 및 인덱스와 가장 빠른 방법을 사용합니다. 항상 WHERE 가능한 사용합니다.

    SQL WHERE 의해 리턴 된 세트에 대한 제한으로서 적용되고 이 필터 결과 집합에 SQL의 내장에 따라서 설정 oeprations 및 인덱스와 가장 빠른 방법을 사용합니다. 항상 WHERE 가능한 사용합니다.

    있는 것은 일부 집계 필터가 필요합니다. SQL 조립, 검색, 결과를 분류 한 후 쿼리를 필터링합니다. 따라서 훨씬 느린 WHERE보다 그것을 필요로하는 상황을 제외하고 피해야한다.

    SQL Server를 사용하면 WHERE 훨씬 더 빨리 될 경우에도 HAVING 사용하여 도망하게됩니다. 하지 마.

  8. ==============================

    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. ==============================

    9.차이 B / WHERE와 HAVING 절 w :

    차이 B / WHERE와 HAVING 절 w :

    항을 갖는 연속 동작에 사용되는 컬럼 조작에 사용된다 가짐, 여기서와의 주요 차이점.

    왜 우리는 HAVING 절 필요?

    우리가 알다시피 우리가 WHERE 절에 집계 함수를 사용할 수 있도록 집계 함수에만 열을 수행 할 수 있습니다. 따라서, 우리는 HAVING 절에 집계 함수를 사용합니다.

  10. ==============================

    10.GROUP BY를 사용하지 않을 경우, WHERE와 HAVING 절은 본질적으로 동일합니다.

    GROUP BY를 사용하지 않을 경우, WHERE와 HAVING 절은 본질적으로 동일합니다.

    그러나, GROUP BY를 사용한다 :

    여기에서 자원

  11. ==============================

    11.그것을 생각하는 한 가지 방법은 HAVING 절은 where 절에 추가 필터 것입니다.

    그것을 생각하는 한 가지 방법은 HAVING 절은 where 절에 추가 필터 것입니다.

    절은 결과에서 필터 기록을 사용되는. 어떤 그룹이되기 전에 필터가 발생합니다. HAVING 절은 그룹에서 필터 값을 사용

  12. ==============================

    12.집계 쿼리에서 집계 중간 결과 집합이 생성되기 전에 평가 WHERE 절 술어 (있는 쿼리 집합 기능이 사용되는 경우),

    집계 쿼리에서 집계 중간 결과 집합이 생성되기 전에 평가 WHERE 절 술어 (있는 쿼리 집합 기능이 사용되는 경우),

    이 생성 된 후에 HAVING 절에서 술어 집계 결과 집합에 적용됩니다. 즉 집계 값에 술어 조건이되지 Where 절에, HAVING 절에 배치해야하는 이유, 그리고 당신이 HAVING 절에 SELECT 절에 정의 된 별칭을 사용할 수있는 이유는,하지만 WHERE 절을한다.

  13. ==============================

    13.나는 문제가 있었고 및 HAVING의 또 다른 차이점을 발견했다. 이 인덱스 컬럼에 같은 방식으로 행동하지 않습니다.

    나는 문제가 있었고 및 HAVING의 또 다른 차이점을 발견했다. 이 인덱스 컬럼에 같은 방식으로 행동하지 않습니다.

    my_indexed_row는 = WHERE 123 행을 표시하고 자동으로 다른 인덱스 행에 "주문 ASC"를 수행합니다.

    가장 오래된 "삽입"행의 최신 하나, 어떤 순서로 my_indexed_row = 123 개 쇼의 모든 것을 가졌어요.

  14. ==============================

    14.여기에서.

    여기에서.

    WHERE 절에 반대 데이터베이스 행에 적용되는

  15. ==============================

    15.프로젝트에서 작업하는 동안,이 또한 내 질문이었다. 위에서 언급 한 바와 같이, 질의 결과에 HAVING 검사 조건이 이미 발견했다. 그러나 쿼리 실행되는 동안 상태를 확인하기 위해입니다.

    프로젝트에서 작업하는 동안,이 또한 내 질문이었다. 위에서 언급 한 바와 같이, 질의 결과에 HAVING 검사 조건이 이미 발견했다. 그러나 쿼리 실행되는 동안 상태를 확인하기 위해입니다.

    내가 이것을 설명하기 위해 예를 들어 보겠습니다. 이 같은 데이터베이스 테이블이 있다고 가정.

    다음 행이 테이블에, 가정 :

    이제, 우리는 사용자와 그 합 (매일 소득) 합계 (일 수입)> (100)을 얻으려면

    우리가 작성하는 경우 :

    이 오류 일 것이다. 올바른 쿼리는 다음과 같습니다

  16. ==============================

    16.절 HAVING 절 쿼리 결과 세트의 집합 함수의 결과를 필터링하기 위해 사용될 수있는 반면,베이스 테이블의 값을 비교를 위해 사용되는 경우 여기를 클릭!

    절 HAVING 절 쿼리 결과 세트의 집합 함수의 결과를 필터링하기 위해 사용될 수있는 반면,베이스 테이블의 값을 비교를 위해 사용되는 경우 여기를 클릭!

  17. ==============================

    17.GROUP BY를 사용하지 않을 경우, WHERE와 HAVING 절은 본질적으로 동일합니다.

    GROUP BY를 사용하지 않을 경우, WHERE와 HAVING 절은 본질적으로 동일합니다.

    그러나, GROUP BY를 사용한다 :

  18. ==============================

    18.나는 집계 함수의 결과에 따라 쿼리를 제약하기위한 HAVING 사용합니다. 예를 들면 SOMETHING 갖는 카운트 (문제)> 0으로 blahblahblah 군 *을 선택

    나는 집계 함수의 결과에 따라 쿼리를 제약하기위한 HAVING 사용합니다. 예를 들면 SOMETHING 갖는 카운트 (문제)> 0으로 blahblahblah 군 *을 선택

  19. ==============================

    19.그것은 "갖는"의 대상이 그룹 반면의 대상 "은 여기서"행 단지 것일 수있다. 암 I 오른쪽?

    그것은 "갖는"의 대상이 그룹 반면의 대상 "은 여기서"행 단지 것일 수있다. 암 I 오른쪽?

  20. from https://stackoverflow.com/questions/287474/what-is-the-difference-between-having-and-where-in-sql by cc-by-sa and MIT license