Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

붓, 그리다

조인 개요 및 작성법 본문

Oracle

조인 개요 및 작성법

붓그린 2017. 6. 16. 13:17


Q3. 조인(Join)
: 한 개 이상의 테이블을 가지고 검색하면서 중복된 데이터가 없게 설정하여 원하는 데이터를 검색

select 조회하고자 하는 필드명, 필드명2,,,
 from 테이블명1,테이블명2



EX) ALLEN이 근무하는 부서명을 알아보자 : emp테이블과 dept테이블을 활용하여 조인해보기

select empno, ename, deptno, dname, loc
 from emp, dept;

SQL> select empno, ename, deptno, dname, loc from emp, dept;
                            *
1행에 오류:
ORA-00918: 열의 정의가 애매합니다
deptno 필드가 emp와 dept테이블 모두 포함하고 있어서 어느것을 출력할지 애매함
-> 똑같은 필드명의 경우 테이블명을 지정해주어야함. (테이블명.필드명 : emp.deptno)

SQL> ed
file afiedt.buf(이)가 기록되었습니다

  1 select empno, ename, dept.deptno, dname, loc
  2* from emp, dept
SQL> /

  EMPNO ENAME DEPTNO DNAME LOC
---------- ---------- ---------- -------------- -------------
  7369 SMITH 10 ACCOUNTING NEW YORK
  7499 ALLEN 10 ACCOUNTING NEW YORK
  7521 WARD 10 ACCOUNTING NEW YORK
  7566 JONES 10 ACCOUNTING NEW YORK
  7654 MARTIN 10 ACCOUNTING NEW YORK
56 개의 행이 선택되었습니다.

* 두 테이블에서 보고자하는 필드를 단순히 나열하는 것이 조인이 아님

위의 방법의 단점
1) 데이터 개수와 중복된 데이터가 많아진다.
2)  중복된 데이터가 많아지면 내가 원하는 데이터를 찾기가 어렵다.
-> 한 개 이상의 테이블을 검색하면서 중복된 데이터가 없게 설정하는 방법이 조인
-> 내가 원하는 데이터를 검색한다.


[조인의 종류]

1) Inner Join(default) : 두 테이블의 데이터 양이 비슷할 때 일치하는(연관된) 데이터를 검색

select 필드명1,,테이블명.필드명~
 from 테이블1, 테이블2 (여기까지만 하면 조인이 아님)
 where 조건식(emp.deptno=dept.deptno) (중복되는 데이터를 연결)


2) Outer Join : 두 테이블의 데이터 양이 차이가 날 때(한쪽이 너무 많거나 적을 때) 
   -> 데이터가 많은 쪽 테이블 전체를 무조건 출력하도록 설정해야함


Q4. Inner join

select empno, ename, dept.deptno, dname, loc
 from emp, dept
 where emp.deptno=dept.deptno 

SQL> ed
file afiedt.buf(이)가 기록되었습니다

  1 select empno, ename, dept.deptno, dname, loc
  2 from emp, dept
  3* where emp.deptno=dept.deptno
SQL> /

  EMPNO ENAME DEPTNO DNAME LOC
---------- ---------- ---------- -------------- -------------
  7369 SMITH 20 RESEARCH DALLAS
  7499 ALLEN 30 SALES CHICAGO
  7521 WARD 30 SALES CHICAGO
  7566 JONES 20 RESEARCH DALLAS
  7654 MARTIN 30 SALES CHICAGO
  7698 BLAKE 30 SALES CHICAGO
  7782 CLARK 10 ACCOUNTING NEW YORK
  7788 SCOTT 20 RESEARCH DALLAS
  7839 KING 10 ACCOUNTING NEW YORK
  7844 TURNER 30 SALES CHICAGO
  7876 ADAMS 20 RESEARCH DALLAS

  EMPNO ENAME DEPTNO DNAME LOC
