NULL은 존재하지 않는 값이므로 연산에 사용할 수 없다.
SELECT 1+2+3+4+5, 5-2, 5*2, 5/2
FROM DUAL;
SELECT 1+2+3+4+5, 5-NULL, 5*NULL, 5/1, 5/NULL
FROM DUAL;
SELECT NAME, COMM
FROM TBL_NEWSAWON;
SELECT NAME, COMM
FROM TBL_NEWSAWON
WHERE COMM =0;
SELECT NAME, COMM
FROM TBL_NEWSAWON
WHERE COMM IS NULL; -- = 대신 IS 해서 쓴다.
SELECT NAME, COMM
FROM TBL_NEWSAWON
WHERE NOT COMM IS NULL;
SELECT NAME, COMM
FROM TBL_NEWSAWON
WHERE COMM IS NOT NULL; -- 위의 것과 같은 결과 값
----------------------------------------------------------------------------
SELECT NAME AS "사원명", SAL "급여", COMM 커미션,
--연봉 => 12달 급여 + 커미션
-- SAL*12 + COMM 이것이 아니라
NVL(COMM,0) "연봉", -- NULL이라면 0로 나타내라
NVL2(COMM, 999, 888), -- NULL이라면 999, NULL이 아니라면 888
NVL2(COMM, COMM, 0)
FROM TBL_NEWSAWON;
SELECT NAME,SAL, COMM, -- 위와 똑같은 것
SAL*12+ NVL(COMM, 0),
NVL2(COMM, SAL*12 + COMM, SAL*12)
FROM TBL_NEWSAWON;
SELECT NAME,SAL, COMM,
SAL*12+ NVL(COMM, 0),
NVL2(COMM, SAL*12 + COMM, SAL*12),
COALESCE(SAL*12 + COMM, SAL*12, COMM,0)
-- NULL이면 그 다음 값을, 그 다음 값을 ..., NULL 이 안 나올 때까지 나온다.
FROM TBL_NEWSAWON;
-----------------------------------------------------------------------------------------
<<급여와 보너스를 합해서 연봉을 구하기>>
SELECT FIRST_NAME AS "성",
SALARY AS "급여",
COMMISSION_PCT AS "보너스%",
(SALARY + NVL(SALARY*COMMISSION_PCT,0) ) * 12 AS "연봉1",
NVL2(COMMISSION_PCT,
(SALARY + SALARY*COMMISSION_PCT) * 12,
SALARY * 12) AS "연봉2",
COALESCE((SALARY + SALARY*COMMISSION_PCT) * 12,
SALARY * 12, 0) AS "연봉3"
FROM EMPLOYEES;
/*** 문자, 날짜, 숫자, 어떤 것이든 연결시켜주는 연결 연산자인 || 연산자 ***/
SELECT *
FROM TBL_NEWSAWON;
SELECT '사원번호가'|| SANO || '인' || NAME || HIREDATE || '입니다.'
FROM TBL_NEWSAWON;
<<값>>
사원번호가1001인한석규90/01/02입니다.
사원번호가1002인두석규92/01/03입니다.
사원번호가1003인세석규94/01/04입니다.
사원번호가1004인네석규96/01/05입니다.
사원번호가1005인오연수96/01/06입니다.
사원번호가2001인일용이00/01/07입니다.
사원번호가2002인이미자01/01/08입니다.
--------------------------------------------------------------------
<문제>
--TBL_NEWSAWON 테이블에서 급여가 2000 이상 4000 이하인
--직원들의 정보를 사원번호, 사원명, 직급, 급여로
--나타내세요.
<답1>
SELECT DEPTNO, SANO, NAME, JIK, SAL -- 이것을 권장
FROM TBL_NEWSAWON
WHERE SAL>=2000 AND SAL <=4000;
<답2>
SELECT DEPTNO, SANO, NAME, JIK, SAL -- (위의 값과 같음)
FROM TBL_NEWSAWON
WHERE SAL BETWEEN 2000 AND 4000; -- 2000 이상 4000이하
<답3>
SELECT DEPTNO, SANO, NAME, JIK, SAL
FROM TBL_NEWSAWON
WHERE SAL < 2000 OR SAL > 4000; --2000 작고 4000크다
<답4>
SELECT DEPTNO, SANO, NAME, JIK, SAL --위의 값과 같음
FROM TBL_NEWSAWON
WHERE NOT (SAL BETWEEN 2000 AND 4000);
---------------------------------------------------------------------------
--정렬함수 (ORDER BY) --
SELECT DEPTNO, SANO, NAME, JIK,
NVL2(COMM,SAL*12 + COMM, SAL *12)
AS "YEARPAY"
FROM TBL_NEWSAWON
WHERE SAL >= 2000 AND SAL <= 4000
ORDER BY NVL2(COMM, SAL*12 + COMM, SAL*12) DESC;
SELECT DEPTNO, SANO, NAME, JIK,
NVL2(COMM,SAL*12 + COMM, SAL *12)
AS "YEARPAY"
FROM TBL_NEWSAWON
WHERE SAL>=2000 AND SAL <=4000
ORDER BY 5 DESC; -- 내림차순 (5:다섯번째 컬럼을 내림차순으로)
<값>
DEPTNO SANO NAME JIK YEARPAY
10 1002 두석규 부장 48600
30 3002 노주현 과장 48600
20 2002 이미자 과장 48600
20 2001 일용이 부장 48500
10 1003 세석규 과장 36500
20 2003 삼미자 사원 36500
30 3001 고소영 부장 36400
30 3003 도지원 사원 36200
30 3009 이자연 대리 36000
20 2004 사미자 사원 36000
10 1004 네석규 사원 24000
-----------------------------------------------------------------------
SELECT DEPTNO, SANO, NAME, JIK,
NVL2(COMM,SAL*12 + COMM, SAL *12)
AS "YEARPAY"
FROM TBL_NEWSAWON
WHERE SAL>=2000 AND SAL <=4000
ORDER BY 5 ASC; -- 오름차순 (생략가능)
<값>
DEPTNO SANO NAME JIK YEARPAY
30 3005 마광수 사원 24000
10 1004 네석규 사원 24000
10 1005 오연수 사원 24000
30 3004 류시원 사원 24000
20 2002 이미자 과장 48600
10 1002 두석규 부장 48600
30 3002 노주현 과장 48600
----------------------------------------------------------------------
SELECT DEPTNO, SANO, NAME, JIK,
NVL2(COMM,SAL*12 + COMM, SAL *12)
AS "YEARPAY"
FROM TBL_NEWSAWON
WHERE SAL>=2000 AND SAL <=4000
ORDER BY 4,5 DESC;-- 같은 차순에 연봉을 내림차순으로 보고 싶다.
<값>
DEPTNO SANO NAME JIK YEARPAY
30 3002 노주현 과장 48600
20 2002 이미자 과장 48600
10 1003 세석규 과장 36500
10 1005 오연수 사원 24000
10 1004 네석규 사원 24000
30 3004 류시원 사원 24000
30 3005 마광수 사원 24000
-------------------------------------------------------------------------------------
SELECT DISTINCT DEPTNO, JIK -- DISTINCT는 중복되는 값을 하나만 출력
FROM TBL_NEWSAWON
ORDER BY 1; --NULL을 오라클은 가장 큰 값으로 간주
<값>
DEPTNO JIK
10 과장
10 사원
10 사장
20 과장
20 사원
30 과장
30 사원
NULL 사원
'IT. 컴퓨터' 카테고리의 다른 글
[오라클] LPAD, RPAD, LENGTH, TRANSLATE, LIKE (0) | 2020.06.11 |
---|---|
[오라클] 단일행함수 - 문자함수, 숫자함수 날짜함수 (0) | 2020.06.09 |
[오라클] 괄호, AND, OR, NOT, =, !=,(^=, <>) (0) | 2020.06.04 |
[오라클] 트리거로 백업 (0) | 2020.06.02 |
[오라클] 테이블명, 제약조건, 컬럼명 변경하기 (0) | 2020.05.30 |