Database/Oracle
[Oracle] IS NULL, IS NOT NULL, DISTINCT, GROUP BY, HAVING, NVL
best
2016. 2. 16. 10:41
1. IS NULL - 데이터가 NULL인 / IS NOT NULL - NULL이 아닌
1
2
3
4
5
6
7
8 |
-- 매니저가 없는 사람들의 LAST_NAME 및 JOB_ID 를 조회한다.
SELECT LAST_NAME
, JOB_ID
FROM EMPLOYEES
WHERE MANAGER_ID IS NULL
OR MANAGER_ID = '' -- 이 줄을 추가하면 완벽히 NULL인 것을 걸러낸다.
;
|
cs |
2. DISTINCT - 중복을 제거한다.
GROUP BY와의 차이점은 DISTINCT는 집계를 못한다.
GROUP BY는 집계를 할 수 있다.
실습1 - MANAGER_ID의 중복을 제거
1
2
3
4 |
SELECT DISTINCT MANAGER_ID
FROM EMPLOYEES
ORDER BY MANAGER_ID
; |
cs |
실습2 - MANAGER_ID 와 DEPARTMENT_ID의 중복제거
1
2
3
4
5
6
7 |
SELECT DISTINCT MANAGER_ID --MANAGER_ID와 DEPARTMENT_ID가 중복이 된다면 제거
, DEPARTMENT_ID
FROM EMPLOYEES
WHERE MANAGER_ID IS NOT NULL
ORDER BY MANAGER_ID
, DEPARTMENT_ID
; |
cs |
3. GROUP BY - 집계 함수를 사용할 수 있도록 그룹으로 묶는다.
SELECT에서 보고자하는 것과 GROUP BY시킬것이 같아야한다.
( NULL 값도 포함된다. )
실습1 - GROUP BY를 이용하여 DISTINCT의 실습2 와 같은 결과를 나타내도록한다.
1
2
3
4
5
6
7 |
SELECT MANAGER_ID
, DEPARTMENT_ID
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID
, MANAGER_ID
ORDER BY MANAGER_ID, DEPARTMENT_ID
; |
cs |
실습2 - 부서별 사원의 수를 구한다.
1
2
3
4
5
6 |
SELECT DEPARTMENT_ID
, COUNT(EMPLOYEE_ID)
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID
ORDER BY DEPARTMENT_ID
; |
cs |
4. HAVING - GROUP BY 에 대한 조건이 들어갈 수 있다.
데이터의 패턴을 분석할 때 많이 쓰인다.
실습1 - 부서별 가장 높은 연봉과, 가장 낮은 연봉, 전체 연봉의 합, 전체 연봉의 평균을 구하고, 평균이 5000이상인 것만 조회
1
2
3
4
5
6
7
8
9
10 |
SELECT DEPARTMENT_ID
, MAX(SALARY) maxSAL
, MIN(SALARY) minSAL
, SUM(SALARY) sumSAL
, ROUND(AVG(SALARY)) avgSAL
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID
HAVING AVG(SALARY) >= 5000
ORDER BY DEPARTMENT_ID
; |
cs |
5.NVL(EXPR1, EXPR2) - 만약 NULL값이라면 어떻게 처리할지 알려주는 함수 ( NULL VALUE )
EXPR1이 NULL이면 EXPR2를 반환.
EXPR1의 데이터 유형에 따라 EXPR2를 정해야한다.
실습1 - 부서별 가장 높은 연봉과, 가장 낮은 연봉, 전체 연봉의 합, 전체 연봉의 평균을 구하시오.
1
2
3
4
5
6
7
8
9
10 |
SELECT NVL(DEPARTMENT_ID, 0)
, MAX(SALARY) maxSAL
, MIN(SALARY) minSAL
, SUM(SALARY) sumSAL
, ROUND(AVG(SALARY)) avgSAL
FROM EMPLOYEES
--WHERE DEPARTMENT_ID IS NOT NULL
GROUP BY DEPARTMENT_ID
ORDER BY DEPARTMENT_ID
; |
cs |