WHERE 조건절에 CASE 로 IF 와 같은 효과를 내봅시다. 목적은 한 방 쿼리를 만들어 보는 것입니다~! 프로그래밍 방법으로 조건 분기를 하지 못하는 상황에서 유용하게 사용할 수 있을 것입니다.
예를 들면, 사용자에게 하나의 쿼리를 제공하여 조건에 맞추어 조회를 할 수 있도록 지원할 때 사용할 수 있습니다. 한방쿼리가 안 된다면 조건에 따라 조회문장이 계속 나누어지겠죠? 이를 보완하기 위한 방법이랍니다. 지금 당장 적용하기 어렵더라도 이러한 기능도 있구나, 하고 알아두면 나중에 쓸 데가 있을 거예요.
이번 예제에서 사용할 자료입니다.
private void Run()
{
StringBuilder sb = new StringBuilder();
sb.AppendLine(" SELECT * ");
sb.AppendLine(" FROM EMP ");
sb.AppendLine(" WHERE 0 = 0 ");
if (txtVar.Text == "ALL")
{
//Select All Data
}
else
{
sb.AppendLine(" AND JOB = :VJOB ");//Select Data by Job
}
}
예제 소스는 txtVar.Text 가 "ALL" 일 때는 조건을 생략하고 모든 데이터를 조회합니다. 그리고 txtVar.Text가 그외의 값이면 [JOB] 이 일치하는 데이터를 찾아갑니다. 텍스트박스의 값에 따라 쿼리가 달라질 것입니다.
txtVar.Text 가 "ALL" 인 경우
SELECT *
FROM EMP
WHERE 0 = 0
txtVar.Text 가 그외의 값인 경우("ALL" 이 아닌 경우)
SELECT *
FROM EMP
WHERE 0 = 0
AND JOB = :VJOB
이때 비정형데이터를 조회하는 목적으로 사용자에게 쿼리를 제공한다면 아래와 같을 것입니다.
SELECT *
FROM EMP
WHERE 0 = 0
AND JOB = :VJOB --모든 JOB을 조회하시려면 이 줄을 지우고 조회하세요.
한방쿼리는 이럴 때에 도움이 될 것입니다. WHERE 절에 CASE 를 이용하여 한방쿼리를 만들 수 있습니다.
--VJOB 에 ALL 을 입력하시면 모든 JOB을 조회합니다.
SELECT *
FROM EMP
WHERE 0 = 0
AND 1 =
CASE
WHEN 'ALL' = :VJOB THEN 1
WHEN JOB = :VJOB THEN 1
ELSE 0
END
한방쿼리에 ALL 을 입력한 경우입니다. 모든 데이터를 조회합니다.
한방쿼리에 SALESMAN을 입력한 결과입니다.