☭DEVELOPER/#2 웹개발(자바기반 풀스택)

[SQL]테이블 조인

조반짝 2023. 9. 6. 16:29
728x90
반응형

※ 테이블 조인하기

1. 조인
조인은 여러 테이블에 저장된 데이터를 한 번에 조회해야 할 필요가 있을 때 상요합니다.

2. 카디시안 곱(Cartesian Product) 활용
조인은 두 개 이상의 테이블을 결합한다는 의미가 있습니다.
조인 조건을 생략한 경우 행의 모든 조합을 표시하는 '카디시안 곱'이 생성됩니다.

[예시 : 특별한 키워드 없이 SELECT 문의 FROM 절에 사원(EMPLOYEE) 테이블과
 부서(DEPARTMENT) 테이블을 다음 "5)번"과 같이 콤마로 연결하여 연속하여 기술합니다]

1) set linesize 1000
2) set pagesize 100
3) cmd창 상단 마우스 우클릭 - 속성 - 레이아웃 탭에서 화면 버퍼 크기 : 너비(w) : 1000
4) $cls
5) select * from department, employee;

앞서, Cartesian Product의 결과로 얻어지는 칼럼 수는 사원 테이블의 칼럼 수(8)와
부서 테이블의 칼럼 수(3)를 더한 것이므로 11이 됩니다. 로우 수는 사원 한 명에
대해서 DEPARTMENT 테이블에 있는 4개의 로우와 결합되기 때문에 56개(14*4)가 됩니다.

3. EQUI JOIN
EQUI JOIN은 조인 대상 테이블에서 공통 칼럼을 '='(equal) 비교를 통해 같은 값을 가지는 행을 연결시켜줍니다.

(형식)
SELECT table1.column, table2.column
FROM table1, table2
WHERE table1.column1 = table2.column2;

(예시)
select *
from employee, department
where employee.dno = department.dno
order by employee.dno;

4. EQUI JOIN에 AND 연산하기
테이블을 조인할 경우 조인뿐 아니라 고려 대상인 행을 제한하기 위해 WHERE 절에 조건
을 추가해야 하는 경우가 있습니다. 

[예시 : 사원번호(ENO), 사원이름(ENAME), 소속부서(DNAME) 이름 출력하기]
SELECT ENO, ENAME, DNAME, EMPLOYEE.DNO
FROM EMPLOYEE, DEPARTMENT
WHERE EMPLOYEE.DNO = DEPARTMENT.DNO
AND ENO=7788;

SELECT * FROM EMPLOYEE;

SELECT * FROM DEPARTMENT;

5. 모호한 칼럼명 자세히 지정
WHERE 절에 모호성을 방지하기 위해서 칼럼명 앞에 테이블명을 명시합니다.
사용하고자 하는 칼럼명이 두 테이블의 공통된 칼럼이 아니라면
칼럼명을 자세히 지정하지 않아도 되지만, 테이블명을 접두사로 사용하면
칼럼을 찾을 위치를 정확하게 알 수가 있으므로 성능이 개선됩니다.

다음 예시에서 DNO 칼럼명 앞에 테이블명을 사용하면 모호성 문제가 해결됩니다.
중복되지 않은 칼럼명이라면 굳이 테이블명을 명시하지 않아도 됩니다.
[예시 : 부분적으로 칼럼명 앞에 테이블명 명시하기]
01:   select eno, ename, dname, employee.dno
02: from employee, department
03:   where employee.dno = department.dno
04: and eno=7788;

6. 테이블에 별칭 사용하기
테이블명이 너무 긴 경우에 테이블명을 대신하는 별칭을 사용할 수 있습니다.
FROM 절에서 테이블명 다음에 공백을 두고 별명을 정의합니다.
테이블 별칭을 작성하는 규칙은 다음과 같습니다.
1) 테이블의 별명은 30자까지 가능하지만 너무 길지 않게 작성합니다.
2) FROM 절에서 테이블명을 명시하고 공백을 둔 다음 테이블 별칭을 지정합니다.
3) 하나의SQL 명령문에서 테이블명과 별명을 혼용할 수 없습니다.
4) 테이블의 별칭은 해당 SQL 명령문 내에서만 유효합니다.

[예시 : 테이블명에 별칭 사용하기]
01: select e.eno, e.ename, d.dname, e.dno
02: from employee e, department d
03: where e.dno = d.dno
04: and e.eno=7788;

7. EQUI JOIN - NATURAL JOIN
NATURAL JOIN은 오라클 9i 이전에 EQUI JOIN으로 사용하던 것을 대신해서 사용하는
조인 방식입니다. EQUI JOIN에서는 해당 테이블명을 명시적으로 지정하지 않고는
조인을수행할수 없었지만, WHERE절을 사용하지 않고 NATURAL JOIN 키워드를 사용하면
오라클에서 자동적으로 테이블의 모든 칼럼을 대상으로 일치하는 데이터 유형 및
이름을 가진 공통 칼럼을 조사한 후에 자동으로 조인을 수행합니다.

