두 개 이상의 테이블에 동시에 접근하여 쿼리를 실행할 때 JOIN을 사용한다.
JOIN의 종류로는
- INNER JOIN
- OUTER JOIN
- LEFT
- RIGHT
- FULL
- SELF 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;
'코딩 > 모음' 카테고리의 다른 글
[AWS] EC2 인스턴스 지키기 (나도모르는 사이에 인스턴스가 삭제된다) (0) | 2022.01.23 |
---|---|
[Google Play] Issue: Need login credentials for app review (리뷰용 계정 미제공으로 인한 앱 삭제) (0) | 2021.12.25 |
Session Fixation Attack (0) | 2021.05.30 |
OAuth (0) | 2021.05.29 |