조건 만들기 IF
IF(조건식, 참일때 값, 거짓일때 값) 형식 사용
주로 SELECT 절에서 사용하는 함수로 결과 값을 새로운 함수로 반환
1. 예제문제
SELECT name, IF(attack>=60, 'strong', 'week') AS attack_class
FROM pokemon.mypokemon;
IF NULL
*IS NULL : 데이터가 NULL인지 아닌지 확인하는 연산자
데이터가 NULL인지 아닌지 확인하여 NULL이라면 새로운 값을 반환하는 함수
IFNULL([컬럼이름], NULL일때 값) 형식 사용
해당 컬럼의 값이 NULL인 로우에서 NULL일때 값을 반환
주로 SELECT절에서 사용하는 함수로 결과 값을 새로운 컬럼으로 반환
1. 예제
SELECT name, IFNULL(name, 'unkown') AS full_name
FROM pokemon.mypokemon;
[패스트캠퍼스] SQL 강의 : 원하는 데이터 그룹하고 통계하기, 그룹함수
조건을 여러개 만들 때 CASE
조건을 여러개 만들 때 사용하는 함수
주로 SELECT 절에서 사용하고 결과 값을 새로운 컬럼으로 반환
ELSE 생략시, NULL값을 반환
1. CASE 사용형식
CASE
WHEN 조건식1 THEN 결과값1
WHEN 조건식2 THEN 결과값2
ELSE 결과값3
END
2. CASE 사용형식
CASE [컬럼이름]
WHEN 조건값1 THEN 결과값1
WHEN 조건값2 THEN 결과값2
ELSE 결과값3
END
3. 예제
SELECT name,
CASE
WHEN attack>=100 THEN 'very strong'
WHEN attack>=60 THEN 'strong'
ELSE 'week'
END AS attack_class
FROM pokemon.mypokemon;
4. 예제
SELECT name, type
CASE type
WHEN 'bug' THEN 'grass'
WHEN 'electric' THEN 'water'
WHEN 'glass' THEN 'bug'
END AS rival_type
FROM pokemon.mypokemon;
함수만들기 CREATE FUNCTION
1. 함수만드는 쿼리
CREATE FUNCTION [함수이름] ([입력값 이름], [데이터타입], ...)
RETURNS [결과값 데이터 타입]
BEGIN
DECLARE [임시값 이름[ [데이터 타입];
SET [임시값 이름] = [입력값 이름];
쿼리;
RETURN 결과값
END
2. 함수지우는 쿼리
DROP FUNCTION [함수이름];
3. 함수 만들기 예시 : 공격력과 방어력의 합을 가져오는 함수
*MySQL 워크벤치에서 함수 생성시 주의할 점
<예제쿼리>
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);
/*공격력과 방어력의 합이 120보다 크면 ‘very strong’, 90보다 크면 ‘strong’,
모두 해당 되지 않으면 ‘not strong’를 반환하는 함수 ‘isStrong’을 만들고 사용해주세요.
조건1: attack과 defense를 입력값으로 사용하세요.
조건2: 결과값 데이터 타입은 VARCHAR(20)로 해주세요*/
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 ; --꼭 한칸을 띄어주어야한다!!
'SQL' 카테고리의 다른 글
[패스트캠퍼스] SQL 강의 : 테이블 집합 연산(여러 테이블 한번에 다루기) (0) | 2022.12.27 |
---|---|
[패스트캠퍼스] SQL 강의 : 테이블 합치기, JOIN 함수 (2) | 2022.12.27 |
[패스트캠퍼스] SQL 강의 : 원하는 데이터 그룹하고 통계하기, 그룹함수 (0) | 2022.12.23 |
[패스트캠퍼스] SQL 강의 : 원하는 데이터 가져오기 (0) | 2022.12.20 |
[패스트캠퍼스] SQL 강의 : 조건에 맞는 데이터 가져오기(WHERE) (0) | 2022.12.17 |