데이터베이스

[mysql] JOIN

엉으니 2016. 2. 18. 01:59

-- 참고 : 생활코딩 mysql수업

JOIN이란?

데이터 규모가 커지면서 하나의 테이블로 정보를 수용하기가 어려워지면 테이블들을 분할하고 테이블들의 관계를 부여하여

분리되어있던 정보를 합치는 작업이다.

테이블을 분할하는 요령은 같은 종류의 데이터가 여러개의 열로 표현해야한다면 분할시킨다.

예를들면 첨부파일1, 첨부파일2, 첨부파일3... 처럼 데이터 수가 많이 늘어나야한다면

첨부파일 테이블을 따로 만든다.

모델링은 심오하고 복잡한 이야기이니 지금은 이정도로만 하고 조인에 대해서 이야기한다.


크게 세가지 종류가 있다.

INNER JOIN / OUTER JOIN / SELF JOIN


1. INNER JOIN (내부 조인)

 --조인하는 두 개의 테이블 모두에 데이터가 존재하는, 관계있는 데이터만 합쳐준다.

 --자식이 있는 부모만 나오고, 부모 있는 자식만 나온다.

 --부모나 자식이 없다면 나오지 않는다.

예제)

SELECT b.TITLE, b.WRITER, b.SUMMARY, u.NAME, u.USER_ID  //뽑고싶은 열 선택

FROM books AS b INNER JOIN user AS u // 테이블 선택 및 조인

ON b.READER_ID = u.id; // 관계 맺기

>> 게시글이나 덧글달기에 쓸 수 있다. (게시글이나 덧글은 관계있는 리스트만 나옴)


2. OUTER JOIN (외부 조인)

 --참조키를 기준으로 매칭되는 행이 없어도 결과를 가져온다.

 --매칭되는 행이 없는 경우는 NULL로 표시

 --LEFT JOIN (쿼리문의 왼쪽에 있는 테이블을 기준으로 오른쪽 테이블의 데이터를 가져옴)/ 

   RIGHT JOIN (쿼리문의 오른쪽에 있는 테이블을 기준으로 왼쪽 테이블의 데이터 가져옴) 이 있다.

예제)

SELECT b.TITLE, b.WRITER, b.SUMMARY, u.ID, u.NAME, u.USER_ID

FROM books b LEFT JOIN user u

ON b.READER_ID = u.ID; 

WHERE b.LIKES<10;


3. SELF JOIN (셀프 조인)

 --자신의 테이블을 조인할 때 쓴다.

 --게시글이 다른 게시글을 참조하고 있을 때 (답글)

 --데이터가 서로 포함 관계를 가지는 경우 (담당, 구성, 연락 등)

예제)

SELECT u.ID, u.NAME, u.USER_ID, b.ID, b.NAME AS BOSS

FROM USER u

LEFT JOIN USER b

ON b.ID = u.boss_id;

반응형

'데이터베이스' 카테고리의 다른 글

[mysql] VIEW  (0) 2016.02.18
[mysql] UNION  (0) 2016.02.18
[mysql] index  (0) 2016.02.12
[mysql] 데이터 조회 (select문)  (0) 2016.02.09
[mysql] 데이터 삽입, 수정, 삭제  (0) 2016.02.02