조인은 다른 테이블을 연결할 때 사용한다. 조인조건을 기준으로 두 테이블을 하나로 합친다.
Inner Join
서로다른 테이블에 있는 데이터를 가져올 때 사용한다. ex) 특정 게시글에 작성된 댓글내용을 가져온다.
1번 게시글에 달린 댓글내용과 사용자명을 가져오자
SELECT 댓글내용, 사용자명
FROM comments
JOIN users ON
users.id = comments.id
WHERE comments.posts_id = 1
작동방식
JOIN~ON절에서 =기호로 같은 조건인 복수개의 데이터만 남는다.
users.id 1, comments.posts_id 1 ~~~
user.id 1, comments.posts_id 2 ~~~~
user.id 1, comments.posts_id 1 ~~~~
user.id 1, comments.posts_id 4 ~~~~
user.id 1, comments.posts_id 1 ~~~~
이렇게 걸러진 데이터를 where절에서 한번 더 걸러서 최종 결과물을 출력한다.
1번 게시글을 좋아요 한 사용자 닉네임과 해당 게시글의 파일명 -> 3중조인
SELECT 닉네임, 파일명
FROM likes
JOIN users ON user.id = likes.user_id
JOIN posts ON posts.id = likes.posts.id
WHERE posts.id = 2;
작동 방식
JOIN으로 테이블을 다 붙인뒤에 where절로 필요한 부분만 남긴다.
4중 5중조인도 위처럼 join으로 다 붙이고 where절로 커트를한다.
LEFT JOIN
INNER JOIN의 결과 + 왼쪽 테이블의 모든 값을 다 가져옴
정리하자면 LEFT JOIN은 테이블의 공통요소를 조인한 뒤 왼쪽 테이블에 남은 요소들을 다 가져온다.
테이블
모든 사진의 파일명을 조회하시오. 게시자가 있다면 닉네임도 함께 가져올 것
SELECT 파일명, 닉네임
FROM photos
LEFT JOIN users ON
users.id = photos.user_id
LEFT테이블은 FROM에 적혀있는 테이블이 된다.
모든 댓글 내용을 조회하시오. 단 댓글이 달린 사진의 파일명도 함께 가져올 것
SELECT 댓글 내용, 파일명
FROM comments
LEFT JOIN photos ON
phtos.id = comments.photo_id
추가
JOIN 이후에 조건을 추가할 수 있다.
해당 사진에 댓글 내용이 길동인 사람만 조인하고 싶다면
LEFT JOIN photos ON
phtos.id = comments.photo_id
AND comments.body = "길동"
RIGHT JOIN
RIGHT JOIN은 우측 테이블을 기준으로 좌측 테이블에 붙인다.
FULL JOIN
왼쪽 오른쪽 모든 값을 다 조인한다.
'IT > 프로젝트 개발 중 발생한 에러' 카테고리의 다른 글
DockerCompose + SpringBoot + Mysql Connection refuse에러 (0) | 2022.09.22 |
---|---|
스프링시큐리티 + JWT 로그인 시 토큰 유효성검사 에러 (0) | 2022.09.19 |
스프링시큐리티 401에러와 body가 빈 상태코드 200리턴 (0) | 2022.09.16 |
AWS EC2 서버 이전시 발생한 이슈들 -SQLGrammarException: could not extract Result Set (0) | 2022.09.07 |
AWS EC2 ubuntu 배포 스프링부트 + React (0) | 2022.08.05 |