SQL Server IF…ELSE 조건문: T-SQL SELECT 예제

⚡ 스마트 요약

IF…ELSE는 SQL Server에서 부울 조건이 참으로 평가될 때 하나의 T-SQL 블록을 실행하고, 동일한 조건이 거짓으로 평가될 때 선택적으로 다른 블록을 실행하는 흐름 제어 문입니다.

  • 🧭 조건부 논리: 조건문을 사용하면 SQL Server는 조건이 참인지 거짓인지에 따라 서로 다른 T-SQL 작업을 실행할 수 있습니다.
  • IF 및 ELSE 분기: 부울 조건이 참이면 IF 블록이 실행되고, 거짓이면 선택 사항인 ELSE 블록이 대신 실행됩니다.
  • 🔢 부울 표현식: 조건은 (1=1)과 같이 참 또는 거짓으로 평가되는 부울 표현식이거나 변수 비교여야 합니다.
  • 🧱 시작…끝 블록: 두 개 이상의 명령문을 실행하는 분기는 해당 명령문들을 BEGIN과 END 키워드로 묶어야 합니다.
  • ELSE는 선택 사항입니다. IF 문은 ELSE 부분 없이 단독으로 사용될 수 있으므로, 조건이 거짓이면 아무런 동작도 수행하지 않습니다.
  • 🔁 중첩 조건: SQL Server에는 ELSE IF 키워드가 없으므로 여러 임계값을 테스트하려면 IF…ELSE 문을 중첩해야 합니다.

SQL Server IF…ELSE 조건문과 T-SQL SELECT 쿼리 예제

조건문이 필요한 이유는 무엇입니까?

SQL Server의 조건문은 다양한 조건에 대해 서로 다른 논리와 동작을 정의하는 데 도움이 됩니다. 조건문을 사용하면 문 내에 정의된 조건에 따라 다양한 작업을 수행할 수 있습니다. 실제 생활에서 우리는 다른 활동이나 상황의 결과에 따라 여러 가지 작업을 수행합니다.

조건문의 실시간 예시는 다음과 같습니다.

  • 내일 비가 오면 차를 타고 여행을 갈 계획이에요.
  • 만약 제가 사는 도시에서 유럽까지 가는 항공권 가격이 400달러 미만이라면 유럽으로 휴가를 갈 것이고, 그렇지 않다면 가까운 관광지를 선택할 것입니다.

여기서 볼 수 있듯이, 위의 자동차 여행과 같은 한 가지 행동은 다른 활동의 결과, 즉 "내일 비가 올지 안 올지"에 조건부로 의존합니다. 마찬가지로 MS도 그렇습니다. SQL 서버 또한 T-SQL 문을 조건부로 실행할 수 있는 기능도 제공합니다.

SQL Server의 IF…ELSE 문

MS SQL에서 IF…ELSE는 조건문의 한 유형입니다. 모든 T-SQL 문은 IF…ELSE를 사용하여 조건에 따라 실행할 수 있습니다. 아래 그림은 SQL Server에서 IF 및 ELSE 분기가 작동하는 방식을 설명합니다.

SQL Server IF…ELSE 구문의 흐름도. 참인 IF 분기와 거짓인 ELSE 분기를 보여줍니다.

  • 조건이 참으로 평가되면 SQL Server에서 IF 조건 다음에 오는 T-SQL 문이 실행됩니다.
  • 조건이 거짓으로 평가되면 ELSE 키워드 뒤에 오는 T-SQL 문이 실행됩니다.
  • IF T-SQL 문이나 ELSE T-SQL 문 중 하나가 실행되면 다른 무조건 T-SQL 문은 계속 실행됩니다.

SQL의 IF…ELSE 구문 및 규칙

구문 :

IF <Condition>
     {Statement | Block_of_statement}   
[ ELSE   
     {Statement | Block_of_statement}]

규칙 :

  • 조건은 부울 표현식이어야 합니다. 즉, 조건 평가 결과가 부울 값이어야 합니다.
  • SQL의 IF…ELSE 문은 단일 T-SQL 문 또는 T-SQL 문 블록을 조건부로 처리할 수 있습니다.
  • 문장 블록은 BEGIN 키워드로 시작하고 END 키워드로 끝나야 합니다.
  • BEGIN과 END를 사용하면 SQL Server가 실행해야 하는 문 블록을 식별하고 IF…ELSE T-SQL 블록에 속하지 않는 나머지 T-SQL 문과 구분할 수 있습니다.
  • ELSE는 선택사항입니다.

