์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- ์ฐ์ฐ์
- ๋ฐฐ์ด
- ๋น๊ต ์ฐ์ฐ์
- ์๋ณ์
- java
- SQLํ๋
- ์๋ฐ์์ ์
- ์ค๋ฒ๋ผ์ด๋ฉ
- ์ธํ ๋ฆฌ์ ์ด Web ์ ํ๋ฆฌ์ผ์ด์
- ์์ฝ์ด
- ์์
- SQL ํ๋
- ์น์ ํ SQL
- SQL
- SpringSecurity ๋ก๊ทธ์์
- join
- SpringSecurity ๋ก๊ทธ์ธ
- ์ฐ์ ์ฐ์ฐ์
- ๊ฐ์ฒด
- ์คํ๋ง์ํ๋ฆฌํฐ ๋ก๊ทธ์์
- ์ค๋ฒ๋ก๋ฉ
- ์ดํด๋ฆฝ์ค ์ค์น
- @PreAuthorize("isAuthenticated()")
- ๋ ผ๋ฆฌ ์ฐ์ฐ์
- ๋ฐ๋ณต๋ฌธ
- ๊ฐ์ฒด์งํฅ
- StringBuffer
- ํจ์
- spring ๊ฒ์ํ ์ญ์
- ์น์ ํ SQL ํ๋
- Today
- Total
gi_dor
๐ SQL ํ๋ - CH 4. ์กฐ์ธ ํ๋ - ์๋ธ์ฟผ๋ฆฌ ์กฐ์ธ ๋ณธ๋ฌธ
๐ SQL ํ๋ - CH 4. ์กฐ์ธ ํ๋ - ์๋ธ์ฟผ๋ฆฌ ์กฐ์ธ
๊ธฐ๋ 2023. 8. 21. 10:42
๐ ์๋ธ์ฟผ๋ฆฌ ์กฐ์ธ
1 - 1 ์๋ธ์ฟผ๋ฆฌ ๋ณํ์ด ํ์ํ ์ด์
์ตํฐ๋ง์ด์ ๋ ๋น์ฉ์ ํ๊ฐํ๊ณ ์คํ๊ณํ์ ์์ฑํ๊ธฐ์ ์์ ์ฌ์ฉ์๋ก๋ถํฐ
์ ๋ฌ๋ฐ์ SQL์ ์ต์ ํ์ ์ ๋ฆฌํ ํํ๋ก ๋ณํํ๋ ์์
์ฟผ๋ฆฌ๋ณํ๋ถํฐ ์งํํ๋ค
์ตํฐ๋ง์ด์ ์์ง์ ๋ฌด๊ฑฐ์์ง๊ณ ์ต์ ํ์ ์์๋๋ ์๊ฐ๋ ์ ์ ๋์ด๋๊ณ ์๋ค
์ฟผ๋ฆฌ๋ณํ์ ์ตํฐ๋ง์ด์ ๊ฐ SQL์ ๋ถ์ํด ๋์ผํ๋ฉด์ ๋ ๋์ ์ฑ๋ฅ์ด ๊ธฐ๋๋๋ ํํ๋ก ์ฌ์์ฑ์ ๋งํ๋ค
์๋ธ์ฟผ๋ฆฌ๋ ํ๋์ SQL๋ฌธ ์์ ๊ดํธ๋ก ๋ฌถ์ ๋ณ๋์ ์ฟผ๋ฆฌ ๋ธ๋ก์ ๋งํ๋ค.
DBMS๋ง๋ค ์กฐ๊ธ์ฉ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ๋ค๋ฅด๊ฒ ๋ถ๋ฅํ๋๋ฐ ํ๋จ ๊ทธ๋ฆผ์์๋ ์ค๋ผํด์ 3๊ฐ์ง๋ก ๋ถ๋ฅํ๋ค
select c.๊ณ ๊ฐ๋ฒํธ, c.๊ณ ๊ฐ๋ช
, t.ํ๊ท ๊ฑฐ๋, t.์ต์๊ฑฐ๋, t.์ต๋๊ฑฐ๋
, (select ๊ณ ๊ฐ๋ถ๋ฅ๋ช
from ๊ณ ๊ฐ๋ถ๋ฅ where ๊ณ ๊ฐ๋ถ๋ฅ์ฝ๋ = c.๊ณ ๊ฐ๋ถ๋ฅ์ฝ๋) /* ์ค์นผ๋ผ ์๋ธ์ฟผ๋ฆฌ */
from ๊ณ ๊ฐ c , (select ๊ณ ๊ฐ๋ฒํธ, avg(๊ฑฐ๋๊ธ์ก) ํ๊ท ๊ฑฐ๋, min(๊ฑฐ๋๊ธ์ก) ์ต์๊ฑฐ๋, max(๊ฑฐ๋๊ธ์ก) ์ต๋๊ฑฐ๋
from ๊ฑฐ๋ /* ์ธ๋ผ์ธ ๋ทฐ */
where ๊ฑฐ๋์ผ์ >= trunc(sysdate, 'mm')
group by ๊ณ ๊ฐ๋ฒํธ) t
where c.๊ฐ์
์ผ์ >= trunc(add_months(sysdate, -1), 'mm')
and t.๊ณ ๊ฐ๋ฒํธ = c.๊ณ ๊ฐ๋ฒํธ
and exist ( select 'x' /* ์ค์ฒฉ๋ ์๋ธ์ฟผ๋ฆฌ */
from ๊ณ ๊ฐ๋ณ๊ฒฝ์ด๋ ฅ h
where h.๊ณ ๊ฐ๋ฒํธ = c.๊ณ ๊ฐ๋ฒํธ
and h.๋ณ๊ฒฝ์ฌ์ ์ฝ๋ = 'ZCH'
and c.์ต์ข
๋ณ๊ฒฝ์ผ์ between h.์์์ผ์ and h.์ข
๋ฃ์ผ์ );
1. ์ธ๋ผ์ธ ๋ทฐ : FROM ์ ์ ์ฌ์ฉํ ์๋ธ์ฟผ๋ฆฌ
2. ์ค์ฒฉ๋ ์๋ธ์ฟผ๋ฆฌ : ๊ฒฐ๊ณผ์งํฉ์ ํ์ ํ๊ธฐ ์ํ WHERE ์ ์ ์ฌ์ฉํ ์๋ธ์ฟผ๋ฆฌ
์๋ธ์ฟผ๋ฆฌ๊ฐ ๋ฉ์ธ์ฟผ๋ฆฌ ์ปฌ๋ผ์ ์ฐธ์กฐํ๋ ํํ๋ฅผ '์๊ด๊ด๊ณ ์๋ ์๋ธ์ฟผ๋ฆฌ' ๋ผ๊ณ ๋งํ๋ค.
3. ์ค์นผ๋ผ ์๋ธ์ฟผ๋ฆฌ : ํ ๋ ์ฝ๋๋น ํ๋์ ๊ฐ์ ๋ฐํํ๋ ์๋ธ์ฟผ๋ฆฌ
SELECT-LIST์์ ์ฌ์ฉํ์ง๋ง ์์ธ์ฌํญ์ ์ ์ธํ๋ฉด ์ปฌ๋ผ์ด ์ฌ์์๋ ๋๋ถ๋ถ ์์น์ ์ฌ์ฉ ํ ์ ์๋ค.
1 - 2 ์๋ธ์ฟผ๋ฆฌ์ ์กฐ์ธ
ํํผ ์คํผ๋ ์ด์
์๋ธ์ฟผ๋ฆฌ๋ ๋จ๋ ์ผ๋ก ์คํํ ์ ์๊ธฐ ๋๋ฌธ์ ํํฐ๋ฅผ ์ฌ์ฉํด ๋ฉ์ธ์ฟผ๋ ์ด์ ๊ฐ์ ๋ฐ์ ์คํํด์ผ ํ๋ค
- ๋ฉ์ธ์ฟผ๋ฆฌ์ ํ ๋ก์ฐ๊ฐ ์๋ธ์ฟผ๋ฆฌ์ ํ ๋ก์ฐ์ ์กฐ์ธ์ ์ฑ๊ณตํ๋ ์๊ฐ ์งํ์ ๋ฉ์ถ๊ณ ๋ฉ์ธ์ฟผ๋ฆฌ์ ๋ค์ ๋ก์ฐ๋ฅผ ์ฒ๋ฆฌํ๋ค
- ํํฐ๋ ์บ์ฑ๊ธฐ๋ฅ์ ๊ฐ๋๋ค
์บ์ - ์์ฃผ ํ์ํ ๋ฐ์ดํฐ๋ ๊ฐ์ ๋ณต์ฌ๋ณธ์ ์ผ์์ ์ผ๋ก ์ ์ฅ ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๊ณต๊ฐ
์บ์ฑ - ์บ์ + ing ์บ์๋ฅผ ์ฌ์ฉํ๋๊ฒ
์๋ธ์ฟผ๋ฆฌ Unnesting
'nest' , "์์๋ฑ์ ์ฐจ๊ณก์ฐจ๊ณก ํฌ๊ฐ๋ฃ๋ค"
๋ฐ๋์ ์๋ฏธ์ธ 'un'์ ํ์ฉํด unnest๋ "์ค์ฒฉ๋ ์ํ๋ฅผ ํ์ด๋ด๋ผ"
์๋ธ์ฟผ๋ฆฌ Unnesting์ ๋ฉ์ธ๊ณผ ์๋ธ์ฟผ๋ฆฌ๊ฐ์ ๊ณ์ธต๊ตฌ์กฐ๋ฅผ ํ์ด ์๋ก ๊ฐ์ ๋ ๋ฒจ๋ก ๋ง๋ค์ด์ค๋ค
์๋ธ์ฟผ๋ฆฌ๋ฅผ ๊ทธ๋๋ ๋๋ฉด ํํฐ ๋ฐฉ์์ ์ฌ์ฉ ํ ์ ๋ฐ์ ์์ง๋ง
Unnestring ํ๊ณ ๋๋ฉด ์ผ๋ฐ JOIN๋ฌธ ์ฒ๋ผ ๋ค์ํ ์ต์ ํ ๊ธฐ๋ฒ์ ์ฌ์ฉ ํ ์ ์๋ค
select c.๊ณ ๊ฐ๋ฒํธ, c.๊ณ ๊ฐ๋ช
from ๊ณ ๊ฐ c
where c.๊ฐ์
์ผ์ >= trunc(add_months(sysdate, -1), 'mm')
and exist (
select /*+ unnest nl_sj */ 'x'
from ๊ฑฐ๋
where ๊ณ ๊ฐ๋ฒํธ = c.๊ณ ๊ฐ๋ฒํธ
and ๊ฑฐ๋์ผ์ >= trunc(sysdate, 'mm'));
์๋ธ์ฟผ๋ฆฌ๋ฅผ Unnestingํ์ง ์๊ณ ์๋๋๋ก ๋ ์ํ์์ ์ต์ ํ ํ๋ค๋ฉด
๋ฉ์ธ์ฟผ๋ฆฌ์ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ๋ณ๋์ ์๋ธํ๋์ผ๋ก ๊ตฌ๋ถํด ๊ฐ๊ฐ ์ต์ ํ๋ฅผ ์ํํ๋ฉฐ,
์ด๋ ์๋ธ์ฟผ๋ฆฌ์ ํํฐ ์คํผ๋ ์ด์ ์ด ๋ํ๋๋ค.
1 - 3 ์ค์นผ๋ผ ์๋ธ์ฟผ๋ฆฌ ์บ์ฑ
์ค์นผ๋ผ ์๋ธ์ฟผ๋ฆฌ๋ก ์กฐ์ธํ๋ฉด ์ค๋ผํด์ ์กฐ์ธํ์๋ฅผ ์ต์ํ ํ๋ ค๊ณ ์ ๋ ฅ ๊ฐ๊ณผ ์ถ๋ ฅ ๊ฐ์ ๋ด๋ถ ์บ์์ ์ ์ฅํด๋๋ค.
โพ ์กฐ์ธ ์ฑ๋ฅ์ ๋์ด๋๋ฐ ํฐ ๋์์ด ๋๋๋ฐ ,๋ฉ์ธ์ฟผ๋ฆฌ ์งํฉ์ด ์๋ฌด๋ฆฌ์ปค๋ ์กฐ์ธํ ๋ฐ์ดํฐ๋ฅผ ๋๋ถ๋ถ ์บ์์ ์ฐพ๋๋ค๋ฉด
์กฐ์ธ ์ํํ์๋ฅผ ์ต์ํ ํ ์ ์๋ค
โพ ์ค์นผ๋ผ ์๋ธ์ฟผ๋ฆฌ ์บ์ฑํจ๊ณผ๋ ์ ๋ ฅ ๊ฐ์ ์ข ๋ฅ๊ฐ ์์์ฌ์ ํด์ ์ถฉ๋ ๊ฐ๋ฅ์ฑ์ด ์์๋ ํจ๊ณผ๊ฐ ์๋ค.
โพ ๋จ์ ์ผ๋ก ์ค์นผ๋ผ ์๋ธ์ฟผ๋ฆฌ์ ์ฌ์ฉ ํ๋ ์บ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด์ด์ ์บ์ ๊ณต๊ฐ์ด ๋ ๋ถ์กฑํ๊ณ ์์ด๋ฉด ์ฑ๋ฅ์ด ๋๋น ์ง๋ค.
'First > SQL ํ๋' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐ SQL ํ๋ - CH.6 DMLํ๋ (0) | 2023.08.31 |
---|---|
๐ SQL ํ๋ - CH 5. ์ํธ ํ๋ (0) | 2023.08.21 |
๐ SQL ํ๋ - CH 4. ์กฐ์ธ ํ๋ - ํด์ ์กฐ์ธ (0) | 2023.08.18 |
๐ SQL ํ๋ - CH 4. ์กฐ์ธ ํ๋ - ์ํธ ๋จธ์ง ์กฐ์ธ (0) | 2023.08.18 |
๐ SQL ํ๋ - CH 4. ์กฐ์ธ ํ๋ - NL ์กฐ์ธ (0) | 2023.08.18 |