1. ์กฐ์ธ
1) EQUI(๋ฑ๊ฐ) ์กฐ์ธ(๊ต์งํฉ)
(1) EQUI(๋ฑ๊ฐ) ์กฐ์ธ
- ์กฐ์ธ์ ์ฌ๋ฌ ๊ฐ์ ๋ฆด๋ ์ด์ ์ ์ฌ์ฉํด์ ์๋ก์ด ๋ฆด๋ ์ด์ ์ ๋ง๋๋ ๊ณผ์
- ์กฐ์ธ์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ๊ต์งํฉ์ ๋ง๋๋ ๊ฒ
- ๋ ๊ฐ์ ํ ์ด๋ธ ๊ฐ ์ผ์นํ๋ ๊ฒ์ ์กฐ์ธ
- EQUI ์กฐ์ธ์ EMP ํ ์ด๋ธ๊ณผ DEPT ํ ์ด๋ธ์์ DEPTNO ์นผ๋ผ์ ์ฌ์ฉํด ๊ฐ์ ๊ฒ์ ์กฐ์ธ, " = "๋ฅผ ํ์ฉํด ๋ ํ ์ด๋ธ์ ์ฐ๊ฒฐํ๋ค
ISO ํ์ค์ผ๋ก INNER JOIN์ด ์๋ค. INNER JOIN์ ON๋ฌธ์ ์ฌ์ฉํด ํ ์ด๋ธ์ ์ฐ๊ฒฐ
(2) INNER JOIN
~ ํด์ ์กฐ์ธ
-> EQUI ์กฐ์ธ์ ๋ ํ ์ด๋ธ ์ ์ฒด๋ฅผ ๋ค ์ฝ์ ๋ค์ ํด์ ํจ์๋ฅผ ์ฌ์ฉํด ๋ ํ ์ด๋ธ์ ์ฐ๊ฒฐํ๋ค. ํด์ ํจ์๋ ํ ์ด๋ธ์ ํด์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌํ ํ ํด์ ํจ์๋ก ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ. ํด์ ์กฐ์ธ์ EQUI ์กฐ์ธ๋ง ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฐฉ๋ฒ์ด๋ค
ํด์์กฐ์ธ์ ๋จผ์ ์ ํ ํ ์ด๋ธ์ ๊ฒฐ์ ํ๊ณ ์ฃผ์ด์ง ์กฐ๊ฑด์ ํด๋นํ๋ ํ์ด ์ ํ๋๋ฉด ์กฐ์ธ ํค๋ฅผ ๊ธฐ์ค์ผ๋ก ํด ํด์ ํจ์๋ฅผ ์ฌ์ฉํด ํด์ ํ ์ด๋ธ์ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ์ ์์ฑํ๊ณ ํํ ํ ์ด๋ธ์ ์ฃผ์ด์ง ์กฐ๊ฑด์ ๋ง์กฑํ๋ ํ์ ์ฐพ๋๋ค. ํํ ํ ์ด๋ธ์ ์กฐ์ธ ํค๋ฅผ ์ฌ์ฉํด ํด์ ํจ์๋ฅผ ์ ์ฉํด ํด๋น ๋ฒํท์ ๊ฒ์ํ๊ณ ์๋ง์ ๊ฒ์ ์ถ๋ ฅํ๋ค
(3) INTERSECT ์ฐ์ฐ
- INTERSECT ์ฐ์ฐ์ ๋ ๊ฐ์ ํ ์ด๋ธ์์ ๊ต์งํฉ์ ์กฐํํ๋ค. ์ฆ ๋ ๊ฐ ํ ์ด๋ธ์์ ๊ณตํต ๊ฐ์ ์กฐํ
2) Non-EQUI ์กฐ์ธ
- ์ ํํ๊ฒ ์ผ์นํ์ง ์๋ ์กฐ์ธ
3) OUTER JOIN (์ธ๋ถ ์กฐ์ธ)
- OUTER JOIN์ ๋ ํ ์ด๋ธ ๊ฐ ๊ต์งํฉ์ ์กฐํํ๊ณ ํ ์ชฝ ํ ์ด๋ธ์๋ง ์๋ ๋ฐ์ดํฐ๋ ํฌํจ์์ผ ์กฐํํ๋ค. ์ผ์ชฝ์ ๋ฐ์ดํฐ๋ง OUTERํ๋ฉด LEFT, ์ค๋ฅธ์ชฝ์ RIGHT OUTER JOIN, ์์ชฝ ๋ค๋ FULL OUTER JOIN
์กฐ์ธ ๊ด๋ จ ๋ฌธ์ 5๋ฌธ์ ์ด์ ์ถ์ ๋จ!
4) CROSS JOIN (์ํธ ์กฐ์ธ)
- CROSS JOIN์ ์กฐ์ธ ์กฐ๊ฑด๊ตฌ๋ฌธ ์์ด 2๊ฐ์ ํ ์ด๋ธ์ ํ๋๋ก ์กฐ์ธ
- ์กฐ์ธ ๊ตฌ๋ฌธ์ด ์๊ธฐ ๋๋ฌธ์ ์นดํ ์์ ๊ณฑ์ด ๋ฐ์ํ๋ค ~ ๋ ํ ์ด๋ธ์์ ์กฐ์ธ์ผ๋ก ๋ฐ์ ๊ฐ๋ฅํ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ํฌํจํ๋ค
ex) ์นด๋๋๋ฆฌํฐ 15, 5์ ํ ์ด๋ธ์ ์ํธ ์กฐ์ธ -> 75๊ฐ์ ์ํธ ์กฐ์ธ๋ ํ์ด ์กฐํ๋๋ค
5) UNION์ ์ฌ์ฉํ ํฉ์งํฉ
(1) UNION
UNION ์ฐ์ฐ์ ๋ ๊ฐ์ ํ ์ด๋ธ์ ํ๋๋ก ๋ง๋๋ ์ฐ์ฐ์ด๋ค. UNION ์ฐ์ฐ์ ์ค๋ณต๋ ๋ฐ์ดํฐ๋ฅผ ์ ๊ฑฐํ๋ฉฐ ํ ์ด๋ธ์ ํฉ์น๋ค
(2) UNION ALL
UNION ALL์ ๋ ๊ฐ์ ํ ์ด๋ธ์ ํ๋๋ก ํฉ์น๋ ๊ฒ์ด๋ค. UNION์ฒ๋ผ ์ค๋ณต์ ์ ๊ฑฐํ๊ฑฐ๋ ์ ๋ ฌ์ ์ ๋ฐํ์ง ์๋๋ค
6) ์ฐจ์งํฉ์ ๋ง๋๋ MINUS
- MINUS ์ฐ์ฐ์ ๋ ๊ฐ์ ํ ์ด๋ธ์์ ์ฐจ์งํฉ์ ์กฐํํ๋ค. ์ฆ, ๋จผ์ ์ด SELECT ๋ฌธ์๋ ์๊ณ ๋ค์ ์ฐ๋ SELECT ๋ฌธ์๋ ์๋ ์งํฉ์ ์กฐํํ๋ ๊ฒ์ด๋ค(MYSQL : NOT IN, NOT EXISTS ๋ฑ)
2. ๊ณ์ธตํ ์กฐํ(Connect By) : ๋น์ถ!
- ๊ณ์ธตํ ์กฐํ๋ Oracle ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ง์ํ๋ ๊ฒ์ผ๋ก ๊ณ์ธตํ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ์ ์๋ค ~ ํธ๋ฆฌ ํํ์ ๊ตฌ์กฐ๋ฅผ ์์์ ์๋๋ก ํ์ํ๋ฉด์ ์กฐํ ๋๋ ์ญ๋ฐฉํฅ ์กฐํ
- CONNECT BY๋ ํธ๋ฆฌ ํํ์ ๊ตฌ์กฐ๋ก ์ง์๋ฅผ ์ํํ๋ ๊ฒ์ผ๋ก START WITH๋ฌธ์ ์์ ์กฐ๊ฑด์ ์๋ฏธํ๊ณ CONNECT BY PRIOR๋ ์กฐ์ธ ์กฐ๊ฑด์ด๋ค. ROOT ๋ ธ๋๋ก๋ถํฐ ํ์ ๋ ธ๋์ ์ง์๋ฅผ ์คํํ๋ค
- ๊ณ์ธตํ ์กฐํ์์ MAX(LEVEL)๋ฅผ ์ฌ์ฉํด ์ต๋ ๊ณ์ธต ์๋ฅผ ๊ตฌํ ์ ์๋ค
- ๊ณ์ธตํ ์กฐํ ๊ฒฐ๊ณผ๋ฅผ ๋ช ํํ ๋ณด๊ธฐ ์ํด LPAD ํจ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค
~ CONNECT BY ISLEAF : ๊ณ์ธตํ ์ฟผ๋ฆฌ์์ ํด๋นํ๋ ๋ก์ฐ๊ฐ ์์ ๋ ธ๋๊ฐ ์๋์ง ์๋์ง ์ฌ๋ถ๋ฅผ ์ฒดํฌ, ์์ ๋ ธ๋๊ฐ ์๋ ๊ฒฝ์ฐ 0, ์์ ๋ ธ๋๊ฐ ์์ ๊ฒฝ์ฐ 1
~ CONNECT BY ROOT : ๊ณ์ธตํ ์ฟผ๋ฆฌ์์ ์ต์์ ๋ ธ๋๋ฅผ ์ฐพ๊ณ ์ ํ ๊ฒฝ์ฐ ์ฌ์ฉ
3. ์๋ธ ์ฟผ๋ฆฌ : ๋น์ถ!
1) ๋ฉ์ธ ์ฟผ๋ฆฌ์ ์๋ธ์ฟผ๋ฆฌ
- Subquery๋ Select๋ฌธ ๋ด ๋ค์ Select๋ฌธ์ ์ฌ์ฉํ๋ SQL๋ฌธ์ด๋ค
- Subquery์ ํํ๋ FROM๊ตฌ์ SELECT๋ฌธ์ ์ฌ์ฉํ๋ ์ธ๋ผ์ธ ๋ทฐ์ SELECT๋ฌธ์ Subquery๋ฅผ ์ฌ์ฉํ๋ ์ค์นผ๋ผ ์๋ธ์ฟผ๋ฆฌ ๋ฑ์ด ์๋ค ~ ์๋ธ์ฟผ๋ฆฌ์ ์ข ๋ฅ๋ ์ด 3๊ฐ์ง
- WHERE๊ตฌ์ SELECT๋ฌธ์ ์ฌ์ฉํ๋ฉด ์๋ธ์ฟผ๋ฆฌ๋ผ๊ณ ํ๋ค
2) ๋จ์ผ ํ ์๋ธ์ฟผ๋ฆฌ์ ๋ค์ค ํ ์๋ธ์ฟผ๋ฆฌ
- ๋จ์ผ ํ ์๋ธ์ฟผ๋ฆฌ๋ ๋จ ํ๋์ ํ๋ง ๋ฐํํ๋ ์๋ธ์ฟผ๋ฆฌ๋ก ๋น๊ต ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ค
- ๋ค์ค ํ ์๋ธ์ฟผ๋ฆฌ๋ ์ฌ๋ฌ ๊ฐ์ ํ์ ๋ฐํํ๋ ๊ฒ์ผ๋ก IN, ANY, ALL, EXISTS๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค
3) ๋ค์ค ํ
- ๋จ์ผ ํ ์๋ธ์ฟผ๋ฆฌ๋ ์๋ธ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๊ฐ ํ ๊ฐ์ ํ์ ๋ฐํํ๋ ๊ฒ์ผ๋ก ๋จ์ผ ํ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ค
ex) SELECT username, height FROM usertbl WHERE height > (SELECT height FROM usertbl WHERE addr = '๊ฒฝ๋จ');
-> ์ค๋ฅ ๋ฐ์, ๋จ์ผ์ธ์ง ๋ค์ค์ธ์ง ํ๋จํ ์ ์๊ธฐ ๋๋ฌธ์
(1) ANY
- ์๋ธ์ฟผ๋ผ ์ ANY์ ์๋ฏธ๋ OR์ ๊ฐ๋ ๊ณผ ๋น์ทํ๋ค
ex) SELECT username, height FROM usertbl WHERE ANY height (SELECT height FROM usertbl WHERE addr = '๊ฒฝ๋จ');
- ANY์ ๋์ผํ ์ญํ ์ ํ๋ SOME๋ ์๋ค
(2) ALL : ALL์ ์๋ธ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ ๊ฐ์ ๋ค ๋ง์กฑํ๋ ๋ฐ์ดํฐ๋ง ์ถ๋ ฅํ๋ค. AND์ ๊ฐ๋ ๊ณผ ์ ์ฌํ๋ค
(3) IN : IN์ ๋ฉ์ธ ์ฟผ๋ฆฌ์ ๋น๊ต์กฐ๊ฑด์ด ์๋ธ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ ์ค ํ๋๋ง ๋์ผํ๋ฉด ์ฐธ์ด ๋๋ค(OR ์กฐ๊ฑด๊ณผ ์ ์ฌ)
(4) EXISTS
- EXISTS๋ ์๋ธ์ฟผ๋ฆฌ๋ก ์ด๋ค ๋ฐ์ดํฐ ์กด์ฌ ์ฌ๋ถ๋ฅผ ํ์ธํ๋ ๊ฒ
(5) ์ค์นผ๋ผ
- ์ค์นผ๋ผ๋ ๋ฐ๋์ ํ ํ๊ณผ ํ ์นผ๋ผ๋ง ๋ฐํํ๋ ์๋ธ์ฟผ๋ฆฌ, ์ฌ๋ฌ ํ์ด ๋ฐํ๋๋ฉด ์ค๋ฅ ๋ฐ์
'RDB๐๏ธ > ์ธํ๋ฐ : SQLD ์๊ฒฉ์ฆ ๋ฐ๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
SQL ๊ฐ๋ฐ์ (SQLD) ์๊ฒฉ์ฆ ๋ฐ๊ธฐ Part.3 ์น์ 1. (0) | 2023.08.29 |
---|---|
SQL ๊ฐ๋ฐ์ (SQLD) ์๊ฒฉ์ฆ ๋ฐ๊ธฐ Part.3 ์น์ 0. (0) | 2023.08.20 |
SQL ๊ฐ๋ฐ์ (SQLD) ์๊ฒฉ์ฆ ๋ฐ๊ธฐ Part.2 ์น์ 1. (0) | 2023.07.24 |
SQL ๊ฐ๋ฐ์ (SQLD) ์๊ฒฉ์ฆ ๋ฐ๊ธฐ Part.2 ์น์ 0. (0) | 2023.07.12 |
SQL ๊ฐ๋ฐ์ (SQLD) ์๊ฒฉ์ฆ ๋ฐ๊ธฐ Part 1 ์น์ 2. (0) | 2023.06.29 |