티스토리 뷰


JOIN 개요(각종 DB서적에서는 join을 종종 '결합연산이라고 표현한다..왜 굳이?)

- 두 개 이상의 테이블들을 연결 or 결합하여 데이터를 출력하는 것을 의미.

- from절에 여러 테이블을 나열되더라도 SQL에서 데이터를 처리할 때는 단 두 개의 집합 간에만 조인이 일어난다.

예) from절에 A, B, C라는 세 개의 테이블이 존재하더라도 세 개의 테이블이 동시에 조인 수행되는 것이 아님.

↳ ( ( A join B ) join C ) join D 형식으로 순차적으로 조인처리됨. 이때 테이블의 조인 순서는 Optimizer에 의해 결정되고 이 부분은 추후에 DB튜닝의 주요 포인트. 해당 내용은 나중에 '조인 수행 원리' 파트로 자세히 포스팅하도록 하겠습니다.  


1) Equi(동등, 등가) JOIN = inner join ~ on ~

두 개의 테이블 간에 칼럼 값(도메인 값))들이 서로 정확하게 일치하는 경우 사용하는 방법.

  쉽게 말해, 조인 조건으로 where절에 등호(“ = ”)를 사용하는 조인을 의미.


2) Non Equi(비동등, 비등가) JOIN

두 개의 테이블 간에 칼럼 값(도메인 값)들이 서로 정확하게 일치하지 않는 경우 사용하는 방법.

 → 조인 조건으로 where절에 등호(“ = ”)를 사용하지않고, “=”연산자가 아닌 다른 연산자(“between”, “>”, “>=”, “<”, “<=” 등)를 사용해서 표현.


3) Self join: 하나의 테이블에서 두 개의 칼럼이 연관 관계를 가지고 있는 경우에 사용하는 것. 즉, 하나의 테이블을 논리적으로 분리시켜 Equi JOIN하는 방법임.



표준 조인(Standard Join) - from절의 조인 형태

1) inner join : Join의 default옵션으로, join조건에서 동일한 값이 있는 행만 반환. outer join의 대비하여 내부Join이라고도 함.

inner join(또는 join)키워드로 사용하는데, 이 표시는 그 동안 where절에서 사용하던 join조건을 from절에서 정의하겠다는 표시이므로 using조건절이나 on조건절을 필수적으로 사용해야 한다.


① using조건절 사용법  using (칼럼명);

1. NATURAL JOIN에서는 모든 일치되는 칼럼들에 대해 JOIN이 이루어지지만, 같은 이름을 가진 칼럼명 중에서 원하는 칼럼을 선택적으로 EQUI JOIN.

2. 조인 칼럼은 using키워드 뒤에 괄호로 묶어서 기술해야 함 ↔ on조건절은 해도되고 안해도되고 옵션사항(그냥 칼럼명만 적으면 natural join마냥 해당 컬럼만 join함.)

3. 조인되는 칼럼에 대해서 Select절 쪽에서 alias나 테이블명. 붙이면 syntax에러. / 조인에 이용되지 않은 동일 이름을 가진 컬럼은 컬럼명 앞에 테이블명을 기술해야 함.


② on조건절: from절에 on조건절을 붙여 표시함으로써 join을 더 명시적으로 표현. → where절의 join조건을 from절의 on조건절로 분리하여 가독성↑효과.


1. natural join이나 using조건절처럼 칼럼명이 똑같해야 된다는 제약 없이 칼럼명이 다르더라도 사용할 수 있는 장점있음. (alias나 테이블명. 과 같은 접두사를 사용해서 칼럼을 논리적으로 명확하게 지정해줘야 함)

2. on절을 이용하여 외부조인, 교차 조인을 제외한 모든 형태의 조인을 표현할 수 있다. 비등가 조인도 가능.

select employee_id, first_name, salary, grade

from employees

join salarygrade on sal between losalary and hisalary;


3. ON 조건절과 WHERE 검색 조건은 충돌 없이 혼용해서 사용할 수 있다.

4. 또한 ON 조건절에 JOIN 조건 외에도 데이터 검색 조건을 추가할 수는 있으나, 검색 조건 목적인 경우는 WHERE 절을 사용할 것을 권고됨.



2) natural (inner) join (자연 조인)

① inner join의 하위 개념인 equi join(등가 조인)으로, 두 테이블 간의 통일한 이름과 타입을 갖는 모든 칼럼에 대해 join 수행. (공통된 칼럼명을 자동으로 인식하여 join처리)

join이 되는 테이블의 도메인과 데이터 타입, 칼럼명이 동일해야하는 제약 조건있음.

→ 하지만, 이 때문에 원하지 않는 결과가 나올 수 있다.  Natural join은 테이블간에 동일한 형식을 갖는 공통 컬럼이 하나만 존재할때 정확하게 원하는 값이 나옴(조인기준이 2개 이상이면 기준이 달라져서 원하는 결과가 안 나올수 있다는 의미)

③ Natural 키워드를 명시하면 using, on, where절에서 join조건 정의 모두 불가능.

④ Natural join 또는 using조건절에 조인을 위해 사용되는 칼럼들은 select절에서 alias나 테이블명과 같은 접두사를 붙일 수 없다.



3) outer join(외부 조인)

외부 조인


TAB1의 모든 값에 대해 TAB2의 데이터가 반드시 존재한다는 보장이 없는 경우 outer join 사용. 부족한 쪽의 데이터는 자동으로 NULL값이 설정된다. 또한 당연한 얘기지만 outer join키워드를 명시적으로 사용하는 방법 또한 join조건을 from절에서 정의하겠다는 표시이므로 using조건이나 on조건절 필수적으로 적어줘야 함.


① left outer join(left join) : 왼쪽에 먼저 명시한 테이블이 기준테이블이 됨.

② right outer join(right join) : 오른쪽에 명시한 테이블이 기준 테이블.

③ full outer join(full join) : tab1과 tab2의 모든 데이터를 읽어 join.

Left Join과 Right Join의 결과의 합집합과 동일. 단, UNION ALL이 아닌 UNION 기능과 같으므로 중복되는 데이터는 삭제됨.



3) cross join(교차 조인)

① 테이블 간 Join조건이 없는 경우 생길 수 있는 모든 데이터의 조합을 의미.

Cartisian product 또는 cross product와 같은 표현으로, 양쪽 집합의 M*N건의 테이블 만듬.

(즉, 테이블1과 테이블2를 교차 조인하면 각 테이블의 행의 수를 곱한 것과 같은 개수의 결과 행이 생긴다)

③ 교차조인을 업무상 부득이하게 수행하는 경우가 있다고는 하지만, 웬만해선 사용할 일 없을 것 같긴하다..




댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함