SQL

[MySQL] CASE 구문 익히기 | CASE WHEN ~ 예제

엘라 ELLA 2022. 12. 24. 13:00
728x90
반응형

CASE문의 역할


일반적인 프로그래밍 언어에서의 if 조건문과 같은 역할을 한다.  CASE 뒤에 조건값 WHEN 뒤에 반환값을 적어주면 조건에 따라 원하는 값을 볼 수있다.

 

 

CASE문의 사용법(기본 문법)


CASE
WHEN 조건
THEN ‘반환 값’
WHEN 조건
THEN ‘반환 값’
ELSE ‘WHEN 조건에 해당 안되는 경우 반환 값’
END

 

 

CASE문 사용 예제


예제로 사용한 TABLE 'item' 과 내용

SELECT * FROM item;
id name gender price description registration_date
1 남녀 공용 오버핏 반팔 라운드 티셔츠 u 22000 캐쥬얼한 무드를 연출할 수 있는 오버핏 반팔 티셔츠입니다, 깔끔한 라운드넥 디자인이라 데일리룩으로 꾸준히 입을 수 있어요! 2018-03-21
2 남성용 밴딩 린넨 와이드 팬츠 m 33000 매 시즌 사랑받았던, 여름에 꼭 필요한 핫한 밴딩 와이드 팬츠입니다. 베이직한 디자인과 컬러로 누구나 부담없이 이쁘게 입을 수 있습니다 2019-08-11
3 남성용 순면 러닝 m 9000 속옷 전문기업의 봉제 기술로 세탁 후에도 깔끔하게 유지됩니다. 봉제선이 최소화되어 편안한 착용감이 있습니다. 2018-04-15
4 무지 7부 반팔 티셔츠 u 13000 유니크한 디테일과 편안한 핏을 위해 최적의 소재를 사용해 만든 젊은 컨셉의 티셔츠입니다. 건강한 식물성 소재로 피부에 닿는 감촉이 부드럽습니다. 2019-05-14
5 브루너 반팔 티셔츠 m 20000 뉴욕 스트릿의 감성이 살아나는 패턴이 있는 티셔츠입니다. 나만의 개성을 티셔츠로 드러내보세요. 2019-05-14
6 남성용 스판 베이직 워싱 청바지 m 27000 고퀄리티 상품, 쫀쫀한 스판데님으로 편안한 착용감을 느낄 수 있습니다, 한 두번 롤업해서 입어보는 것도 좋아요~! 2019-05-14
7 남성용 슬렌더 데님 m 50000 텐션 좋은 원단으로 만든 한정판 청바지, 베이스 워싱으로 은은한 슬림핏을 선사하는 바지입니다. 팬츠 밑단의 엣지 스타일로 트렌디한 디자인을 보실 수 있습니다. 2019-06-21
8 프린팅 오버핏 맨투맨 u 35000 레터링 프린팅으로 포인트를 준 오버핏 캐주얼 맨투맨입니다. 심플한 디자인이 다른 아이템과 잘 매치될 수 있게 해줍니다. 유행을 타지 않아 매년 입을 수 있는 아이템~! 2019-07-12
9 냉감 반팔 티셔츠 u 15000 아무리 땀흘려도 냄새나지 않는 티셔츠, 운동할 때 뭐입을지 고민하신 분들 많죠? 이 티셔츠 몇 장 사셔서 그런 고민 모두 날려버리세요. 2019-08-17
10 베어 프린팅 맨투맨 티셔츠 m 52000 가을에 입으면 좋은 큐티한 상품, 평상복으로도 입을 수 있고, 데이트할 때도 입을 수 있어요! 귀여운 베어의 감성을 입어보세요. 2019-07-12
11 남성용 캐주얼 긴팔 남방 m 37000 면 혼방 소재로 부드럽가 편안한 촉감을 느낄 수 있습니다. 트렌디함과 단정함을 모두 느낄 수 있습니다. 2019-05-14
12 남성용 오버핏 체크셔츠 m 45000 늦가을부터 겨울까지 챙기면 좋을 베이직한 아이템, 톤 다운된 컬러로 세련된 캐주얼룩을 완성해봅시다. 2019-06-12
13 남성용 스트라이프 셔츠 m 23000 가끔 특별한 느낌을 주고 싶은 날에는? 스트라이프 디자인으로 주목받는 사람이 되어보세요. 세련미를 풍기는 사람이 되어봅시다. 2019-07-12
14 뉴밸루 후드집업 u 43000 두툼한 느낌으로 나를 안아주는 후드집업, 집 근처에서도 센스있는 패션을 유지하고 싶다면 뉴밸루 후드집업입니다. 디자인과 실용성 모두 놓치고 싶지 않다면 선택하세요! 2019-03-04
15 자수 반팔 티셔츠 f 52000 여기저기 뛰어다니는 귀여운 고양이 감성, 오늘만큼은 귀여워지고 싶다면? 장인의 손길로 한땀한땀 새겨진 무늬가 있는 자수 반팔 티셔츠를 추천합니다. 2019-07-12
16 무지 티셔츠 f 30000 원단이 주는 맨질맨질한 느낌이 좋습니다. 찰랑거리는 시원한 터치감으로 입지 않은 것처럼 편한 느낌을 줍니다. 누구나 편하게 입을 수 있는 무지 티셔츠~! 2019-04-14
17 밴딩 롤업 배기 팬츠 f 43000 허리 사이즈에 상관없이 편하게 입을 수 있는 밴딩 스타일, 힙하면서도 꾸안꾸 스타일을 줄 수 있는 아이템입니다, 원하는 길이만큼 롤업하고 나가면 당신은 멋쟁이~! 2019-07-12
18 박시 후드티 원피스 티셔츠 f 21000 가볍게 입을 수 있지만 스타일리쉬한 느낌을 주는 원피스 티셔츠, 적당한 두께감으로 다양한 날씨에서 착용 가능합니다. 2019-06-02
19 플라워 벨티드 더블 자켓 f 71000 누구보다도 화려해지고 싶은 날이 한번씩 있죠? 꽃이 온몸을 덮는 패턴으로 나의 존재감을 보여주세요. 라인감을 살려주는 디자인으로 당당함을 UP! 2019-07-03
20 스타일리쉬 루즈 청자켓 f 39000 과감한 프린팅과 찢김 무늬로 나만의 개성을 과시할 수 있습니다. 부담없는 연한 청색으로 은은함도 더했습니다. 아무리 빨아도 색 변화가 없을 거에요~! 2019-07-12
21 여성용 도트 쉬폰 자켓 f 22000 전통적인 게 가장 아름다운 법, 규칙적인 프린팅과 부드러운 촉감을 가진 쉬폰 자켓을 입어보세요. 발랄하고 스타일이 느껴지는 분위기를 연출할 수 있습니다. 2019-05-14
22 체크무늬 그린 롱코트 u 110000 초록색과 검정색의 조화로운 색감으로 도회적인 느낌을 줄 수 있습니다. 오리털 안감으로 부족하지 않은 따뜻함을 느끼게 해줍니다. 2019-09-14
23 라이트 트렌치 코트 f 63000 겉은 솔리드, 안은 체크면 두 가지 스타일로 되어 있습니다. 밑단이 분리되어 있는 패턴으로 착장 시 깔끔한 느낌을 줍니다. 2019-08-19
24 맵시 롱치마 f 40000 허리 밴딩 타입으로 어떤 코디에도 자연스럽게 어울립니다. 몸에 감기는 시원한 재질로 여름에도 편하게 입을 수 있어요. 2019-05-14
25 민들레 롱 스커트 f 25000 화사한 민들레 패턴으로 꾸며진 롱 스커트~! 야외에서 사진 찍을 때 예쁜 샷을 선물해줄 스커트입니다. 약간의 늘어남이 있는 소재라 착용감도 좋습니다. 2019-05-14
26 블레이저 싱글 자켓 u 37000 댄디하고 클래식한 느낌을 주는 남녀 공용 자켓입니다. 심플함만으로 매력을 선사하는 자켓으로 누구나 하나씩 갖고 있어야하는 기본아이템이죠! 2019-03-04
27 여성 린넨 자켓 f 29000 유행 타지 않는 아이템, 린넨 자켓! 여유감 있는 폼과 기장으로 안정감 있는 핏을 연출할 수 있습니다. 간단한 롤업으로 세련미를 줄 수도 있구요. 2019-07-12
28 후드 하프 코트 f 45000 어머님들이 사랑하는 아이템, 세련된 분위기와 편안함을 함께 보여줄 수 있는 코트입니다. 생각보다 두꺼운 안감이 안정적인 보온 효과를 줍니다. 2019-03-04
29 여성용 노카라 자켓 f 67000 평범한 자켓은 가라! 불필요한 카라를 없애고 오로지 실용성과 담백함만을 담은 자켓입니다. 업무 중에 입기에도 적합한 착용감을 제공합니다. 2019-06-12
30 여성용 투포켓 자켓 f 42000 청청 패션의 끝을 장식해주는 아이템, 제대로된 청색 아이템을 찾는 다면 이 아이템을 추천합니다. 2019-07-12

 