---------- ---------- ---------- -------------- -------------
  7900 JAMES 30 SALES CHICAGO
  7902 FORD 20 RESEARCH DALLAS
  7934 MILLER 10 ACCOUNTING NEW YORK

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



Q5. 테이블명 별칭 부여

* 검색속도도 빠르게 하고 오타도 줄이기 위한 방법 : 테이블명 별칭 부여
  전제조건, 저장된 테이블의 레코드수가 많은 경우(ex. 만건 이상)

select 필드명,,별칭1.필드명
 from 테이블1 별칭1, 테이블2 별칭2
 where 조건식(별칭1.deptno=별칭2.deptno)

SQL> ed
file afiedt.buf(이)가 기록되었습니다

  1 select empno, ename, d.deptno, dname, loc
  2 from emp e, dept d
  3* where e.deptno=d.deptno
SQL> /

  EMPNO ENAME DEPTNO DNAME LOC
---------- ---------- ---------- -------------- -------------
  7369 SMITH 20 RESEARCH DALLAS
  7499 ALLEN 30 SALES CHICAGO
  7521 WARD 30 SALES CHICAGO
  7566 JONES 20 RESEARCH DALLAS
  7654 MARTIN 30 SALES CHICAGO
  7698 BLAKE 30 SALES CHICAGO
  7782 CLARK 10 ACCOUNTING NEW YORK
  7788 SCOTT 20 RESEARCH DALLAS


Q6. 조인=> 우리가 원하는 데이터(일치하는 데이터)+검색방법(그대로)

EX) emp테이블에서 업무가 SALESMAN인 사원의 이름, 급여, 부서명, 근무지를 출력하시오.
(단, dept테이블을 참조)

select ename, e.sal, dname, loc
 from emp e, dept d
 where e.deptno=d.deptno and e.job=upper('salesman');

ENAME SAL DNAME LOC
---------- ---------- -------------- -------------
TURNER 1500 SALES CHICAGO
MARTIN 1250 SALES CHICAGO
WARD 1250 SALES CHICAGO
ALLEN 1600 SALES CHICAGO



Q7. 급여가 1200이상인 사원의 이름, 급여, 부서명, 근무지를 출력하시오

select ename, sal, dname, loc
 from emp e, dept d
 where e.deptno=d.deptno and e.sal>=1200;



3개 이상 검색하는 방법

select 세 개의 테이블 필드를 나열
from 테이블1, 테이블2, 테이블3
where 조건식 and 조건식2


EX) emp, dept, bonus 테이블을 사용하여 조인하기

SQL> select * from tab
  2 ;

TNAME TABTYPE CLUSTERID
------------------------------ ------- ----------
BONUS TABLE
DEPT TABLE
EMP TABLE
SALGRADE TABLE

SQL> desc bonus
 이름 널? 유형
 ----------------------------------------- -------- ----------------------------
 ENAME VARCHAR2(10)
 JOB VARCHAR2(9)
 SAL NUMBER
 COMM NUMBER

SQL> select count(*) from bonus;

  COUNT(*)
----------
  0

데이터가 없어서 검색이 불가


1) 데이터 입력

insert into bonus values('SMITH','CLERK',800,NULL);
insert into bonus values('ALLEN','SALESMAN',1600,300);
insert into bonus values('WARD','SALESMAN',1250,500);

SQL> select * from bonus;

ENAME JOB SAL COMM
---------- --------- ---------- ----------
SMITH CLERK 800
ALLEN SALESMAN 1600 300
WARD SALESMAN 1250 500

2) 각 테이블에 primary key가 어느 것인지 확인
- emp 테이블 : empno
- dept 테이블 : deptno
- bonus테이블 : 없음

3) 서로 조인하고자 하는 테이블의 연관성 있는 필드를 확인
- emp와 detp : deptno(fk) -> where 조건식을 사용 가능
- dept와 bonus : 없음
- emp와 bonus : ename, job, sal, comm
-> 어느 것을 연결시킬 것인지는 자유

