※ 테이블 조인하기
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이나 ,로 테이블을 합치는 개념과 다르다.
'☭DEVELOPER > #2 웹개발(자바기반 풀스택)' 카테고리의 다른 글
[SQL]테이블 생성 수정 제거하기 (0) | 2023.09.07 |
---|---|
[BACKEND]코딩테스트10 (0) | 2023.09.07 |
[SQL] SQL PLUS 형식 명령어 활용 (0) | 2023.09.05 |
[BACKEND]JAVA_ECLIPSE 32 입출력 관련 API (0) | 2023.09.05 |
[BACKEND]코딩테스트9 (0) | 2023.09.05 |