본문 바로가기

RDB

SQL - JOIN 이해하기

 

JOIN

Join이란 두 개 이상의 테이블을 서로 묶어서 하나의 결과 집합으로 만들어 내는 것을 말한다. 데이터베이스의 테이블은 중복과 공간 낭비를 피하고 데이터의 무결성을 위해서 여러 개의 테이블로 분리하여 저장한다. 그리고 이 분리 된 테이블들은 서로 관계를 맺고 있다.

보통 PK 또는 FK로 두 테이블을 연결함

 

INNER JOIN(내부 조인)

INNER JOIN은 JOIN 중에서 가장 많이 사용되는 JOIN이다.

교집합이라고 많이 설명한다. 여기서 교집합이라는 것은, 특정 조건에 맞는 행들만 포함시키고 그렇지 않은 행들은 제외시킨다는 뜻이다.

--형식
SELECT <열 목록>
FROM <첫 번째 테이블>
	INNER JOIN <두 번째 테이블>
	ON <조인 될 조건>
WHERE 검색조건

 

OUTER JOIN(외부 조인)

OUTER JOIN은 조인의 조건에 만족되지 않는 행까지도 포함시키는 JOIN이다. 

LEFT JOIN

SELECT <열 목록>
FROM <첫 번째 테이블>
  LEFT OUTER JOIN <두번째 테이블>
  ON <검색될 조건>

LEFT OUTER JOIN은 INNER JOIN의 결과에 첫 번째 테이블에 있는 모든 값들이 나온다

SELECT * FROM user LEFT OUTER JOIN car ON user.id = car.user_id;

Q. 만약 왼쪽과 오른쪽 테이블을 바꾼다면?

A. 반대로 앞 쪽에 있는 테이블의 결과가 모두 나오게 된다.

* LEFT OUTER JOIN 대신 LEFT JOIN이라고 할 수도 있다.

 

RIGHT JOIN

SELECT <열 목록>
FROM <첫 번째 테이블>
  RIGHT OUTER JOIN <두번째 테이블>
  ON <검색될 조건>

RIGHT JOIN은 LEFT JOIN과 유사한데, 두 번째 테이블에 있는 모든 값들이 나온다.

그러니까 두 sql의 결과는 같게 되는 것이다.

SELECT * FROM user LEFT OUTER JOIN car ON user.id = car.user_id;
SELECT * FROM car RIGHT OUTER JOIN user ON user.id = car.user_id;

 

FULL JOIN(전체 조인 또는 전체 외부 조인)

SELECT <열 목록>
FROM <첫 번째 테이블>
  RIGHT OUTER JOIN <두번째 테이블>
  ON <검색될 조건>

FULL JOIN은 간단히 LEFT JOIN + RIGHT JOIN이라고 생각하면 된다. 즉, 한쪽을 기준으로 조건과 일치하지 않는 것을 출력하는 것이 아니라, 양쪽 모두에 조건이 일치하지 않는 것을 모두 출력하는 개념이다.

 

UNION JOIN

UNION JOIN은 두 쿼리의 결과를 행으로 합치는 것을 말한다.

SELECT 문장1
	UNION ALL
SELECT 문장2
  • SELECT 문장1과 SELECT 문장2의 결과 열의 개수가 같아야 한다.
  • 데이터 형식도 각 열 단위로 같거나 서로 호환되는 데이터 형식이어야 한다. 예를 들어 문장 1의 결과는 INT인데 문장1의 결과는 CHAR이라면 오류가 발생할 것이다.
  • 열 이름은 문장1의 열 이름에 따른다.
  • UNION만 사용하면 중복 된 열은 제거되고 데이터만 정렬되어 나오며, UNION ALL을 사용하면 중복된 열까지 모두 출력된다.

 

 

출처 : velog.io/@hj8853/SQL-JOIN%EC%9D%98-%EC%9D%B4%ED%95%B4 & lannstark.tistory.com/m/11

'RDB' 카테고리의 다른 글

SQL - [NOT] IN과 [NOT] EXISTS의 차이  (0) 2020.10.23