착해지는 중 입니다.

[SQL] 조건부 표현식 본문

BackEnd/Sql

[SQL] 조건부 표현식

박쓸개 2024. 5. 7. 16:39

###표현식

하나이상의 값과 연산자 그리고 함수의 조합 

 

###조건부 표현식

조건부 표현식 CASE EXPRESSION

- CASE~ END로 CASE표현식을 구분한다. (다른 데이터베이스에도 있음)

조건식 N개를 만족했을 경우 

반환 값은 같은 데이터 타입이어야 한다.

CASE 는 범위 비교 가능

 

SIMPLE CASE EXPRESSION 과 CASE차이

SIMPLE은 자동연산자가없어서   동등비교만 가능(JAVA의 CASE와 같음 ) THEN 과 ELSE 뒤에있는것이 반환값. ELSE가 없는데 앞에 조건들을 만족하지 못했을경우 NULL반환.   END뒤에서는 컬럼 별칭을 써줘야 / 

예제)PDF 167p

 

SEARCHED CASE EXPRESSION 

비동등조건도 가능. CASE와 첫 WHEN 이 한 묶음이고  WHEN 다음에 조건식

예제)PDF 168p

 

 

DECODE

SIMPLE CASE EXPRESSION를 함수로 나타낸것. 오라클 전용함수 

차이점은 NULL값과 동등비교도 허용한다.

WHERE NULL = NULL → 같지도 다르지도않다. 동등비교 자체가 성립하지않음.

CREATE TABLE local_sales
( no NUMBER(2), city VARCHAR2(10), sale NUMBER(6));
INSERT INTO local_sales VALUES (1, '부산', 18000);
INSERT INTO local_sales VALUES (2, '서울', 25000);
INSERT INTO local_sales VALUES (3, '인천', 14000);
INSERT INTO local_sales VALUES (4, '대구', 13000);
INSERT INTO local_sales VALUES (5, '대전', 11000);
COMMIT;

SELECT * 
FROM local_sales
order by case CITY WHEN '서울' THEN 1
                    WHEN ' 부산' THEN 2
                    WHEN ' 대구' THEN 3
                    WHEN ' 대전' THEN 4
                    WHEN ' 인천' then 5
                    END;
                    
                    
SELECT    *
FROM local_sales
ORDER BY
    decode(city, '서울', 10, 
             '부산', 20, 
             '대구', 30, 
             '대전', 40, 
             '인천', 50);
            
--city 열의 값이 '서울'일 때는 10,
--'부산'일 때는 20, '대구'일 때는 30, 
--'대전'일 때는 40, '인천'일 때는 50을 반환합니다. 
--이를 기준으로 정렬이 수행됩니다