본문 바로가기
Web Programming/DB

[ORACLE] 조인 쿼리(join query), 조인 종류, 조인 쿼리 예시

by jaey0ng 2023. 1. 30.

JOIN의 종류는 4가지입니다.

1. INNER JOIN

2. LEFT OUTER JOIN

3. RIGHT OUTER JOIN
4. FULL OUTER JOIN

 

1. INNER JOIN

 

INNER JOIN은 교집합 연산자 입니다.

사용법 예시입니다.

SELECT *
  FROM table A
 INNER JOIN table B
    ON A.조인키컬럼 = B.조인키컬럼
;

 

-- INNER은 생략하실 수 있습니다.

이렇게 사용하실 수도 있고,

 

SELECT *
  FROM table A
     , table B
 WHERE A.조인키컬럼 = B.조인키컬럼
   AND ~~
;

이렇게 사용하실 수도 있습니다

다만 위의 방법보단 아래의 방법이 더 많이 쓰입니다.

 

2. LEFT OUTER JOIN

 

LEFT OUTER JOIN은 A전체와 A,B의 교집합을 뜻하는 연산자입니다.


아래 테이블들은 2번, 3번, 4번에 이해를 위해 적용시킬 테이블 정보입니다.

USER_BOARD 테이블

USER_ID (pk) NAME JOB AGE EMAIL PHONE BOARD_ID TITLE CONTENT
test 홍길동 도사 34 abc@gma.. 010-1234-.. 1 게시물 제.. 나랏말말..
test 홍길동 도사 34 abc@gma.. 010-1234-.. 3 어쩌고 저.. 이러쿵 저..
dev123 신개발 개발자 24 dev@gma.. 010-1111-.. 2 개발은 이.. 개발은...

위 테이블은 모든 정보를 한 테이블에 담아둔 것입니다.

장점: 모든 정보를 한눈에 보기 쉽다.

단점: 데이터가 조금이라도 많아지면 관리하기가 매우 어려워진다.

 

USER 테이블

USER_ID (pk) NAME JOB AGE EMAIL PHONE
test 홍길동 도사 34 abc123@gmail.com 010-1234-1234
dev123 신개발 개발자 24 dev@gmail.com 010-1111-1111

 

BOARD 테이블

BOARD_ID USER_ID (pk) TITLE CONTENT
1 test 게시물 제목 예시입니다. 나랏말쌈이...
2 dev123 개발은 이거에요 개발은...
3 test 어쩌고 저쩌고 이러쿵 저러쿵...

위 테이블들은 데이터 관리를 효율적으로 하기위해 여러 테이블로 나눠서 담아둔 것입니다.

장점: 데이터를 관리하기가 매우 수월하다.

단점: 데이터를 한눈에 보기 어렵다.


두 테이블(USER, BOARD)을 묶어서 위에 USER_BOARD 테이블 처럼 조회되게 하는게 목적입니다.

그렇다면 LEFT OUTER JOIN을 이용하면 됩니다.

 

SELECT *
  FROM USER U
  LEFT OUTER JOIN BOARD B
    ON U.USER_ID = B.USER_ID
 ORDER BY U.USER_ID
;

-- OUTER 은 생략가능합니다.

로 사용할 수도 있고,

 

SELECT *
  FROM USER U
     , BOARD B
 WHERE U.USER_ID = B.USER_ID(+)
 ORDER BY U.USER_ID
 ;

이렇게 사용할 수도 있습니다.

이렇게 하면 데이터관리도 효과적이면서, 조회도 동일하게 나오므로

데이터는 분할해서 관리하게 됩니다.

 

추가로 저렇게 관리하고 조인을 하는 이유는

데이터가 적을 땐 문제가 없지만 수십만개 그 이상의 데이터가 존재할 때

저렇게 관리를 하지 않으면 나중에 수정사항이 생길때 문제가 많이 발생합니다.

 

3. RIGHT OUTER JOIN

 

RIGHT OUTER JOIN은 LEFT OUTER JOIN의 반대 개념이라

보통은 LEFT OUTER JOIN을 사용하고, RIGHT OUTER JOIN은 잘 사용되지 않습니다.

위에 테이블로 예시를 바로 들어드리겠습니다.

 

SELECT *
  FROM BOARD B
 RIGHT OUTER JOIN USER U
    ON B.USER_ID = U.USER_ID
 ORDER BY B.USER_ID
;

-- OUTER 은 생략가능합니다.

로 사용할 수도 있고,

 

SELECT *
  FROM BOARD B
     , USER U
 WHERE B.USER_ID(+) = U.USER_ID
 ORDER BY B.USER_ID
 ;

이런식으로 LEFT OUTER JOIN을 반대로 사용하시면 되겠습니다.

 

4. FULL OUTER JOIN

 

교집합이 이뤄진 데이터정보도, 이뤄지지 않은 데이터정보도 모두 호출하는 조인쿼리입니다.

 

SELECT *
  FROM BOARD B
  FULL OUTER JOIN USER U
    ON B.USER_ID = U.USER_ID
 ORDER BY B.USER_ID
;

이렇게 사용하시면 되겠습니다.

 

단, 주의할점을 설명드리겠습니다.

SELECT *
  FROM BOARD B
     , USER U
 WHERE B.USER_ID(+) = U.USER_ID(+)
 ORDER BY B.USER_ID
 ;

이 코드는 쓸 수 없으므로 주의해야합니다.