2020년 7월 19일 일요일

SQL조인, 오라클 self join

6.4 Self Join

이름그대로 자기자신 테이블과 조인을 하는 것을 말한다. 원래 조인이 두개의 테이블에 대해 연관된 행들을 조인 칼럼을 기준으로 비교하여 새로운 행 집합을 만드는 것인데 두개의 테이블이 같은 테이블인 경우를 Self Join 이라고 한다.

한 개의 테이블을 두 개의 별도의 테이블처럼 이용하여 서로 조인 하는 형태인데 원하는 데이터들이한테이블에 있는 경우, 테이블의 각행이 테이블의 다른 행의 값과 결합되어 있는 경우에 사용하며 같은 테이블을 두번 사용하므로 테이블 별칭을 반드시 사용해야 한다

특별한 경우로 한 테이블의 외래키 칼럼이 자기 자신테이블의 주키(Primary Key)를 참조하는 경우 이용하게 된다. EMP 테이블의 MGR 칼럼은 외래키(Foreign Key)로써 자기자신 테이블 EMP의 EMPNO(Primary Key)를 참조한다.

보통 한 행(ROW)에 두개의 레코드 정보를 보여 주고자 할 때 유용 하다. (EMP 테이블에서 사원 이름과, 관리자 이름을 같이 출력하는 경우)

--EMP 테이블에서 사번, 이름, 관리자 이름을 출력하라.

--관리자도 사원테이블에 존재하여 EMPNO를 가진다.

SQL> select "사원".empno, "사원".ename, "관리자".ename

2 from emp "사원", emp "관리자"

3 where "사원".mgr = "관리자".empno;

EMPNO ENAME ENAME

---------- ---------- ----------

7902 FORD JONES

7788 SCOTT JONES

7844 TURNER BLAKE

7499 ALLEN BLAKE

7521 WARD BLAKE

7900 JAMES BLAKE

7654 MARTIN BLAKE

7934 MILLER CLARK

7876 ADAMS SCOTT

7698 BLAKE KING

7566 JONES KING

7782 CLARK KING

7369 SMITH FORD

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

-- ANSI JOIN 문법

SQL> select "사원".empno, "사원".ename, "관리자".ename

2 from emp "사원", emp "관리자"

3 where "사원".mgr = "관리자".empno;

-- 이름이 ‘SMITH’인 사원과 같은 부서에 근무하는 사원의 이름을 출력하세요.

-- 서브 쿼리로 풀면

SELECT e1.ename

FROM emp e1

WHERE deptno = (SELECT deptno FROM emp e2

WHERE e2.ename = 'SMITH');

-- SELF JOIN으로 풀면

SELECT e1.ename

FROM emp e1, emp e2

WHERE e1.deptno = e2.deptno

AND e2.ename='SMITH';

댓글 없음:

댓글 쓰기

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...