가격에 따른 RESULT 값을 분류해서 출력하기


SELECT name,
       CASE
           WHEN price > 10000 and price <= 20000 THEN 'cheap'
           WHEN price > 20000 and price <= 40000 THEN 'fair'
           WHEN price > 40000  THEN 'expensive'
           ELSE 'none'
       END AS RESULT
FROM item;

 

결과


name RESULT
남녀 공용 오버핏 반팔 라운드 티셔츠 fair
남성용 밴딩 린넨 와이드 팬츠 fair
남성용 순면 러닝 none
무지 7부 반팔 티셔츠 cheap
브루너 반팔 티셔츠 cheap
남성용 스판 베이직 워싱 청바지 fair
남성용 슬렌더 데님 expensive
프린팅 오버핏 맨투맨 fair
냉감 반팔 티셔츠 cheap
베어 프린팅 맨투맨 티셔츠 expensive
남성용 캐주얼 긴팔 남방 fair
남성용 오버핏 체크셔츠 expensive
남성용 스트라이프 셔츠 fair
뉴밸루 후드집업 expensive
자수 반팔 티셔츠 expensive
무지 티셔츠 fair
밴딩 롤업 배기 팬츠 expensive
박시 후드티 원피스 티셔츠 fair
플라워 벨티드 더블 자켓 expensive
스타일리쉬 루즈 청자켓 fair
여성용 도트 쉬폰 자켓 fair
체크무늬 그린 롱코트 expensive
라이트 트렌치 코트 expensive
맵시 롱치마 fair
민들레 롱 스커트 fair
블레이저 싱글 자켓 fair
여성 린넨 자켓 fair
후드 하프 코트 expensive
여성용 노카라 자켓 expensive
여성용 투포켓 자켓 expensive

 

