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 |
댓글