복붙노트

[SQL] 왼쪽 외부 오라클 11g에서 + 기호를 사용하여 가입

SQL

왼쪽 외부 오라클 11g에서 + 기호를 사용하여 가입

하나는이 쿼리는 왼쪽 외부의 예입니다 아래 여부를 말해 줄 수 가입 또는 오른쪽 외부 조인?

Table Part:
Name         Null?       Type
PART_ID      NOT NULL    VARCHAR2(4)
SUPPLIER_ID              VARCHAR2(4)

PART_ID SUPPLIER_ID
P1      S1
P2      S2
P3  
P4  

Table Supplier:
Name            Null?     Type
SUPPLIER_ID NOT NULL      VARCHAR2(4)
SUPPLIER_NAME   NOT NULL  VARCHAR2(20)

SUPPLIER_ID  SUPPLIER_NAME
S1           Supplier#1
S2           Supplier#2
S3           Supplier#3

관계없이 여부를 어떤 공급 업체의 공급 그들 여부의 모든 부분을 표시 :

SELECT P.Part_Id, S.Supplier_Name
FROM Part P, Supplier S
WHERE P.Supplier_Id = S.Supplier_Id (+)

SELECT P.Part_Id, S.Supplier_Name
FROM Part P, Supplier S
WHERE S.Supplier_Id (+) = P.Supplier_Id

해결법

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

    1.TableA의 LEFT OUTER 테이블 A. TableB의 가입이 TableB의 RIGHT OUTER 등가 조인

    TableA의 LEFT OUTER 테이블 A. TableB의 가입이 TableB의 RIGHT OUTER 등가 조인

    오라클에서 (+)의 조인에서 "옵션"테이블을 나타냅니다. 그래서 첫 번째 쿼리에서, 그것은 P LEFT OUTER이 두 번째 쿼리에서 S. 가입하세요, 그것은는 S RIGHT OUTER 그들은 기능상으로 동등한있어 P.을 JOIN입니다.

    용어에서 오른쪽 또는 왼쪽으로는 기록을 가지고 항상 조인의 어느 쪽 지정하고 다른 쪽은 널 (null) 일 수 있습니다. 그래서 P LEFT OUTER에서 S 가입하세요, 그것은 왼쪽에 있기 때문에 P는 항상 기록을해야하지만 S는 널 (null)이 될 수 있습니다.

    추가 설명은 java2s.com에서이 예제를 참조하십시오.

    명확하게하기 위해, 나는 그것을 도움의 시각화 만 거기로 용어가 문제가되지 않는 것을 말하는 것 같아. 중요한 것은 당신이 그것을 작동하는 방법의 개념을 이해한다는 것입니다.

    내가 가입 암시 구문 LEFT 대 권리를 결정하는 중요한 문제에 대한 몇 가지 혼란을 보았다.

    LEFT OUTER는 가입

    SELECT *
    FROM A, B
    WHERE A.column = B.column(+)
    

    RIGHT OUTER는 가입

    SELECT *
    FROM A, B
    WHERE B.column(+) = A.column
    

    한 모두 내가 WHERE 절에 조건에의 스왑 측면이지만, 그들은 여전히 ​​기능적으로 동일입니다. (즉에 대한 자세한 정보를 원하시면 내 대답 최대 높은 참조하십시오.) (+)의 위치가 오른쪽 또는 왼쪽으로 결정합니다. (제 (+)의 오른쪽에있는 경우 즉, 그것은 LEFT 가입이다. 만약 (+)는 왼쪽에, 그 오른쪽이 JOIN이다.)

    조인의 두 가지 스타일이 암시 조인 및 명시 적 조인. 그들은 쓰기 조인의 다른 스타일,하지만 그들은 기능적으로 동일합니다.

    이 SO 질문을 참조하십시오.

    단순히 모든 테이블을 함께 나열 조인 암시. 조건이 WHERE 절에 지정된 조인.

    암시는 가입

    SELECT *
    FROM A, B
    WHERE A.column = B.column(+)
    

    명시는 동료가 특정 테이블의 포함으로 대신 WHERE 절에 조인 조건을 결합합니다.

    노골적인 가입

    SELECT *
    FROM A
    LEFT OUTER JOIN B ON A.column = B.column
    

    이들 암시 읽고 이해하기 더 어려울 수 있습니다 조인하고,이 조건이 WHERE 기타의 조건 혼합 결합하기 때문에 그들은 또한 몇 가지 제한이있다. 따라서, 암시는 일반적으로 명시 적 문법에 찬성하지 말아 결합합니다.

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

    2.그 두 쿼리는 외부 조인을 수행하는 것입니다. 아래를 참조하십시오

    그 두 쿼리는 외부 조인을 수행하는 것입니다. 아래를 참조하십시오

    http://download.oracle.com/docs/cd/B28359_01/server.111/b28286/queries006.htm에서 촬영

  3. ==============================

    3.나는 위의 답변에 약간의 모순을보고, 난 그냥 오라클 12C에 다음을 시도하고 다음과 같은 올바른 것입니다 :

    나는 위의 답변에 약간의 모순을보고, 난 그냥 오라클 12C에 다음을 시도하고 다음과 같은 올바른 것입니다 :

    SELECT *
    FROM A, B
    WHERE A.column = B.column(+)
    
    SELECT *
    FROM A, B
    WHERE B.column(+) = A.column
    
  4. ==============================

    4.이 스레드에서 일부 잘못된 정보가있다. 내가 복사하고 잘못된 정보를 붙여 :

    이 스레드에서 일부 잘못된 정보가있다. 내가 복사하고 잘못된 정보를 붙여 :

    위의 잘못입니다 !!!!! 그것은 반대입니다. 어떻게 결정이 잘못된 것은 다음과 같은 책이다 :

    오라클 9i의 오라클 OCP 소개 : SQL 시험 가이드. 115 페이지의 표 3-1은 이에 대한 좋은 요약이 있습니다. 내 변환 된 SQL 나는 오래된 학교를 가서 인쇄 된 책에보고 할 때까지 제대로 작동되지 않은 이유를 이해할 수 없었다!

    다음은이 책에서 요약, 라인으로 복사 라인은 다음과 같습니다

    오라클 바깥 구문 가입 :

    from tab_a a, tab_b b,                                       
    where a.col_1 + = b.col_1                                     
    

    ANSI / ISO 환산 :

    from tab_a a left outer join  
    tab_b b on a.col_1 = b.col_1
    

    여기 위에 게시 된 것의 반대의 것을 알 수 있습니다. 좀 더 그래서이 스레드에있는 것보다이 책을 신뢰하지만 나는이 책이 에라타를 갖는 것이 가능하다고 가정합니다. 그것은 큰소리로 우는위한 시험 가이드의 ...

  5. from https://stackoverflow.com/questions/6559261/left-outer-join-using-sign-in-oracle-11g by cc-by-sa and MIT license