개발 창고/Database

[SQL] JOIN이란? - INNER JOIN

로이제로 2020. 9. 15. 09:40
반응형

 데이터 베이스를 쓰다 보면 join이라는 말을 많이 듣게 됩니다. 간략하게 이야기하면

"JOIN은 두 테이블을 하나의 테이블로 만드는 것"

 이라고 보시면 됩니다.

 

 이게 무슨 뜻일까요??

 

 일단 두 개의 테이블이 있다고 가정해보겠습니다.

 

 보통 게시판 예시가 많으니 게시글(TB_BOARD)과 코멘트(TB_BOARD_COMMENT)에 대한 예로 해보겠습니다.

 

  TB_BOARD

 

  TB_BOARD_COMMENT

 

 게시글과 코멘트는 게시글번호(BBS_SEQ)로 이어져 있다고 가정하면 (BBS_SEQ가 TB_BOARD_COMMENT의 Foreign Key) 다음과 같이 작성해볼 수 있습니다.

 

  INNER JOIN (내부 조인)

 INNER JOIN은 일반적으로 가장 많이 활용하는 결합으로, 두 테이블 조건절을 통해 일치하는 경우에만 결합하는 거라 할 수 있습니다.

 

 일단 문법은 다음과 같습니다.

/* 명시적(explicit) INNER JOIN 표현 */
SELECT *
  FROM 테이블1
 INNER JOIN 테이블2
     ON 테이블1.컬럼1 = 테이블2.컬럼1 [AND 테이블1.컬럼2 = 테이블2.컬럼2 ... ]

/* 암시적(implicit) INNER JOIN 표현 */
SELECT *
  FROM 테이블1
     , 테이블2
 WHERE 테이블1.컬럼1 = 테이블2.컬럼1
   [AND 테이블1.컬럼2 = 테이블2.컬럼2 ... ]

 

 조인 방식에는 일반적으로 두 가지 방식을 사용합니다. 명시적 조인과 암시적 조인인데, 명시적 조인은 어떤 JOIN을 쓰겠다고 사전에 알려주는 방식인 거고, 암시적 조인은 일단 FROM절에서 콤마(,)를 사용하고 이후에 WHERE절에서 조건절로 표현해주는 방식입니다.

 

 개발자에 따라서 선택적으로 사용가능하지만, 이왕이면 유지보수를 위해서라도 명시적인 방식을 쓰는 걸 권장하는 편입니다(지극히 개인적인 의견). 이유는 암시적 표현을 사용한 경우, 일반적으로 JOIN을 위해 쓴 조건절과 조회 조건을 위해 사용한 조건절이 한 곳에서 표현되어야 하기 때문에, 한참 개발 중에 또는 새로운 개발자가 투입되는 경우에 이를 해석하는데 애를 먹을 수 있기 때문입니다.

 

SELECT *
  FROM TB_BOARD
 INNER JOIN TB_BOARD_COMMENT
    ON TB_BOARD.BBS_SEQ = TB_BOARD_COMMENT.BBS_SEQ

만약 위의 예시 테이블을 다음과 같이 INNER JOIN한다면 아래와 같은 결과가 나오게 됩니다.

 보시면 TB_BOARD의 컬럼 BBS_SEQ, BBS_TITLE, BBS_CONT, CREATE_DTM 이후에 TB_BOARD_COMMENT의 CMNT_SEQ, BBS_SEQ, CMNT_CONT, CREATE_DTM이 순차적으로 표현되었음을 알 수 있습니다. 그리고 또 특이점으로 TB_BOARD의 BBS_SEQ 3번이 결과로 표현되지 않았음을 알 수 있습니다. 이는 BBS_SEQ기준으로 둘이 일치하는 데이터만을 표현했음을 의미합니다.

 

 

 INNER JOIN의 경우 다음과 같이 TB_BOARD의 1번과 2번의 BBS_SEQ 값은 은 TB_BOARD_COMMENT의 1~3번의 BBS_SEQ값과 일치하기 때문에 조인되어 보이게 되고 TB_BOARD의 3번의 BBS_SEQ값은 TB_BOARD_COMMENT의 BBS_SEQ에 매칭 되는 값이 없기 때문에 결과에서 제외되게 됩니다.

반응형

'개발 창고 > Database' 카테고리의 다른 글

[SQL] JOIN이란? - CROSS JOIN  (0) 2020.09.17
[SQL] JOIN이란? - OUTER JOIN  (0) 2020.09.16
[SQL] WITH절 사용하는 방법  (11) 2020.09.02
[SQL] SELECT 기본문법(2)  (0) 2020.08.25
[SQL] SELECT 기본문법(1)  (1) 2020.08.25