하나의 큰 프로그램에서 반복적으로 사용되는 부분들을 분리하여 작성해 놓은 작은 서브 프로그램
호출하며 값을 전달하면 결과를 리턴하는 방식으로 사용
주어진 컬럼 값/문자열의 길이(문자 개수) 반환
작성법 | 리턴 값 타입 |
---|---|
LENGTH (CHAR | STRING) |
- CHAR | STRING : 문자 타입 컬럼 또는 문자열 |
SELECT EMP_NAME, LENGTH(EMP_NAME), EMAIL, LENGTH(EMAIL)
FROM EMPLOYEE;
지정한 위치부터 지정한 숫자 번째로 나타나는 문자의 시작 위치 반환
작성법 | 리턴 값 타입 |
---|---|
INSTR(STRING, STR, [POSITION,[OCCURRENCE]]) | NUMBER |
STRING
: 문자 타입 컬럼 또는 문자열STR
: 찾으려는 문자열POSITION
: 찾을 위치 시작 값(기본 값 1) POSITION > 0이면 STRING의 시작부터 끝 방향으로 찾고 POSITION < 0이면 STRING의 끝부터 시작 방향으로 찾음OCCURRENCE
: SUBSTRING이 반복될 때 지정하는 빈도(기본 값 1), 음수 사용 불가-- EMAIL 컬럼의 문자열 중 ‘@’의 위치를 구하시오.
SELECT EMAIL, INSTR(EMAIL, ‘@’, -1, 1) 위치
FROM EMPLOYEE;
주어진 컬럼, 문자열의 왼쪽/오른쪽에서 지정한 STR에 포함된 모든 문자를 제거한 나머지 반환
작성법 | 리턴 값 타입 |
---|---|
LTRIM(STRING, STR) / RTRIM(STRING, STR) | CHARACTER |
STRING
: 문자 타입 컬럼 또는 문자열STR
: 제거하려는 문자(열), 생략 시 공백문자SELECT EMP_NAME, LTRIM(PHONE, '010'), RTRIM(EMAIL, '@kh.or.kr')
FROM EMPLOYEE;
주어진 컬럼, 문자열의 앞/뒤/양쪽에 있는 지정한 문자를 제거한 나머지 반환
작성법 | 리턴 값 타입 |
---|---|
TRIM( STRING ) | CHARACTER |
TRIM( CHAR FROM STRING) | CHARACTER |
TRIM( LEADING or TRAILING or BOTH [CHAR] FROM STRING) | CHARACTER |
STRING
: 문자 타입 컬럼 또는 문자열CHAR
: 제거하려는 문자(열), 생략 시 공백문자LEADING
: TRIM할 CHAR의 위치 지정, 앞(LEADING)/뒤(TRAILING)/양쪽(BOTH) 지정 가능(기본 값 양쪽)컬럼이나 문자열에서 지정한 위치부터 지정한 개수의 문자열을 잘라내어 반환
작성법 | 리턴 값 타입 |
---|---|
SUBSTR( STRING, POSITION, [LENGTH] ) | CHARACTER |
STRING
: 문자 타입 컬럼 또는 문자열POSITION
: 문자열을 잘라낼 위치로 양수면 시작방향에서 지정한 수만큼, 음수면 끝 방향에서 지정한 수만큼의 위치 의미LENGTH
: 반환할 문자 개수(생략 시 문자열의 끝까지 의미, 음수면 NULL
리턴)주어진 컬럼, 문자열에 임의의 문자열을 왼쪽/오른쪽에 덧붙여 길이 N의 문자열 반환
작성법 | 리턴 값 타입 |
---|---|
LPAD(STRING, N, [STR]) / RPAD(STRING, N, [STR]) | CHARACTER |
STRING
: 문자 타입 컬럼 또는 문자열N
: 반환할 문자(열)의 길이(바이트), 원래 STRING의 길이보다 작다면 N만큼 잘라서 표시STR
: 덧붙이려는 문자(열), 생략 시 공백문자SELECT LPAD(EMAIL, 20, ‘#’)
FROM EMPLOYEE;
SELECT RPAD(EMAIL, 20, ‘#’)
FROM EMPLOYEE;
컬럼의 문자 혹은 문자열을 소문자/대문자/첫 글자만 대문자로 변환하여 반환
작성법 | 리턴 값 타입 |
---|---|
LOWER(STRING) / UPPER(STRING) / INITCAP(STRING) | CHARACTER |
STRING
: 문자 타입 컬럼 또는 문자열인자로 전달 받은 숫자의 절대값 반환
작성법 | 리턴 값 타입 |
---|---|
ABS(NUMBER) | NUMBER |
UMBER
: 숫자 혹은 숫자 데이터 컬럼인자로 전달 받은 숫자를 나누어 나머지 반환
작성법 | 리턴 값 타입 |
---|---|
MOD(NUMBER, DIVISION) | NUMBER |
NUMBER
: 숫자 혹은 숫자 데이터 컬럼DIVISION
: 나눌 수 혹은 나눌 숫자 데이터 컬럼인자로 전달 받은 숫자 혹은 컬럼에서 지정한 위치부터 반올림하여 값 반환
작성법 | 리턴 값 타입 |
---|---|
ROUND(NUMBER) | NUMBER |
ROUND(NUMBER, POSITION) | NUMBER |
NUMBER
: 숫자 혹은 숫자 데이터 컬럼POSITION
: 반올림할 위치(생략 시 기본 값 0)인자로 전달 받은 숫자 혹은 컬럼에서 소수점 자리의 수를 버림 후 반환
작성법 | 리턴 값 타입 |
---|---|
FLOOR(NUMBER) | NUMBER |
NUMBER
: 숫자 혹은 숫자 데이터 컬럼인자로 전달 받은 숫자 혹은 컬럼에서 지정한 위치부터의 자리의 수를 버리고(절삭) 반환
작성법 | 리턴 값 타입 |
---|---|
TRUNC(NUMBER, POSITION) | NUMBER |
NUMBER
: 숫자 혹은 숫자 데이터 컬럼POSITION
: 버릴 위치(생략 시 기본 값 0)FLOOR는 진짜 수학적 ‘버림’을 하는 애고
TRUNC는 그냥 진짜 버리는 애
인자로 전달 받은 숫자 혹은 컬럼을 올림 후 반환
작성법 | 리턴 값 타입 |
---|---|
CEIL(NUMBER) | NUMBER |
NUMBER
: 숫자 혹은 숫자 데이터 컬럼CEILING
시스템에 저장되어 있는 현재 날짜 반환
작성법 | 리턴 값 타입 |
---|---|
SYSDATE | DATE |
SELECT SYSDATE
FROM DUAL;
인자로 날짜 두 개를 전달받아 개월 수 차이를 숫자 데이터형으로 반환
작성법 | 리턴 값 타입 |
---|---|
MONTHS_BETWEEN(DATE1, DATE2) | NUMBER |
DATE1
: 기준이 되는 날짜DATE2
: 개월 수를 구하려는 날짜-- EMPLOYEE테이블에서 사원의 이름, 입사일, 근무 개월 수 조회
SELECT EMP_NAME,
HIRE_DATE,
MONTHS_BETWEEN(SYSDATE, HIRE_DATE)
FROM EMPLOYEE;
인자로 전달받은 날짜에 인자로 받은 숫자만큼 개월 수를 더하여 특정 날짜 반환
작성법 | 리턴 값 타입 |
---|---|
ADD_MONTHS(DATE, NUMBER) | DATE |
DATE1
: 기준이 되는 날짜DATE2
: 더하려는 개월 수- EMPLOYEE테이블에서 사원의 이름, 입사일, 입사 후 6개월이 된 날짜 조회
SELECT EMP_NAME,
HIRE_DATE,
ADD_MONTHS(HIRE_DATE, 6)
FROM EMPLOYEE;
인자로 전달받은 날짜가 속한 달의 마지막 날짜 반환
작성법 | 리턴 값 타입 |
---|---|
LAST_DAY (DATE) | DATE |
DATE
: 기준이 되는 날짜- EMPLOYEE테이블에서 사원의 이름, 입사일, 입사한 달의 마지막 날 조회
SELECT EMP_NAME,
HIRE_DATE,
LAST_DAY(HIRE_DATE)
FROM EMPLOYEE;
년, 월, 일 정보 추출하여 반환
작성법 | 리턴 값 타입 |
---|---|
EXTRACT(YEAR FROM DATE) | DATE |
EXTRACT(MONTH FROM DATE) | DATE |
EXTRACT(DAY FROM DATE) | DATE |
DATE
: 기준이 되는 날짜-- EMPLOYEE테이블에서 사원의 이름, 입사 년, 입사 월, 입사 일 조회
SELECT EMP_NAME,
EXTRACT(YEAR FROM HIRE_DATE) YEAR,
EXTRACT(MONTH FROM HIRE_DATE) MONTH,
EXTRACT(DAY FROM HIRE_DATE) DAY
FROM EMPLOYEE;
구분 | 입력 값 타입 | 리턴 값 타입 | 설명 |
---|---|---|---|
TO_CHAR | DATE | ||
NUMBER | CHARACTER | 날짜형 혹은 숫자형을 문자형으로 변환 | |
TO_DATE | CHARACTER | ||
NUMBER | DATE | 문자형 혹은 숫자형을 날짜형으로 변환 | |
TO_NUMBER | CHARACTER | NUMBER | 문자형을 숫자형으로 변환 |
날짜 혹은 숫자형 데이터를 문자형 데이터로 변환하여 반환
작성법 | 리턴 값 타입 |
---|---|
TO_CHAR(DATE[, FORMAT]) | CHARACTER |
TO_CHAR(NUMBER[, FORMAT]) | CHARACTER |
DATE
: 문자형으로 변환하려는 날짜형 데이터NUMBER
: 문자형으로 변환하려는 숫자형 데이터FORMAT
: 문자형으로 변환 시 지정할 출력 형식형식 | 의미 | 형식 | 의미 |
---|---|---|---|
YYYY | 년도 표현(4자리) | YY | 년도 표현(2자리) |
MM | 월을 숫자로 표현 | MON | 월을 알파벳으로 표현 |
DD | 일 표현 | Q | 분기 표현 |
DAY | 요일 표현 | DY | 요일을 약어로 표현 |
SELECT EMP_NAME,
TO_CHAR(HIRE_DATE, 'YYYY-MM-DD'),
TO_CHAR(HIRE_DATE, 'YY/MON, DAY, DY')
FROM EMPLOYEE;
SELECT EMP_NAME,
TO_CHAR(SALARY, ‘L999,999,999’),
TO_CHAR(SALARY, ‘000,000,000’)
FROM EMPLOYEE;
숫자 혹은 문자형 데이터를 날짜형 데이터로 변환하여 반환
작성법 | 리턴 값 타입 |
---|---|
TO_DATE(CHARACTER[, FORMAT]) | DATE |
TO_DATE(NUMBER[, FORMAT]) | DATE |
CHARACTER
: 날짜형으로 변환하려는 문자형 데이터NUMBER
: 날짜형으로 변환하려는 숫자형 데이터FORMAT
: 날짜형으로 변환 시 지정할 출력 형식-- EMPLOYEE테이블에서 2000년도 이후에 입사한 사원의 사번, 이름, 입사일 조회
SELECT EMP_NO,
EMP_NAME,
HIRE_DATE
FROM EMPLOYEE
WHERE HIRE_DATE > TO_DATE(20000101, ‘YYYYMMDD’);
날짜 혹은 문자형 데이터를 숫자형 데이터로 변환하여 반환
작성법 | 리턴 값 타입 |
---|---|
TO_NUMBER (CHARACTER, [FORMAT]) | NUMBER |
CHARACTER
: 숫자형으로 변환하려는 문자형 데이터FORMAT
: 날짜형으로 변환 시 지정할 출력 형식SELECT TO_NUMBER('1,000,000', '99,999,999')
- TO_NUMBER('550,000', '999,999')
FROM DUAL;
NULL로 되어 있는 컬럼의 값을 인자로 지정한 숫자 혹은 문자로 변경하여 반환
작성법 | 리턴 값 타입 |
---|---|
NVL(P1, P2) | NUMBER |
CHARACTER |
P1
: NULL데이터를 처리할 컬럼명 혹은 값P2
: NULL값을 대체하고자 하는 값SELECT EMP_NO,
EMP_NAME,
SALARY,
NVL(BONUS, 0),
(SALARY + (SALARY * NVL(BONUS, 0)))*12
FROM EMPLOYEE;
비교하고자 하는 값 또는 컬럼이 조건식과 같으면 결과 값 반환
작성법 | 리턴 값 타입 |
---|---|
DECODE(표현식, 조건1, 결과1, 조건2, 결과2, …, DEFAULT) | 결과 |
표현식
: 값에 따라 선택을 다르게 할 컬럼 혹은 값조건
: 해당 값이 참인지 거짓인지 여부 판단결과
: 해당 조건과 일치하는 경우 반환할 값DEFAULT
: 모든 조건이 불일치 시 반환할 값SELECT EMP_ID,
EMP_NAME,
EMP_NO,
DECODE(SUBSTR(EMP_NO, 8, 1), ‘1’, ‘남’, ‘2’, ‘여‘) AS 성별
FROM EMPLOYEE;
비교하고자 하는 값 또는 컬럼이 조건식과 같으면 결과 값 반환(조건은 범위 값 가능)
-- 작성법
CASE WHEN 조건1 THEN 결과1
WHEN 조건2 THEN 결과2
WHEN 조건3 THEN 결과3
…
ELSE 결과N
END
-- 결과값 반환
조건
: 해당 값이 참인지 거짓인지 여부 판단결과
: 해당 조건과 일치하는 경우 반환할 값DEFAULT
: 모든 조건이 불일치 시 반환할 값SELECT EMP_ID, EMP_NAME, EMP_NO,
CASE WHEN SUBSTR(EMP_NO, 8, 1) = 1 THEN ‘남’
ELSE ‘여’
END AS 성별
FROM EMPLOYEE;
SELECT EMP_NAME, SALARY,
CASE
WHEN SALARY > 5000000 THEN '1등급'
WHEN SALARY > 3500000 THEN '2등급'
WHEN SALARY > 2000000 THEN '3등급'
ELSE '4등급'
END 등급
FROM EMPLOYEE;
하나 이상의 행을 그룹으로 묶어 연산하며 총합, 평균 등을 하나의 컬럼으로 반환하는 함수
구분 | 설명 |
---|---|
SUM | 그룹의 누적 합계 반환 |
AVG | 그룹의 평균 반환 |
COUNT | 그룹의 총 개수 반환 |
MAX | 그룹의 최대 값 반환 |
MIN | 그룹의 최소 값 반환 |
해당 컬럼 값들의 총합 반환
-- EMPLOYEE테이블에서 남자 사원의 급여 총합 조회
SELECT SUM(SALARY),
FROM EMPLOYEE
WHERE SUBSTR(EMP_NO, 8, 1) = 1;
-- EMPLOYEE테이블에서 부서코드가 D5인 직원의 보너스 포함 연봉 조회
SELECT SUM(SALARY + (SALARY*NVL(BONUS, 0))*12)
FROM EMPLOYEE
WHERE DEPT_CODE = 'D5';
해당 컬럼 값들의 평균 반환
-- EMPLOYEE테이블에서 전 사원의 보너스 평균을 소수 셋 째 자리에서 반올림 한 것 조회
SELECT ROUND(AVG(NVL(BONUS, 0)), 2)
FROM EMPLOYEE;
그룹의 최대값과 최소값 반환
-- EMPLOYEE테이블에서 가장 높은 급여와 가장 낮은 급여 조회
SELECT MAX(SALARY), MIN(SALARY)
FROM EMPLOYEE;
-- EMPLOYEE테이블에서 가장 오래된 입사일과 가장 최근인 입사일 조회
SELECT MAX(HIRE_DATE), MIN(HIRE_DATE)
FROM EMPLOYEE;
테이블 조건을 만족하는 행의 개수 반환
-- EMPLOYEE테이블에서 전체 사원 수 조회
SELECT COUNT(*)
FROM EMPLOYEE;
-- EMPLOYEE테이블에서 부서코드가 D5인 직원의 수 조회
SELECT COUNT(DEPT_CODE)
FROM EMPLOYEE
WHERE DEPT_CODE = ‘D5’;
-- EMPLOYEE테이블에서 사원들이 속해있는 부서의 수 조회
SELECT COUNT(DISTINCT DEPT_CODE)
FROM EMPLOYEE;