| ์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
|---|---|---|---|---|---|---|
| 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 |
Tags
- ์ฝํ
- ๊ทธ๋ฆฌ๋
- pyinstaller
- ๊ตฌํ
- VSCode
- ๋ฉ๋
- Set
- ์ค๊ตญ์ด
- db
- ๋จ๊ฐ์ง
- ์ด๋ถํ์
- ์ํ
- DP
- node.js
- ddl
- react
- C์ธ์ด
- vscode์ค์
- BFS
- ํ
- ๋์ ๋๋ฆฌ
- ๊ณผ์ธ
- aws
- Pygame
- Claude
- ์์ด
- ํฌ๋ก์คํ
- ์ฑ์ ๋ง์ง
- k8s
- awssaa
Archives
- Today
- Total
cmod.ify
DB SET Operator & Sub Query & Join ๋ณธ๋ฌธ
728x90
๋ฐ์ํ
๐ SQL ์งํฉ ์ฐ์ฐ์ (SET OPERATOR) ์ ๋ฆฌ
1. ๊ฐ์
- 2๊ฐ ์ด์์ SELECT ๋ฌธ ๊ฒฐ๊ณผ๋ฅผ ํ๋๋ก ํฉ์น๋ ์ฐ์ฐ์.
- ์กฐ์ธ(JOIN)์ด ์์ผ๋ก(์ด) ํฉ์น๋ ๊ฑฐ๋ผ๋ฉด, ์งํฉ ์ฐ์ฐ์๋ ์์๋๋ก(ํ) ํฉ์น๋ ๊ฒ์.
2. ์ฌ์ฉ ๊ฐ์ด๋๋ผ์ธ
- ์ด์ ๊ฐ์์ ์๋ฃํ ์ผ์น: ์ฒซ ๋ฒ์งธ์ ๋ ๋ฒ์งธ SELECT ๋ฌธ์ ์ปฌ๋ผ ๊ฐ์์ ๋ฐ์ดํฐ ํ์ ์ด ์์๋๋ก ๋ง์์ผ ํจ.
- ์ปฌ๋ผ ์ด๋ฆ: ๊ฒฐ๊ณผ์ฐฝ์ ๋จ๋ ์ปฌ๋ผ ๋ช ์ ์ฒซ ๋ฒ์งธ SELECT ๋ฌธ์ ๊ฒ์ ๋ฐ๋ฆ.
- ์ ๋ ฌ: ORDER BY๋ ๋งจ ๋ง์ง๋ง ๋ฌธ์ฅ์ ๋ฑ ํ ๋ฒ๋ง ์ธ ์ ์์.
- ์ ํ: LOB ๊ณ์ด(BLOB, CLOB)์ด๋ LONG ํ ์ปฌ๋ผ์๋ ์ฌ์ฉ ๋ถ๊ฐํจ.
3. ์งํฉ ์ฐ์ฐ์์ ์ข ๋ฅ
โ UNION (ํฉ์งํฉ - ์ค๋ณต ์ ๊ฑฐ)
- ๋ ๊ฒฐ๊ณผ๋ฌผ์ ํฉ์น ํ ์ค๋ณต๋ ํ์ ํ๋๋ง ๋จ๊น.
- ๋ด๋ถ์ ์ผ๋ก ์ ๋ ฌ ๊ณผ์ ์ ๊ฑฐ์น๋ฏ๋ก ๋ฐ์ดํฐ๊ฐ ๋ง์ผ๋ฉด ์ฑ๋ฅ์ด ์กฐ๊ธ ๋จ์ด์ง ์ ์์.
SELECT DEPTNO FROM EMP -- 10, 20, 30
UNION
SELECT DEPTNO FROM DEPT; -- 10, 20, 30, 40
-- ๊ฒฐ๊ณผ: 10, 20, 30, 40 (์ค๋ณต ์ ๊ฑฐ๋จ)
โก UNION ALL (ํฉ์งํฉ - ์ค๋ณต ํฌํจ)
- ๋ ๊ฒฐ๊ณผ๋ฌผ์ ๋จ์ํ ๊ทธ๋๋ก ๋ค ํฉ์นจ.
- ์ค๋ณต ์ ๊ฑฐ๋ฅผ ์ ํ๋ฏ๋ก ์ฐ์ฐ ์๋๊ฐ ๊ฐ์ฅ ๋น ๋ฆ. (์ค๋ฌด์์ ์์ฃผ ์)
SELECT DEPTNO FROM EMP
UNION ALL
SELECT DEPTNO FROM DEPT;
-- ๊ฒฐ๊ณผ: 10, 20, 30, 10, 20, 30, 40 (๋ชจ๋ ์ถ๋ ฅ)
โข INTERSECT (๊ต์งํฉ)
- ์์ชฝ ํ ์ด๋ธ์ ๊ณตํต์ผ๋ก ์กด์ฌํ๋ ๋ฐ์ดํฐ๋ง ์ถ์ถํจ.
SELECT DEPTNO FROM EMP
INTERSECT
SELECT DEPTNO FROM DEPT;
-- ๊ฒฐ๊ณผ: 10, 20, 30
โฃ EXCEPT (์ฐจ์งํฉ)
- ์ฒซ ๋ฒ์งธ ๊ฒฐ๊ณผ์์ ๋ ๋ฒ์งธ ๊ฒฐ๊ณผ๋ฅผ ๋บ ๋๋จธ์ง๋ง ์กฐํํจ. (Oracle ๋ฑ ์ผ๋ถ DB์์๋ MINUS๋ผ๊ณ ์)
SELECT DEPTNO FROM DEPT -- 10, 20, 30, 40
EXCEPT
SELECT DEPTNO FROM EMP; -- 10, 20, 30
-- ๊ฒฐ๊ณผ: 40 (DEPT์๋ง ์๋ ๊ฒ)
๐ SQL ์๋ธ์ฟผ๋ฆฌ(Sub Query) ์ ๋ฆฌ
1. ๊ฐ์ ๋ฐ ๊ท์น
- ์ ์: ํ๋์ SQL ๋ฌธ ์์ ํฌํจ๋ ๋ ๋ค๋ฅธ SELECT ๋ฌธ์.
- ๊ตฌ์กฐ: ๊ฒ์ ๊ฐ์ธ๋ ๋ฉ์ธ ์ฟผ๋ฆฌ(Main Query)์ ์์ ๋ฐํ ์๋ธ ์ฟผ๋ฆฌ(Sub Query)๋ก ๋๋จ.
- ์ฌ์ฉ์ฒ: SELECT, INSERT, UPDATE, DELETE ๋ชจ๋ ์ฌ์ฉ ๊ฐ๋ฅํจ (WHERE, HAVING, FROM ์ ๋ฑ).
- ๊ท์น:
- ๋ฐ๋์ ๊ดํธ()๋ก ๊ฐ์ธ์ผ ํจ.
- ์ฐ์ฐ์์ ์ค๋ฅธ์ชฝ์ ์์นํด์ผ ํจ.
- ๋ฉ์ธ ์ฟผ๋ฆฌ๊ฐ ์คํ๋๊ธฐ ์ ๋ฑ ํ ๋ฒ ์คํ๋์ด ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ์ธ ์ฟผ๋ฆฌ์ ์ ๋ฌํจ.
2. ์์น์ ๋ฐ๋ฅธ ๋ถ๋ฅ
- FROM ์ ์ ์ฌ์ฉ: ์ธ๋ผ์ธ ๋ทฐ(Inline View)๋ผ๊ณ ๋ถ๋ฆ (๊ฐ์์ ํ ์ด๋ธ์ฒ๋ผ ์ทจ๊ธ).
- WHERE/HAVING ์ ์ ์ฌ์ฉ: ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์๋ธ์ฟผ๋ฆฌ ํํ์.
3. ๊ฒฐ๊ณผ ํ/์ด ์์ ๋ฐ๋ฅธ ๋ถ๋ฅ
โ ๋จ์ผ ํ ์๋ธ์ฟผ๋ฆฌ (Single-Row)
- ์๋ธ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๊ฐ ์ค์ง 1๊ฐ์ ํ์ผ ๋์.
- ์ฐ์ฐ์: =, >, >=, <, <=, <> ์ฌ์ฉ ๊ฐ๋ฅํจ.
- ์์: ํ๊ท ๊ธ์ฌ ์ด์์ธ ์ฌ์ ์กฐํ
SELECT ename, sal FROM emp
WHERE sal >= (SELECT AVG(sal) FROM emp);
โก ๋ค์ค ์ด ์๋ธ์ฟผ๋ฆฌ (Multi-Column)
- ์๋ธ์ฟผ๋ฆฌ๊ฐ ์ฌ๋ฌ ๊ฐ์ ์ปฌ๋ผ์ ๋ฐํํ ๋์.
- ๋ฉ์ธ ์ฟผ๋ฆฌ์ ์ปฌ๋ผ ๊ฐ์/์์๋ฅผ ๋ง์ถฐ์ ํ๊บผ๋ฒ์ ๋น๊ต ๊ฐ๋ฅํจ.
-- ๋ถ์์ ์ฑ๋ณ์ด ๋์์ ์ผ์นํ๋ ๋ฐ์ดํฐ ์กฐํ
SELECT * FROM tStaff
WHERE (depart, gender) = (SELECT depart, gender FROM tStaff WHERE name = '์์ค๊ทผ');
โข ๋ค์ค ํ ์๋ธ์ฟผ๋ฆฌ (Multi-Row)
- ์๋ธ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๊ฐ 2๊ฑด ์ด์์ผ ๋์. ๋จ๋ ์ฐ์ฐ์(=, >) ์ฌ์ฉ ์ ์๋ฌ ๋๋ฏ๋ก ๋ค์ค ํ ์ฐ์ฐ์๋ฅผ ์จ์ผ ํจ.
4. ๋ค์ค ํ ์ฐ์ฐ์
| ์ฐ์ฐ์ | ์๋ฏธ | ๋น๊ณ |
| IN | ๋ชฉ๋ก ์ค ํ๋๋ผ๋ ์ผ์นํ๋ฉด ์ฐธ | ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํจ |
| ANY / SOME | ๊ฒฐ๊ณผ ์ค ํ๋๋ผ๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ฉด ์ฐธ | > ANY (์ต์๊ฐ๋ณด๋ค ํฌ๋ฉด ์ฐธ) |
| ALL | ๊ฒฐ๊ณผ ๋ชจ๋ ์กฐ๊ฑด์ ๋ง์กฑํด์ผ ์ฐธ | > ALL (์ต๋๊ฐ๋ณด๋ค ํฌ๋ฉด ์ฐธ) |
| EXISTS | ์๋ธ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๊ฐ ์กด์ฌํ๋ฉด ์ฐธ | ๋ฐ์ดํฐ ์กด์ฌ ์ฌ๋ถ ํ์ธ์ฉ |
- ALL ์์: 30๋ฒ ๋ถ์์ ๋ชจ๋ ์ฌ์๋ณด๋ค ๊ธ์ฌ๊ฐ ๋์ ์ฌ์
SELECT ename, sal FROM emp
WHERE sal > ALL (SELECT sal FROM emp WHERE deptno = 30);
"EMP ํ ์ด๋ธ์์ MGR์ ENAME์ด KING ์ธ ์ฌ์์ ENAME๊ณผ SAL ์กฐํ"
์ด๊ฑด KING์ ์ฌ์๋ฒํธ(EMPNO)๋ฅผ ์ฐพ์์ ๊ทธ๊ฒ MGR์ธ ์ฌ์์ ์กฐํํ๋ฉด ๋จ
SELECT ename, sal
FROM emp
WHERE mgr = (SELECT empno FROM emp WHERE ename = 'KING');
๐ค SQL ์กฐ์ธ(JOIN) ์ ๋ฆฌ
1. ๊ฐ์
- 2๊ฐ ์ด์์ ํ ์ด๋ธ์ ๊ฒฐํฉํ์ฌ ํ๋์ ๊ฒฐ๊ณผ ํ ์ด๋ธ์ ๋ง๋๋ ์์ ์.
- ์๋ก ๋ค๋ฅธ ํ ์ด๋ธ์ ํฉ์ด์ง ์ ๋ณด๋ฅผ ํ๋์ ๋ณด๊ธฐ ์ํด ์ฌ์ฉํจ.
2. ์กฐ์ธ์ ์ข ๋ฅ (์ ํต์ ์ธ ๋ฐฉ์)
โ CROSS JOIN (๊ต์ฐจ ์กฐ์ธ)
- ์นดํ ์์ ๊ณฑ(Cartesian Product)์ด๋ผ๊ณ ๋ ํจ.
- ์กฐ๊ฑด ์์ด ์์ชฝ ํ ์ด๋ธ์ ๋ชจ๋ ํ์ ๋ฌด์ง์ฑ์ผ๋ก ๋ค ์กฐํฉํจ.
- ๊ฒฐ๊ณผ ํ ์: ํ ์ด๋ธA ํ ์ × ํ ์ด๋ธB ํ ์
SELECT * FROM EMP, DEPT;
โก EQUI JOIN (๋ฑ๊ฐ ์กฐ์ธ)
- ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ๋ฐฉ์์. = ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ณตํต ์ปฌ๋ผ ๊ฐ์ด ์ผ์นํ๋ ๋ฐ์ดํฐ๋ง ํฉ์นจ.
- ํ ์ด๋ธ ์ด๋ฆ์ด ๊ธธ๋ฉด ๋ณ์นญ(Alias)์ ์ฃผ๋ฉด ํธํจ.
SELECT e.ename, d.dname
FROM emp e, dept d
WHERE e.deptno = d.deptno;
โข NON-EQUI JOIN (๋น๋ฑ๊ฐ ์กฐ์ธ)
- =์ด ์๋ ์ฐ์ฐ์(BETWEEN, >, < ๋ฑ)๋ฅผ ์ฌ์ฉํ์ฌ ์กฐ์ธํจ.
- ์: ๊ธ์ฌ(sal)๊ฐ ๊ธ์ฌ ๋ฑ๊ธ ํ์ ์ต์~์ต๋ ๋ฒ์ ์ฌ์ด์ ์๋์ง ํ์ธํ์ฌ ๋ฑ๊ธ ์กฐํ.
SELECT ename, sal, grade
FROM emp, salgrade
WHERE sal BETWEEN losal AND hisal;
โฃ SELF JOIN (์์ฒด ์กฐ์ธ)
- ๋์ผํ ํ ์ด๋ธ์ ๋ ๋ฒ ์ฐธ์กฐํ์ฌ ์กฐ์ธํจ. (๋ณ์นญ ํ์)
- ์: ์ฌ์์ ๊ด๋ฆฌ์ ์ฌ๋ฒ(mgr)์ ํตํด ๊ด๋ฆฌ์์ ์ด๋ฆ์ ์ฐพ์ ๋ ์ฌ์ฉํจ.
SELECT e1.ename AS '์ฌ์', e2.ename AS '๊ด๋ฆฌ์'
FROM emp e1, emp e2
WHERE e1.mgr = e2.empno;
3. ANSI JOIN (ํ์ค ๋ฌธ๋ฒ)
๋ฏธ๊ตญ ํ์ค ํํ์์ ์ ํ ํ๋์ ์ธ ์กฐ์ธ ๋ฐฉ์์. ๊ฐ๋ ์ฑ์ด ์ข์ ์ค๋ฌด์์ ๊ถ์ฅ๋จ.
- INNER JOIN: ๊ธฐ์กด EQUI JOIN๊ณผ ๊ฐ์. ON ์ ์ ์กฐ๊ฑด์ ์ ์.
- USING: ์กฐ์ธํ ์ปฌ๋ผ ์ด๋ฆ์ด ๊ฐ์ ๋ ON ๋์ ์ฌ์ฉ (USING(deptno)).
-- EMP ํ
์ด๋ธ๊ณผ DEPT ํ
์ด๋ธ์ EDPTNO์ปฌ๋ผ์ ์ด์ฉํด์ JOIN
SELECT *
FROM EMP INNER JOIN DEPT
ON EMP.DEPTNO = DEPT.DEPTNO;
-- USING ์ฐ๋ฉด ๊ฐ์ ์ปฌ๋ผ ์ด๋ฆ ์๋ต ๊ฐ๋ฅ
SELECT *
FROM EMP INNER JOIN DEPT
USING (DEPTNO);
- NATURAL JOIN: ์ปฌ๋ผ ์ด๋ฆ์ด ๊ฐ์ ๊ฒฝ์ฐ ์๋์ผ๋ก ์กฐ์ธํจ (์กฐ๊ฑด ์๋ต ๊ฐ๋ฅ)
SELECT *
FROM EMP NATURAL JOIN DEPT;
4. OUTER JOIN (์ธ๋ถ ์กฐ์ธ)
- ํ์ชฝ ํ ์ด๋ธ์๋ง ๋ฐ์ดํฐ๊ฐ ์๊ณ ๋ค๋ฅธ ์ชฝ์ ์๋ ๊ฒฝ์ฐ์๋ ๊ฒฐ๊ณผ์ ํฌํจํจ.
| ์ข ๋ฅ | ์ค๋ช |
| LEFT OUTER JOIN | ์ผ์ชฝ ํ ์ด๋ธ ๋ฐ์ดํฐ๋ ๋ฌด์กฐ๊ฑด ๋ค ๋์ด (์ค๋ฅธ์ชฝ ๋งค์นญ ์์ผ๋ฉด NULL) |
| RIGHT OUTER JOIN | ์ค๋ฅธ์ชฝ ํ ์ด๋ธ ๋ฐ์ดํฐ๋ ๋ฌด์กฐ๊ฑด ๋ค ๋์ด |
| FULL OUTER JOIN | ์์ชฝ ๋ชจ๋ ํฌํจ (MariaDB๋ UNION์ ์ฌ์ฉํ์ฌ ๊ตฌํ) |
-- MariaDB์์์ FULL OUTER JOIN ๊ตฌํ
SELECT * FROM emp LEFT JOIN dept ON emp.deptno = dept.deptno
UNION
SELECT * FROM emp RIGHT JOIN dept ON emp.deptno = dept.deptno;
5. ๋ค์ค ์กฐ์ธ (Multi-Join)
- 3๊ฐ ์ด์์ ํ ์ด๋ธ์ ์กฐ์ธํ ๋ ์ฌ์ฉํจ. ์์ฐจ์ ์ผ๋ก ์กฐ์ธ ์กฐ๊ฑด์ ๋ถ์ฌ๋๊ฐ๋ฉด ๋จ.
SELECT *
FROM tCar C
INNER JOIN tMaker M ON C.maker = M.maker
INNER JOIN tCity T ON M.factory = T.name;
728x90
๋ฐ์ํ
'BASIC > DATABASE' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ๊ฐ์ ํ ์ด๋ธ (0) | 2025.12.30 |
|---|---|
| DML & TCL (0) | 2025.12.29 |
| MariaDB DDL ์ค์ต (0) | 2025.12.26 |
| MariaDB DDL (1) | 2025.12.26 |
| MariaDB ๊ธฐ์ด ์ค์ต ๋ฌธ์ (0) | 2025.12.24 |