(์ค์ต) ์ฃผ์(์ค์ต) ์กฐ๊ฑด๋ฌธ(์ค์ต) JOIN(์ค์ต) UNION(์ค์ต) GROUP BY(์ค์ต) HAVING(์ค์ต ์ํจ) EXIST(์ค์ต ์ํจ) ANY(์ค์ต ์ํจ) ALL
(์ค์ต) ์ฃผ์
์ด์ ๋ถํฐ ๊ตฌ๋ฌธ์ด ์กฐ๊ธ ๋ณต์กํด์ง ๊ฒ์
๋๋ค. ์๋ ์ฃผ์ ๊ตฌ๋ฌธ์ ์ฟผ๋ฆฌ๋ฅผ ์ค๋ช
ํ๊ฑฐ๋ ์ฟผ๋ฆฌ๋ฅผ ์ ์ ๋ณด๋ฅํ๋ ์ฉ๋๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
-- ํด๋น ๊ตฌ๋ฌธ์ ์ ์ฒด ๊ณ ๊ฐ ์ ๋ณด๋ฅผ ์กฐํํฉ๋๋ค. SELECT * FROM Customers;
-- ํด๋น ๊ตฌ๋ฌธ์ ์ ์ฒด ๊ณ ๊ฐ ์ ๋ณด๋ฅผ ์กฐํํฉ๋๋ค. SELECT * FROM Customers --WHERE CustomerID > 50;
/* ์ฌ๋ฌ ์ค ์ฃผ์์ ๋๋ค. SELECT City FROM Customers; */ SELECT * FROM Customers;
(์ค์ต) ์กฐ๊ฑด๋ฌธ
ํด๋น ๊ตฌ๋ฌธ์ ์๋ ํ์ด์ง์์ ์ค์ตํ์ธ์. ๋ค๋ฅธ Page์์ ์ค์ต์ด ๋์ง ์์ต๋๋ค.
- Oracle์ ๊ฒฝ์ฐ์๋ DECODE, CASE WHEN
- MsSQL์ ๊ฒฝ์ฐ์๋ CASE WHEN
- MySQL์ ๊ฒฝ์ฐ์๋ IF, CASE WHEN
- CASE WHEN ์กฐ๊ฑด THEN ์ฐธ์ผ๊ฒฝ์ฐ_์คํ๊ตฌ๋ฌธ ELSE ๊ฑฐ์ง์ผ๊ฒฝ์ฐ_์คํ๊ตฌ๋ฌธ END
SELECT CASE WHEN 'GOOD'='JOB' THEN 'HELLO' ELSE 'WORLD' END;
์ข ๋ ์ด๋ ค์ด ๊ตฌ๋ฌธ์ ํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ์๋ ๊ตฌ๋ฌธ์ ์คํํด๋ณด์ธ์.
SELECT CustomerID, City, CASE WHEN CustomerID > 50 THEN '50๋ฒ์ ๋์!' WHEN City='London' THEN '๋์๊ฐ ๋ฐ๋!' ELSE '50๋ฒ ์ดํ์!' END AS '์ถ๋ ฅ ๋ฌธ๊ตฌ' FROM Customers;
๋ค์์ W3School์์ ์ ๊ณตํ๊ณ ์๋ ๊ตฌ๋ฌธ์
๋๋ค. ๋ง์ฝ City๋ฐ์ดํฐ๊ฐ NULL๊ฐ์ ๊ฐ์ง๊ณ ์๋ค๋ฉด ์ ๋ ฌ ์์๋ฅผ Country ๊ธฐ์ค์ผ๋ก, ์๋๋ผ๋ฉด City ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ๋ผ๋ ์ฟผ๋ฆฌ์
๋๋ค.
SELECT CustomerName, City, Country FROM Customers ORDER BY (CASE WHEN City IS NULL THEN Country ELSE City END);
(์ค์ต) JOIN
๊ธฐ์ค์ ๊ฐ์ง๊ณ ๋ฐ์ดํฐ๋ฅผ ํฉ์นฉ๋๋ค. ์ฌ๊ธฐ์๋
INNER JOIN
๋ง ์ฌ์ฉํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.-- w3school ๊ธฐ๋ณธ ์์ ์ ๋๋ค. -- OrderID๋ Orders๋ผ๋ table์ ์์ต๋๋ค. -- CustomerName๋ Customers๋ผ๋ table์ ์์ต๋๋ค. -- OrderDate๋ Orders๋ผ๋ table์ ์์ต๋๋ค. SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate -- ๊ธฐ์ค table์ Orders์ ๋๋ค. FROM Orders -- INNER JOIN์ ํ table์ Customers์ ๋๋ค. INNER JOIN Customers -- INNER JOIN์ ๊ธฐ์ค์ ๋ table ๋ชจ๋ ์๋ CustomerID์ ๋๋ค. ON Orders.CustomerID=Customers.CustomerID;
์ ๋ ํ๋ฐฐ๋ฅผ ๋ฐฐ๋ฌํ๋ ํ๋ฐฐ๊ธฐ์ฌ์
๋๋ค. CustomerID์ CustomerName, Address, OrderDate, City, PostalCode๋ฅผ ์์์ผ ํฉ๋๋ค. ํด๋น data๋ฅผ ์ถ๋ ฅํด์ฃผ์ธ์.

