๐ ์ค๋ ๋ด๊ฐ ๋ฐฐ์ด ๊ฒ
๐ ORDER BY ์
- ์ ๋ ฌ ๊ธฐ์ค์ด ๋ ์นผ๋ผ ๋๋ ํํ์์ ์ฝค๋ง(,)๋ก ๊ตฌ๋ถํ์ฌ ์์๋๋ก ๊ธฐ์ ํ๋ค.
SELECT ์นผ๋ผ, ์นผ๋ผ, ...
FROM ํ
์ด๋ธ
WHERE ์กฐ๊ฑด
ORDER BY ์นผ๋ผ [ASC/DESC], ... ;
- SELECT ์ ์ ์นผ๋ผ ๋ณ์นญ์ด๋ ์นผ๋ผ ์์น๋ฅผ ์ด์ฉํ์ฌ ์ ๋ ฌ ์์๋ฅผ ์ง์ ํ ์๋ ์๋ค.
- ORDER BY ์ ์ ์ฌ์ฉ๋๋ ํค์๋
- - ASC(๊ธฐ๋ณธ ๊ฐ), DESC - NULL FIRST, NULLS LAST
- NULL์ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ ์ ๋ค์ชฝ์ผ๋ก, ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ ์ ์์ชฝ์ผ๋ก ์ ๋ ฌ๋๋ค.
SELECT ์นผ๋ผ, ์นผ๋ผ, ...
FROM ํ
์ด๋ธ
WHERE ์กฐ๊ฑด
ORDER BY ์นผ๋ผ [ASC/DESC] NULLS LAST ;
๐ JOIN
- ์ฌ๋ฌ ํ ์ด๋ธ์ ์ ์ฅ๋์ด ์๋ ์ ๋ณด๋ฅผ ํจ๊ป ์กฐํ
- ๋ ํ ์ด๋ธ ๊ฐ์ ํน์ ์นผ๋ผ์ ๊ฐ์ ๋น๊ตํ์ฌ, ๋น๊ต ๊ฒฐ๊ณผ๊ฐ TRUE์ธ ํ๋ค์ ์ฐ๊ฒฐ์ํจ๋ค.
SELECT ์นผ๋ผ, ์นผ๋ผ, ...
FROM ํ
์ด๋ธ a, ํ
์ด๋ธ b, ...
WHERE ์กฐ์ธ ์กฐ๊ฑด
AND ์ผ๋ฐ ์กฐ๊ฑด;
- ๋ฑ๊ฐ ์กฐ์ธ : ์กฐ์ธ ์กฐ๊ฑด์ด ๋ฑํธ(=)์ธ ์กฐ์ธ
SELECT *
FROM emp a, dept b
WHERE b.deptno = a.deptno ;
- ๋น๋ฑ๊ฐ ์กฐ์ธ : ๋ฑํธ ์ธ ๋ค๋ฅธ ๋น๊ต ์กฐ๊ฑด ์ฌ์ฉ
SELECT *
FROM emp a, salgrade b
WHERE a.sal BETWEEN b.lowsal AND b.highsal ;
- ์ ํ ์กฐ์ธ : ๋์ผํ ํ ์ด๋ธ์ ์กฐ์ธํ๋ ๊ฒ
SELECT *
FROM emp a, -- ์ฌ์
emp b -- ๊ด๋ฆฌ์
WHERE a.empno = b.mgr;
- ์กฐ์ธํ๋ฉด์ 1:m ๊ด๊ณ์ ๋ฐ๋ผ ๋ฐ์ดํฐ ๊ฐ์ด ๋์ด๋ ์ ์์ !! ์ด ๊ฒฝ์ฐ๋ฅผ ์ ์ํด์ ์กฐํํ์ !
๐ ์์ฐํฐ ์กฐ์ธ๊ณผ ํฌ๋ก์ค ์กฐ์ธ
- Inner Join
- ์กฐ์ธ์ ์ฑ๊ณตํ ํ๋ค๋ง ๋ฆฌํดํ๋ ์กฐ์ธ
- Outer Join
- Inner Join ์ ๊ฒฐ๊ณผ์ ์กฐ์ธ์ ์คํจํ ๊ธฐ์ค ์งํฉ์ ํ๋ค์ ํจ๊ป ๋ฆฌํดํ๋ ์กฐ์ธ
- ์ค๋ผํด์์๋ ์กฐ์ธ ์กฐ๊ฑด์ (+) ๊ธฐํธ๋ฅผ ์ฌ์ฉํ์ฌ ๊ธฐ์ค ์งํฉ์ ์ง์ ํ๋ค.
- (+) ๊ธฐํธ๊ฐ ์ฌ์ฉ๋ ์ชฝ์ ๋ฐ๋์ชฝ ์งํฉ์ด ๊ธฐ์ค ์งํฉ์ด ๋๋ค.
- Cross Join
- ์์ชฝ ์งํฉ์ ์นดํฐ์ ๊ณฑ(M*N ๊ฑด)์ ๋ฆฌํดํ๋ ์กฐ์ธ
- ์์ชฝ ์งํฉ ๊ฐ์ ์กฐ์ธ ์กฐ๊ฑด์ด ์์ ๋ Cross Join์ด ์ํ๋๋ค.
- ์์
EMP (b)
EMPNO | ENAME | JOB | DEPTNO |
7369 | ๋ฏผ์ง | ์ ์ | 20 |
7499 | ๋ฏผ์ | ํ๋งค์ | 30 |
7521 | ์์ | ํ๋งค์ | 30 |
7566 | ๋์ฐ | ๋งค๋์ | 20 |
7654 | ์ฃผํ | ๋ถ์๊ฐ | 10 |
7698 | ํ๋ฆฐ | ์ ์ | 20 |
7782 | ์์ผ | ์ ์ | 10 |
7839 | ์ฑ์ | ๋ถ์๊ฐ | 30 |
DEPT (a)
DEPTNO | DNAME | LOC |
10 | ํ๊ณ | ๋ด์ |
20 | ์ฐ๊ตฌ | ์์นด๊ณ |
30 | ํ๋งค | ๋ณด์คํด |
40 | ์ด์ | ์์ฑํด |
- Inner Join
SELECT b.empno, b.ename, b.job, b.deptno, a,dname, a.loc
FROM dept a, emp b
WHERE b.deptno = a.deptno ;
EMPNO | ENAME | JOB | DEPTNO | DEPTNO | DNAME | LOC |
7369 | ๋ฏผ์ง | ์ ์ | 20 | 20 | ์ฐ๊ตฌ | ์์นด๊ณ |
7499 | ๋ฏผ์ | ํ๋งค์ | 30 | 30 | ํ๋งค | ๋ณด์คํด |
7521 | ์์ | ํ๋งค์ | 30 | 30 | ํ๋งค | ๋ณด์คํด |
7566 | ๋์ฐ | ๋งค๋์ | 20 | 20 | ์ฐ๊ตฌ | ์์นด๊ณ |
7654 | ์ฃผํ | ๋ถ์๊ฐ | 10 | 10 | ํ๊ณ | ๋ด์ |
7698 | ํ๋ฆฐ | ์ ์ | 20 | 20 | ์ฐ๊ตฌ | ์์นด๊ณ |
7782 | ์์ผ | ์ ์ | 10 | 10 | ํ๊ณ | ๋ด์ |
7839 | ์ฑ์ | ๋ถ์๊ฐ | 30 | 30 | ํ๋งค | ๋ณด์คํด |
- DEPT ํ ์ด๋ธ์ ๊ธฐ์ค ์งํฉ์ผ๋ก ํ Outer Join
SELECT b.empno, b.ename, b.job, b.deptno, a.deptno, a.dname, a.loc
FROM dept a, emp b
WHERE b.deptno(+) = a.deptno ;
- EMP (b) DEPT (a) - ๊ธฐ์ค ์งํฉ
EMPNO ENAME JOB DEPTNO DEPTNO DNAME LOC 7369 ๋ฏผ์ง ์ ์ 20 20 ์ฐ๊ตฌ ์์นด๊ณ 7499 ๋ฏผ์ ํ๋งค์ 30 30 ํ๋งค ๋ณด์คํด 7521 ์์ ํ๋งค์ 30 30 ํ๋งค ๋ณด์คํด 7566 ๋์ฐ ๋งค๋์ 20 20 ์ฐ๊ตฌ ์์นด๊ณ 7654 ์ฃผํ ๋ถ์๊ฐ 10 10 ํ๊ณ ๋ด์ 7698 ํ๋ฆฐ ์ ์ 20 20 ์ฐ๊ตฌ ์์นด๊ณ 7782 ์์ผ ์ ์ 10 10 ํ๊ณ ๋ด์ 7839 ์ฑ์ ๋ถ์๊ฐ 30 30 ํ๋งค ๋ณด์คํด 40 ์ด์ ์์ฑํด - EMP ํ ์ด๋ธ์ ๊ธฐ์ค ์งํฉ์ผ๋ก ํ Outer Join
SELECT b.empno, b.ename, b.job, b.deptno, a.deptno, a.dname, a.loc
FROM dept a, emp b
WHERE b.deptno = a.deptno(+) ;
- EMP (b) - ๊ธฐ์ค ์งํฉ DEPT (a)
EMPNO ENAME JOB DEPTNO DEPTNO DNAME LOC 7369 ๋ฏผ์ง ์ ์ 20 20 ์ฐ๊ตฌ ์์นด๊ณ 7499 ๋ฏผ์ ํ๋งค์ 30 30 ํ๋งค ๋ณด์คํด 7521 ์์ ํ๋งค์ 30 30 ํ๋งค ๋ณด์คํด 7566 ๋์ฐ ๋งค๋์ 20 20 ์ฐ๊ตฌ ์์นด๊ณ 7654 ์ฃผํ ๋ถ์๊ฐ 10 10 ํ๊ณ ๋ด์ 7698 ํ๋ฆฐ ์ ์ 20 20 ์ฐ๊ตฌ ์์นด๊ณ 7782 ์์ผ ์ ์ 10 10 ํ๊ณ ๋ด์ 7839 ์ฑ์ ๋ถ์๊ฐ 30 30 ํ๋งค ๋ณด์คํด - Outer Join ๋ฌธ๋ฒ ์ฌ์ฉ ์ ๊ณ ๋ ค์ฌํญ
- ๋ ํ ์ด๋ธ ๊ฐ์ ๊ด๊ณ์์ ์ ํ์ฑ(ํ์/์ ํ ์ฐธ์ฌ) ํ๊ธฐ๊ฐ ๊ฐ๋ ์๋ฏธ
- Outer Join ๋น๊ธฐ์ค ์งํฉ ์ชฝ ์ผ๋ฐ ์กฐ๊ฑด ์ฌ์ฉ ์ ์ฃผ์์ฌํญ
- ๋น๊ธฐ์ค ์งํฉ ์ชฝ ์กฐ๊ฑด ์ค ํ๋๋ผ๋ (+) ๊ธฐํธ๊ฐ ๋๋ฝ๋๋ฉด Inner join์ด ์ํ๋๋ค
SELECT b.empno, b.ename, b.job, b.deptno, a.deptno, a.dname, a.loc FROM dept a, emp b WHERE b.deptno(+) = a.deptno AND b.deptno <> 20 ;
- Cross Join ์์
- ์กฐ์ธ ์กฐ๊ฑด์ด ์์ผ๋ฉด ์นดํฐ์ ๊ณฑ ์ฐ์ฐ์ ์ํํ๋ค
- → ์์ชฝ ์งํฉ์ ๋ชจ๋ ํ์ ์๋ก ์ฐ๊ฒฐํ๋ค (๊ฒฐ๊ณผ๋ M*N ๊ฑด)
SELECT b.empno, b.ename, b.job, b.deptno, a.deptno, a.dname, a.loc FROM dept a, emp b WHERE a.loc IN ('๋ด์', '๋ณด์คํด') -- ์ผ๋ฐ ์กฐ๊ฑด AND b.job IN ('๋ถ์๊ฐ', '๋งค๋์ ', '์ ์') ; -- ์ผ๋ฐ ์กฐ๊ฑด
- ์งํฉ ์ฐ์ฐ์
- ๊ฐ๋ณ๋ก ์คํ ๊ฐ๋ฅํ ์ฟผ๋ฆฌ๋ค์ ๊ฒฐ๊ณผ ์งํฉ ๊ฐ์ ์ฐ์ฐ ์ํ
SELECT ์นผ๋ผ1, ์นผ๋ผ2, ... FROM ํ ์ด๋ธ [WHERE / GROUP BY / HAVING] ์งํฉ ์ฐ์ฐ์ SELECT ์นผ๋ผ1, ์นผ๋ผ2, ... FROM ํ ์ด๋ธ [WHERE / GROUP BY / HAVING] ORDER BY ์นผ๋ผ [ASC/DESC], ...;
- ์งํฉ ์ฐ์ฐ์ ์ ์ฝ ์ฌํญ
- ๋์ ์ฟผ๋ฆฌ๋ค์ SELECT ์ ์ ๊ธฐ์ ๋ ์นผ๋ผ/ํํ์์ ๊ฐ์๊ฐ ์ผ์นํด์ผ ํ๋ค.
- ๋์ ์ฟผ๋ฆฌ๋ค์ SELECT ์ ์ ๊ธฐ์ ๋ ์นผ๋ผ/ํํ์์ ๋ฐ์ดํฐ ํ์ ์ด ์์๋๋ก ์ผ์นํด์ผ ํ๋ค.
- ORDER BY ์ ์ ์ ํ ์ฟผ๋ฆฌ์ ๋งจ ๋์๋ง ์ฌ ์ ์๋ค.
- ์งํฉ ์ฐ์ฐ์์ ์ข
๋ฅ (์์์๋ถํฐ ์๋๋ก ์ฐ์ฐ)
- UNION ALL : ํฉ์งํฉ (์ค๋ณต ๊ฐ ์ ๊ฑฐX)
- UNION : ํฉ์งํฉ (์ค๋ณต ๊ฐ ์ ๊ฑฐO)
- INTERSECT : ๊ต์งํฉ (์ค๋ณต ๊ฐ ์ ๊ฑฐO)
- MINUS : ์ฐจ์งํฉ (์ค๋ณต ๊ฐ ์ ๊ฑฐO)
๐์๋ธ ์ฟผ๋ฆฌ
- ์๋ธ ์ฟผ๋ฆฌ : ํ๋์ SQL๋ฌธ ๋ด์ ํฌํจ๋ ๋ ๋ค๋ฅธ SQL๋ฌธ
- ์๋ธ ์ฟผ๋ฆฌ์ ์ข
๋ฅ
์ค์ฒฉ ์๋ธ ์ฟผ๋ฆฌ WHERE ์ ์ด๋ HAVING ์ ์์ ์กฐ๊ฑด์ผ๋ก ์ฌ์ฉ๋๋ ์๋ธ ์ฟผ๋ฆฌ ์ค์นผ๋ผ ์๋ธ ์ฟผ๋ฆฌ SELECT ์ ์์ ์ฌ์ฉ๋๋ฉฐ ๋จ์ผ ๊ฐ์ ๋ฆฌํดํ๋ ์๋ธ ์ฟผ๋ฆฌ ์ธ๋ผ์ธ ๋ทฐ FROM ์ ์์ ์กฐํ ๋์ ์งํฉ์ผ๋ก ์ฌ์ฉ๋๋ ์๋ธ ์ฟผ๋ฆฌ - ์ค์ฒฉ ์๋ธ ์ฟผ๋ฆฌ
- ๋น์๊ด ์๋ธ ์ฟผ๋ฆฌ
- ๋ฉ์ธ ์ฟผ๋ฆฌ์ ์นผ๋ผ์ ์ฐธ์กฐํ์ง ์๋ ์๋ธ ์ฟผ๋ฆฌ
- ๋ฉ์ธ ์ฟผ๋ฆฌ์ ๊ฐ ํ์ ํ๊ฐํ ๋ ์๋ธ ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง์ง ์๋๋ค.
SELECT a.ename, a.deptno, a.sal FROM emp a WHERE a.deptno = 20 AND a.sal > (SELECT AVG(x.sal) FROM emp x);
- ๋จ์ผ ํ ๋น์๊ด ์๋ธ ์ฟผ๋ฆฌ
- ์๋ธ ์ฟผ๋ฆฌ๊ฐ ๋จ์ผ ํ์ ๋ฆฌํดํ๋ ๋น์๊ด ์๋ธ ์ฟผ๋ฆฌ (์๋ธ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๊ฐ 2๊ฑด ์ด์์ด๋ฉด ์ค๋ฅ ๋ฐ์)
- ๋จ์ผ ๊ฐ ๋น๊ต ์กฐ๊ฑด ( =, <, >, ≤, ≥ <> ๋ฑ)๊ณผ ํจ๊ป ์ฌ์ฉ
SELECT a.ename, a.deptno, a.sal FROM emp a WHERE a.deptno = (SELECT x.deptno FROM emp x WHERE x.empno = 7369);
- ๋ค์ค ํ ๋น์๊ด ์๋ธ ์ฟผ๋ฆฌ
- ์๋ธ ์ฟผ๋ฆฌ๊ฐ ๋ค์ค ํ์ ๋ฆฌํดํ๋ ๋น์๊ด ์๋ธ์ฟผ๋ฆฌ
- ๋ค์ค ๊ฐ ๋น๊ต ์กฐ๊ฑด์ธ IN ์กฐ๊ฑด ๋๋ SOME/ANY, ALL ์กฐ๊ฑด ๋ฑ๊ณผ ํจ๊ป ์ฌ์ฉ
SELECT a.ename, a.deptno, a.sal FROM emp a WHERE a.deptno IN (10, 30) AND a.sal > ALL (SELECT x.sal FROM emp x WHERE x.job = 'CLERK');
- ๋ค์ค ํ ๋น์๊ด ์๋ธ ์ฟผ๋ฆฌ (IN ์กฐ๊ฑด)
- EXISTS ์กฐ๊ฑด๊ณผ ์๊ด ์๋ธ์ฟผ๋ฆฌ๋ก ์ฌ์์ฑ ํ ์ ์๋ค.
SELECT a.ename, a,ename, a.sal, a.job FROM emp a WHERE a.sal BETWEEN 1300 AND 2850 AND a.job IN (SELECT x.job FROM emp x WHERE x.deptno = 20);
- ๋ค์ค ํ ๋น์๊ด ์๋ธ ์ฟผ๋ฆฌ (NOT IN ์กฐ๊ฑด)
- NOT IN ์กฐ๊ฑด๊ณผ ์๋ธ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ ๋ ์๋ธ ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ์ NULL์ด ํฌํจ๋ ๊ฒฝ์ฐ, ๊ฒฐ๊ณผ ์งํฉ์ด ๊ณต์งํฉ(0๊ฑด)์ด ๋ ์ ์์ผ๋ฏ๋ก ์ฃผ์๋ฅผ ํด์ผ ํ๋ค.
SELECT a.ename, a,ename, a.sal, a.job FROM emp a WHERE a.sal BETWEEN 1300 AND 2850 AND a.job NOT IN (SELECT NULLIF(x.job, 'ANALYST') FROM emp x WHERE x.deptno = 20);
- NULLIF ํจ์ (NVL๊ณผ ๋ฐ๋)
- ํน์ ๊ฐ์ NULL๋ก ์นํ : NULLIF(Column, ‘๊ฐ’)
- ๋ ์นผ๋ผ์ ๋น๊ตํ์ฌ ๊ฐ์ ๊ฒฝ์ฐ NULL๋ก ์นํ : NULLIF(Column, Column)
- ์๊ด ์๋ธ ์ฟผ๋ฆฌ
- ๋ฉ์ธ ์ฟผ๋ฆฌ์ ์นผ๋ผ์ ์ฐธ์กฐํ์ฌ ์ํ๋๋ ์๋ธ ์ฟผ๋ฆฌ
- ๋ฉ์ธ ์ฟผ๋ฆฌ์ ๊ฐ ํ์ ํ๊ฐํ ๋๋ง๋ค ์๋ธ ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง ์ ์๋ค.
SELECT a.ename, a.deptno, a.sal FROM emp a WHERE a.deptno = 20 AND a.sal > (SELECT AVG(x.sal) FROM emp x WHERE x.job = a.job);
- EXISTS ์กฐ๊ฑด๊ณผ ์๊ด ์๋ธ ์ฟผ๋ฆฌ
- EXISTS ์กฐ๊ฑด์ ๊ฐ ํ๋ง๋ค ์ํ๋ ์๋ธ ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๊ฐ 1๊ฑด ์ด์์ด๋ฉด TRUE๋ก ํ๊ฐ๋๋ค.
- ์๋ธ ์ฟผ๋ฆฌ์์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ํ์ด 1๊ฑด๋ง ๋ฆฌํด๋๋ฉด ์๋ธ ์ฟผ๋ฆฌ ์คํ์ ๋ฉ์ถ๊ณ TRUE๋ฅผ ๋ฆฌํดํ๋ค.
SELECT a.ename, a,ename, a.sal, a.job FROM emp a WHERE a.sal BETWEEN 1300 AND 2850 AND EXISTS (SELECT 'x' FROM emp x WHERE x.deptno = 20 AND x.job = a.job);
- ๋น์๊ด ์๋ธ ์ฟผ๋ฆฌ
- ์ค์นผ๋ผ ์๋ธ ์ฟผ๋ฆฌ
- SELECT ์ ์์ ์ฌ์ฉ๋๋ฉฐ ๋จ์ผ ๊ฐ์ ๋ฆฌํดํ๋ ์๋ธ ์ฟผ๋ฆฌ
- ๋ฉ์ธ ์ฟผ๋ฆฌ ์งํฉ์ ๊ฐ ํ๋ง๋ค ์คํ๋์ด ๋จ์ผ ๊ฐ(1ํ 1์ด)์ ๋ฆฌํดํ๋ ์๊ด ์๋ธ์ฟผ๋ฆฌ → ์๋๋ฉด ์๋ฌ ๋ฐ์(์ง๊ณ ํจ์ ์ฌ์ฉ
- ๋ฉ์ธ ์ฟผ๋ฆฌ ์งํฉ์ ๊ฒฐ๊ณผ ๊ฑด์๋ ์ค์นผ๋ผ ์๋ธ์ฟผ๋ฆฌ์ ์ํด ๋ณ๊ฒฝ๋์ง ์์.
- ์ค์นผ๋ผ ์๋ธ ์ฟผ๋ฆฌ๋ก ๊ตฌํ๋ ์ด์ด 2๊ฐ ์ด์์ธ ๊ฒฝ์ฐ, ๊ฐ๊ฐ์ ์ค์นผ๋ผ ์๋ธ ์ฟผ๋ฆฌ๋ก ๋๋ ์ฌ์ฉํ๋ค.
- ์ค์นผ๋ผ ์๋ธ ์ฟผ๋ฆฌ๋ฅผ ๊ณผ๋คํ๊ฒ ๋จ์ฉํ๋ฉด ์กฐํ ์ฑ๋ฅ์ด ๋๋ ค์ง ์ ์๋ค.
- → ์ธ๋ผ์ธ ๋ทฐ์ ์์ฐํฐ ์กฐ์ธ ๋ฌธ๋ฒ์ ์ฌ์ฉํ์ฌ ์กฐํ ์ฑ๋ฅ์ ๊ฐ์ ํ ์ ์์
- SELECT ์ ์์ ์ฌ์ฉ๋๋ฉฐ ๋จ์ผ ๊ฐ์ ๋ฆฌํดํ๋ ์๋ธ ์ฟผ๋ฆฌ
- ์ธ๋ผ์ธ ๋ทฐ
- ์ธ๋ผ์ธ ๋ทฐ
- FROM ์ ์์ ์กฐํ ๋์ ์งํฉ์ผ๋ก ์ฌ์ฉ๋๋ ์๋ธ ์ฟผ๋ฆฌ
- ๋ทฐ(View)
- ์ฟผ๋ฆฌ๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ์ฌ ํ ์ด๋ธ์ฒ๋ผ ์ฌ์ฉํ ์ ์๋ ์ค๋ธ์ ํธ
CREATE OR REPLACE VIEW VW_DEPT_SUM AS SELECT v.deptno , SUM(v.sal) AS SUM_SAL FROM emp v GROUP BY v.deptno ;
SELECT a.dname , b.sum_sal FROM dept a, vw_dept_sum b WHERE b.deptno = a.deptno ;
- WITH ์
- ์๋ธ ์ฟผ๋ฆฌ์ ์ด๋ฆ์ ํ ๋นํ๊ณ , ๋ฉ์ธ ์ฟผ๋ฆฌ์์ ์ฐธ์กฐํ ์ ์๋ค.
- ์ธ๋ผ์ธ ๋ทฐ
WITH w1 AS
(SELECT a.deptno
, MAX(b.grade) AS MAX_GRADE
, MIN(b.grade) AS MIN_GRADE
FROM emp a,
salgrade b
WHERE a.sal BETWEEN b.losal AND b.hisal
GROUP BY a.deptno)
SELECT b.dname, a.maw_grade, a.min_grade
FROM W1 a,
dept b
WHERE b.deptno = a.deptno(+);
๐ญ ์ค๋ ๊ธฐ์ตํด์ผ ํ ๋ด์ฉ
· ์๋ธ์ฟผ๋ฆฌ ์ฌ์ฉ
์๋ธ์ฟผ๋ฆฌ๋ฅผ ํ์ฉํ๋ ๋ฐฉ์์ด ๋ค์ํ๋ฐ, ์ด๋ค ์ํฉ์ ์ด๋ค ๋ฐฉ์์ผ๋ก ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์ข์์ง
์์ ๋ฅผ ํ์ด๋ณด๋ฉด์ ๋ฐฐ์์ผ ํ ๊ฒ ๊ฐ๋ค !
โ๐ป ํ๊ณ
์ค๋์ SQL์์ ์กฐ์ธ, ์๋ธ์ฟผ๋ฆฌ ๋ฑ์ ๊ดํด ๋ฐฐ์ ๋ค.
์กฐ์ธ์ด๋ ์๋ธ์ฟผ๋ฆฌ๋ ์กฐ๊ธ ์ด๋ ค์ ๋ค ๐ข
์ด๋ค ์ํฉ์ ์ด๋ค ์ข ๋ฅ์ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ ์ง ํท๊ฐ๋ ธ๋๋ฐ
์๋ฌด๋๋ ์์ ๋ฅผ ํ๋ฉด์ ์ฐ์ตํด๋ด์ผ ํ ๊ฒ ๊ฐ๋ค..!
'STARTERS 4๊ธฐ > [STARTERS] TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[STARTERS 4๊ธฐ TIL] #11์ผ์ฐจ(23.02.20) (0) | 2023.02.20 |
---|---|
[STARTERS 4๊ธฐ TIL] #10์ผ์ฐจ(23.02.17) (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 |
[STARTERS 4๊ธฐ TIL] #6์ผ์ฐจ(23.02.13) (0) | 2023.02.19 |