위의 결과에서는 값에 따라

1만원 초과, 2만원 이하시에는 cheap을 반환

2만원 초과, 4만원 이하시에는 fair를 반환

4만원 초과시에는 expensive를 반환

조건값에 들지 않는 경우는 none을 반환하도록 되어있습니다.

 

여기서는, 9천원으로 가격이 형성되어있는 '남성용 순면 러닝'이 그 어느 조건에도 포함되지 않기때문에 none으로 결과값이 출력되었습니다. 

 

 

가격도 함께 볼 수있도록 가격을 포함해서 출력하기


SELECT name, price,
       CASE
           WHEN price > 10000 and price <= 20000 THEN 'cheap'
           WHEN price > 20000 and price <= 40000 THEN 'fair'
           WHEN price > 40000  THEN 'expensive'
           ELSE 'none'
       END AS RESULT
FROM item;

 

결과

 


name price RESULT
남녀 공용 오버핏 반팔 라운드 티셔츠 22000 fair
남성용 밴딩 린넨 와이드 팬츠 33000 fair
남성용 순면 러닝 9000 none
무지 7부 반팔 티셔츠 13000 cheap
브루너 반팔 티셔츠 20000 cheap
남성용 스판 베이직 워싱 청바지 27000 fair
남성용 슬렌더 데님 50000 expensive
프린팅 오버핏 맨투맨 35000 fair
냉감 반팔 티셔츠 15000 cheap
베어 프린팅 맨투맨 티셔츠 52000 expensive
남성용 캐주얼 긴팔 남방 37000 fair
남성용 오버핏 체크셔츠 45000 expensive
남성용 스트라이프 셔츠 23000 fair
뉴밸루 후드집업 43000 expensive
자수 반팔 티셔츠 52000 expensive
무지 티셔츠 30000 fair
밴딩 롤업 배기 팬츠 43000 expensive
박시 후드티 원피스 티셔츠 21000 fair
플라워 벨티드 더블 자켓 71000 expensive
스타일리쉬 루즈 청자켓 39000 fair
여성용 도트 쉬폰 자켓 22000 fair
체크무늬 그린 롱코트 110000 expensive
라이트 트렌치 코트 63000 expensive
맵시 롱치마 40000 fair
민들레 롱 스커트 25000 fair
블레이저 싱글 자켓 37000 fair
여성 린넨 자켓 29000 fair
후드 하프 코트 45000 expensive
여성용 노카라 자켓 67000 expensive
여성용 투포켓 자켓 42000 expensive

 

 


 

