SQL 정리 : Join

Notura·2024년 9월 11일
post-thumbnail

Join문 배우기


Join문 실습

SELECT contents, username
FROM comments
JOIN users ON user.id = comments.user_id;

-> comments 테이블을 임시 복사하고 FK인 user_id와 같은 값을 가지는 user 테이블의 id값을 매핑시키고 그 컬럼의 username 값을 복사해온다.


Join에 관한 중요한 점

  1. FROM comments JOIN users != FROM users JOIN comments
    -> 아래 4가지 방식의 Join을 이해하면 다르다는 것을 알 수 있다.

  2. 만약 둘다 id 라는 속성을 가지고 있는데 Join후에 Select를 한다면??

SELECT id
FROM comments
JOIN users ON user.id = comments.user_id;

-> ERROR!!! 그렇다면 해결책은?

SELECT comments.id  // 구체적인 속성값을 명시해준다!
FROM comments
JOIN users ON user.id = comments.user_id;

추가적인 내용

SELECT comments.id AS comment_id, photos.id AS photos_id
FROM comments
JOIN users ON user.id = comments.user_id;

Join 후에 양쪽 테이블의 id 값을 가져올때 이름을 붙여서 구분지어서 가져온다.


4가지 방식의 Join

  1. Inner Join (Default Join) : Join의 주체인 A의 FK 값이 매핑되어야 값을 가져오는 방식. 그냥 Join 키워드만 사용하면 이 방식이 사용된다.
SELECT url,username
FROM photos
INNER JOIN users ON user.id = photos.user_id;
  1. Left Join (Left Outer Join) : Join의 주체인 A 테이블은 모두 가져오고 FK에 매핑되는 키가 없으면 NULL로 채운다.
SELECT url,username
FROM photos
LEFT JOIN users ON user.id = photos.user_id;
  1. Right Join (Right Outer Join) : Join의 대상인 B 테이블은 모두 가져오고 B 테이블의 PK에 매핑되는 FK가 없는 속성은 NULL로 채운다.
SELECT url,username
FROM photos
RIGHT JOIN users ON user.id = photos.user_id;
  1. Full Join : A, B 테이블을 모두 가져오고 매핑되지 않는 행들의 속성은 NULL로 채운다.
SELECT url,username
FROM photos
FULL JOIN users ON user.id = photos.user_id;

Join과 Where 함께 쓰기

만약 본인의 사진에 댓글을 단 사람을 알고자 한다면?

SELECT url,contents
FROM comments
JOIN photos ON photos.id = comments.photo_id
WHERE comments.user_id = photos.user_id;

3중 Join

3개의 테이블을 조건과 함께 Join하는 방법을 알아보자

SELECT title, name, rating
FROM reviews
JOIN books ON books.id = reviews.book_id;
JOIN authors ON authors.id = reviews.reviewer_id AND authors.id = books.author_id;

-> 두번째 Join 문에서 where 키워드 없이 조건을 통해서 3개의 테이블을 Join 하는 방식이다. 이 실습은 마지막 authors 테이블의 PK와 book과 review에 있는 작가의 FK가 같아야지 Join이 된다는 조건의 문제였다.


profile
고통을 즐기자

0개의 댓글