티스토리 뷰

INNER JOIN:

먼저 INNER JOIN(또는 SIMPLE JOIN)은 조인 조건을 충족하는 ROWS만 리턴하는 둘 이상의 테이블 조인입니다.

 

OUTER JOIN:

OUTER JOIN은 INNER JOIN의 결과의 확장입니다. OUTER JOIN은 조인 조건을 충족하는 모든 ROWS을 반환하고 다른 테이블의 행이 조인 조건을 충족하지 않는 일부 또는 모든 행도 리턴합니다.

 

LEFT OUTER JOIN:

테이블 A와 B의 OUTER JOIN을 수행하고 A(left outer join)의 모든 행을 반환하는 쿼리를 작성하려면 FROM 절에서 LEFT [OUTER] JOIN 구문을 사용하거나 OUTER JOIN 연산자(+)를 WHERE 절의 조인 조건에 있는 B의 모든 컬럼에 적용합니다. B에 일치하는 행이 없는 A의 모든 행에 대해 오라클은 B의 컬럼을 포함하는 모든 select list 표현식에 대해 null을 반환합니다.

 

RIGHT OUTER JOIN:

테이블 A와 B의 OUTER JOIN을 수행하고 B(right outer join)의 모든 행을 반환하는 쿼리를 작성하려면 FROM 절에서 RIGHT [OUTER] JOIN 구문을 사용하거나 WHERE 절의 조인 조건에서 A의 모든 열에 OUTER JOIN 연산자(+)를 적용합니다. A에 일치하는 행이 없는 B의 모든 행에 대해 Oracle은 A의 열을 포함하는 모든 select list 표현식에 대해 null을 반환합니다.

 

FULL OUTER JOIN:

OUTER JOIN을 수행하고 조인 조건(full outer join)을 충족하지 않는 경우 null로 확장된 A 및 B의 모든 행을 반환하는 쿼리를 작성하려면 FROM 절에서 FULL [OUTER] JOIN 구문을 사용합니다.

 

참고

Oracle은 Oracle 조인 연산자(+)보다 FROM 절 OUTER JOIN 구문을 사용할 것을 권장합니다. Oracle 조인 연산자(+)를 사용하는 OUTER JOIN 쿼리에는 FROM 절 OUTER JOIN 구문에 적용되지 않는 여러 규칙 및 제한 사항이 적용됩니다.

 

 

아래와 같이 세 개의 테이블이 있을 때 여러 조건으로 LEFT OUTER JOIN에 대한 실습입니다. 

SQL> SELECT * FROM TEST02.T72E1;

C1         C2
---------- ----------
100        Android
200        iOS
300        Bada
SQL> SELECT * FROM TEST02.T72E2;

C3         C4         C1
---------- ---------- ----------
1000       A1000      100
2000       B2000      100
3000       C3000      200
4000       D3000      300
SQL> SELECT * FROM TEST02.T72E3;

C5         C6         C3
---------- ---------- ----------
11000      hong       1000
12000      kang
13000      lee
14000      ann        3000
15000      gou        4000
16000      lees       4000

 

첫 번째 쿼리와 결과는 다음과 같습니다:

select a.c5, a.c6, b.c3, b.c4, c.c1, c.c2
from t72e3 a left outer join t72e2 b 
on (a.c5 in (11000, 12000) and a.c3 = b.c3) left outer join t72e1 c 
on (b.c1 = c.c1)
order by a.c5;
C5         C6         C3         C4         C1         C2
---------- ---------- ---------- ---------- ---------- ----------
11000      hong       1000       A1000      100        Android
12000      kang
13000      lee
14000      ann
15000      gou
16000      lees

 

두 번째 쿼리 및 결과입니다:

select a.c5, a.c6, b.c3, b.c4, c.c1, c.c2
from t72e3 a, t72e2 b, t72e1 c 
where (a.c5 in (11000, 12000) and a.c3 = b.c3) 
  and (b.c1 = c.c1)
order by a.c5;
C5         C6         C3         C4         C1         C2
---------- ---------- ---------- ---------- ---------- ----------
11000      hong       1000       A1000      100        Android

 


데이터 생성 

샘플 데이터를 다음과 같이 생성해서 실습해보시길 바랍니다. 

set pages 5000
set line 300
select username from all_users;
col username for a25

grant create session to test02 identified by "test02";
grant create table to test02;

select username,default_tablespace from dba_users;

alter user test02 default tablespace tbs_test_01;
alter user test02 quota unlimited on tbs_test_01;
commit;

conn test02/test02

create table test02.t72e1 (c1 varchar2(10) not null primary key, c2 varchar2(10) not null) tablespace tbs_test_01;

insert into test02.t72e1 (c1, c2)
values (100, 'Android');
insert into test02.t72e1 (c1, c2)
values (200, 'iOS');
insert into test02.t72e1 (c1, c2)
values (300, 'Bada');

select * from t72e1;

commit;

create table test02.t72e2 (c3 varchar2(10) not null primary key, c4 varchar2(10) not null, c1 varchar2(10) not null) tablespace tbs_test_01;

insert into test02.t72e2 (c3, c4, c1) values (1000, 'A1000', 100);
insert into test02.t72e2 (c3, c4, c1) values (2000, 'B2000', 100);
insert into test02.t72e2 (c3, c4, c1) values (3000, 'C3000', 200);
insert into test02.t72e2 (c3, c4, c1) values (4000, 'D3000', 300);

select * from test02.t72e2;

commit;

create table test02.t72e3 (c5 varchar2(10) not null primary key, c6 varchar2(10) not null, c3 varchar2(10)) tablespace tbs_test_01;

insert into test02.t72e3 (c5, c6, c3) values (11000, 'hong', 1000);
insert into test02.t72e3 (c5, c6, c3) values (12000, 'kang', NULL);
insert into test02.t72e3 (c5, c6, c3) values (13000, 'lee', NULL);
insert into test02.t72e3 (c5, c6, c3) values (14000, 'ann', 3000);
insert into test02.t72e3 (c5, c6, c3) values (15000, 'gou', 4000);
insert into test02.t72e3 (c5, c6, c3) values (16000, 'lees', 4000);

select * from test02.t72e3;

commit;
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함