흰 스타렉스에서 내가 내리지

SQL 프로그래밍 - IF, CASE, WHILE 본문

SQL

SQL 프로그래밍 - IF, CASE, WHILE

주씨. 2022. 8. 3. 22:37
728x90

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 문의 활용

 

데뷔일이 5년이 지났을 때와 지나지 않았을 때

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 레이블을 빠져 나간다.