2012-09-25 4 views
0

JOIN을 통해 Correlated 서브 쿼리를 사용하는 것의 차이점을 알려주십시오. 그들은 같은 문제를 해결하기위한 것이 아닙니다. 한 가지 이상의 성과가 있습니까? SQL 서버를 사용하고 FOR XML PATH ('')를 사용하여 하위 쿼리에서 발생하는 여러 열을 선택하는 경향이 있습니다. 차이점을 설명 할 수있는 예제가 있으면 감사하겠습니다.Correlated Subquery and Joins

+0

조인 및 상관 하위 쿼리의 실행 계획을 검토 했습니까? – Taryn

+0

나는 단어 실행 계획을 들었다. 그러나 나는 그 용어를 정말로 모른다. 제발 친절하게 설명해 주시겠습니까? – damola

+4

이 경우에 약간의 검색 기능을 사용하면 http://msdn.microsoft.com/en-us/library/ms178071(v=sql.105).aspx가 권한 영역 중 하나입니다 (Microsoft가 SQL을 작성한 이후 서버, 실행 계획) ... 기본적으로 쿼리를 실행할 때 쿼리가 무엇을하는지 알 수 있습니다. – jcolebrand

답변

1

"JOIN에 대해 상관 관계가있는 하위 쿼리를 사용하는 것의 차이점은 무엇입니까? 동일한 문제를 해결하기위한 것이 아닙니까?"

아니요.

상관 관계가있는 하위 쿼리를 사용하면 SEMIJOIN 또는 관계형 대수의 SEMIMINUS 호출에 대한 표현식을 얻을 수 있습니다. (내가 여기에 상관 하위 쿼리의 가장 일반적인 사용 말하고 있습니다.)

SELECT * FROM A1 
WHERE attr in (SELECT attr FROM A2); 

당신 A1에 표시에만 열을 제공합니다. 당신은 또한 당신에게 A1에 표시되지 않습니다 A2에서 추가 열을 줄 것

SELECT * FROM A1 NATURAL JOIN A2 

가입 쓴 경우에 당신이 얻을 것이 무엇 달리.

그리고

SELECT * FROM A1 
WHERE attr NOT IN (...) 

도 상관 하위 쿼리를 포함하지만,이 시간은 심지어 가입과 같이 쓸 수없는 semiminus 호출이다.

마지막으로 상관 관계가있는 하위 쿼리가 SELECT 목록에도 나타날 수 있습니다.

SELECT a,b, (SELECT MIN(b) FROM T AS sub WHERE sub.a=main.a AND sub.b>main.b) 
    FROM T AS main 

이런 경우 많은 쿼리가 JOIN으로 기록 될 수 없습니다.

2

평소와 마찬가지로, 코스 용 말입니다.

그러나 JOIN을 사용하여 작업 할 수 있으면 SQL Server의 집합 기반 작업을 사용하여 두 개의 데이터 스트림을 함께 일치시켜야하므로 느슨한 규칙이 있습니다.

그러나 관련 하위 쿼리는 특정 문제를 해결할 수있는 유일한 방법이지만 각 행에 하나씩 루프와 비슷한 동작이 발생하므로 속도가 느려지고 성능이 떨어집니다.