1. JOIN

JOIN은 두개 이상의 테이블을 결합한 것이다.

1.1 INNER JOIN

INNER JOIN교집합으로 두 개의 테이블에서 공통된 요소들을 통해 결합하는 조인 방식이다.

INNER JOIN 문법

SELECT column1, column2, ...
FROM celeb
INNER JOIN tableB
ON tableA.column = tableB.column
WHERE condition;

Example: k_drama에 출연한 celebrity를 기준으로 celebrity 테이블과 k_drama 테이블을 INNER JOIN하기

SELECT celebrity.id, celebrity.name, k_drama.id, k_drama.host
FROM celebrity
INNER JOIN k_drama
ON celebrity.name = k_drama.host;

왼쪽의 결과값은 celebrity 테이블에서 가져온 데이터이고 오른쪽의 결과값은 k_drama 테이블에서 가져온 데이터이다.

참고로 여기서 INNER JOIN은 수평으로 데이터를 결합시키고 UNION은 수직으로 데이터를 결합시킨다.

  • 2개 이상의 테이블을 사용하면 이름이 같은 열(column)에 한해서는 어느 테이블에 있는 column인지 tablename.column와 같이 명시를 꼭 해줘야한다.
  • 해당 테이블에만 존재하는 열(column)은 어느 테이블인지 명시를 안해줘도 된다.
  • 하지만, 2개 이상의 테이블을 사용 시 해깔릴 위험이 있기 때문에 각 테이블 이름을 써주는게 좋다.

1.2 LEFT JOIN

LEFT JOIN은 두 개의 테이블에서 공통 영역을 포함해 왼쪽 테이블의 다른 데이터를 포함하는 조인 방식이다.

LEFT JOIN 문법

SELECT column1, column2, ...
FROM tableA
LEFT JOIN tableB
ON tableA.column = tableB.column
WHERE condition;

Example: k_drama에 출연한 celebrity를 기준으로 celebrity 테이블과 k_drama 테이블을 LEFT JOIN하기

SELECT celebrity.id, celebrity.name, k_drama.id, k_drama.host
FROM celebrity
LEFT JOIN k_drama
ON celebrity.name = k_drama.host;

1.3 RIGHT JOIN

RIGHT JOIN은 'LEFT JOIN'과 반대로, 반대의 두개의 테이블에서 공통 영역을 포함해 오른쪽 테이블의 다른 데이터를 포함하는 조인 방식이다.

RIGHT JOINT 문법

SELECT column1, column2, ...
FROM tableA
RIGHT JOIN tableB
ON tableA.column = tableB=column
WHERE condition;

Example: k_drama에 출연한 celebrity를 기준으로 celebrity 테이블과 k_drama 테이블을 RIGHT JOIN하기

SELECT celebrity.id, celebrity.name, k_drama.id, k_drama.host
FROM celebrity
RIGHT JOIN k_drama
ON celebrity.name = k_drama.host;

1.4 FULL OUTER JOIN

FULL OUTER JOIN합집합으로 두개의 테이블에서 공통 영억을 포함하여 양쪽 테이블의 다른 영역을 모두 포함하는 조인 방식이다.

FULL OUTER JOIN 문법

SELECT column1, column2, ...
FROM tableA
FULL OUTER JOIN tableB
ON tableA.column = tableB=column
WHERE condition;

Example: k_drama에 출연한 celebrity를 기준으로 celebrity 테이블과 k_drama 테이블을 FULL OUTER JOIN하기

SELECT celebrity.id, celebrity.name, k_drama.id, k_drama.host
FROM celebrity
FULL OUTER JOIN k_drama
ON celebrity.name = k_drama.host;

위와 같이 query를 진행 시 syntax 에러(문법 에러)가 난다. 그 이유는 현재 MySQL에서는 FULL OUTER JOIN을 지원하지 않으므로 생기는 에러다.

따라서 FULL OUTER JOIN 대신 다음과 같은 query를 사용할 수 있다.

SELECT column1, column2, ...
FROM tableA
LEFT JOIN tableB
ON tableA.column = tableB.column
UNION
SELECT column1, column2, ...
FROM tableA
RIGHT JOINT tableB
ON tableA.column = tableB.column
WHERE condition;

Example: k_drama에 출연한 celebrity를 기준으로 celebrity 테이블과 k_drama 테이블을 FULL OUTER JOIN하기

SELECT celebrity.id, celebrity.name, k_drama.id, k_drama.host
FROM celebrity
LEFT JOIN k_drama
ON celebrity.name = k_drama.host
UNION
SELECT celebrity.id, celebrity.name, k_drama.id, k_drama.host
FROM celebrity
RIGHT JOINT k_drama
ON celebrity.name = k_drama.host;

1.5 SELF JOIN

SELF JOIN은 가장 많이 사용되는 조인 방식으로 문법상 다르지만 INNER JOIN과 같은 결과값을 가져온다.

SELF JOIN 문법

SELECT column1, column2, ...
FROM tableA, tableB, ...
WHERE condition;
/* SELF JOIN의 조건은 WHERE 절에 명시되며,
이 조건에 따라 테이블 내의 행이 서로 비교된다. */

Example 1: k_drama에 출연한 celebrity를 기준으로 celebrity 테이블과 k_drama 테이블을 SELF JOIN하기

SELECT celebrity.id, celebrity.name, k_drama.id, k_drama.host
FROM celebrity, k_drama
WHERE celebrity.name = k_drama.host;

오늘은 JOIN 문에 대해서 배웠다. 오랜만에 교집합과 합집합의 다이어그램을 보아서 반가웠다. 반가움을 뒤로한 채 문제들이 점점 뒤로 갈수록 꼬여서 나온다..ㅋㅋㅋ 그래도 아직은 혼자서 풀만 하다.

profile
거북선통통통통

0개의 댓글