상세 컨텐츠

본문 제목

CASE

청강컴정/DataBase

by luckey 2009. 3. 17. 19:22

본문

조건 목록을 평가하고 가능한 여러 결과 식 중 하나를 반환한다.

CASE는 유효한 식이 허용되는 모든 문 또는 절에서 사용할 수 있다.
예를 들어 SELECT, UPDATE, DELETE, SET 등의 문과 select_list, IN, WHERE, ORDER BY, HAVING등의 절에서 CASE문을 사용할 수 있다.

CASE는 두가지 형태로 만들수 있는데

간단한 CASE :

CASE 값이 있는 변수(또는 컬럼)  ------ ①
    WHEN 값 THEN 결과
    ELSE 결과
END


첫번째 값을 WHEN 절의 값과 같은지 비교하는 방식으로 작동한다.
- 동등한 검사만 수행할 수 있다.
- ①을 평가한 다음 지정된 순서대로 WHEN 절의 [값이 있는 변수(또는 컬럼)] = 값 을 검사한다.
- 검사한 값이 [값이 있는 변수(또는 컬럼)] = 값 조건이 TRUE 이면 해당 WHEN 절의 결과를 반환한다.
- 만약 WHEN 절에서 검사한 값이 조건과 맞는 것이 없을경우 ELSE 가 있으면 ELSE 의 결과값을 반환하며 ELSE가 없을경우
  NULL을 반환한다.


검색된 CASE :

CASE
    WHEN 조건 THEN 결과
    ELSE 결과
END

두번째로는 단순결과값이 아닌 조건을 각각 지정해주는 방법이다.
- 지정된 순서대로 WHEN 절에 대해 조건을 검사한다.
- 해당 조건이 TRUE 일 경우 결과 를 반환한다.

* ELSE문은 적어도 되고 안적어도 된다.
* ELSE문은 모든 조건을 만족하지 않았을경우 최종적으로 나타내는 결과를 표시할때 쓰인다.
* 모든 구문은 CASE 로 시작해서 END로 끝나게 되며 중첩이 가능하다. (중첩은 10개 수준까지만 허용한다.)

아래의 예제를 풀어보자

-------------------------------------------------------------------------------------------------------

예제1) SELECT 문에 단순 CASE 식 사용
- SELECT 문 내에서 단순 CASE 식은 동등성만 검사하고 다른 비교 작업을 수행할 수 없다.
- AdventureWorks DataBase 에서 Production.Product 테이블의 내용을 출력한다.
- 출력되는 내용은 ProductNumber, Category, Name 을 출력한다.
- ProductLine 의 값이 R일 경우 Road, M일경우 Mountain, T일 경우 Touring, S일 경우 Other sale items 해당 값이 없을경우 Not for Sale 을 출력한다.

위 내용을 Sql Query 로 작성한후 해당 결과를 C#을 이용하여 출력해보도록 한다.

-------------------------------------------------------------------------------------------------------

예제2) SELECT문에 검색된 CASE 식 사용
SELECT 문 내에서 검색된 cASE 식은 비교값에 따라 집합의 값이 바뀌도록 한다.
- 제품의 가격 범위에 따라 가격을 텍스트 설명으로 표시한다.
- AdventureWorks DataBase 에서 Production.Product 테입블의 내용을 출력한다.
- 출력되는 내용은 ProductNumber, Name, 가격설명을 출력하도록 한다.
- 가격설명은 ListPrice 의 값을 이용해서 출력한다.
- ListPrice 의 값이 0과 같으면 Mfg item - not for resale
- ListPrice 의 값이 50보다 작으면 Under $50
- ListPrice 의 값이 50보다 크거나 같고 250보다 작으면 Under $250
- ListPrice 의 값이 250보다 크거나 같고 1000보다 작으면 Under $1000
- ListPrice 의 값이 1000이상이면 Over $1000을 출력한다.

위 내용을 Sql Query 로 작성한 후 해당 결과를 C#을 이용하여 출력해 보도록 한다.

-------------------------------------------------------------------------------------------------------

예제3) ORDER BY 절에 CASE 사용
- HumanResources.Employee 테이블의 SalariedFlag 열에 있느 값을 기준으로 행의 정렬 순서를 결정한다.
- SalariedFlag가 1로 설정된 직원은 EmployeeID를 기준으로 내림차순으로 반환되고, SalariedFlag가 0으로 설정된 직원은 EmployeeID를 기준으로 오름차순으로 반환된다.

관련글 더보기

댓글 영역