[얄코] Section 2-1. SELECT 더 깊이 파보기 (쿼리 안에 서브쿼리)
2023. 4. 18. 11:06ㆍDatabase/갖고노는 MySQL 데이터베이스
1. 쿼리 안에 서브쿼리
1. 비상관 서브쿼리
SELECT
CategoryID, CategoryName, Description,
(SELECT ProductName FROM Products WHERE ProductID = 1)
FROM Categories;
SELECT * FROM Products
WHERE Price < (
SELECT AVG(Price) FROM Products
);
SELECT
CategoryID, CategoryName, Description
FROM Categories
WHERE
CategoryID =
(SELECT CategoryID FROM Products
WHERE ProductName = 'Chais');
SELECT
CategoryID, CategoryName, Description
FROM Categories
WHERE
CategoryID IN
(SELECT CategoryID FROM Products
WHERE Price > 50);
연산자 | 의미 |
~ ALL | 서브쿼리의 모든 결과에 대해 ~하다 |
~ ANY | 서브쿼리의 하나 이상의 결과에 대해 ~하다 |
SELECT * FROM Products
WHERE Price > ALL (
SELECT Price FROM Products
WHERE CategoryID = 2
);
![](https://blog.kakaocdn.net/dn/bNW4TY/btsaEhL4M3m/oRfmdlPk8BMe7ruF4xcen0/img.png)
SELECT
CategoryID, CategoryName, Description
FROM Categories
WHERE
CategoryID = ANY
(SELECT CategoryID FROM Products
WHERE Price > 50);
2. 상관 서브쿼리
SELECT
ProductID, ProductName,
(
SELECT CategoryName FROM Categories C
WHERE C.CategoryID = P.CategoryID
) AS CategoryName
FROM Products P;
![](https://blog.kakaocdn.net/dn/bV0C4d/btsaR1V0JUr/b0fEXWRxpgktBMXdesZ1m0/img.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;
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;
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
);
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://www.yalco.kr/@sql/2-1/
쿼리 안에 서브쿼리
어려운 프로그래밍 개념들을 쉽게 설명해주는 유튜브 채널 '얄팍한 코딩사전'. 영상에서 다 알려주지 못한 정보들이나 자주 묻는 질문들의 답변들, 예제 코드들을 얄코에서 확인하세요!
www.yalco.kr
'Database > 갖고노는 MySQL 데이터베이스' 카테고리의 다른 글
[얄코] Section 2-3. SELECT 더 깊이 파보기 (UNION - 집합으로 다루기) (0) | 2023.04.18 |
---|---|
[얄코] Section 2-2. SELECT 더 깊이 파보기 (JOIN - 여러 테이블 조립하기) (0) | 2023.04.18 |
[얄코] Section 1-5. SELECT 기초 - 원하는 정보 찾기 (조건에 따라 그룹으로 묶기) (0) | 2023.04.17 |
[얄코] Section 1-4. SELECT 기초 - 원하는 정보 찾기 (시간/날짜 관련 및 기타 함수들) (0) | 2023.04.17 |
[얄코] Section 1-3. SELECT 기초 - 원하는 정보 찾기 (숫자와 문자열을 다루는 함수들) (0) | 2023.04.17 |