⭐⭐TO_CHAR : 날짜를 문자로 바꾼다
⭐⭐TO_DATE : 문자를 날짜로 바꾼다
⭐⭐DISTINCT : 중복행을 제거한다
- 함수보다는 명령어에 가깝다.
- 주의점: 조회 컬럼이 많은 SELECT에 DISTINCT를 쓸 경우 성능이 저하된다.
⭐CASE WHEN ELSE END : Java의 if와 유사
SELECT EMPLOYEE_ID
, SALARY
, CASE
WHEN SALARY >= 10000 THEN '특급'
WHEN SALARY >= 8000 THEN '중급'
WHEN SALARY >= 4000 THEN '초급'
ELSE '인턴'
END GRADE
FROM EMPLOYEES
;
SELECT E.EMPLOYEE_ID
, E.FIRST_NAME
, D.DEPARTMENT_NAME
, CASE
WHEN D.DEPARTMENT_NAME IS NOT NULL THEN D.DEPARTMENT_NAME
ELSE '대기발령중'
END DEPT_NAME
FROM EMPLOYEES E
LEFT JOIN DEPARTMENTS D
ON D.DEPARTMENT_ID = E.DEPARTMENT_ID
;
⭐DECODE :Java의 if와 유사
SELECT JOB_ID
, DECODE(JOB_ID, 'IT_PROG','개발'
, 'FI_MGR','경리'
, 'FI_ACCOUNT','계정'
, JOB_ID) JOB_DESC
FROM EMPLOYEES
;
⭐⭐NVL: 값이 NULL일 경우 다른 문자로 대체한다.
- 주의점: NULL을 대체하는 값의 타입은 비교하려는 컬럼의 타입과 동일해야한다.(NUMBER면 숫자 VARCHAR면 문자 등등)
SELECT COMMISSION_PCT
, NVL(COMMISSION_PCT, 0)
FROM EMPLOYEES e
;
SELECT DEPARTMENT_ID
, NVL(DEPARTMENT_ID, -1)
FROM EMPLOYEES e
;
SUBSTR
SELECT FIRST_NAME
, SUBSTR(FIRST_NAME,1,1)
, SUBSTR(FIRST_NAME,2,1)
, SUBSTR(FIRST_NAME,3,1)
FROM EMPLOYEES
;
LOWER, UPPER
SELECT FIRST_NAME
, LAST_NAME
, LOWER(FIRST_NAME) L_FIRST_NAME
, LOWER(LAST_NAME) L_LAST_NAME
FROM EMPLOYEES
;
SELECT FIRST_NAME
, LAST_NAME
, UPPER(FIRST_NAME) U_FIRST_NAME
, UPPER(LAST_NAME) U_LAST_NAME
FROM EMPLOYEES
;
⭐⭐LPAD : 문자의 왼쪽에 지정한 문자들로 채운다
RPAD: 문자의 오른쪽에 지정한 문자들로 채운다
SELECT LPAD(SALARY,6,'0')
FROM EMPLOYEES
;
SELECT LPAD(FIRST_NAME,10,'-')
FROM EMPLOYEES
;
SELECT RPAD(FIRST_NAME,10,'-')
FROM EMPLOYEES
;
MOD: 나머지 구한다
SELECT MOD(10,2)
FROM DUAL
;
⭐⭐CONCAT : 문자열을 이어 붙인다.
-- CONCAT : 문자열을 이어 붙인다.
SELECT CONCAT('A','B')
, 'D'||'F' ASD
FROM EMPLOYEES
;
-- 사원의 이름과 성을 하나의 컬럼으로 조회하기
SELECT FIRST_NAME ||' '|| LAST_NAME
FROM EMPLOYEES
;
LENGTH : 문자열의 길이를 구한다.
TRUNC : 소수점 이하를 버린다
SELECT LENGTH(' ')
, LENGTH('ㅁㄴㅇ')
FROM DUAL
;
⭐UNION ALL : 두개 이상의 셀렉트 쿼리를 하나로 합친다
SELECT
FROM
WHERE ...
UNION ALL
SELECT
FROM
WHERE ...
UNION ALL
SELECT EMPLOYEE_ID , FIRST_NAME
FROM EMPLOYEES
WHERE EMPLOYEE_ID =100
UNION ALL
SELECT *
FROM(SELECT EMPLOYEE_ID
, FIRST_NAME
FROM EMPLOYEES
ORDER BY EMPLOYEE_ID DESC)
;
SELECT FIRST_NAME
, LAST_NAME
FROM EMPLOYEES
WHERE FIRST_NAME LIKE 'A%'
UNION ALL
SELECT FIRST_NAME
, LAST_NAME
FROM(SELECT FIRST_NAME
, LAST_NAME
FROM EMPLOYEES
ORDER BY FIRST_NAME DESC)
;