CustomerId Sex Age Income
1 M 55 80000
2 F 25 65000
3 M 35 40000
4 F 42 90000
5 F 27 25000

해당 테이블을 복합적인 조건을 만족하는 항목만 선택해서 출력할것이다.

성별이 남성인 경우, 50세 이상이고 수입이 75000이상인 경우만, 성별이 여성인 경우, 35세 이상이고 수입이 60000이상인 경우만 출력한다. 성별과 나이 조건을 충족하지 못한 경우에는 수입이 50000이상인 경우만 출력한다.

SELECT *
  FROM CustomerList
  WHERE Income >
  CASE
    WHEN Sex = 'M' AND Age >= 50 THEN 75000
    WHEN Sex = 'F' AND Age >= 35 THEN 60000
    ELSE 50000
  END

WHERE Income >의 우항에 들어갈 수치를 case를 통해 결정한다. 그리고 각 항목이 이를 충족할 때 출력한다.

CustomerID Sex Age Income
1 M 55 80000
2 F 25 65000
4 F 42 90000

 

'DB > 관계형 DB' 카테고리의 다른 글

데이터 요약 - 집계 함수  (0) 2021.04.15
데이터 요약 - 중복제거(Distinct)  (0) 2021.04.15
Order By 조건부 논리(case)  (0) 2021.04.15
검색형 CASE  (0) 2021.04.15
CASE  (0) 2021.04.15

Order by로 정렬할 때 case문을 활용해 정렬할 수 있다.

Country로 1차적으로 오름차순으로 정렬 후, case로 US, CA인지에 따라 2차적으로 정렬을 한번 더 해준다.

 

'DB > 관계형 DB' 카테고리의 다른 글

데이터 요약 - 중복제거(Distinct)  (0) 2021.04.15
WHERE절의 조건부 논리(case)  (0) 2021.04.15
검색형 CASE  (0) 2021.04.15
CASE  (0) 2021.04.15
패턴 매칭(Like)/ 와일드카드  (0) 2021.04.14

검색형 case의 일반적인 형태는 다음과 같다.

case
when [condition A] then resultA
when [condition B] then resultB
...
else [defaultResult]
end

when 다음으로 참 거짓이 되는 조건을 지정하고, 해당 조건이 참이면 then을 실행한다.

GroceryID Fruit Vegetable Spice Beverage Description
1 X       Apple
2 X       Orange
3     X   Mustard
4   X     Carrot
5       X Water

위와 같은 테이블이 있을 때, 검색형 case로 카테고리를 정리해볼것이다.

select
  case
    when Fruit = 'X' then 'Fruit'
    when Vegetable = 'X' then 'Vegetable'
    else 'Other'
  end as 'Category',

  [Description]

from Groceries

해당 코드는 다음과 같이 출력된다.

Category Description
Fruit Apple
Fruit Orange
Other Mustard
Vegetable Carrot
Other Water

Fruit 열이 X값을 가지고 있을 경우, category에 Fruit을, Vegetable 열이 X값을 가질경우 Vegetable을, 그 외에는 Other를 출력하게 했다.

 

'DB > 관계형 DB' 카테고리의 다른 글

WHERE절의 조건부 논리(case)  (0) 2021.04.15
Order By 조건부 논리(case)  (0) 2021.04.15
CASE  (0) 2021.04.15
패턴 매칭(Like)/ 와일드카드  (0) 2021.04.14
선택 기준 (WHERE, TOP)  (0) 2021.04.08

CASE는 if나 switch문과 비슷한 역할을 한다.

데이터를 불러올 때, 해당 데이터를 가공해서 가져올 수 있다.

Groceries 테이블에서 CategoryCode항목의 데이터들을 변환해서 가져올것이다.

F->Fruit, V->Vegitable, 이외의 것들->Other

case문을 시작하고, when [기존 데이터] then [바꿀 데이터]의 형태를 사용한다.

case문은 end로 끝마친다.

 

case문은 기호나 ID 등을 의미있는 설명으로 바꿔주는데에 유용하게 사용된다.

