본문 바로가기
  • 포르쉐타고싶다
인포테인먼트 - development/sql

[MySQL] 여러 테이블 합쳐서 SELECT하기 - JOIN ~ ON ~

by 지오ㄴl 2020. 3. 1.

데이터베이스에서 게시글 정보를 꺼낼 때

'게시글'이라는 한 테이블이 게시글에 대한 모든 정보를 갖고있지 않는다.

 

예를 들면

우리가 한 게시글을 보면 게시글의

 

제목,

내용

 

뿐만 아니라

 

게시글을 쓴 사람,

게시글의 첨부파일,

게시글에 대한 좋아요수 등

 

완전 직접적이진 않은(?) 정보 또한 보여주고 있다.

 

이 게시글의 모든 정보를 데이터베이스에서 꺼낼 때

[게시글] 테이블엔 게시글의 '제목', '내용' 을 갖고있고

[유저] 테이블에 게시글을 쓴 '사람 정보'

[게시글 좋아요] 테이블에 게시글과 좋아요 한 사람의 매칭되는 정보가 들어있다.

 

그리고 클라이언트가 게시글 정보 조회를 요청하면

서버는 이 세 테이블의 내용을 합쳐서 응답 데이터로 보내줘야 한다.

 

여기서 두가지 방법이 있다

1) 데이터베이스에서 세 테이블 내용을 합쳐서 서버로 가져오기

2) 데이터베이스에서 세 테이블의 내용을 따로 가져와 서버에서 합치기

 

서버와 데이터베이스간의 교류가 적을수록 경제적이기 때문에

1) 을 위한 쿼리문을 소개하고자 한다

 

먼저 게시글과 게시글 글쓴이 정보를 합쳐보자.

바로 쿼리문을 보면



  SELECT
  r.review_idx, r.review_comment, u.user_idx, u.user_name
  FROM review AS r
  JOIN user AS u
  ON u.user_idx = r.user_idx
  WHERE r.review_idx = ?
  ORDER BY review_idx DESC;


 

특직점들을 한번 분석해보자

 



  SELECT
  r.review_idx, r.review_comment, u.user_idx, u.user_name 
  FROM review AS r	// 메인 테이블인 review테이블을 r로 치환
  JOIN user AS u	// 합칠 (user)테이블 선택 => 'JOIN', 합칠 테이블도 치환 => 'AS u'
  ON u.user_idx = r.user_idx	//user 테이블 안에서 어떤 유저를 선택할 것인가 => 'ON (조건)'
  WHERE r.review_idx = ?	// 조건의 근원이 뭔데? => 'WHERE ~~'


 

이렇게 데이터베이스와 한 번의 교류를 통해 여러 테이블 정보를 합쳐 가져올 수 있는 것이다

 

그렇다면 세 개의 테이블을 합쳐볼까

마찬가지다. 다른 한 테이블도 똑같이

'JOIN (테이블 명) AS (치환할 문자) ON (조건)'

을 

WHERE 전에 붙여주면 된다

 



  SELECT
  r.review_idx, r.review_comment, u.user_idx, u.user_name, i.review_img_uri
  FROM review AS r
  JOIN user AS u
  ON u.user_idx = r.user_idx
  
  JOIN reviewImg AS i	//reviewImg테이블을 i로 치환해서 합칠 것이다
  ON i.review_idx = r.review_idx	//메인인 review 테이블과 review_idx가 같은 reviewImg들을 말이다!
  
  WHERE r.review_idx = ?


 

이렇게 한 번의 교류를 통해 한 정보의 여러 속성들을 꺼내올 수 있다.

반응형

댓글