SQLD를 학습하며 함수를 요약정리합니다.
ASCII
: 아스키 코드 값 반환CHR/CHAR
: 아스키 코드 값에 해당하는 문자 반환CONCAT
: 문자열 연결SUBSTR/SUBSTRING
: SUBSTR(string, start_position, length) // 문자열 m 위치에서 n개 문자 반환SUBSTR('SQL_EXPERT_HELLO__', 5, 3)
TRIM
: 공백 제거할 때 많이 사용해봤을 것, 특정 문자 제거SYSDATE/GETDATE()
: 현재 날짜, 시각 출력EXTRACT/DATEPART
: 날짜에서 데이터 출력LPAD('S', 5, 'S')
: 'SSSSSS'INSTR('LDHBENECIA', E, 1, 2)
: 8INITCAP('ABCDE')
: 카멜케이스 표기법으로 바꿔준다.TO_CHAR('123', '999.99'
SELECT JOB,
COUNT(CASE WHEN DEPTNO = 10 THEN 1 ELSE 0 END) AS "10번부서원수"
COUNT(CASE WHEN DEPTNO = 10 THEN 1 ELSE 0 END) AS "20번부서원수"
COUNT(CASE WHEN DEPTNO = 10 THEN 1 ELSE 0 END) AS "30번부서원수"
SELECT JOB,
COUNT(CASE WHEN DEPTNO = 10 THEN 1 END) AS "10번부서원수"
COUNT(CASE WHEN DEPTNO = 10 THEN 1 END) AS "20번부서원수"
COUNT(CASE WHEN DEPTNO = 10 THEN 1 END) AS "30번부서원수"
첫번째는 틀리고 두번째가 맞다.
1이라고 되어있는 애들만 세야하는데 ELSE 처리하면 NULL도 세게되어서 개수가 맞지 않다.
COUNT 할거면 ELSE는 생략하자.
연산 순서는 NOT -> AND -> OR 순이다.
CEIL
: 올림FLOOR
: 내림ROUND
: 반올림SIGN
: 양수, 음수 판단TRUNC
: 소수점 절사 및 날짜의 시간을 없앰1/12/(60/30) = 1시간
1/24 = 1시간
1/24/60 = 1분
1/24/6 = 10분
1.5/24 = 1시간 30분
SELECT TO_DATE('000415', 'YYMMDD') FROM DUAL // 2000/04/15 00:00:00
SELECT TO_DATE('000415', 'RRMMDD') FROM DUAL // 1900/04/15 00:00:00
WHERE NO NOT IN (서브쿼리)
서브쿼리에 NULL이 있다면 무조건 답은 NULL
COUNT는 NULL만 있는 컬럼의 개수를 셀 때 NULL이 아니라 0을 반환한다.
COL1 | COL2 |
---|---|
10 | 100 |
10 | 200 |
20 | 400 |
30 | 200 |
30 | 300 |
NULL | 100 |
NULL | 500 |
SELECT COL1 AS C1, SUM(COL2) AS C2
FROM TAB1
GROUP BY COL
HAVING SUM(COL2) >= 400;
C1 | C2 |
---|---|
20 | 400 |
30 | 500 |
NULL | 600 |
GROUP BY에 NULL 그룹은 리턴이 가능하다.