본문 바로가기
Oracle

Oracle (3) - 그룹함수와 서브쿼리

by leehii 2022. 6. 2.

ㅁ DB 그룹함수와 서브쿼리

SELECT절에 사용하는 그룹함수 AVG, COUNT, MAX, MIN,SUM등
--AVG, SUM은 숫자값에만 사용가능 (산술연산)
--MIN과 MAX는 모든 데이터 값에 사용가능함

함수 (distinct / all 표현식 )
 
 그룹함수는 null값을 무시함 (자동으로 빼버림)
--함수 >> 값을 받아 진행되는 것
그래서 값이 없는 null을 빼버림
따라서 앞에 nvl을 넣어 지정값을 0으로 해줘야 함
--ex) select avg(commission_pct)가 아닌
      select avg(nvl(commission, 0)pct))
  
-- group by 를 통해 소그룹을 만들 수 있음 >> 똑같은 애들을 그룹화해서 묶어주는것
select절에 있는 컬럼 중 그룹함수에 없는 컬럼은 다 group by절에 포함시켜야 함
따라서 pk는 중복이 없으므로 그룹화가 의미가 없음
  
ㅁ 서브쿼리 구문


특정값을 몰라 여러 개의 질문이 필요할때 사용하는 구문 (비교할때 숫자면 숫자, 글자면 글자끼리 비교해야 함) 
>> Abel보다 월급이 높은 사람을 출력하시오
ㄴselect last_name, salary
 from employees
     where salary (select salary 
               from employees
   where last_name = 'Abel')
       
group by를 제외한 모든 절에 들어갈 수 있음
--where 컬럼의 조건 안에 들어가는 서브쿼리 >> 조건식의 값으로 사용됨
--having 그룹화의 조건 안에 들어가는 서브쿼리  >> 조건식의 값으로 사용됨

1. 특정값을 모를때(Abel의 급여) 서브쿼리 사용하자
2. 무슨 값을 모르는지 찾자(Abel의 급여)
3. 모르는 값을 서브쿼리를 통해 찾자ㅣ
--모르는 값을 서브쿼리의 어떤 칼럼으로 찾을지 결정 (select salary)
4. 서브쿼리가 넘겨주는 값을 메인쿼리의 어떤 컬럼이 받을지 결정 (where salary)
--대부분의 서브쿼리의 컬럼과 메인쿼리의 컬럼은 같은 경우가 대부분임
5. 서브쿼리의 결과가 하나인지 여러 개인지에 따라 사용할 연산자(=,in등등)을 결정하자
--넘겨주는 값과 받아주는 값의 데이터 타입만 같으면 됨

다중행 서브쿼리일 경우 연산자가 단일행일때와 다름
--(ex)서브쿼리 값이 30,40일떄

    table         연산자            결과
   ------- ----------   --------------
     10         in (30,40)    = 30, 40의 값
     20     > all         = 40보다 큰값 50, 60
     30 < all   = 30보다 작은값 10,20
     40 > any     = 최소값 30보다 큰값 40,50,60
     50 < any   = 최대값 40보다 작은 값 10, 20, 30
     60
   
   
서브쿼리를 create table를 만들때나, insert 를 이용할때 사용할 수도 있다



2. DB 그룹함수와 서브쿼리
0.00MB