SQL

02. 함수(FUNCTION) PART.1

비보호신호등 2024. 8. 13. 12:42

<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'7FROM DUAL;
cs

7번째 위치부터 끝까지 추출

 

 

1
SELECT SUBSTR('SHOWMETHEMONEY'52FROM DUAL;
cs

5번째 위치부터 2개를 추출

 

EX)

함수 중첩사용 가능
이메일의 아이디부분 추출
사원목록에서 사원명, 이메일, 아이디 조회

 

1
2
SELECT EMP_NAME, EMAIL, SUBSTR(EMAIL, 1, INSTR(EMAIL, '_'-1)
FROM EMPLOYEE;
cs

 

 

<LPAD / RPAD>

문자열을 조회할 때 통일감 있게 조회하고자 할 때 사용

 

[표현법]

LPAD / RPAD (STRING, 최종적으로 반환할 문자열의 길이, [덧붙이고자하는 문자])문자열에 덧붙이고자하는 문자를 왼쪽 또는 오른쪽에 붙여서 최종 N길이만큼 문자열을 반환

 

EX)20만큼의 길이 중 EMAIL컬럼값은 오른쪽으로 정렬하고 나머지 부분은 공백으로 채운다.

1
2
3
SELECT EMP_NAME, LPAD(EMAIL, 20)
FROM EMPLOYEE;
 
cs

EMAIL 컬럼은 LPAD를 이용해서 오른쪽으로 정렬이 된 것을 볼 수 있다.

 

 

<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

.