강의 링크 : https://www.youtube.com/watch?v=IFqbznohZSw&list=PLg_wJlcMiuKtGdlIaAZ0rOPPQuTDENnEQ&index=9
함수의 유형
단일 행 함수
⌨️ A)
SELECT PLAYER_NAME SUBSTR(PLAYER_NAME, 1, LENGTH(PLAYER_NAME)-1) || '*' AS 비식별화 FROM PLAYER; SELECT PLAYER_NAME CONTCAT(SUBSTR(PLAYER_NAME, 1, LENGTH(PLAYER_NAME)-1), '*' AS 비식별화 FROM PLAYER;
⌨️ A)
SELECT PLAYER_ID, MOD(PLAYER_ID, 4) # 암시적 데이터 타입 변환 (아래 참조) FROM PLAYER; SELECT PLAYER ID, MODE(TO_NUMBER(PLAYER_ID), 4) # 명시적 데이터 타입 변환 (아래 참조) FROM PLAYER;
변환형 함수 - 단일 행 함수
⌨️ TO_CHAR 예시
SELECT TO_CHAR(20) FROM DUAL; SELECT SYSDATE # 오늘 날짜 FROM DUAL; SELECT SYSDATE + 1 # 암시적 데이터 타입 변환 FROM DUAL; SELECT TO_CHAR(SYSDATE, 'YYYY.MM.DD.HH24.MI.SS') FROM DUAL;
⌨️ A)
SELECT PLAYER_NAME, BIRTH_DATE, TRUNC(SYSDATE - BIRTH_DATE) AS "DAY_PASSED" FROM PLAYER;
CASE Expression
표현식이지만 함수의 성격을 갖고 있음
IF ~ THEN ~ ELSE 논리 흐름
Searched Case Expression만 가능한 경우의 예
WHEN이 먼저 나오면 searched case expressionSELECT PLAYER_NAME, CASE WHEN HEIGHT > 185 THEN '장신' WHEN HEIGHT BETWEEN 175 AND 185 THEN '평균' ELSE '단신' END AS 신장 FROM PLAYER;
SELECT PLAYER_NAME, CASE WHEN HEIGHT > 185 THEN '장신' ELSE( CASE WHEN HEIGHT BETWEEN 175 AND 185 THEN '평균' ELSE '단신' END) END AS 신장 FROM PLAYER;
SELECT PLAYER_NAME, DECODE(POSITION, 'GK', '골키퍼', 'DF', '수비수', 'MF', '미드필더', 'FW', '공격수', '그 외') AS POSITION FROM PLAYER;
NULL이란?
Q) 다음 두 문장의 실행 결과를 비교하시오.
⌨️```
SELECT POSITION FROM PLAYER
WHERE PLAYER_NAME = '남현우';SELECT POSITION FROM PLAYER
WHERE PLAYER_NAME = '말도안되는이름';
⌨️ A)
위에 거 - NULL (결과가 존재함) 아래 거 - 공집합 (결과가 존재하지 않음)
NVL : 괄호안1이 NULL이 아니면 원래값, NULL이면 괄호안2 반환
NULLIF : 괄호안1 = 괄호안2이면 괄호안1 반환, 다르면 NULL 반환
COALESCE : 그 값이 없으면 딴 값이라도 반환
NVL
SELECT PLAYER_NAME, POSITION, NVL(POSITION, '없음') AS 포지션 FROM PLAYER; # 위의 문장을 IS NULL과 CASE 구문으로 표현하시오. SELECT PLAYER_NAME, CASE WHEN POSITION IS NULL THEN '없음' ELSE POSITION END AS 포지션 FROM PLAYER; SELECT PLAYER_NAME, POSITION, CASE WHEN POSITION IS NULL THEN '없음' ELSE POSITION END AS 포지션 FROM PLAYER;