성별을 CASE구문을 이용해 값 바꿔보기(UPDATE)


UPDATE  item
	   SET gender = 
       CASE
           WHEN gender = 'm' THEN 'man'
           WHEN gender = 'w' THEN 'woman'
       END

결과


 

망했습니다. 중간중간 비어있는 부분도 있습니다. 왜인지를 생각해보니 여성은 'w'가 아닌 원래의 값이 'f' (Female)로 되어있었습니다. 또한, 남녀 공용은 'u'(Unisex)로 되어있었는데 예외 처리 또한 하지 못해서 조건에 없는 값들이 모두 Null값이 되었습니다.

 

id name gender price description registration_date
1 남녀 공용 오버핏 반팔 라운드 티셔츠   22000 캐쥬얼한 무드를 연출할 수 있는 오버핏 반팔 티셔츠입니다, 깔끔한 라운드넥 디자인이라 데일리룩으로 꾸준히 입을 수 있어요! 2018-03-21
2 남성용 밴딩 린넨 와이드 팬츠 man 33000 매 시즌 사랑받았던, 여름에 꼭 필요한 핫한 밴딩 와이드 팬츠입니다. 베이직한 디자인과 컬러로 누구나 부담없이 이쁘게 입을 수 있습니다 2019-08-11
3 남성용 순면 러닝 man 9000 속옷 전문기업의 봉제 기술로 세탁 후에도 깔끔하게 유지됩니다. 봉제선이 최소화되어 편안한 착용감이 있습니다. 2018-04-15
4 무지 7부 반팔 티셔츠   13000 유니크한 디테일과 편안한 핏을 위해 최적의 소재를 사용해 만든 젊은 컨셉의 티셔츠입니다. 건강한 식물성 소재로 피부에 닿는 감촉이 부드럽습니다. 2019-05-14
5 브루너 반팔 티셔츠 man 20000 뉴욕 스트릿의 감성이 살아나는 패턴이 있는 티셔츠입니다. 나만의 개성을 티셔츠로 드러내보세요. 2019-05-14
6 남성용 스판 베이직 워싱 청바지 man 27000 고퀄리티 상품, 쫀쫀한 스판데님으로 편안한 착용감을 느낄 수 있습니다, 한 두번 롤업해서 입어보는 것도 좋아요~! 2019-05-14
7 남성용 슬렌더 데님 man 50000 텐션 좋은 원단으로 만든 한정판 청바지, 베이스 워싱으로 은은한 슬림핏을 선사하는 바지입니다. 팬츠 밑단의 엣지 스타일로 트렌디한 디자인을 보실 수 있습니다. 2019-06-21
8 프린팅 오버핏 맨투맨   35000 레터링 프린팅으로 포인트를 준 오버핏 캐주얼 맨투맨입니다. 심플한 디자인이 다른 아이템과 잘 매치될 수 있게 해줍니다. 유행을 타지 않아 매년 입을 수 있는 아이템~! 2019-07-12
9 냉감 반팔 티셔츠   15000 아무리 땀흘려도 냄새나지 않는 티셔츠, 운동할 때 뭐입을지 고민하신 분들 많죠? 이 티셔츠 몇 장 사셔서 그런 고민 모두 날려버리세요. 2019-08-17
10 베어 프린팅 맨투맨 티셔츠 man 52000 가을에 입으면 좋은 큐티한 상품, 평상복으로도 입을 수 있고, 데이트할 때도 입을 수 있어요! 귀여운 베어의 감성을 입어보세요. 2019-07-12
11 남성용 캐주얼 긴팔 남방 man 37000 면 혼방 소재로 부드럽가 편안한 촉감을 느낄 수 있습니다. 트렌디함과 단정함을 모두 느낄 수 있습니다. 2019-05-14
12 남성용 오버핏 체크셔츠 man 45000 늦가을부터 겨울까지 챙기면 좋을 베이직한 아이템, 톤 다운된 컬러로 세련된 캐주얼룩을 완성해봅시다. 2019-06-12
13 남성용 스트라이프 셔츠 man 23000 가끔 특별한 느낌을 주고 싶은 날에는? 스트라이프 디자인으로 주목받는 사람이 되어보세요. 세련미를 풍기는 사람이 되어봅시다. 2019-07-12
14 뉴밸루 후드집업   43000 두툼한 느낌으로 나를 안아주는 후드집업, 집 근처에서도 센스있는 패션을 유지하고 싶다면 뉴밸루 후드집업입니다. 디자인과 실용성 모두 놓치고 싶지 않다면 선택하세요! 2019-03-04
15 자수 반팔 티셔츠   52000 여기저기 뛰어다니는 귀여운 고양이 감성, 오늘만큼은 귀여워지고 싶다면? 장인의 손길로 한땀한땀 새겨진 무늬가 있는 자수 반팔 티셔츠를 추천합니다. 2019-07-12
16 무지 티셔츠   30000 원단이 주는 맨질맨질한 느낌이 좋습니다. 찰랑거리는 시원한 터치감으로 입지 않은 것처럼 편한 느낌을 줍니다. 누구나 편하게 입을 수 있는 무지 티셔츠~! 2019-04-14
17 밴딩 롤업 배기 팬츠   43000 허리 사이즈에 상관없이 편하게 입을 수 있는 밴딩 스타일, 힙하면서도 꾸안꾸 스타일을 줄 수 있는 아이템입니다, 원하는 길이만큼 롤업하고 나가면 당신은 멋쟁이~! 2019-07-12
18 박시 후드티 원피스 티셔츠   21000 가볍게 입을 수 있지만 스타일리쉬한 느낌을 주는 원피스 티셔츠, 적당한 두께감으로 다양한 날씨에서 착용 가능합니다. 2019-06-02
19 플라워 벨티드 더블 자켓   71000 누구보다도 화려해지고 싶은 날이 한번씩 있죠? 꽃이 온몸을 덮는 패턴으로 나의 존재감을 보여주세요. 라인감을 살려주는 디자인으로 당당함을 UP! 2019-07-03
20 스타일리쉬 루즈 청자켓   39000 과감한 프린팅과 찢김 무늬로 나만의 개성을 과시할 수 있습니다. 부담없는 연한 청색으로 은은함도 더했습니다. 아무리 빨아도 색 변화가 없을 거에요~! 2019-07-12
21 여성용 도트 쉬폰 자켓   22000 전통적인 게 가장 아름다운 법, 규칙적인 프린팅과 부드러운 촉감을 가진 쉬폰 자켓을 입어보세요. 발랄하고 스타일이 느껴지는 분위기를 연출할 수 있습니다. 2019-05-14
22 체크무늬 그린 롱코트   110000 초록색과 검정색의 조화로운 색감으로 도회적인 느낌을 줄 수 있습니다. 오리털 안감으로 부족하지 않은 따뜻함을 느끼게 해줍니다. 2019-09-14
23 라이트 트렌치 코트   63000 겉은 솔리드, 안은 체크면 두 가지 스타일로 되어 있습니다. 밑단이 분리되어 있는 패턴으로 착장 시 깔끔한 느낌을 줍니다. 2019-08-19
24 맵시 롱치마   40000 허리 밴딩 타입으로 어떤 코디에도 자연스럽게 어울립니다. 몸에 감기는 시원한 재질로 여름에도 편하게 입을 수 있어요. 2019-05-14
25 민들레 롱 스커트   25000 화사한 민들레 패턴으로 꾸며진 롱 스커트~! 야외에서 사진 찍을 때 예쁜 샷을 선물해줄 스커트입니다. 약간의 늘어남이 있는 소재라 착용감도 좋습니다. 2019-05-14
26 블레이저 싱글 자켓   37000 댄디하고 클래식한 느낌을 주는 남녀 공용 자켓입니다. 심플함만으로 매력을 선사하는 자켓으로 누구나 하나씩 갖고 있어야하는 기본아이템이죠! 2019-03-04
27 여성 린넨 자켓   29000 유행 타지 않는 아이템, 린넨 자켓! 여유감 있는 폼과 기장으로 안정감 있는 핏을 연출할 수 있습니다. 간단한 롤업으로 세련미를 줄 수도 있구요. 2019-07-12
28 후드 하프 코트   45000 어머님들이 사랑하는 아이템, 세련된 분위기와 편안함을 함께 보여줄 수 있는 코트입니다. 생각보다 두꺼운 안감이 안정적인 보온 효과를 줍니다. 2019-03-04
29 여성용 노카라 자켓   67000 평범한 자켓은 가라! 불필요한 카라를 없애고 오로지 실용성과 담백함만을 담은 자켓입니다. 업무 중에 입기에도 적합한 착용감을 제공합니다. 2019-06-12
30 여성용 투포켓 자켓   42000 청청 패션의 끝을 장식해주는 아이템, 제대로된 청색 아이템을 찾는 다면 이 아이템을 추천합니다. 2019-07-12

 

 

