์ค๋ผํด(Oracle) - (DQL) : ํจ์(๋จ์ผํ ํจ์)
- ์ค๋ผํด์์๋ (1)๋ด์ฅ ํจ์์ ์ฌ์ฉ์๊ฐ ํ์์ ์ํด์ ์ง์ ์ ์ํ (2)์ฌ์ฉ์ ์ ์ ํจ์๋ก ๋๋์ด์ง.
- ๋จ์ผํ ํจ์์ ๋ค์คํ ํจ์(์ง๊ณํจ์)๋ก ๋๋์ด์ง.
DUAL ํ ์ด๋ธ ํ์ฉ
SYS ๊ณ์ ์์ ์ ๊ณตํ๋ ํ ์ด๋ธ๋ก ํจ์๋ ๊ณ์ฐ์์ ํ ์ด๋ธ ์ฐธ์กฐ ์์ด ์คํํ๊ธฐ ์ํ DUMMY ํ ์ด๋ธ
์ฆ, ๊ฐ์์ ํ ์ด๋ธ!
์ซ์ํจ์
ABS (์ ๋๊ฐ)
SELECT ABS(-10) FROM DUAL; -- 10
ROUND (๋ฐ์ฌ๋ฆผ)
SELECT ROUND(1234.5678) AS ROUND FROM DUAL; -- ๋ฐ์ฌ๋ฆผ ์๋ฆฌ๋ฅผ ์ง์ ํ์ง ์์ผ๋ฉด ์์์ ์ดํ ์ฒซ๋ฒ์งธ ์๋ฆฌ์์ ๋ฐ์ฌ๋ฆผ
SELECT ROUND(1234.5678, 0) AS ROUND_0, -- 1235
ROUND(1234.5678,1) AS ROUND_1, -- 1234.6
ROUND(1234.5678,3) AS ROUND_3, -- 1234.568
ROUND(1234.5678,4) AS ROUND_4, -- 1234.5678
ROUND(1234.5678,-1) AS ROUND_๋ง์ด๋์ค1, -- 1230
ROUND(1234.5678,-2) AS ROUND_๋ง์ด๋์ค2 -- 1200
FROM DUAL;
TRUNC (๋ฒ๋ฆผ)
SELECT TRUNC(1234.5678, 0) AS TRUNC_0, -- 1234
TRUNC(1234.5678,1) AS TRUNC_1, -- 1234.5
TRUNC(1234.5678,3) AS TRUNC_3, -- 1234.567
TRUNC(1234.5678,4) AS TRUNC_4, -- 1234.5678
TRUNC(1234.5678,-1) AS TRUNC_๋ง์ด๋์ค1, -- 1230
TRUNC(1234.5678,-2) AS TRUNC_๋ง์ด๋์ค2 -- 1200
FROM DUAL;
MOD (๋๋จธ์ง)
SELECT MOD(21,5) FROM DUAL; -- 1
CEIL (์์์ ์ดํ๊ฐ ์์ผ๋ฉด ๋ฌด์กฐ๊ฑด ์ฌ๋ฆผ)
SELECT CEIL(34.34) FROM DUAL; -- 35
FLOOR (์์์ ์ดํ๊ฐ ์์ผ๋ฉด ๋ฌด์กฐ๊ฑด ๋ ๋ฆผ)
SELECT FLOOR(34.99999) FROM DUAL; -- 34
POWER (์ ์ A๋ฅผ ์ ์ B๋งํผ ์ ๊ณฑ)
SELECT POWER(2,4) FROM DUAL; -- 16
๋ฌธ์ ํจ์
- ๋ฌธ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณตํ๊ฑฐ๋ ๋ฌธ์ ๋ฐ์ดํฐ๋ก ๋ถํฐ ํน์ ๊ฒฐ๊ณผ๋ฅผ ์ป๊ณ ์ ํ ๋ ์ฌ์ฉ
UPPER (๋๋ฌธ์๋ก ๋ณ๊ฒฝ)
LOWER (์๋ฌธ์๋ก ๋ณ๊ฒฝ)
SELECT ENAME, UPPER(ENAME), LOWER(ENAME) FROM EMP;
INITCAP (์ฒซ ๊ธ์ ๋๋ฌธ์, ๋๋จธ์ง ์๋ฌธ์)
SELECT INITCAP('yoo young yoo') FROM DUAL;
๐ธ WHERE ์กฐ๊ฑด์ ๊ณผ ํจ๊ป ์ฌ์ฉ
SELECT * FROM EMP WHERE UPPER(ENAME) = UPPER('james');
๐ธ UPPER ํจ์์ LIKE ์ฌ์ฉ
SELECT * FROM EMP WHERE LOWER(ENAME) LIKE LOWER('%JA%');
๐ธ ์ฌ์ ์ด๋ฆ์ ๋๋ฌธ์, ์ง์ฑ ์ ์ฒซ์ ๋๋ฌธ์ ๋๋จธ์ง๋ ์๋ฌธ์ ๋ณ๊ฒฝํ๊ณ ๊ธ์ฌ๊ฐ ๋์ ์์ผ๋ก ์ถ๋ ฅ
SELECT UPPER(ENAME), INITCAP(JOB) FROM EMP ORDER BY SAL DESC;
LENGTH (๋ฌธ์์ด ๊ธธ์ด)
SELECT ENAME, LENGTH(ENAME) FROM EMP;
LENGTHB (๋ฌธ์์ด ๋ฐ์ดํธ ์)
SELECT LENGTH('ํ'), LENGTHB('ํ') FROM DUAL;
LENGTH('ํ') : 1 , LENGTHB('ํ') : 3
์ค๋ผํด XE ๋ฒ์ ์ ๋ฌธ์ 1๊ฐ๋ 3byte
๐ธ ์ด๋ฆ์ ๊ธธ์ด๊ฐ 5์ ๊ฐ๊ฑฐ๋ ํฐ ์ฌ์์ ์ด๋ฆ, ์ฌ์๋ฒํธ, ์ง์ฑ ์ ์ฐ๋ด ์์ผ๋ก ํ์ (๋จ, ๋ณด๋์ค ์ ์ธ)
SELECT ENAME, EMPNO, JOB, SAL*12 AS ์ฐ๋ด
FROM EMP
WHERE LENGTH(ENAME) >= 5
ORDER BY ์ฐ๋ด DESC;
๐ธ ์ง์ฑ ์ด๋ฆ์ด 6์ ์ด์์ด๊ณ COMM์ด ์๋ ์ฌ์ ์ถ๋ ฅ
SELECT * FROM EMP
WHERE LENGTH(JOB) >= 6
AND COMM IS NOT NULL AND COMM != 0;
SUBSTR / SUBSTRB
- ๋์ ๋ฌธ์์ด์ด๋ ์ปฌ๋ผ์ ์๋ฃ์์ ์์์์น๋ถํฐ ๊ธธ์ด๋งํผ์ ๋ฌธ์์ด ๋ฐํ
- ์ธ๋ฑ์ค ๊ฐ๋ ์๋! (1๋ถํฐ ์์)
SUBSTR(๋ฌธ์์ด๋ฐ์ดํฐ, ์์์์น, ๊ธธ์ด)
SELECT JOB, SUBSTR(JOB,1,2), SUBSTR(JOB,3,2), SUBSTR(JOB,5)
FROM EMP ORDER BY JOB;
๐ธ SUBSTR ํจ์์ ๋ค๋ฅธ ํจ์ ํจ๊ป ์ฌ์ฉ
SELECT JOB,
-- JOB์ ๊ธธ์ด๋ 5์ด๊ณ 5์ ๋ํ ์์๋ฅผ ์ทจํ๋ฉด ๋ค์์ ๋ถํฐ ์์๊ฐ์ด ์ปค์ง๋ฉด์ ์ฝ์ด ๋
SUBSTR(JOB,-LENGTH(JOB)),
SUBSTR(JOB, -LENGTH(JOB), 2),
SUBSTR(JOB, -3) -- ๋ค์์ ๋ถํฐ 3๊ธ์
FROM EMP;
INSTR
- ๋ฌธ์์ด ๋ฐ์ดํฐ ์์ ํน์ ๋ฌธ์๋ ๋ฌธ์์ด์ด ์ด๋์ ํฌํจ๋์ด ์๋์ง ์๊ณ ์ ํ ๋ ์ฌ์ฉ
SELECT INSTR('HELLO, ORACLE!!','L') AS INSTR_1,
INSTR('HELLO, ORACLE!!','L',5) AS INSTR_2, -- ์์ ์์น ์ง์ ๊ฐ๋ฅ!
INSTR('HELLO, ORACLE!!','L',2,2) AS INSTR_3 FROM DUAL; -- ์์ ์์น์์ ์ฐพ์ ๋ฌธ์๊ฐ ๋ช๋ฒ์งธ ์ธ์ง ์ง์
REPLACE (๋ฌธ์ ๋์ฒด)
- ํน์ ๋ฌธ์์ด ๋ฐ์ดํฐ์ ํฌํจ๋ ๋ฌธ์๋ฅผ ๋ค๋ฅธ ๋ฌธ์๋ก ๋์ฒดํ ๋ ์ฌ์ฉ
- ๋ฌธ์์ด์ ๋ฃ์ง ์์ผ๋ฉด ์ญ์ ๋จ
SELECT '010-1234-5678' AS ๋ณ๊ฒฝ์ด์ ,
REPLACE('010-1234-5678', '-', ' ') AS ํ์ดํ์๊ณต๋ฐฑ์ผ๋ก,
REPLACE('010-1234-5678', '-') AS ํ์ดํ์ญ์
FROM DUAL;
LPAD / RPAD (ํน์ ๋ฌธ์๋ก ์ฑ์ฐ๋..)
- ๊ณต๊ฐ์ ์นธ ์๋ฅผ ์ง์ ํ๊ณ , ๋น ์นธ๋งํผ ํน์ ๋ฌธ์๋ก ์ฑ์ฐ๋ ๊ธฐ๋ฅ
SELECT LPAD('ORACLE', 10, '+') FROM DUAL; -- ++++ORACLE
SELECT RPAD('ORACLE', 10, '+') FROM DUAL; -- ORACLE++++
SELECT 'ORACLE', -- ORACLE
LPAD('ORACLE', 10, '#') AS LPAD_1, -- ####ORACLE
RPAD('ORACLE', 10, '*') AS RPAD_1, -- ORACLE****
LPAD('ORACLE', 10) AS LPAD_2, -- (๊ณต๋ฐฑ) ORACLE
RPAD('ORACLE', 10) AS RPAD_2 -- ORACLE (๊ณต๋ฐฑ)
FROM DUAL;
๐ธ ์์ฉ ์์ ) ๊ฐ์ธ์ ๋ณด ๋ท์๋ฆฌ๋ฅผ * ํ์๋ก ์ถ๋ ฅํ๊ธฐ
SELECT
RPAD('940909-', 14, '*') AS ์ฃผ๋ฏผ๋ฒํธ,
RPAD('010-1234-', 13, '*') AS ํธ๋ํฐ๋ฒํธ
FROM DUAL;
CONCAT (๋ ๋ฌธ์์ด ํฉ์น๋)
SELECT CONCAT(EMPNO, ENAME) AS ์ฐ๊ฒฐ1,
CONCAT(EMPNO, CONCAT(' - ', ENAME)) AS ์ฐ๊ฒฐ2
FROM EMP
WHERE ENAME = 'JAMES';
TRIM / LTRIM / RTRIM (์ง์ฐ๊ธฐ)
- ๋ฌธ์์ด ๋ด์์ ํน์ ๋ฌธ์๋ฅผ ์ง์ฐ๊ธฐ ์ํด์ ์ฌ์ฉ
SELECT '[' || TRIM(' _ORACLE_ ') || ']' AS TRIM,
'[' || LTRIM(' _ORACLE_ ') || ']' AS LTRIM,
'[' || LTRIM('<_ORACLE_>', '<_') || ']' AS LTRIM_2,
'[' || RTRIM(' _ORACLE_ ') || ']' AS RTRIM,
'[' || RTRIM('<_ORACLE_>', '_>') || ']' AS RTRIM_2
FROM DUAL;
๋ ์ง ํจ์
SYSDATE (ํ์ฌ ๋ ์ง)
SELECT SYSDATE FROM DUAL;
SELECT SYSDATE AS NOW, -- ์ด์์ฒด์ ์์ ์ฝ์ด์จ ํ์ฌ ๋ ์ง ์ ๋ณด
SYSDATE-1 AS YESTERDAY, -- ์ด์์ฒด์ ์์ ์ฝ์ด์จ ๋ ์ง ์ ๋ณด์์ 1์ผ์ ๋บ
SYSDATE+1 AS TOMORROW -- ์ด์์ฒด์ ์์ ์ฝ์ด์จ ๋ ์ง ์ ๋ณด์์ 1์ผ์ ๋ํจ
FROM DUAL;
ADD_MONTHS
- ๋ช ๊ฐ์ ์ดํ์ ๋ ์ง๋ฅผ ๊ตฌํ๋ ํจ์
- ํน์ ๋ ์ง์ ์ง์ ํ ๊ฐ์ ์ดํ ๋ ์ง ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ๋ ํจ์
- ADD_MONTHS(๋ ์ง ๋ฐ์ดํฐ, ๋ํ ๊ฐ์ ์)
SELECT SYSDATE,
ADD_MONTHS(SYSDATE, 5)
FROM DUAL;
๐ธ (EMP). ์ฌ์์ ๋ํด ์ฌ์๋ฒํธ, ์ด๋ฆ, ์ ์ฌ์ผ, ์ ์ฌ 10์ฃผ๋ ๋ ์ง ์ถ๋ ฅ
SELECT EMPNO, ENAME, HIREDATE,
ADD_MONTHS(HIREDATE, 120) AS ์
์ฌ10์ฃผ๋
FROM EMP;
๐ธ (DUAL). ํ์ฌ ์๊ฐ๊ณผ 8๊ฐ์ ์ดํ ์๊ฐ ์ถ๋ ฅ
SELECT SYSDATE AS ํ์ฌ์๊ฐ,
ADD_MONTHS(SYSDATE, 8) AS "8๊ฐ์์ดํ"
FROM DUAL;
MONTHS_BETWEEN
- ๋ ๋ ์ง๊ฐ์ ๊ฐ์ ์ ์ฐจ์ด๋ฅผ ๊ตฌํ๋ ํจ์
- ๋ํ
์ผํ๊ฒ ๋์ค๊ธฐ ๋๋ฌธ์ ์์์ ๋ ๋ฆฌ๋
TRUNC
๊ธฐ๋ฅ ์จ์ค์ผ ํจ.
SELECT EMPNO, ENAME, HIREDATE, SYSDATE,
MONTHS_BETWEEN(HIREDATE, SYSDATE) AS MONTH1,
FLOOR(MONTHS_BETWEEN(SYSDATE, HIREDATE)) AS MONTH2,
TRUNC(MONTHS_BETWEEN(SYSDATE, HIREDATE)) AS MONTH3
FROM EMP;
NEXT_DAY
- ๋์์ค๋ ์์ผ์ ๋ ์ง๋ฅผ ๊ตฌํ๋ ํจ์
- NEXT_DAY(๋ ์ง๋ฐ์ดํฐ, ์์ผ๋ฌธ์) : ๋ ์ง ๊ธฐ์ค์ผ๋ก ๋์์ค๋ ์์ผ์ ๋ ์ง ์ถ๋ ฅ
SELECT SYSDATE, NEXT_DAY(SYSDATE, '์์์ผ') FROM DUAL;
LAST_DAY
- ๋ฌ์ ๋ง์ง๋ง ๋ ์ง๋ฅผ ๊ตฌํ๋ ํจ์
- LAST_DAY(๋ ์ง ๋ฐ์ดํฐ) : ๋ ์ง๊ฐ ์ํ ๋ฌ์ ๋ง์ง๋ง ๋ ์ง ์ถ๋ ฅ
SELECT SYSDATE, LAST_DAY(SYSDATE) FROM DUAL;
EXTRACT (๋ ์ง ์ ๋ณด ์ถ์ถ)
SELECT EXTRACT(YEAR FROM DATE '1998-03-07') FROM DUAL; -- 1998
SELECT * FROM EMP
WHERE EXTRACT(MONTH FROM HIREDATE) = 12; -- ์
์ฌ์ผ์ด 12์์ธ ์ฌ๋ ์ถ๋ ฅ
SELECT EXTRACT(MONTH FROM SYSDATE) FROM DUAL; -- ํ์ฌ ๋ช์์ธ์ง
ํ ๋ณํ ํจ์
- ์ค๋ผํด๋ ์๋ฐ์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ช ์์ ํ๋ณํ๊ณผ ์๋(๋ฌต์์ ) ํ๋ณํ์ด ์์ต๋๋ค.
- ์๋(๋ฌต์์ ) ํ๋ณํ : ์ซ์์ ๋ฌธ์ ์๋ฃํ์ ์ฐ์ฐ์ ์๋์ผ๋ก ์ซ์๋ก ๋ณํ ๋ฉ๋๋ค.
(์๋ฐ์ ์ฐจ์ด์ )
SELECT EMPNO, ENAME, EMPNO + '500' FROM EMP; -- ์๋ ํ๋ณํ
SELECT EMPNO, ENAME, EMPNO + 'ABCD' FROM EMP; -- ERROR!!
TO_CHAR
- ๋ ์ง, ์ซ์ ๋ฐ์ดํฐ๋ฅผ ๋ฌธ์ ๋ฐ์ดํฐ๋ก ๋ณํํ๋ ํจ์
- ์ฃผ๋ก ๋ ์ง ๋ฐ์ดํฐ๋ฅผ ๋ฌธ์ ๋ฐ์ดํฐ๋ก ๋ณํํ ๋ ์์ฃผ ์ฌ์ฉํจ.
- TO_CHAR(๋ ์ง๋ฐ์ดํฐ, ์ถ๋ ฅ๋๊ธธ ์ํ๋ ๋ฌธ์์ด ํฌ๋งท)
SELECT
TO_CHAR(SYSDATE, 'YYYY/MM/DD HH24:MI:SS') AS "ํ์ฌ ๋ ์ง์ ์๊ฐ"
FROM DUAL;
๐ธ ๋ค์ํ ํ์์ผ๋ก ์ถ๋ ฅํ๊ธฐ
SELECT SYSDATE,
TO_CHAR(SYSDATE, 'CC') AS "๋ช ์ธ๊ธฐ",
TO_CHAR(SYSDATE, 'YY') AS "์ฐ๋",
TO_CHAR(SYSDATE, 'YYYY/MM/DD PMHH24:MI') AS "์ฐ/์/์ผ ์:๋ถ",
TO_CHAR(SYSDATE, 'Q') AS ์ฟผํฐ,
TO_CHAR(SYSDATE, 'DD') AS ์ผ,
TO_CHAR(SYSDATE, 'DDD') AS ๊ฒฝ๊ณผ์ผ,
TO_CHAR(SYSDATE, 'HH') AS "12์๊ฐ์ ",
TO_CHAR(SYSDATE, 'HH12') AS "12์๊ฐ์ 2",
TO_CHAR(SYSDATE, 'HH24') AS "24์๊ฐ์ ",
TO_CHAR(SYSDATE, 'W') AS ๋ช์ฃผ์ฐจ
FROM DUAL;
SELECT SYSDATE,
TO_CHAR(SYSDATE, 'HH24:MI:SS') AS MM,
TO_CHAR(SYSDATE, 'HH12:MI:SS AM') AS MON_KR,
TO_CHAR(SYSDATE, 'HH:MI:SS P.M.') AS MON_JP
FROM DUAL;
NLS(National Language Support)
- ํน์ ๊ตญ๊ฐ ์ธ์ด ํ์์ ๋ง์ถฐ์ ๋ ์ง ์ถ๋ ฅ
SELECT SYSDATE,
TO_CHAR(SYSDATE, 'MM') AS MM,
TO_CHAR(SYSDATE, 'MON', 'NLS_DATE_LANGUAGE = KOREAN') AS MON_KR,
TO_CHAR(SYSDATE, 'MON', 'NLS_DATE_LANGUAGE = JAPANESE') AS MON_JP,
TO_CHAR(SYSDATE, 'MON', 'NLS_DATE_LANGUAGE = ENGLISH') AS MON_EN,
TO_CHAR(SYSDATE, 'MONTH', 'NLS_DATE_LANGUAGE = KOREAN') AS MON_KR,
TO_CHAR(SYSDATE, 'MONTH', 'NLS_DATE_LANGUAGE = JAPANESE') AS MON_JP,
TO_CHAR(SYSDATE, 'MONTH', 'NLS_DATE_LANGUAGE = ENGLISH') AS MON_EN
FROM DUAL;
SELECT SYSDATE,
TO_CHAR(SYSDATE, 'MM') AS MM,
TO_CHAR(SYSDATE, 'DD', 'NLS_DATE_LANGUAGE = KOREAN') AS MON_KR,
TO_CHAR(SYSDATE, 'DY', 'NLS_DATE_LANGUAGE = JAPANESE') AS MON_JP,
TO_CHAR(SYSDATE, 'DY', 'NLS_DATE_LANGUAGE = ENGLISH') AS MON_EN,
TO_CHAR(SYSDATE, 'DAY', 'NLS_DATE_LANGUAGE = KOREAN') AS MON_KR,
TO_CHAR(SYSDATE, 'DAY', 'NLS_DATE_LANGUAGE = JAPANESE') AS MON_JP,
TO_CHAR(SYSDATE, 'DAY', 'NLS_DATE_LANGUAGE = ENGLISH') AS MON_EN
FROM DUAL;
์ซ์ ๋ฐ์ดํฐ ํ์ ์ง์ ํ ์ถ๋ ฅ
- 9 : ์ซ์์ ํ์๋ฆฌ๋ฅผ ์๋ฏธํ๊ณ , ๋น ์๋ฆฌ๋ฅผ ์ฑ์ฐ์ง ์์
- 0 : ๋น ์๋ฆฌ๋ฅผ 0์ผ๋ก ์ฑ์
- $ : ๋ฌ๋ฌ ํ์๋ฅผ ๋ถ์
- L : ๊ตญ๊ฐ ํํ ๋จ์ ํ์(์ด์์ฒด์ ์ธ์ด ๊ธฐ์ค?)
- . : ์์์ ํ์
- , : ์ฒ ๋จ์ ํ์
SELECT SAL,
TO_CHAR(SAL, '$999,999') AS SAL_$, -- ๋ฌ๋ฌ ํ์ํ๊ณ ๋น ์๋ฆฌ ์ฑ์ฐ์ง ์์
TO_CHAR(SAL, 'L999,999') AS SAL_L, -- ์ง์ญ ํํ ํ์. ์ฒ ๋จ์์ ,๋ฃ์
TO_CHAR(SAL, '999,999.00') AS SAL_1, -- ์์์ ์ดํ 2์๋ฆฌ๊น์ง ํ์
TO_CHAR(SAL, '$000,999,999.00') AS SAL_2, -- ๋น ์๋ฆฌ๋ฅผ 0์ผ๋ก ์ฑ์
FROM EMP;
TO_NUMBER
- ์ซ์ ํ์ ์ ๋ฌธ์์ด์ ์ซ์ ๋ฐ์ดํฐ ํ์ ์ผ๋ก ๋ณํํด์ฃผ๋ ํจ์
- ์๋ ํ๋ณํ ํด์ฃผ๊ธฐ ๋๋ฌธ์ ์ ์ ์ฐ์.
SELECT '1300' - '1500', '1300' + '1500' FROM DUAL;
-- TO_NUMBER ์์จ๋ ์๋ ํ๋ณํ ํด์ค.
TO_DATE
- ์ํ๋ ํฌ๋งท ํํ์ ๋ ์ง ๋ฐ์ดํฐ๋ก ๋ณํํ๋ ํจ์
- TO_CHAR์ ๋ณด์ด๋๊ฑด ๋๊ฐ์ง๋ง ๋ณํ๋๋ ๋ฐฉํฅ์ด ๋ค๋ฅด๋ค.
SELECT TO_DATE('22/08/20', 'YY/MM/DD') FROM DUAL; -- ๋ฌธ์ -> DATE
SELECT TO_CHAR(SYSDATE, 'YY/MM/DD') FROM DUAL; -- DATE -> ๋ฌธ์
SELECT *
FROM EMP
WHERE HIREDATE < TO_DATE('1981/01/01', 'YY/MM/DD');
- ๊ทผ๋ฐ.. DATE๋ ๋ฌธ์์ด(๋ ์)๊ฐ ํ์ ์ด ๋ค๋ฅธ๋ฐ๋ ๋น๊ต๊ฐ ๋จ..(?) ๐คฃ
๐ธ 1981๋ 6์ 1์ผ ์ดํ์ ์ ์ฌํ ์ฌ์ ์ ๋ณด ์ถ๋ ฅํ๊ธฐ
SELECT *
FROM EMP
WHERE HIREDATE > TO_DATE('1981/06/01', 'YY/MM/DD');
NULL ํจ์
NVL
- NVL(๋ฐ์ดํฐ์ด, ์์ ๋ฐ์ดํฐ๊ฐ NULL์ผ ๊ฒฝ์ฐ ๋ฐํํ ๋ฐ์ดํฐ)
SELECT EMPNO, ENAME, SAL, COMM, SAL*12+NVL(COMM,0) AS "์ฐ๋ด(COMMํฌํจ)"
FROM EMP;
NVL2
- NVL2(๊ฒ์ฌํ ๋ฐ์ดํฐ์ด, NULL์ด ์๋ ๊ฒฝ์ฐ์ ๋ํ ๊ณ์ฐ์, NULL์ธ ๊ฒฝ์ฐ์ ๋ํ ๊ณ์ฐ์)
SELECT EMPNO, ENAME, COMM,
NVL2(COMM, 'O', 'X') AS "NULL ์ฌ๋ถ ํ์",
NVL2(COMM, SAL*12+COMM, SAL*12) AS "์ฐ๋ด"
FROM EMP;
NULLIF
- ๋ ๊ฐ์ ๋น๊ตํ์ฌ ๋์ผ์ธ์ง ์๋์ง์ ๋ํ ๊ฒฐ๊ณผ ๋ฐํ
- ๊ฐ์ผ๋ฉด NULL ๋ฐํ, ๋ค๋ฅด๋ฉด ์ฒซ๋ฒ์งธ ๊ฐ ๋ฐํ
SELECT NULLIF(10,10), NULLIF('A', 'B') FROM DUAL;
DECODE ๋ฌธ
- ์ฃผ์ด์ง ๋ฐ์ดํฐ ๊ฐ์ด ์กฐ๊ฑด ๊ฐ๊ณผ ์ผ์นํ๋ ๊ฐ์ ์ถ๋ ฅํ๊ณ , ์ผ์นํ๋ ๊ฐ์ด ์์ผ๋ฉด ๊ธฐ๋ณธ๊ฐ ์ถ๋ ฅ
- ์กฐ๊ฑด๋ฌธ ๋๋ SWITCH๋ฌธ๊ณผ ์ ์ฌํจ!
SELECT EMPNO, ENAME, JOB, SAL,
DECODE(JOB,
'MANAGER', SAL*1.1,
'SALESMAN', SAL*1.05,
'ANALYST', SAL,
SAL*1.03) AS ๊ธ์ฌ์ธ์
FROM EMP;
CASE ๋ฌธ
- ์ฃผ์ด์ง ๋ฐ์ดํฐ ๊ฐ์ด ์กฐ๊ฑด ๊ฐ๊ณผ ์ผ์นํ๋ ๊ฐ์ ์ถ๋ ฅํ๊ณ , ์ผ์นํ๋ ๊ฐ์ด ์์ผ๋ฉด ๊ธฐ๋ณธ๊ฐ ์ถ๋ ฅ
SELECT EMPNO, ENAME, JOB, SAL,
CASE JOB
WHEN 'MANAGER' THEN SAL*1.1
WHEN 'SALESMAN' THEN SAL*1.05
WHEN 'ANALYST' THEN SAL
ELSE SAL*1.03
END AS ๊ธ์ฌ์ธ์
FROM EMP;
์ด ๊ฐ์ ๋ฐ๋ผ ์ถ๋ ฅ๊ฐ์ด ๋ฌ๋ผ์ง๋ CASE ๋ฌธ
- if - else ๋ฌธ๊ณผ ์ ์ฌํจ
THEN
์ ์๋ ๋ฌธ์์ด ๋ฃ์ ๋ ' ' ์์๋ฐ์ดํ๋ก ๋ฃ์ด์ผ ํจ.
SELECT EMPNO, ENAME, COMM,
CASE
WHEN COMM IS NULL THEN 'ํด๋น ์ฌํญ ์์'
WHEN COMM = 0 THEN '์๋น์์'
WHEN COMM > 0 THEN '์๋น : ' || COMM
END AS ์๋นํ์
FROM EMP;
๐ธ์ค์ต๋ฌธ์ ๐ถ
SELECT EMPNO,
RPAD(SUBSTR(EMPNO,1,2),4,'*') AS MASKING_EMPNO,
ENAME,
RPAD(SUBSTR(ENAME,1,1),5,'*') AS MASKING_ENAME
FROM EMP
WHERE LENGTH(ENAME) >= 5 AND LENGTH(ENAME) < 6;
SELECT EMPNO, ENAME, SAL,
TRUNC(SAL/21.5,2) AS DAY_PAY,
ROUND(SAL/21.5/8,2) AS TIME_PAY
FROM EMP;
SELECT EMPNO, ENAME,
TO_CHAR(HIREDATE, 'YYYY/MM/DD') AS HIREDATE,
TO_CHAR(NEXT_DAY(ADD_MONTHS(HIREDATE, 3),'์์์ผ'),'YYYY/MM/DD') AS R_JOB,
NVL(TO_CHAR(COMM), 'N/A') AS COMM
FROM EMP;
SELECT EMPNO, ENAME, NVL(MGR,0) AS MGR,
CASE
WHEN MGR IS NULL THEN 0000
WHEN SUBSTR(MGR,1,2) = 75 THEN 5555
WHEN SUBSTR(MGR,1,2) = 76 THEN 6666
WHEN SUBSTR(MGR,1,2) = 77 THEN 7777
WHEN SUBSTR(MGR,1,2) = 78 THEN 8888
ELSE MGR
END AS CHG_MGR
FROM EMP;
๐ถSCOTT ๊ณ์ ๋ฌธ์ ๐ธ
1. ์ค๋ ๋ ์ง์ ๋ํ ์ ๋ณด ์กฐํ
SELECT SYSDATE FROM EMP;
2. EMPํ ์ด๋ธ์์ ์ฌ๋ฒ, ์ฌ์๋ช , ๊ธ์ฌ ์กฐํ (๋จ, ๊ธ์ฌ๋ 100๋จ์๊น์ง์ ๊ฐ๋ง ์ถ๋ ฅ ์ฒ๋ฆฌํ๊ณ ๊ธ์ฌ ๊ธฐ์ค ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ)
SELECT EMPNO, ENAME,
TRUNC(SAL,-2) AS SAL
FROM EMP
ORDER BY SAL DESC;
3. EMPํ ์ด๋ธ์์ ์ฌ์๋ฒํธ๊ฐ ํ์์ธ ์ฌ์๋ค์ ์กฐํ
SELECT *
FROM EMP
WHERE MOD(EMPNO,2) = 1;
4. EMPํ ์ด๋ธ์์ ์ฌ์๋ช , ์ ์ฌ์ผ ์กฐํ (๋จ, ์ ์ฌ์ผ์ ๋ ๋์ ์์ ๋ถ๋ฆฌ ์ถ์ถํด์ ์ถ๋ ฅ)
SELECT ENAME,
TO_CHAR(HIREDATE, 'YYYY') AS HIREYEAR,
TO_CHAR(HIREDATE, 'MM') AS HIREMONTH
FROM EMP;
5. EMPํ ์ด๋ธ์์ 9์์ ์ ์ฌํ ์ง์์ ์ ๋ณด ์กฐํ
SELECT *
FROM EMP
WHERE EXTRACT(MONTH FROM HIREDATE) = 9;
6. EMPํ ์ด๋ธ์์ 81๋ ๋์ ์ ์ฌํ ์ง์ ์กฐํ
SELECT *
FROM EMP
WHERE EXTRACT(YEAR FROM HIREDATE) = 1981;
7. EMPํ ์ด๋ธ์์ ์ด๋ฆ์ด 'E'๋ก ๋๋๋ ์ง์ ์กฐํ
SELECT *
FROM EMP
WHERE ENAME LIKE '%E';
8. EMPํ ์ด๋ธ์์ ์ด๋ฆ์ ์ธ๋ฒ์งธ ๊ธ์๊ฐ 'R'์ธ ์ง์์ ์ ๋ณด ์กฐํ
SELECT *
FROM EMP
WHERE ENAME LIKE '__R%';
9. EMPํ ์ด๋ธ์์ ์ฌ๋ฒ, ์ฌ์๋ช , ์ ์ฌ์ผ, ์ ์ฌ์ผ๋ก๋ถํฐ 40๋ ๋๋ ๋ ์ง ์กฐํ
SELECT EMPNO, ENAME, HIREDATE,
ADD_MONTHS(HIREDATE, 480) AS "์
์ฌ์ผ40์ฃผ๋
"
FROM EMP;
10. EMPํ ์ด๋ธ์์ ์ ์ฌ์ผ๋ก๋ถํฐ 38๋ ์ด์ ๊ทผ๋ฌดํ ์ง์์ ์ ๋ณด ์กฐํ
SELECT *
FROM EMP
WHERE TRUNC(MONTHS_BETWEEN(SYSDATE, HIREDATE)) >= 456;
11. ์ค๋ ๋ ์ง์์ ๋ ๋๋ง ์ถ์ถ
SELECT TO_CHAR(SYSDATE, 'YYYY')
FROM DUAL;