*테이블의 조인수-1=where 조건식(3개의 테이블 조인 시, 2개의 where 조건식이 나옴)


문제) emp테이블에서 사원의 사번, 이름, 업무, 입사일, 급여, 보너스 출력
dept 테이블에서 부서명, 근무지 순서대로 출력하시오
emp테이블에서 업무가 salesman의 사원의 정보를 출력하시오.
단, bonus 테이블과 같이 3개의 테이블을 조인해서 작성할 것

select 세 개의 테이블 필드를 나열
from 테이블1, 테이블2, 테이블3
where 조건식 and 조건식2

select e.empno, e.ename, e.job, e.hiredate, b.sal, b.comm, d.dname, d.loc
 from emp e, dept d, bonus b
 where e.deptno=d.deptno and e.ename=b.ename;

SQL> select e.empno, e.ename, e.job, e.hiredate, b.sal, b.comm, d.dname, d.loc from emp e,
 dept d, bonus b where e.deptno=d.deptno and e.ename=b.ename;

  EMPNO ENAME JOB HIREDATE SAL COMM DNAME
---------- ---------- --------- -------- ---------- ---------- --------------
LOC
-------------
  7369 SMITH SALES MAN 80/12/17 800 RESEARCH
DALLAS

  7521 WARD SALESMAN 81/02/22 1250 500 SALES
CHICAGO

  7499 ALLEN SALESMAN 81/02/20 1600 300 SALES
CHICAGO


여기까지 inner 조인


Q9. 조인하고자 하는 테이블에 일치하지 않는 데이터를 검색 : 연산자를 고려

5000->기준, 내유에 연봉, 급여

SQL> desc salgrade   // 급여의 등급
 이름 널? 유형
 ----------------------------------------- -------- ----------------------------
 GRADE NUMBER
 LOSAL NUMBER
 HISAL NUMBER

SQL> select * from salgrade;

  GRADE LOSAL HISAL
---------- ---------- ----------
  1 700 1200
  2 1201 1400
  3 1401 2000
  4 2001 3000
  5 3001 9999


EX) emp 테이블에서 사번, 이름, 업무, 급여 출력
salgrade의 필드를 나열

select e.empno, e.ename, e.job, e.sal, s.grade, s.losal, s.hisal
 from emp e, salgrade s
 where e.sal between s.losal and s.hisal
 and e.deptno=&deptno
 order by s.grade desc;

SQL> select e.empno, e.ename, e.job, e.sal, s.grade, s.losal, s.hisal from emp e, salgrade
 s where e.sal between s.losal and s.hisal and e.deptno=&deptno order by s.grade desc;
deptno의 값을 입력하십시오: 30
구 1: select e.empno, e.ename, e.job, e.sal, s.grade, s.losal, s.hisal from emp e, salgr
ade s where e.sal between s.losal and s.hisal and e.deptno=&deptno order by s.grade desc
신 1: select e.empno, e.ename, e.job, e.sal, s.grade, s.losal, s.hisal from emp e, salgr
ade s where e.sal between s.losal and s.hisal and e.deptno=30 order by s.grade desc

  EMPNO ENAME JOB SAL GRADE LOSAL HISAL
---------- ---------- --------- ---------- ---------- ---------- ----------
  7698 BLAKE MANAGER 2850 4 2001 3000
  7844 TURNER SALESMAN 1500 3 1401 2000
  7499 ALLEN SALESMAN 1600 3 1401 2000
  7521 WARD SALESMAN 1250 2 1201 1400
  7654 MARTIN SALESMAN 1250 2 1201 1400
  7900 JAMES CLERK 950 1 700 1200

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

*ocp 자격증
inner join(일지하는 필드만 검색)=equi join(동등조인)



Q10. Outer Join
데이터량이 차이가 나는 데이터 검색 방법
inner join 시 데이터가 많은 테이블의 검색부분 영역 누락됨
-> 데이터가 없는 소데이터 테이블에 빈행을 추가(+)

