[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
'DB, SQL' 카테고리의 다른 글
[MariaDB] MariaDB 환경 변수 설정하기 (0) | 2021.07.04 |
---|---|
[MariaDB] MariaDB zip 버전 서비스 등록하기, service registration (0) | 2021.07.04 |
[MariaDB] Windows 10에 MariaDB Zip 버전 설치하기, 압축파일로 설치하기 (0) | 2021.06.18 |
[MariaDB] MariaDB 테이블 생성, 오토 시퀀스 (자동 값 증가) (0) | 2021.06.11 |
[MariaDB] MariaDB 버전 확인 방법 (0) | 2021.06.11 |