SQL

11. SQL- 자기 참조 조인 , 외부 조인

코골면서 딩가딩가 2024. 4. 24. 13:48

 

학습목표

1. 자기참조 조인을 학습한다.

2. 외부 조인을 학습한다.

 

 

part 1.  자기참조 조인을 학습한다.

자기 참조 조인(Self join)

 

 

 

‐ 동일 테이블을 자기 참조에 의해 조인한다.

‐ 별명1과 별명2는 동일 테이블에 대한 별명이지만 각각 별도의 테이블처럼 사용한다.

‐ 하나의 테이블에 별명을 다르게 해서 마치 여러 개의 테이블간 조인하는 것처럼 문장을 구현한다.

 

 

Self join

• 각 사원과 이를 관리하는 사원의 정보를 검색한다.

 

 

 

 

‐ e1, e2 테이블간 등가 조인

‐ e1 : 사원 테이블, e2 : 관리자 테이블

 

 

 

part 2.  외부 조인을 학습한다.

외부(Outer) 조인

 

 

 

‐ 조인 조건에 일치하는 않는 데이터를 출력해 준다.

‐ 조인 결과물을 해석할 때 오해를 방지하기 위한 방법이다.

.결과의 무결성을 보장한다.

‐ '+' 기호는 데이터가 부족한 쪽에 기술한다.

 

 

 

외부 조인 결과를 비교한다.

• 각 부서별로 사원의 명단을 검색한다.

 

왼: 구분 x , 오: 데이터가 부족한 emp쪽에 (+)

 

 

 

두 문장을 비교해보면 왼쪽같은 경우에는 21행이 생성되었지만 오른쪽은 emp의 데이터가 더 적은 것을 명시해놔서 데이터가 더 많은 dept TABLE의 모든 dno 정보가 다 나오게 되었다.

 

 

실습

1. 학생 중에 동명이인을 검색한다.
SELECT st1.sno, st1.sname, st2.sno, st2.sname
FROM student st1, student st2
WHERE st1.sno!=st2.sno AND st1.sname=st2.sname;
 
2. 모든 직원의 명단과 이를 관리하는 직원의 명단을 검색한다.
SELECT e1.eno, e1.ename, e1.mgr, e2.eno, e2.ename
FROM emp e1, emp e2
WHERE e1.mgr=e2.eno(+);
 
3. 직원 중에 자신의 관리자 보다 급여가 높은 사람의 급여 정보를 관리자 급여 정보와 같이 검색 한다.
SELECT e1.eno, e1.ename, e1.mgr, e1.sal, e2.eno, e2.ename, e2.sal
FROM emp e1, emp e2
WHERE e1.mgr=e2.eno AND e1.sal>e2.sal;
 
4. 전체 교수 명단과 교수가 담당하는 과목의 이름을 학과 순으로 검색한다. 
SELECT p.pno, pname, section, cno, cname
FROM professor p, course c	
WHERE p.pno=c.pno(+)
ORDER BY section, p.pno;
 
5. 모든 과목 목록과 각 과목별 담당 교수를 검색한다.
SELECT p.pno, pname, section, cno, cname
FROM professor p, course c	
WHERE p.pno(+)=c.pno
ORDER BY section, p.pno;