1. 비상관 서브쿼리
SELECT
CategoryID, CategoryName, Description,
(SELECT ProductName FROM Products WHERE ProductID = 1)
FROM Categories;
![](https://velog.velcdn.com/images/jeong_yooony/post/76ab7ef6-9a59-4e83-8bf1-40637b358f0f/image.png)
SELECT * FROM Products
WHERE Price < (
SELECT AVG(Price) FROM Products
);
![](https://velog.velcdn.com/images/jeong_yooony/post/8ed8d60a-fe8a-4a37-ae82-2d30cb38340e/image.png)
SELECT
CategoryID, CategoryName, Description
FROM Categories
WHERE
CategoryID =
(SELECT CategoryID FROM Products
WHERE ProductName = 'Chais');
![](https://velog.velcdn.com/images/jeong_yooony/post/7849cf0c-b5b1-4195-ae89-2ee7695b252f/image.png)
SELECT
CategoryID, CategoryName, Description
FROM Categories
WHERE
CategoryID IN
(SELECT CategoryID FROM Products
WHERE Price > 50);
![](https://velog.velcdn.com/images/jeong_yooony/post/66cd5b46-d0c1-4a42-9266-ea53e91bb4ad/image.png)
- ~ ALL 서브쿼리의 모든 결과에 대해 ~하다
- ~ ANY 서브쿼리의 하나 이상의 결과에 대해 ~하다
SELECT * FROM Products
WHERE Price > ALL (
SELECT Price FROM Products
WHERE CategoryID = 2
);
![](https://velog.velcdn.com/images/jeong_yooony/post/44ffba1d-f953-404d-9d02-a95bd0fa483c/image.png)
SELECT
CategoryID, CategoryName, Description
FROM Categories
WHERE
CategoryID = ANY
(SELECT CategoryID FROM Products
WHERE Price > 50);
![](https://velog.velcdn.com/images/jeong_yooony/post/e6c440aa-41da-4df3-b7f5-a89d4a5a927e/image.png)
2. 상관 서브쿼리
SELECT
ProductID, ProductName,
(
SELECT CategoryName FROM Categories C
WHERE C.CategoryID = P.CategoryID
) AS CategoryName
FROM Products P;
![](https://velog.velcdn.com/images/jeong_yooony/post/d7b21c85-635a-4036-b0fe-fe3243eae320/image.png)
SELECT
SupplierName, Country, City,
(
SELECT COUNT(*) FROM Customers C
WHERE C.Country = S.Country
) AS CustomersInTheCountry,
(
SELECT COUNT(*) FROM Customers C
WHERE C.Country = S.Country
AND C.City = S.City
) AS CustomersInTheCity
FROM Suppliers S;
![](https://velog.velcdn.com/images/jeong_yooony/post/0ab4eb6b-ddc9-4774-beb9-a6a171cd2c06/image.png)
SELECT
CategoryID, CategoryName,
(
SELECT MAX(Price) FROM Products P
WHERE P.CategoryID = C.CategoryID
) AS MaximumPrice,
(
SELECT AVG(Price) FROM Products P
WHERE P.CategoryID = C.CategoryID
) AS AveragePrice
FROM Categories C;
![](https://velog.velcdn.com/images/jeong_yooony/post/e067924b-edd1-44da-9817-6f638c802b0c/image.png)
SELECT
ProductID, ProductName, CategoryID, Price
-- ,(SELECT AVG(Price) FROM Products P2
-- WHERE P2.CategoryID = P1.CategoryID)
FROM Products P1
WHERE Price < (
SELECT AVG(Price) FROM Products P2
WHERE P2.CategoryID = P1.CategoryID
);
![](https://velog.velcdn.com/images/jeong_yooony/post/09bd93e0-d528-4b89-9406-e4bd43b857a7/image.png)
EXISTS / NOT EXISTS 연산자
SELECT
CategoryID, CategoryName
-- ,(SELECT MAX(P.Price) FROM Products P
-- WHERE P.CategoryID = C.CategoryID
-- ) AS MaxPrice
FROM Categories C
WHERE EXISTS (
SELECT * FROM Products P
WHERE P.CategoryID = C.CategoryID
AND P.Price > 80
);
![](https://velog.velcdn.com/images/jeong_yooony/post/608232cb-54b8-4387-a2f0-6ad47ad388a5/image.png)