(형식)
SELECT table1.column, table2.column
FROM table1 NATURAL JOIN table2;


8. EQUI JOIN-JOIN ~ USING
USING 절에 조인 대상이 되는 칼럼을 지정합니다.
(형식)
SELECT table1.column, table2.column
FROM table1 JOIN table2
USING(column);

(예시 : USING 절 사용하기)
01: select e.eno, e.ename, d.dname, e.dno
02: from employee e join department d
03: using(dno)
04: where e.eno=7788;

9. EQUI JOIN-JOIN ~ ON
NATURAL JOIN의 조인 조건은 기본적으로 같은 이름을 가진
칼럼에 대해서 동일한 값을 갖는 로우끼리 결합하는 조인입니다.
만일 임의의 조건을 지정하거나 조인할 칼럼을 지정하려면 ON절을 사용합니다.
조인 조건만을 ON절에 기술하고 다른 검색이나 필터 조건은
WHERE 절에 분리해서 기술할 수 있습니다.

(예시 : ON절 사용하기)
01: SELECT E.ENO, E.ENAME, D.DNAME, E.DNO
02: FROM EMPLOYEE E JOIN DEPARTMENT D
03: ON E.DNO = D.DNO
04: WHERE E.ENO=7788;

10. NON-EQUI JOIN
NON-EQUI JOIN은 조인 조건에 특정 범위 내에 있는지를 조사하기 위해서 사용합니다.
WHERE 절에 '<', BETWEEN a AND b와 같이 '=' 조건이 아닌 연산자를 사용합니다.

11. SELF JOIN
SELF JOIN은 하나의 테이블에 있는 칼럼끼리 연결해야 하는 조인이 필요한 경우
사용합니다. SELF JOIN이란 말 그대로 자기 자신과 조인을 맺는 것을 말합니다.
조인 대상 테이블이 자신 하나라는 것 외에는 EQUI JOIN과 동일합니다.

12. OUTER JOIN
EQUI JOIN에서 양측 칼럼 값 중의 하나가 NULL이지만
조인 결과로 출력할 필요가 있는 경우에 OUTER JOIN을 사용합니다.

다음과 같이 사원(EMPLOYEE) 테이블을 OUTER JOIN하여 매니저가 없는 사원의 이름을 출력해 봅니다.
참고로, 오라클 9i 버전부터 OUTER JOIN 절을 JOIN ~ ON 절과 함께 사용할 수 있습니다.
[예시 : (+)기호를 사용한 OUTER JOIN 구현]
01: SELECT EMPLOYEES.ENAME || '의 직속 상관은 '|| MANAGER.ENAME
02: FROM EMPLOYEE EMPLOYEES JOIN EMPLOYEE.MANAGER
03: ON EMPLOYEES.MANGER = MANAGER.ENO(+);

 


테이블과 테이블을 연계해서 사용할 수 있다.

테이블과 테이블을 연계한다 > 조인해서 원하는 정보를 얻을 수 있다.

 


SQL> select * from department, employee;

       DNO DNAME                LOC                  ENO ENAME      JOB          MANAGER HIREDATE     SALARY COMMISSION        DNO
