[SQL] JOIN

yrok·2023년 10월 14일
post-thumbnail

topic, author, profile 테이블로 실습

  1. topic
  1. author
  1. profile

📌 LEFT JOIN

기준이 되는 표를 왼쪽에 두고, 이 표를 기준으로 오른쪽의 표를 합성해서 하나의 표를 만드는 방법이다.

topic 테이블의 author_id와 author 테이블의 aid가 같은 데이터 LEFT JOIN

SELECT * FROM topic LEFT JOIN author ON topic.author_id = author.aid;
  1. topic 테이블 나열
  2. author 테이블 column 붙이기
  3. topic.author_id와 author.aid 값이 같은 데이터 삽입

LEFT JOIN은 왼쪽의 모든 행을 조회한다. topic.author_id 필드 값이 null 이면 author 테이블은 해당 행이 존재하지 않으므로 해당 행의 필드 값들은 null로 채워진다.

위 데이터에 profile_id와 profile 테이블의 pid가 같은 데이터 LEFT JOIN

SELECT * FROM topic LEFT JOIN author ON topic.author_id = author.aid LEFT JOIN profile ON author.profile_id = profile.pid;
  1. 위에서 처리된 테이블 나열
  2. profile 테이블 column 붙이기
  3. author.profile_id와 profile.pid가 같은 데이터 삽입

📌 INNER JOIN


두 테이블의 교집합을 나타낸다. 겹치지 않는 행이 존재할 경우, 그 행은 결과에서 제외된다.

SELECT * FROM topic INNER JOIN author ON topic.author_id = author.aid;
LEFT JOIN과 비교했을 때 author_id 필드 값이 null인 행의 데이터가 사라졌다.

SQL 쿼리문에서 JOIN만 입력할 경우 기본 값이 INNER JOIN이다.

SELECT * FROM topic JOIN author ON topic.author_id = author.aid JOIN profile ON author.profile_id = profile.pid;

📌 FULL OUTER JOIN


두 테이블의 합집합을 나타낸다.

SELECT * FROM topic FULL OUTER JOIN author ON topic.author_id = author.aid;

많은 DB에서 FULL OUTER JOIN을 지원하지 않는다. 따라서, LEFT JOIN, RIGHT JOIN, UNION을 활용하여 FULL OUTER JOIN을 구현할 수 있다.

SELECT * FROM topic LEFT JOIN author ON topic.author_id = author.aid
UNION
SELECT * FROM topic RIGHT JOIN author ON topic.author_id = author.aid;

❗ UNION = UNION (DISTINCT)
UNION은 UNION DISTINCT에서 DISTINCT가 생략된 표기법이다. 따라서, UNION을 사용해 테이블을 합칠 때 중복을 제거한다.

topic 테이블에만 존재하는 tid = 4 row, author 테이블에만 존재하는 aid = 3 row가 모두 출력되는 것을 확인할 수 있다.
profile
공부 일기장

0개의 댓글