IT

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

letsgojieun 2021. 4. 28. 13:34

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에 아우터조인(+) 추가

 

 

반응형