DB(MySQL)

MySQL - 함수 모음/연산

우가본 2024. 8. 14. 12:17

mysql연산자_함수.txt
0.00MB

############[ 연산자  & 내장함수 ]#############

1. 수학함수 & 산술 연산자
	[기본 산술]
	사칙연산 : + - * /

	몫	: div

	나머지	: %, MOD, MOD(값, divisor)

	제곱	: POW(값, 지수), POWER(값, 지수)

	제곱근	: SQRT(값)

	반올림	: ROUND(값, [소수점자릿수])

	올림	: CEIL(값, [소수점자릿수]), CEILING(값, [소수점자릿수])

	버림	: FLOOR(값, [소수점자릿수]), TRUNCATE(값, 소수점자릿수)

	절댓값	: ABS(값)

	난수 생성	: RAND()
 

2. 논리함수 & 논리 연산자

	모두 참이면 참	:	AND &&

	하나라도 참이면 참	:	OR ||

	서로 다르면 참	:	XOR

	대입 연산		:	:=

	삼항 연산		:	IF(조건식, 참의 반환값, 거짓의 반환값)

	값이 null일 때 반환값 : IFNULL(값, 반환값), COALESCE(값, 반환값)

 
3. 비교함수 & 비교 연산자

	크다, 작다		: > < >= <=

	같다, 다르다	: =, != <>

	null값 여부	: IS NULL, IS NOT NULL

	참 여부		: IS TRUE, IS NOT TRUE

	거짓 여부		: IS FALSE, IS NOT FALSE

	
	min ~ max	: BETWEEN min AND max

	!(min ~ max)	: NOT BETWEEN min AND max

	비교값들 중 존재 여부	: IN(비교값들 혹은 서브쿼리)

	서브쿼리가 반환하는 레코드(행) 존재 여부 : EXISTS(서브쿼리)

	비교값들 모두 만족하면 참 : ALL(비교값들 혹은 서브쿼리)

	비교값들 중 하나라도 만족하면 참 : ANY(비교값들 혹은 서브쿼리)

	-- IN()
	-- EXISTS()
	-- ANY()

	최댓값 : GREATEST(값,...)

	최솟값 : LEAST(값,...)

 
4. 문자열함수

	문자 → 아스키 코드값 : ASCII('C')
	아스키 코드값 → 문자 : CHAR(정수)

	합치기	: CONCAT(str,...), CONCAT_WS('구분자', str,...)

	대체	: REPLACE(str, 기존문자, 대체문자)

	자르기	: SUBSTR(str, start, length)

	문자열 길이		: 바이트수 LENGTH(str), 문자수 CHAR_LENGTH(str)

	문자열 검색		: INSTR(str, 검색문자)

	문자열 포함 확인	: LIKE '%', NOT LIKE '_'

	wildcard (대체 문자) : 단일문자 대체 _, 복수문자 대체 %
	→ wildcard 검색 시, 앞에 역슬래시\를 추가
 

 

5. 날짜함수
	현재 날짜와 시간	: NOW(), CURRENT_TIMESTAMP(), sysdate()

	일 차이		: DATEDIFF(date1, date2)

	날짜 및 시간 차이	: TIMESTAMP(단위, date2, date1)

	-- (date1 - date2) 계산
	SELECT TIMESTAMPDIFF(HOUR, '2022-12-31', '2023-01-01'); -- 24

	원하는 값만 추출 : YEAR(날짜), MONTH(날짜), DAYOFMONTH(날짜),DAYOFWEEK(날짜) HOUR(시간), MINUTE(시간), SECOND(시간)
	SELECT DAYOFWEEK('2022-12-31');	-- 7 (토요일)
	SELECT DAYOFWEEK('2023-01-01');	-- 1 (일요일)
	형식 변경 : DATE_FORMAT(col, '%Y')

	📋 포맷 코드

	코드	역할	예시		코드	역할	예시
	%Y	년	2023		%T	시간	00:00:00
	%y	년	23		%H	시	00 ~ 23
	%M	월	January		%h, %I	시	01 ~12
	%b	월	Jan		%k	시	0 ~ 23
	%m	월	01		%l	시	1 ~ 12
	%c	월	1		%i	분	00
	%d	일	01		%S, %s	초	00
	%e	일	1		%p	A/P	AM
	%W	요일	Sunday				
	%a	요일	Sun				
 

 

6. 기타
	집계함수 (그룹함수)
	갯수, 합, 평균	: COUNT(col), SUM(col), AVG(col)

	최대, 최소		: MAX(col), MIN(col)

	 

	분석함수 (순위함수)
	순위	: RANK(), DENSE_RANK(), ROW_NUMBER()
	범위 제한	: LIMIT 시작인덱스, 갯수, LIMIT 갯수 OFFSET 시작인덱스
	EX)

	봉급	RANK	DENSE_RANK	ROW_NUMBER
	2500	1	1	1
	2500	1	1	2
	2000	3	2	3
	 

	윈도우함수
	OVER() : 행과 행 간의 관계를 정의해주는 함수
	→ 집계함수 혹은 분석함수와 함께 쓰임

	집계함수 사용을 위한 그룹화 : PARTITION BY
	분석함수 사용을 위한 정렬 : ORDER BY
	    -- 기존 데이터에 부서별 평균임금
	    SELECT *,AVG(sapay) OVER(PARTITION BY deptno) as dept_avg FROM sawon;
	    
	    -- 기존 데이터에 봉급 순위 추가 (1~10위로 제한)
	    SELECT name, salary,
		ROW_NUMBER()OVER(ORDER BY sapay DESC)
	    FROM sawon
	    LIMIT 0, 10;

 

-> MySQL은 형식에 크게 구애받지 않는다

-> 단, 테스트 용이 아닐 때에는 정확한 형식을 수행해줘야 한다.