2025. 6. 24. 17:03ใDB
๐์ค๋ผํด ํจ์ ์ค์ต ์ ๋ฆฌ
์ด๋ฒ ๊ฒ์๊ธ์ SQLD ์๊ฒฉ์ฆ์ ๊ณต๋ถํ๋ ์์ ์ค์ตํ๋ ๋ด์ฉ์ ๋ฐํ์ผ๋ก, ์ต๊ทผ ์ค๋ผํด ์์ ์ ๋ค์ ๋ค์ผ๋ฉฐ ๋ณต์ต ๊ฒธ ์ ๋ฆฌํ ๊ธ์ ๋๋ค. ์ฃผ์ ๋ฌธ์์ด, ์ซ์, ๋ ์ง ํจ์์ NULL ์ฒ๋ฆฌ ํจ์ ๋ฑ์ ํฌํจํ๋ฉฐ, ๋์ค์ ์ค๋ฌด๋ ์ํ ์ ํผ๋๋ฐฑ ๋ชฉ์ ์ผ๋ก ๋์ง๊ธฐ ์ข๊ฒ ๊ตฌ์ฑํ์ต๋๋ค.
๐ SQL ๋ฌธ ์์ฑ ์์์ ์คํ ์์
- ์์ฑ ์์: SELECT โ FROM โ WHERE โ GROUP BY โ HAVING โ ORDER BY
- ์คํ ์์: FROM โ WHERE โ GROUP BY โ HAVING โ SELECT โ ORDER BY
๐ ๋ฌธ์์ด ํจ์
- UPPER() : ์๋ฌธ์๋ฅผ ๋๋ฌธ์๋ก ๋ณํ
- LOWER() : ๋๋ฌธ์๋ฅผ ์๋ฌธ์๋ก ๋ณํ
- LENGTH() : ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ๋ฐํ
- SUBSTR() : ๋ฌธ์์ด์ ํน์ ๋ถ๋ถ์ ์ถ์ถ
- REPLACE() : ๋ฌธ์์ด ๋ด ํน์ ๋ฌธ์๋ฅผ ๋ค๋ฅธ ๋ฌธ์๋ก ์นํ
SELECT FIRST_NAME,
UPPER(FIRST_NAME) AS "๋๋ฌธ์",
LOWER(FIRST_NAME) AS "์๋ฌธ์"
FROM EMPLOYEES;
SELECT LENGTH('HELLO WORLD') AS "๋ฌธ์์ด ๊ธธ์ด"
FROM DUAL;
SELECT SUBSTR('๊ด์ฃผ์ธ๊ณต์ง๋ฅ์ฌ๊ดํ๊ต ๊ฐ๊ฐ', 7, 4) AS "์ฌ๊ดํ๊ต"
FROM DUAL;
SELECT REPLACE('์ธ๊ณต์ง๋ฅ#์ฌ๊ดํ๊ต', '#', '-') AS "์นํ๊ฒฐ๊ณผ"
FROM DUAL;
๐ข ์ซ์ ํจ์
- ROUND() : ๋ฐ์ฌ๋ฆผ
- MOD() : ๋๋จธ์ง ๊ฐ์ ๊ตฌํจ
SELECT ROUND(12345.56789, 2) AS "์์์ 2์๋ฆฌ ๋ฐ์ฌ๋ฆผ",
MOD(123, 10) AS "๋๋จธ์ง"
FROM DUAL;
๐ ๋ ์ง ํจ์
- SYSDATE : ํ์ฌ ๋ ์ง์ ์๊ฐ
SELECT SYSDATE
FROM DUAL;
โป ๋ ์ง ํฌ๋งท ์ค์ : ๋๊ตฌ > ํ๊ฒฝ์ค์ > NLS > ๋ ์งํ์: YYYY-MM-DD HH24:MI:SS
๐ ๋ช ์์ ํ๋ณํ ํจ์
- TO_NUMBER() : ๋ฌธ์์ด → ์ซ์
- TO_CHAR() : ์ซ์/๋ ์ง → ๋ฌธ์์ด
- TO_DATE() : ๋ฌธ์์ด → ๋ ์ง
SELECT TO_NUMBER('1,000', '9999') + 900 AS "์ซ์ ๋ณํ"
FROM DUAL;
SELECT FIRST_NAME,
SALARY,
TO_CHAR(SALARY, 'L999,999') AS "๊ธ์ฌ (๋ฌธ์ํ)"
FROM EMPLOYEES;
SELECT TO_DATE('20250624','YYYY/MM/DD') AS "๋ ์ง๋ณํ"
FROM DUAL;
โ NULL ์ฒ๋ฆฌ ํจ์
- NVL() : NULL์ด๋ฉด ๋ค๋ฅธ ๊ฐ์ผ๋ก ๋์ฒด
- NVL2() : NULL ์ฌ๋ถ์ ๋ฐ๋ผ ๋ค๋ฅธ ๊ฐ ๋ฐํ
SELECT EMPLOYEE_ID, FIRST_NAME, COMMISSION_PCT,
NVL(COMMISSION_PCT, 0) AS "๋ณด๋์ค (NULL๋์ฒด)"
FROM EMPLOYEES;
SELECT EMPLOYEE_ID, FIRST_NAME, MANAGER_ID,
NVL2(MANAGER_ID, '์ง์', '๋ํ') AS "์ง๋ฌด"
FROM EMPLOYEES;
๐ฏ ์กฐ๊ฑด ํจ์ - DECODE()
์กฐ๊ฑด์ ๋ฐ๋ผ ์ฌ๋ฌ ๊ฒฐ๊ณผ ์ค ํ๋๋ฅผ ์ ํ
SELECT EMPLOYEE_ID, FIRST_NAME, MANAGER_ID,
DECODE(MANAGER_ID, NULL, '๋ํ', '์ง์') AS "์ง๋ฌด",
DECODE(MANAGER_ID,
100, '๋ํ',
101, '์ ๋ฌด',
102, '์๋ฌด',
103, 'ํ์ฅ',
'์ง์') AS "์ง๊ธ"
FROM EMPLOYEES;
๐๊ทธ๋ฃน ํจ์(Group Function)์ GROUP BY
์ด๋ฒ ์ฅ์์๋ ์ค๋ผํด์ ์ง๊ณ ํจ์(๊ทธ๋ฃน ํจ์)์ GROUP BY ์ ์ ์ฌ์ฉํ ๋ฐ์ดํฐ ์ง๊ณ ๋ฐฉ๋ฒ์ ๋ํด ์ ๋ฆฌํฉ๋๋ค. ์ง๊ณ ํจ์๋ ์ฌ๋ฌ ํ์ ์ ๋ ฅ๋ฐ์ ํ๋์ ๊ฒฐ๊ณผ ๊ฐ์ ๋ฐํํ๋ ๋ค์คํ ํจ์์ด๋ฉฐ, GROUP BY์ ํจ๊ป ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค.
๐ ์ง๊ณ ํจ์ ๊ฐ์
- COUNT() : ํ์ ์(๊ฐ์)
- SUM() : ํฉ๊ณ
- MAX() : ์ต๋๊ฐ
- MIN() : ์ต์๊ฐ
- AVG() : ํ๊ท
-- ์ง์ ํ
์ด๋ธ์์ ์ง์ ID์ ์ด ๊ฐ์๋ฅผ ๊ตฌํ๋ ์์
SELECT COUNT(EMPLOYEE_ID)
FROM EMPLOYEES;
โ ์ง๊ณ ํจ์ ์ฌ์ฉ ์ ์ ์์ฌํญ
- ์ง๊ณ ํจ์๋ ํ๋์ ๊ฒฐ๊ณผ ๊ฐ์ ๋ฐํํฉ๋๋ค (๋ค์คํ → ๋จ์ผ๊ฒฐ๊ณผ)
- ์ง๊ณ ํจ์๋ NULL ๊ฐ์ ์ ์ธํ๊ณ ์ฐ์ฐํฉ๋๋ค
- ์ง๊ณ ํจ์์ ์ผ๋ฐ ์ปฌ๋ผ์ ๊ฐ์ด SELECTํ ๊ฒฝ์ฐ
GROUP BY๊ฐ ๋ฐ๋์ ํ์ํฉ๋๋ค
-- ์๋ ์ฟผ๋ฆฌ๋ ์๋ฌ ๋ฐ์ (์ง๊ณํจ์์ ์ผ๋ฐ ์ปฌ๋ผ์ ํจ๊ป ์ฌ์ฉํ์ง๋ง GROUP BY ์์)
-- SELECT DEPARTMENT_ID, COUNT(*) FROM EMPLOYEES;
-- ํด๊ฒฐ ๋ฐฉ๋ฒ: GROUP BY ์ฌ์ฉ
SELECT DEPARTMENT_ID, COUNT(*)
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID;
โจ COUNT(*) vs COUNT(์ปฌ๋ผ๋ช )
- COUNT(*) : NULL ํฌํจ ์ ์ฒด ํ ์๋ฅผ ๊ณ์ฐ
- COUNT(์ปฌ๋ผ) : ํด๋น ์ปฌ๋ผ์์ NULL ์ ์ธํ ํ ์ ๊ณ์ฐ
-- ์ ์ฒด ํ ์ ๊ณ์ฐ (NULL ํฌํจ)
SELECT COUNT(*) FROM EMPLOYEES;
-- DEPARTMENT_ID๊ฐ ์๋ ํ๋ง ๊ณ์ฐ (NULL ์ ์ธ)
SELECT COUNT(DEPARTMENT_ID) FROM EMPLOYEES;
๐ฅ GROUP BY๋ฅผ ์ฌ์ฉํ ์ง๊ณ ์์
GROUP BY ์ ์ ํน์ ์ปฌ๋ผ์ ๊ธฐ์ค์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ฃนํํ์ฌ ์ง๊ณ ์ฐ์ฐ์ด ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
SELECT DEPARTMENT_ID, AVG(SALARY) AS "๋ถ์๋ณ ํ๊ท ๊ธ์ฌ"
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID;
โ๏ธ ์๊ฒฉ์ฆ์ด ์๋ค๊ณ ๋์ด์๋ ๊พธ์คํ ๋ฐ๋ณตํ์ต์ ํตํด ๋จธ๋ฆฟ์์ ์๊ฒจ๋ด์^~^