SQL Server에서 Group By, having 및 Where 절의 실행 순서는 무엇입니까?
WHERE 절과 함께 GROUP BY 및 HAVING을 사용할 때 SQL 쿼리의 실행 순서와 혼동됩니다. 어느 것이 먼저 실행됩니까? 순서는 무엇입니까?
순서대로 :
FROM & JOIN은 행을 결정하고 필터링합니다.
WHERE 행 에 대한 추가 필터
GROUP BY 는 해당 행을 그룹으로 결합합니다.
HAVING 필터 그룹
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
따라서 위 목록에서 다음과 같은 실행 순서를 쉽게 이해할 수 있습니다 GROUP BY, HAVING and WHERE
.
1. WHERE
2. GROUP BY
3. HAVING
WHERE가 첫 번째이면 쿼리 결과를 그룹화하고 마지막으로 HAVING-clause를 사용하여 그룹화 된 결과를 필터링합니다. 이것은 "논리적"순서입니다. 엔진에서 기술적으로 어떻게 구현되는지 모르겠습니다.
Matthias가 말한 것처럼 엔진에서 구현 된 것 같습니다. WHERE, GROUP BY, HAVING
전체 시퀀스를 나열하는 참조를 온라인으로 찾으려고했지만 (즉, "SELECT"가 맨 아래에 있음) 찾을 수 없습니다. 얼마 전에 읽은 "Inside Microsoft SQL Server 2005"책, Solid Quality Learning에 자세히 설명되어 있습니다.
편집 : 링크를 찾았습니다 : http://blogs.x2line.com/al/archive/2007/06/30/3187.aspx
구현하려는 경우 수행해야 할 작업에 대해 생각하십시오.
- WHERE : JOIN 작업을 실행해야합니다.
- GROUP BY : 조인 결과를 "그룹화"하려면 Group by를 지정합니다. 그런 다음 WHERE 사용 후 JOIN 작업 후해야합니다.
- HAVING : HAVING은 GROUP BY 표현식에서 말하는 것처럼 필터링하기위한 것입니다. 그런 다음 GROUP BY 이후에 실행됩니다.
순서는 WHERE, GROUP BY 및 HAVING입니다.
아래 순서로
- 시작 및 가입
- 어디
- 그룹화
- HAVING
- 고르다
- 주문
- 한도
Oracle 12c에서는 아래 순서로 코드를 실행할 수 있습니다.
Where
Group By
Having
또는
Where
Having
Group by
조항을 갖는 것은 그룹 별 조항 이전 / 앞에 올 수 있습니다.
예 : select * FROM test_std; ROLL_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 개 행이 선택되었습니다.
TEACH에 의해 count ( )> 1 그룹을 갖는 test_std 에서 teach, count ( ) count를 선택하십시오 .
티치 카운트
랑거 2 유언 4
SELECT는
FROM
조인
WHERE
하여 그룹을
HAVING
ORDER BY를
'Nice programing' 카테고리의 다른 글
Oracle 데이터베이스에 허용되는 최대 연결 수를 확인하는 방법은 무엇입니까? (0) | 2020.10.04 |
---|---|
C ++의 순환 이동 (회전) 작업에 대한 모범 사례 (0) | 2020.10.04 |
JSON 문자열을 이스케이프하는 방법? (0) | 2020.10.04 |
코드의 레이아웃 방향 (0) | 2020.10.04 |
동적 높이가있는 행이있는보기 기반 NSTableView (0) | 2020.10.04 |