본문 바로가기

자바/오라클 이클립스 연동

오라클 Group by 절과 Join!

Group by 절!

Group by 전에  SQL에는 집계 함수가 있습다

  • 종류는 SUM,AVG,MIN,MAX,COUNT가  있습니다.
  • SUM은 총합을, AVG는 평균, MIN,MAX는 최소 최대 COUNT는 갯수를 의미합니다
--(예) 가장 최근 입사한 입사일, 가장 오래된 입사일 출력?
select max(hiredate) as "최근 입사일" , min(hiredate) as "오래된 입사일" from emp;

--(예) 30번 부서 소속의 사원중에서 커미션을 받는 사원의 수?
select count(comm) from emp where deptno='30' and not comm='0';

--(예) 30번 부서 소속의 월급 평균
select round(avg(sal),2) from emp where deptno='30'
--round는 (값, 반올림할 자리)를 의미합니다.
  • 집계 함수는 null이 포함되어도 계산이 가능합니다!
  • 집계 함수는 단일행 함수이기도 한데 여러행의 결과에는 사용을 못합니다!
  • 예를 들어 밑 코드의 경우 ename,max(sal) 여러개의 행을 결과로 나타내야하므로 사용이 안됩니다!
select sum(sal) from emp; - 사용가능 단일 행이므로
select ename,max(sal) from emp; --x max는 단일 그륩 함수이기 때문에 
select max(hiredate) as "최근 입사일" , min(hiredate) as "오래된 입사일" from emp; -단일행 끼리는 가능
  •  이를 해결하기 위해선 Group by 를 사용해주면됩니다!
 select ename,max(sal) 
 from emp
 group by ename
 
 group by ename을 해줌으로서 DBMS에서 ename이 같은 값끼리 그륩화를 해줍니다
 

 

  •  또한 Group by 다음 명령어로 having을 써줌으로서 조건에 맞는 값만 출력 할 수 있습니다.
 select ename,max(sal) 
 from emp
 group by ename
 having ename ='FORD';

  • Group by 와 Having에는 몇가지 규칙이 있습니다.
  • Group by에 경우  튜플을 그륩으로 묶은 후 select 절에는 그륩으로 묶인 튜플 혹은 집계 함수만 나올 수 있습니다.
select custid,sum(sal)
from orders                               (o)
group by custid;

 select ename,sum(sal) 
from orders                               (x)
group by custid;
  • Having 은 반드시 Group by 절과 같이 작생해야하고 where절보다 뒤에 있어야합니다 
  • 또한 Having 조건문에는 집계함수가 오는걸 권장합니다 
select deptno,min(sal) 최소급여 ,max(sal) 최대급여
from emp                                                   -(o)
group by deptno
having max(sal) >=2900;

select deptno,min(sal) 최소급여 ,max(sal) 최대급여
from emp                                                   -(x)
group by deptno
having max(sal) >=2900
where deptno = 30;

 

Join ! : 한개 이상의 테이블에서 테이터를 조회하기 위해서 사용하는 방식 (ORACLE 한정)

Emp
dept
salgrade

  • equi join :  동등한 조건에 의하여 테이블 조인을 뜻합니다.( 동일한 칼럼)
select emp.deptno,ename,dname,loc
from emp,dept
where  emp.deptno=dept.deptno and ename ='SCOTT';

emp , dept 테이블에서  동등하게 있는 deptno를 참조함으로써 각각의 테이블에 있는 칼럼을 합칠 수 있습니다.

 

 

  • non equi join:  조인 조건에 특정 범위내에 있는지를 조사하기 위해 where절의 조인 조건으로 = 연산자와 비교연산자 사용
    --(예) 사원들의 급여가 몇 등급인지?
    
    select ename,sal,grade
    from emp,salgrade
    where sal between losal and hisal;
    
    where절에 비교 연산자를 사용하여 조인 하여 사원들의 급여에 따른 등급을 정합니다

  • Self join: 자기 자신 테이블과 조인을 맺는것을 뜻합니다.
     -- (예) 이름이 SMITH 인 사원의 MANAGER 이름 알아내기
    
     select manager.empno,manager.ename 
     from emp staff , emp manager
     where staff.mgr = manager.empno and staff.ename ='SMITH';
     
     from절에서 테이블 선언 후 변수명을 적음으로서 각각의 원하는 값을 where절에 적을 수 있습니다.
     
          --(예) Manager 가 King인 사원의 이름 ,직급(job)
     
     select staff.ename,staff.job
     from emp staff , emp manager
     where staff.mgr = manager.empno and manager.ename ='KING'

 

  •  Cross Join: 2개 이상의 테이블이 조인될때 WHERE절에 의해 공통되는 컬럼에 의한 결합이 발생하지 않는 경우  그냥 물리적으로 섞어 버리는 조인입니다.
 select * from emp,dept;

 

ANSI JOIN : 모든 DB에서 사용가능한 조인입니다!

  • Cross Join! 
  select * from emp,dept; --oracle
  select * from emp cross join dept ; --ANSI join 규칙
    
  오라클과 달리 테이블 선언 다음에 cross  join를 써줍니다!

 

 

  • inner Join : 오라클의 Equi Join과 동일합니다!
    select ename,dname
    from emp , dept 
    where emp.deptno = deptn.deptno;
    --> equi 조인
    
    select ename,dname
    from emp inner join dept 
    on emp.deptno = deptn.deptno; --ANSI join 규칙
    
    table 선언 다음에 inner join을 써주며 where 대신 on를 써줍니다
    
     select ename, dname,deptno
    from emp inner join dept
    using (deptno)  --공통 칼럼
    where ename = 'SCOTT';
    
    using문을 써줄수도 있습니다

 

  • - Outer Join : LEFT,RIGHT , FULL 조인  기존 조인에서 모든 레코드가 반드시 출력 되어야 할때 (+) 사용
  •  
   select customer.name , saleprice
   from customer left outer join orders
   on customer.custid= orders.custid;
   
   outer join 은 두개이상의 테이블에서 한쪽 테이블에 정보(알고싶은 칼럼)이 부족할때 사용합니다

'자바 > 오라클 이클립스 연동' 카테고리의 다른 글

DDL!  (0) 2021.03.21
SubQuery  (0) 2021.03.16
이클립스를 이용한 오라클 DB CRUD  (0) 2021.03.14
이클립스 - 오라클 연동  (0) 2021.03.13
오라클 설치  (0) 2021.03.13