본문 바로가기
DB/Oracle SQL Developer

<17, 18> 자기 참조 조인(Self Join ) / 외부 조인(Outer Join)

by 코딩 뉴비 2020. 12. 2.

외부 조인의 가장 중요한 의미는 출력 데이터의 신뢰성 제공

[Self Join] 자기 참조 조인
; emp 사원을 관리하는 관리자
  ex) 김연아 사원의 관리자(사수) -0301 이승철
  
  1) 각 사원을 관리하는 관리자의 이름을 검색하세요
  e1 : 사원테이블
  e2 : 관리자 테이블
  
  SELECT e1.eno 사번, e1.ename 사원명, e1.mgr 관리자사번, e2.eno 관리자사번, e2.ename 관리자명
  FROM emp e1, emp e2
  WHERE e1.mgr = e2.eno; --사원테이블의 관리자 = 관리자테이블의 누구
                        -- 사원의 관리자 = 관리자 사번
  
  
[Outer Join - 외부조인]
  2) 각 부서별로 사원을 검색한다
  
  일반 조인
  SELECT d.dno 부서번호, dname 부서명, ename 사원명
  FROM dept d, emp e
  WHERE d.dno=e.dno
  ORDER BY 1;
  
  외부 조인
    ex) 부서는 존재하나 소속 부서원이 없는 경우
    일반조인 : 부서가 나타나지 x
    외부조인 : 소속 부서원이 없는 부서도 표시됨. 
    (+)는 데이터가 부족한 컬럼에 적어줘야 함.
        의 의미 : 빈공간 (null)값이라도 추가하라...
   ; 외부 조인의 가장 중요한 의미는 출력 데이터의 신뢰성 제공!
     양쪽의 데이터가 일치하지 않을 때 외부조인을 통해 모두 표현하므로 업무 상 신뢰를 높일 수 있음
     
  SELECT d.dno 부서번호, dname 부서명, ename 사원명
  FROM dept d, emp e
  WHERE d.dno=e.dno(+) --부족한 부분에 더해준다. // 부서원이 없는 부서도 나온다. 빈공간(null)을 증가
  ORDER BY 1;

 

 

연습문제

1) 학생중에 동명이인을 검색한다
SELECT s.sno 학번, s.sname 이름, ss.sno 학번, ss.sname 이름
FROM student s, student ss
WHERE s.sname = ss.sname AND s.sno!=ss.sno;

2) 전체 교수 명단과 교수가 담당하는 과목의 이름을 학과 순으로 검색한다
SELECT section 학과, p.pno 교수번호, pname 교수이름, cname
FROM professor p, course c
WHERE p.pno=c.pno(+)
ORDER BY section;


3) 이번 학기 등록된 모드 과목과 담당 교수의 학점 순으로 검색한다
SELECT cno 수업번호, cname 수업이름, st_num 학점, p.pno 교수번호, pname 교수이름
FROM professor p, course c
WHERE p.pno(+)=c.pno 
ORDER BY 3, 1;

댓글