Oracle

[DB/오라클] 조인 완벽 정리 ( INNER 조인 OUTER 조인 )

원코딩 2022. 7. 9. 21:51

 

 

 

 

데이터를 불러 올 때

하나의 테이블만 사용하는 것이 아니라 

두개 이상의 테이블을 합쳐서

필요한 데이터를 추출할 때 사용하는 것이 조인 기능이다. 

 

 

 

조인은 오라클에서 사용하는 오라클 조인과

오라클 외에 다른 DBMS에서 사용되는 ANSI 조인으로

사용법에 약간의 차이가 있다. 

 

 

 

조인은 여러 개의 테이블을 연결하여

하나의 테이블을 만드는 과정이다. 

 

 


 

 1.  INNER JOIN   

가장 흔하게 사용되는 조인으로

각각의 테이블에서 동등한 조건이 있을 때

원하는 컬럼을 가져올 수 있다. 

 

1-1 EQUI JOIN

1-2 NATURAL JOIN

1-3 JOIN ~ USING

 

 

 

 2.  OUTER JOIN   

INNER 조인에서 원하는 부분을 

추가로 더 가져올 수 있다. 

INNER 조인 + @

 

2-1 LEFT OUTER JOIN

2-2 RIGTH OUTER JOIN

2-3 FULL OUTER JOIN

 

 

 


 

 

 

 

1-1 EQUI JOIN

 

 

 

* A테이블과 B테이블 모두 a컬럼을 가지고 있고 

* a컬럼의 값이 서로 교집합 되는 부분을 조인시켜

* A테이블과 B테이블의 나머지 컬럼을 가지고 올 수 있다. 

 

A테이블의 a컬럼의 값이 10,20,30 이고 

B테이블의 a컬럼의 값이 10,20,30,40 이라면 

교집합 되는 10,20,30의 데이터만 가져올 수 있으며,

B테이블의 a컬럼의 값이 40인 데이터는 가져올 수 없다. 

 

* Oracle JOIN

SELECT a,b,c,d,e,f,k (A,B테이블에 있는 컬럼 가져올 수 있음)
FROM A, B (테이블 2개에서 가져오겠다) 
WHERE A.a=B.a; (A테이블의 a와 B테이블의 a가 같을 때)

 

* ANSI JOIN(표준화)

SELECT a,b,c,d,e,f,k 
FROM  A INNER JOIN B
ON A.a=B.a;

 

 

 

 

 

1-2 NATURAL JOIN

 

 

EQUI 조인과 같으며 

WHERE절을 주지 않아도 같은 컬럼을

자동으로 인식한다.

SELECT a,b,c,d,e,f,k 
FROM A INNER JOIN B

 

 

 

 

 

1-3 JOIN USING

 

 

EQUI 조인과 같으며 

사용법만 조금 다르다.

 

SELECT a,b,c,d,e,f,k 
FROM A JOIN B USING (a) 

 

괄호 안에 A테이블과 B테이블을 조인시켜주는 컬럼(a)을 적돼,

반드시 컬럼명이 같아야 한다.

(데이터가 교집합 되더라도 , 컬럼명이 다르면 인식할 수 없다.)

 

 

 

 


 

 

 

 

2-1 RIGHT OUTER JOIN

 

 

OUTER JOIN은 

교집합되지 않은 데이터도 가지고 올 수 있다.

 

A테이블의 a컬럼의 값이 10,20,30 이고

B테이블의 a컬럼의 값이 10,20,30,40 일 때

B테이블에 OUTER JOIN을 설정하면 

교집합 되지 않았던 B테이블의 a컬럼의 값이 40인 데이터도 가져 올 수 있다.

 

* Oracle JOIN

SELECT a,b,c,d,e,f,k
FROM A, B 
WHERE A.a(+)=B.a;  (right 조인이면 +부호를 왼쪽에!)

 

* ANSI JOIN(표준화)

SELECT a,b,c,d,e,f,k 
FROM  A RIGHT OUTER JOIN B
ON A.a=B.a;

이렇게 rigth outer join을 하면 

교집합 되지 않은 B에 있는 데이터를  추가로 가져오겠다는 의미이다.

A,B INNER JOIN + B에 있는 데이터 

 

 

 

 

 

2-2 LEFT OUTER JOIN

 

 

위의 설명과 같으며

왼쪽 테이블에 있는 데이터를 추가로 가져온다.

 

* Oracle JOIN

SELECT a,b,c,d,e,f,k
FROM A, B 
WHERE A.a=B.a(+) (left조인이면 +부호를 오른쪽에!)

 

* ANSI JOIN(표준화)

SELECT a,b,c,d,e,f,k 
FROM  A LEFT OUTER JOIN B
ON A.a=B.a;

교집합 되지 않은 A에 있는 데이터를  추가로 가져오겠다는 의미이다.

A,B INNER JOIN + A에 있는 데이터 

 

 

 

 

 

2-3 FULL OUTER JOIN

 

 

 

교집합 되는 INNER JOIN

+

교집합 되지 않았던 왼쪽 테이블의 값 LEFT OUTER JOIN 

+

교집합 되지 않았던 오른쪽 테이블의 값 RIGHT OUTER JOIN

 

한마디로 제한없이 모든 데이터를 가져올 수 있다.

 

* ANSI JOIN만 가능하다.

SELECT a,b,c,d,e,f,k 
FROM  A FULL OUTER JOIN B
ON A.a=B.a;

보통 JOIN을 사용하는 이유는 중복되는 값을 가져오기 위해서 인데

FULL OUTER JOIN 은 모든 데이터를 가져오다 보니 사용빈도가 많지 않다. 

 

 

 

 

 

 


 

 

 

 

 

 3. 조건은 AND   

 

만약 조인을 사용하면서 

조건을 추가하고 싶다면 

WHERE 절 뒤에 AND를 사용하자.

 

 

* Oracle  EQUI JOIN

SELECT a,b,c,d,e,f,k 
FROM A, B 
WHERE A.a=B.a
AND b>=10;

이렇게 하면 JOIN된 값들 중에서 

b컬럼의 값이 10 이상인 데이터만 추출할 수 있다. 

 

 

 

 

 


 

 

 

 

 4. 주의사항   

 

INNER JOIN은 

null값이 있는 경우 처리 하지 못해서 

null값은 제외되지만, 

 

 

OUTER JOIN은 

null값을 포함해서 가져온다.