본문 바로가기
Be Smart/SQL

PostgreSQL 튜토리얼 , IF 조건문

by 반월하 2021. 10. 18.
728x90

PL/pgSQL에서 제공하는 조건문에 대해 살펴보겠습니다. 조건문은 어떤 조건에 대해 실행할 코드를 분리하기 위한 목적으로 사용됩니다.

PL/pgSQL에서 제공하는 조건문은 IF 문과 CASE 문으로 크게 구분할 수 있습니다. 먼저 IF 문에 대해 살펴보겠습니다.

IF 문의 문법은 아래와 같습니다.

IF <조건> THEN
    <참의 실행 코드>
ELSE
    <거짓의 실행 코드>
END IF;

만약 <조건>이 부합되는 거짓(false)이 아닌 참(true)일 경우 <참의 실행 코드>를 실행하고, <조건>이 거짓일 경우<거짓의 실행 코드>를 실행합니다. 조건에 대한 실행 코드는 1줄 이상으로 구성할 수 있습니다.

일단 간단한 코드를 통해 ELSE 구문이 없는 IF문의 예를 살펴보겠습니다.

DO $$
DECLARE
    a integer := 20;
    b integer := 40;
    c integer := 20;
BEGIN
    IF a > b THEN
        RAISE NOTICE 'a가 b보다 더 큽니다.';
    END IF;
    
    IF a < b THEN
        RAISE NOTICE 'a가 b보다 더 작습니다.';
    END IF;
    
    IF a = b THEN
        RAISE NOTICE 'a와 b가 동일합니다.';
    END IF;
    
    IF a >= c THEN
        RAISE NOTICE 'a가 c보다 크거나 같습니다.';
    END IF;
    
    IF a != b THEN
        RAISE NOTICE 'a와 b가 같지 않습니다.;
    END IF;
    
    IF a != b AND a = c THEN
        RAISE NOTICE 'a와 b가 같지 않고 a와 c가 같습니다.';
    END IF;
    
    IF a = b OR a = c THEN
        RAISE NOTICE 'a와 b가 같거나 a와 c가 같습니다.';
    END IF;
    
    IF NOT (a=b OR a=c) THEN
        RAISE NOTICE 'a와 b가 같지 않고 a와 c도 같지 않습니다.';
    END IF;
END $$;

변수 a, b, c 를 각각 20, 40, 20 으로 초기화하고, 각 값에 대해 IF 문을 통해 비교하고 있습니다. 먼저 7번 IF 문은 a가 b보다 크다 라는 조건에 부합하지 않으므로 8번 코드를 실행하지 않습니다. 비교 연산은 크다, 작다, 같거나 크다, 같거나 작다, 같지 않다, 같다 에 대해 각각 >,< >=, <=, !=, = 입니다. 조건에 대해 AND와 OR 그리고 NOT으로 묶어 조합할 수 있습니다.
IF a != b AND a=c THEN 의 IF 문은 a와 b가 같지 않고(AND) a와 c가 같은가라는 조건으로 참이므로 그다음 코드가 실행됩니다.

IF a =b OR a =c THEN RAISE NOTICE 'a와 b가 같거나 a와 c가 같습니다.'의 조건으로는 거짓이기 때문에 밑에 조건문이 실행되지 않습니다.

ELSE 구문까지 포함한 IF 문의 예를 보면 아래와 같습니다.

DO $$
DECLARE
	a integer := 20;
    b integer := 40;
BEGIN
	IF a > b THEN
    	RAISE NOTICE 'a가 b보다 더 큽니다.';
    ELSE
    	RAISE NOTICE 'a가 b보다 더 크지 않습니다.';
    END IF;
END $$;

IF 문에서 a가 b보다 큰 가에 대한 조건이 거짓(false)이므로 ELSE문 다음의 실행 되므로 그 결과는 다음과 같습니다.

IF 문에 대한 마지막 예로 다음 코드를 살펴보겠습니다.

DO $$
DECLARE
	a integer := 20;
    b integer := 40;
BEGIN
	IF a > b THEN
    	RAISE NOTICE 'a가 b보다 더 큽니다.;
    ELSEIF a = b THEN
    	RAISE NOTICE 'a와 b가 같습니다.';
    ELSE
    	RAISE NOTICE 'a와 b가 같지 않고, a가 b보다 더 크지도 않습니다.;
    END IF;
END $$;

ELSEIF 문을 사용하고 있는데요. 만약 첫번째 IF 문에 대한 조건이 거짓이면 다음의 ELSEIF 문의 조건을 검사하게 됩니다.
그런데 이 ELSEIF 문 역시 거짓이라면 다음 ELSEIF 문을 검사하게 되고, 최종적으로 어떠한 조건도 만족하지 않는다면 ELSE 문의 코드가 실행되게 됩니다. 위의 코드의 실행 결과는 아래와 같습니다.

728x90

댓글