조인
두 개 이상의 테이블들을 연결 또는 결합하여 데이터를 출력하는 것을 말합니다.
조인이 필요한 이유는 정규화에서 출발합니다.
정규화란 불필요한 데이터의 정합성을 확보하고 이상현상 발생을 피하기 위해, 테이블을 분할하여 생성하는 것을 말합니다.
EQUI JOIN
두 개의 테이블 간에 칼럼 값들이 서로 정확하게 일치하는 경우에 사용되는 방법입니다.
JOIN 의 조건은 WHERE 절에 기술하게 되는데 = 연산자를 사용하여 표현합니다.
SELECT 테이블1.컬럼명, 테이블2.컬럼명, .. FROM 테이블1, 테이블2 WHERE 테이블1.컬럼명1 = 테이블2.컬럼명1;
이 방식을 ANSI/ISO SQL 표준 방식으로 표현하면 다음과 같습니다.
SELECT 테이블1.컬럼명, 테이블2.컬럼명, .. FROM 테이블1 INNER JOIN 테이블2 ON 테이블1.컬럼명1 = 테이블2.컬럼명1;
Non EQUI JOIN
두 개의 테이블 간에 컬럼 값들이 서로 정확하게 일치하지 않는 경우에 사용되는 방법입니다.
BETWEEN, >, >=, <. <= 등 의 연산자들을 사용하여 표현합니다.
SELECT 테이블1.컬럼명, 테이블2.컬럼명, .. FROM 테이블1, 테이블2 WHERE 테이블1.컬럼명1 BETWEEN 테이블2.컬럼명1 AND 테이블2.컬럼명2;
INNER JOIN
내부 조인이라고도 하며 JOIN 조건에서 동일한 값이 있는 행만 반환합니다.
INNER JOIN 은 WHERE 절에서 사용하던 JOIN 조건을 FROM 절에서 정의하겠다는 의미이므로 USING 이나 ON 절을 필수적으로 사용해야 합니다.
SELECT 테이블명1.컬럼명1, 테이블명2.컬럼명1 FROM 테이블명1, 테이블명2 WHERE 테이블명1.컬럼명1, 테이블명2.컬럼명1;
SELECT 테이블명1.컬럼명1, 테이블명2.컬럼명1 FROM 테이블명1 INNER JOIN 테이블명2 ON 테이블명1.컬럼명1, 테이블명2.컬럼명1;
SELECT 테이블명1.컬럼명1, 테이블명2.컬럼명1 FROM 테이블명1 JOIN 테이블명2 ON 테이블명1.컬럼명1, 테이블명2.컬럼명1;
NATURAL JOIN
두 테이블 간의 동일한 이름을 갖는 모든 컬럼들에 대해 EQUI JOIN 을 수행합니다.
NATURAL JOIN 이 명시되면, USING, ON, WHERE 절에서 조인조건을 정의할 수 없습니다.
SELECT 컬럼명1, 컬럼명2 FROM 테이블명1 NATURAL JOIN 테이블명2;
위와 같이 작성하게 되면 두 개의 테이블에서 공통된 컬럼을 자동으로 인식하여 조인 처리합니다.
조인에 사용되는 컬럼들은 같은 데이터 유형이어야 하며, 별칭이나 접두사를 붙일 수 없습니다.
* 처럼 별도의 컬럼 순서를 지정하지 않으면 NATURAL JOIN 의 기준이 되는 컬럼들이 다른 컬럼보다 먼저 출력됩니다.
USING 조건절
NATURAL JOIN 에서는 모든 일치되는 컬럼들에 대해 조인이 이루어지지만,
FROM 절에 USING 조건절을 이용하면 같은 이름을 가진 컬럼들 중 원하는 컬럼에 대해서만 선택적으로 EQUI JOIN 을 할 수 있습니다.
별칭을 부여할 수 없습니다.
SELECT 컬럼명1, 컬럼명2 FROM 테이블명1 NATURAL JOIN 테이블명2 USING (컬럼명1);
ON 조건절
JOIN 서술부(ON 조건절)와 비 JOIN 서술부(WHERE 조건절)를 분리하여 이해가 쉬우며, 컬럼명이 다르더라도 조인조건을 사용할 수 있는 장점이 있습니다.
NATURAL JOIN 에서는 모든 일치되는 컬럼들에 대한 동등 조건이지만,
임의의 JOIN 조건을 지정하거나, 이름이 다른 컬럼명을 JOIN 조건으로 사용하거나, JOIN 컬럼을 명시하기 위해서 ON 조건절을 사용합니다.
ON 조건절을 사용한 JOIN 의 경우는 별칭이나 테이블명과 같은 접두사를 사용하여 SELECT 에 사용되는 컬럼을 명확하게 지정해 주어야 합니다.
WHERE 절과의 혼용
SELECT 컬럼명1, 컬럼명2 FROM 테이블명1 JOIN 테이블명2 ON (테이블명1.컬럼명1 = 테이블명2.컬럼명1) WHERE 테이블명.컬럼명1 = 1;
CROSS JOIN
일반 집합 연산자의 PRODUCT 개념으로 테이블간 조인조건이 없는 경우 생길 수 있는 모든 데이티의 조합을 말합니다.
두 개의 테이블에 대한 CROSS JOIN 결과는, 양쪽 집합의 M * N 건의 데이터 조합이 발생합니다.
SELECT 컬럼명1, 컬럼명2 FROM 테이블명1 CROSS JOIN 테이블명2;
OUTER JOIN
JOIN 조건에서 동일한 값이 없는 행도 반환할 때 사용합니다.
LEFT OUTER JOIN
조인 수행 시 먼저 표기된 좌측 테이블에 해당하는 데이터를 먼저 읽은 후, 우측 테이블에서 JOIN 대상 데이터를 읽어옵니다.
우측 테이블에서 만족하는 데이터가 없는 경우 NULL 값으로 채웁니다.
SELECT 컬럼명1, 컬럼명2 FROM 테이블명1 LEFT OUTER JOIN 테이블명2 ON 테이블명1.컬럼명1 = 테이블명2.컬럼명1;
RIGHT OUTER JOIN
조인 수행 시 먼저 표기된 우측 테이블에서 해당하는 데이터를 먼저 읽은 후, 좌측 테이블에서 JOIN 대상 데이터를 읽어옵니다.
좌측 테이블에서 만족하는 데이터가 없는 경우 NULL 값으로 채웁니다.
SELECT 컬럼명1, 컬럼명2 FROM 테이블명1 RIGHT OUTER JOIN 테이블명2 ON 테이블명1.컬럼명1 = 테이블명2.컬럼명1;
FULL OUTER JOIN
조인 수행 시 좌측, 우측 테이블의 모든 데이터를 읽어 조인하여 결과를 생성합니다.
RIGHT OUTER JOIN 과 LEFT OUTER JOIN 의 결과를 합집합으로 처리한 결과와 동일합니다.
단, UNION ALL 이 아닌 UNION 기능과 같으므로 중복되는 데이터는 삭제합니다.
SELECT 컬럼명1, 컬럼명2 FROM 테이블명1 FULL OUTER JOIN 테이블명2 ON 테이블명1.컬럼명1 = 테이블명2.컬럼명1;
이 내용은 'SQL 전문가 가이드, 한국데이터베이스 진흥원' 에서 공부한 내용입니다.
'Database > 개념' 카테고리의 다른 글
[DATABASE] 인덱스란? 트리기반 인덱스, 클러스터형 인덱스, 테이블 스캔, 인덱스 스캔이란? (0) | 2018.11.02 |
---|---|
[DATABASE] 옵티마이저와 실행계획이란? (0) | 2018.11.02 |
[DATABASE] GROUP BY, HAVING 절이란? ORDER BY 절이란? (0) | 2018.11.02 |
[DATABASE] 함수란? 문자형, 숫자형, 날짜형, 변환형, NULL 함수란? (0) | 2018.11.02 |
[DATABASE] SELECT 의 WHERE 절이란? 비교 연산자, SQL 연산자, 논리 연산자란? (0) | 2018.10.31 |