숫자 값만 포함된 부울 표현식의 IF…ELSE

첫 번째 예시에서 부울 표현식은 숫자 값만 사용합니다. 아래 조건을 살펴보세요. 1은 1과 같으므로 항상 참입니다.

조건: 참

IF (1=1)
PRINT 'IF STATEMENT: CONDITION IS TRUE'
ELSE
PRINT 'ELSE STATEMENT: CONDITION IS FALSE'

조건이 참(1=1)일 때 쿼리를 실행하면 IF 분기 메시지가 출력됩니다.

숫자형 IF 조건문이 참일 경우 IF 문 메시지를 출력하는 결과입니다.

조건: 거짓

IF (1=2)
PRINT 'IF STATEMENT: CONDITION IS TRUE'
ELSE
PRINT 'ELSE STATEMENT: CONDITION IS FALSE'

조건이 거짓(1=2)인 경우, ELSE 분기가 대신 실행됩니다.

숫자 IF 조건이 거짓일 경우 ELSE STATEMENT 메시지가 출력됩니다.

'라는 이름의 테이블이 있다고 가정해 봅시다.Guru아래와 같이 두 열 네 행으로 구성된 99' 형식의 형식을 사용하겠습니다.Guru다음 예시에서는 99' 테이블을 참조하십시오.

견본 GuruTutorial_ID 열과 4개의 행으로 구성된 99개의 테이블

변수를 사용한 부울 표현식에서 IF…ELSE

상수 대신 부울 표현식을 사용하여 비교할 수 있습니다. 변수다음 예제는 정수형 변수를 선언하고 그 값을 테스트합니다.

조건: 참

DECLARE @Course_ID INT = 4

IF (@Course_ID = 4)
Select * from Guru99 where Tutorial_ID = 4
ELSE
Select * from Guru99 where Tutorial_ID != 4

@Course_ID가 4이므로 IF 분기가 실행되어 Tutorial_ID가 4인 행을 반환합니다.

변수 조건이 참일 때 Tutorial_ID 4번째 행을 반환하는 쿼리 결과입니다.

조건: 거짓

DECLARE @Course_ID INT = 4

IF (@Course_ID != 4)
Select * from Guru99 where Tutorial_ID = 4
ELSE
Select * from Guru99 where Tutorial_ID != 4

여기서는 조건이 거짓이므로 ELSE 분기가 실행되어 Tutorial_ID가 4가 아닌 모든 행을 반환합니다.

ELSE 분기에서 Tutorial_ID 4를 제외한 모든 행을 반환하는 쿼리 결과입니다.

IF…ELSE with BEGIN…END

분기에서 두 개 이상의 문장을 실행해야 하는 경우, 문장들을 BEGIN…END 블록으로 묶습니다. 아래 예제는 각 분기에서 두 개의 SELECT 문을 실행합니다.

조건: 참

DECLARE @Course_ID INT = 2

IF (@Course_ID <=2)
	BEGIN
	Select * from Guru99 where Tutorial_ID = 1
	Select * from Guru99 where Tutorial_ID = 2
	END
ELSE
	BEGIN
	Select * from Guru99 where Tutorial_ID = 3
	Select * from Guru99 where Tutorial_ID = 4
	END

@Course_ID가 2 이하이므로 IF 블록은 BEGIN…END 안에 있는 두 개의 SELECT 문을 모두 실행합니다.

Tutorial_ID 1과 2에 대해 두 개의 SELECT 문을 실행하는 IF 블록의 결과

조건: 거짓

DECLARE @Course_ID INT = 2

IF (@Course_ID >=3)
	BEGIN
	Select * from Guru99 where Tutorial_ID = 1
	Select * from Guru99 where Tutorial_ID = 2
	END
ELSE
	BEGIN
	Select * from Guru99 where Tutorial_ID = 3
	Select * from Guru99 where Tutorial_ID = 4
	END

이번에는 조건이 거짓이므로 ELSE 블록은 두 개의 SELECT 문을 실행합니다.

Tutorial_ID 3과 4에 대해 두 개의 SELECT 문을 실행한 ELSE 블록의 결과입니다.

ELSE가 없는 IF 문

SQL에서 IF 문은 ELSE 부분 없이 사용할 수 있습니다. ELSE 부분은 선택 사항이기 때문입니다. 예를 들면 다음과 같습니다.

DECLARE @Course_ID INT = 2