---------- -------------------- ------------- ---------- ---------- --------- ---------- -------- ---------- ---------- ----------
        10 ACCOUNTING           NEW YORK            7369 SMITH      CLERK           7902 80/12/17        800                    20
        10 ACCOUNTING           NEW YORK            7499 ALLEN      SALESMAN        7698 81/02/20       1600        300         30
        10 ACCOUNTING           NEW YORK            7521 WARD       SALESMAN        7698 81/02/22       1250        500         30
        10 ACCOUNTING           NEW YORK            7566 JONES      MANAGER         7839 81/04/02       2975                    20
        10 ACCOUNTING           NEW YORK            7654 MARTIN     SALESMAN        7698 81/09/28       1250      1,400         30
        10 ACCOUNTING           NEW YORK            7698 BLAKE      MANAGER         7839 81/05/01       2850                    30
        10 ACCOUNTING           NEW YORK            7782 CLARK      MANAGER         7839 81/06/09       2450                    10
        10 ACCOUNTING           NEW YORK            7788 SCOTT      ANALYST         7566 87/07/13       3000                    20
        10 ACCOUNTING           NEW YORK            7839 KING       PRESIDENT            81/11/17       5000                    10
        10 ACCOUNTING           NEW YORK            7844 TURNER     SALESMAN        7698 81/09/08       1500          0         30
        10 ACCOUNTING           NEW YORK            7876 ADAMS      CLERK           7788 87/07/13       1100                    20
        10 ACCOUNTING           NEW YORK            7900 JAMES      CLERK           7698 81/12/03        950                    30
        10 ACCOUNTING           NEW YORK            7902 FORD       ANALYST         7566 81/12/03       3000                    20
        10 ACCOUNTING           NEW YORK            7934 MILLER     CLERK           7782 82/01/23       1300                    10
        20 RESEARCH             DALLAS              7369 SMITH      CLERK           7902 80/12/17        800                    20
        20 RESEARCH             DALLAS              7499 ALLEN      SALESMAN        7698 81/02/20       1600        300         30
        20 RESEARCH             DALLAS              7521 WARD       SALESMAN        7698 81/02/22       1250        500         30
        20 RESEARCH             DALLAS              7566 JONES      MANAGER         7839 81/04/02       2975                    20
        20 RESEARCH             DALLAS              7654 MARTIN     SALESMAN        7698 81/09/28       1250      1,400         30
        20 RESEARCH             DALLAS              7698 BLAKE      MANAGER         7839 81/05/01       2850                    30
        20 RESEARCH             DALLAS              7782 CLARK      MANAGER         7839 81/06/09       2450                    10
        20 RESEARCH             DALLAS              7788 SCOTT      ANALYST         7566 87/07/13       3000                    20
        20 RESEARCH             DALLAS              7839 KING       PRESIDENT            81/11/17       5000                    10
        20 RESEARCH             DALLAS              7844 TURNER     SALESMAN        7698 81/09/08       1500          0         30
        20 RESEARCH             DALLAS              7876 ADAMS      CLERK           7788 87/07/13       1100                    20
        20 RESEARCH             DALLAS              7900 JAMES      CLERK           7698 81/12/03        950                    30
        20 RESEARCH             DALLAS              7902 FORD       ANALYST         7566 81/12/03       3000                    20
        20 RESEARCH             DALLAS              7934 MILLER     CLERK           7782 82/01/23       1300                    10
        30 SALES                CHICAGO             7369 SMITH      CLERK           7902 80/12/17        800                    20
        30 SALES                CHICAGO             7499 ALLEN      SALESMAN        7698 81/02/20       1600        300         30
        30 SALES                CHICAGO             7521 WARD       SALESMAN        7698 81/02/22       1250        500         30
        30 SALES                CHICAGO             7566 JONES      MANAGER         7839 81/04/02       2975                    20
        30 SALES                CHICAGO             7654 MARTIN     SALESMAN        7698 81/09/28       1250      1,400         30
        30 SALES                CHICAGO             7698 BLAKE      MANAGER         7839 81/05/01       2850                    30
        30 SALES                CHICAGO             7782 CLARK      MANAGER         7839 81/06/09       2450                    10
        30 SALES                CHICAGO             7788 SCOTT      ANALYST         7566 87/07/13       3000                    20
        30 SALES                CHICAGO             7839 KING       PRESIDENT            81/11/17       5000                    10
        30 SALES                CHICAGO             7844 TURNER     SALESMAN        7698 81/09/08       1500          0         30
        30 SALES                CHICAGO             7876 ADAMS      CLERK           7788 87/07/13       1100                    20
        30 SALES                CHICAGO             7900 JAMES      CLERK           7698 81/12/03        950                    30
        30 SALES                CHICAGO             7902 FORD       ANALYST         7566 81/12/03       3000                    20
        30 SALES                CHICAGO             7934 MILLER     CLERK           7782 82/01/23       1300                    10
        40 OPERATIONS           BOSTON              7369 SMITH      CLERK           7902 80/12/17        800                    20
        40 OPERATIONS           BOSTON              7499 ALLEN      SALESMAN        7698 81/02/20       1600        300         30
        40 OPERATIONS           BOSTON              7521 WARD       SALESMAN        7698 81/02/22       1250        500         30
        40 OPERATIONS           BOSTON              7566 JONES      MANAGER         7839 81/04/02       2975                    20
        40 OPERATIONS           BOSTON              7654 MARTIN     SALESMAN        7698 81/09/28       1250      1,400         30
        40 OPERATIONS           BOSTON              7698 BLAKE      MANAGER         7839 81/05/01       2850                    30
        40 OPERATIONS           BOSTON              7782 CLARK      MANAGER         7839 81/06/09       2450                    10
        40 OPERATIONS           BOSTON              7788 SCOTT      ANALYST         7566 87/07/13       3000                    20
        40 OPERATIONS           BOSTON              7839 KING       PRESIDENT            81/11/17       5000                    10
        40 OPERATIONS           BOSTON              7844 TURNER     SALESMAN        7698 81/09/08       1500          0         30
        40 OPERATIONS           BOSTON              7876 ADAMS      CLERK           7788 87/07/13       1100                    20
        40 OPERATIONS           BOSTON              7900 JAMES      CLERK           7698 81/12/03        950                    30
        40 OPERATIONS           BOSTON              7902 FORD       ANALYST         7566 81/12/03       3000                    20
        40 OPERATIONS           BOSTON              7934 MILLER     CLERK           7782 82/01/23       1300                    10

