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 | 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 | 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
;
이 코드는 쓸 수 없으므로 주의해야합니다.
'Web Programming > DB' 카테고리의 다른 글
[ORACLE] LATERAL 조인 함수 / OUTER APPLY 조인 함수 (0) | 2023.02.15 |
---|---|
[ORACLE] JSON 파싱(Parsing)하기 (조회하기) (0) | 2023.02.14 |
[Oracle] 오라클 계층구조(트리구조)로 조회하기 (level, start with...connect by prior, order siblings by) (1) | 2023.01.25 |
[DB, ORACLE] 오라클의 데이터타입(Datatype) 바이트(byte)와 자바의 byte 차이 (자바에서 디비로 문자열데이터 넘길때 바이트 차이) (0) | 2023.01.25 |
[MySQL] DB import/export (0) | 2022.10.02 |