ํ ๊ฐ์ ๊ตฌํ๊ธฐ - COUNT
COUNT๋ก ํ ๊ฐ์ ๊ตฌํ๊ธฐ
SQL์ ์งํฉ์ ๋ค๋ฃจ๋ ์ง๊ณํจ์๋ฅผ ์ ๊ณตํ๋ค.
์ผ๋ฐ์ ์ธ ํจ์๋ ์ธ์๋ก ํ๋์ ๊ฐ์ ์ง์ ํ๋ ๋ฐ ๋นํด ์ง๊ณํจ์๋ ์ธ์๋ก ์งํฉ์ ์ง์ ํ๋ค.
โ
์ง๊ณํจ์์ ํน์ง์ ์ผ๋ฐ์ ์ธ ํจ์์ ๊ฒฝ์ฐ ํ๋์ ํ์ ๋ํ์ฌ ํ๋์ ๊ฐ์ ๋ฐํํ๋๋ฐ,
๋ณต์์ ๊ฐ(์งํฉ)์์ ํ๋์ ๊ฐ์ ๊ณ์ฐํด๋ธ๋ค๋ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ ์งํฉ์ผ๋ก๋ถํฐ ํ๋ใ ก์ด ๊ฐ์ ๊ณ์ฐํ๋ ๊ฒ์ '์ง๊ณ'๋ผ๊ณ ๋ถ๋ฅธ๋ค.
๋ฐ๋ผ์ ์ง๊ณํจ์๋ฅผ SELECT ๊ตฌ์ ์ฐ๋ฉด WHERE ๊ตฌ์ ์ ๋ฌด์ ๊ด๊ณ์์ด ๊ฒฐ๊ด๊ฐ์ผ๋ก ํ๋์ ํ์ ๋ฐํํ๋ค.
โ
COUNT ํจ์๋ ์ธ์๋ก ์ฃผ์ด์ง ์งํฉ์ '๊ฐ์'๋ฅผ ๊ตฌํด ๋ฐํํ๋ค.
SELECT COUNT(*) FROM employees;
SELECT ๊ตฌ๋ * ๊ฐ '๋ชจ๋ ์ด'์ ์๋ฏธํ๋๋ฐ, COUNT ์ง๊ณํจ์์์๋ '๋ชจ๋ ์ด = ํ ์ด๋ธ ์ ์ฒด'์ ์๋ฏธ์ด๋ค.
โ
COUNT ํจ์์ ์ธ์๋ก ์ด ๋ช ์ ์ง์ ํ ์ ์๋ค.
์ด ๋ช ์ ์ง์ ํ๋ฉด ๊ทธ ์ด์ ํํด์ ํ์ ๊ฐ์๋ฅผ ๊ตฌํ ์ ์๋ค.
์ค์ ๋ก ์ง๊ณํจ์๋ ๋ณดํต ๊ทธ ๊ฐ์ ๋ชฉ์ ์ ์ํด ๋ง์ด ์ฌ์ฉ๋๋ฉฐ,
*๋ฅผ ์ธ์๋ก ์ฌ์ฉํ ์ ์๋ ์ง๊ณํจ์๋ COUNT ํจ์๋ฟ์ด๋ค.
๋ค๋ฅธ ์ง๊ณํจ์์์๋ ์ด ์ด๋ฆ์ด๋ ์์ ์ธ์๋ก ์ง์ ํ๋ค.
โ
์ง๊ณํจ์๋ ๋ํ ์งํฉ ์์ NULL ๊ฐ์ด ์์ ๊ฒฝ์ฐ ์ด๋ฅผ ์ ์ธํ๊ณ ์ฒ๋ฆฌํ๋ค.
๋ค๋ง COUNT(*)์ ๊ฒฝ์ฐ ๋ชจ๋ ์ด์ ํ์๋ฅผ ์นด์ดํธํ๊ธฐ ๋๋ฌธ์ NULL ๊ฐ์ด ์์ด๋ ํด๋น ๊ฐ์ด ๋ฌด์๋์ง ์๋๋ค.
โ
DISTINCT๋ก ์ค๋ณต ์ ๊ฑฐ
DISTINCT ํจ์๋ ์ค๋ณต๋ ๊ฐ์ ์ ๊ฑฐํ๋ ํจ์๋ก,
SELECT ๊ตฌ์์ DISTINCT๋ฅผ ์ง์ ํ๋ฉด ์ค๋ณต๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ธํ ๊ฒฐ๊ณผ๋ฅผ ํด๋ผ์ด์ธํธ๋ก ๋ฐํํ๋ค.
์ค๋ณต ์ฌ๋ถ๋ SELECT ๊ตฌ์ ์ง์ ๋ ๋ชจ๋ ์ด์ ๋น๊ตํด ํ๋จํ๋ค.
โ
๋ฐ๋๋ก SELECT ๊ตฌ์ ALL์ ์ฌ์ฉํ ๊ฒฝ์ฐ ์ค๋ณต ์ ๋ฌด์ ๊ด๊ณ์์ด ๋ฌธ์ ๊ทธ๋๋ก ๋ชจ๋ ํ์ ๋ฐํํ๋ค.
๋ง์ฝ SELECT ๊ตฌ์ ๋ ๊ฐ์ง ๋ชจ๋ ์ง์ ํ์ง ์์ ๊ฒฝ์ฐ์๋ ์ค๋ณต๋ ๊ฐ์ ์ ๊ฑฐ๋์ง ์๋๋ค.
โ
์ง๊ณํจ์์์ DISTINCT
DISTINCT๋ ์ง๊ณํจ์์ ์ธ์์ ์์์๋ก ์ง์ ํ ์ ์๋ค.
์ฆ, DISTINCT๋ฅผ ์ด์ฉํด ์งํฉ์์ ์ค๋ณต์ ์ ๊ฑฐํ ๋ค COUNT๋ก ๊ฐ์๋ฅผ ๊ตฌํ ์ ์๋ ๊ฒ์ด๋ค.
SELECT COUNT(DISTINCT name)
FROM employees;
์ฌ๊ธฐ์ SELECT DISTINCT COUNT(name)์ด๋ผ๋ SELECT ๋ช ๋ น์
COUNT ์ชฝ์ด ๋จผ์ ๊ณ์ฐ๋๊ธฐ ๋๋ฌธ์ ์คํ๋์ง ์๋๋ค.
COUNT ์ด์ธ์ ์ง๊ณํจ์
SUM์ผ๋ก ํฉ๊ณ ๊ตฌํ๊ธฐ
SUM ์ง๊ณํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ์งํฉ์ ํฉ๊ณ๋ฅผ ๊ตฌํ ์ ์๋ค.
SELECT SUM(quantity) # quantity๋ ์์นํ์ด FROM sample51;
SUM ์ง๊ณํจ์์์์ ์ง์ ๋๋ ์งํฉ์ ์์นํ ๋ฟ์ด๋ค.
๋ฌธ์์ดํ์ด๋ ๋ ์ง์๊ฐํ์ ์งํฉ์์ ํฉ๊ณ๋ฅผ ๊ตฌํ ์๋ ์๋ค.
๋ํ SUM ์ง๊ณํจ์๋ COUNT์ ๋ง์ฐฌ๊ฐ์ง๋ก NULL ๊ฐ์ ๋ฌด์ํ์ฌ ์ ๊ฑฐํ ๋ค ํฉ๊ณ๋ฅผ ๊ณ์ฐํ๋ค.
โ
AVG๋ก ํ๊ท ๋ด๊ธฐ
AVG ์ง๊ณํจ์๋ฅผ ํตํด ํ๊ท ๊ฐ์ ๊ณ์ฐํ ์ ์๋ค.
AVG์ ์ฃผ์ด์ง๋ ์งํฉ์ SUM๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์์น ํ๋ง ๊ฐ๋ฅํ๋ค.
AVG ์ง๊ณํจ์๋ NULL ๊ฐ์ ๋ฌด์ํ์ฌ ์ ๊ฑฐํ ๋ค ํ๊ท ๊ฐ์ ๊ณ์ฐํ๋ค.
๋ง์ฝ NULL์ 0์ผ๋ก ๊ฐ์ฃผํด์ ํ๊ท ์ ๋ด๊ณ ์ถ๋ค๋ฉด CASE ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด NULL์ 0์ผ๋ก ๋ณํํ ๋ค ๊ณ์ฐํ๋ฉด ๋๋ค.
# NULL์ 0์ผ๋ก ๋ณํํ์ฌ AVG ํ๊ท ๊ฐ ๊ณ์ฐ
SELECT AVG (CASE WHEN quantity IS NULL THEN 0 ELSE quantity END) AS avgnull0
FROM employees;
MIN · MAX๋ก ์ต์๊ฐ · ์ต๋๊ฐ ๊ตฌํ๊ธฐ
MIN ์ง๊ณํจ์, MAX ์ง๊ณํจ์๋ฅผ ์ฌ์ฉํด ์งํฉ์์ ์ต์๊ฐ๊ณผ ์ต๋๊ฐ์ ๊ตฌํ ์ ์๋ค.
์ด๋ค์ ๋ฌธ์์ดํ๊ณผ ๋ ์ง์๊ฐํ์๋ ์ฌ์ฉํ ์ ์๋ค.
๋ํ NULL ๊ฐ์ ๋ฌด์ํ๋ ๊ธฐ๋ณธ ๊ท์น์ ๋ค๋ฅธ ์ง๊ณํจ์์ ๊ฐ๋ค.
๊ทธ๋ฃนํ - GROUP BY
GROUP BY๋ก ๊ทธ๋ฃนํ
GROUP BY ๊ตฌ๋ฅผ ์ฌ์ฉํด ํ๋ผ๋ฆฌ ํ๋ฐ ๋ฌถ์ด ๊ทธ๋ฃนํํ ์งํฉ์ ์ง๊ณํจ์๋ก ๋๊ฒจ์ค ์ ์๋ค.
GROUP BY ๊ตฌ์ ์ด์ ์ง์ ํ์ฌ ๊ทธ๋ฃนํํ๋ฉด ์ง์ ๋ ์ด์ ๊ฐ์ด ๊ฐ์ ํ์ด ํ๋์ ๊ทธ๋ฃน์ผ๋ก ๋ฌถ์ธ๋ค.
GROUP BY๋ฅผ ์ง์ ํด ๊ทธ๋ฃนํํ๋ฉด DISTINCT์ ๊ฐ์ด ์ค๋ณต์ ์ ๊ฑฐํ๋ ํจ๊ณผ๊ฐ ์๋ค.
GROUP BY ๊ตฌ๋ฅผ ์ง์ ํ๋ ๊ฒฝ์ฐ์๋ ์ง๊ณํจ์์ ํจ๊ป ์ฌ์ฉํ์ง ์์ผ๋ฉด ๋ณ ์๋ฏธ๊ฐ ์๋ค.
โ
HAVING ๊ตฌ๋ก ์กฐ๊ฑด ์ง์
SQL์ ๋ด๋ถ ์ฒ๋ฆฌ ์์๋ WHERE ๊ตฌ -> GROUP BY ๊ตฌ -> SELECT ๊ตฌ -> ORDER BY ๊ตฌ์ ์์ด๋ค.
์ฆ, WHERE ๊ตฌ๊ฐ GROUP BY ๊ตฌ๋ณด๋ค ๋จผ์ ์คํ์ด ๋๊ธฐ ๋๋ฌธ์,
๊ทธ๋ฃนํ๊ฐ ํ์ํ ์ง๊ณํจ์๋ WEHRE ๊ตฌ์์ ์ฌ์ฉํ ์ ์๋ค.
โ
๋ฐ๋ผ์ ์ง๊ณํจ์๋ฅผ ์ฌ์ฉํ ๊ฒฐ๊ณผ์์ ์กฐ๊ฑด์ ๋ง๋ ๊ฐ์ ๋ฐ๋ก ๊ฑธ๋ฌ๋ด๊ธฐ ์ํด์ HAVING ๊ตฌ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
HAVING ๊ตฌ๋ GROUP BY ๊ตฌ์ ๋ค์ ๊ธฐ์ ํ๋ฉฐ WHERE ๊ตฌ์ ๋์ผํ๊ฒ ์กฐ๊ฑด์์ ์ง์ ํ ์ ์๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก WHERE ๊ตฌ์ HAVING ๊ตฌ์ ์ง์ ๋ ์กฐ๊ฑด์ผ๋ก ๊ฒ์ํ๋ 2๋จ ๊ตฌ์กฐ๊ฐ ๋๋ค.
โ WHERE๋ก ๊ฒ์ -> โก ๊ฒ์ํ ๋ค ๊ทธ๋ฃนํ -> โข HAVING ๊ตฌ๋ก ์กฐ๊ฑด์ ๋ฐ์
# HAVING์ ์ฌ์ฉํด ๊ฒ์
SELECT name, COUNT(name)
FROM employees
GROUP BY name
HAVING COUNT(name) = 1;
name | COUNT(name) |
B | 1 |
C | 1 |
HAVING ๊ตฌ๊ฐ ํฌํจ๋ ๋ด๋ถ ์ฒ๋ฆฌ ์์๋ ๋ค์๊ณผ ๊ฐ๋ค.
WHERE ๊ตฌ -> GROUP BY ๊ตฌ -> HAVING ๊ตฌ -> SELECT ๊ตฌ -> ORDER BY ๊ตฌ
โ
๋ณต์์ด์ ๊ทธ๋ฃนํ
GROUP BY๋ฅผ ์ฌ์ฉํ ๋ GROUP BY์ ์ง์ ํ ์ด ์ด์ธ์ ์ด์
์ง๊ณํจ์๋ฅผ ์ฌ์ฉํ์ง ์์ ์ฑ SELECT ๊ตฌ์ ๊ธฐ์ ํด์๋ ์ ๋๋ค.
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
# GROUP BY๋ก ์ง์ ํ name ์ด ์ด์ธ์ ์ด ์กด์ฌ(no,quantity)
SELECT no, name, quantity
FROM employees
GROUP BY name;
๋ง์ฝ GROUP BY์ ์ง์ ํ ์ด ์ด์ธ์ ์ด์ SELECT ๊ตฌ์ ์ง์ ํ๋ ค๋ฉด ์ง๊ณํจ์๋ฅผ ๊ฐ์ด ์จ์ผ ํ๋ค.
SELECT MIN(no), name, SUM(quantity)
FROM employees
GROUP BY name;
๊ฒฐ๊ด๊ฐ ์ ๋ ฌ
GROUP BY๋ก ๊ทธ๋ฃนํํด๋ ์คํ ๊ฒฐ๊ณผ ์์๋ฅผ ์ ๋ ฌํ ์๋ ์๋ค.
๊ฒฐ๊ณผ๋ฅผ ์ ๋ ฌํ๋ ค๋ฉด GROUP BY ๊ตฌ๋ก ๊ทธ๋ฃนํํ ๊ฒฝ์ฐ์๋ ORDER BY ๊ตฌ๋ฅผ ์ฌ์ฉํด ์ ๋ ฌํ ์ ์๋ค.
SELECT name, COUNT(name), SUM(quantity)
FROM employees
GROUP BY name
ORDER BY SUM(quantity) DESC;
name | COUNT(name) | SUM(quantity) |
B | 1 | 10 |
C | 1 | 3 |
A | 2 | 3 |
NULL | 0 | NULL |
์๋ธ์ฟผ๋ฆฌ
DELETE์ WHERE ๊ตฌ์์ ์๋ธ์ฟผ๋ฆฌ ์ฌ์ฉํ๊ธฐ
์๋ธ์ฟผ๋ฆฌ๋ SQL ๋ช ๋ น๋ฌธ ์์ ํ๋ถ SELECT ๋ช ๋ น์ผ๋ก ๊ดํธ๋ก ๋ฌถ์ด ์ง์ ํ๋ค.
์๋ธ์ฟผ๋ฆฌ๋ SELECT ๊ตฌ, FROM ๊ตฌ, WHERE ๊ตฌ ๋ฑ SELECT ๋ช ๋ น์ ๊ฐ ๊ตฌ๋ฅผ ๊ธฐ์ ํ ์ ์๋ค.
# ์ต์๊ฐ์ ๊ฐ์ง๋ ํ ์ญ์ ํ๊ธฐ DELETE FROM sample54 WHERE a = (SELECT MIN(a) FROM sample54);
์ค์นผ๋ผ ๊ฐ
์ผ๋ฐ์ ์ธ ์๋ธ์ฟผ๋ฆฌ ํจํด์ ๋ค์๊ณผ ๊ฐ๋ค.
โ ํ๋์ ๊ฐ์ ๋ฐํํ๋ ํจํด โก ๋ณต์์ ํ์ด ๋ฐํ๋์ง๋ง ์ด์ ํ๋์ธ ํจํด
โข ํ๋์ ํ์ด ๋ฐํ๋์ง๋ง ์ด์ด ๋ณต์์ธ ํจํด โฃ ๋ณต์์ ํ, ๋ณต์์ ์ด์ด ๋ฐํ๋๋ ํจํด
์ฒซ ๋ฒ์งธ ํจํด์ '๋จ์ผ ๊ฐ'์ผ๋ก๋ ํต์ฉ๋์ง๋ง ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ณ์์๋ '์ค์นผ๋ผ ๊ฐ'์ด๋ผ ๋ถ๋ฆฌ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
์ฆ, SELECT ๋ช ๋ น์ด ํ๋์ ๊ฐ๋ง ๋ฐํํ๋ ๊ฒ์ '์ค์นผ๋ผ ๊ฐ์ ๋ฐํํ๋ค'๋ผ๊ณ ํ๋ค.
โ
์ค์นผ๋ผ ๊ฐ์ ๋ฐํํ๋ SELECT ๋ช ๋ น์ ํน๋ณ ์ทจ๊ธํ๋ ์ด์ ๋ ์๋ธ ์ฟผ๋ฆฌ๋ก์จ ์ฌ์ฉํ๊ธฐ ์ฝ๊ธฐ ๋๋ฌธ์ด๋ค.
ํต์์ ์ผ๋ก ํน์ ํ ๋ ๊ฐ์ง๊ฐ ์๋ก ๋์ผํ์ง ์ฌ๋ถ๋ฅผ ๋น๊ตํ ๋ ์๋ก ๋จ์ผํ ๊ฐ์ผ๋ก ๋น๊ตํ๋ค.
์ฆ, WHERE ๊ตฌ์์ ์ค์นผ๋ผ ๊ฐ์ ๋ฐํํ๋ ์๋ธ์ฟผ๋ฆฌ๋ = ์ฐ์ฐ์๋ก ๋น๊ตํ ์ ์๋ค.
DELETE FROM sample54 WHERE a = (SELECT MIN(a) FROM sample54);
์ฌ๊ธฐ์ ์๋ธ์ฟผ๋ฆฌ ๋ถ๋ถ์ ์ค์นผ๋ผ ๊ฐ์ ๋ฐํํ๋ SELECT ๋ช ๋ น์ผ๋ก ๋์ด ์์ผ๋ฏ๋ก
= ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด ์ด a์ ๊ฐ๊ณผ ๋น๊ตํ ์ ์๋ค.
โ
์ค์นผ๋ผ ๊ฐ์ ๋ฐํํ๋ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ํน๋ณํ '์ค์นผ๋ผ ์๋ธ์ฟผ๋ฆฌ'๋ผ๊ณ ๋ถ๋ฅธ๋ค.
'์ค์นผ๋ผ ์๋ธ์ฟผ๋ฆฌ'๋ผ๋ฉด WHERE ๊ตฌ์ ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก
์ง๊ณํจ์๋ฅผ ์ฌ์ฉํด ์ง๊ณํ ๊ฒฐ๊ณผ๋ฅผ ์กฐ๊ฑด์์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
โ
SELECT ๊ตฌ์์ ์๋ธ์ฟผ๋ฆฌ ์ฌ์ฉํ๊ธฐ
SELECT ๊ตฌ์์ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ์ง์ ํ ๋๋ ์ค์นผ๋ผ ์๋ธ์ฟผ๋ฆฌ๊ฐ ํ์ํ๋ค.
SELECT (SELECT COUNT(*) FROM sample51) AS sq1,
(SELECT COUNT(*) FROM sample54) AS sq2;
sq1 | sq2 |
5 | 3 |
sample51 ํ ์ด๋ธ์ ํ ๊ฐ์์ sample54 ํ ์ด๋ธ์ ํ ๊ฐ์๋ฅผ ๊ฐ ์๋ธ์ฟผ๋ฆฌ๋ก ๊ตฌํ๋ค.
์ฌ๊ธฐ์ ์ฃผ์ํ ์ ์ ์๋ธ์ฟผ๋ฆฌ๊ฐ ์๋ ์๋ถ์ SELECT ๋ช ๋ น์๋ FROM ๊ตฌ๊ฐ ์๋ค๋ ๊ฒ์ด๋ค.
โ
FROM ๊ตฌ์์ ์๋ธ์ฟผ๋ฆฌ ์ฌ์ฉํ๊ธฐ
FROM ๊ตฌ์์๋ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์๋๋ฐ, ์ฌ๊ธฐ์ ์ค์นผ๋ผ ์๋ธ์ฟผ๋ฆฌ๊ฐ ์๋์ด๋ ์๊ด์ด ์๋ค.
# FROM ๊ตฌ์์ ์๋ธ์ฟผ๋ฆฌ ์ฌ์ฉํ๊ธฐ SELECT * FROM (SELECT * FROM sample54) AS sq;
SELECT ๋ช ๋ น ์์ SELECT ๋ช ๋ น์ด ๋ค์ด์๋ ๋ฏ ๋ณด์ด๋ ์ด๋ฐ ๊ตฌ์กฐ๋ฅผ
'๋ค์คํฐ๋(nested) ๊ตฌ์กฐ' ๋๋ '์ค์ฒฉ ๊ตฌ์กฐ', '๋ดํฌ ๊ตฌ์กฐ'๋ผ ๋ถ๋ฅธ๋ค.
FROM ๊ตฌ์์๋ 'AS' ํค์๋๋ฅผ ํตํด ํ ์ด๋ธ์ด๋ ์๋ธ์ฟผ๋ฆฌ์ ๋ณ๋ช ์ ๋ถ์ผ ์ ์๋ค.
โ
INSERT ๋ช ๋ น๊ณผ ์๋ธ์ฟผ๋ฆฌ
INSERT ๋ช ๋ น์๋ VALUES ๊ตฌ์ ์ผ๋ถ๋ก ์๋ธ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์,
VALUES ๊ตฌ ๋์ SELECT ๋ช ๋ น์ ์ฌ์ฉํ๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค.
INSERT INTO sample541 VALUES( (SELECT COUNT(*) FROM sample51), (SELECT COUNT(*) FROM sample54) ); SELECT * FROM sample541;
a | b |
5 | 3 |
VALUES ๊ตฌ์ ๊ฐ์ผ๋ก ์๋ธ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ์ค์นผ๋ผ ์๋ธ์ฟผ๋ฆฌ์ฌ์ผํ๋ฉฐ, ์๋ฃํ๋ ์ผ์นํด์ผ ํ๋ค.\
INSERT INTO sample541 SELECT 1,2; SELECT * FROM sample541;
a | b |
5 | 3 |
๋ค์์ ํํ 'INSERT SELECT'๋ผ ๋ถ๋ฆฌ๋ ๋ช ๋ น์ผ๋ก INSERT์ SELECT๋ฅผ ํฉ์น ๊ฒ ๊ฐ์ ๋ช ๋ น์ด๋ค.
INSERT SELECT ๋ช ๋ น์ SELECT ๋ช ๋ น์ ๊ฒฐ๊ณผ๋ฅผ INSERT INTO๋ก ์ง์ ํ ํ ์ด๋ธ์ ์ ๋ถ ์ถ๊ฐํ๋ค.
์ด๋ SELECT ๋ช ๋ น์ด ๋ฐํํ๋ ๊ฐ์ด ๊ผญ ์ค์นผ๋ผ ๊ฐ์ผ ํ์๋ ์์ผ๋ฉฐ,
SELECT๊ฐ ๋ฐํํ๋ ์ด ์์ ์๋ฃํ์ด INSERTํ ํ ์ด๋ธ๊ณผ ์ผ์นํ๊ธฐ๋ง ํ๋ฉด ๋๋ค.
์ด๋ ๋ฐ์ดํฐ์ ๋ณต์ฌ๋ ์ด๋์ ํ ๋ ์์ฃผ ์ฌ์ฉํ๋ ๋ช ๋ น์ด๋ค.
์๊ด ์๋ธ์ฟผ๋ฆฌ
EXISTS
EXISTS ์ ์ด๋ฅผ ์ฌ์ฉํ๋ฉด ์๋ธ์ฟผ๋ฆฌ๊ฐ ๋ฐํํ๋ ๊ฒฐ๊ด๊ฐ์ด ์๋์ง๋ฅผ ์กฐ์ฌํ ์ ์๋ค.
๋ค์๊ณผ ๊ฐ์ ๋ ๊ฐ์ ์ํ ํ ์ด๋ธ์ด ์๋ค.
no | a |
1 | NULL |
2 | NULL |
3 | NULL |
4 | NULL |
5 | NULL |
- sample551
no 2 |
3 |
5 |
- sample552
โ
์ด ๋ ํ ์ด๋ธ์์ sample552์ no ์ด์ ๊ฐ๊ณผ ๊ฐ์ ํ์ด ์์ผ๋ฉด '์์'์ผ๋ก,
ํ์ด ์์ผ๋ฉด '์์'์ด๋ผ๋ ๊ฐ์ผ๋ก ๊ฐฑ์ ํ๋๋ก ํ๊ฒ ๋ค.
# EXISTS๋ฅผ ์ฌ์ฉํด '์์'์ผ๋ก ๊ฐฑ์ ํ๊ธฐ UPDATE sample551 SET a = '์์' WHERE EXISTS(SELECT * FROM sample552 WHERE no2 = no); SELECT * FROM sample551;
no | a |
1 | NULL |
2 | NULL |
3 | ์์ |
4 | NULL |
5 | ์์ |
EXISTS ์ ์ด์ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ์ง์ ํ๋ฉด ์๋ธ์ฟผ๋ฆฌ๊ฐ ํ์ ๋ฐํํ ๊ฒฝ์ฐ์ ์ฐธ์ ๋๋ ค์ค๋ค.
๊ฒฐ๊ณผ๊ฐ ํ ์ค์ด์ด๋ ๊ทธ ์ด์์ด์ด๋ ์ฐธ์ด ๋๋ค.
๋ฐ๋ฉด ๋ฐํ๋๋ ํ์ด ์์ ๊ฒฝ์ฐ์๋ ๊ฑฐ์ง์ด ๋๋ค.
โ
NOT EXISTS
๋ฐ๋๋ก, ํ์ด ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ ์ฐธ์ด ๋์ด '์์'์ด ๋๋ NOT EXISTS ์ ์ด๋ ์๋ค.
UPDATE sample551 SET a = '์์' WHERE NOT EXISTS(SELECT * FROM sample552 WHERE no2 = no); SELECT * FROm sample551;
no | a |
1 | ์์ |
2 | ์์ |
3 | ์์ |
4 | ์์ |
5 | ์์ |
์ด๋ ๋ฏ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ์ด์ฉํด ๋ค๋ฅธ ํ ์ด๋ธ์ ์ํฉ์ ํ๋จํ๊ณ UPDATE๋ก ๊ฐฑ์ ํ ์ ์๋ค.
UPDATE๋ฟ๋ง ์๋๋ผ, SELECT ๋ช ๋ น์ด๋ DELETE ๋ช ๋ น์ผ๋ก๋ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
โ
์๊ด ์๋ธ์ฟผ๋ฆฌ
์๊ด ์๋ธ์ฟผ๋ฆฌ๋ ๋ถ๋ชจ ๋ช ๋ น๊ณผ ์์์ธ ์๋ธ์ฟผ๋ฆฌ๊ฐ ํน์ ๊ด๊ณ๋ฅผ ๋งบ๋ ๊ฒ์ ๋งํ๋ค.
์ด์ ์ ๋ณธ UPDATE ๋ช ๋ น์ EXISTS ์ ์ด๋ฅผ ํตํด ์๋ธ์ฟผ๋ฆฌ๋ฅผ ํ์ฉํ ์ฝ๋๋ฅผ ๋ณด๋ฉด,
UPDATE sample551 SET a = '์์' WHERE EXISTS(SELECT * FROM sample552 WHERE no2 = no);
UPDATE ๋ช ๋ น์ด ๋ถ๋ชจ๊ฐ ๋๊ณ , WHERE ๊ตฌ์ ๊ดํธ๋ก ๋ฌถ์ ๋ถ๋ถ ์๋ธ์ฟผ๋ฆฌ๊ฐ ์์์ด ๋๋ค.
์๊ด ์๋ธ์ฟผ๋ฆฌ์์๋ ๋ถ๋ชจ ๋ช ๋ น๊ณผ ์ฐ๊ด๋์ด ์ฒ๋ฆฌ๋๊ธฐ ๋๋ฌธ์
์๋ธ์ฟผ๋ฆฌ ๋ถ๋ถ๋ง์ ๋ฐ๋ก ๋ผ์ด๋ด์ ์คํ์ํฌ ์ ์๋ค.
DELETE FROM sample54 WHEN a = (SELECT MIN(a) FROM sample54);
๋ค์๊ณผ ๊ฐ์ DELETE์ ๊ฒฝ์ฐ์๋ ์๊ด ์๋ธ์ฟผ๋ฆฌ๊ฐ ์๋๋ฉฐ, ๋จ๋ ์ฟผ๋ฆฌ๋ก ์๋ธ์ฟผ๋ฆฌ๋ฅผ ์คํํ ์ ์๋ค.
โ
ํ ์ด๋ธ๋ช ๋ถ์ด๊ธฐ
๋ง์ฝ ์์ ์ดํด๋ณธ no ์ด๊ณผ no 2์ด๊ณผ๋ ๋ค๋ฅด๊ฒ ๋ ํ ์ด๋ธ์ ๊ฐ์ ์ด์ด ์์ ๊ฒฝ์ฐ์๋
no=no์ ๊ฐ์ ์ฝ๋๋ฅผ ์คํํ๊ฒ ๋๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
์ด๋ฐ ๊ฒฝ์ฐ์๋ ์ด์ด ์ด๋ ํ ์ด๋ธ์ ๊ฒ์ธ์ง ๋ช ์์ ์ผ๋ก ๋ํ๋ผ ํ์๊ฐ ์์ผ๋ฉฐ,
์ด๋ ์ด๋ช ์์ 'ํ ์ด๋ธ๋ช .'์ ๋ถ์ด๋ฉด ๋๋ค.
UPDATE sample551 SET a = '์์' WHERE EXISTS(SELECT * FROM sample552 WHERE sample552.no2 = sample551.no); SELECT * FROM sample551;
IN
์ค์นผ๋ผ ๊ฐ๋ผ๋ฆฌ ๋น๊ตํ ๋๋ = ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋๋ฐ, ์งํฉ์ ๋น๊ตํ ๋๋ ์ฌ์ฉํ ์ ์๋ค.
์ฌ๊ธฐ์ IN์ ์ฌ์ฉํ๋ฉด ์งํฉ ์์ ๊ฐ์ด ์กด์ฌํ๋์ง๋ฅผ ์กฐ์ฌํ ์ ์๋ค.
๋ํ ํน์ ์ด์ ๊ฐ์ด '๋ฌด์ ๋๋(OR) ๋ฌด์'์ด๋ผ๋ ์กฐ๊ฑด์์ ์ง์ ํ๋ ๊ฒฝ์ฐ
IN์ ์ฌ์ฉํ๋ฉด ๊ฐ๋จํ๊ฒ ์ง์ ํ ์ ์๋ค.
โ
IN์์๋ ์ค๋ฅธ์ชฝ์ ์งํฉ์ ์ง์ ํ๋ค.
์ผ์ชฝ์ ์ง์ ๋ ๊ฐ๊ณผ ๊ฐ์ ๊ฐ์ด ์งํฉ ์์ ์กด์ฌํ๋ฉด ์ฐธ์ ๋ฐํํ๋ค.
์งํฉ์ ์์ ๋ฆฌ์คํธ๋ฅผ ๊ดํธ๋ก ๋ฌถ์ด ๊ธฐ์ ํ๋ฉฐ, ์๋ธ์ฟผ๋ฆฌ๋ก๋ ์ง์ ํ ์ ์๋ค.
์ด ๊ฐ์ ๊ฒฝ์ฐ ์๋ธ์ฟผ๋ฆฌ๋ ์ค์นผ๋ผ ์๋ธ์ฟผ๋ฆฌ๊ฐ ๋ ํ์๋ ์๋ค.
# IN์ ์ฌ์ฉํด ์กฐ๊ฑด์ ๊ธฐ์ SELECT * FROM sample551 WHERE no IN (3,5);
# IN์ ์ค๋ฅธ์ชฝ์ ์๋ธ์ฟผ๋ฆฌ๋ก ์ง์ SELECT * FROM sample551 WEHER no IN (SELECT no2 FROM sample552);
IN์ ์งํฉ ์์ ๊ฐ์ด ํฌํจ๋์ด ์์ผ๋ฉด ์ฐธ์ด ๋๋ฉฐ, NOT IN์ ์งํฉ์ ๊ฐ์ด ํฌํจ๋์ด ์์ง ์์ ๊ฒฝ์ฐ ์ฐธ์ด ๋๋ค.
โ
IN์์๋ ์งํฉ ์์ NULL ๊ฐ์ด ์์ด๋ ๋ฌด์ํ์ง๋ ์์ง๋ง ๋ฐ๋์ IS NULL์ ์ฌ์ฉํด์ผ ํ๋ค.
๋ํ NOT IN์ ๊ฒฝ์ฐ, ์งํฉ ์์ NULL ๊ฐ์ด ์์ผ๋ฉด ์ค๋ น ์ผ์ชฝ ๊ฐ์ด ์งํฉ ์์ ํฌํจ๋์ด ์์ง ์์๋
์ฐธ์ ๋ฐํํ์ง ์์ผ๋ฉฐ ์ด๋ ๊ฒฐ๊ณผ๋ ๋ถ๋ช (UNKNOWN)์ด ๋๋ค.
'๐์๊ฒฉ์ฆ > ๐SQLD๊ฐ๋ฐ์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SQL] SQL delete๋ฌธ ๋ฐ ์ฟผ๋ฆฌ ์ฐ์ต (0) | 2021.11.07 |
---|---|
[sql ๊ณต๋ถ๋ฒ] ๋ ผ๋ ๋๋ด๊ธฐ (0) | 2021.11.07 |
[SQL] DB ์ค๊ณ(์ ๊ทํ,ROLLBACK, COMMIT) 2ํธ (0) | 2021.11.07 |
[SQL] DB ์ค๊ณ(์ ๊ทํ,ROLLBACK, COMMIT) 1ํธ (0) | 2021.11.07 |
์ ์์๋ฃ (0) | 2021.11.04 |