SQL Server 조회 처리 의 각 단계(SQL 실행 순서)예제

4368 단어 SQL실행 순서
대수 프로 그래 밍 언어 에서 코드 는 인 코딩 순서에 따라 처리 되 지만 SQL 언어 에서 첫 번 째 로 처 리 된 절 은 FROM 절 입 니 다.SELECT 문 구 는 첫 번 째 로 나타 나 지만 거의 마지막 에 처 리 됩 니 다.모든 단계 에 가상 표 가 생 성 되 는데 이 가상 표 는 다음 단계 의 입력 으로 사용 된다.이 가상 테이블 은 호출 자(클 라 이언 트 응용 프로그램 이나 외부 조회)에 사용 할 수 없습니다.마지막 으로 생 성 된 시계 만 호출 자 에 게 되 돌려 줍 니 다.검색 에 어떤 절 을 지정 하지 않 으 면 해당 절 차 를 건 너 뜁 니 다.다음은 SQL server 2000 과 SQL Server 2005 에 적용 되 는 각 논리 적 절차 에 대한 간단 한 설명 입 니 다

(8)SELECT (9)DISTINCT  (11)<Top Num> <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>
논리 조회 처리 단계 소개 1.FROM:FROM 자구 의 앞 두 표 에 대해 피리 칼 적(Cartesian product)(교차 연결)을 실행 하고 가상 표 VT12.ON 생 성:VT1 에 대해 ON 선택 기 를 사용 합 니 다.오직 그것 만 이진짜 줄 을 위해 VT2 에 삽 입 됩 니 다.3.OUTER(JOIN):OUTER JOIN(CROSS JOIN 이나(INNER JOIN 에 비해)을 지정 하면 보존 표(preserved table:왼쪽 외부 연결 은 왼쪽 표를 보존 표 로 표시 하고 오른쪽 외부 연결 은 오른쪽 표를 보존 표 로 표시 하 며 완전히 외부 연결 은 두 표를 보존 표 로 표시 합 니 다)에서 일치 하 는 줄 을 찾 지 못 하면 VT2 에 외부 줄 로 추가 합 니 다.VT3 생 성.FROM 자구 에 두 개 이상 의 표 가 포함 되 어 있 으 면 이전 연결 생 성 된 결과 표 와 다음 표 에 대해 모든 표를 처리 할 때 까지 1 단계 부터 3 단계 까지 반복 적 으로 실행 합 니 다.4.WHERE:VT3 에 WHERE 필 터 를 적용 합 니 다.오직true 줄 에 만 VT 4.5.GROUP BY 가 삽 입 됩 니 다.GROUP BY 자구 의 열 목록 에 따라 VT4 줄 을 묶 고 VT 5.6.CUBE|ROLLUP 생 성:초 그룹(Suppergroups)을 VT5 에 삽입 하여 VT 6.7.HAVING 생 성:VT6 에 HAVING 선택 기 를 적용 합 니 다.오직true 인 그룹 만 VT 7.8.SELECT 에 삽 입 됩 니 다.SELECT 목록 을 처리 하고 각종 집적 함 수 를 처리 하 며 VT 8.9.DISTINCT:중 복 된 줄 을 VT8 에서 제거 하고 VT 9.10.ORDER BY:VT9 의 줄 을 ORDER BY 자구 의 열 목록 에 따라 정렬 하여 커서(VC 10)를 생 성 합 니 다.11.TOP:VC 10 의 시작 부분 에서 지 정 된 수량 이나 비례 의 줄 을 선택 하여 표 VT 11 을 생 성 합 니 다.호출 자 를 되 돌려 줍 니 다.주:10 단계,ORDER BY 자구 의 열 목록 에 따라 위로 돌아 오 는 줄 을 정렬 하고 커서 VC 10 을 되 돌려 줍 니 다.이 단 계 는 첫 번 째 이자 SELECT 목록 의 열 별명 을 사용 할 수 있 는 유일한 단계 입 니 다.이 단 계 는 다른 절차 와 달리 유효한 시 계 를 되 돌려 주지 않 고 커서 를 되 돌려 줍 니 다.SQL 은 집합 이론 에 기초 한 것 이다.집합 은 줄 의 순 서 를 미리 정렬 하지 않 습 니 다.구성원 의 논리 적 집합 일 뿐 구성원 의 순 서 는 중요 하지 않 습 니 다.표를 정렬 하 는 조 회 는 특정한 물리 적 순서 로 구 성 된 줄 을 포함 하여 대상 을 되 돌려 줄 수 있다.ANSI 는 이런 대상 을 커서 라 고 부른다.이 단 계 를 이해 하 는 것 은 SQL 을 정확하게 이해 하 는 기초 이다.이 단 계 는 표(커서)를 되 돌려 주지 않 기 때문에 ORDER BY 자구 의 조 회 를 표 표현 식 으로 사용 할 수 없습니다.표 표현 식 은 보기,내 연 표 값 함수,하위 조회,파생 표 와 공용 표현 식 을 포함한다.그 결 과 는 물리 적 기록 을 원 하 는 클 라 이언 트 프로그램 에 되 돌아 가 야 합 니 다.예 를 들 어 아래 파생 표 조회 가 잘못 되 었 고 오류 가 발생 했 습 니 다

select *
from(select orderid,customerid from orders order by orderid)
as d
아래 보기 도 오류 가 발생 할 수 있 습 니 다

create view my_view
as
select *
from orders
order by orderid
오류 정보:Msg 1033,Level 15,State 1,Procedure myviewasselect, Line 2The ORDER BY clause is invalid in views, inline functions, derived tables, subqueries,and common table expressions, unless TOP or FOR XML is also specified.       SQL 에 서 는 표 표현 식 에서 ORDER BY 자구 가 있 는 조 회 를 사용 할 수 없 으 며,T-SQL 에 서 는 예외 가 있 습 니 다(TOP 옵션 적용).따라서 표 의 줄 에 특정한 순 서 를 가설 하지 말 라 는 것 을 기억 해 야 한다.질서 정연 하 게 행 해 야 한다 고 확신 하지 않 으 면 ORDER BY 자 구 를 지정 하지 않 는 다 는 것 이다.정렬 은 비용 이 필요 합 니 다.SQL Server 는 질서 있 는 색인 스 캔 을 실행 하거나 정렬 실행 자 를 사용 해 야 합 니 다.SQL 코드 추천:행렬 전환

/* : (tb) :

74
83
93
74
84
94
( ):

---- ---- ---- ----
74   84   94
74   83   93
-------------------
*/
create table tb( varchar(10), varchar(10), int)
insert into tb values(' ' , ' ' , 74)
insert into tb values(' ' , ' ' , 83)
insert into tb values(' ' , ' ' , 93)
insert into tb values(' ' , ' ' , 74)
insert into tb values(' ' , ' ' , 84)
insert into tb values(' ' , ' ' , 94)
go
--SQL SERVER 2000 SQL, 、 、 。( )
select as ,
  max(case when ' ' then else 0 end) ,
  max(case when ' ' then else 0 end) ,
  max(case when ' ' then else 0 end)
from tb
group by

좋은 웹페이지 즐겨찾기