MySQL_JOIN

naughty _deer·2022년 4월 26일
0

MySQL

목록 보기
9/13
post-thumbnail

Table 사용에 있어 기본적인 마인드 셋

모든 표는 하나의 주제만 가져야 한다.

  • 표를 나누면 유지 관리하기 편하지만 읽기 불편하다.
  • 표를 나누지 않으면 읽기 편하지만 유지 관리하기 불편하다.

=> 이를 해결하기 위한 JOIN

FROM ~에서, 기존 테이블 LEFT JOIN 대상 테이블 ON 연결 키
FROM ~에서, 기존 테이블 LEFT OUTER JOIN 대상 테이블 ON 연결 키
FROM ~에서, 기존 테이블 INNER JOIN 대상 테이블 ON 연결 키
FROM ~에서, 기존 테이블 JOIN 대상 테이블 WHERE 연결 키
FROM ~에서, 기존 테이블,(콤마) 대상 테이블 WHERE 연결 키

연결키 부분이 JOIN ~ WHERE 연결키 AND로 묶여도 가능.
(LEFT JOIN은 안됨)

JOIN에 대한 직관적인 이해를 위한 사이트
https://sql-joins.leopard.in.ua/

LEFT JOIN (LEFT OUTER JOIN)

FROM 기존의 테이블
LEFT JOIN 붙이고자하는 테이블
ON 연결키

왼쪽의 표를 기준으로 계속 표를 붙일 수 있다.
기준 테이블엔 값이 있지만, 대상 테이블에 연결되는 값이 없다면 전부 NULL로 표시된다.
대상 테이블엔 값이 있지만, 기준 테이블에 연결되는 값이 없다면 무시된다.

이와 반대로 RIGHT JOIN이 있다. (거의 안씀.)

INNER JOIN (교집합)

FROM 기존의 테이블
INNER JOIN 붙이고자하는 테이블
ON 연결키

','로 묶는 것도 교집합이다.

기준 테이블엔 값이 있지만, 대상 테이블에 모두 값이 있어야 표시된다.
둘 중 하나라도 연결되는 값이 없다면 무시된다.

같은 결과를 만들지 않지만,NULL을 빼버리니까 LEFT JOIN보다 상대적으로 성능이 좋다.

FULL OUTER JOIN (합집합)

FROM 기존의 테이블
FULL OUTER JOIN 붙이고자하는 테이블
ON 연결키

기존의 명령어로도 구현 가능

이론적으로는
LEFT JOIN + RIGHT JOIN - INNER JOIN
(LEFT JOIN) UNION (RIGHT JOIN)
UNION 에는 DISTINCT가 생략되어 있다. (자동으로 중복 제거)

profile
개발자로 취업하기

0개의 댓글