반응형
조인(JOIN)이란?
두 개 이상의 테이블을 연결하여 하나의 테이블처럼 출력할 때 사용하는 방식
⇒ 두 개 이상의 테이블 데이터를 가로로 연결
조인 종류
등가 조인
- 테이블을 연결한 후 출력 행을 각 테이블의 특정 열에 일치한 데이터를 기준으로 선정하는 방식
- 내부조인(INNER JOIN) or 단순조인(SIMPLE JOIN)으로 부른다
- 일반적으로 가장 많이 사용되는 조인 방식
- 조인을 특별히 명시하지 않으면, 대부분 등가 조인을 사용하는 방식이다.
SELECT E.EMPNO, E.ENAME, E.DEPTNO, D.DNAME, D.LOC
FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO
AND E.SAL >= 3000;
비등가 조인
- 등가 조인 방식 이외의 방식
SELECT E.EMPNO, E.ENAME, E.JOB, E.MGR, E.HIREDATE, E.SAL, E.COMM, E.DEPTNO, S.GRADE, S.LOSAL, S.HISAL
FROM EMP E, SALGRADE S
WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL;
자체 조인
- 하나의 테이블을 여러 개의 테이블 처럼 활용하여 조인하는 방식
- 물리적으로 동일한 테이블 여러 개를 사용할 때 발생할 수 있는 문제점을 해결
- FROM절에 같은 테이블을 여러 번 명시하되, 테이블의 별칭만 다르게 지정하는 방식으로 사용
- 별칭을 각각 달리주어 논리적으로 다른 테이블인 것처럼 명시하여 두 테이블을 조인
SELECT E.EMPNO,E.ENAME, E.MGR,
E2.EMPNO AS MGR_EMPNO,
E2.ENAME AS MGR_ENAME
FROM EMP E, EMP E2
WHERE E.MGR = E2.EMPNO
ORDER BY E.EMPNO;
외부 조인
- 두 테이블 간 조인 수행에서 조인 기준 열의 어느 한쪽이 NULL이어도 강제로 출력
- 조인 조건 데이터 중 어느 한쪽이 NULL임에도 결과를 출력해야 할 때 사용
- 외부 조인은 좌우를 따로 나누어 지정하는데 WHERE절에 조인 기준 열 중 한쪽에 (+) 기호를 붙여준다
→ (+) 붙인 열이 NULL이어도 출력해라 - 왼쪽 외부 조인: 왼쪽 열을 기준으로 오른쪽 열의 데이터 존재 여부에 상관 없이 출력하라
- 오른쪽 외부 조인: 오른쪽 열을 기준으로 왼쪽 열의 데이터 존재 여부에 상관 없이 출력하라
SELECT E.EMPNO,E.ENAME, E.MGR,
E2.EMPNO AS MGR_EMPNO,
E2.ENAME AS MGR_ENAME
FROM EMP E, EMP E2
WHERE E.MGR = E2.EMPNO(+)
ORDER BY E.EMPNO;
SQL 표준 문법
조인 종류
- inner join (가장 많이 쓰임/ inner를 뺄 수 있음)
- outer join
- cross join(쓰이지 않음)
INNER JOIN
JOIN의 조건에 만족하는 행만 추출한다.
FROM
뒤에 JOIN 종류를 적고, ON
뒤에 JOIN 조건을 적는다.
select *
from emp inner join dept on emp.deptno = dept.deptno;
SQL> select ename, job, sal, dname, loc
2 from emp inner join dept on emp.deptno = dept.deptno;
SQL> select e.ename, e.job, e.sal, d.deptno, d.dname, d.loc
2 from emp e inner join dept d on e.deptno = d.deptno;
ENAME JOB SAL DNAME LOC
-------------------- ------------------ ---------- ---------------------------- --------------------------
SMITH CLERK 800 RESEARCH DALLAS
ALLEN SALESMAN 1600 SALES CHICAGO
WARD SALESMAN 1250 SALES CHICAGO
JONES MANAGER 2975 RESEARCH DALLAS
MARTIN SALESMAN 1250 SALES CHICAGO
BLAKE MANAGER 2850 SALES CHICAGO
CLARK MANAGER 2450 ACCOUNTING NEW YORK
SCOTT ANALYST 3000 RESEARCH DALLAS
KING PRESIDENT 5000 ACCOUNTING NEW YORK
TURNER SALESMAN 1500 SALES CHICAGO
ADAMS CLERK 1100 RESEARCH DALLAS
JAMES CLERK 950 SALES CHICAGO
FORD ANALYST 3000 RESEARCH DALLAS
MILLER CLERK 1300 ACCOUNTING NEW YORK
14 rows selected.
2) OUTER JOIN
INNER JOIN + @
- left outer join : 공통 부분 + 왼쪽 테이블 데이터
- right outer join : 공통 부분 + 오른쪽 테이블 데이터
- full outer join : 양쪽 테이블 모두
left outer join
SQL> insert into emp (empno, ename, job, sal, hiredate)
2 values (9999, 'PEONY', 'CLERK', 700, sysdate);
1 row created.
SQL> select ename, job, dept.deptno, dname
2 from emp inner join dept on emp.deptno = dept.deptno;
ENAME JOB DEPTNO DNAME
-------------------- ------------------ ---------- ----------------------------
SMITH CLERK 20 RESEARCH
ALLEN SALESMAN 30 SALES
WARD SALESMAN 30 SALES
JONES MANAGER 20 RESEARCH
MARTIN SALESMAN 30 SALES
BLAKE MANAGER 30 SALES
CLARK MANAGER 10 ACCOUNTING
SCOTT ANALYST 20 RESEARCH
KING PRESIDENT 10 ACCOUNTING
TURNER SALESMAN 30 SALES
ADAMS CLERK 20 RESEARCH
JAMES CLERK 30 SALES
FORD ANALYST 20 RESEARCH
MILLER CLERK 10 ACCOUNTING
14 rows selected.
SQL> select ename, job, dept.deptno, dname
2 from emp left outer join dept on emp.deptno = dept.deptno;
ENAME JOB DEPTNO DNAME
-------------------- ------------------ ---------- ----------------------------
MILLER CLERK 10 ACCOUNTING
KING PRESIDENT 10 ACCOUNTING
CLARK MANAGER 10 ACCOUNTING
FORD ANALYST 20 RESEARCH
ADAMS CLERK 20 RESEARCH
SCOTT ANALYST 20 RESEARCH
JONES MANAGER 20 RESEARCH
SMITH CLERK 20 RESEARCH
JAMES CLERK 30 SALES
TURNER SALESMAN 30 SALES
BLAKE MANAGER 30 SALES
MARTIN SALESMAN 30 SALES
WARD SALESMAN 30 SALES
ALLEN SALESMAN 30 SALES
PEONY CLERK
15 rows selected.
right outer join
SQL> select ename, job, dept.deptno, dname
2 from emp right outer join dept on emp.deptno = dept.deptno;
full outer join
SQL> select ename, job, dept.deptno, dname
2 from emp full outer join dept on emp.deptno = dept.deptno;
CROSS JOIN
두 개의 테이블의 모든 가능한 조합을 반환
연결 가능한 모든 정보의 수를 모두 연결한다. ( 16 X 4 = 56 rows)
SQL> select empno, ename, job, emp.deptno, dept.deptno, dname
2 from emp cross join dept
3 order by empno, dept.deptno;
EMPNO ENAME JOB DEPTNO DEPTNO DNAME
---------- -------------------- ------------------ ---------- ---------- ----------------------------
7369 SMITH CLERK 20 10 ACCOUNTING
7369 SMITH CLERK 20 20 RESEARCH
7369 SMITH CLERK 20 30 SALES
7369 SMITH CLERK 20 40 OPERATIONS
7499 ALLEN SALESMAN 30 10 ACCOUNTING
7499 ALLEN SALESMAN 30 20 RESEARCH
7499 ALLEN SALESMAN 30 30 SALES
7499 ALLEN SALESMAN 30 40 OPERATIONS
7521 WARD SALESMAN 30 10 ACCOUNTING
7521 WARD SALESMAN 30 20 RESEARCH
7521 WARD SALESMAN 30 30 SALES
7521 WARD SALESMAN 30 40 OPERATIONS
7566 JONES MANAGER 20 10 ACCOUNTING
7566 JONES MANAGER 20 20 RESEARCH
7566 JONES MANAGER 20 30 SALES
7566 JONES MANAGER 20 40 OPERATIONS
7654 MARTIN SALESMAN 30 10 ACCOUNTING
7654 MARTIN SALESMAN 30 20 RESEARCH
7654 MARTIN SALESMAN 30 30 SALES
7654 MARTIN SALESMAN 30 40 OPERATIONS
7698 BLAKE MANAGER 30 10 ACCOUNTING
7698 BLAKE MANAGER 30 20 RESEARCH
7698 BLAKE MANAGER 30 30 SALES
7698 BLAKE MANAGER 30 40 OPERATIONS
7782 CLARK MANAGER 10 10 ACCOUNTING
7782 CLARK MANAGER 10 20 RESEARCH
7782 CLARK MANAGER 10 30 SALES
7782 CLARK MANAGER 10 40 OPERATIONS
7788 SCOTT ANALYST 20 10 ACCOUNTING
7788 SCOTT ANALYST 20 20 RESEARCH
7788 SCOTT ANALYST 20 30 SALES
7788 SCOTT ANALYST 20 40 OPERATIONS
7839 KING PRESIDENT 10 10 ACCOUNTING
7839 KING PRESIDENT 10 20 RESEARCH
7839 KING PRESIDENT 10 30 SALES
7839 KING PRESIDENT 10 40 OPERATIONS
7844 TURNER SALESMAN 30 10 ACCOUNTING
7844 TURNER SALESMAN 30 20 RESEARCH
7844 TURNER SALESMAN 30 30 SALES
7844 TURNER SALESMAN 30 40 OPERATIONS
7876 ADAMS CLERK 20 10 ACCOUNTING
7876 ADAMS CLERK 20 20 RESEARCH
7876 ADAMS CLERK 20 30 SALES
7876 ADAMS CLERK 20 40 OPERATIONS
7900 JAMES CLERK 30 10 ACCOUNTING
7900 JAMES CLERK 30 20 RESEARCH
7900 JAMES CLERK 30 30 SALES
7900 JAMES CLERK 30 40 OPERATIONS
7902 FORD ANALYST 20 10 ACCOUNTING
7902 FORD ANALYST 20 20 RESEARCH
7902 FORD ANALYST 20 30 SALES
7902 FORD ANALYST 20 40 OPERATIONS
7934 MILLER CLERK 10 10 ACCOUNTING
7934 MILLER CLERK 10 20 RESEARCH
7934 MILLER CLERK 10
반응형