2024. 6. 5. 18:27ㆍSQL
JOIN
- 하나 이상의 테이블에서 데이터를 조회하기 위해 사용
- 수행 결과는 하나의 RESULT SET으로 나옴
- 관계형 데이터베이스에서 SQL을 이용해 테이블 간 관계를 맺는 방법
- 관계형 데이터베이스는 최소한의 데이터만을 테이블에 담고 있어 원하는 정보를 테이블에서 조회하려면 한 개 이상의 테이블에서 데이터를 읽어와야 하는 경우가 많음.
이 때, 테이블간 관계를 맺기 위한 연결고리 역할이 필요한데, 두 테이블에서 같은 데이터를 저장하는 컬럼이 연결고리가 됨
등가 조인 : 내부조인(INNER JOIN)
JOIN USING
ON
자연조인(NATURAL JOIN)
포괄 조인 : 왼쪽 외부 조인(LEFT OUTER)
오른쪽 외부 조인(RIGHT OUTER)
전체 외부 조인(FULL OUTER)
자체 조인 : JOIN ON
교차 조인 : CROSS JOIN
1. 내부 조인 INNER JOIN
- 연결되는 컬럼의 값이 일치하는 행들만 조인됨
-> 일치하는 값이 없는 행은 조인에서 제외됨
- 작성 방법 : ANSI / ORACLE
1) ANSI 표준 구문
구문 기준을 정할 때 정의되는 기준
가장 유명한 표준 : ASCII 코드 (아스키코드)
SELECT 컬럼명 FROM 테이블명 JOIN 연결하고자하는테이블명 ON (연결컬럼명 = 연결컬럼명)
2) ORACLE 표준 구문
FROM절에 ','로 구분해서 합칠 테이블을 기술
WHERE절에 합치기에 사용할 컬럼명 제시
SELECT 컬럼명 FROM 테이블명1, 테이블명2, ... WHERE 연결컬럼명 = 연결컬럼명
- 연결에 사용할 두 컬럼명이 다를 경우 -> JOIN ON을 사용
연결에 사용할 두 컬럼이 같은 경우 -> JOIN USING을 사용
ORACLE에서는 JOIN ON을 사용하지 않고 WHERE절에 '='를 사용하면 됨
서로 다른 테이블에서 컬럼명과 값이 모두 같을 때는 각각 참조하는 테이블이 무엇인지 작성해줘야함
2. 자연조인 NATURAL JOIN
- JOIN에 별칭을 설정해서 테이블 표현하기
- 동일한 타입과 이름을 가진 컬럼이 있는 테이블 간의 조인을 간단히 표현하는 방법
- 반드시 두 테이블 간에 동일한 컬럼명, 타입을 가진 컬럼이 필요
- 없을 경우 교차조인이 됨
EMPLOYEE.JOB_CODE (CHAR(2))
JOB.JOB_CODE (CHAR(2))
-> 컬럼명, 자료형이 모두 일치해야함 == 자연조인 대상
SELECT 컬럼명, 컬럼명, 컬럼명, ... FROM 테이블명 NATURAL JOIN 테이블명;
- JOIN에 별칭을 설정해서 테이블 표현하기
JOIN과 FROM에서 테이블을 설정할 때 쿼리를 좀 더 간결하고 읽기 쉽게 만드는 방법
-> 테이블을 다수 참조할 때 유용
- 사용 방법
1) SELECT 테이블명1.컬럼명1, 테이블명2.컬럼명2 FROM 테이블명1, 테이블명2
WHERE 테이블명1.컬럼명1 = 테이블명2.컬럼명2;
2) SELECT A.컬럼명, B.컬럼명 FROM 테이블명1 A, 테이블명2 B WHERE A.컬럼명1 = B.컬럼명;
3. 외부조인 OUTER JOIN
- 두 테이블의 지정하는 컬럼값이 일치하지 않는 행도 조인에 포함시킴
1) LEFT [OUTER] JOIN
- 합치기에 사용한 두 테이블 중에서 왼족 편에 작성된 테이블의 컬럼 수를 기준으로 JOIN
2) RIGHT [OUTER] JOIN
- 합치기에 사용한 두 테이블 중에서 오른족 편에 작성된 테이블의 컬럼 수를 기준으로 JOIN
3) FULL [OUTER] JOIN
- 합치기에 사용한 두 테이블 중이 가진 모든 행을 결과에 포함
-> 오라클에서는 FULL OUTER JOIN 구문 사용 불가