56 개의 행이 선택되었습니다.

SQL> select count(*) from department, employee;

  COUNT(*)
----------
        56

SQL> -- department와 employee 테이블 조인
SQL>

14 * 4 = 56

 각 사원들이 소속된 부서 정보 얻기

SQL>  select *from department
  2  ;

       DNO DNAME                LOC
---------- -------------------- -------------
        10 ACCOUNTING           NEW YORK
        20 RESEARCH             DALLAS
        30 SALES                CHICAGO
        40 OPERATIONS           BOSTON

SQL> select * from employee;

       ENO ENAME      JOB          MANAGER HIREDATE     SALARY COMMISSION        DNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 80/12/17        800                    20
      7499 ALLEN      SALESMAN        7698 81/02/20       1600        300         30
      7521 WARD       SALESMAN        7698 81/02/22       1250        500         30
      7566 JONES      MANAGER         7839 81/04/02       2975                    20
      7654 MARTIN     SALESMAN        7698 81/09/28       1250      1,400         30
      7698 BLAKE      MANAGER         7839 81/05/01       2850                    30
      7782 CLARK      MANAGER         7839 81/06/09       2450                    10
      7788 SCOTT      ANALYST         7566 87/07/13       3000                    20
      7839 KING       PRESIDENT            81/11/17       5000                    10
      7844 TURNER     SALESMAN        7698 81/09/08       1500          0         30
      7876 ADAMS      CLERK           7788 87/07/13       1100                    20
      7900 JAMES      CLERK           7698 81/12/03        950                    30
      7902 FORD       ANALYST         7566 81/12/03       3000                    20
      7934 MILLER     CLERK           7782 82/01/23       1300                    10

14 개의 행이 선택되었습니다.

department와 employee를 조인하여 서로 없는 정보를 합친다.

각 사원들이 소속된 부서정보를 화면으로 표시합니다.

SQL> -- department와 employee를 조인하여 서로 없는 정보를 합친다.
SQL> -- 각 사원들이 소속된 부서정보를 화면으로 표시합니다.
SQL> select * from employee, department
  2  where employee.dno = department.dno
  3  order by employee.dno;

       ENO ENAME      JOB          MANAGER HIREDATE     SALARY COMMISSION        DNO        DNO DNAME                LOC
---------- ---------- --------- ---------- -------- ---------- ---------- ---------- ---------- -------------------- -------------
      7782 CLARK      MANAGER         7839 81/06/09       2450                    10         10 ACCOUNTING           NEW YORK
      7839 KING       PRESIDENT            81/11/17       5000                    10         10 ACCOUNTING           NEW YORK
      7934 MILLER     CLERK           7782 82/01/23       1300                    10         10 ACCOUNTING           NEW YORK
      7566 JONES      MANAGER         7839 81/04/02       2975                    20         20 RESEARCH             DALLAS
      7902 FORD       ANALYST         7566 81/12/03       3000                    20         20 RESEARCH             DALLAS
      7876 ADAMS      CLERK           7788 87/07/13       1100                    20         20 RESEARCH             DALLAS
      7369 SMITH      CLERK           7902 80/12/17        800                    20         20 RESEARCH             DALLAS
      7788 SCOTT      ANALYST         7566 87/07/13       3000                    20         20 RESEARCH             DALLAS
      7521 WARD       SALESMAN        7698 81/02/22       1250        500         30         30 SALES                CHICAGO
      7844 TURNER     SALESMAN        7698 81/09/08       1500          0         30         30 SALES                CHICAGO
      7499 ALLEN      SALESMAN        7698 81/02/20       1600        300         30         30 SALES                CHICAGO
      7900 JAMES      CLERK           7698 81/12/03        950                    30         30 SALES                CHICAGO
      7698 BLAKE      MANAGER         7839 81/05/01       2850                    30         30 SALES                CHICAGO
      7654 MARTIN     SALESMAN        7698 81/09/28       1250      1,400         30         30 SALES                CHICAGO

14 개의 행이 선택되었습니다.

테이블에 별칭(ALIAS)을 사용하여, 각 사원들이 소속된 부서정보를 화면으로 표시합니다.

SQL> SELECT * FROM EMPLOYEE E, DEPARTMENT D
  2  WHERE E.DNO = D.DNO
  3  ORDER BY E.DNO;

       ENO ENAME      JOB          MANAGER HIREDATE     SALARY COMMISSION        DNO        DNO DNAME                LOC
