코딩/모음

[SQL] PostgreSQL Join 에 대해서

josh27 2021. 5. 16. 04:45

두 개 이상의 테이블에 동시에 접근하여 쿼리를 실행할 때 JOIN을 사용한다.

JOIN의 종류로는

  • INNER JOIN
  • OUTER JOIN
    • LEFT
    • RIGHT
    • FULL
  • SELF JOIN

이 있다.

 

벤다이어그램으로 보면 아래와 같다.

https://www.javatpoint.com/postgresql-join

 

아래 user와 address 라는 테이블이 있다고 하면

name age
제임스 25
마크 34
크리스 29
name city
제임스 서울
마크 경기
줄리엔 부산

INNER JOIN

INNER JOIN 은 user 에도 존재하고 address 에도 존재하는 제임스, 마크 데이터만 보여준다.

JOIN은 FROM 절 뒤에 붙여주고, ON 절에서 JOIN 하는 조건을 쓴다.

SELECT *
FROM user
INNER JOIN address
ON user.name = address.name;

결과는 양쪽 테이블에 존재하는 제임스와 마크만 나온다.

user.name user.age address.name address.city
제임스 25 제임스 서울
마크 34 마크 경기

LEFT OUTER JOIN 

OUTER JOIN은 기준에 따라 LEFT, RIGHT 가 붙는다. OUTER는 생략 가능하다.

SELECT *
FROM user
LEFT JOIN address
ON user.name = address.name;

크리스는 address 테이블에 존재하지 않아 데이터는 NULL로 표시된다

결과는

user.name user.age address.name address.city
제임스 25 제임스 서울
마크 34 마크 경기
크리스 29 NULL NULL

RIGHT OUTER JOIN

LEFT JOIN 이 아니라 RIGHT JOIN이라면 

기준 테이블이 address 가 되어서 크리스 데이터는 나오지 않게 된다. 대신 줄리엔 정보가 나온다.

 

FULL OUTER JOIN

일단 존재하는 모든 데이터가 다 나온다. 나머지는 NULL로 채워진다.

 

user.name user.age address.name address.city
제임스 25 제임스 서울
마크 34 마크 경기
크리스 29 NULL NULL
NULL NULL 줄리엔 부산

SELF JOIN

서로 다른 테이블이 아닌 자기 자신을 참조해서 JOIN을 하는 방법이다. 한 테이블 안에서 참조하는 데이터가 있을 때 사용 가능하다. 예를들면 제임스는 선생님이고 마크와 크리스는 학생인 데이터를 아래처럼 표시한다면, 

id name teacher
1 제임스 NULL
2 마크 1
3 크리스 1
SELECT A.id, A.name, A.teacher
FROM user A
INNER JOIN user B
ON A.id = B.id;

이 쿼리는 학생들만 조회한다. 제임스는 teacher 컬럼이 NULL 이어서 포함되지 않는다.

A.id A.name A.teacher
2 마크 1
3 크리스 1

 

INNER JOIN 대신

INNER JOIN 을 사용하는 대신 JOIN할 테이블을 FROM 절에 넣고, WHERE 절에서 ON 조건을 명시하는 방법도 가능하다.

SELECT *
FROM user
INNER JOIN address
ON user.name = address.name;


SELECT *
FROM user u, address a
WHERE u.name = a.name;
반응형