[목차]
01. SELECT ~ INTO
💡
OUT 매개변수 사용 시, 출력 매개 변수에 값을 대입하기 위해서 사용
MySQL에서 사용자가 정의한 변수에 SELECT에서 조회할 열에 값을 대입하기 위해 사용하며, 주로 프로시저에서 사용한다.
구문
BEGIN DECLARE num1 INT; SELECT -- 테스트 테이블에서 조회할 member_age을 위에서 선언한 num1이라는 변수에 대입 member_age INTO num1 FROM tb_test; END
예시
goods table 평균가격 → ROUND(AVG(g.g_price), 0)
-- 기존 프로시저가 존재하면 삭제 DROP PROCEDURE IF EXISTS sp_aver_price; DELIMITER $$ CREATE PROCEDURE sp_aver_price(OUT averPrice INT) -- OUT 출력 매개 변수 BEGIN SELECT -- 평균 가격 계산 후, averPrice에 담는다. ROUND(AVG(g.g_price), 0) INTO averPrice FROM tb_goods AS g; END $$ DELIMITER ; -- 변수 @val을 선언하고, sp_aver_price 프로시저를 호출한다. -- 호출 결과가 @val에 저장된다. CALL sp_aver_price(@val); -- @val의 값을 출력 SELECT @val;
02. CASE ~ END
💡
IF문은 참 또는 거짓만 존재하는데, 이를 이중 분기라고 부른다.
CASE문은 여러 조건을 비교할 수 있다.
그래서 다중 분기라는 용어를 사용한다.
예시
구매자별 주문 금액에 따라 회원 등급을 분류하고,
구매자 아이디, 구매자 이름, 총 주문 금액, 해당 구매자의 등급을 조회하시오. (총 주문 금액은 내림차순으로 정렬)
SELECT o.o_id AS '구매자아이디', m.m_name AS '구매자이름', SUM(g.g_price * o.o_amount) AS 'total', -- 여러 조건 비교 (CASE WHEN (SUM(g.g_price * o.o_amount) >= 3000000) THEN 'VIP' WHEN (SUM(g.g_price * o.o_amount) >= 2000000) THEN 'Diamond' WHEN (SUM(g.g_price * o.o_amount) >= 1000000) THEN 'Gold' WHEN (SUM(g.g_price * o.o_amount) >= 800000) THEN 'Silver' ELSE '일반 회원입니다.' END) AS '구매자 등급' FROM -- 3개의 테이블을 조인해서 사용 tb_member AS m INNER JOIN tb_order AS o ON m.m_id = o.o_id INNER JOIN tb_goods AS g ON o.o_g_code = g.g_code -- 구매자별 그룹 GROUP BY o.o_id -- 내림차순 정렬 ORDER BY total DESC;
회원의 아이디를 입력 받아 레벨을 조회하는 프로시저
DELIMITER $$ CREATE PROCEDURE proc_grade_case(IN memId VARCHAR(50)) BEGIN DECLARE memLv INT DEFAULT 0; SELECT m.m_level INTO memLv FROM tb_member AS m WHERE m.m_id = memId; CASE WHEN(memLv = 1) THEN SELECT '관리자' AS '권한'; WHEN(memLv = 2) THEN SELECT '판매자' AS '권한'; WHEN(memLv = 3) THEN SELECT '구매자' AS '권한'; ELSE SELECT '회원' AS '권한'; END CASE; END $$ DELIMITER ; -- 프로시저 호출 CALL proc_grade_case('id005');
03. WHILE
💡
여러번 반복하는 WHILE문
WHILE문은 해당 조건식이 참일 경우 반복.
구문
👉🏻WHILE(조건식) DO~~SQL문
END WHILE;
예시
1 ~ 100까지 숫자를 더하는 WHILE문
DROP PROCEDURE IF EXISTS proc_while_test; DELIMITER $$ CREATE PROCEDURE proc_while_test() BEGIN DECLARE num INT; -- 1 ~ 100까지 증가할 변수 DECLARE hap INT; -- 값을 누적할 변수 -- 초깃값 셋팅 SET num := 1; SET hap := 0; WHILE(num <= 100) DO SET hap := hap + num; SET num := num + 1; END WHILE; SELECT hap; END $$ DELIMITER ; CALL proc_while_test();
tag : #데이터베이스 #DB #SELECT INTO #CASE #WHILE
Uploaded by N2T