AngzavA
[SQLD] 2-2. SQL ํ์ฉ ๋ณธ๋ฌธ
๐์์ ๊ด๊ณ ์ฐ์ฐ์์ SQL ๋ฌธ์ฅ ๋น๊ต
- SELECT ์ฐ์ฐ = WHERE ์
- PTOJECT ์ฐ์ฐ = SELECT ์
- (NATURAL) JOIN ์ฐ์ฐ = JOIN
- DIVIDE ์ฐ์ฐ = ํ์ฌ ์ฌ์ฉ ์ํจ
- UNION ์ฐ์ฐ = UNION ๊ธฐ๋ฅ
- INTERSECTION ์ฐ์ฐ = INTERSECT ๊ธฐ๋ฅ
- DIFFERENCE ์ฐ์ฐ = EXCEPT(ORACLE = MINUS)
- PRODUCT ์ฐ์ฐ = CROSS JOIN
๐ANSI์์ ํ์ํ๋ FROM JOIN ํํ
- INNER JOIN : ๋ด๋ถ JOIN, JOIN ์กฐ๊ฑด์์ ๋์ผํ ๊ฐ์ด ์๋ ๊ฐ๋ง ๋ฐ
- NATURAL JOIN
- USING ์กฐ๊ฑด์
- ON ์กฐ๊ฑด์
- CROSS JOIN
- OUTER JOIN(LEFT, RIGHT, FULL)
โ๏ธORACLE์์ OUTER JOIN
(+) ๊ธฐํธ๋ฅผ ํตํด ์ฒ๋ฆฌํ ์ ์์
ANSI๋ก ๋ณ๊ฒฝ : INNER ์ชฝ ํ ์ด๋ธ์ ์กฐ๊ฑด์ ON์ ํจ๊ป ์์น์์ผ์ผํจ
๐USING JOIN
- ์กฐ์ธ์ ์ฌ์ฉ๋ ์ปฌ๋ผ ์ง์
- ์์ฐ ์กฐ์ธ์์ ํ ์ด๋ธ ๊ฐ ๋์ผํ ์ด๋ฆ๊ณผ ํ์์ ์ปฌ๋ผ์ด ๋ ์ด์์ธ ๊ฒฝ์ฐ
- NATURAL JOIN๊ณผ ํจ๊ป ์ฌ์ฉ ๋ถ๊ฐ
- ์กฐ์ธ์ ์ด์ฉ๋์ง ์์ ๋์ผ ์ด๋ฆ ์ปฌ๋ผ์ ํ ์ด๋ธ๋ช ๊ธฐ์
- ์กฐ์ธ ์ปฌ๋ผ์ ๊ดํธ๋ก ๋ฌถ์ด ๊ธฐ์
- JOIN ์นผ๋ผ์ ๋ํด ALIAS๊ฐ์ ์ ๋์ฌ๋ฅผ ๋ถ์ผ ์ ์์
๐CROSS JOIN
ํ ์ด๋ธ ๊ฐ JOIN ์กฐ๊ฑด์ด ์๋ ๊ฒฝ์ฐ ์๊ธธ ์ ์๋ ๋ชจ๋ ๋ฐ์ดํฐ ์กฐํฉ, M*N
๐SELF JOIN
- ๋์ผ ํ ์ด๋ธ ์ฌ์ด์ ์กฐ์ธ
- FROM ์ ์ ๋์ผ ํ ์ด๋ธ ๋ ๋ฒ ์ด์ ๋ํ๋จ
- ํ ํ ์ด๋ธ ๋ด์ ๋ ์นผ๋ผ์ด ์ฐ๊ด ๊ด๊ณ๊ฐ ์์ ๊ฒฝ์ฐ
๐LEFT OUTER JOIN
์กฐ์ธ ์ํ์ ๋จผ์ ํ๊ธฐ๋ ์ข์ธก ํ ์ด๋ธ์ ํด๋นํ๋ ๋ฐ์ดํฐ๋ฅผ ๋จผ์ ์ฝ์ ํ, ๋์ค ํ๊ธฐ๋ ์ฐ์ธก ํ ์ด๋ธ์์ JOIN ๋์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด ์จ๋ค. ์ฆ, TABLE A ์ B๊ฐ ์์ ๋, A์ B๋ฅผ ๋น๊ตํด์ B์ JOIN ์นผ๋ผ์์ ๊ฐ์ ๊ฐ์ด ์์ ๋ ํด๋น ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ณ , B์ ์นผ๋ผ์์ ๊ฐ์ ๊ฐ์ด ์๋ ๊ฒฝ์ฐ์๋ Bํ ์ด๋ธ์์ ๊ฐ์ ธ์ค๋ ์นผ๋ผ๊ฐ์ NULL๋ก ์ฑ์ด๋ค.
๐FROM JOIN ON ( IN )
๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ๋์ ์ถ๋ ฅํ๋, JOIN ๋์์ด IN ์
โ๏ธ์นดํ์์ ๊ณฑ?
- UNION / INTERSECTION
- FROM ์ ์ 2๊ฐ ์ด์์ TABLE์ด ์์ ๋ ๋ ํ ์ด๋ธ ์ฌ์ด ์ ํจ JOIN ์กฐ๊ฑด์ ์ ์ง ์์์ ๋, ํ ์ด๋ธ์ ๊ดํ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ ๋ถ ๊ฒฐํฉํ์ฌ ํ ์ด๋ธ์ ์กด์ฌํ๋ ํ ๊ฐฏ์๋ฅผ ๊ณฑํ ๋งํผ์ ๊ฒฐ๊ณผ๊ฐ์ด ๋ฐํ๋จ
โ๏ธ๊ฐ์ ๊ตฌ๋ฌธ
SELECT A, B
FROM A FULL OUTER JOIN B
ON A.ID=B.ID
SELECT A, B
FROM A LEFT OUTER JOIN B
ON A.ID = B.ID
UNION
SELECT A, B
FROM A RIGHT OUTER JOIN B
ON A.ID = B.ID
SELECT A, B
FROM A, B
WHERE A.ID = B.ID
UNION ALL
SELECT A, NULL
FROM A
WHERE NOT EXISTS (SELECT 1 FROM B WHERE A.ID=B.ID)
UNION ALL
SELECT NULL, B
FROM B
WHERE NOT EXISTS (SELECT 1 FROM A WHERE B.ID=A.ID)
๐์งํฉ ์ฐ์ฐ์ ์ข ๋ฅ
์งํฉ ์ฐ์ฐ์ | ์ฐ์ฐ์์ ์๋ฏธ |
UNION | ์ฌ๋ฌ๊ฐ์ SQL ๋ฌธ์ ๊ฒฐ๊ณผ์ ๋ํ ํฉ์งํฉ์ผ๋ก ๊ฒฐ๊ณผ์์ ๋ชจ๋ ์ค๋ณต๋ ํ์ ํ๋์ ํ์ผ๋ก |
UNION ALL | ํฉ์งํฉ์ผ๋ก ์ค๋ณต๋ ํ๋ ๊ฒฐ๊ณผ๋ก ํ์, ๊ฐ๋ณ SQL๋ฌธ์ด ์ค๋ณต๋์ง ์์ ๊ฒฝ์ฐ UNION๊ณผ ๊ฒฐ๊ณผ ๋์ผ |
INTERSECT | ์ฌ๋ฌ๊ฐ์ SQL๋ฌธ์ ๊ฒฐ๊ณผ์ ๋ํ ๊ต์งํฉ. ์ค๋ณต๋ ํ์ ํ๋์ ํ์ผ๋ก ๋ง๋ ๋ค. |
EXCEPT | ์ - ๋ค ๋ ์ฐจ์งํฉ. ์ค๋ณต๋ ํ์ ํ๋์ ํ์ผ๋ก ์ผ๋ถ DB๋ MINUS๋ฅผ ์ฌ์ฉ |
๐๊ณ์ธตํ ์ฟผ๋ฆฌ
- ์ ์ : ๋ถ๋ชจ, ์์ ๊ฐ์ ์์ง๊ด๊ณ๋ฅผ ํธ๋ฆฌ ๊ตฌ์กฐ ํํ๋ก ๋ณด์ฌ์ฃผ๋ ์ฟผ๋ฆฌ
- START WITH : ํธ๋ฆฌ ๊ตฌ์กฐ ์ต์์ ํ์ ์ง์ ํ๋ ๊ตฌ๋ฌธ
- CONNECT BY : ๋ถ๋ชจ, ์์ ๊ด๊ณ ์ง์
- PRIOR : CONNECT BY ์ ์ ์ฌ์ฉ, ํ์ฌ ์ฝ์ ์นผ๋ผ ์ง์
- PRIOR ์์ = ๋ถ๋ชจ -> ๊ณ์ธต๊ตฌ์กฐ์์ ๋ถ๋ชจ๋ฐ์ดํฐ์์ ์์๋ฐ์ดํฐ ๋ฐฉํฅ์ผ๋ก ์ ๊ฐ, ์๋ฐฉํฅ ์ ๊ฐ
- PRIOR ๋ถ๋ชจ = ์์ -> ์์๋ฐ์ดํฐ์์ ๋ถ๋ชจ๋ฐ์ดํฐ ๋ฐฉํฅ์ผ๋ก ์ ๊ฐ, ์ญ๋ฐฉํฅ ์ ๊ฐ
- ORDER SIBILINGS : ๋์ผ ๋ ๋ฒจ ํ์ ๋ ธ๋ ์ฌ์ด์์ ์ ๋ ฌ ์ํ
- ๋ฃจํธ ๋ ธ๋์ LEVEL ๊ฐ์ 1
- SQL SERVER์์ ๊ณ์ธตํ ์ง์๋ฌธ์ CTE(Common Table Expression)๋ฅผ ์ฌ๊ท ํธ์ถํจ์ผ๋ก์จ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ์ ๊ฐํ๋ค.
- SQL SERVER์์์ ๊ณ์ธตํ ์ง์๋ฌธ์ ์ต์ปค ๋ฉค๋ฒ๋ฅผ ์คํํ์ฌ ๊ธฐ๋ณธ ๊ฒฐ๊ณผ ์งํฉ์ ๋ง๋๋ก ์ดํ ์ฌ๊ท ๋ฉค๋ฒ๋ฅผ ์ง์์ ์ผ๋ก ์คํํ๋ค.
- ์ค๋ผํด์ ๊ณ์ธตํ ์ง์๋ฌธ์์ WHRER ์ ์ ๋ชจ๋ ์ ๊ฐ๋ฅผ ์งํํ ์ดํ ํํฐ ์กฐ๊ฑด์ผ๋ก์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ฐ์ดํฐ๋ง์ ์ถ์ถํ๋๋ฐ ํ์ฉ๋๋ค.
- ์ค๋ผํด์ ๊ณ์ธตํ ์ง์๋ฌธ์์ PRIOR ํค์๋๋ CONNECT BY, SELECT, WHERE ์ ์์๋ ์ฌ์ฉํ ์ ์๋ค.
๐๋ฐํ๋๋ ๋ฐ์ดํฐ์ ํํ์ ๋ฐ๋ฅธ ์๋ธ์ฟผ๋ฆฌ ๋ถ๋ฅ
์๋ธ์ฟผ๋ฆฌ ์ข ๋ฅ | ์ค๋ช |
SINGLE ROW, ๋จ์ผํ ์๋ธ์ฟผ๋ฆฌ | ์๋ธ์ฟผ๋ฆฌ ์คํ ๊ฒฐ๊ณผ๊ฐ ํญ์ 1๊ฑด ์ดํ =,<,<=,>,>=,<> |
MULTI ROW, ๋ค์ค ํ ์๋ธ์ฟผ๋ฆฌ | ๊ฒฐ๊ณผ๊ฐ ์ฌ๋ฌ ๊ฑด์ธ ์๋ธ์ฟผ๋ฆฌ IN, ALL, ANY, SOME, EXISTS |
MULTI COLUMN, ๋ค์ค ์นผ๋ผ ์๋ธ์ฟผ๋ฆฌ | ์ฌ๋ฌ ์นผ๋ผ ๋ฐํ |
โ๏ธ์๋ธ์ฟผ๋ฆฌ
- ์๋ธ์ฟผ๋ฆฌ๋ ๋จ์ผ ํ ๋๋ ๋ณต์ ํ ๋น๊ต ์ฐ์ฐ์์ ํจ๊ป ์ฌ์ฉํ ์ ์๋ค.
- ์๋ธ์ฟผ๋ฆฌ๋ SELECT ์ , FROM ์ , HAVING ์ , ORDER BY ์ ๋ฑ์์ ์ฌ์ฉ ๊ฐ๋ฅ
- ์ฐ๊ด ์๋ธ์ฟผ๋ฆฌ๋ ์๋ธ์ฟผ๋ฆฌ๊ฐ ๋ฉ์ธ ์ฟผ๋ฆฌ ์ปค๋ผ์ ํฌํจํ๊ณ ์๋ ํํ์ ์๋ธ์ฟผ๋ฆฌ์ด๋ค
- ๋ค์ค ์ปฌ๋ผ ์๋ธ์ฟผ๋ฆฌ๋ ์๋ธ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ๋ก ์ฌ๋ฌ ๊ฐ์ ์ปฌ๋ผ์ด ๋ฐํ๋๋๋ฐ, SQL SERVER์์ ์ง์ X
- ๋น ์ฐ๊ด ์๋ธ์ฟผ๋ฆฌ๊ฐ ์ฃผ๋ก ๋ฉ์ธ์ฟผ๋ฆฌ์ ๊ฐ์ ์ ๊ณตํ๊ธฐ ์ํ ๋ชฉ์
- ๋ฉ์ธ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ -> ์๋ธ์ฟผ๋ฆฌ, ์๋ธ์ฟผ๋ฆฌ -> ๋ฉ์ธ ์ฟผ๋ฆฌ๋ ์ํฉ์ ๋ฐ๋ผ ๋ค๋ฆ
- ๋จ์ผํ ์๋ธ์ฟผ๋ฆฌ ์ฐ์ฐ : ์ค์นผ๋ผ ์๋ธ์ฟผ๋ฆฌ, ๋ฐ๋์ ํ ํ๊ณผ ํ ์ปฌ๋ผ๋ง ๋ฐํํ๋ ์๋ธ์ฟผ๋ฆฌ, ์ฌ๋ฌํ ๋ฐํ ์ ์ค๋ฅ
- FROM ์ ์์ ์ฌ์ฉ๋๋ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ์ธ๋ผ์ธ ๋ทฐ ๋ผ๊ณ ํ๋ค.
์ฃผ์์ฌํญ
- ์๋ธ์ฟผ๋ฆฌ๋ฅผ ๊ดํธ๋ก ๊ฐ์ผ๋ค.
- ๋จ์ผ ํ, ๋ณต์ ํ ๋น๊ต ์ฐ์ฐ์์ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
- ์๋ธ์ฟผ๋ฆฌ์์ ORDER BY๋ ์ฌ์ฉ ๋ถ๊ฐ
๋ค์คํ ์๋ธ์ฟผ๋ฆฌ
๋ค์ค ํ ์ฐ์ฐ | ์ค๋ช |
IN | ์๋ธ์ฟผ๋ฆฌ์ ๊ฒฐ๊ณผ ์ค ํ๋๋ง ๋์ผํ๋ฉด ์ฐธ |
ALL | ๋ชจ๋ ๋์ผํ๋ฉด ์ฐธ - < ALL : ์ต์๊ฐ ๋ฐํ - > ALL : ์ต๋๊ฐ ๋ฐํ |
ANY | ํ๋ ์ด์ ๋์ผํ๋ฉด ์ฐธ - < ANY : ํ๋๋ผ๋ ํฌ๊ฒ ๋๋ฉด ์ฐธ - > ANY : ํ๋๋ผ๋ ์๊ฒ ๋๋ฉด ์ฐธ |
EXISTS | ํ๋๋ผ๋ ์กด์ฌํ๋ฉด ์ฐธ ์ฐธ๊ณผ ๊ฑฐ์ง์ผ๋ก ๋ฐํ |
์ฐ๊ด | ์๋ธ์ฟผ๋ฆฌ ๋ด์์ ๋ฉ์ธ ์ฟผ๋ฆฌ ์นผ๋ผ์ ์ฌ์ฉํ๋ |
๐๋ทฐ
- ๋ ๋ฆฝ์ฑ
- ํธ๋ฆฌ์ฑ
- ๋ณด์์ฑ
- ๋จ์ง ์ ์๋ง์ ๊ฐ์ง, ์คํ ์์ ์ ์ง์๋ฅผ ์ฌ์์ฑํ์ฌ ์ํ
- ํ ์ด๋ธ ๊ตฌ์กฐ๊ฐ ๋ณ๊ฒฝ๋์ด๋ ๋ทฐ๋ฅผ ์ฌ์ฉํ๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ณ๊ฒฝํ์ง ์์๋ ๋๋ค.
- ๋ณด์ ๊ฐํ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅ
- ์ค์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์๋ ๋ทฐ๋ฅผ ์์ฑํ๋ ๊ธฐ๋ฅ์ ์ง์ํ๋ DBMS๋ ์กด์ฌ
โ๏ธNOTE
- ALIAS๋ ์ฒซ๋ฒ์งธ SQL ๊ธฐ์ค
- ์์ ์ ์๋ ์ฐ์ฐ์๊ฐ ๋จผ์ ์ํ
'SQLD' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SQLD] 2-2-3. SQL ํ์ฉ : ์๋์ฐ ํจ์ (0) | 2023.06.08 |
---|---|
[SQLD] 2-2-2. SQL ํ์ฉ : ๊ทธ๋ฃน ํจ์ (0) | 2023.06.08 |
[SQLD] 2-1. SQL ๊ธฐ๋ณธ (1) | 2023.06.07 |
[SQLD] 1-2.๋ฐ์ดํฐ ๋ชจ๋ธ๊ณผ ์ฑ๋ฅ (0) | 2023.06.07 |
[SQLD] 1-1-2.์ํฐํฐ/์์ฑ/๊ด๊ณ/์๋ณ์ (0) | 2023.05.29 |