- 오늘 살펴볼 것은 '단일행 함수'이다. 그렇다면, 단일행 함수란 무엇인가? 단일행 함수는 한번에 하나씩 처리하는 함수라고 보면 된다. 이와는 다르게 여러건의 데이터를 동시에 입력받아 1건으로 만들어주는 함수인 복수행 함수가 존재한다. 이에 대해서, 다음 블로그에서 설명하려고 한다. 이번에는 단일행 함수에 대해서 자세히 살펴보려고 한다. 우선, 단일행 함수의 특징으로는 결과값이 메모리에 로드되어진 행의 개수만큼 동일한 개수로 나온다는 것이다. 단일행 함수의 종류로는 문자함수, 숫자함수, 날짜함수, 변환함수, 기타함수가 존재한다. 이 안에는 많은 종류의 함수가 다양하게 존재한다. 모든 것을 외울 필요가 없이 어떤 것이 존재하는 지 알고 나중에 이를 다시 찾아봐서 이용하면 될 거 같다. 그렇다면, 여기서 중 내가 중요하다고 생각하고, 자주 이용될 것 위주로 설명하도록 하겠다.
첫번 째로 설명할 것은 기타함수의 'CASE WHE THEN ELSE END' 와 'DECODE' 를 설명하도록 하겠다. 둘은 자바의 SWITCH 문하고 비슷하다고 생각하고 보기 시작하면 좀 더 쉽게 파악할 수 있다. 실행방법은 다음과 같다.
-- 'CASE WHEN THEN ELSE END' 함수
SELECT case 5-2
WHEN 4 then ' 5 - 2 = 4 입니다. ' -- 첫번째 조건
WHEN 3 then ' 5 - 2 = 3 입니다. ' -- 두번째 조건
WHEN 2 then ' 5 - 2 = 2 입니다. ' -- 세번째 조건
ELSE ' 나는 수학을 잘 몰라요 ㅜㅜ '
END AS 결과
FROM dual ;
-- dual 은 SELECT 다음에 나오는 값들을 화면에 보여주는 위한 용도로 쓰이는 가상테이블이다.
-- 결과 ) 5-2=3 입니다.
-- ' DECODE ' 함수
SELECT decode (5-2 , 4 , '5-2=4 입니다.'
, 1 , '5-2=1 입니다.'
, 3 , '5-2=3 입니다.'
, '나는 수학을 몰라요ㅜㅜ' ) as 결과
FROM dual ;
-- dual 은 SELECT 다음에 나오는 값들을 화면에 보여주는 위한 용도로 쓰이는 가상테이블이다.
-- 결과 ) 5-2=3 입니다.
위에서 본것과 CASE WHEN THEN ELSE END 문은 자바에서 SWITCH 문과 IF 문이 합쳐진 모습이라고 보면 이해하기 쉽다. 위에 코드를 해석하자면, CASE 뒤에 오는 값( ' 5- 2 ' ) 이 첫번째 조건의 WHEN 앞에 있는 값 ( ' 4 ' ) 과 동일하다면 THEN 뒤에 있는 값( ' 5 - 2 = 4 입니다. ' ) 이 호출되는 것이고, 첫번째 조건과 일치하지 않는다면, 밑의 코드로 넘어가 두번째 조건( ' 3 ' ) 과 맞는지 확인하고 맞다면 THEN 뒤의 값( ' 5 - 2 = 3 입니다. ' ) 을 호출하고, 맞지 않다면 세 번째 조건으로 내려갈 것이다. 모든 조건에 부합하지 않는다면 , ELSE 뒤의 값 ( ' 나는 수학을 잘 몰라요 ㅜㅜ ' ) 을 호출하게 되는 것이다. 'DECODE' 문 또한 이와 비슷한 원리를 가진다. 괄호() 안에 첫번 째 입력값인 ( '5-2' ) 이 반점 ( , ) 뒤에 오는 값(4) 와 일치한다면 , 뒤의 값 ( ' 5-2 = 4 입니다') 를 호출 할 것이다. 모두 다 일치하지 않는다면, 마지막 반점 뒤에 오는 값인 ('나는 수학을 몰라요ㅜㅜ' ) 를 호출할 것이다. 이처럼, CASE 뒤의 값을 집어넣어 , 그 값과 일치하는 여부를 볼 수 도 있지만, CASE 뒤의 값을 넣지 않고 단순히 WHEN 뒤의 조건문을 넣어 , 조건문이 일치할 때의 값을 뽑아낼 수 도 있다. 이는 다음 코드를 통해서 실행할 수 있고, 다음에서 설명하도록 하겠다.
SELECT grade as 점수 ,
-- 데이터베이스에 tbl-sungjuk 이라는 테이블이 존재하고,
-- grade 라는 column에 각각의 데이터가 들어있다고 가정해보자
CASE WHEN grade >= 90 THEN 'A' -- 조건문 1
CASE WHEN grade >= 80 THEN 'B' -- 조건문 2
CASE WHEN grade >= 70 THEN 'C' -- 조건문 3
ELSE 'D'
END AS 학점
FROM tbl_sungjuk ;
TBL_SUNGJUK 이라는 테이블에서 GRADE 라는 컬럼의 데이터를 가져와서 , 우선 조건문 1 ( grade >= 90 ) 이 참인지 확인 할 것이다. 그러하여, 만약에 참이라면, THEN 뒤에 있는 값 ( ' A ' ) 를 호출할 것이고, 조건문1이 참이 아니라면, 다음 조건문2 로 넘어가서 앞의 과정을 반복할 것이다. 이를 모두 반복하고도 참인 경우가 없었다면, ELSE 문으로 가서 ELSE 문 뒤의 값인 ( ' D ' ) 를 호출할 것이다. 이로써, 오늘은 단일행 함수의 기타함수인 'CASE WHEN THEN ELSE END ' 함수와 'DECODE ' 함수에 대해서 살펴보았다.
''국비지원'의 시작' 카테고리의 다른 글
오라클 비긴즈 04 ( GROUP BY절 , GROUPING SETS , ROLLUP ) (0) | 2023.02.09 |
---|---|
오라클 비긴즈 03 ( VIEW ) (0) | 2023.02.07 |
오라클 비긴즈 01 ( SELECT의 처리순서, Null 처리함수) (0) | 2023.02.03 |
자바 비긴즈 15 ( Block , Final , Interface ) (0) | 2023.01.25 |
자바 비긴즈 14 ( StringBuilder) (0) | 2023.01.19 |