서버 개발/MySQL

MySQL - (6) 조건분기

Johnny Yoon 2019. 8. 10. 11:02
728x90
반응형

 

 

 

MySQL 포스팅

(1) SELECT

(2) 집계함수

(3) VIEW

(4) 윈도우 함수

(5) 데이터 갱신

(6) 조건 분기

(7) JOIN


조건분기

모든 프로그래밍 언어에는 조건분기가 존재합니다.

SQL에서 조건분기는 여러가지 방법이 있습니다.

  • WHERE문 사용
  • UNION 사용
  • CASE 사용

WHERE문은 손쉽게 사용할 수 있다는 장점이 있지만, 구문이 매우 길어질 수 있습니다.

UNION은 기본적으로 여러개의 SELECT문을 사용한다는 전제가 깔려있기 때문에 효율적이지 않습니다.

따라서, 이번 포스팅에서는 CASE문을 사용한 조건분기를 알아보도록 하겠습니다.

 

CASE

CASE식의 기본 문법은 다음과 같습니다.

CASE WHEN 조건 THEN 식
     WHEN 조건 THEN 식
     ...
     ELSE 식
END

 

예제

위의 Case문을 사용해보도록 하겠습니다.

이전 포스팅에서 사용했던 customer데이터에서, 나라별로 조건분기를 시켜,

대륙 컬럼을 만들어 보도록 하겠습니다.

SELECT CustomerName, Country,
	CASE WHEN Country in ('USA', 'Argentina', 'Mexico', 'Venezuela', 'Canada') THEN 'America'
        ELSE 'Europe'
	END AS Continent
FROM customers;

 

위의 실행 결과의 상위 5개는 다음과 같습니다.

 

위와 같은 조건 분기를 Where문에서도 할 수 있지만,

조건이 많아질 수록 가독성이 떨어지게 됩니다.

따라서 CASE문을 더 활용하는것이 좋을 것 같습니다.

 

View생성

이제 위의 조건분기를 사용한 View를 만들어 주겠습니다.

해당 SQL을 사용해 가상 테이블을 만들어줍니다.

CREATE VIEW NameAndCountry(CustomerName, Country, Continent)AS
(
    SELECT CustomerName, Country,
        CASE WHEN Country in ('USA', 'Argentina', 'Mexico', 'Venezuela', 'Canada') THEN 'America'
             ELSE 'Europe'
        END AS Continent
    FROM customers
);

이제 우리는 위의 가상 테이블에 쿼리를 날릴 수 있게 됩니다.

 

이제 조금 더 복잡한 조건 분기를 해보도록 하겠습니다.

나라들의 통화를 지정해주는 예제를 수행해보겠습니다.

편의를 위해 유럽은 모두 EUR로 통일 하였습니다.

예제에 적용해줄 통화는 다음과 같습니다.

나라 통화
USA USD
Argentina ARS
Canada CAD
Mexico MXN
Venezuela VEF
Europe EUR

 

위의 예제 코드를 보기 전에 먼저 수행해보시길 추천드립니다.

NameAndCountry가상테이블에서 통화를 적용해 SELECT하는 쿼리는 다음과 같습니다.

SELECT Country, Continent, 
    CASE WHEN Country = 'USA' THEN 'USD'
        WHEN Country = 'Mexico' THEN 'MXN'
        WHEN Country = 'Canada' THEN 'CAD'
        WHEN Country = 'Argentina' THEN 'ARS'
        WHEN Country = 'Venezuela' THEN 'VEF'
        ELSE 'EUR'
    END AS Currency
FROM NameAndCountry;

 

위 쿼리의 수행 결과 중 상위 10개는 다음과 같습니다.

 

여기까지 조건분기에 대해 알아보았습니다.

 


MySQL 포스팅

(1) SELECT

(2) 집계함수

(3) VIEW

(4) 윈도우 함수

(5) 데이터 갱신

(6) 조건 분기

(7) JOIN

728x90
반응형

'서버 개발 > MySQL' 카테고리의 다른 글

MySQL - (7) JOIN  (0) 2019.08.10
MySQL - (5) 데이터 갱신  (0) 2019.08.10
MySQL - (4) 윈도우 함수  (0) 2019.08.10
MySQL - (3) VIEW  (0) 2019.08.09
MySQL - (2) 집계함수  (0) 2019.08.08