본문 바로가기
개발/데이터베이스

(데이터이스 ) Join (Inner Join, Outer Join, full, Self Join)

by kakk789 2022. 4. 21.

Join

  • 관계형 데이터베이스에서 검색하고자 하는 컬럼이 두개 이상의 테이블에 있을 때에 조인을 사용
  • 테이블과 테이블 간에 참조관계이 있을 경우 사용 가능 
where 절에 아래와 같이 join식을 적어준다

WHERE
..
..
..
AND
A테이블.속성1 = B테이블.속성1
A테이블.속성2 = C테이블.속성2

Inner Join

  • 양쪽 테이블 모두에 조건을 만족하는 레코드만 출력
  • 일반적인 join문을 생각하면 됌

Outer Join

  • 조인을 할때에 조건을 만족하지 않더라도 포함 시키고자 할 때에 사용

1. Left Outer Join

  • from 절 왼쪽에 있는 테이블1의 내용이 조건을 만족하지 않더라도 모두 출력
  • 테이블1번에서 null 값인 것도 전부 출력
SELECT 컬럼1, 컬럼2, ......
FROM 테이블1 left outer join 테이블2
ON 조건식

만약 여러 테이블을 left outer join 해야할 때

SELECT 컬럼1, 컬럼2, ......
FROM 테이블1 left outer join 테이블2
ON 조건식 ---> 여기에는 join 에 필요한 컬럼명이 들어감 ( 예를들어 e.dno = d.dno )
left outer join 테이블3
ON 조건식 ---> 여기에는 join 에 필요한 컬럼명이 들어감 ( 예를들어 e.dno = d.dno )
WHERE

2. Right Outer join

  • from 절 오른쪽에 있는 테이블은 조건을 만족하지 않더라도 모두 출력
  • 테이블2번에서 null 값인 것도 전부 출력
SELECT 컬럼1, 컬럼2, ......
FROM 테이블1 right outer join 테이블2
ON 조건식

SELECT 컬럼1, 컬럼2, ......
FROM 테이블1 right outer join 테이블2
ON 조건식  ---> 여기에는 join 에 필요한 컬럼명이 들어감 ( 예를들어 e.dno = d.dno )
right outer join 테이블3
ON 조건식 ---> 여기에는 join 에 필요한 컬럼명이 들어감 ( 예를들어 e.dno = d.dno )
WHERE

일반적인 Inner Join 결과 충족되지 않는 값 출력 x

일반적인 outer Join 결과 충족되지 않는 값도 출력 O

outer join 2개 썻을 때 예시

- outer join 으로 null 값까지 표현 하였음.

SELECT e.eno "사원번호",d.dno "부서번호", d.DNAME "부서명",e.ENAME "사원명", m.ENAMe "관리자"
, TO_CHAR(e.HIREDATE,'yyyy/mm/dd DAY') "입사일"
, ROUND (MONTHS_BETWEEN(sysdate,e.hiredate),0) "근속월수"
, RPAD(SUBSTR(e.jumin,1,8),14,'*') "주민번호"
, ROUND ((e.SALARY+e.comm)*12*0.5,0) "상여금" 
 FROM emp e LEFT OUTER JOIN emp m on m.ENO = e.MGR LEFT OUTER JOIN dept d ON e.dno = d.dno
WHERE ROUND (MONTHS_BETWEEN(sysdate,e.hiredate),0) >=60 
ORDER BY "근속월수" desc, e.ENAME;

Full Outer join

  • 양쪽 테이블 모두 포함

Self Join

  • 테이블 하나에서 어떤 컬럼이 자신의 또 다른 컬럼의 값을 참조하는 경우 사용
  • 실제 물리적으로는 테이블이 하나인데 마치 두개인 것처럼 애칭을 주어 조인하는 것
  • 아래 where 조건식에서는 사원의 mgr번호와 관리자의 eno번호는 참조관계에 있다는 개념
SELECT 사원.ename 사원이름, 관리자.ename 관리자이름
FROM emp 사원, emp 관리자
WHERE 사원.mgr = 관리자.eno

 

반응형

'개발 > 데이터베이스' 카테고리의 다른 글

오라클 쿼리 실행 시간 확인 방법  (0) 2022.04.25
(데이터베이스) 서브쿼리, 상관서브쿼리  (0) 2022.04.22
(데이터베이스) DDL, DML, DCL  (0) 2022.04.19
데이터베이스 (Database)  (0) 2022.04.16
SQLGate  (0) 2022.04.15

댓글