데이터베이스에서 게시글 정보를 꺼낼 때
'게시글'이라는 한 테이블이 게시글에 대한 모든 정보를 갖고있지 않는다.
예를 들면
우리가 한 게시글을 보면 게시글의
제목,
내용
뿐만 아니라
게시글을 쓴 사람,
게시글의 첨부파일,
게시글에 대한 좋아요수 등
완전 직접적이진 않은(?) 정보 또한 보여주고 있다.
이 게시글의 모든 정보를 데이터베이스에서 꺼낼 때
[게시글] 테이블엔 게시글의 '제목', '내용' 을 갖고있고
[유저] 테이블에 게시글을 쓴 '사람 정보'
[게시글 좋아요] 테이블에 게시글과 좋아요 한 사람의 매칭되는 정보가 들어있다.
그리고 클라이언트가 게시글 정보 조회를 요청하면
서버는 이 세 테이블의 내용을 합쳐서 응답 데이터로 보내줘야 한다.
여기서 두가지 방법이 있다
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 = ?
이렇게 한 번의 교류를 통해 한 정보의 여러 속성들을 꺼내올 수 있다.
반응형
'인포테인먼트 - development > sql' 카테고리의 다른 글
[MySQL] MySQL 프로파일링 - 쿼리문 성능 비교 (0) | 2020.04.10 |
---|---|
[MySQL] Can't connect to local MySQL server through socket '/tmp/mysql.sock' 에러 해결 (0) | 2020.04.08 |
[MySQL] 프로시저를 사용한 cursor loop fetch 적용(sql의 for문) (0) | 2020.04.06 |
[MySQL] Insert 할 때 특정 컬럼만 select (0) | 2020.03.31 |
[MySQL] ORDER BY에 여러가지 기준과 선순위/후순위가 있을 때 (0) | 2020.03.03 |
댓글