수색…
SQL에서 쿼리 처리의 논리적 순서
/*(8)*/ SELECT /*9*/ DISTINCT /*11*/ TOP
/*(1)*/ FROM
/*(3)*/ JOIN
/*(2)*/ ON
/*(4)*/ WHERE
/*(5)*/ GROUP BY
/*(6)*/ WITH {CUBE | ROLLUP}
/*(7)*/ HAVING
/*(10)*/ ORDER BY
/*(11)*/ LIMIT
쿼리가 처리되는 순서 및 각 섹션에 대한 설명입니다.
VT는 '가상 테이블'의 약자이며 쿼리가 처리 될 때 다양한 데이터가 생성되는 방법을 보여줍니다
FROM : FROM 절의 처음 두 테이블간에 직교 좌표 (교차 결합)가 수행되고 결과적으로 가상 테이블 VT1이 생성됩니다.
ON : ON 필터가 VT1에 적용됩니다. TRUE 인 행만 VT2에 삽입됩니다.
OUTER (조인) : OUTER JOIN이 지정되면 (CROSS JOIN 또는 INNER JOIN과 반대), 일치하지 않는 테이블 또는 테이블의 행이 외부 행으로 VT2의 행에 추가되고, VT3. 세 개 이상의 테이블이 FROM 절에 나타나면 모든 테이블이 처리 될 때까지 마지막 조인의 결과와 FROM 절의 다음 테이블 사이에 1 - 3 단계가 반복적으로 적용됩니다.
WHERE 필터는 VT3에 적용됩니다. TRUE 인 행만 VT4에 삽입됩니다.
GROUP BY : VT4의 행은 GROUP BY 절에 지정된 열 목록을 기반으로 그룹화됩니다. VT5가 생성됩니다.
큐브 | ROLLUP : 수퍼 그룹 (그룹 그룹)이 VT5의 행에 추가되어 VT6을 생성합니다.
HAVING : HAVING 필터가 VT6에 적용됩니다. TRUE 인 그룹 만 VT7에 삽입됩니다.
선택 : SELECT 목록이 처리되어 VT8을 생성합니다.
DISTINCT : 중복 행이 VT8에서 제거됩니다. VT9가 생성됩니다.
ORDER BY : VT9의 행은 ORDER BY 절에 지정된 열 목록에 따라 정렬됩니다. 커서가 생성됩니다 (VC10).
TOP : VC10의 시작부터 지정된 수 또는 백분율 행이 선택됩니다. 테이블 VT11이 생성되어 호출자에게 반환됩니다. LIMIT는 Postgres 및 Netezza와 같은 일부 SQL 언어에서 TOP와 동일한 기능을 수행합니다.