본문 바로가기
[2020]KIC 캠퍼스 복습/SQL(3,4)

[수업 D-13] SQL의 함수들, NVL, NVL2

by 두블두블 2020. 7. 29.

2020.07.29 (수) 3주차 3일

 

내일 시험본다 넘 떨린다. 주관식 11문제라니 ;;; 아직 자바 다 숙달도 안되었는데 이클립스 없는 시험이라니;;;

어쩌냐...그래도 해봐야지... 과락만 안 맞게 해주세요 ㅜㅜ  쪽팔린다구요....

 

음 그리


1. 숫자함수

-- Round,

반올림

-- SELECT TRUNCATE(45.678,0), TRUNCATE(45.678,1), TRUNCATE(45.678,-1);
소수점을 버림, 첫째 자리에서 버림, 둘째 자리에서 반올림
--MOD(15,2), 15%2, 15 MOD 2 ;
함수, 연산자, 모듈러

--GREATEST(15, 4, 6, 8), LEAST (15, 4, 6, 8), POW(2, 3), SQRT(8);

 

2. 날짜함수

--CURDATE(),  NOW(), SYSDATE(),

db서버의 현재 날짜와 시간을 보여줌

-- ADDDATE('2020-07-29', +10), ADDDATE('2020-07-29', -10), SUBDATE('2020-07-29', -1000)

-- NOW(), DATE_ADD(NOW(),INTERVAL INTERVAL 5 MONTH);

 

--★ 활용도 높음 

SELECT DATEDIFF(NOW(),'2017-03-01');
SELECT timeDIFF(NOW(),'22:23:59', '12:11:10');
SELECT TIMESTAMPDIFF(QUARTER,'2020-07-29', '2020-12-12')

 

--SELECT SYSDATE(), LAST_DAY(SYSDATE()), DAYOFYEAR(SYSDATE());

 

3. ★ 형변형 : function (Method in JAVA)
-- DATE_FORMAT(NOW(), '%Y%m%d'), DATE_FORMAT(NOW(), '%Y-%m-%d'), 

DATE_FORMAT(NOW(), '%Y년%m월%d일');

-- DATE_FORMAT(NOW(), '%d'), DATE_FORMAT(NOW(), '%Y');

-- CAST, STR_TO_DATE, FORMAT

 

4. rank() : 순위 결정

SELECT jikwon_no AS 사번, jikwon_name 이름, jikwon_pay AS 월급,rank()

over(ORDER BY jikwon_pay) AS rank, dense_rank() over(ORDER BY jikwon_pay) AS drank

FROM jikwon; 
-- ascending sort 
-- rank : 오름차순 , 1234 다 표시
SELECT jikwon_no AS 사번, jikwon_name 이름, jikwon_pay AS 월급, rank() 

over(ORDER BY jikwon_pay DESC) AS rank, dense_rank() over(ORDER BY jikwon_pay DESC) AS drank 

FROM jikwon; 
-- decending sort 내림차순, 

 

5. ★ NVL : NULL컨트롤

SELECT jikwon_name, nvl(jikwon_jik, '임시직'), nvl(jikwon_pay, 0) FROM jikwon WHERE jikwon_no <= 6;
-- NVL(val1, val2) : val1이 null이 아니면, vol2를 적용

 

SELECT jikwon_name, nvl2(jikwon_jik, '정규직','임시직'), 

nvl2(jikwon_pay, jikwon_pay +1000, 0) FROM jikwon WHERE jikwon_no <= 6;
-- NVL2(val1, val2, vol3) : val1이 null인지 평가 후,  null이 아니면면  vol2를 적용, null이면  vol3를 적용

 

\SELECT NULLIF(LENGTH('abcd'),LENGTH('123')); 

-- nullif(val1, val2) : 두 개의 값이 일치하면 null을, 일치하지 않으면 val1을 취함

6. ★ 조건 표현식

{ SELECLT 그룹칼럼명, 계산함수, ... FROM 테이블명 WHERE 조건 GROUP BY 그룹칼럼명 HAVING 출력결과조건 ]

 

SELECT case 10 / 5
when 5 then '안녕'
when 2 then '반가워'
ELSE '잘가'
END AS 결과 from DUAL;

-- 형식 2) 
SELECT jikwon_name, case jikwon_pay 
when 3000 then '어라 삼천이네?'
when 4500 then '와우 4500!'
ELSE '그 외 연봉' END AS Result from jikwon;

 

--if  조건 표현식
SELECT jikwon_name, jikwon_pay, jikwon_jik, 

if(TRUNCATE(jikwon_pay / 1000, 0) >=5, 'good', 'normal') AS result FROM jikwon;


※ 오늘 배우고 느낀 것 

 

1. 뭔가 null을 관리하고, 채우고, 무시하고, 포함하고 이런게 중요한 SQL의 SKILL일것같은데....?

잘모르겠다 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

 

2. fK는 나중에 Join 으로 대체되는 느낌적인 느낌