카테고리 없음

[SQL 서버] SQL / Oracle Server, 전체 외부 조인 및 3 개 이상의 테이블

행복을전해요 2021. 1. 9. 07:50

WHERE 절은 반환 될 수있는 결과를 제한합니다.

where h.attributT1_1 = k.attributT3_1 
and s.attributT3_1 = '  260585'
and h.attributT1_2 = 055

이는 테이블 H, K 및 S가 행 (널이 아님)에 기여한 결과 만 표시됨을 의미합니다. 실제로 조인에서 OUTER를 제거했습니다. 이러한 조건을 조인 정의로 이동해보십시오.

내가 의미하는 바를 보여주는 예 :

SQL> create table t1 (id integer, text varchar2(10));
SQL> create table t2 (id integer, text varchar2(10));
SQL> insert into t1 values (1, 'text');
SQL> insert into t1 values (2, 'text');
SQL> insert into t2 values (2, 'text');
SQL> insert into t2 values (3, 'text');
SQL> commit;

완전 외부 결합 :

SQL> select * from t1 full outer join t2 on t1.id = t2.id;

        ID TEXT               ID TEXT
        ---------- ---------- ---------- ----------
                 2 text                2 text
                                                3 text
                                                         1 text
                                                         

이제 WHERE 절에 필터가 있습니다 ( "전체 외부"가없는 것처럼 2 개의 레코드가 사라집니다).

  1* select * from t1 full outer join t2 on t1.id = t2.id
  2* where t1.text='text'
    3  and t2.text='text';
    
            ID TEXT               ID TEXT
            ---------- ---------- ---------- ----------
                     2 text                2 text
                     

이제 필터를 조인으로 이동했습니다.

SQL> select * from t1 full outer join t2 on t1.id = t2.id
  2                                      and t1.text='text'
    3                                      and t2.text='text';
    
            ID TEXT               ID TEXT
            ---------- ---------- ---------- ----------
                     2 text                2 text
                                                    3 text
                                                             1 text             
                                                             


출처
https://stackoverflow.com/questions/2005974