left outer(대,소), right outer join(소,대)

*조인 방법
1) 오라클에서 사용되는 조인(inner, outer)
2) Ansi 조인(모든 제품에서 공통으로 적용, 표준)


select * from dept

  DEPTNO DNAME LOC
---------- -------------- -------------
  10 ACCOUNTING NEW YORK
  20 RESEARCH DALLAS
  30 SALES CHICAGO
  40 OPERATIONS BOSTON -> 14명에 포함 안됨, inner join 방식일시 데이터 누락


EX) emp,dept 테이블을 조인하되, dept 테이블의 40번부서까지 출력이 되도록 조인하시오(emp, dept)
-> outer join하라는 의미

SQL> select e.ename, e.job, d.deptno, d.dname
 from emp e, dept d
 where d.deptno=e.deptno;

ENAME JOB DEPTNO DNAME
---------- --------- ---------- --------------
SMITH SALES MAN 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

ENAME JOB DEPTNO DNAME
---------- --------- ---------- --------------
JAMES CLERK 30 SALES
FORD ANALYST 20 RESEARCH
MILLER CLERK 10 ACCOUNTING

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

-> inner join 형식이어서 40부서가 안보임

-> 40번 테이블이 나올 수 있도록 다른 테이블에 가상의 행을 생성해줘야 함
     40번부서와 대응하는(연결되어있는) 행이 하나 임의로 추가되어야 한다.

EX2) outer join :  소(小) 데이터 테이블에 빈행 추가하기(+)

SQL> select e.ename, e.job, d.deptno, d.dname
 from emp e, dept d
 where d.deptno=e.deptno(+); // 빈행을 생성하라

SQL> ed
file afiedt.buf(이)가 기록되었습니다

  1 select e.ename, e.job, d.deptno, d.dname
  2 from emp e, dept d
  3* where d.deptno=e.deptno(+) // e.deptno(+)=d.deptno 동일함
SQL> /

ENAME JOB DEPTNO DNAME
---------- --------- ---------- --------------
SMITH SALES MAN 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

ENAME JOB DEPTNO DNAME
---------- --------- ---------- --------------
JAMES CLERK 30 SALES
FORD ANALYST 20 RESEARCH
MILLER CLERK 10 ACCOUNTING
  40 OPERATIONS

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

-> 40번 부서와 대응되는 빈행을 추가하여(+) 40번 부서가 출력됨



EX3) (+)는 반드시 한쪽에만

SQL> ed
file afiedt.buf(이)가 기록되었습니다

  1 select e.ename, e.job, d.deptno, d.dname
  2 from emp e, dept d
  3* where d.deptno(+)=e.deptno(+)
SQL> /
where d.deptno(+)=e.deptno(+)
  *
3행에 오류:
ORA-01468: outer-join된 테이블은 1개만 지정할 수 있습니다



*데이터가 완전하게 있는 쪽에 따라 left/right 구분
1) d.deptno=e.deptno(+) : left outer join
2) e.deptno(+)=d.deptno : right outer join
3) 최근에서는 L/R 구분하지 않고 사용


Q11. [응용] 위의 outer join한 문제에서 사원의 이름이 A자가 들어간 사원의 정보(사번, 이름, 업무, 부서명)을 출력하시오.(단, outer join을 사용하라)

SQL> select e.empno, e.ename, e.job, d.deptno, d.dname
 from emp e, dept d
 where e.deptno(+)=d.deptno and e.ename like '%A%';

SQL> ed
file afiedt.buf(이)가 기록되었습니다

  1 select e.ename, e.job, d.deptno, d.dname
  2 from emp e, dept d
  3 where d.deptno=e.deptno(+) and
  4* e.ename like '%A%'
SQL> /

