SQL을 다른 프로그래밍 언어와 구별하는 가장 확실한 특징은 코드가 처리되는 순서입니다. 대부분의 프로그래밍 언어에서는 코딩 순서대로 코드가 처리되지만, SQL 언어에서는 가장 먼저 처리되는 절이 FROM 절이고, SELECT 문이 먼저 나타나더라도 거의 항상 마지막에 처리됩니다.
각 단계는 다음 단계의 입력으로 사용되는 가상 테이블을 생성합니다. 이러한 가상 테이블은 호출자(클라이언트 애플리케이션 또는 외부 쿼리)가 사용할 수 없습니다. 마지막 단계에서 생성된 테이블만 호출자에게 반환됩니다. 쿼리에 절이 지정되지 않은 경우 해당 단계를 건너뜁니다. 다음은 SQL Server 2000 및 SQL Server 2005에 적용되는 다양한 논리적 단계에 대한 간략한 설명입니다.
Actipro CodeHighlighter(프리웨어)에서 제작한 코드 강조 표시
-->(8)SELECT (9)DISTINCT (11)
(1) FROM [left_table]
(3 )
(2) ON
(4) WHERE
(5) GROUP BY
(6) WITH
(7) HAVING
(10)ORDER BY
논리적 쿼리 처리 단계 소개(실행 순서)
FROM: FROM의 처음 두 개에 대해 절 테이블은 카티션 곱(교차 조인)을 수행하여 가상 테이블 VT1을 생성합니다
ON: VT1에 ON 필터를 적용합니다.
OUTER(JOIN): OUTER JOIN(CROSS JOIN 또는 (INNER JOIN)에 상대적)이 지정된 경우 보존 테이블: 왼쪽 외부 조인은 왼쪽 테이블을 예약된 테이블로 표시하고 오른쪽 외부 조인은 오른쪽 테이블을 예약된 테이블로 표시합니다. 완전 외부 조인(두 테이블을 모두 유지된 테이블로 표시)에서 일치하지 않는 행은 VT2에 외부 행으로 추가되어 FROM 절에 두 개 이상의 테이블이 포함된 경우 이전 조인에서 생성된 결과 테이블입니다. 모든 테이블이 처리될 때까지 1~3단계를 반복합니다.
WHERE: WHERE 필터를 VT3에 적용합니다.
GROUP BY: GROUP을 누릅니다. BY 절의 열 목록은 VT4의 행을 그룹화하여 VT5를 생성합니다. CUBE|ROLLUP: VT5에 슈퍼 그룹(Suppergroups)을 삽입하여 VT6을 생성합니다. HAVING:
SELECT: SELECT 목록을 처리하여 VT8을 생성합니다.
DISTINCT: VT8에서 중복 행을 제거하여 VT9를 생성합니다.
ORDER BY: ORDER BY 절에 따라 VT9의 행을 정렬합니다. 커서(VC10) 생성
TOP: VC10의 시작 부분에서 지정된 수 또는 행의 비율을 선택하고 테이블 VT11을 생성한 후 호출자에게 반환
참고: 10단계, 열 목록이 정렬됩니다. 이전 단계에서 반환된 행을 반환하고 커서 VC10을 반환합니다. 이 단계는 SELECT 목록에서 열 별칭을 사용할 수 있는 첫 번째이자 유일한 단계입니다. 대신 유효한 테이블을 반환하지 않는다는 점에서 다른 단계와 다릅니다. SQL은 집합 이론을 기반으로 하며, 컬렉션은 행을 미리 정렬하지 않고 단지 멤버의 논리적 컬렉션일 뿐이며, 테이블을 정렬하는 쿼리는 특정 값으로 구성된 데이터를 포함하는 개체를 반환할 수 있습니다. ANSI에서는 이 개체를 커서라고 부릅니다. 이 단계는 테이블을 반환하지 않지만(커서를 반환함) 테이블 생성 표현식을 사용할 수 없습니다. 테이블 표현식에는 뷰, 인라인 테이블 반환 함수, 하위 쿼리, 파생 테이블 및 공유 표현식이 포함됩니다. 예를 들어 다음 쿼리는 유효하지 않으며 생성됩니다. 오류:
select *
from(select orderid,customerid fromorder order by orderid)
as d
아래 보기에서도 오류가 발생합니다.
create view my_view
as
select *
from 주문
order by orderid
SQL에서는 테이블 표현식에서 ORDER BY 절이 포함된 쿼리가 허용되지 않지만, T-SQL에서는 예외가 있습니다(TOP 옵션 적용).
따라서 테이블의 행에 대해 특정 순서를 가정하지 마세요. 즉, 행 순서를 지정하려는 것이 확실하지 않은 경우 ORDER BY 절을 지정하지 마십시오. 정렬에는 비용이 발생하며 SQL Server는 정렬된 인덱스 스캔을 수행하거나 정렬 연산자를 사용해야 합니다.
위 내용은 SQL 실행 프로세스 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!