SQLD: 연산 함수 정리

임동혁 Ldhbenecia·2024년 8월 19일
0

DataBase

목록 보기
13/14
post-thumbnail

SQLD를 학습하며 함수를 요약정리합니다.

문자 함수

  • ASCII: 아스키 코드 값 반환
  • CHR/CHAR: 아스키 코드 값에 해당하는 문자 반환
  • CONCAT: 문자열 연결
  • SUBSTR/SUBSTRING: SUBSTR(string, start_position, length) // 문자열 m 위치에서 n개 문자 반환
    • SUBSTR('SQL_EXPERT_HELLO__', 5, 3)
      -> 답: EXP (첫 문자는 0이 아니라 1부터 시작, m 위치에서 또 1로 시작)
  • TRIM: 공백 제거할 때 많이 사용해봤을 것, 특정 문자 제거
    LTRIM, RTRIM으로 왼쪽, 오른쪽 지정 가능
  • SYSDATE/GETDATE(): 현재 날짜, 시각 출력
  • EXTRACT/DATEPART: 날짜에서 데이터 출력
  • LPAD('S', 5, 'S'): 'SSSSSS'
    LPAD("초기값", 추가할 개수, "추가할 문자")
    왼쪽에 X를 5개 삽입한다. 기초 세팅: 'S'
  • INSTR('LDHBENECIA', E, 1, 2): 8
    문자의 위치를 찾음
    LDHBENECIA라는 문자에서 E를 첫번째 칸부터 두번째 발견된 칸까지 몇 칸인지를 찾음
    1은 L이고 E가 두번째 발견된 곳은 LDHBENE이다. 두번째 E는 7
    답: 7
  • INITCAP('ABCDE'): 카멜케이스 표기법으로 바꿔준다.
    답: Abcde
  • TO_CHAR('123', '999.99'
    답: 123.00 // 999.99는 앞에 3자리 뒤에 2자리를 붙이라는 뜻
    TOCHAR('100', '9999.99': _100.00 (는 공백 의미)
    TO_CHAR('100', '0000.99': 0100.00
    0과 9의 차이는 0으로 채우느냐 공백으로 채우느냐 차이
    소수점은 0을 쓰나 9를 쓰나 0으로 채워짐
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: 반올림
    ROUND(1245615.786456, -2): 1245600
  • SIGN: 양수, 음수 판단
    양수: 1, 음수: -1, 0: 0
  • TRUNC: 소수점 절사 및 날짜의 시간을 없앰
    TRUNC(n, 1): 소수점 첫째 절사 (반올림 하지 않고 자름)

날짜 연산

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을 반환한다.

COL1COL2
10100
10200
20400
30200
30300
NULL100
NULL500
SELECT COL1 AS C1, SUM(COL2) AS C2
	FROM TAB1
GROUP BY COL
HAVING SUM(COL2) >= 400;
C1C2
20400
30500
NULL600

GROUP BY에 NULL 그룹은 리턴이 가능하다.


참조: https://www.youtube.com/watch?v=sBT5FG6rCMk

profile
지극히 평범한 공대생

0개의 댓글

Powered by GraphCDN, the GraphQL CDN