DB, SQL

[MSSQL] SQL의 where 절에서 if문, if-else문처럼 사용하기

isaac.kim 2021. 6. 21. 18:59
728x90
반응형

[MSSQL] SQL의 where 절에서 if문, if-else문처럼 사용하기


이 글은 2022.06.25에 수정되었습니다.

MSSQL에서 select 쿼리를 구현할 때 where 절에서 if-else 구문의 형태로 표현하고 싶은 경우가 있습니다.
PL/SQL 방식의 if 문을 사용하는 방식이 아닌 where 절에서 if-else처럼 처리하는 방법을 알아보겠습니다.

반응형

 

SELECT WHERE절에서 if-else 처리하기

MSSQL의 select 구문에 where절에서 if-else 문을 처리할 때 어떻게 할까요?

아래 SQL 구문에서 WHERE을 확인해보겠습니다.

DECLARE @NAME VARCHAR(20) = '손흥민'

SELECT * FROM TABLE
WHERE 1=1 AND
(
    ( ( @NAME = '손흥민' ) AND ( NAME = @NAME ) )
	OR 
    ( ( @NAME <> '손흥민' ) AND ( NAME <> '손흥민' ) )
)

첫 째 줄에 @NAME 변수에 '손흥민'을 선언했습니다.

그리고 TABLE 전체 조회를 실행하는데 WHERE 조건절이 있습니다. where 절에는 확인하고 싶던 if else 구문이 들어 있는데요.
(table에 name이라는 column이 있다고 가정.)

WHERE 절 괄호 안에 OR를 사이로 두고 나뉜 구문이 if else라 할 수 있습니다. @NAME 변수에 '손흥민'이라는 값이 들어있다면, OR의 위 구문 @NAME을 손흥민으로 표현하면 ( ( '손흥민' = '손흥민' ) AND ( NAME = '손흥민') ) 이 되어서 구문의 첫 번째 괄호의 값은 True가 되어 다음과 같이 표현할 수 있습니다.
( ( True ) AND ( NAME = '손흥민') )
결국 Table에서 NAME이 '손흥민'인 값을 조회하게 됩니다.

OR의 아래 구문을 확인해보겠습니다.


OR의 아래 구문 ( ( @NAME <> '손흥민' ) AND ( NAME <> '손흥민' ) ) 에서

괄호 앞부분은 '@NAME 값이 '손흥민'이 아니면, ' 을 나타내고 있습니다.

OR의 위 구문과 반대가 되어 ELSE 처리를 하게 되는 것으로 볼 수 있습니다.

@NAME이 '이승우'이면 ( ( '이승우' <> '손흥민' ) AND ( NAME <> '손흥민' ) ) 이 될 것이고,

다시 첫 번째 괄호를 boolean으로 치환하면 ( ( True ) AND ( NAME <> '손흥민' ) ) 가 되어서

NAME이 '손흥민'이 아닌 값을 조회하게 됩니다.

OR의 아래 구문은 조회되고, 조회되지 않는 or의 위 구문을 다시 확인해볼게요.

@NAME에 '이승우'가 들어있다면,

OR의 위 구문 ( ( @NAME = '손흥민' ) AND ( NAME = @NAME ) ) 에서

( ( '이승우' = '손흥민' ) AND ( NAME = '이승우' ) ) 가 되는데,

괄호 앞부분이 false가 되어서 ( ( false) AND ( true) ) 라고 하여도,

AND 연산을 하면 ( false ) 가 되기 때문에 OR의 위 구문은 조회하지 않게 됩니다.

 

 

 

 

 

 

 

 

예시)

 

아래 이미지와 같은 테이블 및 데이터가 있습니다. @VALUE에 홍길동을 넣으면 hname이 '홍길동'인 데이터만 출력되고, @VALUE에 홍길동이 아닌 값을 넣으면, hname이 '홍길동' 외에 데이터가 출력되는 쿼리 예시를 보여드리겠습니다.

 

 

 

 

 


쿼리 @VALUE에 '홍길동' 넣고 실행하기

DECLARE
@VALUE VARCHAR(20)='홍길동'

SELECT TOP (1000) [hid]
      ,[hname]
      ,[hage]
  FROM [TEST_HUMAN]
  WHERE 1=1 AND
  (
	((@VALUE = '홍길동') AND (hname = @VALUE))
	OR ((@VALUE <> '홍길동') AND (hname <> '홍길동'))
  )

실행결과

 

 

 

 

 


쿼리 @VALUE에 '홍당무' 넣고 실행하기

DECLARE
@VALUE VARCHAR(20)='홍당무'

SELECT TOP (1000) [hid]
      ,[hname]
      ,[hage]
  FROM [TEST_HUMAN]
  WHERE 1=1 AND
  (
	((@VALUE = '홍길동') AND (hname = @VALUE))
	OR ((@VALUE <> '홍길동') AND (hname <> '홍길동'))
  )

실행결과

 

 

 

 

 


위 결과에서 보면 알 수 있듯이 WHERE 절에서 IF-ELSE 문처럼 사용할 수 있고, 응용하면 IF-ELSE IF, CASE 문처럼 사용할 수도 있습니다.


좋아요, 구독, 광고 클릭은 큰 힘이 됩니다 :)


참조 링크
https://wakestand.tistory.com/242

728x90
반응형