복붙노트

[SQL] 어떻게 LEFT OUTER은 JOIN 또는 RIGHT OUTER가 오라클에 가입 찾을 가입하기 (+)

SQL

어떻게 LEFT OUTER은 JOIN 또는 RIGHT OUTER가 오라클에 가입 찾을 가입하기 (+)

나는 외부 조인과 오른쪽 외부 조인 (+) 기호 오라클 제대로 가입 왼쪽 찾는 혼란 스러워요. 이 대이 옵션을 선택합니다. 난 둘 다 모순을 느낍니다. 내가 이해하는 첫 번째 링크는 (+) 기호가 오른쪽에있는 경우, 그것은 오른쪽 외부 조인 될 것이라고입니다.

두 번째 링크 반면, 나의 이해는 완전히 잘못된 것입니다.

권리를 찾아 외부 예를 들어 제대로 가입 왼쪽 방법을 명확히하세요?

해결법

  1. ==============================

    1.나는 오라클 외부의 차이점은 문법과 ANSI / ISO 조인 구문을 표시하는 시도를 줄 것이다.

    나는 오라클 외부의 차이점은 문법과 ANSI / ISO 조인 구문을 표시하는 시도를 줄 것이다.

    LEFT OUTER은 가입 -

    SELECT e.last_name,
      d.department_name
    FROM employees e,
      departments d
    WHERE e.department_id = d.department_id(+);
    
    SELECT e.last_name,
      d.department_name
    FROM employees e
    LEFT OUTER JOIN departments d
    ON (e.department_id = d.department_id);
    

    RIGHT OUTER JOIN은 -

    SELECT e.last_name,
      d.department_name
    FROM employees e,
      departments d
    WHERE e.department_id(+) = d.department_id;
    
    SELECT e.last_name,
      d.department_name
    FROM employees e
    RIGHT OUTER JOIN departments d
    ON (e.department_id = d.department_id);
    

    FULL OUTER JOIN은 -

    해시 완전 외부의 네이티브 지원이 11gR1에 참여하기 전에 오라클은 내부적으로 FULL OUTER는 다음과 같은 방법으로 가입 변환 것 -

    SELECT e.last_name,
      d.department_name
    FROM employees e,
      departments d
    WHERE e.department_id = d.department_id(+)
    UNION ALL
    SELECT NULL,
      d.department_name
    FROM departments d
    WHERE NOT EXISTS
      (SELECT 1 FROM employees e WHERE e.department_id = d.department_id
      );
    
    SELECT e.last_name,
      d.department_name
    FROM employees e
    FULL OUTER JOIN departments d
    ON (e.department_id = d.department_id);
    

    이것 좀 보라.

  2. ==============================

    2.왼쪽의 외부 그냥 당신이 조인의 왼쪽에 테이블을 모두 반환 할 것을 의미하고, 오른쪽에있는 테이블에서 일치하는 행을 조인합니다.

    왼쪽의 외부 그냥 당신이 조인의 왼쪽에 테이블을 모두 반환 할 것을 의미하고, 오른쪽에있는 테이블에서 일치하는 행을 조인합니다.

    이전 스타일 오라클 구문에서 그는 다음과 같습니다 곳 t1.col1 = t2.col1 (+) ANSI 구문에 해당 될 것이다 : T1로부터 T2 외부에 가입 좌 (t1.col1 = t2.col1)

    오른쪽 외부는 조인의 오른쪽에있는 테이블을 모두 반환 할 것을 의미하고, 왼쪽에있는 테이블에서 일치하는 행을 조인합니다.

    이전 스타일 오라클 구문에서 그는 다음과 같습니다 곳 t2.col1 (+) = t1.col1 ANSI 구문에 해당 될 것이다 : T2 오른쪽 외측에서 T1에 가입 (t2.col1 = t1.col1)

    당신은 물론, 당신은 단순히 테이블의 순서를 반대로하여 오른쪽 외부 조인 왼쪽 외부로 가입 켤 수 있음을 발견 한 것이다. 대부분의 외부는 "나는이 첫 번째 테이블의 모든 원이 다른 테이블에서 일치하는 행"는 생각하기 쉽다 아마 때문에, 왼쪽 것들 조인이 아닌 다른 방법 내내. 물론 YMMV!

    ETA 다음 예는 :

    왼쪽 외부 가입 :

    with t1 as (select 1 col1, 10 col2 from dual union all
                select 2 col1, 20 col2 from dual union all
                select 3 col1, 30 col2 from dual),
         t2 as (select 1 col1, 100 col2 from dual)
    select t1.*, t2.*
    from   t1, t2
    where  t1.col1 = t2.col1 (+)
    order by t1.col1;
    
          COL1       COL2     COL1_1     COL2_1
    ---------- ---------- ---------- ----------
             1         10          1        100
             2         20                      
             3         30   
    
    with t1 as (select 1 col1, 10 col2 from dual union all
                select 2 col1, 20 col2 from dual union all
                select 3 col1, 30 col2 from dual),
         t2 as (select 1 col1, 100 col2 from dual)
    select t1.*, t2.*
    from t1 left outer join t2 on (t1.col1 = t2.col1)
    order by t1.col1;
    
          COL1       COL2     COL1_1     COL2_1
    ---------- ---------- ---------- ----------
             1         10          1        100
             2         20                      
             3         30   
    

    오른쪽 외부 가입 :

    with t1 as (select 1 col1, 10 col2 from dual union all
                select 2 col1, 20 col2 from dual union all
                select 3 col1, 30 col2 from dual),
         t2 as (select 1 col1, 100 col2 from dual)
    select t1.*, t2.*
    from   t1, t2
    where t2.col1 (+) = t1.col1
    order by t1.col1;
    
          COL1       COL2     COL1_1     COL2_1
    ---------- ---------- ---------- ----------
             1         10          1        100
             2         20                      
             3         30   
    
    with t1 as (select 1 col1, 10 col2 from dual union all
                select 2 col1, 20 col2 from dual union all
                select 3 col1, 30 col2 from dual),
         t2 as (select 1 col1, 100 col2 from dual)
    select t1.*, t2.*
    from t2 right outer join t1 on (t2.col1 = t1.col1)
    order by t1.col1;
    
          COL1       COL2     COL1_1     COL2_1
    ---------- ---------- ---------- ----------
             1         10          1        100
             2         20                      
             3         30   
    
  3. from https://stackoverflow.com/questions/28498660/how-to-find-left-outer-join-or-right-outer-join-with-oracle-join by cc-by-sa and MIT license