Database

mysql - IF와 CASE

  • -
728x90

예제 데이터

CREATE DATABASE pokemon;

SHOW DATABASES;

USE pokemon;

DROP TABLE mypokemon;
CREATE TABLE pokemon.mypokemon (
	number INT NOT NULL,
	name VARCHAR(1048) NOT NULL,
	height FLOAT NOT NULL,
	weight FLOAT NOT NULL,
	friendship FLOAT,
	type VARCHAR(1024) NOT NULL,
	attack INT,
	defense INT,
	PRIMARY KEY(number)
);

-- INSERT statements for your existing data
INSERT INTO mypokemon (number, name, height, weight, friendship, type, attack, defense) 
	VALUES (10, 'caterpie', 0.3, 2.9, -1.455, 'bug', 30, 35);
INSERT INTO mypokemon (number, name, height, weight, friendship, type, attack, defense) 
	VALUES (25, 'pikachu', 0.4, 6, 124.78, 'electric', 55, 40);
INSERT INTO mypokemon (number, name, height, weight, friendship, type, attack, defense) 
	VALUES (26, 'raichu', 0.8, 30 ,30.289, 'electric', 90, 55);
INSERT INTO mypokemon (number, name, height, weight, friendship, type, attack, defense) 
	VALUES (125, 'electabuzz', 1.1, 30, -10.67, 'electric', 83, 57);
INSERT INTO mypokemon (number, name, height, weight, friendship, type, attack, defense) 
	VALUES (133, 'eevee', 0.3, 6.5, 15.988, 'normal', 55, 50);
INSERT INTO mypokemon (number, name, height, weight, friendship, type, attack, defense) 
	VALUES (137, 'porygo', 0.8 ,36.5, -0.245, 'normal', 60, 70);
INSERT INTO mypokemon (number, name, height, weight, friendship, type, attack, defense) 
	VALUES (152, 'chikorita', 0.9, 6.4, 67.164, 'grass', 49, 65);
INSERT INTO mypokemon (number, name, height, weight, friendship, type, attack, defense) 
	VALUES (153, 'bayleef', 1.2, 15.8 ,9.756, 'grass', 62, 80);
INSERT INTO mypokemon (number, name, height, weight, friendship, type, attack, defense) 
	VALUES (172, 'pichu', 0.3, 2, 872.1, 'electric', 40, 15);
INSERT INTO mypokemon (number, name, height, weight, friendship, type, attack, defense) 
	VALUES (470, 'leafeon', 1, 25.5, 3.42, 'grass', 110, 130);


SELECT * FROM pokemon.mypokemon;

 

IF

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

IF 사용 예제

SELECT name, IF(attack >= 60, 'strong', 'weak') AS attack_class
FROM pokemon.mypokemon;

IFNULL

  • 데이터가 NULL인지 아닌지를 확인해 NULL이라면 새로운 값을 반환하는 함수
  • 주로 SELECT절에서 사용하는 함수로, 결과값을 해로운 칼럼으로 반환한다.

IFNULL  사용 예제

아래 예시는 위 예제 데이터로는 불가능하다 예제 데이터는 name 칼럼이 NOT NULL로 지정이 되어있기 때문이다.

name칼럼의 속성이 NULL이고 데이터에 NULL이 있다는 가정 하에 다음 예제를 생각하면 된다.

SELECT name, IFNULL(name, 'unknown') AS full_name
FROM pokemon.mypokemon;

 

CASE 

마찬가지로 SELECT 절에서 사용하며 IF가 조건을 하나 줄 때 사용한다면 CASE는 조건을 여러 개 줄 때 사용한다.

 

CASE 사용 예제

-- 예제1
SELECT name,
CASE 
	WHEN attack >= 100 THEN 'very strong'
	WHEN attack >= 60 THEN 'strong'
	ELSE 'weak'
END AS attack_class
FROM pokemon.mypokemon;

-- 예제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;

728x90
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.