티스토리 뷰

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

 

 

 

 

'Database > Oracle' 카테고리의 다른 글

[Oracle] 테이블 조인  (0) 2016.02.17
[Oracle] 테이블(Table) 설계  (0) 2016.02.17
[Oracle] 서브쿼리  (0) 2016.02.16
[Oracle] SELECT, ORDER BY, WHERE, IN, NOT, LIKE  (0) 2016.02.15
[Oracle] Oracle Database 다운/설치  (0) 2016.02.15
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함