๐๊ณ์ธตํ ์ง์์ ๊ตฌ์กฐ
select ์นผ๋ผ๋ช , (level), (connect_by_isleaf)
from ํ ์ด๋ธ๋ช
where ์กฐ๊ฑด
start with ์์์กฐ๊ฑด -> ์) start with mgr is null / start with mrg = 'D' / start with mrg in(111,222)*์์๋ ธ๋ 2๊ฐ
connect by prior ๋ฐฉํฅ
- (์๋ฐฉํฅ) prior ์์ = ๋ถ๋ชจ -> connect by prior empno = mgr (์์์ด ๋จผ์ ๋์จ ๋ถ๋ชจ๋ค)
- (์ญ๋ฐฉํฅ) prior ๋ถ๋ชจ = ์์ -> connect by prior mgr = empno
(์๋ฐฉํฅ) leve l: ์์๋ ธ๋root =1, ์์๋ ธ๋ 2,3,4...
(์๋ฐฉํฅ) connect_by_isleaf : ํด๋น๋ ธ๋์ ํ์ ๋ ธ๋๊ฐ ์์ผ๋ฉด 1, ์๋๋ฉด 0์ผ๋ก ํํ
(์๋ฐฉํฅ) connect_by_root : ์์๋ ธํธ ํ์
(์๋ฐฉํฅ) sys_connect_by_path(~~) : ์์๋ ธ๋๋ถํฐ ํ์ฌ๊น์ง ๊ฒฝ๋ก ํ์
(์ญ๋ฐฉํฅ) leve l: ์์๋ ธ๋root=1, ๋ถ๋ชจ๋ ธ๋ 2,3,4...
(์ญ๋ฐฉํฅ) connect_by_isleaf : ํด๋น๋ ธ๋์ ํ์ ๋ ธ๋๊ฐ ์์ผ๋ฉด 1 (์ฆ, root๋ฉด 1, ์๋๋ฉด ์ฃ๋ค 0)
order siblings by : ํ์ ๋ ธ๋(๋์ผ level)์ฌ์ด์์ ์ ๋ ฌ์ ์ํ
๐์๋ธ์ฟผ๋ฆฌ
์๋ธ์ฟผ๋ฆฌ๋ ๋ฉ์ธ์ฟผ๋ฆฌ์ ์ปฌ๋ผ์ ๋ชจ๋ ์ฌ์ฉํ ์ ์์ง๋ง, ๋ฉ์ธ์ฟผ๋ฆฌ๋ ์๋ธ์ฟผ๋ฆฌ์ ์ปฌ๋ผ์ ์ฌ์ฉํ ์ ์๋ค
์๋ธ์ฟผ๋ฆฌ์์๋ order by์ ์ ์ฌ์ฉํ์ง ๋ชปํ๋ค
๋ฉ์ธ์ฟผ๋ฆฌ ๋ ๋ฒจ์ด 1์ด๊ณ , ์๋ธ์ฟผ๋ฆฌ๊ฐ M์ด๋ฉด ํญ์ ๋ฉ์ธ์ฟผ๋ฆฌ ๋ ๋ฒจ1๋ก ๊ฒฐ๊ณผ์งํฉ์ด ์์ฑ๋๋ค
๐๋ค์คํ ์๋ธ์ฟผ๋ฆฌ
์๋ธ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๊ฑด์๊ฐ 2๊ฑด ์ด์์ผ ๊ฐ๋ฅ์ฑ์ด ์์ ๋
1. IN(์๋ธ์ฟผ๋ฆฌ) : ์์์ ๊ฒฐ๊ณผ ์ค ํ๋๋ง ๋ง์กฑํด๋ ์ฐธ
2. ๋น๊ต์ฐ์ฐ์ ALL(์๋ธ์ฟผ๋ฆฌ) : ๊ฒฐ๊ณผ์ ๋ชจ๋ ๊ฐ์ ๋ง์กฑํด์ผ ํ๋ ์กฐ๊ฑด
3. ๋น๊ต์ฐ์ฐ์ any/some(์๋ธ์ฟผ๋ฆฌ) : ๊ฒฐ๊ณผ์ ์ด๋ ํ๋์ ๊ฐ์ด๋ผ๋ ๋ง์กฑํ๋ฉด ๋๋ ์กฐ๊ฑด
4. exist (์๋ธ์ฟผ๋ฆฌ) : ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ฐ์ด ์กด์ฌํ๋์ง ์ฌ๋ถ๋ฅผ ํ์ธ, ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ฑด์ ํ๋๋ผ๋ ์ฐพ์ผ๋ฉด ๊ฒ์ ์ค์ง
-select์ ์ ์ฌ์ฉ๋ ์๋ธ์ฟผ๋ฆฌ๋ ๋จ์ผํ ์ฐ๊ด ์๋ธ์ฟผ๋ฆฌ๋ก ์ค์นผ๋ผ ์๋ธ์ฟผ๋ฆฌ๋ผ๊ณ ํ๋ฉฐ, join์ผ๋ก ๋ณ๊ฒฝ ๊ฐ๋ฅ
- from์ ์ ์๋ธ์ฟผ๋ฆฌ๋ ๋์ ๋ทฐ ๋ผ๊ณ ๋ ํ๋ฉฐ, SQL๋ฌธ์ฅ ์ค ํ ์ด๋ธ ๋ช ์ด ์ฌ ์ ์๋ ๊ณณ์์ ์ฌ์ฉ ๊ฐ๋ฅ
๐๊ณ ๊ธ์ง๊ณ
1.rollup: ์๊ทธ๋ฃน ๋ณ ์๊ณ ๊ณ์ฐ ์ถ๊ฐ
select dname, job, count(*)์ง์์, sum(sal)๊ธ์ฌํฉ
from
group by rollup (dname,job)
>> ๋ถ์์ด๋ฆ๋ณ ์ง์ ๋ณ ์ง์์์ ํฉ๊ณผ, ๊ธ์ฌํฉ์ ์๊ณ
2. grouping sets : ์ฌ๋ฌ ์นผ๋ผ ๊ฐ๊ฐ์ ๋ํด ๋ฐ๋ณต์ ์ผ๋ก ๊ทธ๋ฃนํ
select dname, job, count(*)์ง์์, sum(sal)๊ธ์ฌํฉ
from
group by grouping sets (dname, job)
>>> ๋ถ์์ด๋ฆ๋ณ ์์์ํฉ๊ณผ, ๊ธ์ฌํฉ + ์ง์ ๋ณ ์ง์์ํฉ๊ณผ ๊ธ์ฌํฉ (๊ฐ ๋ฐ๋์ ์ปฌ๋ผ์ NULL)
3. cube : ๋ค์ฐจ์ ์๊ณ ๊ณ์ฐ ์ถ๊ฐ(์์๋ฌด๊ด), ๋ชจ๋ ์กฐํฉ์ ์ง๊ณ๊ณ์ฐ(์์คํ ๋ถํ)
select dname, job, count(*)์ง์์, sum(sal)๊ธ์ฌํฉ
from
group by cube (dname, job)
๐์๋์ฐ ํจ์
-์์ : rank(๊ณต๋์์, 113), dense_rank(๊ณต๋์์, 112), row_number(1,2,3)
-์ง๊ณ : sum, max, min, avg, count
-ํ ์์ : first_value, last_value, lag, lead
-๋น์จ : ratio_report, percent_rank, ntitle
-ํต๊ณ : corr, stddev, variance
๐๋ทฐ ์ฌ์ฉ์ ์ฅ์
1. ๋ ๋ฆฝ์ฑ : ํ ์ด๋ธ ๊ตฌ์กฐ๊ฐ ๋ณ๊ฒฝ๋์ด๋ ๋ทฐ๋ฅผ ์ฌ์ฉํ๋ ์์ฉํ๋ก๊ทธ๋จ ๋ณ๊ฒฝํ์ง ์์๋ ๋๋ค
2. ํธ๋ฆฌ์ฑ : ๋ณต์กํจ ์ง์๋ฅผ ๋ทฐ๋ก ์์ฑํ์ฌ ๊ด๋ จ ์ง์๋ฅผ ๋จ์ํ๊ฒ ์์ฑํ ์ ์๋ค. ๋ํ ํด๋น ํํ์ SQL์ ์์ฃผ ์ด์ฉํ๋ฉด ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์๋ค
3. ๋ณด์์ฑ : ์ง์์ ๊ธ์ฌ์ ๋ณด์ ๊ฐ์ด ์จ๊ธฐ๊ณ ์ ํ๋ค๋ฉด, ๋ทฐ๋ฅผ ์์ฑํ ๋ ํด๋น ์นผ๋ผ์ ๋นผ๊ณ ์์ฑํ์ฌ ์ฌ์ฉ์์๊ฒ ์ ๋ณด๋ฅผ ๊ฐ์ถ ์ ์๋ค
- ์ธ๋ฆฌ์ธ๋ทฐ =. ๋์ ์ธ๋ทฐ = from์ ์๋ธ์ฟผ๋ฆฌ
:์๋ธ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๊ฐ ๋ง์น ์คํ ์์ ๋์ ์ผ๋ก ์์ฑ๋ ํ ์ด๋ธ์ธ๊ฒ์ฒ๋ผ ์ฌ์ฉํ ์ ์๋ค. ์ธ๋ผ์ธ๋ทฐ๋ SQL๋ฌธ์ด ์คํ๋ ๋๋ง ์์์ ์ผ๋ก ์์ฑ๋๋ ๋์ ์ธ ๋ทฐ์ด๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํด๋น์ ๋ณด๊ฐ ์ ์ฅ๋์ง ์๋๋ค
1. ์๋ธ์ฟผ๋ฆฌ
๋ค์ค์ปฌ๋ผ = ์๋ธ์ฟผ๋ฆฌ์ ์คํ ๊ฒฐ๊ณผ๋ก ์ฌ๋ฌ ์ปฌ๋ผ์ ๋ฐํํ๋ค, ๋ฉ์ธ์ฟผ๋ฆฌ์ ์กฐ๊ฑด ์ ์ ์ฌ๋ฌ ์นผ๋ผ์ ๋์์ ๋น๊ตํ ์ ์๋ค. ์๋ธ์ฟผ๋ฆฌ์ ๋ฉ์ธ์ฟผ๋ฆฌ์์ ๋น๊ตํ๊ณ ์ ํ๋ ์ปฌ๋ผ์ ๊ฐ์์ ์ปฌ๋ผ์ ์์น๊ฐ ๋์ผํด์ผ ํ๋ค
2. col1๋ณ ํฉ๊ณ์ ์ ์ฒดํฉ๊ณ
#[1] cube
select col1, sum(col2)
from t1
group by cube(col1)
order by 1 asc;
#[2] rollup
select col1, sum(col2)
from t1
group by rollup(col1)
order by 1 asc;
#[3]
select col1, sum(col2) #col1๋ณ ๊ฐ๋ณ ํฉ๊ณ
from t1
group by col1
union all
select null, sum(col2) # ์ดํฉ๊ณ
from t1
order by 1 asc;
1. ์งํฉ์ฐ์ฐ์
- union ์ฐ์ฐ์๋ ํฉ์งํฉ ๊ฒฐ๊ณผ์์ ์ค๋ณต๋ ํ์ ํ๋์ ํ์ผ๋ก ๋ง๋ ๋ค
- union all์ฐ์ฐ์๋ ์งํฉ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ์ค๋ณต๋์ง ์๋ ๊ฒฝ์ฐ union๊ณผ ๊ฒฐ๊ณผ๊ฐ ๋์ผํ๋ค
- union ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ SQL์ ๊ฐ๊ฐ์ ์งํฉ์ group by ์ ์ ์ฌ์ฉํ ์ ์๋ค
- union ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ SQL์ ๋ง์ง๋ง์ผ๋ก orderby๋ฅผ ํ๋ฒ๋ง ์ฌ์ฉ ๊ฐ๋ฅํ๋ค
2.๊ทธ๋ฃน์ฐ์ฐ
select b.grade, a.job, sum(a.sal), count(*)
from emp a, sal b
where a.sal between b.losal and b.hisal
groupo by grouping sets(grade, (job, grade))
# group by grade, rollup(job)
# group by grade, cube(job)
#์ง๊ณ์ปฌ๋ผ์ด 1๊ฐ์ผ๋๋ rollup๊ณผ cube๋ ๋์ผ
# HRD, MKT๋ถ์๋ณ ์ฌ์๋ฒํธ์ ๊ธ์ฌ, ํด๋น๊ธ์ฌ์ ๋ถ์๋น์ค์ ๊ตฌํ๊ธฐ
๋ถ์์ฝ๋ | ์ฌ์๋ฒํธ | ๊ธ์ฌ | ๊ธ์ฌ๋น์ค |
HRD | A004 | 3500000 | 0.52 |
HRD | A008 | 3200000 | 0.48 |
HRD | A007 | 4500000 | 0.52 |
MKT | A003 | 2340000 | 0.27 |
MKT | A002 | 1830000 | 0.21 |
#[1]
select a.๋ถ์์ฝ๋, a.์ฌ์๋ฒํธ, a.๊ธ์ฌ,
round(ratio_to_report(๊ธ์ฌ) over (partition by ๋ถ์์ฝ๋),2) as ๊ธ์ฌ๋น์ค
from(select ์ฌ์๋ฒํธ, ์ด๋ฆ, ๋ถ์์ฝ๋, ๊ธ์ฌ, sum(๊ธ์ฌ) over(partition by ๋ถ์์ฝ๋)as ๋ถ์๊ธ์ฌํฉ
from ์ง์
where ๋ถ์์ฝ๋ in('MKT','HRD')a
order by a.๋ถ์์ฝ๋, a.๊ธ์ฌ desc, a.์ฌ์๋ฒํธ
#[2]
select a.๋ถ์์ฝ๋, a.์ฌ์๋ฒํธ, a.๊ธ์ฌ,
round(๊ธ์ฌ/๋ถ์๊ธ์ฌํฉ,2) as ๊ธ์ฌ๋น์ค
from(select ์ฌ์๋ฒํธ, ์ด๋ฆ, ๋ถ์์ฝ๋, ๊ธ์ฌ, sum(๊ธ์ฌ) over(partition by ๋ถ์์ฝ๋)as ๋ถ์๊ธ์ฌํฉ
from ์ง์
where ๋ถ์์ฝ๋ in('MKT','HRD')a
order by a.๋ถ์์ฝ๋, a.๊ธ์ฌ desc, a.์ฌ์๋ฒํธ
#[3]
select a.๋ถ์์ฝ๋, a.์ฌ์๋ฒํธ, a.๊ธ์ฌ,
round(๊ธ์ฌ/b.๋ถ์๊ธ์ฌํฉ,2) as ๊ธ์ฌ๋น์ค
from ์ง์a , (select ๋ถ์์ฝ๋, sum(๊ธ์ฌ) as ๋ถ์๊ธ์ฌํฉ
from ์ง์
where ๋ถ์์ฝ๋ in('MKT','HRD')
group by ๋ถ์์ฝ๋)b
where a.๋ถ์์ฝ๋ = b.๋ถ์์ฝ๋
and a.๋ถ์์ฝ๋ in('MKT','HRD')
order by a.๋ถ์์ฝ๋, a.๊ธ์ฌ desc, a.์ฌ์๋ฒํธ
3. ๊ณ์ธตํ ๊ตฌ์กฐ
- start with ์ ์ ๊ณ์ธต๊ตฌ์กฐ์ ์์์ ์ ์ง์ ํ๋ ๊ตฌ๋ฌธ
- order siblings by ์ ์ ํ์ ๋ ธ๋์ฌ์ด์์ ์ ๋ ฌ์ ์ง์ ํ๋ ๊ตฌ๋ฌธ
- ์๋ฐฉํฅ์ ๊ฐ๋ ๋ถ๋ชจ๋ ธ๋๋ก๋ถํฐ ์์๋ ธ๋๋ฐฉํฅ์ผ๋ก ์ ๊ฐํ๋ ๊ฒ
- ๋ฃจํธ๋ ธ๋์ level์ 1์ด๋ค
- SQL server์์์ ๊ณ์ธตํ ์ง์๋ฌธ์ CTE(common table expression)๋ฅผ ์ฌ๊ท ํธ์ถํจ์ผ๋ก์จ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ์ ๊ฐํ๋ค
- SQL server์์์ ๊ณ์ธตํ ์ง์๋ฌธ์ ์ต์ปค๋งด๋ฒ๋ฅผ ์คํํ์ฌ ๊ธฐ๋ณธ๊ฒฐ๊ณผ ์งํฉ์ ๋ง๋ค๊ณ ์ด๋ฃจ ์ฌ๊ท๋งด๋ฒ๋ฅผ ์ง์์ ์ผ๋ก ์คํํ๋ค
- ์ค๋ผํด ๊ณ์ธตํ ์ง์๋ฌธ์์ where์ ์ ๋ชจ๋ ์ ๊ฐ๋ฅผ ์งํํ ํ ํํฐ์กฐ๊ฑด์ผ๋ก์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ฐ์ดํฐ๋ง ์ถ์ถํ๋ค
- ์ค๋ผํด ๊ณ์ธตํ ์ง์๋ฌธ์์ priorํค์๋๋ connect by, select, where์ ์์๋ ์ฌ์ฉ๊ฐ๋ฅํ๋ค
tab1 | sql | ๊ตฌ์กฐ | ||
select c3 from tab1 start with c2 is null -> c2๊ฐ ๋๊ฐ์ธ A์์ ์์ connect by prior c1 = c2 ->๋ถ๋ชจ = ์์(์ญ๋ฐฉํฅ) order siblings by c3 desc -> c3์์ ๋์ผ ์ ์ ๋ ฌ ์ค๋ฆ์ฐจ์ |
a ->b ->c -> d |
|||
c1 | c2 | c3 | ||
1 | null | A | ||
2 | 1 | B | ||
3 | 1 | C | ||
4 | 2 | d |
๊ฒฐ๊ณผ
c3 |
A |
C(C์ B๋ ์ค๋ฆ์ฐจ์) |
B |
D |
4. ์๋ธ์ฟผ๋ฆฌ
- ์๋ธ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๊ฐ ๋ณต์ ํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๊ฒฝ์ฐ์๋ IN, ALL, ANY๋ฑ์ ๋ณต์ ํ ๋น๊ต ์ฐ์ฐ์์ ์ฌ์ฉํด์ผ ํ๋ค
- -> in,all,any๋ฑ์ ๋ณต์ํ ๋น๊ต ์ฐ์ฐ์๋ ๋จ์ผํ ์๋ธ์ฟผ๋ฆฌ์์๋ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค
- ๋ค์ค์นผ๋ผ ์๋ธ์ฟผ๋ฆฌ๋ ์๋ธ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๋ก ์ฌ๋ฌ ๊ฐ์ ์นผ๋ผ์ด ๋ฐํ๋์ด ๋ฉ์ธ์ฟผ๋ฆฌ์ ์กฐ๊ฑด๊ณผ ๋น๊ต๋๋๋ฐ SQL server์์๋ ํ์ฌ ์ง์ํ์ง ์๋๋ค
- ์๋ธ์ฟผ๋ฆฌ๋ ๋จ์ผํ ๋๋ ๋ณต์ํ ๋น๊ต์ฐ์ฐ์์ ํจ๊ป ์ฌ์ฉํ ์ ์๋ค
- ์๋ธ์ฟผ๋ฆฌ๋ select, from, having, order by์ ๋ฑ์์ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค
- ์ฐ๊ด ์๋ธ์ฟผ๋ฆฌ๋ ์๋ธ์ฟผ๋ฆฌ๊ฐ ๋ฉ์ธ์ฟผ๋ฆฌ ์นผ๋ผ์ ํฌํจํ๊ณ ์๋ ํํ์ ์๋ธ์ฟผ๋ฆฌ๋ค
- ๋น์ฐ๊ด ์๋ธ์ฟผ๋ฆฌ๊ฐ ์ฃผ๋ก ๋ฉ์ธ์ฟผ๋ฆฌ์ ๊ฐ์ ์ ๊ณตํ๊ธฐ ์ํ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ
- ๋ฉ์ธ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๊ฐ ์๋ธ์ฟผ๋ฆฌ๋ก ์ ๊ณต๋ ์๋ ์๊ณ , ์๋ธ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๊ฐ ๋ฉ์ธ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๋ก๋์ ๊ณต๋ ์ ์๋ค
5. ์๋์ฐํจ์
- percent-rank = ํํฐ์ ๋ณ ์๋์ฐ๋ฅผ ์ ์ผ ๋จผ์ ๋์ค๋ ๊ฒ์ 0์ผ๋ก, ์ ์ผ ๋ฆ๊ฒ ๋์ค๋ ๊ฒ์ 1๋ก ํ์ฌ, ๊ฐ์ด ์๋ ํ์ ์์๋ณ ๋ฐฑ๋ถ์จ์ ๊ตฌํ๋ค(ํํฐ์ ๋ณ 0~1)
- dense_rank = ์์๋ฅผ ๊ตฌํ๋ ํจ์๋ก ๋์ผํ ์์๋ฅผ ํ๋์ ๋ฑ์๋ก ๋ณธ๋ค(1,1,2,3)
- cume_dist = ํํฐ์ ๋ณ ์๋์ฐ์ ์ ์ฒด๊ฑด์์์ ํ์ฌ ํ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ๊ฑด์์ ๋ํ ๋์ ๋ฐฑ๋ถ์จ
- rank = ํํฐ์ ๋ด์ orderby์ ์ํ ์์๋ฅผ ๊ตฌํ๋ ํจ์๋ก, ๋์ผํ ์์์ ๋ํด์๋ ๋์ผํ ์์๋ฅผ ๋ถ์ฌ(1,1,3,4)
- ratio_to_report = ํํฐ์ ๋ด์ ์ฃผ์ด์ง ์นผ๋ผ์ ๊ฐ์ ํฉ๊ณ์ ๋ํ ๋ฐฑ๋ถ์จ์ ์์์ ์ผ๋ก ๋ํ๋
- ntile = ํํฐ์ ๋ณ ์ ์ฒด ๊ฑด์๋ฅผ ์ฃผ์ด์ง ์ธ์๋ก n๋ฑ๋ถํ ๊ฒฐ๊ณผ
6. ๋ทฐ
- ๋ทฐ๋ ๋จ์ง ์ ์๋ง ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ์คํ์์ ์์ ์ง์๋ฅผ ์ฌ์์ฑ ํ๋ค
- ๋ทฐ๋ ํ ์ด๋ธ๊ตฌ์กฐ๊ฐ ๋ณ๊ฒฝ๋์ด๋ ๋ทฐ๋ฅผ ์ฌ์ฉํ๋ ์์ฉํ๋ก๊ทธ๋จ์ ๋ณ๊ฒฝํ์ง ์์๋ ๋๋ค
- ๋ทฐ๋ ๋ณด์์ ๊ฐํํ๊ธฐ ์ํ ๋ชฉ์ ์ผ๋ก ํ์ฉ๋๋ค
- ์ค์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์๋ ๋ทฐ๋ฅผ ์์ฑํ๋ ๊ธฐ๋ฅ์ ์ง์ํ๋ DBMS๋ ์๋ค
7. revoke์ grant
- ์ด๋ค ์ฌ์ฉ์๊ฐ with grant option๊ณผ ํจ๊ป ๊ถํ์ ํ๊ฐ๋ฐ์์ผ๋ฉด ๊ทธ ์ฌ์ฉ์๋ ํด๋น ๊ถํ์ with grant option์ ๋ฌด์ ๊ด๊ณ์์ด ๋ค๋ฅธ ์ฌ์ฉ์์๊ฒ ํ๊ฐํ ์ ์๋ค
- public์ ์ฌ์ฉํ๋ฉด ์์ ์๊ฒ ํ๊ฐ๋ ๊ถํ์ ๋ชจ๋ ์ฌ์ฉ์๋ค์๊ฒ ํ๊ฐํ ์ ์๋ค
- revoke๋ฌธ์ ์ฌ์ฉํ์ฌ ๊ถํ์ ์ทจ์ํ๋ฉด ๊ถํ์ ์ทจ์๋นํ ์ฌ์ฉ์๊ฐ with grant option์ ํตํด์ ๋ค๋ฅธ ์ฌ์ฉ์์๊ฒ ํ๊ฐํ๋ ๊ถํ๋ค๋ ๋ชจ๋ ์ฐ์์ ์ผ๋ก ์ทจ์๋๋ค
- revoke๋ฌธ์ ์ฌ์ฉํ์ฌ ๊ถํ์ ์ทจ์ํ ๋ ๊ทธ ๊ถํ์ ํ๊ฐํ ์ฌ์ฉ์๊ฐ ๊ถํ์ ์ทจ์ํ ์ ์๋ค
B_user๊ฐ ํ๋จ์ ์์ ์ ์ํํ๊ธฐ ์ํด์๋
- GRANT SELECT, UPDATE ON A_user.TB_A to user_B
update A_user.TB_A # update
set col1 = 'AAA'
where col2=3 # where + select ์ฌ์ฉ
8.
select empno, sal
from emp
where sal >= (select max(sal) # ๋ค์คํ
from emp
grouop by deptno)
- ์๋ธ์ฟผ๋ฆฌ๋ ๋จ์ผํ ๋๋ ๋ณต์ํ ๋น๊ต์ฐ์ฐ์์ ํจ๊ป ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค. ๋จ์ผ ํ ๋น๊ต์ฐ์ฐ์๋ ์๋ธ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๊ฐ ๋ฐ๋์ 1์ดํ์ฌ์ผ ํ๊ณ , ๋ณต์ํ ์ฐ์ฐ์๋ ์๋ธ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ ๊ฑด์์ ์๊ด์๋ค
select ์ํ๋ถ๋ฅ์ฝ๋,
avg(์ํ๊ฐ๊ฒฉ) as ์ํ๊ฐ๊ฒฉ,
count(*) over(order by avg(์ํ๊ฐ๊ฒฉ) range between 1000 preceding and 1000 folwing) as์ ์ฌ๊ฐ์
from ์ํ
group by ์ํ๋ถ๋ฅ์ฝ๋
- group by์ ์ ์งํฉ์ ์๋ณธ์ผ๋ก ํ๋ ๋ฐ์ดํฐ๋ฅผ window function ๊ณผ ํจ๊ป ์ฌ์ฉํ๋ค๋ฉด group by์ ๊ณผ window๋ฅผ ํจ๊ป ์ฌ์ฉํด๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์๋๋ค
- ์ ์ฌ๊ฐ์ ์ปฌ๋ผ์ ์ํ๋ถ๋ฅ์ฝ๋๋ก grouping ๋ ์งํฉ์ ์๋ณธ์งํฉ์ผ๋กํ์ฌ ์ํ๋ถ๋ฅ์ฝ๋๋ณ ํ๊ท ์ํ๊ฐ๊ฒฉ์ ์๋ก ๋น๊ตํ์ฌ ํ์ฌ ์ฝํ ์ํ๋ถ๋ฅ์ฝ๋์ ํ๊ท ๊ฐ๊ฒฉ ๋๋น -1000 ~ 1000์ฌ์ด์ ์กด์ฌํ๋ ์ํ๋ถ๋ฅ์ฝ๋์ ๊ฐ์๋ฅผ ๊ตฌํ ๊ฒ
9. ์์ํจ์
- ์์ํจ์์ order by๋ฅผ ์ฌ์ฉํด์ ์์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค๋ฆ์ฐจ์ ํน์ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ถ๋ ฅํ ์ ์๋ค
- rank() : ์ค๋ณต๊ฐ์ ์ค๋ณต๋ฑ์, ๋ฑ์๊ฑด๋๋
- dense_rank() : ์ค๋ณต๊ฐ์ ์ค๋ณต๋ฑ์, ๋ฑ์ ์ ๊ฑด๋๋, ๋์ผ๋ฑ์ ์์์ ์ํฅ์ด ์๋ค
- row_number() : ์ค๋ณต๊ฐ์ด ์์ด๋ ๊ณ ์ ๋ฑ์ ๋ถ์ฌ
10. ์กฐ์ธ
1) NL ์กฐ์ธ
- ์ข์๋ฒ์์ ์ ๋ฆฌ
- ์ ๋ฆฌ์์ฐจ์ ์ฒ๋ฆฌํ๋ฉฐ, random access์์ฃผ
- ํํํ ์ด๋ธ์๋ ์กฐ์ธ์ ์ํ ์ธ๋ฑ์ค๊ฐ ์์ฑ๋์ด์ผ ํจ
2) sort merge join
- ํด๋นํ ์ด๋ธ์ ์ธ๋ฑ์ค๊ฐ ์์ ๋ ์ํ
- ์ ๋ ฌํ ํ์ ์ ๋ ฌ๋ ๋ฐ์ด๋ธ์ ๋ณํฉํ๋ฉด์ ์กฐ์ธ์ ์ํ
- ์กฐ์ธ ์ฐ๊ฒฐ๊ณ ๋ฆฌ์ ๋น๊ต ์ฐ์ฐ์๊ฐ ๋ฒ์์ฐ์ฐ์ธ ๊ฒฝ์ฐ ์ ๋ฆฌ
- ๋ ๊ฒฐ๊ณผ ์งํฉ์ ํฌ๊ธฐ ์ฐจ์ด๊ฐ ๋ง์ด ๋๋ ๊ฒฝ์ฐ ๋นํจ์จ
3) hash
- ๋๋์ด ๋ฐ์ดํฐ์ฒ๋ฆฌ๊ฐ ํ์ํ๊ณ , ์ฟผ๋ฆฌ์ํ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ ๋์ฉ๋์ ์ ํฉ
- nl๊ณผ sort์ ์กฐ์ธ๋ฌธ์ ์ ํด๊ฒฐ
- ์ค๋ฒํค๋ ๋ฐ์ ๊ฐ๋ฅ
'์๊ฒฉ์ฆ > SQLD' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ค๋ต๋ ธํธ] 1. ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง์ ์ดํด2 (0) | 2024.03.09 |
---|---|
SQL ๋์ผ์ฐ์ฐ (0) | 2024.03.04 |
[์ค๋ต๋ ธํธ] 2-1. SQL ๊ธฐ๋ณธ (0) | 2024.03.03 |
[์ค๋ต๋ ธํธ] 2-3. ๊ด๋ฆฌ๊ตฌ๋ฌธ (0) | 2024.03.02 |
[์ค๋ต๋ ธํธ] 1. ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง์ ์ดํด (0) | 2024.03.02 |