EEALL@ONCE
๐ ์ฟผ๋ฆฌ ์คํฐ๋(2) - ์ฌ์ฉ์ ๋ณ ๊ฒ์๋ฌผ์ ์์ฑํ ์์ ๋ฐ๋ผ ์ฌ์ฉ์๋ฅผ ์ ํ (HAVING / SUBQUERY / IN, EXISTS, ALL, ANY, SOME ) ๋ณธ๋ฌธ
๐ ์ฟผ๋ฆฌ ์คํฐ๋(2) - ์ฌ์ฉ์ ๋ณ ๊ฒ์๋ฌผ์ ์์ฑํ ์์ ๋ฐ๋ผ ์ฌ์ฉ์๋ฅผ ์ ํ (HAVING / SUBQUERY / IN, EXISTS, ALL, ANY, SOME )
์ฌ์ฃ์์ค 2023. 7. 27. 18:411. ๐ํ ์ด๋ธ
2. ๐ง ๋ฌธ์
2๊ฐ ์ด์์ ๊ฒ์๋ฌผ์ ์์ฑํ ์ฌ์ฉ์๋ง ์ ํํ๊ณ ์ถ๋ค.
3. ๐ก ํด๊ฒฐ
SELECT
u.id,
u.username
FROM
Users u
WHERE
u.id IN (
SELECT
p.user_id
FROM
Posts p
GROUP BY
p.user_id
HAVING
COUNT(*) >= 2
);
๐ด HAVING
HAVING ์ ์ SQL์์ ๊ทธ๋ฃนํ๋ ๊ฒฐ๊ณผ์ ๋ํ ํํฐ๋ฅผ ์ ๊ณต. ์ฆ, GROUP BY ์ ๋ก ๊ทธ๋ฃนํ๋ ๊ฒฐ๊ณผ ์ค ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ทธ๋ฃน๋ง์ ์ ํํ๊ณ ์ถ์ ๋ ์ฌ์ฉ
HAVING ์ ์ GROUP BY ์ ๊ณผ ํจ๊ป ์ฌ์ฉ๋๋ฉฐ, WHERE ์ ๊ณผ ๋น์ทํ๊ฒ ๋์ํ์ง๋ง ์ค์ํ ์ฐจ์ด์ ์ด ์์!
WHERE ์ ์ ๊ฐ๋ณ ํ์ ๋ํ ํํฐ๋ฅผ ์ ๊ณตํ๋ ๋ฐ๋ฉด, HAVING ์ ์ ๊ทธ๋ฃน์ ๋ํ ํํฐ๋ฅผ ์ ๊ณต!
๐ดWHERE ๋ค SUBQUERY
์๋ธ์ฟผ๋ฆฌ๋ ์ฃผ๋ก IN, EXISTS, ALL, ANY, SOME ๋ฑ์ ์ฐ์ฐ์์ ํจ๊ป ์ฌ์ฉ
๐ IN : IN ์ฐ์ฐ์๋ ์๋ธ์ฟผ๋ฆฌ๊ฐ ๋ฐํํ๋ ๊ฐ ๋ชฉ๋ก ์ค์์ ์ผ์นํ๋ ๊ฐ์ ์ฐพ์
'USA'์์ ๊ฑฐ๋๊ฐ ์ด๋ฃจ์ด์ง ๊ณ ๊ฐ์ ๋ชจ๋ ์ฃผ๋ฌธ์ ์ฐพ์
SELECT *
FROM Orders
WHERE CustomerID IN (SELECT CustomerID FROM Customers WHERE Country = 'USA');
๐ EXISTS : EXISTS ์ฐ์ฐ์๋ ์๋ธ์ฟผ๋ฆฌ๊ฐ ์ต์ํ ํ๋์ ํ์ ๋ฐํํ๋ฉด ์ฐธ(TRUE)์ ๋ฐํ
SELECT SupplierName
FROM Suppliers
WHERE EXISTS (SELECT ProductName FROM Products WHERE Products.SupplierID = Suppliers.supplierID AND Price < 20);
๊ฐ๊ฒฉ์ด 20 ๋ฏธ๋ง์ธ ์ ํ์ ๊ณต๊ธํ๋ ๊ณต๊ธ์ ์ฒด๋ฅผ ์ฐพ์
๐ ALL : ALL ์ฐ์ฐ์๋ ๋ชจ๋ ์๋ธ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ์ ๋ํด ๋น๊ต ์กฐ๊ฑด์ ๋ง์กฑํ๋์ง ํ์ธ
SELECT ProductName
FROM Products
WHERE Price > ALL (SELECT Price FROM Products WHERE Category = 'Drink');
๋ชจ๋ ์๋ฃ๋ณด๋ค ๋น์ผ ๋ชจ๋ ์ ํ์ ์ฐพ์
๐ ANY or SOME : ANY๋ SOME ์ฐ์ฐ์๋ ์๋ธ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ์ค ํ๋๋ผ๋ ๋น๊ต ์กฐ๊ฑด์ ๋ง์กฑํ๋ฉด ์ฐธ(TRUE)์ ๋ฐํ
SELECT ProductName
FROM Products
WHERE Price > ANY (SELECT Price FROM Products WHERE Category = 'Drink');
๊ฐ๊ฒฉ์ด ์๋ฃ ์ค ํ๋๋ณด๋ค ๋น์ผ ์ ํ์ ์ฐพ์
๋๋ ์ด์ค์ EXIST์ ANY๊ฐ ๋ฉ์ปค๋์ฆ์ด ์ด๋ป๊ฒ ๋๋๊ฑด์ง ์ข ๋ ์์๋ณด๊ธฐ๋ก ํ๋.. ์ฐธ์ผ๋ก ๋ฐํํ๋๋ฐ ๊ทธ๊ฒ ๊ทธ๋ผ ์ ํ ๋๋ค๋ ๊ฒ๊ณผ ๊ฐ์ ์๋ฏธ ์ธ๊ฑด๊ฐ ??
SELECT *
FROM Customers c
WHERE EXISTS (SELECT 1 FROM Orders o WHERE o.CustomerID = c.CustomerID);
๊ณ ๊ฐ ์ค์์ ์ฃผ๋ฌธ์ ํ ์ ์ด ์๋ ์ฌ๋๋ค์ ์ ๋ณด๋ฅผ ์๊ณ ์ถ๋ค๋ฉด ์์ ์ฟผ๋ฆฌ๋ก ์ง๋ฉด ๋๋ค.
๋ฉ์ปค๋์ฆ์ ..
(1) ๊ฐ ๊ณ ๊ฐ์ ๋ํด, ํด๋น ๊ณ ๊ฐ ID๋ฅผ ๊ฐ์ง ์ฃผ๋ฌธ์ด Orders ํ ์ด๋ธ์ ์๋์ง ํ์ธ.
(2) ๋ง์ฝ ๊ทธ๋ฌํ ์ฃผ๋ฌธ์ด ์กด์ฌํ๋ฉด, EXISTS๋ ์ฐธ(TRUE)์ ๋ฐํํ๊ณ , ํด๋น ๊ณ ๊ฐ์ ์ ๋ณด๊ฐ ๊ฒฐ๊ณผ์ ํฌํจ ์ฆ select ๋จ
๋ฐ๋ผ์, ...
์ฐธ์ผ๋ก ๋ฐํํ๋๋ฐ ๊ทธ๊ฒ ๊ทธ๋ผ ์ ํ ๋๋ค๋ ๊ฒ๊ณผ ๊ฐ์ ์๋ฏธ ์ธ๊ฑด๊ฐ ?? ----> ๊ทธ๋ ๋ค.!