IF
IF?
IF(조건식, 참일 때 값, 거짓일 때 값)
형식으로 사용합니다.- 주로 SELECT 절에 사용하는 함수로, 결과 값을 새로운 컬럼으로 반영합니다.
결과
SELECT name, IF(attack >= 60, 'strong', 'week') AS attack_class
FROM pokemon.mypokemon;
! 200
IF NULL
IS NULL?
- 데이터가 NULL 인지 아닌지 확인하는 연산자
- 데이터가 NULL 인지 아닌지를 확인해 NULL 이라면 새로운 값을 반환하는 함수
IFNULL([컬럼이름], NULL일 때 값)
형식으로 사용합니다.- 해당 컬럼의 값이 NULL인 로우에서 NULL 일 때 값을 반환합니다.
- 주로 SELECT 절에 사용하는 함수로, 결과 값을 새로운 컬럼으로 반환합니다.
결과
SELECT name, IFNULL(name, 'unknown') AS full_name
FROM pokemon.mypokemon;
! 200
CASE
특징
형식1
CASE
WHEN 조건식1 THEN 결과값1
WHEN 조건식2 THEN 결과값2
ELSE 결과값3
END
형식2
CASE [컬럼 이름]
WHEN 조건값1 THEN 결과값1
WHEN 조건값2 THEN 결과값2
ELSE 결과값3
END
- 주로 SELECT 절에 사용하는 함수로, 결과 값을 새로운 컬럼으로 반환합니다.
- ELSE 문장을 생략 시 NULL 값을 반환합니다.
예제
결과
SELECT name,
CASE
WHEN attack >= 100 THEN 'very strong'
WHEN attack >= 60 THEN 'strong'
ELSE 'week'
END AS attack_class
FROM pokemon.mypokemon;
! 200
결과2
SELECT name, type
CASE type
WHEN 'bug' THEN 'grass'
WHEN 'electric' THEN 'water'
WHEN 'grass' THEN 'bug'
END AS rival_type
FROM pokemon.mypokemon;
함수 생성
문법
CREATE FUNCTION [함수 이름]([입력값 이름][데이터 타입], ...)
RETURNS [결과값 데이터 타입]
BEGIN
DECLARE[임시값 이름][데이터 타입];
SET [임시값 이름] = [입력값 이름];
쿼리;
RETURN 결과값
END
예시 - 공격력과 방어력의 합을 가져오는 함수
SELECT FUNCTION getAbility(attack INT, defense INT)
RETURNS INT
BEGIN
DECLARE a INT;
DECLARE b INT;
DECLARE ability INT;
SET a = attack;
SET b = defense;
SELECT a + b INTO ability;
RETURN ability;
END
MySQL Workbench 에서 함수 생성 시 주의 사항
SET GLOBAL log_bin_trust_function_creators=1; // 사용자 계정에 function create 권한 생성
DELIMITER // 함수의 시작 지정
...
DELIMITER // 함수의 끝 지정