Articles

SQL 경우 문 간단하고 검색 폼

주요 목적의 SQL CASE 값을 반환하는 기반으로 하나 이상의 조건적 테스트합니다. Sql 문 표현식의 어느 곳에서나 사용 사례 표현식이 허용됩니다. 비록 진정으로 표현,어떤 사람들은 그들을 참조”케이스 문.”이것은 프로그래밍 언어에서의 사용에서 비롯 될 가능성이 큽니다.

SQL 케이스 표현식은 매우 다양하며 SQLServer 쿼리 전체에서 사용됩니다. 특히 열 선택 목록,그룹 기준,데 및 순서 기준 절에 사용됩니다. CASE 또한 표준화(을 아름답게)데이터 또는 검사에 대한 보호 등과 같은 오류에 의해 나눕니다.

이 수업의 모든 예제는 Microsoft SQL Server Management Studio 및 AdventureWorks2012 데이터베이스를 기반으로합니다. 내 무료 가이드 및 무료 Microsoft 도구를 사용하여 SQL Server 사용 시작하기.

SQL Server CASE Statement

CASE 절에는 simple 과 searched 의 두 가지 양식이 있습니다. 두 양식 모두 표현식 테스트를 기반으로 결과를 반환합니다. 비록 기술적으로 표현,당신은 많은 사람들이 문으로 참조 볼 수 있습니다.

간단한 SQL CASE 문은 평등 테스트에 사용됩니다. 여러 값에 대해 하나의 표현식을 테스트하므로 약어와 같은 한 값 집합을 해당 긴 형식으로 변환하는 데 적합합니다.

검색된 SQL CASE 문은 보다 포괄적인 표현식 평가 형식을 사용합니다. 급여 범위 또는 연령대와 같은 데이터 범위로 작업하고자 할 때 좋습니다.

우리는 먼저 간단한 양식으로 시작한 다음 표지 검색을 시작합니다.

CASE expression Simple Form

CASE expression 의 simple form 은 표현식의 결과를 일련의 테스트와 비교하고”test”가 true 를 반환 할 때”결과”를 반환합니다.

일반적인 형태에 대해 단순한 형태 CASE:

CASE expression
WHEN test THEN result

ELSE otherResult
END

ELSE 선택적인 경우에는 표현이다. 일치가 이루어지지 않고 다른 것이있을 때”otherResult”를 반환합니다. CASE 문에 다른 것이 없으면 NULL 을 반환합니다.

ELSE 절은 나쁜 또는 예기치 않은 데이터 값을 잡아서 NULL 이외의 결과를 반환하는 좋은 방법입니다.

데이터 변환 예

CASE 문을 사용하는 데는 여러 가지 이유가 있습니다. 첫 번째는 한 값 집합에서 다른 값 집합으로 데이터를 변환하는 것입니다. 예를 들어,표시하는 직원의 성별에”남자”또는”여성,”때로 인코딩된 데이터는”M”또는”F”사용한 경우 표현하 테스트에 대해 하나의 문자로 표현하고 해당 장 form.

이에 대한 예는 다음과 같습니다:

SELECT JobTitle,
CASE Gender
WHEN 'M' THEN 'Male'
WHEN 'F' THEN 'Female'
ELSE 'Unknown Value'
END
FROM HumanResources.Employee

데이터의 표준화를 들어

마찬가지로 사용할 수 있는 간단한 경우에 절을 표준화하고 여러 값으로 하나입니다. 늘 우리를 들어도 여러 가지 변화하는 남성 또는 여성:

될 수 있는지 궁금할 수 있다면 만들기의 다른 데이터베이스의 테이블에 사용하는 조회는 값입니다. 데 동의하는 경향이있는 가장 좋은 것이지만,많은 상황에서 당신은 없을 만들 수 있는 권한이 있는 데이터베이스의 테이블. 이 경우 당신은 선택 문의를 제공 순발력에 남아.

요약

여기에 몇 가지 일을 고려할 때 사용하여 간단한 케이스 표현

  • 만 허용평등 비교할 수 있습니다.
  • 평가 테스트는 정의 된 순서대로 평가됩니다.
  • 는 첫 번째 TRUE 테스트에 해당하는 결과를 반환합니다.
  • 일치하지 않으면 CASE 가 다른 경우가 아니면 NULL 을 반환합니다.

사례 표현식 검색 양식

사례 표현식의 검색 양식은보다 다양한 테스트를 허용합니다. 더 큰 범위의 테스트를 평가하는 데 사용하십시오. 실제로 모든 부울 표현식은 테스트 자격이 있습니다.

A 에서 검색 CASE 는 이 형식

CASE
WHEN booleanExpression THEN result

ELSE otherResult
END

으로 검색 양식을 사용할 때 조항을 평가하는 부울 식입니다. 첫 번째 진정한 부울 식의 결과가 반환됩니다.

아래는 이전 섹션에서 직원 성별 예제의 검색된 사례 양식입니다.

우리는 또한 간단한 SQL case 문에 대해이 같은 예제를 사용했습니다. 나는 당신이 미묘한 차이를 볼 수 있도록 이것을했다. 이제 각 WHEN 절에 부울 표현식으로 테스트가 포함되어 있음을 알 수 있습니다.

