eunzae's develog
[SQL] JOIN 심화 본문
JOIN(교집합)
- 두개 이상의 테이블들을 연결 또는 결합하여 데이터를 출력
EQUI JOIN(등가 교집합)
- 두개 테이블 간에 서로 정확하게 일치하는 경우를 활용
- 등가 연산자(=)를 사용한 JOIN
- 대부분 기본키-외래키 관계를 기반으로 발생하나, 모든 JOIN이 그런 것은 아님.
Non EQUI JOIN(비등가 교집합)
- 두개 테이블 간에 서로 정확하게 일치하지 않는 경우를 활용하는 JOIN
- 등가 연산자 이외의 연산자들(>,>=,<=,<,BETWEEN)을 사용한 JOIN
FROM절 JOIN 형태
INNER JOIN
- 내부 JOIN이라고 하며, JOIN조건에서 동일한 값이 있는 행만 반환
- INNER JOIN은 JOIN의 기본값으로, 'INNER' 생략 가능
SELECT *
FROM emp a
JOIN dept b
ON a.dept_no = b.dept_no
;
USING 조건절(SQL Server 지원X)
- 같은 이름을 가진 컬럼들 중 원하는 컬럼에 대해서만 선택적으로 등가 조인
SELECT *
FROM 테이블1
JOIN 테이블2
USING(기준컬럼) -- USING 조건절 사용시에는 컬럼이나 테이블에 별칭 사용할 수 없음
;
NATURAL JOIN
- 두 테이블 간의 동일한 이름을 갖는 모든 컬럼들에 대해 등가 조인을 수행
SELECT *
FROM 테이블1
NATURAL JOIN 테이블2 --추가로 ON 조건절이나 USING 조건절, WHERE절에서 JOIN 조건 정의 불가
;
CROSS JOIN
- JOIN 조건이 없는 경우 생길 수 있는 모든 데이터의 조합을 조회
SELECT *
FROM A
CROSS JOIN B
;
OUTER JOIN
- 두 개의 테이블 간 교집합을 조회하고, 한쪽 테이블에만 있는 데이터도 포함시켜서 조회
- 빈 곳은 NULL 값으로 출력
- WHERE 조건절에서 한쪽에만 있는 데이터를 포홤시킬 테이블 쪽으로 (+)를 위치
LEFT OUTER JOIN
SELECT *
FROM A, B
WHERE A.ID (+) = B.ID
;
SELECT *
FROM A
LEFT OUTER JOIN B -- OUTER 생략 가능
ON A.ID = B.ID
;
RIGHT OUTER JOIN
SELECT *
FROM A, B
WHERE A.ID = B.ID (+)
;
SELECT *
FROM A
RIGHT OUTER JOIN B -- OUTER 생략 가능
ON A.ID = B.ID
;
FULL OUTER JOIN
SELECT *
FROM A
FULL OUTER JOIN B
ON A.ID = B.ID
;
셀프 조인
- 동일 테이블 사이의 조인
- 동일 테이블 사이의 조인을 수행하면 테이블과 컬럼 이름이 동일하기 때문에 별칭 사용이 필수
SELECT A.컬럼명, B.컬럼명
FROM 테이블 A, 테이블 B --같은 테이블 조인 시에 별칭을 지정해줘야 구분 가능
WHERE A.컬럼명2 = B.컬럼명
;
셀프조인 예시: 계층형 질의
SELECT A.부모컬럼, A.자식컬럼, B.자식컬럼
FROM 테이블 A, 테이블 B
WHRE A.자식컬럼 = B.부모컬럼
;
'Language > SQL' 카테고리의 다른 글
[SQL] VIEW (0) | 2022.12.16 |
---|---|
[SQL] 서브쿼리 심화 (0) | 2022.12.16 |
[SQL] 계층형 질의 (0) | 2022.12.15 |
[SQL] 집합연산자(UNION, UNION ALL, INTERSECT, EXCEPT) (0) | 2022.12.15 |
[SQL] 스칼라 서브쿼리 (0) | 2022.12.15 |