์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- database
- ์ค๋ผํด
- K๋ฐฐํฐ๋ฆฌ๋ ๋ณผ๋ฃจ์
- Python
- ์นํ์ด์ง๋ง๋ค๊ธฐ
- css
- ์นํผ๋ธ๋ฆฌ์ฑ
- ๋ผํ๋ผ์ค์๋ง๋
- ๋ ์
- ํ๋ก๊ทธ๋๋ฐ
- ์ฑ
- ๊น๋ฏธ๊ฒฝ์๋งํ์์
- ์๋ฐ
- ์๋ฐ์คํฌ๋ฆฝํธ
- ํ์ด์ฌ
- Java
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ๋ฐ์ํ
- ์ปดํจํฐ๊ณผํ
- ComputerScience
- ๊น๋ฏธ๊ฒฝ
- ์ํ
- JavaScript
- ์ฅํธ์์ค
- html
- K๋ฐฐํฐ๋ฆฌ
- ๊นํ๋จ
- ๊ฐ๋ฐ
- ๋ง์ผ๋ด๊ฐ์ธ์์๋ค์์ฐ๋ค๋ฉด
- ์ฝ๋ฉ
- Today
- Total
JiYoung Dev ๐ฅ
[Oracle Database] JOIN, GROUP BY, ์ง๊ณ ํจ์, HAVING (2023.03.22~23) ๋ณธ๋ฌธ
[Oracle Database] JOIN, GROUP BY, ์ง๊ณ ํจ์, HAVING (2023.03.22~23)
Shinjio 2023. 3. 24. 15:262023.03.22~23 ํ์ต๋ด์ฉ
์ฟผ๋ฆฌ
๋ฐ์ดํฐ๋ฒ ์ด์ค์๊ฒ ํน์ ํ ๋ฐ์ดํฐ๋ฅผ ๋ณด์ฌ๋ฌ๋ผ๋ ํด๋ผ์ด์ธํธ(์ฌ์ฉ์)์ ์์ฒญ
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ํ๋ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๋ ์ฝ๋
๐ ์ฌ๋ฌ ํ ์ด๋ธ ํ ๋ฒ์ ์ฌ์ฉํ๊ธฐ
์คํค๋ง : ํ ์ด๋ธ(๊ฐ์ฒด)์ ์ ์ฅํ๋ ๊ณต๊ฐ
์คํค๋ง๋ ๊ฐ ๊ณ์ ๋ง๋ค ์กด์ฌํ๋ฉฐ ์ด๋ฆ์ด ๊ณ์ ๊ณผ ๊ฐ๋ค.
. ์ ๊ทผ ์ฐ์ฐ์
ํ์ฌ ์ ์ํ ๊ณ์ ์ ๊ธฐ์ค์ผ๋ก ์คํค๋ง๋ฅผ ์๋ตํด์ค
FROM ๋ค์๋ ์ฝค๋ง(,)๋ฅผ ์ฌ์ฉํ์ฌ ํ ์ด๋ธ์ 2๊ฐ ์ด์ ์ธ ์ ์๋ค.
SELECT *
FROM ์ง์, ์ง์์ฐ๋ฝ์ฒ ;
์คํํ๋ฉด
์ง์ ํ ์ด๋ธ์ ํํ(11๊ฐ) * ์ง์์ฐ๋ฝ์ฒ์ ํํ(13๊ฐ) = ์ด 143๊ฐ์ ํํ์ด ์ถ๋ ฅ๋จ
์ง์ ํ ์ด๋ธ์ ์ปฌ๋ผ(9๊ฐ) + ์ง์์ฐ๋ฝ์ฒ ํ ์ด๋ธ์ ์ปฌ๋ผ(3๊ฐ) = ์ด 12๊ฐ์ ์ปฌ๋ผ์ด ์ถ๋ ฅ๋จ
์ด ๋๋ถํฐ๋ ์ปฌ๋ผ๋ช ์์ ํ ์ด๋ธ๋ช ์ ์จ์ผ ํจ.
๋ ๊ฐ์ ํ ์ด๋ธ ๋ชจ๋์ ๊ฐ์ ์ปฌ๋ผ์ ๊ฐ์ง๊ณ ์์ ์ ์๊ธฐ ๋๋ฌธ
SELECT ์ง์.์ง์ID
, ์ง์.์ด๋ฆ
, ์ง์.๋์ด
, ์ง์.์ฐ๋ด
, ์ง์์ฐ๋ฝ์ฒ.์ง์ID
, ์ง์์ฐ๋ฝ์ฒ.์ฐ๋ฝ์ฒ
FROM ์ง์, ์ง์์ฐ๋ฝ์ฒ
WHERE ์ง์.์ง์ID = ์ง์์ฐ๋ฝ์ฒ.์ง์ID ;
ํ ์ด๋ธ๋ช ์ ๋ณ์นญ์ ์ค์ ๊ฐ๋จํ๊ฒ ์์ฑํ ์ ์์
๋ณ์นญ์ ์ด ์ดํ๋ถํฐ๋ ๋ณ์นญ๋ง ์ฌ์ฉ ๊ฐ๋ฅ (ํ ์ด๋ธ๋ช ์ฌ์ฉํ ์ ์๋ค)
SELECT A.์ง์ID
, A.์ด๋ฆ
, A.๋์ด
, A.์ฐ๋ด
, B.์ง์ID
, B.์ฐ๋ฝ์ฒ
FROM ์ง์ A, ์ง์์ฐ๋ฝ์ฒ B
WHERE A.์ง์ID = B.์ง์ID ;
๐ FROM - JOIN
๐ JOIN์ ์๋ฏธ์ ์๋ฆฌ
JOIN ์ฌ๋ฌ ํ
์ด๋ธ์ ์ฐ๊ฒฐํด ์ฌ์ฉํ๋ ๊ฒ
์กฐ์ธ์ ์ฌ์ฉํ๋ ๊ฐ์ฅ ํฐ ์ด์ ๋ ์ฌ๋ฌ ํ
์ด๋ธ์์ ํ์ํ ์นผ๋ผ๋ค์ ํ ๋ฒ์ ๊ฒ์ํ ์ ์๊ธฐ ๋๋ฌธ
โ ์นดํฐ์ ์กฐ์ธ
๋ ํ ์ด๋ธ์ ๋ชจ๋ ํํ์ ๋ํด ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ถ์ธ ๊ฒ
ํ ์ด๋ธ ๊ฐ์ ํน์ ์ปฌ๋ผ์ผ๋ก ์ฐ๊ฒฐ์ ํ์ฌ ์๋ก ์ฐ๊ด๋ ๋ฐ์ดํฐ๋ง ๋จ๊น
ํ ์ด๋ธ ๊ฐ์ ํน์ ์ปฌ๋ผ์ผ๋ก ์ฐ๊ฒฐ → ์กฐ์ธ ์กฐ๊ฑด
๊ทธ ์ธ์ ์กฐ๊ฑด์ ์ผ๋ฐ ์กฐ๊ฑด
๋๋ฑ JOIN
์กฐ์ธ ์กฐ๊ฑด์ด ๋ชจ๋ = ์ธ ๊ฒฝ์ฐ
๋๋ถ๋ถ ๋๋ฑ ์กฐ์ธ ์ฌ์ฉ
๋น๋๋ฑ JOIN
์กฐ์ธ ์กฐ๊ฑด์ด ํ๋๋ผ๋ = ๊ฐ ์๋ ๊ฒฝ์ฐ
SELECT A.์ง์ID
, A.์ด๋ฆ
, A.๋์ด
, A.์ฐ๋ด
, B.์ง์ID
, B.์ฐ๋ฝ์ฒ
FROM ์ง์ A, ์ง์์ฐ๋ฝ์ฒ B
WHERE A.์ง์ID <= B.์ง์ID ;
โ OUTER ์กฐ์ธ
ํน์ ํ ์ด๋ธ ๊ธฐ์ค์ผ๋ก ์กฐ์ธ์ ์คํจํ ๋์๋ ์ถ๋ ฅ
INNER JOIN์ ์กฐ์ธ์ ์ฑ๊ณตํ ๋์๋ง ์ถ๋ ฅํ๋ ๋์ OUTER JOIN์ ํน์ ํ ์ด๋ธ์ ๊ธฐ์ค์ผ๋ก ์กฐ์ธ์ ์คํจํ ๋์๋ ์ถ๋ ฅ
(+) ๊ธฐํธ๊ฐ ์์ผ๋ฉด OUTER JOIN
ํน์ง
1. (+) ๊ธฐํธ๋ ์ค๋ผํด์์๋ง ์ฌ์ฉํจ
2. (+) ๊ธฐํธ๊ฐ ๋ถ์ ์ชฝ์ ๋ฐ๋์ชฝ ํ ์ด๋ธ์ ๊ธฐ์ค์ผ๋ก ๋ณด์ฌ์ค
3. (+) ๊ธฐํธ๊ฐ ์์ผ๋ฉด INNER JOIN
๐ ANSI(AMERICA NATIONAL STANDARD INSTITUTE) ๋ฌธ๋ฒ
๋ชจ๋ DBMS์์ ์ฌ์ฉ๊ฐ๋ฅํ ์กฐ์ธ ๋ฌธ๋ฒ
์ค๋ผํด ์กฐ์ธ๊ณผ ANSI์ ์ฐจ์ด์
์ค๋ผํด ์กฐ์ธ
- WHERE ๋ถ๋ถ์ ์กฐ์ธ ์กฐ๊ฑด์ ์ฌ์ฉ
- FROM์ด ๊น๋ํ์ง๋ง WHERE๊ฐ ๋ณต์กํจ
- ์์ฐํฐ ์กฐ์ธ์ (+) ๊ธฐํธ๋ฅผ ์ด์ฉํด์ ํ์
ANSI
- FROM ๋ค์ ON ๋ถ๋ถ์ ์กฐ์ธ์กฐ๊ฑด ์ฌ์ฉ
- WHERE๋ ์ผ๋ฐ์กฐ๊ฑด๋ง ์ ๋ ฅํ๋ฉด ๋๋ฏ๋ก ๊น๋ํ ๋์ FROM ๋ถ๋ถ์ด ๋ณต์กํจ
- LEFT(RIGHT) OUTER JOIN์ผ๋ก ๋ช ์ํ์ฌ (+) ๊ธฐํธ๊ฐ ํ์ ์์
→ (+) ์ด ๋ถ์ ๋ฐ๋์ชฝ ํ ์ด๋ธ์ ๋ฐฉํฅ์ผ๋ก LEFT ํน์ RIGHT๋ฅผ ๊ฒฐ์
- ๋ฐ๋ก (+) ์กฐ๊ฑด์ด ์๋ค๋ฉด INNER JOIN์ผ๋ก ์ฐ๊ฒฐ
๐ FULL OUTER JOIN
์์ชฝ ํ ์ด๋ธ ๋ชจ๋ OUTER JOIN์ ํ๊ณ ์ถ์ ๋ FULL OUTER JOIN ์ฌ์ฉ
์ค๋ฌด์์๋ ์์ฃผ ์์ฐ์ด์ง๋ง ์ํ์ ์์ฃผ ๋์ด
์ค๋ผํด์๋ ํด๋น ๋ฌธ๋ฒ์ด ์๋ค. (+)๋ ํ์ชฝ์๋ง ์ฌ์ฉํ ์ ์์
3๊ฐ์ ํ ์ด๋ธ ์กฐ์ธํ๋ ๋ฒ
๐ GRUOP BY
๐ GROUP BY ๋ฌธ๋ฒ
์ง๊ณ๋ฅผ ๊ตฌํ ์ ์๋ ๋ฌธ๋ฒ
ํน์ ์ปฌ๋ผ(ํํ์)์ ๊ธฐ์ค์ผ๋ก ํํ(ํ)์ ๊ทธ๋ฃนํ(๋ฌถ์ด์) ๊ฐ๊ฐ ๋จ์ผํ์ผ๋ก ํ๊ธฐ
GROUP BY๋ ์ค์ ๋ก ์ถ๋ ฅ๋๋ ํํ(ํ)์ด ๊ฐ์ํจ
๋ฐ๋ผ์ ์ ๋ ฅํ ์ ์๋ ์ปฌ๋ผ์ด ์ ํ๋จ → GROUP BY์์ ์ฌ์ฉํ ์ปฌ๋ผ๋ง ์ฌ์ฉ ๊ฐ๋ฅ, ๋์ ์ง๊ณํจ์๋ฅผ ์ฌ์ฉํ ์ ์์
์คํ์์
โ FROM โก WHEREโข GROUP BYโฃ SELECT
๐ ์ง๊ณํจ์ (๋ค์คํ ํจ์๋ผ๊ณ ๋ ํจ)
์ฌ๋ฌ ํ์ ์ ๋ ฅ ๋ฐ์ ์ง๊ณํด ํ๋์ ๊ฒฐ๊ณผ๋ก ์ถ๋ ฅ
โ COUNT() โ ๋ง์ด ์ฐ์ด๋ ํจ์
๊ทธ๋ฃจํํ ์ปฌ๋ผ ๊ธฐ์ค์ผ๋ก ํ์ ๊ฐ์๋ฅผ ์ถ๋ ฅ
๋ค๋ฅธ ์ง๊ณํจ์์ ๋ฌ๋ฆฌ COUNT๋ COUNT(*)๋ฅผ ์ธ ์ ์์ (๋ค๋ฅธ ํจ์๋ * ์ฌ์ฉ ๋ถ๊ฐ)
๋ชจ๋ ์๋ฃํ์ ์ด์ฉํ ์ ์์ (ํ์ ๊ฐ์๋ฅผ ์ธ๋ ๊ฒ์ด๋ฏ๋ก)
์์คํฐ๋ฆฌ์คํฌ(*)์ ๊ฒฝ์ฐ NULL์ด ์๋๋ง๋ ํ ์์ฒด๋ฅผ ์นด์ดํธํจ → NULL์ ํฌํจํ ํ์ ๊ฐ์ ์ถ๋ ฅ
ํน์ ์ปฌ๋ผ์ด ์ ๋ ฅ๋์ด ์์ผ๋ฉด NULL์ด ์์ผ๋ฉด NULL์ ์ ์ธํ๊ณ ๊ฐ์ด ๋ค์ด๊ฐ ํ์ ์ซ์๋ฅผ ์ผ๋ค.
GROUP BY๊ฐ ์์ด๋ ์ง๊ณ ํจ์๋ฅผ ์ฌ์ฉํ ์ ์์
WHY? FROM์ ์ ๋ ฅ๋ ํ๋์ ํ ์ด๋ธ์ ํ๋์ ๊ทธ๋ฃน์ผ๋ก ๋ณด๊ธฐ ๋๋ฌธ
๋จ, SELECT์ ์ด๋ค ์ปฌ๋ผ๋ ์ฌ์ฉํ ์ ์์ (์ง๊ณํจ์๋ ์ฌ์ฉ๊ฐ๋ฅ)
โ MAX(), MIN() : ์ต๋๊ฐ, ์ต์๊ฐ
NULL ๋ฐ์ดํฐ๋ฅผ ๋ฌด์ํ๋ค → NULL ๋ฐ์ดํฐ๋ฅผ ํฌํจํ ํ์ ํฌํจํ์ง ์๋๋ค.
๋ชจ๋ ์๋ฃํ์ ์ด์ฉ ๊ฐ๋ฅํ๋ค
๋ ์งํ์ผ ๋
๋ฌธ์์ด์ผ ๋
โ AVG() : ํ๊ท
NULL ๋ฐ์ดํฐ๋ ๋ฌด์ (ex. 1, 2, null, 3 ์ ํ๊ท → 1, 2, 3์ ํ๊ท ๊ณผ ๊ฐ๋ค)
์ซ์ํ๋ง ๊ฐ๋ฅ
์คํ ๋ฐฉ์์ ์ฃผ์
์ ๋ถ NULL ๊ฐ์ผ ๊ฒฝ์ฐ NULL๊ฐ์ ์ถ๋ ฅ → S0006์ ๊ฒฝ์ฐ
AVG๊ฐ ๋ฐ์ฌ๋ฆผํ์ฌ ์ถ๋ ฅ
โ SUM() : ํฉ๊ณ
NULL ๋ฐ์ดํฐ ๋ฌด์
์ซ์ํ์๋ง ์ด์ฉ๊ฐ๋ฅ
๐ HAVING
์ง๊ณ๊ฐ ์๋ฃ๋ ๋์์ ํํฐ๋งํ๋ ๋ฌธ๋ฒ
์คํ์์
FROM → WHERE → GROUP BY → HAVING → SELECT
HAVING ์ฌ์ฉํ๊ธฐ ์
HAVING ์ฌ์ฉํ ํ
HAVING์ด ํ์ํ ์ด์
์ง๊ณํจ์์ ๋ํ ์กฐ๊ฑด์ ์ค ์ ์๊ธฐ ๋๋ฌธ
WHERE์ ์ ์ง๊ณํจ์์ ๋ํ ์กฐ๊ฑด์ ์ค ์ ์์
→ ์ง๊ณ ํจ์๋ฅผ ์ฐ๋ ค๋ฉด GROUP BY๊ฐ ๋จผ์ ์ฒ๋ฆฌ๋์ด์ผ ํจ
→ GROUP BY ์ ์ ์ฒ๋ฆฌ๋๋ WHERE์ ์์๋ ์ง๊ณ ํจ์ ์ฌ์ฉ ๋ชปํจ
→ HAVING์ GROUP BY ์ดํ ์คํ๋๋ฏ๋ก ์ง๊ณํจ์๋ฅผ ์ฌ์ฉํ ์ ์์
HAVING ์์๋ GROUP BY์์ ์ฌ์ฉํ ์ปฌ๋ผ๋ง ์ฌ์ฉํ ์ ์์. ๋จ, ์ง๊ณํจ์ ์ฒ๋ฆฌํ๋ฉด ์ฌ์ฉํ ์ ์์
4๋ฒ์ ๊ฒฝ์ฐ SELECT๊ฐ ๊ฐ์ฅ ๋ง์ง๋ง์ ์ํ๋๋ฏ๋ก ์ฐ๋ดํฉ๊ณ ๋ณ์นญ์ HAVING ๋จ๊ณ์์ ์กด์ฌํ์ง ์์. ๋ฐ๋ผ์ ์ค๋ฅ ๋ฐ์
HAVING์ WHERE์ ๊ณผ ๋๊ฐ์ด NULL ์กฐ๊ฑด ์ฌ์ฉ ๊ฐ๋ฅ
๐ ORDER BY
๐ ORDER BY ๋ฌธ๋ฒ
์คํ์์
FROM > WHERE > GROUP BY > HAVING > SELECT > ORDER BY
ํน์ ์ปฌ๋ผ์ ๊ธฐ์ค์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ค๋ฆ์ฐจ์/๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ
์ค๋ฆ์ฐจ์์ด ๊ธฐ๋ณธ (ASC ์๋ต)
๋ด๋ฆผ์ฐจ์ : ์ปฌ๋ผ๋ช ๋ค DESC ์ ๋ ฅ
์ฌ๋ฌ๊ฐ์ง ์ปฌ๋ผ์ ๊ฐ์ง๊ณ ์ ๋ ฌํ ์ ์์
์ผ๋ฐ์ ์ผ๋ก SELECT์ ์ ๋ ฅ๋์ง ์์ ์นผ๋ผ๋ ์ฌ์ฉํ ์ ์์
์ฃผ์ํ ์ ) GRUOP BY๊ฐ ์จ์์ผ๋ฉด GROUP BY์์ ์ฌ์ฉํ ์ปฌ๋ผ๋ง ์ฌ์ฉ ๊ฐ๋ฅ (์คํ์์ ๋๋ฌธ)
์นผ๋ผ์ด๋ฆ ์ธ์ AS ๋ช ์นญ์ด๋ ์ซ์๋ก๋ ํํ ๊ฐ๋ฅ
1. ์ซ์์ธ ๊ฒฝ์ฐ (3)
SELECT์ ์๋ 3๋ฒ์งธ ์ปฌ๋ผ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํจ์ ์๋ฏธํจ
์ด ๊ฒฝ์ฐ ์ค๋ฌด์์๋ ์ ์ฌ์ฉํ์ง ์์
๋ณ์นญ์ผ๋ก ์ ๋ ฌ
'full stack > database' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Oracle Database] ๋ถ์ ์ฐ์ฐ, NULL, IN, BETWEEN, LIKE (2023.03.21) (0) | 2023.03.24 |
---|---|
[Oracle Database] DDL - CREATE, ALTER (2023.03.24) (0) | 2023.03.24 |
[Oracle Database] DML(Data Manipulation Language) (2023.03.23~24) (0) | 2023.03.24 |
[Oracle Database] ์ค๋ผํด ํจ์ (0) | 2023.03.22 |
[Oracle Database] SELECT - ๋ฐ์ดํฐ ์กฐํ, DISTINCT, AS / WHERE / AND, OR ์ฐ์ฐ์ (0) | 2023.03.19 |