---------- ---------- --------- ---------- -------- ---------- ---------- ---------- ---------- -------------------- -------------
      7782 CLARK      MANAGER         7839 81/06/09       2450                    10         10 ACCOUNTING           NEW YORK
      7839 KING       PRESIDENT            81/11/17       5000                    10         10 ACCOUNTING           NEW YORK
      7934 MILLER     CLERK           7782 82/01/23       1300                    10         10 ACCOUNTING           NEW YORK
      7566 JONES      MANAGER         7839 81/04/02       2975                    20         20 RESEARCH             DALLAS
      7902 FORD       ANALYST         7566 81/12/03       3000                    20         20 RESEARCH             DALLAS
      7876 ADAMS      CLERK           7788 87/07/13       1100                    20         20 RESEARCH             DALLAS
      7369 SMITH      CLERK           7902 80/12/17        800                    20         20 RESEARCH             DALLAS
      7788 SCOTT      ANALYST         7566 87/07/13       3000                    20         20 RESEARCH             DALLAS
      7521 WARD       SALESMAN        7698 81/02/22       1250        500         30         30 SALES                CHICAGO
      7844 TURNER     SALESMAN        7698 81/09/08       1500          0         30         30 SALES                CHICAGO
      7499 ALLEN      SALESMAN        7698 81/02/20       1600        300         30         30 SALES                CHICAGO
      7900 JAMES      CLERK           7698 81/12/03        950                    30         30 SALES                CHICAGO
      7698 BLAKE      MANAGER         7839 81/05/01       2850                    30         30 SALES                CHICAGO
      7654 MARTIN     SALESMAN        7698 81/09/28       1250      1,400         30         30 SALES                CHICAGO

14 개의 행이 선택되었습니다.

사원번호(ENO)가 7788인 사원의 이름(ENAME)과 소속 부서명(DNAME)을 출력합니다

SQL> SELECT ENO, ENAME, DNAME, E.DNO
  2  FROM EMPLOYEE E, DEPARTMENT D
  3  WHERE E.DNO = D.DNO
  4  AND ENO = 7788;

       ENO ENAME      DNAME                       DNO
---------- ---------- -------------------- ----------
      7788 SCOTT      RESEARCH                     20

모호한 칼럼명으로 인한 오류 발생예시

조인할떄는 보통 칼럼명 앞에 테이블명을 명확하게 해야한다.

SQL> -- 모호한 칼럼명으로 인한 오류 발생예시
SQL> SELECT ENO, ENAME, DNAME, DNO
  2  FROM EMPLOYEE, DEPARTMENT
  3  WHERE EMPLOYEE.DNO = DEPARTMENT.DNO
  4  AND ENO=7788;
SELECT ENO, ENAME, DNAME, DNO
                          *
1행에 오류:
ORA-00918: 열의 정의가 애매합니다

칼럼명 앞에 테이블명 명확하게 명시하기

SQL> -- 칼럼명 앞에 테이블명 명확하게 명시하기
SQL> SELECT E.ENO, E.ENAME, D.DNAME, E.DNO
  2  FROM EMPLOYEE E, DEPARTMENT D
  3  WHERE E.DNO = D.DNO
  4  AND E.ENO = 7788;

       ENO ENAME      DNAME                       DNO
---------- ---------- -------------------- ----------
      7788 SCOTT      RESEARCH                     20

 USING절 사용하기

SQL> -- USING절 사용하기
SQL> SELECT E.ENO, E.ENAME, D.DNAME, DNO
  2  FROM EMPLOYEE E JOIN DEPARTMENT D
  3  USING(DNO)
  4  WHERE E.ENO=7788;

       ENO ENAME      DNAME                       DNO
---------- ---------- -------------------- ----------
      7788 SCOTT      RESEARCH                     20

ON 절 사용하기

SQL> -- ON 절 사용하기
SQL> SELECT E.ENO, E.ENAME, D.DNAME, D.DNO
  2  FROM EMPLOYEE E JOIN DEPARTMENT D
  3  ON E.DNO = D.DNO
  4  WHERE E.ENO = 7788;

       ENO ENAME      DNAME                       DNO
---------- ---------- -------------------- ----------
      7788 SCOTT      RESEARCH                     20

사원별로 급여 등급을 고려하여 화면으로 출력해 봅니다.

SQL> -- 사원별로 급여 등급을 고려하여 화면으로 출력해 봅니다.
SQL> SELECT * FROM EMPLOYEE, SALGRADE;

       ENO ENAME      JOB          MANAGER HIREDATE     SALARY COMMISSION        DNO      GRADE      LOSAL      HISAL
