3) SQL 기본
** 함수 종류
1. 문자 함수
1) CHA (ASCII 코드)
- 숫자를 문자로 변환시켜줌
ex) SELECT CHA(65) FROM DB
2) LOWER(문자열)
- 문자열을 소문자로 변환해줌
EX) SELECT LOWER('TEST') FROM DB
3) UPPER(문자열)
- 문자열을 대문자로 변환해줌
EX) SELECT UPPER('test') FROM DB
4) LTRIM(문자열 [,특정문자])
- 옵션을 사용하지 않으면 왼쪽의 공백을 싹다 지움
- 옵션을 사용하면 문자열을 왼쪽부터 한 글자씩 특정 문자와 비교하여 특정 문자에 포함되어 있으면 제거하고 않았으면 멈춤
EX) SELECT LTRIM('블랙핑크', '블랙') FROM DB
ex) SELECT LTRIM('SQL DEVELOPER', 'SQLD')
-> EVELOPER만 남음
5) RTRIM(문자열 [,특정문자])
- 옵션을 사용하지 않으면 우측의 공백을 싹 다 지움
- 옵션을 사용하면 문자열을 오른쪽부터 한 글자씩 특정 문자와 비교하여 특정 문자에 포함되어 있으면 제거
6)TRIM([위치][특정문자][FROM]문자열)
- 옵션이 하나도 없으면 문자열의 왼쪽과 오른쪽 공백을 제거
- 위치는 LEADING과 TAILING, BOTH로 진행할 수 있음
- 위치 지정 이후 특정 문자(한글자만)지정하여 제거할 수 있음
7)SUBSTR(문자열, 시작점, [길이])
- 문자열의 원하는 부분만 잘라서 반환하는 함수
- 길이를 명시하지 않으면 문자열의 시작부터 끝까지 반환
EX) STRING = '블랙핑크제니'
SUBSTR('블랙핑크제니', 3, 2) -----> 핑크
SUBSTR('블랙핑크제니', 3, 4)------> 핑크제니
8) LENGTH(문자열)
- 문자열의 길이를 반환
9) REPLACE(문자열, 변경 전 문자열, [변경 후 문자열])
- 옵션을 주지 않으면 변경 전 문자열을 제거
- 옵션을 주면 변경 전 문자열을 변경 후 문자열로 바꿔줌
10) LPAD(문자열, 길이, 문자)
- 문자열이 설정한 길이가 될 때 까지 왼쪽을 특정 문자로 채움
11) RPAD(문자열, 길이, 문자)
- 문자열이 설정한 길이가 될 때 까지 오른쪽을 특정 문자로 채움
2. 숫자 함수
1) ABS(수)
- 절댓값을 반환
2) SIGN(수)
- 수의 부호를 반환
- 음수면 -1, 양수면 1, 0이면 0
3) ROUND(수, [자릿수])
- 수를 지정하면 소숫점의 자릿수까지 반올림하여 반환하는 함수
- 자리를 명시하지 않으면 정수형으로 반올림하여 반환
- 음수를 명시하면 정수에서 10단위로 올라가며 반올림
EX) SELECT ROUND(163.14, 1) FROM DB -----> 163.1
EX) SELECT ROUND(163.166, 2) FROM DB -------> 163.17
EX) SELECT ROUND(163.772) FROM DB ------> 164
EX) SELECT ROUND(163.772, -2) FROM DB -------> 200
4) TRUNC(수, [자릿수])
- 수를 지정된 소숫점 자릿수까지 버림하여 반환하는 함수
- 자리수를 명시하지 않으면 정수를 반환
EX) SELECT TRUNC(163.123, 1) FROM DB ------> 163.1
EX) SELECT TRUNC(163.123) FROM DB -----> 163
5) CEIL(수)
- 소수점 이하의 수를 올림한 정수를 반환하는 함수
EX) SELECT CEIL(163.6312) FROM DB ---> 164
6) FLOOR(수)
- 소숫점 이하의 수를 버림한 정수를 반환해주는 정수
EX) SELECT FLOOR(163.6331) FROM DB ----> 163
7) MOD(수1, 수2)
- 수1을 수2로 나눈 나머지를 반환해주는 함수
- 수2 자리에 0이 들어오면 수1을 반환함
- 두 수가 모두 음수면 음수의 나머지를 반환
EX) SELECT MOD(4, 2) FROM DB ----> 0
3. 날짜 함수
1) SYSDATE
- 현재의 연, 월, 일, 시, 분, 초를 반환해주는 함수
EX) SELECT SYSDATE FROM DB -> 2021-09-21 22:08:08
2) EXTRACT(특정 단위 FROM 날짜 데이터)
- 날짜 데이터에서 특정 단위(YEAR, MONTH, DAY, HOUR, MINUTE, SECOND)만을 출력하여 변환
EX) SELECT EXTRACT(YEAR FROM SYSDATE) FROM DB -> 2021
EX) SELECT EXTRACT(MONTH FROM SYSDATE) FROM DB --> 12
EX) SELECT EXTRACT(DAY FROM SYSDATE) FROM DB --> 24
3) ADD_MONTHS(날짜 데이터, 특정 개월 수)
- 날짜 데이터에서 특정 개월 수를 더한 날짜를 반환해주는 함수
- 날짜 이전 달이나 다음달에 기준 날짜의 일자가 존재하지 않으면 해당 월의 마지막 일자를 반환
EX) SELECT ADD_MONTH(2021-08-31, 1) FROM DB ----> 2021-09-30
4. 변환 함수
1) 명시적 형변환
- 변환 함수를 사용하여 데이터 유형 변환을 명시적으로 나타낸 형변환
1) TO_NUMBER(문자열)
- 문자열을 숫자형으로 변환하는 함수
EX) SELECT TO_NUMBER('1401') FROM DB --->1401
2) TO_CHAR(수 or 날짜 [포맷])
- 수나 날짜형을 문자형으로 바꾸는 함수
EX) SELECT TO_CHAR(1234) FROM DB ---> '1234'
EX) SELECT TO_CHAR(SYSDATE, 'YYYYMMDD HH24MISS') FROM DB --> '20231224 194223
3) TO_DATE(문자열, 포맷)
- 포맷 형식의 문자형의 데이터를 날짜형으로 변환해주는 함수
EX) SELECT TO_DATE('2023-12-23', 'YYYYMMDD') FROM DB ---> 2023-12-23
2) 암시적 형변환
- 데이터베이스가 내부적으로 알아서 데이터 유형을 변환함
5. NULL 관련 함수
1) NVL(인수1, 인수2)
- 인수1이 NULL이면 인수2를 반환, NULL이 아니면 인수1을 반환
EX) SELECT NVL(REVIEW, 0) FROM DB ---> REVIEW가 NULL이면 0을반환, 아니면 REVIEW를 반환
2) NULLIF(인수1, 인수2)
- 인수1과 인수2가 같으면 NULL을 반환, 아니면 인수1을 반환
3) COALESCE(인수1, 인수2, 인수3 ....)
- NULL이 아닌 최초의 인수를 반환해주는 함수
4) NVL2(인수1, 인수2, 인수3)
- 인수1이 NULL이 아니면 인수2를 반환, NULL이면 인수3을 반환
6. CASE
- 함수보다는 구문에 가까운 성격. SWITCH 문이랑 비슷하다고 보면 됨
EX) SELECT LINE,
CASE WHEN LINE = '1' TEHN 'BLUE'
WHEN LINE = '2' THEN 'RED'
WHEN LINE = '3' THEN 'YELLOW'
ELSE 'GRAY'
END AS [이름]
** GROUP BY, HAVING
- 그룹별로 데이터를 묶도록 해주는 함수가 GROUP BY
- HAVING은 그룹으로 묶을 기준, 조건을 담아내는 것
- SELECT 문의 논리적 수행 순서
1) FROM -> 2) WHERE -> 3) GROUP BY -> 4) HAVING -> 5)SELECT -> 6( ORDER BY