CodeGym /행동 /SQL SELF /제어문 소개: IF, CASE, RETURN

제어문 소개: IF, CASE, RETURN

SQL SELF
레벨 51 , 레슨 0
사용 가능

제어문은 모든 프로그램의 기본이야. SQL 스크립트든, Python 코드든, 아니면 화성에서 집에 신호를 보낼지, 크레이터 뒤에서 생명체를 찾을지 고민하는 로봇이든 다 마찬가지지.

PL/pgSQL에서 제어문은 우리한테 이런 걸 도와줘:

  • 조건이 맞으면 특정 동작을 실행할 수 있어.
  • 코드 실행 순서를 제어할 수 있어.
  • 의사결정 로직을 구현할 수 있어.

이걸 도로의 신호등이라고 생각해봐: "STOP 표지판이 보이면 멈춰. 초록불이면 가는 거지!"

PL/pgSQL에서 제일 많이 쓰는 제어문은:

  • IF – 조건을 체크해서 맞으면 해당 코드를 실행해.
  • CASE – 조건이 여러 개일 때 IF 대신 쓰면 좋아.
  • RETURN – 함수 실행을 끝내고 결과를 반환해.

이미 이런 거 본 적 있을 거야. 다른 프로그래밍 언어 해봤으면 금방 익힐 수 있어.

조건문 IF

IF는 어떤 조건이 TRUE일 때만 코드를 실행할 때 써. 기본 구조는 이래:

IF 조건 THEN
  -- 조건이 참이면 실행되는 코드
ELSE
  -- 조건이 거짓이면 실행되는 코드
END IF;

숫자를 받아서 짝수인지 홀수인지 알려주는 함수를 만들어보자:

CREATE OR REPLACE FUNCTION check_even_odd(num INTEGER)
RETURNS TEXT AS $$
BEGIN
  IF num % 2 = 0 THEN
    RETURN '숫자가 짝수야';
  ELSE
    RETURN '숫자가 홀수야';
  END IF;
END;
$$ LANGUAGE plpgsql;

이제 테스트해보자:

SELECT check_even_odd(4); -- 숫자가 짝수야
SELECT check_even_odd(7); -- 숫자가 홀수야

간단 설명: IF num % 2 = 0 THEN은 숫자가 2로 나누어떨어지는지 확인하는 거야.

ELSIF 조건

가끔 한 번만 체크하는 걸로는 부족할 때가 있어. 여러 조건을 체크하려면 ELSIF를 쓰면 돼.

예를 들어, 온도에 따라 텍스트 메시지를 반환하는 함수를 만들어보자:

CREATE OR REPLACE FUNCTION temperature_comment(temp INTEGER)
RETURNS TEXT AS $$
BEGIN
  IF temp < 0 THEN
    RETURN '엄청 추워!';
  ELSIF temp >= 0 AND temp <= 20 THEN
    RETURN '쌀쌀해';
  ELSE
    RETURN '따뜻해!';
  END IF;
END;
$$ LANGUAGE plpgsql;

테스트:

SELECT temperature_comment(-5);  -- 엄청 추워!
SELECT temperature_comment(15);  -- 쌀쌀해
SELECT temperature_comment(25);  -- 따뜻해!

CASE 문법

조건이 많아지면 CASE가 진짜 편해. IF랑 비슷하지만 좀 더 "깔끔"하지.

CASE
  WHEN 조건_1 THEN 값_1
  WHEN 조건_2 THEN 값_2
  ELSE 기본값
END;

숫자 점수에 따라 텍스트 평가를 반환하는 함수를 만들어보자:

CREATE OR REPLACE FUNCTION grade_comment(score INTEGER)
RETURNS TEXT AS $$
BEGIN
  RETURN CASE
    WHEN score >= 90 THEN '최고야'
    WHEN score >= 75 THEN '좋아'
    WHEN score >= 50 THEN '괜찮아'
    ELSE '별로야'
  END;
END;
$$ LANGUAGE plpgsql;

테스트:

SELECT grade_comment(95); -- 최고야
SELECT grade_comment(80); -- 좋아
SELECT grade_comment(45); -- 별로야

참고: IF와 달리 CASE는 값을 반환하니까 RETURNCASE 안에서 바로 쓸 수 있어.

RETURN

RETURN은 함수 실행을 끝내고 값을 반환해. PL/pgSQL에서 함수는 뭔가를 꼭 반환해야 해 (예: 텍스트, 숫자 등).

아주 간단한 예제로 RETURN이 어떻게 동작하는지 보자:

CREATE OR REPLACE FUNCTION return_example()
RETURNS TEXT AS $$
BEGIN
  RETURN 'Hello, World!';
END;
$$ LANGUAGE plpgsql;

결과:

SELECT return_example(); -- Hello, World!

근데 코드 분기가 여러 개면 어떡하지? 예를 들어, 입력값을 체크할 때 RETURN을 여러 군데서 쓸 수 있어:

CREATE OR REPLACE FUNCTION check_positive_negative(num INTEGER)
RETURNS TEXT AS $$
BEGIN
  IF num > 0 THEN
    RETURN '양수야';
  ELSIF num = 0 THEN
    RETURN '영이야';
  ELSE
    RETURN '음수야';
  END IF;
END;
$$ LANGUAGE plpgsql;

테스트:

SELECT check_positive_negative(10); -- 양수야
SELECT check_positive_negative(0);  -- 영이야
SELECT check_positive_negative(-5); -- 음수야

자주 하는 실수랑 헷갈릴 수 있는 부분

  1. END 빼먹기: END CASE;END IF;를 까먹으면 PostgreSQL이 바로 코드 블록을 끝내라고 알려줄 거야.
  2. ELSIF 쓸 때 논리 실수: 조건 순서가 중요해! 더 넓은 조건(temp > 0)이 더 구체적인 조건(temp > 20)보다 먼저 오면 안 돼.
  3. RETURN 빼먹기: PL/pgSQL 함수에서 RETURNS를 선언했으면 꼭 뭔가 반환해야 해.

여기까지야. PL/pgSQL에서 제어문과 로직의 기본을 알아봤어. 이거 알면 더 복잡한 함수 만들 때 진짜 유용할 거야! 다음엔 반복문(루프)이랑 그 사용법을 배워볼 거야.

코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION