ON / WHERE에서 조건문 적용
여기에서는 논리적 쿼리 처리 단계에 대해 설명했습니다.
참조 : Microsoft® SQL Server ™ 2005 T-SQL 쿼리
게시자 : Microsoft Press
Pub 날짜 : 2006 년 3 월 7 일
ISBN-10
인쇄 : 0-7356-2313-9 ISBN-13 인쇄 : 978-0-7356-2313-2
페이지 : 640
Microsoft® SQL Server ™ 2005 T-SQL 쿼리 내부
(8) SELECT (9) DISTINCT (11) TOP <top_specification> <select_list>
(1) FROM <left_table>
(3) <join_type> JOIN <right_table>
(2) ON <join_condition>
(4) WHERE <where_condition>
(5) GROUP BY <group_by_list>
(6) WITH {CUBE | ROLLUP}
(7) HAVING <having_condition>
(10) ORDER BY <order_by_list>
다른 프로그래밍 언어와 다른 SQL의 첫 번째 눈에 띄는 부분은 코드가 처리되는 순서입니다. 대부분의 프로그래밍 언어에서 코드는 작성된 순서대로 처리됩니다. SQL에서 처리되는 첫 번째 절은 FROM 절이며 가장 먼저 나타나는 SELECT 절은 거의 마지막에 처리됩니다.
각 단계는 다음 단계의 입력으로 사용되는 가상 테이블을 생성합니다. 이 가상 테이블은 호출자 (클라이언트 응용 프로그램 또는 외부 쿼리)에서 사용할 수 없습니다. 마지막 단계에서 생성 된 테이블 만 호출자에게 리턴됩니다. 쿼리에 특정 절을 지정하지 않으면 해당 단계를 건너 뜁니다.
논리적 쿼리 처리 단계에 대한 간략한 설명
단계에 대한 설명이 현재 이해가되지 않는 경우 너무 걱정하지 마십시오. 이들은 참조로 제공됩니다. 시나리오 예제 다음에 나오는 섹션에서는 단계를 훨씬 자세히 설명합니다.
FROM : FROM 절의 처음 두 테이블간에 카티 전 곱 (크로스 조인)이 수행되어 가상 테이블 VT1이 생성됩니다.
ON : ON 필터가 VT1에 적용됩니다. <join_condition>
TRUE 인 행만 VT2에 삽입됩니다.
OUTER (join) : OUTER JOIN이 지정되면 (CROSS JOIN 또는 INNER JOIN과 대조적으로) 일치하지 않은 보존 된 테이블 또는 테이블의 행이 VT2의 행에 외부 행으로 추가되어 생성됩니다. VT3. FROM 절에 두 개 이상의 테이블이 나타나면 모든 테이블이 처리 될 때까지 FROM 절의 마지막 조인 결과와 다음 테이블 사이에 1 단계부터 3 단계까지 반복적으로 적용됩니다.
WHERE : WHERE 필터는 VT3에 적용됩니다. <where_condition>
TRUE 인 행만 VT4에 삽입됩니다.
GROUP BY : VT4의 행은 GROUP BY 절에 지정된 열 목록을 기준으로 그룹으로 정렬됩니다. VT5가 생성됩니다.
큐브 | 롤업 : 수퍼 그룹 (그룹 그룹)이 VT5의 행에 추가되어 VT6을 생성합니다.
HAVING : HAVING 필터가 VT6에 적용됩니다. <having_condition>
TRUE 인 그룹 만 VT7에 삽입됩니다.
SELECT : SELECT 목록이 처리되어 VT8이 생성됩니다.
DISTINCT : VT8에서 중복 행이 제거되었습니다. VT9가 생성됩니다.
ORDER BY : VT9의 행은 ORDER BY 절에 지정된 열 목록에 따라 정렬됩니다. 커서가 생성됩니다 (VC10).
TOP : 지정된 행 수 또는 백분율이 VC10의 시작부터 선택됩니다. 테이블 VT11이 생성되어 호출자에게 리턴됩니다.
따라서 (INNER JOIN) ON은 WHERE 절을 적용하기 전에 데이터를 필터링합니다 (VT의 데이터 수는 여기에서 줄어 듭니다). 후속 조인 조건은 필터링 된 데이터로 실행되어 성능이 향상됩니다. 그런 다음 WHERE 조건 만 필터 조건을 적용합니다.
(ON / WHERE에 조건문을 적용해도 몇 가지 경우에 큰 차이는 없습니다. 이는 조인 한 테이블 수와 각 조인 테이블에서 사용 가능한 행 수에 따라 다릅니다)