source

SQL Server의 Group By, Having 및 Where 절 실행 시퀀스

factcode 2023. 4. 14. 22:12
반응형

SQL Server의 Group By, Having 및 Where 절 실행 시퀀스

SQL 쿼리의 실행 시퀀스와 혼동되어 있을 뿐입니다.GROUP BY그리고.HAVING와 함께WHERE절을 클릭합니다.어느 쪽이 먼저 처형됩니까?순서가 어떻게 되죠?

순서:

FROM 및 JOIN에 의해 행이 결정 및 필터링
에 더 많은 필터가 있는 위치
GROUP BY는 이러한 행을 그룹으로 결합합니다.
필터 그룹 보유
ORDER BY 나머지 행/그룹 정렬
나머지 행/그룹의 LIMIT 필터

다음은 sql server의 전체 시퀀스입니다.

1.  FROM
2.  ON
3.  JOIN
4.  WHERE
5.  GROUP BY
6.  WITH CUBE or WITH ROLLUP
7.  HAVING
8.  SELECT
9.  DISTINCT
10. ORDER BY
11. TOP

따라서 위의 목록에서 다음 실행 시퀀스를 쉽게 이해할 수 있습니다.

1.  WHERE
2.  GROUP BY
3.  HAVING

자세한 내용은 Microsoft에서 확인하시기 바랍니다.

상세설명

WHERE는 처음에 쿼리 결과를 그룹화하고 그룹화된 결과를 필터링하기 위해 마지막 HAVING-Clause가 사용됩니다.이는 "논리적인" 순서이며, 기술적으로 엔진에 어떻게 구현되는지 알 수 없습니다.

이것은 쿼리의 SQL 실행 순서입니다.

여기에 이미지 설명 입력

실행순서는 이 기사의 예시와 함께 확인할 수 있습니다.

아래의 질문은 도움이 될 수 있으며 이 기사에서 직접 인용할 수 있습니다.

  1. GROUP BY --> WHERE 제약조건 적용 후의 나머지 행은 GROUP BY 절에서 지정된 컬럼의 공통값을 기준으로 그룹화 됩니다.그룹화의 결과로 해당 열에 고유한 값이 있는 행의 수만큼만 표시됩니다.이는 쿼리에 집약함수가 있는 경우에만 이 기능을 사용해야 함을 의미합니다.
  1. HAVING --> 쿼리에 GROUP BY 절이 있는 경우 HAVING 절의 제약이 그룹화된 행에 적용되며 해당 제약 조건을 충족하지 않는 그룹화된 행은 폐기됩니다.WHERE 절과 마찬가지로 대부분의 데이터베이스에서는 이 단계에서 별칭에 액세스할 수 없습니다.

참고 자료:-

마티아스가 말한 것처럼 엔진에 구현된 것 같습니다: WHERE, GROUP BY, HADING

전체 시퀀스를 나열하는 참조를 온라인으로 찾으려고 했지만(즉, "SELECT"가 바로 하단에 표시됨) 찾을 수 없습니다.자세한 내용은 얼마 전에 읽은Solid Quality Learning의 "Inside Microsoft SQL Server 2005" 책에 기재되어 있습니다.

편집: http://blogs.x2line.com/al/archive/2007/06/30/3187.aspx 링크를 찾았습니다.

아래 순서

  1. 시작과 참여
  2. 어디에
  3. 그룹화 기준
  4. 하고 있다
  5. 선택한다.
  6. 주문자
  7. 제한.

Oracle 12c에서는 다음 중 하나의 순서로 코드를 실행할 수 있습니다.

Where
Group By
Having

또는

Where 
Having
Group by

실장하고 싶은 경우는, 무엇을 실시할 필요가 있는지를 생각해 주세요.

  • Where: JOIN 작업을 실행해야 합니다.
  • GROUP BY: 가입 시 결과를 "그룹화"할 그룹화 기준을 지정하면 가입 작업 후 WHERE 사용 후 결과를 그룹화해야 합니다.
  • HAVING: HADING은 GROUP BY 식에서 말하는 필터링을 위한 입니다.그런 다음 GROUP BY 뒤에 실행됩니다.

순서는 WHERE, GROUP BY, HIVE입니다.

절을 갖는 것은 절별 그룹보다 앞/앞에 있을 수 있다.

예: * FROM test_std; ROL_NO SNAME DOB TEACH를 선택합니다.


     1 John       27-AUG-18 Wills     
     2 Knit       27-AUG-18 Prestion  
     3 Perl       27-AUG-18 Wills     
     4 Ohrm       27-AUG-18 Woods     
     5 Smith      27-AUG-18 Charmy    
     6 Jony       27-AUG-18 Wills     
       Warner     20-NOV-18 Wills     
       Marsh      12-NOV-18 Langer    
       FINCH      18-OCT-18 Langer    

9개의 행이 선택되었습니다.

test_std에서 teach, count() count by TEACH의 1그룹을 선택합니다.

교원수


Langer 2 Wills 4

  • 선택한다.
  • 부터
  • 결합(내부, 왼쪽, 오른쪽, 전체 외부 결합)
  • 어디에
  • 그룹화 기준
  • 하고 있다
  • 주문자
  • 제한





GROUP By group

★★★★★★★★★★★★★★★★

언급URL : https://stackoverflow.com/questions/1130062/execution-sequence-of-group-by-having-and-where-clause-in-sql-server

반응형