ENAME JOB DEPTNO DNAME
---------- --------- ---------- --------------
ALLEN SALESMAN 30 SALES
WARD SALESMAN 30 SALES
MARTIN SALESMAN 30 SALES
BLAKE MANAGER 30 SALES
CLARK MANAGER 10 ACCOUNTING
ADAMS CLERK 20 RESEARCH
JAMES CLERK 30 SALES

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



*inner, outer join 문제 구분
1) 조인하세요 -> inner join(default)



Q12. Self Join : 자기 스스로 검색하는 방법

1) 테이블이 하나 밖에 없음
2) 상대방에 해당되는(참조대상) 테이블이 없고 자기 자신
3) 자신의 테이블을 복제하여 가상의 테이블을 생성(미러링)


EX1) emp테이블에서 empno(사번)에 대한 직속상관(mgr)의 사원번호
-> empno와 mgr 모두 하나의 테이블 emp에 포함되어 있음 -> self join


EX2) 14명 사원에 대해, '직속상관은 OOOO 입니다'를 출력

SQL> select w.ename || '의 직속상관은 ' || m.ename || '입니다.'
 from emp w, emp m // <- 가상의 테이블 생성
 where w.mgr=m.empno; 

W.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입니다.

W.ENAME||'의직속상관은'||M.ENAME||'입니다
-----------------------------------------
JONES의 직속상관은 KING입니다.
SMITH의 직속상관은 FORD입니다.

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





*정리하기
1) 오라클->데이터저장+검색->화면구현->자바(JDBC Programing)->도서관리
2) 오라클을 배우는 이유 
   백엔드과목(자바)언어 -> 대부분이 오라클을 사용, MySQL(중소규모, 개인), MS-SQL,,,







Q13. Ansi  join : 표준 방법 ]
-> 다른 DB의 호환성 때문에 사용, 오라클 이외의 join 사용 방법

select 필드명1, 필드명2,,,
 from 테이블명1 inner join 테이블명2
 on 테이블명1.필드명=테이블명2.필드명;

*오라클의 경우
SQL> select 필드명1, 필드명2,,
 from 테이블명1, 테이블명2
 where 테이블명1.필드명=테이블명2.필드명;


EX1) Ansi 방법으로 inner join하기

select empno, ename, dname
 from emp inner join dept
 on emp.deptno=dept.deptno;

  EMPNO ENAME DNAME
---------- ---------- --------------
  7369 SMITH RESEARCH
  7499 ALLEN SALES
  7521 WARD SALES
  7566 JONES RESEARCH
  7654 MARTIN SALES
  7698 BLAKE SALES
  7782 CLARK ACCOUNTING
  7788 SCOTT RESEARCH
  7839 KING ACCOUNTING
  7844 TURNER SALES
  7876 ADAMS RESEARCH

  EMPNO ENAME DNAME
---------- ---------- --------------
  7900 JAMES SALES
  7902 FORD RESEARCH
  7934 MILLER ACCOUNTING

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


EX2) Ansi inner Join에서 where 조건 사용하기

select empno, ename, dname
 from emp inner join dept
 on emp.deptno=dept.deptno
 where ename=upper('scott');  

   EMPNO ENAME DNAME
---------- ---------- --------------
  7788 SCOTT RESEARCH



EX3) Using 절 : 두 테이블에 필드 이름이 같을 경우에 사용(축약형)

select empno, ename, dname
 from emp inner join dept
 using(deptno); // on emp.deptno=dept.deptno 와 같음

  EMPNO ENAME DNAME
---------- ---------- --------------
  7369 SMITH RESEARCH
  7499 ALLEN SALES
  7521 WARD SALES
  7566 JONES RESEARCH
  7654 MARTIN SALES
  7698 BLAKE SALES
  7782 CLARK ACCOUNTING
  7788 SCOTT RESEARCH
  7839 KING ACCOUNTING
  7844 TURNER SALES
  7876 ADAMS RESEARCH

  EMPNO ENAME DNAME
