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을 반환합니다.
--이를 기준으로 정렬이 수행됩니다