<자기 참조 조인(Self Join)>
SELECT 컬럼, ...
FROM 테이블 별명1, 테이블 별명2
WHERE 조인_조건
AND 일반_조건
- 동일 테이블을 자기 참조에 의해 조인한다
- 별명1과 별명2는 같은 테이블이지만, 다른 이름을 부여함으로써 서로 다른 테이블을 조인하는 효과를 부여한다.
- 테이블에 반드시 별명을 붙여야 한다. (별명을 이용한 조인이라고 부르기도 함)
SELECT *
FROM emp;
--각 사원을 관리하는 관리자(사수)의 이름을 검색한다
--e1은 사원 테이블
--e2는 관리자 테이블
SELECT e1.eno 사번, e1.ename 사원, e1.mgr 관리자사번,
e2.eno 관리자사번, e2.ename 관리자
FROM emp e1, emp e2
WHERE e1.mgr=e2.eno;
--부서간은 소속관계등에 많이 쓰임
<외부조인>
SELECT 테이블1.컬럼, ... , 테이블2.컬럼, ...
FROM 테이블1, 테이블2, ...
WHERE 조인_조건(+)
AND 일반_조건;
- 조인조건에 일치하지 않는 데이터를 출력해준다.
- 테이블 한쪽이 정보가 부실할 때 +기호를 써준다.
ex) 신규부서가 만들어져서 부서원이 없을 때, 신입사원이 아직 부서배정을 받지 않았을 때
-> 등가조인을 하게되면 부족한 쪽의 정보가 누락된다.
--각부서별 사원 검색
SELECT d.dno, dname, e.eno, ename
FROM dept d, emp e
WHERE d.dno=e.dno
ORDER BY 1;
SELECT d.dno, dname, e.eno, ename
FROM dept d, emp e
WHERE d.dno=e.dno(+)
ORDER BY 1;
<Exercise>
-- 1.학생중 동명이인 검색
SELECT DISTINCT st1.sno, st1.sname
FROM student st1, student st2
WHERE st1.sname = st2.sname
AND st1.sno!=st2.sno;
--2. 전체 교수명단과 교수가 담당하는 과목의 이름을 학과순으로 검색한다.
SELECT section, p.pno, pname, cname
FROM professor p, course co
WHERE p.pno=co.pno(+)
ORDER BY section DESC;
--3. 모든 과목과 담당교수를 학점순으로 검색한다.
SELECT section, cname, p.pno, pname, st_num
FROM professor p, course co
WHERE p.pno=co.pno(+)
ORDER BY st_num DESC;
'db : sql' 카테고리의 다른 글
Oracle/ ON절을 이용한 조인 (0) | 2020.02.25 |
---|---|
Oracle/ Natural절 & USING절을 이용한 조인 (0) | 2020.02.25 |
Oracle/ RDB와 JOIN (0) | 2020.02.25 |
Oracle/ BETWEEN과 IN 연산자 (0) | 2020.02.25 |
Oracle/ 관계연산자와 LIKE연산자 (0) | 2020.02.25 |