본문 바로가기
IT 개발

[Oracle DB] 조건 별로 묶는 방법, JOIN 종류 (JOIN, ANSI JOIN, OUTER JOIN)

by gorokeya 2021. 4. 28.

Oracel database 에서 조건 별로 그룹을 묶는 방법과 그룹별 조건을 주는 방법은

GROUP BY와 HAVING을 사용하면 된다.

 

그룹별로 묶고 싶을 때는 GROUP BY

구문: group by 칼럼명

 

급여별 정보 확인하고 싶을 때

 group by sal 

 

그룹별로 조건을 주고 싶을 때 HAVING

구문: having 칼럼명

 

부서별 평균 급여가 1000 이상인 부서만 출력 시,

 having avg(sal) >= 1000; 

avg()는 값의 평균을 계산해 주고 sal은 급여를 나타내는 칼럼명

 

 

 

JOIN

: 하나의 테이블로 원하는 칼럼 정보를 찾을 수 없을 경우 관련 테이블을 결합하여

정보를 참조하는 방법

 

구문:

select 칼럼명1, 칼럼명2

from 테이블명1, 테이블명2

where join 조건 and 다른 조건

 

Q. 급여가 1000에서 2000 사이의 사원 이름(ename), 부서명(dname)을 출력하세요

// 찾고자 하는 부서명이 emp 테이블에 없는 경우, dept 테이블을 Join 해준다.

 

select ename, dname

from emp, dept

where emp.deptno = dept.deptno and //각 테이블에 동일하게 존재하는 deptno을 연결하여 중복제거

sal between 1000 and 2000;

 

 

 

ANSI JOIN

: 위의 Join과 비슷하지만 이 경우 조인하는 조건의 칼럼명이 같을 때 사용한다.

 

구문:

select 칼럼명1, 칼럼명2

from 테이블명1

inner join 테이블명2 using(동일하게 존재하는 칼럼명)

where 조건

 

Q. 직업이 'PROGRAMMER'인 사원의 이름, 입사일, 부서번호, 부서명을 출력하세요

 

select ename, hiredate, deptno, dname // 차례대로 이름,입사일,부서번호,부서명 출력

from emp // emp테이블에서

inner join dept using(deptno) //emp테이블과 dept테이블 모두 deptno 칼럼을 동일하게 갖고 있어서 ansi join방법 사용

where job = 'PROGRAMMER'; // 조건은 직업이 프로그래머

 

 

 

OUTER JOIN

: 한쪽 테이블에는 해당하는 데이터가 존재하지만 다른 테이블에는 데이터가 존재하지 않을 때에도

모든 데이터가 출력될 수 있도록 하는 방법

 

구문:

select 칼럼명1, 칼럼명2

from 테이블명1, 테이블명2

where 칼럼명1(+) = 칼럼명2 // 아우터조인 대상 칼럼에 (+) 기호를 추가해 주면 된다.

 

Q. 사원의 이름, 부서번호, 급여를 출력하세요 (단, emp테이블에 없는 부서도 출력하세요)

 

select e.ename, d.deptno, e.sal

from emp e, dept d // alias (별칭) 을 각 e와 d로 붙여줬다.

where e.deptno(+) = d.deptno; //emp 테이블 별칭이 있는 e.deptno에 아우터조인(+) 추가

 

 

반응형