SQL
SELF JOIN(자기조인)
에어팟맥스
2022. 7. 8. 21:19
자기자신의 테이블(뷰)을 자기자신의 테이블(뷰)과 JOIN 시키는 것을 말한다.
이때 반드시 테이블(뷰)에 대한 alias(별칭)를 달리 주어서 실행해야 한다.
--- 아래처럼 나오도록 하기 ---
-------------------------------------------------------------------------------------------------------
사원번호 사원명 이메일 급여 직속상관번호 직속상관명
employee_id first_name || last_name email salary employee_id first_name || last_name
-------------------------------------------------------------------------------------------------------
100 Steven King SKING 24000 null null
102 Lex De Haan LDEHAAN 17000 100 Steven King
103 Alexander Hunold AHUNOLD 9000 102 Lex De Haan
104 Bruce Ernst BERNST 6000 103 Alexander Hunold
------------------------------------------------------- ---------------------------------------
사원번호 사원명 이메일 급여 직속상관번호 직속상관명
------------------------------------------------------- ---------------------------------------
사원자신의 정보 직속상관의 정보
employee 테이블 employee 테이블
E1 E2
[SQL 1992 CODE 방식]
select E1.employee_id as 사원번호
, E1.first_name || ' ' || E1.last_name as 사원명
, E1.email as 이메일
, E1.salary as 급여
, E2.employee_id as 직속상관번호
, E2.first_name || ' ' || E2.last_name as 직속상관명
from employees E1, employees E2
where E1.manager_id = E2.employee_id(+)
order by 1;
[SQL 1999 CODE 방식]
select E1.employee_id as 사원번호
, E1.first_name || ' ' || E1.last_name as 사원명
, E1.email as 이메일
, E1.salary as 급여
, E2.employee_id as 직속상관번호
, E2.first_name || ' ' || E2.last_name as 직속상관명
from employees E1 LEFT JOIN employees E2
ON E1.manager_id = E2.employee_id
order by 1;
SELF JOIN 을 사용하여 공저(도서명은 동일(=) 하지만 작가명이 다른(!=) 도서)로 지어진 도서정보를 나타내기
---------------------------------
도서명 작가명 로얄티
---------------------------------
로빈슨크루소 한석규 800
로빈슨크루소 이순신 500
그리스로마신화 유관순 1200
그리스로마신화 이혜리 1300
그리스로마신화 서강준 1700
---------------------------------
[SQL 1992 CODE 방식]
select distinct T1.*
from tbl_authorbook T1, tbl_authorbook T2
where T1.bookname = T2.bookname and T1.authorname != T2.authorname;
[SQL 1999 CODE 방식]
select distinct T1.*
from tbl_authorbook T1 join tbl_authorbook T2
on T1.bookname = T2.bookname and T1.authorname != T2.authorname;