IF

IF?

  • IF(조건식, 참일 때 값, 거짓일 때 값) 형식으로 사용합니다.
  • 주로 SELECT 절에 사용하는 함수로, 결과 값을 새로운 컬럼으로 반영합니다.

Pasted image 20241104101536.png

결과

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 절에 사용하는 함수로, 결과 값을 새로운 컬럼으로 반환합니다.

Pasted image 20241104101536.png

결과

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	

예제

Pasted image 20241104101536.png

결과

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

Pasted image 20241105104739.png

MySQL Workbench 에서 함수 생성 시 주의 사항
SET GLOBAL log_bin_trust_function_creators=1; // 사용자 계정에 function create 권한 생성

DELIMITER // 함수의 시작 지정
...
DELIMITER // 함수의 끝 지정

#SQL