조인 ( JOIN )
두 개 이상의 테이블을 결합하여 데이터를 검색하는 방법이다.
자신이 검색하고 싶은 데이터가 한 개의 테이블이 아니라 여러 개의 테이블에 나누어져 있다면
각 테이블 컬럼을 한 개씩 가져와서 그 컬럼을 접점으로 이용하여 여러 테이블에 나누어져 있는데
데이터를 한번에 검색한다.
조인은 관계형 데이터베이스의 가장 큰 장점이면서 대표적인 핵심 기능이다.
유형은 크게 아래와 같다.
- 논리적 조인 : 사용자 SQL문에 표현되는 테이블 결합 방식
- 물리적 조인 : 데이터베이스 옵티마이저에 의해 내부적으로 발생하는 테이블 결합 방식
[ 논리적 조인 ]
- 내부 조인(Inner Join) : 공통 존재 컬럼의 값이 같은 경우를 추출
- 외부조인(Outer Join) : Left Outer Join, Right Outer Join, Full Outer Join
- 교차 조인(Cross Join) : 조인 조건이 없는 모든 데이터 조합 추출
- 셀프 조인(Self Join) : 자기 자신에게 별칭을 지정한 후 다시 조인
[ 물리적 조인 ]
- 중첩반복 조인(Nested-Loop Join)
2개 이상의 테이블에서 하나의 집합을 기준으로 순차적으로 상대방 row를 결합하여 조인
- 정렬 합병 조인(Sort-Merge Join)
대상 범위가 넓을 경우 발생하는 임의의 접근을 줄이기 위한 경우나
연결고리에 마땅한 인덱스가 존재하지 않을 경우 해결하기 위한 조인 방식
- 해시 조인(Hash Join)
해싱 함수를 활용하여 테이블 간 조인을 수행하는 방식.
직접적인 연결을 담당하는 것이 아니라 연결될 대상을 특정 지역에 모아두는 역할만을 담당한다.
내부 조인 (Inner Join)
SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;
- 같은 이름의 컬럼이 여러 테이블에 있는 경우, '별칭.컬럼명' 형태로 명시
- INNER라는 키워드는 생략해도 내부 조인이 됨
- 검색조건을 추가할 경우 조인된 값에서 해당 조건에 맞는 결과만 출력되도록 설정
외부 조인 (Outer Join)
[ Left Join ]
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name;
- 왼쪽 테이블의모든 데이터와 오른쪽 테이블의 동일 데이터 출력
- 우측 테이블에 조인할 컬럼의 값이 없는 경우 사용
- 좌측 테이블의 모든 데이터를 포함하는 결과 집합을 생성
[ Right Join ]
SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name;
- 오른쪽 테이블의 모든 데이터와 오른쪽 테이블의 동일 데이터 출력
- 오른쪽 테이블이 기준이 되어 결과를 보여줌
[ Full Join ]
SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name = table2.column_name
WHERE condition;
- 양쪽의 모든 데이터를 추출
- table1에 존재하고 table2에 존재하지 않는 컬럼값, 그 반대의 컬럼값 모두 NULL로 표현
- 중복된 데이터는 삭제한 결과를 보여줌
교차 조인 (Cross Join)
SELECT A.책번호, A.책명, B.책번호, B.가격
FROM 도서 A
CROSS JOIN 도서가격 B
'도서'테이블은 A라는 별칭으로, '도서가격'은 B라는 별칭으로 설정 후 조건 설정 없이 교차 조인
- 조인 조건이 없는 모든 데이터 조합을 추출하기 때문에 ON 절이 없다.
- 조인되는 두 테이블의 곱집합을 반환한다.
- 두 번째 테이블로부터 각 행과 첫 번째 테이블에서 각 행이 한번씩 결한된 열을 만든다.
셀프 조인 (Self Join)
SELECT A.CustomerName AS CustomerName1, B.CustomerName AS CustomerName2, A.City
FROM Customers A, Customers B
WHERE A.CustomerID <> B.CustomerID
AND A.City = B.City
ORDER BY A.City;
- 자신이 자신과 조인한다는 의미로 1개의 테이블을 사용한다.
- 같은 테이블명을 쓰고 별칭만 A, B와 같이 다르게 한다.
- 검색조건을 추가할 경우 조인된 값에서 해당 조건에 맞는 결과만 출력되도록 설정
참고
| https://haenny.tistory.com/34
| https://velog.io/@ragnarok_code/DataBase-%EC%A1%B0%EC%9D%B8Join%EC%9D%B4%EB%9E%80
'Database' 카테고리의 다른 글
[DB] 정규화 & 비정규화 (0) | 2022.10.07 |
---|---|
[DB] Index & B-Tree (2) | 2022.10.05 |
[DB] SQL vs NoSQL (4) | 2022.10.03 |
[DB] SQL Injection (2) | 2022.09.30 |
[DB] 키(KEY) 정리 (2) | 2022.09.27 |