성별을 CASE구문을 이용해 값 바꿔보기(UPDATE) - 2번째 시도


UPDATE  item
	   SET gender = 
       CASE
           WHEN gender = 'm' THEN 'male'
           WHEN gender = 'f' THEN 'female'
           ELSE 'unisex'
       END

 

결과


id name gender price
1 남녀 공용 오버핏 반팔 라운드 티셔츠 male 22000
2 남성용 밴딩 린넨 와이드 팬츠 male 33000
3 남성용 순면 러닝 male 9000
4 무지 7부 반팔 티셔츠 unisex 13000
5 브루너 반팔 티셔츠 male 20000
6 남성용 스판 베이직 워싱 청바지 male 27000
7 남성용 슬렌더 데님 male 50000
8 프린팅 오버핏 맨투맨 unisex 35000
9 냉감 반팔 티셔츠 unisex 15000
10 베어 프린팅 맨투맨 티셔츠 male 52000
11 남성용 캐주얼 긴팔 남방 male 37000
12 남성용 오버핏 체크셔츠 male 45000
13 남성용 스트라이프 셔츠 male 23000
14 뉴밸루 후드집업 unisex 43000
15 자수 반팔 티셔츠 female 52000
16 무지 티셔츠 female 30000
17 밴딩 롤업 배기 팬츠 female 43000
18 박시 후드티 원피스 티셔츠 female 21000
19 플라워 벨티드 더블 자켓 female 71000
20 스타일리쉬 루즈 청자켓 female 39000
21 여성용 도트 쉬폰 자켓 female 22000
22 체크무늬 그린 롱코트 female 110000
23 라이트 트렌치 코트 unisex 63000
24 맵시 롱치마 female 40000
25 민들레 롱 스커트 female 25000
26 블레이저 싱글 자켓 unisex 37000
27 여성 린넨 자켓 female 29000
28 후드 하프 코트 female 45000
29 여성용 노카라 자켓 female 67000
30 여성용 투포켓 자켓 female 42000

 


 

주의사항

  • WHEN다음에는 반드시 THEN을 사용하여 반환값을 지정 해주어야합니다.
  • CASE ( WHEN - THEN ) END에서 WHEN-THEN 구문은 2개 이상 반복해서 사용 할 수있으나, 그 중간에 쉼표(,)를 써주면 안됩니다.
  • ELSE를 이용해 예외값을 처리해주는게 데이터를 다룰 때 중요합니다.
  •   - ELSE에는 반환값만 처리해주면 됩니다. 조건은 입력하지 않습니다.
  • 반드시 END를 사용해서 끝에 마무리를 처리해주어야합니다.
  • SELECT와 함께 사용 할때에는  선택한 컬럼 다음 쉼표(,)를 작성 후 CASE문을 작성하면 됩니다.

 

 


 

 

게시글이 도움이 되었다면

[로그인]이 필요 없는 ❤ 눌러주세요:)

반응형