---------- ---------- --------------
  7900 JAMES SALES
  7902 FORD RESEARCH
  7934 MILLER ACCOUNTING

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

-> 공통 필드명을 축약하여 편리성을 추가


EX4) Ansi 테이블에 별칭 부여 가능 / inner 생략 가능

SQL> ed
file afiedt.buf(이)가 기록되었습니다

  1 select e.empno, e.ename, d.dname
  2 from emp e join dept d // 테이블에 별칭 부여(e,d) inner를 생략함(default가 inner join이기에 생략 가능)
  3* using(deptno)
SQL> /

  EMPNO ENAME DNAME
---------- ---------- --------------
  7369 SMITH RESEARCH
  7499 ALLEN SALES
  7521 WARD SALES
  7566 JONES RESEARCH
  7654 MARTIN SALES
  7698 BLAKE SALES
  7782 CLARK ACCOUNTING
  7788 SCOTT RESEARCH
  7839 KING ACCOUNTING
  7844 TURNER SALES
  7876 ADAMS RESEARCH

  EMPNO ENAME DNAME
---------- ---------- --------------
  7900 JAMES SALES
  7902 FORD RESEARCH
  7934 MILLER ACCOUNTING

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




Q15. Ansi Outer join

EX1) 40번 부서를 dept에서 설정하기
오라클에서 outer join : 데이터가 적은 쪽에 (+) -> Ansi 방법으로 변경하시오

select 필드명1, 필드명2~
 from 테이블명1 별칭1 outer join(left|right outer join) 테이블명2 별칭2
 on 절

*
left outer join : left 쪽 테이블 데이터가 전부 출력
right outer join : right 쪽 테이블 테이더가 전부 출력


EX2) right out join

SQL> select e.ename, e.job, d.deptno, d.dname
  2 from emp e right outer join dept d
  3 on e.deptno=d.deptno; // d.deptno=e.deptno 도 동일

ENAME JOB DEPTNO DNAME
---------- --------- ---------- --------------
SMITH SALES MAN 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

ENAME JOB DEPTNO DNAME
---------- --------- ---------- --------------
JAMES CLERK 30 SALES
FORD ANALYST 20 RESEARCH
MILLER CLERK 10 ACCOUNTING
  40 OPERATIONS

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

EX3) left outer join 1

SQL> ed
file afiedt.buf(이)가 기록되었습니다

  1 select e.ename, e.job, d.deptno, d.dname
  2 from dept d left outer join emp e
  3* on e.deptno=d.deptno
SQL> /

ENAME JOB DEPTNO DNAME
---------- --------- ---------- --------------
SMITH SALES MAN 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

ENAME JOB DEPTNO DNAME
---------- --------- ---------- --------------
JAMES CLERK 30 SALES
FORD ANALYST 20 RESEARCH
MILLER CLERK 10 ACCOUNTING
  40 OPERATIONS

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



EX4) Left out join 2

SQL> ed
file afiedt.buf(이)가 기록되었습니다

  1 select e.ename, e.job, d.deptno, d.dname
  2 from emp e left outer join dept d
  3* on e.deptno=d.deptno

SQL> /

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 SALES MAN 20 RESEARCH
JAMES CLERK 30 SALES
TURNER SALESMAN 30 SALES
BLAKE MANAGER 30 SALES

ENAME JOB DEPTNO DNAME
---------- --------- ---------- --------------
MARTIN SALESMAN 30 SALES
WARD SALESMAN 30 SALES
ALLEN SALESMAN 30 SALES

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

-> left 쪽 테이블을 설정하여 ename 테이블의 deptno 데이터가 나와서 부서 40번이 나오지 않음





'Oracle' 카테고리의 다른 글

집합연산자  (0) 2017.06.16
서브쿼리  (0) 2017.06.16
제약 조건 2  (0) 2017.06.16
DDL, 테이블 제약조건  (0) 2017.06.09
그룹함수  (0) 2017.06.09
Comments