일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 파이썬
- sklearn
- 카카오
- 코딩테스트
- Numpy
- 빅분기
- 프로그래머스
- R
- matplotlib
- seaborn
- pandas
- 알고리즘
- 오라클
- level 2
- 튜닝
- Python
- python3
- oracle
- 머신러닝
- level 1
- Kaggle
- Oracel
- 실기
- 실습
- 데이터 분석
- SQL
- 빅데이터 분석 기사
- Today
- Total
라일락 꽃이 피는 날
[Oracle] 조인 - 오라클 조인 본문
오라클 조인 문법
- equi join : 조인하려는 두 테이블 사이에 공통된 컬럼이 있어서 조인 조건을 이퀄 조건(=) 으로 두 테이블을 연결할 수 있는 조인 문법
- non equi join : 조인하려는 두 테이블 사이에 공통된 컬럼이 없어서 조인 조건을 이퀄 조건(=) 으로는 두 테이블을 연결할 수 없을 때 사용하는 조인 문법
- outer join : 조인하려는 두 테이블 사이에 연결 고리가 되는 컬럼의 데이터가 서로 일치하지 않아서 조인이 안 되는 데이터도 보려고 할 때 사용하는 조인 문법
- self join : 자기 자신의 테이블과 조인하는 조인 문법
조인 (join) 이 필요한 이유?
하나의 테이블로는 알 수 없는 정보를 다른 테이블과 조인함으로써 알 수 있게 하려 할 때 사용한다.
왜 self 조인을 해야 하는가?
아래와 같은 질문들에 대한 답을 하려면 self join 을 알아야 한다.
1. BLAKE 의 직속 상사는 누구인가?
2. 관리자보다 더 많은 월급을 받는 사원들의 직업은 무엇인가?
3. 관리자보다 먼저 입사한 사원들은 누구인가?
예제 1. 사원 이름과 부서 위치를 출력
select ename, loc
from emp, dept
where emp.deptno = dept.deptno;
조인 할 때는 where 절에 반드시 조인 조건을 줘야 한다.
where 절에 조인 조건을 주지 않거나 잘못 기술하면 제대로 조인되지 않는다.
예제 2. 월급이 3000 이상인 사원들의 이름, 월급, 부서 위치를 출력
select e.ename, e.sal, d.loc, e.deptno
from emp e, dept d
where e.deptno = d.deptno and sal >= 3000;
조인 문장의 성능을 높이려면 컬럼명 앞에 테이블명 또는 테이블 별칭을 사용한다.
e.deptno = d.deptno : 조인 조건
sal >= 3000 : 검색 조건
급여 등급 테이블 생성
drop table salgrade;
create table salgrade
( grade number(10),
losal number(10),
hisal number(10) );
insert into salgrade values(1,700,1200);
insert into salgrade values(2,1201,1400);
insert into salgrade values(3,1401,2000);
insert into salgrade values(4,2001,3000);
insert into salgrade values(5,3001,9999);
commit;
예제 3. 이름, 월급, 급여 등급(grade)을 출력
select e.ename, e.sal, s.grade
from emp e, salgrade s
where e.sal between s.losal and s.hisal;
조인하려는 두 테이블 사이에 공통된 컬럼이 없고 비슷한 컬럼만 있다.
이 비슷한 컬럼을 가지고 where 절에 조인 조건을 기술한다.
그런데 이 조인 조건에서 사용하는 연산자가 이퀄(=)이 아닌 다른 연산자(between … and)면 non equi join이다.
예제 4. 사원 이름, 월급, 부서 위치, 급여 등급을 출력
select e.ename, e.sal, d.loc, s.grade
from emp e, dept d, salgrade s
where e.deptno = d.deptno
and e.sal between s.losal and s.hisal;
테이블이 3개이므로 연결 고리가 2개여야 한다.
예제 5. 이름과 부서 위치를 출력하는데, BOSTON이 출력되게 해서 BOSTON에는 사원이 없다는 것을 확인
select e.ename, d.loc
from emp e, dept d
where e.deptno(+) = d.deptno;
출력 되는 결과에서 데이터가 모자르게 나오는 부분에 아우터 조인 사인( (+) ) 을 적는다.
다음과 같이 양쪽에 outer join 사인을 사용할 수는 없다.
select e.ename, d.loc
from emp e, dept d
where e.deptno (+) = d.deptno (+);
양쪽 다 모자란 결과를 보고 싶다면 full outer join 이라는 문법을 사용해야 한다.
예제 6. emp 테이블과 emp_kind1 테이블과 emp_kind2 테이블을 조인해서 사원 번호가 7839인 사원의 사원 번호, 이름, emp_kind, office_sal1, office_sal2 를 출력
select e.empno, e.ename, e.emp_kind, k1.office_sal1, k2.office_sal2
from emp e, emp_kind1 k1, emp_kind2 k2
where e.empno = k1.empno (+)
and e.empno = k2.empno (+)
and e.empno = 7839;
예제 7. 사원 이름을 출력하고 그 옆에 그 사원의 직속 상사의 이름을 출력
select 사원.ename as 사원이름, 직속상사.ename as 직속상사이름
from emp 사원, emp 직속상사
where 사원.mgr = 직속상사.empno;
'프로그래밍 > Oracle' 카테고리의 다른 글
[Oracle] 조인 - ANSI 조인 (0) | 2022.06.01 |
---|---|
[Oracle] 테이블 정의서 (0) | 2022.06.01 |
[Oracle] 출력되는 행 제한 (0) | 2022.05.31 |
[Oracle] 데이터 분석 함수 4 - 집계 결과 출력 (0) | 2022.05.31 |
[Oracle] 데이터 분석 함수 3 - 누적 데이터, 비율 (0) | 2022.05.30 |