---------- ---------- --------- ---------- -------- ---------- ---------- ---------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 80/12/17        800                    20          1        700       1200
      7499 ALLEN      SALESMAN        7698 81/02/20       1600        300         30          1        700       1200
      7521 WARD       SALESMAN        7698 81/02/22       1250        500         30          1        700       1200
      7566 JONES      MANAGER         7839 81/04/02       2975                    20          1        700       1200
      7654 MARTIN     SALESMAN        7698 81/09/28       1250      1,400         30          1        700       1200
      7698 BLAKE      MANAGER         7839 81/05/01       2850                    30          1        700       1200
      7782 CLARK      MANAGER         7839 81/06/09       2450                    10          1        700       1200
      7788 SCOTT      ANALYST         7566 87/07/13       3000                    20          1        700       1200
      7839 KING       PRESIDENT            81/11/17       5000                    10          1        700       1200
      7844 TURNER     SALESMAN        7698 81/09/08       1500          0         30          1        700       1200
      7876 ADAMS      CLERK           7788 87/07/13       1100                    20          1        700       1200
      7900 JAMES      CLERK           7698 81/12/03        950                    30          1        700       1200
      7902 FORD       ANALYST         7566 81/12/03       3000                    20          1        700       1200
      7934 MILLER     CLERK           7782 82/01/23       1300                    10          1        700       1200
      7369 SMITH      CLERK           7902 80/12/17        800                    20          2       1201       1400
      7499 ALLEN      SALESMAN        7698 81/02/20       1600        300         30          2       1201       1400
      7521 WARD       SALESMAN        7698 81/02/22       1250        500         30          2       1201       1400
      7566 JONES      MANAGER         7839 81/04/02       2975                    20          2       1201       1400
      7654 MARTIN     SALESMAN        7698 81/09/28       1250      1,400         30          2       1201       1400
      7698 BLAKE      MANAGER         7839 81/05/01       2850                    30          2       1201       1400
      7782 CLARK      MANAGER         7839 81/06/09       2450                    10          2       1201       1400
      7788 SCOTT      ANALYST         7566 87/07/13       3000                    20          2       1201       1400
      7839 KING       PRESIDENT            81/11/17       5000                    10          2       1201       1400
      7844 TURNER     SALESMAN        7698 81/09/08       1500          0         30          2       1201       1400
      7876 ADAMS      CLERK           7788 87/07/13       1100                    20          2       1201       1400
      7900 JAMES      CLERK           7698 81/12/03        950                    30          2       1201       1400
      7902 FORD       ANALYST         7566 81/12/03       3000                    20          2       1201       1400
      7934 MILLER     CLERK           7782 82/01/23       1300                    10          2       1201       1400
      7369 SMITH      CLERK           7902 80/12/17        800                    20          3       1401       2000
      7499 ALLEN      SALESMAN        7698 81/02/20       1600        300         30          3       1401       2000
      7521 WARD       SALESMAN        7698 81/02/22       1250        500         30          3       1401       2000
      7566 JONES      MANAGER         7839 81/04/02       2975                    20          3       1401       2000
      7654 MARTIN     SALESMAN        7698 81/09/28       1250      1,400         30          3       1401       2000
      7698 BLAKE      MANAGER         7839 81/05/01       2850                    30          3       1401       2000
      7782 CLARK      MANAGER         7839 81/06/09       2450                    10          3       1401       2000
      7788 SCOTT      ANALYST         7566 87/07/13       3000                    20          3       1401       2000
      7839 KING       PRESIDENT            81/11/17       5000                    10          3       1401       2000
      7844 TURNER     SALESMAN        7698 81/09/08       1500          0         30          3       1401       2000
      7876 ADAMS      CLERK           7788 87/07/13       1100                    20          3       1401       2000
      7900 JAMES      CLERK           7698 81/12/03        950                    30          3       1401       2000
      7902 FORD       ANALYST         7566 81/12/03       3000                    20          3       1401       2000
      7934 MILLER     CLERK           7782 82/01/23       1300                    10          3       1401       2000
      7369 SMITH      CLERK           7902 80/12/17        800                    20          4       2001       3000
      7499 ALLEN      SALESMAN        7698 81/02/20       1600        300         30          4       2001       3000
      7521 WARD       SALESMAN        7698 81/02/22       1250        500         30          4       2001       3000
      7566 JONES      MANAGER         7839 81/04/02       2975                    20          4       2001       3000
      7654 MARTIN     SALESMAN        7698 81/09/28       1250      1,400         30          4       2001       3000
      7698 BLAKE      MANAGER         7839 81/05/01       2850                    30          4       2001       3000
      7782 CLARK      MANAGER         7839 81/06/09       2450                    10          4       2001       3000
      7788 SCOTT      ANALYST         7566 87/07/13       3000                    20          4       2001       3000
      7839 KING       PRESIDENT            81/11/17       5000                    10          4       2001       3000
      7844 TURNER     SALESMAN        7698 81/09/08       1500          0         30          4       2001       3000
      7876 ADAMS      CLERK           7788 87/07/13       1100                    20          4       2001       3000
      7900 JAMES      CLERK           7698 81/12/03        950                    30          4       2001       3000
      7902 FORD       ANALYST         7566 81/12/03       3000                    20          4       2001       3000
      7934 MILLER     CLERK           7782 82/01/23       1300                    10          4       2001       3000
      7369 SMITH      CLERK           7902 80/12/17        800                    20          5       3001       9999
      7499 ALLEN      SALESMAN        7698 81/02/20       1600        300         30          5       3001       9999
      7521 WARD       SALESMAN        7698 81/02/22       1250        500         30          5       3001       9999
      7566 JONES      MANAGER         7839 81/04/02       2975                    20          5       3001       9999
      7654 MARTIN     SALESMAN        7698 81/09/28       1250      1,400         30          5       3001       9999
      7698 BLAKE      MANAGER         7839 81/05/01       2850                    30          5       3001       9999
      7782 CLARK      MANAGER         7839 81/06/09       2450                    10          5       3001       9999
      7788 SCOTT      ANALYST         7566 87/07/13       3000                    20          5       3001       9999
      7839 KING       PRESIDENT            81/11/17       5000                    10          5       3001       9999
      7844 TURNER     SALESMAN        7698 81/09/08       1500          0         30          5       3001       9999
      7876 ADAMS      CLERK           7788 87/07/13       1100                    20          5       3001       9999
      7900 JAMES      CLERK           7698 81/12/03        950                    30          5       3001       9999
      7902 FORD       ANALYST         7566 81/12/03       3000                    20          5       3001       9999
      7934 MILLER     CLERK           7782 82/01/23       1300                    10          5       3001       9999

