SQL 프로그래밍 - IF, CASE, WHILE
Stored Procedure
DELIMITER $$
CREATE PROCEDURE 프로시저_이름()
BEGIN
-- 이 부분에 SQL 프로그래밍 코딩
END $$ -- stored procedure 종료
DELIMITER ; -- 종료 문자를 다시 세미콜론으로 변경
CALL 프로시저_이름(); -- stored procedure 실행
DELIMITER $$ :
세미콜론(;)으로는 SQL의 끝인지, stored procedure의 끝인지 구별할 수 없어서 $$를 사용한다.
IF 문
IF <조건식> THEN
...
END IF;
사용 예시
DROP PROCEDURE IF EXISTS ifProc1;
DELIMITER $$
CREATE PROCEDURE ifProc1()
BEGIN
IF (100 = 100) THEN
SELECT * FROM member;
END IF;
END $$
DELIMITER ;
CALL ifProc1();
IF ~ ELSE 문
DROP PROCEDURE IF EXISTS ifProc2;
DELIMITER $$
CREATE PROCEDURE ifProc2()
BEGIN
DECLARE myNum INT; -- 1
SET myNum = 200; -- 2
IF myNum = 100 THEN
SELECT '100입니다.';
ELSE
SELECT '100이 아닙니다.';
END IF;
END $$
DELIMITER ;
CALL ifProc2();
1 : DECLARE 예약어를 사용해서 myNum 변수를 선언한다. 제일 뒤에는 변수의 데이터 형식을 INT로 지정했다.
2 : SET 예약어로 myNum 변수에 200을 대입했다.
IF 문의 활용
191~193 : 변수를 선언한다.
195 : INTO 명령어를 통해 추출한 데이터를 debutDate에 저장한다.
199 : CURRENT_DATE() 내장함수로 현재 날짜를 불러올 수 있다. 이를 curDATE라는 변수에 저장한다.
200 : DATEDIFF() 내장함수로 날짜의 차이를 구한다. 일수로 계산해준다.
CASE 문
다른 프로그래밍 언어의 switch 와 같다.
CASE
WHEN 조건1 THEN
...
WHEN 조건2 THEN
...
WHEN 조건3 THEN
...
ELSE
...
END CASE;
CASE 문의 활용
구매금액에 따른 회원 등급 나누기
WHILE 문
WHILE <조건식> DO
SQL 문장들
END WHILE;
1부터 100까지 더하는 예제
WHILE 문의 응용
* ITERABLE [레이블] : 지정한 레이블로 가서 계속 진행한다.
* LEAVE [레이블] : 지정한 레이블을 빠져나간다. 즉 WHILE 문이 종료된다.
283 : WHILE 문을 myWhile 이라는 레이블로 지정한다.
285~288 : i가 4의 배수라면 i를 1증가시키고 ITERATE를 만나서 283번줄의 레이블로 올라간다. 즉, WHILE 문을 계속 진행한다.
290~292 : hap이 1000을 초과하면 LEAVE를 만나서 myWhile 레이블을 빠져 나간다.