๐ ์ค๋ ๋ด๊ฐ ๋ฐฐ์ด ๊ฒ
๐ ์์ฃผ ์ฐ์ด๋ ๋จ์ผ ํ ํจ์(1)
- ๋ฌธ์ ํจ์
LOWER (char) | char์ ๋ชจ๋ ๋ฌธ์๋ฅผ ์๋ฌธ์๋ก ๋ณ๊ฒฝํ์ฌ ๋ฆฌํด |
UPPER (char) | char์ ๋ชจ๋ ๋ฌธ์๋ฅผ ๋๋ฌธ์๋ก ๋ณ๊ฒฝํ์ฌ ๋ฆฌํด |
CONCAT (char1, char2) | char1์ ๋ฌธ์์ด๊ณผ char2์ ๋ฌธ์์ด์ ์ฐ๊ฒฐํ์ฌ ๋ฆฌํด |
SELECT CONCAT ('ABC', 'def') AS CONCAT_FN
FROM dual;
SUBSTR (char, position [, length]) | char ๋ฌธ์์ด์ position ์์น๋ก๋ถํฐ length๊ฐ ๋ฌธ์๋ฅผ ์๋ผ๋ด์ ๋ฆฌํด |
REPLACE (char, search_string [, replace_string]) | char ๋ฌธ์์ด์์ search_string ๊ฐ์ replace_string ๊ฐ์ผ๋ก ๋์ฒดํ์ฌ ๋ฆฌํด |
SELECT SUBSTR ('ABCDEFGH', 4, 2) AS SUBSTR_FN
, REPLACE ('ABCDEFGH', 'DEF', 'ZZZ') AS REPLACE_FN1
, REPLACE ('ABCDEFGH', 'DEF') AS REPLACE_FN2
FROM dual;
[๊ฒฐ๊ณผ]
SUBSTR_FN | REPLACE_FN1 | REPLACE_FN2 |
DE | ABCZZZGH | ABCGH |
LPAD (expr1, n [, expr2]) | expr1์ n์๋ฆฌ๋งํผ ๋๋ฆฌ๊ณ , ์ผ์ชฝ ๋น ๊ณต๊ฐ์ expr2๋ก ์ฑ์์ ๋ฆฌํด |
RPAD (expr1, n [, expr2]) | expr1์ n์๋ฆฌ๋งํผ ๋๋ฆฌ๊ณ , ์ค๋ฅธ์ชฝ ๋น ๊ณต๊ฐ์ expr2๋ก ์ฑ์์ ๋ฆฌํด |
SELECT LPAD ('ABC', 8, 'Z') AS LPAD_FN1
, LPAD ('ABC', 8) AS LPAD_FN2
, RPAD ('ABC', 8, '12') AS RPAD_FN1
FROM dual;
[๊ฒฐ๊ณผ]
LPAD_FN1 | LPAD_FN2 | RPAD_FN1 |
ZZZZZABC | ABC | ABC12121 |
LTRIM (char [, set]) | char ๋ฌธ์์ด์ ์ผ์ชฝ๋ถํฐ set ๋ฌธ์๋ฅผ ์ ๊ฑฐํ์ฌ ๋ฆฌํด (set ๊ธฐ๋ณธ ๊ฐ์ ๊ณต๋ฐฑ) |
RTRIM (char [, set]) | char ๋ฌธ์์ด์ ์ค๋ฅธ์ชฝ๋ถํฐ set ๋ฌธ์๋ฅผ ์ ๊ฑฐํ์ฌ ๋ฆฌํด (set ๊ธฐ๋ณธ ๊ฐ์ ๊ณต๋ฐฑ) |
TRIM ([LEADING | TRAILING |
LENGTH (char) | char ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ๋ฆฌํด |
INSTR (char, search_string [, position [, occurrence]]) | char ๋ฌธ์์ด์ position ์์น๋ก๋ถํฐ occurrence ๋ฒ์งธ๋ก ์ฐพ์ search_string์ ์์ ์์น๋ฅผ ๋ฆฌํด |
SELECT INSTR ('ABCABCAB', 'AB', 3, 2) AS LENGTH_FN1
, INSTR ('ABCABCAB', 'AB', 3) AS LENGTH_FN2
, INSTR ('ABCABCAB', 'AB') AS LENGTH_FN3
, INSTR ('ABCABCAB', 'AB', 3, 3) AS LENGTH_FN4
FROM dual;
[๊ฒฐ๊ณผ]
LENGTH_FN1 | LENGTH_FN2 | LENGTH_FN3 | LENGTH_FN4 |
7 | 4 | 1 | 0 |
- ์ซ์ ํจ์
ABS (n) | ์ซ์ n์ ์ ๋ ๊ฐ์ ๋ฆฌํด |
SIGN (n) | ์ซ์ n์ ๋ถํธ๋ฅผ ๋ฆฌํด (n์ด ์์๋ฉด 1, ์์๋ฉด -1, 0์ด๋ฉด 0 ์ ๋ฆฌํด) |
ROUND (n1 [, n2]) | ์ซ์ n1์ ์์์ n2 ์งธ ์๋ฆฌ๋ก ‘๋ฐ์ฌ๋ฆผ’ํ์ฌ ๋ฆฌํด (n2๊ฐ 0์ด๊ฑฐ๋ ์๋ต๋๋ฉด ์ ์) |
TRUNC (n1 [, n2]) | ์ซ์ n1์ ์์์ n2 ์งธ ์๋ฆฌ๋ก ‘๋ฒ๋ฆผ’ํ์ฌ ๋ฆฌํด (n2๊ฐ 0์ด๊ฑฐ๋ ์๋ต๋๋ฉด ์ ์) |
ROUND (n1 [, n2]) | ์ซ์ n๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ์ต์์ ์ ์ ๊ฐ์ ๋ฆฌํด |
FLOOR (n) | ์ซ์ n๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ต๋์ ์ ์ ๊ฐ์ ๋ฆฌํด |
MOD (n1, n2) | ์ซ์ n1์ n2๋ก ๋๋ ๋๋จธ์ง ๊ฐ์ ๋ฆฌํด |
POWER (n1, n2) | ์ซ์ n1์ n2 ์ ๊ณฑ ๊ฐ์ ๋ฆฌํด |
SQRT (n) | ์ซ์ n์ ์ ๊ณฑ๊ทผ ๊ฐ์ ๋ฆฌํด |
- ๋ ์ง ํจ์
SYSDATE | ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ์ ํ์ฌ ๋ ์ง ๊ฐ์ ๋ฆฌํด |
ROUND (date [, fmt]) | ๋ ์ง date๋ฅผ fat ํฌ๋งท ์์ ๊ธฐ์ค์ผ๋ก ‘๋ฐ์ฌ๋ฆผ’ํ์ฌ ๋ฆฌํด (fmt: YY, MM, DD, HH, MI ๋ฑ) |
TRUNC (date [, fmt]) | ๋ ์ง date๋ฅผ fmt ํฌ๋งท ์์ ๊ธฐ์ค์ผ๋ก ‘๋ฒ๋ฆผ’ํ์ฌ ๋ฆฌํด |
NEXT_DAY (date, n) | ๋ ์ง date ์ดํ ๊ฐ์ฅ ๊ฐ๊น์ด n ์์ผ ๋ ์ง ๊ฐ์ ๋ฆฌํด 1: ์ผ, 2: ์, 3: ํ, 4: ์, 5: ๋ชฉ, 6: ๊ธ, 7: ํ |
ROUND (date [, fmt]) | ๋ ์ง date๊ฐ ์ํ ์์ ๋ง์ง๋ง ๋ ์ง ๊ฐ์ ๋ฆฌํด |
ADD_MONTHS (date, n) | ๋ ์ง date์ n ๊ฐ์ ์๋ฅผ ๋ํ ๋ ์ง ๊ฐ์ ๋ฆฌํด |
MONTHS_BETWEEN (date1, date2) | ๋ ๋ ์ง (date1, date2) ๊ฐ์ ๊ฐ์ ์๋ฅผ ๋ฆฌํด |
๐ GROUP BY ์
SELECT ์นผ๋ผ, ์นผ๋ผ, ...
FROM ํ
์ด๋ธ a, ํ
์ด๋ธ b, ...
WHERE ์กฐ๊ฑด
GROUP BY ์นผ๋ผ, ์นผ๋ผ;
SELECT a.job, SUM(a.sal), MAX(a.sal), MIN(a.sal)
FROM emp a
GROUP BY a.job;
- SELECT ๋ฌธ์ GROUP BY ์ ์ด ํฌํจ๋์ด ์์ ๋,
- **๊ธฐ์ค ์นผ๋ผ ์ธ ๋ค๋ฅธ ์นผ๋ผ**์ SELECT ์ ์ ํฌํจ์ํค๋ฉด ์ค๋ฅ ๋ฐ์ !
SELECT a.job, a.sal
FROM emp a
GROUP BY a.job;
- ์ง๊ณ ํจ์
- ์ง๊ณ ํจ์๋ ๋ค์ค ํ(ํ ๊ทธ๋ฃน)์ ๊ฐ์ ์ ๋ ฅ ๋ฐ์ ๋จ์ผ ํ์ ๊ฐ์ ๋ฆฌํดํ๋ ํจ์
- COUNT, SUM, AVG, MAX, MIN
- ์ง๊ณํจ์๋ฅผ ์ฌ์ฉํ๋ฉด, ํ ๊ทธ๋ฃน ๋ณ๋ก NULL์ ์ ์ธํ ๊ฐ์ด ์ง๊ณ๋จ
- ์ง๊ณํจ์์ ์ธ์์ ์ฐ์ฐ์ด๋ ๊ฐ๊ณต์ด ์กด์ฌํ๋ฉด, ์ด๋ ์ง๊ณํจ์ ์คํ ์ ์ ํ ๊ทธ๋ฃน ๋ด์ ์๋ ๊ฐ๋ณ ํ ๋จ์๋ก ์ํ๋จ
SELECT a.deptno
, COUNT(NVL(a.comm, 0) AS CNT
, SUM(NVL(a.comm, 0) AS SUM
, AVG(NVL(a.comm, 0) AS AVG
FROM emp a
GROUP BY a.deptno;
- GROUP BY ์ ์์ด SELECT ์ ์ ์ง๊ณ ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด, ์ ์ฒด ํ์ด ํ๋์ ๊ทธ๋ฃน ํ์ด ๋๋ค.
๐ ์ง๊ณํจ์
COUNT(*) | ํ ๊ทธ๋ฃน์ ์ํ ์ ์ฒด ํ์ ๊ฐ์๋ฅผ ๋ฆฌํด |
COUNT(expr) | ํ ๊ทธ๋ฃน์ ์ํ NULL์ด ์๋ expr(ํํ์)์ ๊ฐ์๋ฅผ ๋ฆฌํด |
SUM(expr) | ํ ๊ทธ๋ฃน์ ์ํ NULL์ด ์๋ expr(ํํ์)์ ํฉ๊ณ ๊ฐ ๋ฆฌํด |
AVG(expr) | ํ ๊ทธ๋ฃน์ ์ํ NULL์ด ์๋ expr(ํํ์)์ ํ๊ท ๊ฐ ๋ฆฌํด |
SELECT a.deptno
, SUM(a.comm)
, AVG(a.comm)
, NVL(AVG(a.comm),0) //ํ๊ท ๊ฐ์ ๋ด๊ณ NULL ๊ฐ์ 0์ผ๋ก ์นํ
, AVG(NVL(a.comm, 0)) // NULL ๊ฐ์ 0์ผ๋ก ์นํํ ๋ค ํ๊ท ๊ฐ ๋ด๊ธฐ
FROM emp a
GROUP BY a.deptno;
MAX(expr) | ํ ๊ทธ๋ฃน์ ์ํ NULL์ด ์๋ expr(ํํ์)์ ์ต๋ ๊ฐ ๋ฆฌํด |
MIN(expr) | ํ ๊ทธ๋ฃน์ ์ํ NULL์ด ์๋ expr(ํํ์)์ ์ต์ ๊ฐ ๋ฆฌํด |
VARIANCE(expr) | ํ ๊ทธ๋ฃน์ ์ํ NULL์ด ์๋ expr(ํํ์)์ ๋ถ์ฐ ๊ฐ ๋ฆฌํด |
STDDEV(expr) | ํ ๊ทธ๋ฃน์ ์ํ NULL์ด ์๋ expr(ํํ์)์ ํ์คํธ์ฐจ ๊ฐ ๋ฆฌํด |
STATS_MODE(expr) | ํ ๊ทธ๋ฃน์ ์ํ NULL์ด ์๋ expr(ํํ์)์ ์ต๋น ๊ฐ ๋ฆฌํด |
MEDIAN(expr) | ํ ๊ทธ๋ฃน์ ์ํ NULL์ด ์๋ expr(ํํ์)์ ์ค์ ๊ฐ ๋ฆฌํด |
LISTAGG(exp, ‘delimiter’) WITHIN GROUP (order_by_daue) | ํ ๊ทธ๋ฃน์ ์ํ expr(ํํ์)์ delimiter ๋ฌธ์๋ก ๊ตฌ๋ถํ์ฌ ์ฐ๊ฒฐํ ๊ฐ์ ๋ฆฌํด |
SELECT a.deptno
, LISTAGG(a.ename, ',') WITHIN GROUP (ORDER BY a.sal DESC)
, LISTAGG(a.job, '/') WITHIN GROUP (ORDER BY a.job)
FROM emp a
GROUP BY a.deptno;
- CASE ํํ์๊ณผ ์ง๊ณ ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ฑด๋ง ์ง๊ณ(๋ถ๋ถ ์ง๊ณ)ํ ์ ์๋ค.
SELECT SUM(CASE WHEN a.deptno = 10
THEN a.sal
END) AS SUMSAL_DEPT10
FROM emp a;
๐ HAVING ์
- ์กฐํ๋๋ ํ ๊ทธ๋ฃน์ ์ ํํ ์ ์๋ค.
SELECT ์นผ๋ผ, ์นผ๋ผ, ...
FROM ํ
์ด๋ธ
WHERE ์กฐ๊ฑด
GROUP BY ์นผ๋ผ, ์นผ๋ผ, ...
HAVING **์กฐ๊ฑด** ;
SELECT a.deptno, a.job, COUNT(*)
FROM emp a
GROUP BY a.deptno, a.job
HAVING COUNT(*) >= 2;
- HAVING ์ ์ ์ง๊ณ ํจ์ ์์ด ์กฐ๊ฑด์ ๊ธฐ์ ํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ !
- Grouping ์นผ๋ผ์ ๋ํ ์กฐ๊ฑด์ ์ง๊ณ ํจ์๊ฐ ์๋๋ผ๋ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์์
- ํ์ง๋ง, ์ฑ๋ฅ ์ WHERE ์ ์ ๊ธฐ์ ํ๋ ๊ฒ์ด ๋ฐ๋์งํจ
- ์ง๊ณ ๊ฐ์ ๋ํ ์กฐ๊ฑด์ HAVING ์ ์๋ง ๊ธฐ์ ๊ฐ๋ฅ (WHERE ์ ๋ถ๊ฐ !)
- WHERE ์ ์ ํ ๊ทธ๋ฃน์ด ์์ฑ๋๊ธฐ ์ ์ ์กฐ๊ฑด์ ๋ฐ๋ผ ํ์ ์ ํํ๊ณ ,
- HAVING ์ ์ ํ ๊ทธ๋ฃน์ด ์์ฑ๋ ํ์ ์กฐ๊ฑด์ ๋ฐ๋ผ ํ ๊ทธ๋ฃน์ ์ ํํจ.
- HAVING ์ ์ ์ฌ์ฉํ์ฌ ์ค๋ณต ๊ฐ ์กด์ฌ ์ฌ๋ถ๋ฅผ ํ์ธ(๋ฐ์ดํฐ ๊ฒ์ฆ)ํ ์ ์๋ค.
SELECT a.sal
, COUNT(*)
FROM emp a
GROUP BY a.sal
HAVING COUNT(*) > 1;
๐ญ ์ค๋ ๊ธฐ์ตํด์ผ ํ ๋ด์ฉ
โ ๋ค์ํ ๋จ์ผํ ํจ์
๋จ์ผํ ํจ์๋ฅผ ๋ชจ๋ ์ธ์ธ ํ์๋ ์์ง๋ง, ๊ธฐ๋ณธ์ ์ธ ๊ฒ๋ค์ ๊ตฌ๊ธ๋ง ์์ด๋ ์ฌ์ฉํ ์ ์๋๋ก ์์งํ๊ณ ์์ด์ผ๊ฒ ๋ค !
โก groupby์ ๊ณผ having์
์์ ๋ฅผ ํ๋ค๋ณด๋ฉด having์ ๋์ where์ ์ ์ฌ์ฉํด ํ๋ฆฌ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.
๊ทธ๋ฌ๋ having์ ์ ์ฌ์ฉ์ํฉ์ ๋ํด ์ ๋ ํด์ผ ํ๋ค !!
โ๐ป ํ๊ณ
์ค๋์ SQL ๋ง์ง๋ง ์๊ฐ์ด์๋ค!
SQL์ ๊ฐ์๋ฅผ ๋ฃ์ ๋ ์ด๋ ค์์ด ์ ๋ ๋ง์๋ค.
๋ฐฐ์ ๋ ํจ์๋ค์ ์์ ๋ฅผ ํ๋ฉด์ ๊ณ์ ๋ณต์ตํด๋ณด๊ณ ,
๋ค์ ์คํ๋ผ์ธ SQL ๊ฐ์์์ ๋ถ์กฑํ ๋ถ๋ถ์ ๋ณด๊ฐํด์ผ๊ฒ ๋ค !!
๋ด์ผ์ R ๊ฐ์๊ฐ ์์๋๋ค !
๋ด์ผ๋ ํ์ดํ !!!๐คฉ
'STARTERS 4๊ธฐ > [STARTERS] TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[STARTERS 4๊ธฐ TIL] #12์ผ์ฐจ(23.02.21) (0) | 2023.02.21 |
---|---|
[STARTERS 4๊ธฐ TIL] #11์ผ์ฐจ(23.02.20) (0) | 2023.02.20 |
[STARTERS 4๊ธฐ TIL] #9์ผ์ฐจ(23.02.16) (0) | 2023.02.20 |
[STARTERS 4๊ธฐ TIL] #8์ผ์ฐจ(23.02.15) (0) | 2023.02.20 |
[STARTERS 4๊ธฐ TIL] #7์ผ์ฐจ(23.02.14) (0) | 2023.02.19 |