본문 바로가기
스터디/SQL

[정리노트] SQLD 2024년 개정판 - 함수

by 견습생L 2024. 8. 20.

 

[정리노트] SQLD 2024년 개정판 - 함수


함수

정의

  • input value와 output vale의 관계를 정의하는 객체 (input 값을 출력해줌)
  • FROM 절을 제외한 모든 절에서 사용 가능

기능

  • 기본적인 쿼리문을 강력하게 해줌
  • 데이터의 계산을 수행
  • 개별 데이터의 항목을 수정
  • 표시할 날짜 및 숫자 형식을 지정
  • 열 데이터의 유형을 변환

종류

  • 단일행 함수: input과 output의 관계가 1:1
  • 복수행 함수: 여러 건의 데이터를 동시에 입력 받아서 하나의 요약값을 리턴 (그룹함수 또는 집계 함수 라고도 함)

 

문자 함수의 종류와 특징

  • 대부분 단일행 함수를 취함
함수명 함수 기능 사용예시 출력 기타 설명
LOWER(대상) 문자열을 소문자로 LOWER(’ABC’) abc  
UPPER(대상) 문자열을 대문자로 UPPER(’abc’) ABC  
SUBSTR(대상,m,n) 문자열 중 m위치에서 n개의 문자열 추출 SUBSTR(’ABCDE’,2,3) BCD n 생략시 끝까지 추출
추출 위치가 -면 뒤에서 부터 n번째 앞의 오른쪽으로 스캔
INSTR(대상,찾을 문자열,찾을시작위치,반복횟수)) 대상에서 찾을 문자열 위치 반환 INSTR(’A#B#C#’,’#’,1,1) 2  
INSTR(’A#B#C#’,’#’,3,2) 6 3번째부터 두번째 발견된 # 위치
LTRIM(대상,삭제문자열) 문자열 중 특정 문자열을 왼쪽에서 삭제 LTRIM(’AABABAA’,’A’) BABAA 삭제문자열 생략 시 공백 삭제
RTRIM(대상,삭제문자열) 문자열 중 특정 문자열을 오른쪽에서 삭제 RTRIM(’AABABAA’,’A’) AABAB 삭제문자열 생략 시 공백 삭제
TRIM(대상) 문자열 중 특정 문자열을 양쪽에서 삭제 TRIM(’ ABCDE ’) ABCDE ORACLE TRIM은 공백만 삭제 가능
LPAD(대상,n,문자열) 대상 왼쪽에 문자열을 추가하여 총 n의 길이 리턴 LPAD(’ABC’,5,’*’) **ABC  
RPAD(대상,n,문자열) 대상 오른쪽에 문자열을 추가하여 총 n의 길이 리턴 RPAD(’ABC,5,’*’) ABC**  
CONCAT(대상1,대상2) 문자열 결합 CONCAT(’A’,’B’) AB 두 개의 인수만 전달 가능
LENGTH(대상) 문자열 길이 LENGTH(’ABCDE’) 5  
REPLACE(대상,찾을문자열,바꿀문자열) 문자열 치환 및 삭제 REPLACE(’ABBA’,’AB’,’ab’) abBA 세번째 인수를 생략하거나, 빈 문자열 전달 시 찾을문자열 삭제가능
TRANSLATE(대상,찾을문자열,바꿀문자열) 글자를 1대1로 치환 TRANSLATE(’ABBA’,’AB’,’ab’) abba 매칭되는 글자끼리 치환(A는a로,B는b로 각각)
바꿀문자열 생략 불가, 빈문자열 전달 시 null 리턴
  • CHR (숫자): 아스키 코드에 대한 문자 출력
  • TRIM (문자열, 점검문자): 문자열의 양쪽으로부터 점검문자를 제거, 점검누자를 지정하지 않으면 공백 문자를 대상으로 함
SELECT LTRIM(' CHRIS') FROM DUAL; SELECT TRM ('~~~Hi~~~','~") FROM DUAL; SELECT SUBSTR('MyHome',3) FROM DUAL; SELECT SUBSTR('YourHome', 1, 3) FROM DUAL; SELECT REPLACE('MyHome','My','Your') FROM DUAL; SELECT LPAD('Hi', 5, '~') FROM DUAL;

 

숫자 함수의 종류와 특징

  • 단일행 함수 형태의 숫자함수
함수명 함수 기능 사용 예시 출력 기타 설명
ABS(숫자) 절대값 반환 ABS(-1.5) 1.5  
ROUND(숫자,자리수) 소수점 특정 자리에서 반올림 ROUND(123.456,2) 123.46 자리수가 음수이면 정수자리에서 반올림
소수점 특정 자리에서 반올림 ROUND(123.456,-2) 100 자리수를 지정하지 않을 경우 0을 기본값으로 사용
TRUNC(숫자,자리수) 소수점 특정 자리에서 버림 TRUNC(123.456,2) 123.45 자리수를 지정하지 않을 경우 0을 기본값으로 사용
SIGN(숫자) 숫자가 양수면 1 음수면 -1 0이면 0 반환 SIGN(-2) -1  
FLOOR(숫자) 작거나 같은 최대 정수 리턴 FLOOR(3.5) 3  
CEIL(숫자) 크거나 같은 최소 정수 리턴 CEIL(3.5) 4  
MOD(숫자1,숫자2) 숫자1을 숫자2로 나누어 나머지 반환 MOD(7,2) 1 숫자2가 0일 경우 숫자 1을 반환
POWER(m,n) m의 n거듭제곱 POWER(2,4) 16  
SQRT(숫자) 루트값 리턴 SQRT(16) 4  
SELECT ROUND(123.76, 1) FROM DUAL; = 123.8 SELECT ROUND(173.76, -2) FROM DUAL; = 200 SELECT TRUNC(123.76, 1) FROM DUAL; = 123.7 SELECT TRUNC(123.76, -1) FROM DUAL; = 120 SELECT CEIL (12.77) FROM DUAL; = 13 SELECT FLOOR (25.4) FROM DUAL; = 25 SELECT FLOOR (25.4) FROM DUAL; = 26 SELECT MOD (15, -2) FROM DUAL; = 1 SELECT MOD (-15, -2) FROM DUAL; = -1

 

날짜형 함수의 종류와 특징

  • 날짜 연산과 관련된 함수
  • ORACLE과 SQL-Sever 함수 거의 다름
함수명 함수 기능 사용예시 출력 기타 설명
SYSDATE 현재 날짜와 시간 리턴 SYSDATE 2024/02/14 18:44:34 날짜 출력형식에 따라 다르게 출력됨 (날짜만 출력될 수 있음)
CURRENT_DATE 현재 날짜 리턴 CURRENT_DATE 2024/02/14 날짜 출력형식에 따라 다르게 출력됨 (날짜만 출력될 수 있음)
CURRENT_TIMESTAMP 현재 타임스탬프 리턴 CURRENT_TIMESTAMP 2024/02/14 18:45:29 +09:00  
ADD_MONTHS(날짜,n) 날짜에서 n개월 후 날짜 리턴 ADD_MONTHS(SYSDATE,3) 2024/05/14 18:44:34 n이 음수인 경우 n개월 이전 날짜 리턴
LAST_DAY(날짜) 주어진 월의 마지막 날짜 리턴 LAST_DAY(SYSDATE) 2024/02/29 18:44:34  
NEXT_DAY(날짜,n) 주어진 날짜 이후 지정된 요일의 첫 번째 날짜 리턴 NEXT_DAY(SYSDATE,1) 2024/02/18 18:51:35 1:일요일, 2:월요일, … 7:토요일
ROUND(날짜,자리수) 날짜 반올림 ROUND(SYSDATE,’MONTH’) 2024/02/01 0:00 월 이전자리에서 반올림
TRUNC(날짜,자리수) 날짜 버림 TRUNC(SYSDATE,’MONTH’) 2024/02/01 0:00 월 이전자리에서 버fla
MONTH_BETWEEN(날짜1,날짜2) 날짜1과 날짜2 사이의 개월 수 리턴 MONTH_BETWEEN(SYSDATE,HIREDATE) 3.7234 날짜1 < 날짜2로 전달 시 음수 리턴
  • SQL-Server
    • SYSDATE → GETDATE
    • ADD_MONTHS → DATEADD (월 뿐만 아니라 모든 단위 날짜 연산 가능)
    • MONTHS_BETWWEN → DATEDIFF (두날짜 사이의 년,월,일 추출)

 

변환 함수의 종류와 특징

  • 데이터 타임을 변환
  • 문자를 숫자로, 숫자를 문자로, 날짜를 문자로 변경
함수명 함수 기능 사용예시 출력 기타 설명
TO_NUMBER(대상) 숫자 타입으로 변경하여 리턴 TO_NUMBER(’100’) 100 문자100을 숫자 100으로 리턴
TO_CHAR(대상,포맷) 1) 날짜의 포맷 변경 TO_CHAR(SYSDATE,’MM/DD-YYYY’) 02/14-2024 날짜 형식 변경(리턴은 문자타입)
2) 숫자의 포맷 변경 TO_CHAR(9000,’9,999’) 9,000 천단위 구분기호 생성 (리턴은 문자타입)
TO_DATE(문자,포맷) 주어진 문자를 포맷형식에 맞게 읽어 날짜로 리턴 TO_DATE(’2024/01/01’,’YYYY/MM/DD’) 2024/01/01 00:00:00 날짜로 리턴됨
* 포맷과 문자가 동일 해야함
FORMAT(날짜, 포맷) 날짜의 포맷 변경 FORMAT(GETDATE(), 'YYYY') 2024 SQL SERVER 함수
CAST(대상 AS 데이터타입) 대을 주어진 데이터타입으로 변환 CAST(’100’ AS int) 100 문자100을 숫자100으로 리턴
  • SQL-Sever
    • TO_NUMBER, TO_DATE, TO_CHAR → CONVERT (포맷 전달 시)
    • 단순 변환일 경우 주로 CAST 사용

 

그룹 함수의 종류와 특징

  • 다중행 함수
  • 여러 값이 input값으로 들어가 하나의 요약된 값으로 리턴
  • group by와 함께 자주 사용됨
  • Oracle과 SQL-Server 거의 동일
  • COUNT의 경우 컬럼이 모두 NULL 값이면 0를 리턴, 나머지 함수는 다 NULL값은 계산에 포함하지 않고 무시
함수명 함수기능 사용예시 출력 기타 설명
COUNT(대상) 행의 수 리턴 SELECT COUNT(SAL) FROM EMP; 각 연산 결과 NULL 무시하고 연산
SUM(대상) 총 합 리턴 SELECT SUM(SAL) FROM EMP; 각 연산 결과 NULL 무시하고 연산
AVG(대상) 평균 리턴 SELECT AVG(SAL) FROM EMP; 각 연산 결과 NULL 무시하고 연산
MIN(대상) 최솟값 리턴 SELECT MIN(SAL) FROM EMP; 각 연산 결과 NULL 무시하고 연산
MAX(대상) 최댓값 리턴 SELECT MAX(SAL) FROM EMP; 각 연산 결과 NULL 무시하고 연산
VARIANCE(대상) 분산 리턴 SELECT VARIANCE(SAL) FROM EMP; 각 연산 결과 NULL 무시하고 연산
STDDEV(대상) 표준편차 리턴 SELECT STDDEV(SAL) FROM EMP; 각 연산 결과 NULL 무시하고 연산
  • SQL-Sever
    • VARIANCE → VAR
    • STDDEV → STDEV

 

일반 함수의 종류와 특징

  • 기타 함수 (NULL 치환 함수 등)
함수명 함수기능 사용예시 출력 기타 설명
DECODE(대상,값1,리턴1,값2,리턴2,…,그외 리턴) 대상이 값이1이면 리턴1, 값이 2이면 리턴2, 그외에는 그외 리턴값 리턴 DECODE(DEPTNO,10,A,B) A 또는 B 대소비교에 따른 치환 불가 그외 리턴 생략시 NULL 리턴
* Oracle 전용 함수
NVL(대상,치환값) 대상이 NULL이면 치환값으로 치환하여 리턴 NVL(COMM,0) COMM값 또는 0 리턴  
NVL2(대상,치환값1,치환값2) 대상이 NULL이면 치환값2로 치환, NULL이 아니면 치환값1로 리턴 NVL2(COMM,COMM*1.1,0) COMM*1.1값 또는 0 COMM값 NULL이면 0, 아니면 COMM*1.1 리턴
COALSESCE(대상1,대상2,….,그외리턴) 대상1이 NULL이면 대상2,대상2가 NULL이면 대상3,…,모두가 NULL이면 그외 리턴값이 리턴됨 COALESCE(NULL, 100) 100 그외리턴값 생략 시 널 리턴
ISNULL(대상, 치환값) 대상이 NULL이면 치환값이 리턴 ISNULL(NULL,100) 100 SQL서버 함수
NULLIF(대상1, 대상2) 두값이 같으면 NULL 리턴, 다르면 대상1 리턴 NULLIF(10,20) 10  
CASE문 조건별 치환 및 연산 수행 밑에 참고 밑에 참고  

 

ex) DECODE 사용 예시 (부서번호가 10번이면 인사부, 20번이면 재무부, 나머지는 NULL 리턴

SELECT DEPTNO,DECODE(DEPTNO,10,'인사부',20,'재무부') AS DNAME FROM EMP;

ex) DECODE 사용 예시2 (DEPTNO가 10이면서 JOB이 CLERK면 A, DEPTNO가 10 이면서 CLERK가 아니면 B, TEPTNO가 10이 아니면 C

SELECT DEPTNO, JOB, DECODE(DEPTNO,10,DEODE(JOB,'CLERK','A','B'),'C') AS RESULT FROM EMP;

ex) NVL, NVL2 사용 예제 (NVL2의 경우 NVL이랑 다르게 COMM의 값이 널이 아닐때도 치환값 정의 가능, NVL2의 경우 COMM이 널이 아니면 10% 인상값, 널이면 500 리턴)

