[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.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.그 두 쿼리는 외부 조인을 수행하는 것입니다. 아래를 참조하십시오
그 두 쿼리는 외부 조인을 수행하는 것입니다. 아래를 참조하십시오
http://download.oracle.com/docs/cd/B28359_01/server.111/b28286/queries006.htm에서 촬영
-
==============================
3.나는 위의 답변에 약간의 모순을보고, 난 그냥 오라클 12C에 다음을 시도하고 다음과 같은 올바른 것입니다 :
나는 위의 답변에 약간의 모순을보고, 난 그냥 오라클 12C에 다음을 시도하고 다음과 같은 올바른 것입니다 :
SELECT * FROM A, B WHERE A.column = B.column(+)
SELECT * FROM A, B WHERE B.column(+) = A.column
-
==============================
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
여기 위에 게시 된 것의 반대의 것을 알 수 있습니다. 좀 더 그래서이 스레드에있는 것보다이 책을 신뢰하지만 나는이 책이 에라타를 갖는 것이 가능하다고 가정합니다. 그것은 큰소리로 우는위한 시험 가이드의 ...
from https://stackoverflow.com/questions/6559261/left-outer-join-using-sign-in-oracle-11g by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] MySQL의에서 다음 자동 증가 ID를 얻는 방법 (0) | 2020.04.03 |
---|---|
[SQL] MySQL의 쿼리 날짜에 타임 스탬프로 변환 (0) | 2020.04.03 |
[SQL] 어떻게 변수를 선언하고 동일한 오라클 SQL 스크립트에서 사용하는 방법? (0) | 2020.04.03 |
[SQL] 날짜 데이터 형식에 대한 기본 값으로 () NOW 설정? (0) | 2020.04.03 |
[SQL] 다른 열 하나의 그룹에 하나의 열의 다수 연결할 결과 행 [중복] (0) | 2020.04.03 |