1. MySQL 내장 함수
◎ 내장 함수
▷ 흐름 함수, 문자열 함수, 수학 함수, 날짜/시간 함수, 전체 텍스트 검색 함수, 형 변환 함수, XML 함수, 비트 함수,
보안/압축 함수, 정보 함수, 공간 분석 함수, 기타 함수 등
◎ 제어 흐름 함수
▷ 프로그램의 흐름 제어
▷ IF(수식, 참, 거짓)
▶ 수식이 참 또는 거짓인지 결과에 따라서 2중 분기
SELECT IF(100>200, '참이다', '거짓이다');
▷ IFNULL(수식1, 수식2)
▶ 수식1이 NULL이 아니면 수식1이 반환되고 수식1이 NULL이면 수식 2가 반환
-- ifnull(수식1,수식2) -- 수식1 null이라면 수식2 반환 -- 수식1 null이 아니라면 수식1 반환 select ifnull(null, '널이군요'), ifnull(100, '널이군요');
▷ NULLIF(수식1, 수식2)
▶ 수식1과 수식2가 같으면 NULL을 반환, 다르면 수식1을 반환
-- nullif(수식1, 수식2) 수식1과 수식2가 같으면 null, 다르면 수식1을 반환 select nullif(100, 200), nullif(100, 100);
▷ CASE ~ WHEN ~ ELSE ~ END
▶ CASE는 내장 함수는 아니며 연산자(Operator)로 분류
▶ 다중 분기에 사용되므로 내장함수와 함께 알아두자
-- case ~ when ~ else ~ end : 다중 분기 select case 10 when 1 then '일' when 5 then '오' when 10 then '십' else '모름' end as 'case연습';
▶ CASE 뒤의 값이 10이므로 세 번째 WHEN이 수행되어 '십' 반환
▶ 만약, 해당하는 사항이 없다면 ELSE 부분이 반환
◎ 문자열 함수 1
▷ 문자열 조작, 활용도높음
1. ASCII(아스키 코드) : 문자의 아스키 코드 값 반환
2. CHAR(숫자) : 숫자의 아스키 코드 값에 해당하는 문자 반환
3. BIT_LENGTH(문자열), CHAR_LENGTH(문자열), LENGTH(문자열)
▷ 할당된 Bit 크기 또는 문자 크기 반환
▷ CHAR_LENGTH()는 문자의 개수 반환
▷ LENGTH()는 할당된 Byte 수 반환
4. CONCAT(문자열1, 문자열2,...), CONCAT_WS(구분자, 문자열1, 문자열2,...)
▷ CONCAT() : 문자열을 이어줌
▷ CONCAT_WS() : 구분자와 함께 문자열을 이어주는 역할
SELECT CONCAT_WS('/', '2025', '01', '01'); -- 출력 : -- 2025/01/01
5. ELT, FIELD, FIND_IN_SET, INSTR, LOCATE
▷ ELT(위치, 문자열1, 문자열2, ...) : 위치값이 해당하는 문자열을 반환
▷ FIELD(찾을 문자열, 문자열1, 문자열2, ...) : 찾을 문자열이 있는 문자열의 위치 값을 반환
▷ FIND_IN_SET(찾을 문자열, 문자열 리스트) : 찾을 문자열이 있는 문자열리스트의 위치 값을 반환
▶ 문자열 리스트는 콤마(,)로 구분되고 공백이 없어야합니다.
▷ INSTR(기준 문자열, 부분 문자열) : 부분 문자열이 기준 문자열의 몇번째 위치하는지 위치 값을 반환
▷ LOCATE(부분 문자열, 기준 문자열) : 부분 문자열이 기준 문자열의 몇번째 위치하는지 위치 값을 반환
▶ INSTR과 LOCATE는 동일하지만 파라미터의 순서가 반대select ELT(2, '하나', '둘', '셋'), FIELD('둘','하나', '둘', '셋'), find_in_set('둘', '하나,둘,셋'), INSTR('하나둘셋', '둘'), LOCATE('둘', '하나둘셋');
6. FORMAT(숫자, 소수점 자리수)
▷ 숫자를 소수점 아래 자릿수까지 표현, 1000단위마다 콤마 표시해줌-- FORMAT (숫자, 소수점자리수) : 1000단위, 콤마(,) 표시되고 소수점자리수만큼 소수점 표시 select format(123456.123456, 4); select format(123456.123456, 2);
◎ 문자열 함수 2 (숫자 이용)
1. FORMAT(숫자, 소수점 자리수)
▷ 숫자를 소수점 아래 자릿수까지 표현, 1000단위마다 콤마 표시해줌
-- FORMAT (숫자, 소수점자리수) : 1000단위, 콤마(,) 표시되고 소수점자리수만큼 소수점 표시 select format(123456.123456, 4); select format(123456.123456, 2);
2. BIN(숫자), HEX(숫자), OCT(숫자)
▷ 2진수, 16진수, 8진수의 값을 반환
-- BIN(숫자) : 숫자 10진수 -> 2진수 -- HEX(숫자) : 숫자 10진수 -> 16진수 4bit -- OCT(숫자) : 숫자 10진수 -> 8진수 3bit select bin(31), hex(31), oct(31);
◎ 문자열 함수 3
1. INSERT(기준 문자열, 위치, 길이, 삽입할 문자열)
▷ 기준 문자열의 위치부터 길이만큼 지우고 삽입할 문자열 끼워 넣음
-- INSERT(기준문자열, 위치, 길이(만큼 삭제), 삽입할 문자열) select insert('abcdefghi', 3, 4, '@@@@'), INsert('abcdefghi', 3, 2, '@@@@'); -- 'ab@@@@ghi'와 'ab@@@@efghi' 반환
2. LEFT(문자열, 길이), RIGHT(문자열, 길이)
▷ 왼쪽 또는 오른쪽에서 문자열의 길이만큼 반환
-- LEFT(문자열, 길이) : 문자열 왼쪽에서 길이만큼 문자반환 -- RIGHT(문자열, 길이) : 문자열 오른쪽에서 길이만큼 문자반환 select LEFT('abcdefghi', 3), RIGHT('abcdefghi', 3); -- 'abc'와 'ghi' 반환
3. UPPER(문자열), LOWER(문자열)
▷ 소문자를 대문자로, 대문자를 소문자로 변경-- UPPER(문자열) : 문자열을 대문자로 반환 -- LOWER(문자열) : 문자열을 소문자로 반환 select LOWER('abcdEFGH'), UPPER('abcdEFGH'); -- 'abcdefgh'와 'ABCDEFGH' 반환
4. LPAD(문자열, 길이, 채울 문자열), RPAD(문자열, 길이, 채울 문자열)
▷ 문자을 길이만큼 늘린 후에 빈 곳을 채울 문자열로 채웁니다.-- LPAD(문자열, 길이, 채울문자열) : 문자열을 길이 만큼 전체 크기를 지정해서 빈공간을 채울 문자열로 채운다(왼쪽부터) -- RPAD(문자열, 길이, 채울문자열) : 문자열을 길이 만큼 전체 크기를 지정해서 빈공간을 채울 문자열로 채운다(오른쪽부터) select LPAD('이것이', 5, '##'), RPAD('이것이', 5, '##'); -- '##이것이'와 '이것이##' 반환
5. LTRIM(문자열), RTRIM(문자열)
▷ 문자열의 왼쪽/오른쪽 공백을 제거
-- LTRIM(문자열) : 공백 제거(왼쪽 공백) -- RTRIM(문자열) : 공백 제거(오른쪽 공백) select ltrim(' 이것이'), rtrim('이것이 '); -- '이것이'와 '이것이' 반환
6. TRIM(문자열), TRIM(방향 자를_문자열 FROM 문자열)
▷ TRIM(문자열)은 문자열의 앞뒤 공백을 모두 없앰
▷ TRIM(방향 자를_문자열 FROM 문자열)에서 방향은 LEADING(앞), BOTH(양쪽), TRAILING(뒤)로 표시-- TRIM(문자열) : 공백 제거 : 왼쪽, 오른쪽에 공백을 제거 -- TRIM(방향 자를_문자열 FROM 문자열) : BOTH(양쪽), LEADING(앞), TRAILING(뒤) select trim(' 이것이 '), trim(both 'ㅋ' from 'ㅋㅋㅋ재밌어요.ㅋㅋㅋ'); -- '이것이'와 '재밌어요' 반환
◎ 문자열 함수 4
1. REPEAT(문자열, 횟수)
▷ 문자열을 횟수만큼 반복
-- REPEAT(문자열, 횟수) : 문자열을 횟수만큼 반복 출력 select repeat('이것이', 3); -- '이것이이것이이것이' 반환
2. REPLACE(문자열, 원래 문자열, 바꿀 문자열)
▷ 문자열에서 원래 문자열을 찾아서 바꿀 문자열로 바꿈
-- REPLACE(문자열, 원래 문자열, 바꿀 문자열) : 치환 문자열에서 원래 문자열을 찾아 바꿀 문자열로 변환 select replace('이것이 MySQL이다', '이것이', 'This is'); -- 'This is MySQL이다' 반환
3. REVERSE(문자열)
▷ 문자열의 순서를 거꾸로 바꿈
-- REVERSE(문자열) : 문자열을 거꾸로 출력 select reverse('MySQL'); -- 'LQSyM' 반환
4. SPACE(길이)
▷ 길이만큼의 공백을 반환
-- SPACE(길이) : 공백을 원하는 길이만큼 추가 select concat('이것이', space(10), 'MySQL이다'); -- '이것이 MySQL이다' 반환
5. SUBSTRING(문자열, 시작위치, 길이) 또는 SUBSTRING(문자열 FROM 시작위치 FOR 길이)
▷ 시작위치부터 길이만큼 문자를 반환, 길이가 생략되면 문자열의 끝까지 반환
-- SUBSTRING(문자열, 시작위치, 길이) : 문자열에서 원하는 문자를 추출 -- SUBSTRING(문자열 FROM 시작위치 FOR 길이) -- 주민번호 상의 성별 구분 : 7번째 숫자 -- SUBSTRING(), SUBSTR(), MID() 동일한 문자 추출 함수 select substring('대한민국만세', 3, 2); -- '민국' 반환
6. SUBSTRING_INDEX(문자열, 구분자, 횟수)
▷ 문자열에서 구분자가 왼쪽부터 횟수 번째까지 나오면 그 이후의 오른쪽은 버림
▷ 횟수가 음수면 오른쪽부터 세고 왼쪽을 버림
-- SUBSTRING_INDEX(문자열, 구분자, 횟수) : -- 횟수가 양수이면 구분자 오른쪽을 버린다. select substring_index('cafe.naver.com', '.', 2); -- 'cafe.naver' 반환 -- 횟수가 음수이면 구분자 왼쪽을 버린다. select substring_index('cafe.naver.com', '.', -2); -- 'naver.com' 반환
SQL의 ifnull, nullif, case, 문자열 함수 등을 공부해보았습니다!!
ifnull, nullif는 자바의 if문, case는 switch문과 비슷하네요!
다른 구문들에 대해서도 정리해 보겠습니다!!
많은 분들의 피드백은 언제나 환영합니다! 많은 댓글 부탁드려요~~