재 미 있 는 SQL 다 중 데이터 조합

2934 단어 SQL데이터 조합
구현 할 SQL 조 회 는 원본 입 니 다:

첫 번 째 표 에서 두 번 째 표 형식의 데 이 터 를 조회 해 야 합 니 다.인터넷 에서 조회 한 후에 아래 의 SQL 을 쓸 수 있 습 니 다
 
select * from userino

SELECT * FROM(
SELECT DISTINCT userpart
FROM userino
)A
OUTER APPLY(
SELECT
[usernames]= replace(replace(replace((SELECT username as value FROM userino N
WHERE userpart = A.userpart order by n.username asc FOR XML AUTO),'"/><N value="','/')
,'<N value="',''),'"/>','')
)N
OUTER APPLY(
SELECT
[username_cns]= replace(replace(replace((SELECT username_cn as value FROM userino M
WHERE userpart = A.userpart order by m.username asc FOR XML AUTO),'"/><M value="','/')
,'<M value="',''),'"/>','')

)M
SQL 을 분석 해 보 겠 습 니 다.모두 사용 한 점 은 OUTER APPLY,FOR XML AUTO 입 니 다.SQL Server 에 대해 깊이 연구 하지 않 았 기 때문에 OUTER APPLY 는 SQL 2005 에서 지원 하기 시작 한 조회 방법 으로 연결 조회 와 유사 하 게 두 개의 조회 결 과 를 연결 하 는 것 이다.그러나 특이 한 것 은 OUTER APPLY 를 사용 하면 Apply 뒤의 조회 에서 앞에서 얻 은 조회 결 과 를 사용 할 수 있다 는 것 이다.예 를 들 어
 
select * from
(select * from userino) A
cross join (select username from userino
where username = A.username )B

select * from
(select * from userino) A
join (select username from userino ) B on a.username = b.username

select * from
(select * from userino) A
OUTER APPLY (select username from userino
where username = A.username ) B
첫 번 째 SQL 은 분명히 틀 렸 습 니 다.두 가지 이유 가 있 습 니 다.1.Cross Join 은 원래 무조건 적 인 것 입 니 다.2.SQL Server 는 다음 과 같은 오류 가 발생 할 수 있 습 니 다.The multi-part identifier"A.username"could not be bound.조건 이 있 는 Join 조 회 는 원래 이렇게 쓰 여 있 지 않 습 니 다.두 번 째 SQL 같은 모습 으로 써 야 합 니 다.사실 이렇게 쓰 는 것 은 제3 조 SQL 에서 Outer apply 를 사용 하여 실현 하 는 효과 와 같 지만 Outer Apply 는 다음 과 같은 효 과 를 실현 할 수 있 습 니 다
 
select * from
(select * from userino) A
OUTER APPLY (select [value] = a.username+'test' ) B
이것 은 join 을 직접 사용 하 는 것 이 좀 번 거 로 울 것 같 습 니 다.위의 예 는 의미 가 없 을 수도 있 습 니 다.사실 SQL 2005 에서 Apply 연결 방법 을 제시 한 것 은 주로 연결 조회 에서 실 행 된 검색 어 를 사용 하기 위 한 것 이다.결 과 는'OUTER APPLY'를 제외 하고 SQL Server 에 CROSS APPLY 도 있다.그 차이 점 은 Null 값 의 처리 에 있어 FOR XML AUTO 는 주로 SQL 의 검색 결 과 를 XML 구문 으로 직접 되 돌려 주 는 데 사용 된다.For Xml 는 auto 외 에 RAW 와 EXPLICIT 도 있다.자세 한 내용 은'슈퍼 심 플:FOR XML AUTO 를 사용 하여 XML 출력 을 제어 합 니 다'가 글 에서 처음에 제시 한 SQL 문 은 위의 두 가지 특성 을 사 용 했 습 니 다.먼저 Outer Apply 를 사용 하여 userpart 를 사용 하여 그룹 을 나 누 는 것 과 유사 한 효 과 를 실현 하고 각 userpart 중의 user 를 각각 선별 한 다음 에 선별 한 결과 가 여러 줄 이기 때 문 입 니 다.그래서 for xml 를 사용 하여 여러 줄 의 데 이 터 를 xml 로 연결 하고 마지막 으로 xml 를 분리 합 니 다............................................................................

좋은 웹페이지 즐겨찾기