[SQL] 어떻게 LEFT OUTER은 JOIN 또는 RIGHT OUTER가 오라클에 가입 찾을 가입하기 (+)
SQL어떻게 LEFT OUTER은 JOIN 또는 RIGHT OUTER가 오라클에 가입 찾을 가입하기 (+)
나는 외부 조인과 오른쪽 외부 조인 (+) 기호 오라클 제대로 가입 왼쪽 찾는 혼란 스러워요. 이 대이 옵션을 선택합니다. 난 둘 다 모순을 느낍니다. 내가 이해하는 첫 번째 링크는 (+) 기호가 오른쪽에있는 경우, 그것은 오른쪽 외부 조인 될 것이라고입니다.
두 번째 링크 반면, 나의 이해는 완전히 잘못된 것입니다.
권리를 찾아 외부 예를 들어 제대로 가입 왼쪽 방법을 명확히하세요?
해결법
-
==============================
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.왼쪽의 외부 그냥 당신이 조인의 왼쪽에 테이블을 모두 반환 할 것을 의미하고, 오른쪽에있는 테이블에서 일치하는 행을 조인합니다.
왼쪽의 외부 그냥 당신이 조인의 왼쪽에 테이블을 모두 반환 할 것을 의미하고, 오른쪽에있는 테이블에서 일치하는 행을 조인합니다.
이전 스타일 오라클 구문에서 그는 다음과 같습니다 곳 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
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
'SQL' 카테고리의 다른 글
[SQL] 오라클의 OR, 대 한 빠른? (0) | 2020.06.15 |
---|---|
[SQL] int 데이터 형식 할 ... NVARCHAR 값을 변환 할 때 변환 실패 (0) | 2020.06.15 |
[SQL] 그것은 반복과 비어있는 경우 다른 값이 SQL에 올 때까지 열 값을 하나의 시간을 표시하는 방법 (0) | 2020.06.15 |
[SQL] 어떻게 PostgreSQL의에서 배열의 요소에 대한 인덱스를 만드는 방법? (0) | 2020.06.15 |
[SQL] 그것은 오라클의 매개 변수로 테이블 이름을 통과 할 수 있습니까? (0) | 2020.06.15 |