본문 바로가기

Oracle

[Oracle] Group함수, Having절, Cube함수, Join, View

[1] Group 함수_group by


--emp에서 job별로 인원수를 구한다
select job,count(*) from emp group by job;

--professor에서 학과별,직급별로 교수들의 평균급여 구하라(학과번호는 오름차순으로)
select deptno,position,avg(pay) from professor group by deptno,position order by deptno;

[2] Having절(조건절)


--group by절에 대한 조건절은 WHERE절을 못쓰고, HAVING절 사용함!
--[조건주고 검색하기-Having절 사용]-반드시 group by 뒤에 옴!

--professor에서 학과별 평균급여가 450이상인 부서의 부서번호,평균급여 구하라
select deptno,avg(pay) from professor group by deptno having avg(pay)>=450;
 

[3] ROLL UP_부분 합계

--자동으로 소계/합계를 구해주는 함수
--group by절에 주어진 조건으로 소계값을 구해준다

--deptno별로 나누고 그 안에서 포지션별로 count(*),sum(pay) 구하기
select deptno,position,count(*),sum(pay)
from professor group by rollup(deptno,position);

[4] Cube함수_전체 합계


--deptno별
select deptno,count(*),sum(pay)
from professor group by cube(deptno);

--deptno별,position별
select deptno,position,count(*),sum(pay)
from professor group by cube(deptno,position);


[5] JOIN


--둘 이상의 테이블을 연결하여 데이터를 검색하는 방법
--보통 둘이상의 공통된 값은 primary key 및 Foreign key를 이용해서 join한다
--1.외부조인
--2.동등조인
--3.내부조인(가장 많이사용):기본키와 외부키를 사용하여 조인. 일치할때만 조회됨

--[외래키_Foreign key]
--기본 키를 참조하는 컬럼 또는 컬럼들의 집합을 의미
--외래키와 참조되는 기본키의 데이터형이 일치해야함!
--ON DELETE CASCADE : 부모가 삭제되면 부모에 딸린 자식들도 삭제됨

--emp와 dept를 조인해서 emp사람들의 직업을 조회
--ex)emp의 empno,ename,dept의 dname을 출력(ex.ALLEN의 dept를 30이 아닌 Sales으로 조회)
--e, d처럼 약자는 내맘대로 지정
select e.empno,e.ename,d.dname 
from emp e,dept d
where e.deptno=d.deptno;

--한 테이블에만 있는 고유명의 컬럼은 테이블 약자를 생략해도 됨!(아래처럼)
select empno,ename,dname 
from emp e,dept d
where e.deptno=d.deptno;

[6] DB정규화


--DB서버 메모리를 낭비하지 않기위한 취지로, 어떤 테이블을 식별자를 가지는 여러개의 테이블로 나누는 과정
--중복이 최소화되도록 설계된 DB
--장점:메모리절약,작게 보관되있으므로 관리 편함 / 단점:응답속도 살짝느릴수있음(but 거의느낄수 없을만큼)

[7] View


--가상 테이블으로, 테이블을 만드는 형식과 똑같음
--실제 데이터 저장은 안되나, 뷰를 통한 데이터 관리는 가능하다

--sawon에서 교육부를 조회하는데, 이때 이름의 오름차순으로 조회해서 sawonedu라는 뷰네임으로 뷰 생성
create view sawonedu as
select * from sawon where buseo='교육부' order by name;

--조회
select * from sawonedu;

--뷰 삭제
drop view sawonedu;