70 개의 행이 선택되었습니다.

사원별로 급여 등급 출력하기

SQL> -- 사원별로 급여 등급 출력하기
SQL> SELECT E.ENAME, E.SALARY, S.GRADE
  2  FROM EMPLOYEE E, SALGRADE S
  3  WHERE E.SALARY BETWEEN S.LOSAL AND S.HISAL;

ENAME          SALARY      GRADE
---------- ---------- ----------
SMITH             800          1
JAMES             950          1
ADAMS            1100          1
WARD             1250          2
MARTIN           1250          2
MILLER           1300          2
TURNER           1500          3
ALLEN            1600          3
CLARK            2450          4
BLAKE            2850          4
JONES            2975          4
SCOTT            3000          4
FORD             3000          4
KING             5000          5

14 개의 행이 선택되었습니다.

3개의 테이블 조인하기

SQL> -- 3개의 테이블 조인하기
SQL> SELECT E.NAME, D.DNAME, E.SALARY, S.GRADE
  2  FROM EMPLOYEE E, DEPARTMENT D, SALGRADE S
  3  WHERE E.DNO = D.DNO
  4
SQL> -- 3개의 테이블 조인하기
SQL> SELECT E.ENAME, D.DNAME, E.SALARY, S.GRADE
  2  FROM EMPLOYEE E, DEPARTMENT D, SALGRADE S
  3  WHERE E.DNO = D.DNO
  4  AND E.SALARY BETWEEN S.LOSAL AND S.HISAL;

ENAME      DNAME                    SALARY      GRADE
---------- -------------------- ---------- ----------
SMITH      RESEARCH                    800          1
JAMES      SALES                       950          1
ADAMS      RESEARCH                   1100          1
WARD       SALES                      1250          2
MARTIN     SALES                      1250          2
MILLER     ACCOUNTING                 1300          2
TURNER     SALES                      1500          3
ALLEN      SALES                      1600          3
CLARK      ACCOUNTING                 2450          4
BLAKE      SALES                      2850          4
JONES      RESEARCH                   2975          4
SCOTT      RESEARCH                   3000          4
FORD       RESEARCH                   3000          4
KING       ACCOUNTING                 5000          5

14 개의 행이 선택되었습니다.

SELF JOIN은 하나의 테이블에 있는 칼럼끼리 연결해야 하는 조인이 필요한 경우에 활용을 합니다.

다음은 WHERE 절을 사용한 SELF JOIN 적용 예시입니다.

SQL> --SELF JOIN은 하나의 테이블에 있는 칼럼끼리 연결해야 하는 조인이 필요한 경우에 활용을 합니다.
SQL> -- 다음은 WHERE 절을 사용한 SELF JOIN 적용 예시입니다.
SQL> SELECT E.ENAME AS "사원이름", M.ENAME AS "직속상관이름"
  2  FROM EMPLOYEE E, EMPLOYEE M
  3  WHERE E.MANAGER = M.ENO;

사원이름   직속상관이
---------- ----------
FORD       JONES
SCOTT      JONES
JAMES      BLAKE
TURNER     BLAKE
MARTIN     BLAKE
WARD       BLAKE
ALLEN      BLAKE
MILLER     CLARK
ADAMS      SCOTT
CLARK      KING
BLAKE      KING
JONES      KING
SMITH      FORD

13 개의 행이 선택되었습니다.

필드가 속성 

객체.필드로 이해하면된다.

E.MANAGER = EMPLOYEE중 MANAGER

 

 

 다음은 WHERE 절을 사용한 SELF JOIN 적용 예시입니다.

