[SQLD 시험 대비] 2과목. SQL 기본 및 활용 : 1장. SQL 기본 - 6. 함수(Fuction)
이번 글에서는 내장함수 중에서 단일행 함수에 대해 알아보겠다.
단일행 함수는 처리하는 데이터의 형식에 따라서 문자형, 숫자형, 날짜형, 변환형, NULL 관련 함수로 나눌 수 있다.
단일행 함수의 중요한 특징은 다음과 같다.
SELECT CONCAT(PLAYER_NAME, ' 축구선수') 선수명 FROM PLAYER;
SELECT PLAYER_NAME || ' 축구선수' AS 선수명
FROM PLAYER;
SELECT PLAYER_NAME + ' 축구선수' AS 선수명
FROM PLAYER;
SELECT STADIUM_ID, DDD||TEL as TEL, LENGTH(DDD||TEL) as T_LEN
FROM STADIUM;
SELECT STADIUM_ID, DDD+TEL a s TEL, LEN(DDD+TEL) as T_LEN
FROM STADIUM;
// Oracle
SELECT SYSDATE
FROM DUAL;
SYSDATE
// SQL Server
SELECT GETDATE() AS CURRENTTIME;
CURRENTTIME
SELECT ENAME, HIREDATE,
EXTRACT(YEAR FROM HIREDATE) 입사년도,
EXTRACT(MONTH FROM HIREDATE) 입사월,
EXTRACT(DAY FROM HIREDATE) 입사일
FROM EMP;
SELECT ENAME, HIREDATE,
YEAR(HIREDATE) 입사년도,
MONTH(HIREDATE) 입사월,
DAY(HIREDATE) 입사일
FROM EMP;
SELECT TO_CHAR(SYSDATE, 'YYYY/MM/DD') 날짜,
TO_CHAR(SYSDATE, 'YYYY. MON, DAY') 문자형
FROM DUAL;
SELECT CONVERT(VARCHAR(10),GETDATE(),111) AS CURRENTDATE
CURRNETDATE
CASE
SIMPLE_CASE_EXPRESSION 조건 or SEARCHED_CASE_EXPRESSION 조건
ELSE 표현절
END
CASE
EXPR WHEN COMPARISON_EXPR THEN RETURN_EXPR
ELSE 표현절
END
SELECT LOC,
CASE LOC
WHEN 'NEW YORK' THEN 'EAST'
WHEN 'BOSTON' THEN 'EAST'
WHEN 'CHICAGO' THEN 'CENTER'
WHEN 'DALLAS' THEN 'CENTER'
ELSE 'ETC'
END as AREA
FROM DEPT;
LOC AREA
--------- --------
NEW YORK EAST
DALLAS CENTER
CHICAGO CENTER
BOSTON EAST
4개의 행이 선택되었다.
CASE
WHEN CONDITION THEN RETURN_EXPR
ELSE 표현절
END
SELECT ENAME,
CASE WHEN SAL >= 3000 THEN 'HIGH'
WHEN SAL >= 1000 THEN 'MID'
ELSE 'LOW'
END AS SALARY_GRADE
FROM EMP;
SELECT ENAME, SAL,
CASE WHEN SAL >= 2000
THEN 1000
ELSE (CASE WHEN SAL >= 1000
THEN 500
ELSE 0 END)
END as BONUS
FROM EMP;
널 값은 아직 정의되지 않은 값으로 0 또는 공백과 다르다. 0은 숫자이고, 공백은 하나의 문자이다.
테이블을 생성할 때 NOT NULL 또는 PRIMARY KEY로 정의되지 않은 모든 데이터 유형은 널 값을 포함할 수 있다.
널 값을 포함하는 연산의 경우 결과 값도 널 값이다.
결과값을 NULL이 아닌 다른 값을 얻고자 할 때 NVL/ISNULL 함수를 사용한다.
NULL 값의 대상이 숫자 유형 데이터인 경우는 주로 0(Zero)으로, 문자 유형 데이터인 경우는 블랭크보다는 ‘x’ 같이 해당 시스템에서 의미 없는 문자로 바꾸는 경우가 많다.
SELECT PLAYER_NAME 선수명, POSITION, NVL(POSITION,'없음') 포지션
FROM PLAYER
WHERE TEAM_ID = 'K08'
SELEC PLAYER_NAME 선수명, POSITION, ISNULL(POSITION,'없음') 포지션
FROM PLAYER
WHERE TEAM_ID = 'K08'
SELECT PLAYER_NAME 선수명, POSITION,
CASE WHEN POSITION IS NULL
THEN '없음'
ELSE POSITION END AS 포지션
FROM PLAYER
WHERE TEAM_ID = 'K08'
SELECT 1 FROM DUAL WHERE 1 = 2;
와 같은 조건이 대표적인 공집합을 발생시키는 쿼리SELECT NVL(MAX(MGR), 9999) MGR
FROM EMP
WHERE ENAME='JSC';
NULLIF (EXPR1, EXPR2)
SELECT ENAME, EMPNO, MGR, NULLIF(MGR,7698) NUIF
FROM EMP;
SELECT ENAME, EMPNO, MGR,
CASE WHEN MGR = 7698
THEN NULL
ELSE MGR
END NUIF
FROM EMP;
SELECT ENAME, COMM, SAL, COALESCE(COMM, SAL) COAL
FROM EMP;
SELECT ENAME, COMM, SAL,
CASE WHEN COMM IS NOT NULL
THEN COMM
ELSE (CASE WHEN SAL IS NOT NULL
THEN SAL
ELSE NULL END)
END COAL
FROM EMP;