IF (@Course_ID <=2)
	Select * from Guru99 where Tutorial_ID = 1

다음과 같은 한 줄을 출력합니다.

ELSE 부분이 없는 IF 문에서 한 줄로 출력되는 결과입니다.

거짓 조건을 실행해도 아무런 결과가 나오지 않습니다. 다음 쿼리를 고려해 보세요.

DECLARE @Course_ID INT = 2

IF (@Course_ID <=0)
	Select * from Guru99 where Tutorial_ID = 1

결과는 아래와 같이 비어 있습니다.

ELSE 절이 없는 IF 조건이 거짓일 경우 빈 결과 집합이 생성됩니다.

중첩된 IF…ELSE 문

다른 것과는 달리 프로그래밍 언어SQL Server는 IF…ELSE 조건문 안에 ELSE IF 문을 제공하지 않습니다. 대신 아래와 같이 IF…ELSE 문 안에 또 다른 IF…ELSE 문을 중첩할 수 있습니다.

 DECLARE @age INT;
SET @age = 60;

IF @age < 18
   PRINT 'underage';
ELSE
BEGIN
   IF @age < 50
      PRINT 'You are below 50';
   ELSE
      PRINT 'Senior';
END;

@age가 60일 경우, 중첩된 IF…ELSE 문은 다음과 같은 결과를 출력합니다.

중첩된 IF…ELSE 문의 결과로 60세의 경우 Senior가 출력됩니다.

  • 이 코드는 `@age` 값이 18 미만이면 'underage'를 출력합니다.
  • 그렇지 않으면 ELSE 부분이 실행됩니다. ELSE 부분에는 중첩된 IF…ELSE 문이 포함되어 있습니다.
  • @age 값이 50 미만이면 'You are below 50'을 출력합니다. 위의 조건 중 어느 것도 충족하지 않으면 'Senior'를 출력합니다.

자주 묻는 질문

IF…ELSE는 실행 흐름을 제어하여 실행할 T-SQL 문 또는 블록을 선택합니다. CASE는 SELECT 또는 WHERE 절과 같은 쿼리 내에서 단일 값을 반환하는 표현식입니다. CASE는 개별 문을 실행할 수 없습니다.

IIF()는 CASE 표현식의 축약형으로, IF…ELSE 제어 흐름 문과는 다릅니다. IIF()는 부울 조건에 따라 두 값 중 하나를 반환하며 쿼리 내에서 사용됩니다. IF…ELSE와 달리 IIF()는 별도의 T-SQL 문이나 블록을 실행할 수 없습니다.

아니요. IF…ELSE는 제어 흐름 문이므로 SELECT 목록이나 WHERE 절 안에 사용할 수 없습니다. 쿼리 내에서 조건부 값을 반환하려면 CASE 표현식이나 IIF() 함수를 사용하십시오.

`IF EXISTS (SELECT 1 FROM table WHERE condition)` 뒤에 실행할 문을 작성하세요. `EXISTS`는 하위 쿼리에서 일치하는 행이 하나 이상 발견되면 `true`를 반환하므로, `IF` 분기는 데이터가 존재할 때만 실행됩니다.

네. IF…ELSE 문은 저장 프로시저, 트리거, 함수 및 배치 작업 내에서 논리 분기를 위해 사용됩니다. BEGIN…END 블록과 함께 사용하면 프로시저가 매개변수 또는 쿼리 결과에 따라 서로 다른 SQL 문을 실행할 수 있습니다.

IF…ELSE 문은 조건을 한 번만 평가하고 일치하는 분기를 한 번 실행합니다. WHILE 루프는 조건이 참인 동안 해당 문 블록을 계속 반복합니다. 분기에는 IF…ELSE를, 반복에는 WHILE을 사용하세요.

예. GitHub 부조종사 자연어 프롬프트에서 IF…ELSE 블록, BEGIN…END 래퍼 및 중첩 조건을 작성할 수 있습니다. 스크립트를 데이터베이스에서 실행하기 전에 생성된 부울 조건과 분기 논리를 항상 검토하십시오.

AI 및 머신러닝 기반 도우미는 일반적인 영어 규칙을 IF…ELSE 또는 CASE 논리로 변환하고, 누락된 분기를 제안하며, 절대 참이 될 수 없는 조건을 표시합니다. 개발자는 배포하기 전에 각 제안의 정확성을 검토합니다.

이 게시물을 요약하면 다음과 같습니다.