WHERE 절과 함께 GROUP BY 및 HAVING을 사용할 때 SQL 쿼리의 실행 순서와 혼동됩니다. 어느 것이 먼저 실행됩니까? 순서는 무엇입니까?
답변:
순서대로 :
FROM & JOIN은 행을 결정하고 필터링합니다.
WHERE 행 에 대한 추가 필터
GROUP BY 는 해당 행을 그룹으로 결합합니다.
HAVING 필터 그룹
ORDER BY 는 나머지 행 / 그룹을 정렬합니다.
LIMIT 필터는 나머지 행 / 그룹에 있습니다.
SET SHOWPLAN_ALL ON
다음은 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
SELECT * FROM table1 INNER JOIN table2 ON col = col2 WHERE table1.col = @val여기 ON은 조인 후에 나오고 선택이 먼저 오는데 설명이 있습니까?
FROM먼저 평가 한 다음 계속해서 평가 ON합니다.
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, GROUP BY 및 HAVING입니다.
조항이있는 경우 그룹 별 조항 이전 / 앞에 올 수 있습니다.
예 : 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 개 행이 선택되었습니다.
select teach, count ( ) count ( )가있는 test_std에서 count (TEACH에 의해 )> 1 그룹을 .
티치 카운트
랑거 2 유언 4
이것은 쿼리 실행의 SQL 순서입니다.
이 기사의 예제를 통해 실행 순서를 확인할 수 있습니다 .
아래의 질문이 도움이 될 수 있으며이 기사 에서 직접 얻을 수 있습니다 .
- GROUP BY-> WHERE 제약 조건이 적용된 후 나머지 행은 GROUP BY 절에 지정된 열의 공통 값을 기반으로 그룹화됩니다. 그룹화의 결과로 해당 열에 고유 한 값이있는만큼의 행만 있습니다. 암시 적으로 이것은 쿼리에 집계 함수가있는 경우에만 이것을 사용해야 함을 의미합니다.
- HAVING-> 쿼리에 GROUP BY 절이있는 경우 HAVING 절의 제약 조건이 그룹화 된 행에 적용되고 제약 조건을 충족하지 않는 그룹화 된 행은 삭제됩니다. WHERE 절과 마찬가지로 별칭도 대부분의 데이터베이스에서이 단계에서 액세스 할 수 없습니다.
참조 :-