수색…


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는 '가상 테이블'의 약자이며 쿼리가 처리 될 때 다양한 데이터가 생성되는 방법을 보여줍니다

  1. FROM : FROM 절의 처음 두 테이블간에 직교 좌표 (교차 결합)가 수행되고 결과적으로 가상 테이블 VT1이 생성됩니다.

  2. ON : ON 필터가 VT1에 적용됩니다. TRUE 인 행만 VT2에 삽입됩니다.

  3. OUTER (조인) : OUTER JOIN이 지정되면 (CROSS JOIN 또는 INNER JOIN과 반대), 일치하지 않는 테이블 또는 테이블의 행이 외부 행으로 VT2의 행에 추가되고, VT3. 세 개 이상의 테이블이 FROM 절에 나타나면 모든 테이블이 처리 될 때까지 마지막 조인의 결과와 FROM 절의 다음 테이블 사이에 1 - 3 단계가 반복적으로 적용됩니다.

  4. WHERE 필터는 VT3에 적용됩니다. TRUE 인 행만 VT4에 삽입됩니다.

  5. GROUP BY : VT4의 행은 GROUP BY 절에 지정된 열 목록을 기반으로 그룹화됩니다. VT5가 생성됩니다.

  6. 큐브 | ROLLUP : 수퍼 그룹 (그룹 그룹)이 VT5의 행에 추가되어 VT6을 생성합니다.

  7. HAVING : HAVING 필터가 VT6에 적용됩니다. TRUE 인 그룹 만 VT7에 삽입됩니다.

  8. 선택 : SELECT 목록이 처리되어 VT8을 생성합니다.

  9. DISTINCT : 중복 행이 VT8에서 제거됩니다. VT9가 생성됩니다.

  10. ORDER BY : VT9의 행은 ORDER BY 절에 지정된 열 목록에 따라 정렬됩니다. 커서가 생성됩니다 (VC10).

  11. TOP : VC10의 시작부터 지정된 수 또는 백분율 행이 선택됩니다. 테이블 VT11이 생성되어 호출자에게 반환됩니다. LIMIT는 Postgres 및 Netezza와 같은 일부 SQL 언어에서 TOP와 동일한 기능을 수행합니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow