JOIN
JOIN은 두 개 이상의 테이블을 연결 지어서 데이터를 조회하는 것이다.
관계형 데이터베이스는 모든 정보를 하나의 테이블에 저장하는 것이 아니라, 데이터가 정규화되어 여러 테이블에 분산되어 있다.
데이터가 여러 테이블에 흩어져 있기 때문에 사용자가 원하는 데이터를 찾기 위해서는 여러 테이블을 다 조회해야 한다.
JOIN은 여러 테이블에 흩어져 있는 정보 중에서 사용자가 원하는 정보만 가져와 가상의 테이블처럼 만들어서 데이터를 조회하는 것이다.
예시
- EMP테이블에는 사번, 이름, 소속부서번호가 있다.
- DEPT 테이블에는 부서번호, 부서명이 있다.
- 아래와 같이 EMP테이블에서 사원의 이름을 가져오고, DEPT테이블에서 그 사원이 소속된 부서명을 조회해야 한다.
JOIN은 EMP테이블과 DEPT테이블의 각각의 행을 서로 연관 있는 행끼리 연결 지어서 새로운 가상의 테이블을 만들고, 그 테이블로부터 필요한 정보를 가져오는 것이다.
JOIN의 사용
SELECT a.col1, b.col2
FROM tableA a
JOIN tableB b ON a.col2 = b.col2
조인이 수행될 때는 두 개 이상의 테이블이 사용되는데, 둘 중에 먼저 읽는 테이블을 선행 테이블이라 하고, 뒤에 오는 테이블을 후행 테이블이라고 한다.
선행 테이블은 조회할 데이터가 적은 테이블로 선택하는 것이 속도면에서 유리하다.
종류
INNER JOIN
테이블 A와 테이블 B에서 일치하는 데이터를 추출하는 INNER JOIN이다.
그냥 JOIN이라고 부르면 INNER JOIN을 의미하는 것이다.
SELECT *
FROM tableA a
INNER JOIN tableB b on a.col = b.col;
LEFT (OUTER) JOIN
테이블 A에서 모든 데이터를 추출하고, 테이블 B에서 일치하는 데이터를 추출하는 LEFT JOIN이다. 일치하지 않는 경우 NULL 값을 반환
SELECT *
FROM tableA a
LEFT JOIN tableB b ON a.col3 = b.col3;
RIGHT (OUTER) JOIN
테이블 B에서 모든 데이터를 추출하고, 테이블 A에서 일치하는 데이터를 추출하는 RIGHT JOIN이다. 일치하지 않는 경우 NULL 값을 반환 (LEFT JOIN과 테이블이 반대)
SELECT *
FROM tableA a
RIGHT JOIN tableB b ON a.col4 = b.col4;
FULL OUTER JOIN
테이블 A와 테이블 B에서 모든 데이터를 추출하는 FULL OUTER JOIN이다.
SELECT *
FROM tableA a
FULL OUTER JOIN tableB b ON a.col4 = b.col4;
SELF JOIN
자기 자신과 JOIN 하므로 1개의 테이블을 사용한다. 별도의 문법이 있는 것이 아니라 1개로 JOIN 하면 SELF JOIN이 된다.
SELECT *
FROM tableA a
JOIN tableA a1
WHERE a.col = a1.col2;
참고
'멋진 개발자 > DB' 카테고리의 다른 글
개발자 성장 기록 58 - 복합키 (0) | 2024.05.06 |
---|---|
개발자 성장 기록 57 - 캐시 (0) | 2024.05.03 |
개발자 성장 기록 50 - 인덱스(Index) (0) | 2024.04.17 |
개발자 성장 기록 49 - Oracle과 MySQL (0) | 2024.04.16 |
개발자 성장 기록 48 - WHERE, HAVING (0) | 2024.04.15 |