의 비교는 간단하고 검색 폼 SQL 의 경우

여기에는 문 side-by-side:

간단한 대 검색 CASE

I 는 경향이 있을 사용하여 검색하는 경우 형식으로 표현에서 나의 모든 SQL. 이 이유는 간단합니다,나는 단지 하나의 형식을 기억해야합니다!

우리는 부울 표현식을 테스트하고 있기 때문에 검색된 사례 문은 단지 평등 테스트에만 국한되지 않습니다. 이것은이 양식이 값의 범위를 비교하는 데 정말 좋습니다. 아마도 Adventure Works 의 영업 관리자는 가격대별로 제품을 구성하기를 원할 것입니다. SQL 로 어떻게 할 수 있습니까?

주어진 다음과 같은 이름과 범위를 제공하여 영업 관리자,우리는 구성할 수 있습니다 CASE 을 비교하 ListPrice 하는 값의 범위는 다음 반환 적절한 가격 범위 이름입니다.

경우 문는 배치에서 선택 목록 열고 문자를 반환하는 값입니다. 다음은 트릭을 수행하는 SQL 입니다:

이 쿼리를 실행하면 당신이 볼 수 PriceRange 나열되고 표시하는 값에 따라 범위에 지정된 경우 식

경우 문의 결과로

경우 문 또한 사용될 수 있도록 오류가 있습니다. 좋은 예는 숫자를 나눌 때와 같은 표현식 내에서 유효한 값을 테스트하는 것입니다.

고려

SELECT ProductID,
Name,
ProductNumber,
StandardCost,
ListPrice,
StandardCost / ListPrice as CostOfGoodSold
FROM Production.Product

이 문을 반환하는 메시지

Divide by zero error encountered.

를 사용하여 경우 절할 수 있습니다 우리는지 실수로 나눕니다.

SELECT ProductID, Name, ProductNumber, StandardCost, ListPrice, CASE WHEN ListPrice = 0 Then NULL ELSE StandardCost / ListPrice END as CostOfGoodSoldFROM Production.Product

표현식을 사용할 수있는 곳이면 어디에서나 사례 표현식을 사용할 수 있습니다. 즉,열 값 결과를 반환하는 데 사용하거나 ORDER BY 절에서 사용할 수도 있습니다.

다음 섹션에서는 ORDER BY 및 GROUP BY 절에서 CASE 사용을 살펴 보겠습니다.

경우 식 순서로

에 계속 영업 관리자의 요청,그녀는 또한 보고 싶어하는 제품을 정렬해 가격 범위는 다음 제품 이름입니다. 우리는 가격 범위를 열로 표시 할 수있는 방법을 보았지만 어떻게 정렬합니까?

실제로는 꽤 쉽습니다. CASE 는 표현식이므로 결과를 순서화하는 값의 한 번으로 사용할 수 있습니다. 우리는 단지 테이블 열을 정렬하는 것에 국한되지 않고 표현식을 정렬 할 수도 있음을 기억하십시오.다음은 가격 범위별로 정렬하는 쿼리입니다.

우리는 또한 가격 범위를 표시하기 위해 선택 목록에 사례 문을 추가 할 수 있습니다.보시다시피 상황이 복잡해지기 시작합니다. CASE 문이 SELECT list 와 ORDER BY 모두에서 어떻게 반복되는지 보십니까? 다행히도,우리를 단순화할 수 있습이트,하지만 제거하는 경우 문서 이 순서에 의고 그것을 대체하는 선택 목록 CASE 의 별칭 이름 PriceRange 으로도록:

경우 식 그룹에 의해

이제는 우리가 주는 영업 관리자 대한 자세한 목록 그녀를 보고 싶어 요약 데이터가 없이 그것인가? 내 경험상 그렇지 않으므로 고객의 요구를 만족시키기 위해 많은 SQL 을 아는 것이 성공의 열쇠입니다.

어쨌든 좋은 소식은 우리가 사용할 수 있는 경우 식 우리를 구축했을 만약 그룹이 있습니다. 다음 SQL 에서는 PriceRange 별로 데이터를 그룹화하고 있습니다. 최소,최대 및 평균 목록에 대한 요약 통계프리스가 생성됩니다.

ORDER BY 절과 달리 GROUP BY 의 열 별칭 PriceRange 를 참조 할 수 없습니다. 전체 사례 식을 반복해야합니다. 다음은 우리의 쿼리 결과입니다:

결과를 경우 표현에 그룹에 의해

포장

당신이 볼 수 있듯이,사용하는 경우 표현가 다양한 귀하의 SQL 문을 수행합니다. 그 뿐만 아니라 데이터 변환에서 한 세트의 값을 다른지만,또한 사용될 수 있도록 문을 반환하지 않 오류가 있습니다.

간단하고 검색 한 두 가지 양식 중에서 검색 양식을 사용하는 경향이 있습니다. 그 이유는 단순한 양식이 평등 테스트로 제한되는 반면,검색된 양식은 그 이상을 할 수 있기 때문입니다.

대소 문자 표현식은 표현식이며 문이나 절이 아니기 때문에 다른 표현식이 사용되는 곳에서 사용할 수 있습니다. 즉,SELECT 문 전체와 SQL 의 다른 곳에서 사용할 수 있습니다.