본문 바로가기

프로그래밍/DataBase

[DataBase]Join

조인이란

둘 이상의 테이블이나 데이터베이스를 연결해서 데이터를 검색하는 방법이다. 내가 검색하고 싶은 컬럼이 다른 테이블에 있을경우, 여러개의 테이블을 마치 하나의 테이블인 것처럼 활용하는 방법이다. 테이블들을 공통된 컬럼을 통해 연결하기 때문에 연결하려는 테이블들이 적어도 하나의 컬럼을 공유하고 있어야한다.

(공유하고 있는 컬럼을 PK또는 FK값으로 사용.)

 

조인 종류

종류 내용
INNER JOIN 내부조인(= 교집합)
OUTER JOIN LEFT JOIN 외부조인(= 합집합)
RIGHT JOIN
FULL JOIN

 

조인 예시

조인 예시에 활용할 테이블 A, B

 

A (게시글 번호 테이블)

게시글 번호 제목 내용 id_num
1 DB에 대하여 DB는 DataBase의.. 1
2 Join이란 Join을 하기 위해 먼저.. 1
3 개발자 로드맵 개발자가 되기 위해서는.. 2
4 Java공부하기 Java 공부는 .. NULL

 

B (회원 정보 테이블)

id_num id 이름 나이
1 test1 김철수 15
2 G.dong 홍길동 22
3 rose100 백장미 17

 

 

 

OUTER JOIN

- LEFT JOIN / RIGHT JOIN

 

 OUTER JOIN에는 LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN이 있으나, 여기서는 LEFT(RIGHT) JOIN만 다루도록 하겠다.

 LEFT조인의 경우 왼쪽에 위치한 A테이블이 기준이 되기때문에 A테이블에는 있지만, B테이블에 데이터가 없을 경우 그 데이터 들은 NULL로 표시가 된다.

 LEFT조인이 왼쪽 테이블을 기준으로 했다면 RIGHT조인은 똑같은 개념으로 오른쪽 테이블이 기준이 되는 조인이다.

 

각 테이블의 id_num를 통해 JOIN을 해보자.

SELECT *
FROM A
LEFT JOIN B
ON A.id_num = B.id_num

테이블 A를 중심으로 각 테이블의 id_num 컬럼을 활용하여 조인하였다.

 

게시글 번호 제목 내용 A.id_num B.id_num id 이름 나이
1 DB에 대하여 DB는 DataBase의.. 1 1 test1 김철수 15
2 Join이란 Join을 하기 위해.. 1 1 test1 김철수 15
3 개발자 로드맵 개발자가 되기.. 2 2 G.dong 홍길동 22
4 Java공부하기 Java 공부는 .. NULL NULL NULL NULL NULL

그 결과 위와 같은 테이블이 만들어 졌으며 각 게시글의 작성자에 대한 정보를 한 눈에 볼 수 있게 됐다.

left join을 하였기 때문에 왼쪽에 위치한 A 테이블(게시글 테이블)이 기준이 되어 조인 됐다. 따라서 A 테이블에서 id_num에 대한 정보가 없는 글은 글을 쓴 회원을 찾을 수 없어 NULL값 처리가 된 것을 볼 수 있다.

 

 

INNER JOIN

 기존 테이블과 JOIN한 테이블의 중복된 값을 보여준다. 쉽게 교집합이라 생각하면 되겠다. 

INNER JOIN은 두 테이블 모두에서 존재하는 값만 출력되기 때문에 LEFT조인과는 다르게 NULL값이 없다.

 

앞서 사용했던 A, B테이블을 활용해 INNER JOIN을 해보자.

 

SELECT *
FROM A
INNER JOIN B
ON A.id_num = B.id_num;
게시글 번호 제목 내용 A.id_num B.id_num id 이름 나이
1 DB에 대하여 DB는 DataBase의.. 1 1 test1 김철수 15
2 Join이란 Join을 하기 위해.. 1 1 test1 김철수 15
3 개발자 로드맵 개발자가 되기.. 2 2 G.dong 홍길동 22

A테이블과 B테이블의 공통 컬럼인 id_num을 기준으로 테이블이 조인되며, 데이터가 있는 컬럼만 출력되기 때문에 테이블에 NULL값이 없다.

 

 

SELF JOIN

셀프조인은 똑같은 테이블을 마치 다른 테이블인 것처럼 대치시켜 조인하는 것이다. 때문에 한 테이블을 각각 다른 ALIAS명(AS 별칭)을 통해 두개로 구분하여 사용한다.

'프로그래밍 > DataBase' 카테고리의 다른 글

[DataBase]AS  (0) 2021.03.22
[DataBase]DESC  (0) 2021.03.22
[DataBase]서브쿼리  (0) 2021.03.10
[DataBase]제약조건  (1) 2021.03.08
[DataBase]DDL, DML, DCL  (0) 2021.03.08