SQL> -- 다음은 WHERE 절을 사용한 SELF JOIN 적용 예시입니다.
SQL> SELECT E.ENAME ||'의 직속 상관은' || M.ENAME
  2  FROM EMPLOYEE E JOIN EMPLOYEE M
  3  ON E.MANAGER = M.ENO;

E.ENAME||'의직속상관은'||M.ENAME
----------------------------------
FORD의 직속 상관은JONES
SCOTT의 직속 상관은JONES
JAMES의 직속 상관은BLAKE
TURNER의 직속 상관은BLAKE
MARTIN의 직속 상관은BLAKE
WARD의 직속 상관은BLAKE
ALLEN의 직속 상관은BLAKE
MILLER의 직속 상관은CLARK
ADAMS의 직속 상관은SCOTT
CLARK의 직속 상관은KING
BLAKE의 직속 상관은KING
JONES의 직속 상관은KING
SMITH의 직속 상관은FORD

13 개의 행이 선택되었습니다.

 WHERE 절의 조인 조건에서 OUTER JOIN 연산자인 '(+)' 기호를 사용합니다.

조인 조건문에서 NULL이 출력되는 테이블의 칼럼에 (+)기호를 추가합니다.

사원테이블(EMPLOYEE)을 OUTER JOIN하여 매니저가 없는 사원의 이름을 출력합니다.

다음은 (+)기호를 사요한 OUTER JOIN 활용 예시입니다.

SQL> -- WHERE 절의 조인 조건에서 OUTER JOIN 연산자인 '(+)' 기호를 사용합니다.
SQL> -- 조인 조건문에서 NULL이 출력되는 테이블의 칼럼에 (+)기호를 추가합니다.
SQL> -- 사원테이블(EMPLOYEE)을 OUTER JOIN하여 매니저가 없는 사원의 이름을 출력합니다.
SQL> -- 다음은 (+)기호를 사요한 OUTER JOIN 활용 예시입니다.
SQL> SELECT E.ENAME || '의 직속 상관은' || M.ENAME
  2  FROM EMPLOYEE E JOIN EMPLOYEE M
  3  ON E.MANAGER = M.ENO(+);

E.ENAME||'의직속상관은'||M.ENAME
----------------------------------
FORD의 직속 상관은JONES
SCOTT의 직속 상관은JONES
JAMES의 직속 상관은BLAKE
TURNER의 직속 상관은BLAKE
MARTIN의 직속 상관은BLAKE
WARD의 직속 상관은BLAKE
ALLEN의 직속 상관은BLAKE
MILLER의 직속 상관은CLARK
ADAMS의 직속 상관은SCOTT
CLARK의 직속 상관은KING
BLAKE의 직속 상관은KING
JONES의 직속 상관은KING
SMITH의 직속 상관은FORD
KING의 직속 상관은

14 개의 행이 선택되었습니다.

 LEFT OUTER JOIN은 FROM 절의 왼쪽에 위치한 테이블이 NULL을 가질 경우에 사용합니다.

다음은 ANSI OUTER JOIN 사용하기 예시입니다.

SQL> -- LEFT OUTER JOIN은 FROM 절의 왼쪽에 위치한 테이블이 NULL을 가질 경우에 사용합니다.
SQL> -- 다음은 ANSI OUTER JOIN 사용하기 예시입니다.
SQL> SELECT E.ENAME ||'의 직속 상관은'|| M.ENAME
  2  FROM EMPLOYEE E LEFT OUTER JOIN EMPLOYEE M
  3  ON E.MANAGER = M.ENO;

E.ENAME||'의직속상관은'||M.ENAME
----------------------------------
FORD의 직속 상관은JONES
SCOTT의 직속 상관은JONES
JAMES의 직속 상관은BLAKE
TURNER의 직속 상관은BLAKE
MARTIN의 직속 상관은BLAKE
WARD의 직속 상관은BLAKE
ALLEN의 직속 상관은BLAKE
MILLER의 직속 상관은CLARK
ADAMS의 직속 상관은SCOTT
CLARK의 직속 상관은KING
BLAKE의 직속 상관은KING
JONES의 직속 상관은KING
SMITH의 직속 상관은FORD
KING의 직속 상관은

14 개의 행이 선택되었습니다.

 

JOIN 은 = 와 같은 개념이 아님. 테이블 조인시 쓰는 JOIN은 , 와 같은 개념이다. JOIN USING, JOIN ON이 , (콤마) 대신에 들어가는 것이다. 방법이 다양하다는 것임!!! JOIN을 쓰는건 JOIN USING JOIN ON 등 명령절로 편하게 쓸 수 있다는 것을 의미하며, = 은 조건과 조건이 같을 때 쓰는 것으로 JOIN이나 ,로 테이블을 합치는 개념과 다르다.

 

728x90
반응형