- 조인은 테이블의 스키마 파악이 정확하게 이루어 져야한다.
어떤 테이블의 어떤 컬럼을 기준으로 해서 조회할지에 대해 먼저 생각하고 계속 연결하면 Join이 된다.
Join
- 두개 이상의 테이블을 연결해서 Query(질의)하는 것
- 종류
1. 데이터 추출되는 것에 따라서
Inner Join
- 조인을 위해 사용하는 비교조건(조인조건)에 맞는 데이터만 조회
=> 조인 조건에 맞지 않는 데이터는 조회되지 않는다.
- join할때 outer join으로 표시하지 않으면 기본적으로 inner join으로 조회된다.
Outer Join
- 조인 조건에 맞지 않는 데이터도 조회된다.
2. 비교 조건에 따라서
Equi Join
- 비교하는 두 컬럼의 데이터가 정확하게 일치할 경우 조회됨.
=> 비교 연산자로 = 를 사용한다.
Non Equi Join
- join 조건으로 >, >=, <, <=, !=
3. Join하는 테이블 종류에 따라서
Self join
- join할 테이블이 다른 테이블이 아닌 self(자기 자신, 한개의 테이블로 조인)
- 테이블과 데이터를 구별하기 위해 반드시 alias를 사용해야 한다.
***** Natural Join
- join 조건을 직접 정하지 않고 join할 테이블의 동일한 컬럼명으로 자동 조인
- 장점 : 조인 조건을 주지 않아도 되서 query가 간단하다.
- 단점 : 동일한 컬럼명이 없으면 조인이 안됨, 다른 컬럼과 join할 수 없음.
***** 카타시안 곱
- 조인 조건을 생략했을 때 두 테이블의 모든 row를 연결한 결과가 조회된다.
- N*M의 수만큼 행이 조회된다.
* *
Inner Join
- 벤더 전용(RDBMS는 inner join에 대한 벤더 전용 query가 같다)
select [All | Distinct] * |{컬럼명, expresstion} [as alias]
from 테이블명 [alias], 조인할테이블명 [alias], ...
where 조인 조건 // where가 없으면 카타시안곱이 되서 모든 행이 조회된다.
[group by 컬럼명, .. [having 조건]]
[order by 컬럼명, ..]
- Ansi query
select [All | Distinct] * |{컬럼명, expresstion} [as alias]
from 테이블명 [alias], 조인할테이블명 [alias], ...
join 조인 할 테이블 명 [alias]
[using | on] 조인 조건
where 조인 조건 // where가 없으면 카타시안곱이 되서 모든 행이 조회된다.
[group by 컬럼명, .. [having 조건]]
[order by 컬럼명, ..]
// using(컬럼명)
- 조인할 두 테이블의 컬럼이 동일한 경우
- 비교조건은 = 이다.
// on 비교조건
- 조인할 두 테이블의 컬럼명이 동일하지 않아도 사용할 수 있다.
- 비교 조건은 마음대로 작성하면 된다.
3. Outer Join (웬만하면 master table을 기준으로 해서 left join을 해라)
- left [outer] join : 왼쪽 테이블의 데이터는 모두 다 나오고 join 조건에 맞는 데이터를 오른쪽 테이블에서 추출해서 연결
- right [outer] join : 오른쪽 테이블의 데이터는 모두 다 나오고 join 조건에 맞는 데이터를 왼쪽 테이블에서 추출해서 연결
- full [outer] join : 두 테이블의 데이터를 모두 연결
'개념공부 > 데이터베이스' 카테고리의 다른 글
JDBC LIKE (0) | 2021.09.10 |
---|---|
DB SubQuery (0) | 2021.09.08 |
댓글