[SQL] Day 6

강기호·2022년 9월 28일
0

MySQL

목록 보기
4/5
post-custom-banner

IF

  • 주로 SELECT절에 사용하는 함수로, IF(조건식 , 참일때 값 , 거짓일 때 값) 형식으로 사용

IF NULL

  • 데이터가 NULL인지 아닌지를 확인해 NULL이라면 새로운 값을 반환하는 함수(IS NULL과 유사)
SELECT name IF NULL(name , 'unknown') AS full_name
FROM mypokemon;

CASE

  • 조건을 여러개 만들 때 사용하는 쿼리 문법
# 형식 1
CASE 
	WHEN 조건식1 THEN 결과
    WHEN 조건식2 THEN 결과
    ELSE 결과
END

# 형식 2
CASE 컬럼이름
	WHEN 조건값 THEN 결과
    WHEN 조건값 THEN 결과
    ELSE 결과값
END

## 사용 예제 
SELECT name,
CASE 
	WHEN attack >=100 THEN 'strong'
    WHEN attack >= 60 THEN 'normal'
    ELSE 'week'
END AS attack_class
FROM mypokemon;

SELECT name,
CASE type
	WHEN 'bug' THEN 'grass'
    WHEN 'electric' THEN 'water'
    ELSE 'grass' THEN 'bug'
END AS type_class
FROM mypokemon;

CREATE FUNCTION

  • 사용자 정의 함수를 만드는 키워드

    공격력과 방어력을 더하는 함수
  • MySQL workbanch에서 함수 생성 시 주의할 점

  • 함수를 삭제하기 위해서는 DROP FUNCTION 함수명


실습

내용 : 공격력과 방어력의 합이 120보다 크면 ‘very strong’, 90보다 크면 ‘strong’,
모두 해당 되지 않으면 ‘not strong’를 반환하는 함수 ‘isStrong’을 만들고 사용해주세요.
조건1: attack과 defense를 입력값으로 사용하세요.
조건2: 결과값 데이터 타입은 VARCHAR(20)로 해주세요.

DROP DATABASE IF EXISTS pokemon;
CREATE DATABASE pokemon;
USE pokemon;
CREATE TABLE mypokemon (
	number  int,
       name	varchar(20),
       type	varchar(10),
       attack int,
       defense int
);
INSERT INTO mypokemon (number, name, type, attack, defense)
VALUES (10, 'caterpie', 'bug', 30, 35),
	   (25, 'pikachu', 'electric', 55, 40),
	   (26, 'raichu', 'electric', 90, 55),
      	  (125, 'electabuzz', 'electric', 83, 57),
	   (133, 'eevee', 'normal', 55, 50),
         (137, 'porygon', 'normal', 60, 70),
	   (152, 'chikoirita', 'grass', 49, 65),
         (153, 'bayleef', 'grass', 62, 80),
         (172, 'pichu', 'electric', 40, 15),
         (470, 'leafeon', 'grass', 110, 130);
         
SET GLOBAL log_bin_trust_function_creators = 1;

DELIMITER //


CREATE FUNCTION isStrong(attack INT, defense INT)
	RETURNS VARCHAR(20)
BEGIN
	DECLARE a INT;
    DECLARE b INT;
    DECLARE isstrong VARCHAR(20);
    SET a = attack;
    SET b = defense;
    SELECT CASE
			WHEN a + b > 120 THEN 'very strong'
            WHEN a + b > 90 THEN 'strong'
            ELSE 'not strong'
			END INTO isstrong;
	RETURN isstrong;
END

//
DELIMITER ; -- 꼭 한 칸을 띄어주세요!!


SELECT name, isStrong(attack, defense) AS isStrong
FROM mypokemon;



## 함수 사용하지 않고 하는 경우
SELECT name ,
CASE 
	WHEN attack + defense >= 120 THEN 'very strong'
	WHEN attack + defense >= 90 THEN 'strong'
	ELSE 'not strong'
END AS isStrong
FROM mypokemon
post-custom-banner

0개의 댓글