Peony의 기록 창고 🌼
article thumbnail
반응형

조인(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

 

반응형
profile

Peony의 기록 창고 🌼

@myeongju