SQL문에서 사용하는 여러가지 키워드를 통해 좀 더 심화된 SQL문을 작성할 수 있다.


◆ RDB의 데이터 통계 SQL

데이터베이스에 있는 데이터들에 대한 통계 데이터를 뽑아내는 함수로
count() / max() / min() / avg() / sum() ( 괄호 안은 컬럼명 ) 등이 있다.


▶ 통계 SQL 종류

select count(*), max(salary), avg(salary), min(salary), sum(salary) from employees;
  •  count는 개수
  •  max는 제일 큰 수
  •  min은 제일 작은 수
  •  avg는 평균
  •  sum은 합계


▶ 통계 SQL 예시

  • 특정 컬럼의 데이터 개수 ( null은 포함 하지 않는다. )
select count(employee_id), count(commission_pct) from employees;


EMPLOYEES테이블에서 count()는 COUNT(EMPLOYEE_ID), COUNT(COMMISSION_PCT)라는 새로운 컬럼 이름으로 해당 컬럼에 대한 개수를 number형으로 한 행이 나온다.


  • 모든 데이터행의 개수 :
select count(*) from employees;


통계 SQL에서 은 모든 컬럼을 가리킨다. 즉 COUNT()는 해당 테이블의 총 데이터의 개수를 뽑아낸다.

통계 SQL에서는 특별히 ‘모든’을 의미하는 * 을 사용할 수 있다.


▶ 컬럼명 변경(as)

통계SQL을 쓰게 되면 컬럼명이 count(*)등의 쓰기 어려운 형식으로 나오게 되기 때문에, 뽑아 쓰기 쉽도록 할 수 있기 위해 컬럼명 변경 후 출력이 가능하다.

형식 : ‘ 통계함수 as 변경할컬럼명

select count(*) as count, max(salary) as max, 
avg(salary) as avg, min(salary) as min, sum(salary) as sum from employees;


▶ 조건문과 통계 SQL

통계함수와 함께 where절을 사용할 시 where조건을 먼저 실행 한 후의 통계값을 추출한다.

select count(*), max(salary), avg(salary), min(salary), sum(salary) from employees where department_id=60;

where문의 조건인 department_id가 60인 데이터행에 대한 통계함수 값들이 추출됨.


◆ 통계 SQL 그룹화

그룹화를 하지 않고 통계 함수를 쓰게 되면 테이블 전체에 대한 통계 데이터를 뽑아내기 때문에 한 행의 데이터 밖에 뽑아낼 수 없다.

따라서 같은 데이터를 가진 데이터 행들끼리 그룹화를 시키면 테이블 전체가 아닌 해당 그룹에 대한 각각의 통계SQL을 구할 수 있게 된다.

select department_id, count(*) as count from employees group by DEPARTMENT_ID;

DEPARTMENT_ID컬럼의 같은 데이터를 가진 데이터를 묶어서 해당 그룹 안에서의 통계데이터를 구한다.


  • 그룹화를 하지 않고 통계 SQL을 쓰게 되면 통계SQL 컬럼밖에 뽑아낼 수 없지만, 그룹화를 하게 되면 그룹화 된 해당 컬럼은 결과 테이블의 컬럼으로 뽑을 수 있게 된다.
select department_id from employees group by department_id;


  • 조건문은 그룹화하기 전에 한다.
select salary, count(*) as count from employees where department_id = 90 group by salary;


  • 여러 그룹처리도 가능
select department_id, salary, count(*) from employees group by department_id, salary;


◆ 정렬

정렬은 디폴트로 pk(primary key)기준 오름차순으로 출력된다. 이를 order by라는 키워드로 정렬의 기준을 바꿀 수 있다


▶ 정렬의 종류

  • 오름차순(asc)
    order by

    컬럼명 asc (오름차순)

  • 내림차순(desc)
    order by

    컬럼명 desc ( 내림차순 )

select * from employees order by salary asc;


▶ 다중 정렬

정렬을 여러 개 등록하게 되면, 앞에 것을 우선순위로 정렬 후 차례대로 정렬해 나간다.

select * from employees order by salary asc order by department_id;


◆ SQL 처리순서

0.조인(join)

1. 필터링(where)

2. 그룹화(group by)

3. 통계

4. 정렬(sorting)


▶ SQL작성순서

select 통계()… join on ~ where ~ group by ~ order by ~ ( 중간 생략 가능 )


◆ 다중 SQL

select한 결과물에 다시 select를 또 한다거나, select한 결과물에 다른 select한 결과를 조건으로도 사용이 가능.

select * from (select ... ) where ...


◆ cf ) 연습용 계정 (HR) 사용하기

오라클 XE를 설치하면, HR(Human Resource)계정을 가지고 통계 SQL을 테스트할 수 있다.
HR계정은 기본적으로 잠겨있기 때문에 system계정으로 접근 후(관리자권한) 잠금을 풀어야한다.

▶ HR잠금 풀기

system계정 로그인 -> 다른 사용자 -> (HR)우 클릭 -> 사용자 편집 -> 새 비밀번호설정, 잠금해제


▶ 새접속

관리자계정 접속해제 후 => +버튼 => 사용자명 hr로 새로운 비밀번호로 접속 ( 접속이름은 아무거나 ) => 하게 되면 테이블이과 데이터가 등록되어있다.