또한 데이터를 축약어 또는 ID로 저장하는 경우 용량이 대폭 줄어드는 장점이 있는데, case문이 이 축약어들을 변환해줄 수 있다.

'DB > 관계형 DB' 카테고리의 다른 글

Order By 조건부 논리(case)  (0) 2021.04.15
검색형 CASE  (0) 2021.04.15
패턴 매칭(Like)/ 와일드카드  (0) 2021.04.14
선택 기준 (WHERE, TOP)  (0) 2021.04.08
데이터 정렬(ORDER BY)  (0) 2021.04.08

LIKE

LIKE서칭으로는 특정 구(phrase)가 포함된 값을 찾을 수 있다.

위 예시에서는 MovieTitle열에서 "LOVE"가 포함된 값을 서치하고있다.

LIKE 서칭에서는 어떻게 비교할것인지 와일드카드로 명시해야한다.

문자열에 LOVE가 어디에든 포함되어있는 값을 찾으려면 %LOVE%,

LOVE로 시작하는 값을 찾으려면 LOVE%, LOVE로 끝나는 값을 찾으려면 %LOVE를 사용하면 된다.

와일드카드

%외에도 와일드카드는 _ [] [^]등이 존재한다.

언더바(_)는 해당 자리에 단 하나의 문자만을 허용한다. 언더바는 자릿수만큼 연속해서 사용할수 있다.(__RY, ___Y 등)

 []는 괄호 안의 문자중 하나로 시작하고, 이후 문자열로 끝나는 행을 선택한다.

[^CM]ARY의 경우에는 C나M으로 시작하지 않고 ARY로 끝나는 행을 선택하게 된다.

 

와일드카드로 인해 생기는 약간의 문제가 있다. 데이터에 와일드카드로 지정되어있는 특수기호가 들어있는 경우엔 어떻게 될까?

위처럼 [로 시작하는 값을 불러오려 했지만 아무것도 불러오지 못했다.

'['를 포함한 값을 불러오려면 [를 []와일드카드로 한번 더 감싸주어야한다.

하지만 닫는괄호(])에는 해당사항이 없다. LastName의 'problem]'은 따로 []로 감싸주지 않아도 정상적으로 값을 호출한다.

따라서 불러오려는 값에 여는 대괄호가 들어가는 경우에 이런 문제가 발생하는것을 알 수 있다.

 

'DB > 관계형 DB' 카테고리의 다른 글

검색형 CASE  (0) 2021.04.15
CASE  (0) 2021.04.15
선택 기준 (WHERE, TOP)  (0) 2021.04.08
데이터 정렬(ORDER BY)  (0) 2021.04.08
숫자함수(ROUND,RAND,PI,POWER)/변환함수(CAST)  (0) 2021.04.08

WHERE

WHERE절은 if문과 유사하다.

해당 절의 내용이 true인 행만 선별해서 가져올 수 있다.

이에 사용되는 등호/부등호 연산자는 다음과 같다.

= 같다.
<> 같지 않다.
> 좌항이 우항보다 크다.
< 우항이 좌항보다 크다.
>= 좌항이 우항보다 크거나 같다.
<= 우항이 좌항보다 크거나 같다.

 

TOP

TOP절은 데이터베이스에 저장된 테이블의 상위 n개의 행의 데이터를 가져온다.

사용 예는 다음과 같다.

기본적으로 데이터베이스에 데이터가 어떤 방식으로 저장되어있는지 모르는 경우에 TOP절은 그냥 무작위 행을 골라오는것이나 마찬가지이다. 따라서 정렬을 통해 어떤 행을 가져올지를 결정할 수 있다.

ORDER BY를 통해 판매량 수를 기준으로 내림차순으로 정렬한 후, TOP을 이용하면 판매량 상위 3개 책을 가져올 수 있다.

'DB > 관계형 DB' 카테고리의 다른 글

CASE  (0) 2021.04.15
패턴 매칭(Like)/ 와일드카드  (0) 2021.04.14
데이터 정렬(ORDER BY)  (0) 2021.04.08
숫자함수(ROUND,RAND,PI,POWER)/변환함수(CAST)  (0) 2021.04.08
날짜/시간 함수  (0) 2021.03.31

+ Recent posts