JOIN 이란?
- 둘 이상의 테이블을 연결하여 검색하는 방법
- 두 테이블을 조인을 하려면 최소 하나의 공통된 컬럼이 있어야 한다.
- 그래서 일반적으로 PK 와 FK 를 사용하여 조인에 활용 한다.
JOIN 의 방법
1) cross join : 거의 안쓴다.
2) equi join : 제일 많이 사용
3) non-equi join : 안쓴다.
4) self join : 거의 안쓴다.
5) outer join : 많이 사용 한다.
1. CROSS JOIN
- 카다시안 곱을 수행한다.
- 두 개의 테이블을 곱한 행을 수행한다.
FROM [table A] CROSS JOIN [table B];
emp 테이블의 ename 행(row)이 11개
dept 테이블의 deptno 행(row)이 5개
11 x 5 = 55개의 행이 나온다.
- cross join 에서는 두 테이블 에서 의미있는 데이터를 뽑아내기가 쉽지 않다.
중복되어서 전부다 나오기 때문에
그래서 equi join 을 수행한다.
2. Equi join
- 가장 일반적으로 사용한다.
- 조건이 없으면 기본 cross join을 수행한다.
1) 등가 조인 (Equi join)
- 등가 조인은 양쪽 테이블 모두에 값이 존재해야 보여준다.
select e.ename, d.deptno from emp e, dept d where d.deptno = e.deptno;
where 절에 어떤 컬럼을 기준으로 할 것인지 조건을 써주어야 한다.
2) 내부 조인 (Inner join)
- 등가 조인과 같은데 사용법이 다르다.
- 테이블과 테이블 사이에 inner join을 넣고 where 대신 on을 사용한다.
[ inner join - on ]
select e.ename, d.deptno from emp e inner join dept d on d.deptno = e.deptno;
- on 대신 USING 으로 조건을 줄 수도 있다.
- USING 안에는 조인에 사용할 컬럼이나 서브쿼리 등을 사용할 수 있다.
[ inner join - using ]
select e.ename, d.deptno from emp e join dept d using (deptno);
inner join 에서 inner는 생략 가능하다.
결과값은 위에 등가조인 결과값과 같다.
3) 내츄럴 조인 (Natural join)
- 자연스럽게 조건없이 두 테이블에 같은 컬럼의 값이 있으면 조인한다.
- 두 테이블 간에 동일한 이름을 갖는 모든 컬럼에 대해 등가조인을 한다.
- using / where / on 절에서의 join 조건절을 정의할 수 없다.
select e.ename, d.deptno from emp e natural join dept d;
SELF JOIN
자기조인
- 자기 스스로 조인한다.
- 자기 조인을 하면 테이블 안에서 카다시안 곱을 수행한다.
emp 테이블을 self join 하면 emp x emp
OUTER JOIN
외부 조인
- 등가 조인은 두 테이블 모두에 값이 있어야 보여주는 반면
- 외부 조인은 어느 한 쪽에만 데이터가 있어도 보여준다.
SELECT * FROM [table A] [LEFT|RIGHT] OUTER JOIN [table B] ON 조건절;
1) LEFT OUTER JOIN
- 왼쪽 테이블(dept)을 기준으로 더 있는 값을 보여준다.
- 없는 값은 null 처리한다.
dept 테이블의 deptno 는 1,2,3,4,5
emp 테이블의 deptno 는 1,2,4
따라서 emp에 3,5 가 없어도 null 값으로 처리하여 보여준다.
2) RIGHT OUTER JOIN
- 오른쪽 테이블 (emp)을 기준으로 값이 있으면 보여준다.
- 마찬가지로 없는 건 null
결과값이 등가조인 결과와 같다.
emp 에 있는 deptno는 dept 에 있는 deptno 보다 종류가 많지 않아서 등가조인 이상으로 더 보여줄게 없다.
그래서 right outer join을 해도 데이터가 차이가 나지 않는다.
emp 테이블에 deptno = 6 인 데이터를 넣고 다시 실행한 경우는 아래와 같다.
3) FULL OUTER JOIN
- 양쪽에 있는 값들을 모두 보여준다.
- maria db 에서는 지원하지 않기 때문에 UNION을 활용 해야 한다.
'Data > MariaDB' 카테고리의 다른 글
DB] IN / EXSITS / ANY / ALL / limit (0) | 2022.05.06 |
---|---|
DB] 서브쿼리 , 상하관계쿼리 (0) | 2022.05.06 |
DB] 제약 조건(constraint) 2 - 참조 제약 조건 / 연계 참조 무결성 제약 조건 / 유니크 제약 조건 / 체크 제약 조건 (0) | 2022.05.06 |
DB] 트랜젝션(TRANSACTION) (0) | 2022.05.02 |
DB] 제약 조건(constraint) 1 - 기본 키 제약 조건 / NOT NULL (0) | 2022.04.28 |