02. 함수(FUNCTION) PART.1
<ORDER BY 절>
SELECT로 가장 마지막 줄에 작성, 실행순서 또한 가장 마지막에 실행한다.
[표현법]
SELECT 조회할 컬럼
FROM 조회할 테이블
WHERE 조건식
ORDER BY
정렬기준될 컬럼 | 별칭 | 컬럼순번 [ ASC | DESC ] [ NULLS FIRST | NULLS LAST ]
ASC : 오름차순(작은 값으로 시작해서 값이 점점 커지는 것) -> 기본값
DESC : 내림차순(큰값으로 시작해서 값이 점점 줄어드는 것)
NULL은 기본적으로 가장 큰 값으로 분류해서 정렬한다.
NULLS FIRST : 정렬하고자 하는 컬럼값에 NULL이 있을 경우 해당데이터 맨 앞에 배치(DESC일 때 기본값)
NULLS LAST : 정렬하고자 하는 컬럼값에 NULL이 있을 경우 해당데이터 맨 마지막에 배치(ASC일 때 기본값)
ORDER BY BONUS; --> 기본값이 오름차순
ORDER BY BONUS ASC;
ORDER BY BONUS ASC NULLS FIRST;
ORDER BY BONUS DESC; --> NULLS FIRST가 기본값
<함수 FUNCTION>
전달된 컬럼값을 받아서 함수를 실행한 결과를 반환
- 단일행 함수 : N개의 값을 읽어들여서 N개의 결과값을 리턴(매 행마다 함수 실행 결과를 반환)
- 그룹함수 : N개의 값을 읽어들여서 1개의 결과값을 리턴 (그룹을 지어서 그룹별로 함수실행 결과를 반환)
>> SELELCT 절에 단일행 함수랑 그룹함수를 함께 사용하지 못함
- > 결과 행의 갯수가 다르기 때문
>> 함수를 사용할 수 있는 위치 : SELECT절 WHERE절 ORDER BY절 HVING절
<문자처리함수>
-- LENGTH(컬럼 | '문자열') : 해당 문자열의 글자수를 반환
-- LENGTHB(컬럼 | '문자열') : 해당 문자열의 바이트 수를 반환
'최' '나' 'ㄱ' 한글은 글자당 3BYTE
영문자, 숫자, 특수문자 글자당 1BYTE
<INSTR>
문자열로부터 특정 문자의 시작위치를 찾아서 반환
INSTR(컬럼 | '문자열', '찾고자하는 문자', ['찾을 위치의 시작값, 순번']) --> 결과는 NUMBER
1
|
SELECT INSTR('AABAACAABBAA','B')FROM DUAL;
|
cs |
B를 찾게되고 앞쪽에서부터 찾아서 결과 값은 3을 도출함
<SUBSTR>
문자열에서 특정 문자열을 추출해서 반환
[표현법]
SUBSTR(STRING, POSITION, [LENGTH])
- STRING : 문자타임 컬럼 | '문자열'
- POSITION : 무자열 추출할 시작위치 값
- LENGTH : 추출할 문자 개수(생략하면 끝까지)
1
|
SELECT SUBSTR('SHOWMETHEMONEY', 7) FROM DUAL;
|
cs |
1
|
SELECT SUBSTR('SHOWMETHEMONEY', 5, 2) FROM DUAL;
|
cs |
EX)
함수 중첩사용 가능
이메일의 아이디부분 추출
사원목록에서 사원명, 이메일, 아이디 조회
<LPAD / RPAD>
문자열을 조회할 때 통일감 있게 조회하고자 할 때 사용
[표현법]
LPAD / RPAD (STRING, 최종적으로 반환할 문자열의 길이, [덧붙이고자하는 문자])문자열에 덧붙이고자하는 문자를 왼쪽 또는 오른쪽에 붙여서 최종 N길이만큼 문자열을 반환
EX)20만큼의 길이 중 EMAIL컬럼값은 오른쪽으로 정렬하고 나머지 부분은 공백으로 채운다.
1
2
3
|
SELECT EMP_NAME, LPAD(EMAIL, 20)
FROM EMPLOYEE;
|
cs |
<LOWER / UPPER / INITCAP>
LOWER : 다 소문자로 변경한 문자열 반환
UPPPER : 다 대문자로 변경한 문자열 반환
INITCAP : 띄어쓰기 기준 첫글자마다 대문자로 변경한 문자열 반환
EX)
1
2
3
|
SELECT LOWER('WELCOEM TO MY KJ') FROM DUAL;
SELECT UPPER('welcome to my kh') FROM DUAL;
SELECT INITCAP('Welcome to my kh') FROM DUAL;
|
cs |
<REPLACE>
특정문자열에서 특정부분을 다른 부분으로 교체
REPLACE(문자열, 찾을 문자열, 변경할문자열)
EX)
1
2
|
SELECT EMAIL, REPLACE(EMAIL, 'KH.or.kr' , 'Gmail.com')
FROM EMPLOYEE;
|
cs |