본문 바로가기
DataBase/MySQL

[MySQL] CASE 문법 사용 하기

by 선인장 🌵 2022. 3. 12.
728x90
728x90

CASE 문법 사용 하기

MySQL을 사용하다 보면 Query(쿼리) 구문에서 Switch(스위치) 문 혹은 IF문과 같이 조건문을 사용하여 결과값을 내야 하는 경우가 있다.

물론 이런 거 없이 Query 하여 나온 결과를 가져와 Code(코드)상에서 처리할 수 도 있으나 그것보다는 Query로 나온 결과값을 바로 사용하는 편이 훨씬 간결하고 가독성도 좋다.(물론 이해하기에도 더 쉽다)

MySQL에서는 CASE라는 Function(함수)을 제공하고 있으며, 해당 Function은 "MySQL 4.0 이상"부터 사용이 가능하다.

CASE 문은 조건을 통과하고 첫 번째 조건이 충족되면 값을 반환한다.

조건에 따라 True(참)이면 읽기를 중지하고 결과를 반환하고, 조건이 True(참)가 아니면 ELSE 절의 값을 반환한다.

ELSE 부분이 없고 조건이 참이 아니면 NULL을 반환합니다.

그럼 아래 예제를 통해서 사용하는 방법을 알아보도록 하자.

[MySQL] CASE 문법 사용 하기

1. CASE문 사용 방법

  • WHEN - THEN은 항상 같이 사용 되어야 한다.
  • WHEN - THEN은 여러개 사용이 가능하다.
  • ELSE가 존재하면 모든 WHEN - THEN 조건이 TRUE(참)이 아닌 경우 ELSE의 결과값을 반환한다.
  • ELSE가 없고, 조건이 TRUE(참)이 아니면 NULL을 반환한다.
# CASE문 사용 방법

CASE
	WHEN 조건1 THEN 결과값1
	WHEN 조건2 THEN 결과값2
	WHEN 조건N THEN 결과값N
	ELSE 결과값
END
728x90

2. 예제(Example)

그럼 예제(Example)을 통해서 실행해보도록 하자.

먼저 테스트 테이블을 생성(Test Create table) 및 테스트 데이터를 넣어(Test Data Insert) 보자.

# CREATE 문
CREATE TABLE `test` (
  `id` int(1) unsigned NOT NULL,
  `number` int(1) unsigned NOT NULL,
  `kind` varchar(200) NOT NULL,
  PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;

# INSERT 문
INSERT INTO `test` (`id`, `number`, `kind`) VALUES
  ('1', '1', 'Apple'),
  ('2', '1', 'Pear'),
  ('3', '2', 'carrot'),
  ('4', '3', 'cat'),
  ('5', '3', 'dog'),
  ('6', '4', 'human');
728x90

테이블을 준비 했으면 Query를 작성해보도록 하자.

# CASE Query

SELECT 
	id AS id,
	(
    	CASE
	  WHEN number = 1 THEN 'fruit'
	  WHEN number = 2 THEN 'vegetable'
	  WHEN number = 3 THEN 'animal'
	  ELSE 'not'
    	END
	) AS type,
	kind AS type_desc
FROM
	test;
  


[OUTPUT]
---------------------------------
id	type		type_desc
---------------------------------
1	fruit		Apple
2	fruit		Pear
3	vegetable	carrot
4	animal		cat
5	animal		dog
6	not		human

이처럼 CASE문을 통해서 Query상에서 원하는 결과값으로 변경하여 사용할 수 있다.

위 Query의 대한 테스트 내용도 아래와 같이 남겨 놓았다. 같이 참고하면 더 쉽게 이해할 수 있을 것이다.

SQL Fiddle | A tool for easy online testing and sharing of database problems and their solutions.

Query Panel Use this panel to try to solve the problem with other SQL statements (SELECTs, etc...). Results will be displayed below. Share your queries by copying and pasting the URL that is generated after each run.

sqlfiddle.com

728x90
728x90


🌵댓글

 

loading