it-source

왼쪽 조인 전 SQL 필터 왼쪽 테이블

criticalcode 2023. 9. 3. 16:21
반응형

왼쪽 조인 전 SQL 필터 왼쪽 테이블

SO의 글을 많이 읽었고 where 절과 on 절의 필터링의 차이점을 이해합니다.그러나 이러한 예제의 대부분은 오른쪽 테이블에서 필터링합니다(왼쪽 조인 사용 시).아래와 같은 질문이 있는 경우:

select * from tableA A left join tableB B on A.ID = B.ID and A.ID = 20

반환 값이 제가 예상했던 것과 다릅니다.먼저 왼쪽 테이블을 필터링하고 ID가 = 20인 행만 가져온 다음 테이블 B로 왼쪽 조인을 한다고 생각했을 것입니다.

물론 이는 기술적으로 다음을 수행하는 것과 동일해야 합니다.

select * from tableA A left join table B on A.ID = B.ID where A.ID = 20

하지만 조인을 하기 전에 테이블을 필터링해주시면 성능이 더 좋을 것 같아서요.누가 이 SQL이 어떻게 처리되는지 알려주고 이를 완벽하게 이해할 수 있도록 도와줄 수 있습니까?

A left join간단한 규칙을 따릅니다.첫 번째 테이블의 모든 행을 유지합니다.열의 값은 다음에 따라 달라집니다.on일치하는 항목이 없으면 해당 표의 열은NULL첫 번째 테이블이든 두 번째 테이블이든.

이 쿼리의 경우:

select *
from tableA A left join
     tableB B
     on A.ID = B.ID and A.ID = 20;

의 모든 행A일치 여부에 관계없이 결과 집합에 있습니다.id가 20이 아닐 때 행과 열은 여전히 다음에서 가져옵니다.A그러나 조건이 거짓이므로 의 열은B이다NULL이것은 간단한 규칙입니다.조건이 첫 번째 테이블에 있는지 두 번째 테이블에 있는지에 따라 달라지지 않습니다.

이 쿼리의 경우:

select *
from tableA A left join
     tableB B
     on A.ID = B.ID 
where A.ID = 20;

from절은 모든 행을 유지합니다.A하지만 그 다음엔where절에 그 효력이 있습니다.그리고 결과 집합에 ID 20개만 포함되도록 행을 필터링합니다.

를 사용하는 경우left join:

  • 첫 번째 테이블의 필터 조건은 다음과 같습니다.where
  • 후속 테이블의 필터 조건은 다음과 같습니다.on

tablea에서 가져온 위치에 from(tablea X에서 x.value=20) TA와 같은 하위 쿼리를 넣을 수 있습니다.

그러면 이전에 tablea를 했던 것처럼 TA를 참조하십시오.

쿼리 최적화 도구를 사용하면 이 작업을 수행할 수 있습니다.

Oracle은 쿼리 계획을 표시할 수 있는 방법이 있어야 합니다.sql 문 앞에 "계획 설명"을 붙입니다.그 계획을 양쪽 모두 보고 그것이 무엇을 하는지 보세요.

첫 번째 SQL 문에서A.ID=20기술적으로 어떤 것에도 연결되어 있지 않습니다.조인은 두 개의 개별 테이블을 연결하는 데 사용됩니다.ON열을 키로 연결하여 결합하는 문입니다.

WHERE문을 사용하면 해당 값이 특정 열 아래에 있는 경우에만 반환되는 행 수를 줄여 데이터를 필터링할 수 있습니다.

언급URL : https://stackoverflow.com/questions/42288760/sql-filter-left-table-before-left-join

반응형