[DB] JOIN 조인
조인?
두개이상의 테이블을 연결하여 하나의 테이블 처럼 출력할때 사용, 종류로는 등가조인, 비등가조인,자체조인,외부조인 등이 있다.
테이블을
조인하지 않고 SELECT * FROM EMP, DEPT 일경우
데이터가 맞아떨어짐과 상관없이 각테이블의 행의 곱의 경우의수로 일괄 출력된다.
1. 등가조인
내부조인, 단순조인으로 부르기도 하며 특정 열과 값이 일치한 출력결과를 사용하는 방식.
ex)
select e.empno, e.ename, d.deptno, d.dname, d.loc from emp e, dept d where e.deptno= d.DEPTNO order by d.DEPTNO, e.EMPNO; |
2. 비등가조인
등가조인방식 외의 방식을 의미, 각 데이터가 일치하는 경우가 아닌 비교등의 방식으로 연관지어 데이터를 산출 할수 있는 경우에 사용 ex) 급여를 가지고있는 행과, 직급당 급여의 최소 최대값을 가지고있는 테이블을 연관 할경우.
select e.*, s.* from emp e, salgrade s where e.sal between s.LOSAL and s.HISAL; |
3. 자체조인
하나의 테이블이지만 selct문 내부에서 별칭을 각각 달리주어 논리적으로 다른 테이블인 것처럼 명시하여 두테이블을 조인하는 방식.
select a.empno, a.ENAME, a.mgr, b.EMPNO, b.ENAME from emp a, emp b where a.MGR=b.EMPNO; |
4. 외부조인(outer join)
조인 조건 데이터중 어느 한쪽이 NULL임에도 결과를 출력하는 방식
왼쪽조인 : 오른쪽 테이블과 매칭이되지 않을 경우 null을 반환한다.
오른쪽조인 : 왼쪽 테이블과 매칭이 되지 않을 경우 null을 반환한다.
오라클 | mysql | |
왼쪽 외부 조인 | where table1.col1=table2.col1(+) | SELECT 속성_리스트 FROM 테이블1 LEFT JOIN 테이블2 ON 테이블1. 속성 = 테이블2.속성 [ ORDER BY 속성 ]; 또는 SELECT 속성_리스트 FROM 테이블1 LEFT OUTER JOIN 테이블2 ON 테이블1. 속성 = 테이블2.속성 [ ORDER BY 속성 ]; |
오른쪽 외부 조인 | where table1.col1(+)=table2.col1 | SELECT 속성_리스트 FROM 테이블1 RIGHT JOIN 테이블2 ON 테이블1. 속성 = 테이블2.속성 [ ORDER BY 속성 ]; 또는 SELECT 속성_리스트 FROM 테이블1 RIGHT OUTER JOIN 테이블2 ON 테이블1. 속성 = 테이블2.속성 [ ORDER BY 속성 ]; |
왼쪽 조인 예시
select a.empno, a.ENAME, a.mgr, b.EMPNO, b.ENAME from emp a left join emp b on a.MGR=b.EMPNO; |
결과물
상급자가 존재 하지 않는 직원
오른쪽 조인 예시
select a.empno, a.ENAME, a.mgr, b.EMPNO, b.ENAME from emp a right join emp b on a.MGR=b.EMPNO; |
부하직원이 없는 사원
SQL-99 표준문법으로 배우는 조인
1. NATURAL JOIN
등가조인을 대신해 사용 할 수 있는 조인 방식.
조인대상이 되는 두 테이블에 이름과 자료형이 같은 열을 찾은 후 그열을 기준으로 등가조인을 해주는 방식
조인이 되는 열에 테이블 명을 붙이면 안됨**
SELECT E.EMPNO, E.ENAME, E.JOB, E.MGR, E.HIREDATE, E.SAL, E.COMM, DEPTNO, D.DNAME,D.LOC FROM EMP E natural join DEPT D ORDER BY DEPTNO, E.EMPNO; |
2.JOIN~ USING
기존 등가조인을 대신하는 조인 방식 ,NATURAL JOIN이 자동으로 조인 기준 열을 지정하는 것과 달리 USING키워드에 조인 기준으로 사용할 열을 명시하여 사용.
조인이 되는 열에 테이블 명을 붙이면 안됨**
SELECT E.EMPNO, E.ENAME, E.JOB, E.MGR, E.HIREDATE, E.SAL, E.COMM, DEPTNO, D.DNAME,D.LOC FROM EMP E JOIN DEPT D USING (DEPTNO) ORDER BY DEPTNO, E.EMPNO; |
3.JOIN ~ ON
기존 WHERE절에 있는 조인 조건식을 ON키워드 옆에 작성,
SELECT E.EMPNO, E.ENAME, E.JOB, E.MGR, E.HIREDATE, E.SAL, E.COMM, E.DEPTNO, D.DNAME,D.LOC FROM EMP E JOIN DEPT D ON (E.DEPTNO=D.DEPTNO) ORDER BY DEPTNO, E.EMPNO; |
4. OUTER JOIN
왼쪽 외부조인 | SELECT 속성_리스트 FROM 테이블1 LEFT OUTER JOIN 테이블2 ON 테이블1. 속성 = 테이블2.속성 [ ORDER BY 속성 ]; |
오른쪽 외부조인 | SELECT 속성_리스트 FROM 테이블1 RIGHT OUTER JOIN 테이블2 ON 테이블1. 속성 = 테이블2.속성 [ ORDER BY 속성 ]; |
전체 외부조인 | SELECT 속성_리스트 FROM 테이블1 FULLOUTER JOIN 테이블2 ON 테이블1. 속성 = 테이블2.속성 [ ORDER BY 속성 ]; |