SELECT COMM,NVL(COMM,0),NVL2(COMM,COMM*1.1,500) FROM EMP;

ex) COALESCE 사용 예제 (DEPTNO1과 DEPTNO2중 널 아닌값 출력, 둘다 널이 아니면 맨 앞 순서대로 출력, 모두 널인 경우 마지막 인수값(0) 출력

SELECT DEPTNO1,DEPTNO2,COALESCE(DEPTNO1,DEPTNO2,0) AS RESULT FROM STUDENT;

ex) CASE문 사용 예제 1 (CASE문을 사용하여 여러 조건(대소비교 가능)에 대한 치환 및 연산 가능

SELECT SAL,CASE WHEN SAL < 2000 THEN 'C' ‌‌‌‌WHEN SAL < 3000 THEN 'B' ‌‌‌‌​​​​​​​​​​​​​​​​ELSE 'A' ‌‌​​​END AS SAL_GRADE ​​FROM EMP;

ex) CASE문 사용 예제2 (동등비교 시 위처럼 비교대상(DEPTNO)를 CASE와 WHEN 사이에 배치하면서 WHEN절 마다 반복하지 않아도 됨, 이때 DEPTNO. 데이터 타입과 WHEN절의 명시된 비교대상의 데이터 타입 반드시 일치해야 함)

SELECT DEPTNO, ‌‌‌​CASE DEPTNO WHEN 10 THEN '인사부' ‌‌‌‌‌‌​WHEN 20 THEN '총무부' ‌‌‌‌‌‌​WHEN 30 THEN '재무부' ‌‌‌‌‌‌‌‌​ELSE '기타' ‌‌‌​END AS DNAME1, ‌‌‌​CASE WHEN DEPTNO = 10 THEN '인사부' ‌‌‌‌​​​WHEN DEPTNO = 20 THEN '총무부' ‌‌‌‌​​WHEN DEPTNO = 30 THEN '재무부' ‌‌‌‌‌‌‌‌​ELSE '기타' ‌‌‌​END AS DNAME2 FROM EMP;

반응형