왼쪽 조인 전 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
'it-source' 카테고리의 다른 글
1GB .sql 파일을 WAMP/phpmyadmin으로 가져오는 방법 (0) | 2023.09.03 |
---|---|
키보드 입력을 읽는 방법? (0) | 2023.09.03 |
노드에 엄격한 모드를 적용할 수 있는 방법이 있습니까? (0) | 2023.09.03 |
CSS/HTML: 입력 필드 주위에 빛나는 테두리 만들기 (0) | 2023.09.03 |
Powershell - 리소스 부족으로 인해 테스트-연결 실패 (0) | 2023.09.03 |