์ด์ ๋ฐ์ดํฐ๋ฅผ ์ดํด๋ณด์ธ์. W3School์์
INNER JOIN
ํ ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ํฉ์ณ๋ณด์ธ์. ์์ ๋ฌธ์ ๋ค์ ๋ํ ์ฐ์ต๋ฌธ์ ๋ฅผ ์ ๊ณตํ๊ณ ์์ต๋๋ค. ์๋ ๋ฌธ์ ๋ฅผ ํ์ด๋ณด์ธ์. ์ ๋ต๋ ์ ๊ณตํ๊ณ ์์ด์.(์ค์ต) UNION
๋ฐ์ดํฐ๋ฅผ ๊ฒฐํฉํฉ๋๋ค.
SELECT City FROM Customers UNION SELECT City FROM Suppliers ORDER BY City;
JOIN๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก W3School์์ ์ ๊ณตํ๋ ๋ค์ํ ๋ฐ์ดํฐ๋ฅผ ํฉ์ณ๋ณด์ธ์.
(์ค์ต) GROUP BY
ํน์ ์ด์ ๊ธฐ์ค์ผ๋ก ๊ทธ๋ฃนํ ํ์ฌ ๋ค๋ฅธ ํน์ ์ด์ ๋ถ์ผ ๋ ์ฌ์ฉํฉ๋๋ค. ์๋ ์ฝ๋์์ GROUP BY ์ฝ๋๋ฅผ ์ญ์ ํ๋ฉด ์๋ํ์ง ์์ต๋๋ค. ๊ทธ ์ด์ ๋ SELECT ์ ์์ ์ด๋ฏธ ๊ทธ๋ฃน ํจ์์ ๊ธฐ์ค์ด์ด ์ฐ์๊ธฐ ๋๋ฌธ์
๋๋ค.
SELECT COUNT(CustomerID), Country FROM Customers GROUP BY Country;
(์ค์ต) HAVING
๊ตฌ๋ฃนํ๋ ๋ฐ์ดํฐ์ ์กฐ๊ฑด์ ๋ถ์ฌํฉ๋๋ค.
SELECT COUNT(CustomerID), Country FROM Customers GROUP BY Country HAVING COUNT(CustomerID) > 5;
(์ค์ต ์ํจ) EXIST
์๋ธ ์ฟผ๋ฆฌ๊ฐ ์ฐธ์ผ ๊ฒฝ์ฐ ์ฐธ์, ๊ฑฐ์ง์ผ ๊ฒฝ์ฐ ๊ฑฐ์ง์ ๋ฐํํฉ๋๋ค.
SELECT SupplierName FROM Suppliers WHERE EXISTS (SELECT ProductName FROM Products WHERE Products.SupplierID = Suppliers.supplierID AND Price < 20);
(์ค์ต ์ํจ) ANY
์๋ธ ์ฟผ๋ฆฌ๊ฐ ํ๋๋ผ๋ ์ฐธ์ด๋ผ๋ฉด ์ฐธ์ ๋ฐํํฉ๋๋ค.
SELECT ProductName FROM Products WHERE ProductID = ANY (SELECT ProductID FROM OrderDetails WHERE Quantity = 10);
(์ค์ต ์ํจ) ALL
์๋ธ ์ฟผ๋ฆฌ๊ฐ ๋ชจ๋ ์ฐธ์ด์ด์ผ ์ฐธ์ ๋ฐํํฉ๋๋ค.
SELECT ProductName FROM Products WHERE ProductID = ALL (SELECT ProductID FROM OrderDetails WHERE Quantity = 10);
ย