본문 바로가기
메모/SQL

SQL 3

by 구너드 2023. 7. 5.

비상관 서브쿼리 - 서브쿼리와 본 쿼리의 관계가 없는 상태

 

Select CategoryID, CategoryName, Description, (SELECT ProductName FROM Products WHERE ProductID = 1)
FROM Categories;

카테고리 아이디, 카테고리 이름, 본문, (프로덕트 데이블에서 프로덕트 아이디가 1인 프로덕트 중에서)을 가져오기 
카테고리 테이블에서


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');

카테고리 아이디, 카테고리 이름, 본문을  가져오기
카테고리 테이블에서
카테고리 아이디가 ( 프로덕트 테이블에서 프로덕트의 이름이 Chais인 카테고리 아이디)와 같을 때만


SELECT CategoryID, CategoryName, Description
FROM Categories
WHERE CategoryID IN (SELECT CategoryID FROM Products WHERE Price > 50);

카테고리 아이디, 카테고리 이름, 본문을 가져오기
카테고리 테이블에서
카테고리 아이디가 ( 프로덕트 테이블에서 가격이 50보다 큰 카테고리 아이디들) 중에 있는 것만


SELECT * FROM Products
WHERE Price > ALL (SELECT Price FROM Products WHERE CategoryID = 2);

모두 가져오기
프로덕트 테이블에서
가격이 (프로덕트 테이블에서 카테고리 아이디가 2인 가격)의 어떤 것보다(Max) 높은 것들만


SELECT CategoryID, CategoryName, Description
FROM Categories
WHERE CategoryID = ANY (SELECT CategoryID FROM Products WHERE Price > 50);

카테고리 아이디, 카테고리 이름, 본문을 가져오기
카테고리 테이블에서
카테고리 아이디가 (프로덕트 테이블에서 가격이 50이상인 카테고리 아이디) 중에 있는 걸로


상관쿼리 - 서브쿼리와 본쿼리가 맞물리는 관계가 있는 상태

 

SELECT ProductID, ProductName,
(SELECT CategoryName FROM Categories C WHERE C.CategoryID = P.CategoryID) AS CategoryName
FROM Products P;

프로덕트 아이디와 프로덕트 이름, 카테고리 이름(카테고리 테이블에서 카테고리 테이블의 카테고리 아이디와 프로덕트 테이블의 카테고리 아이디가 같은 카테고리 이름만)을 가져오기
프로덕트 테이블에서


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;

카테고리 아이디와 카테고리 이름,
최대금액(프로덕트 테이블에서 프로덕트 테이블의 카테고리 아이디와 카테고리 테이블의 카테고리 아이디가 같은 것들 중 가장 높은 가격), 
평균금액(프로덕트 테이블에서 프로덕트 테이블의 카테고리 아이디와 카테고리 테이블의 카테고리 아이디가 같은 것들의 평균 가격)을 가져오기
카테고리 테이블에서

 

'메모 > SQL' 카테고리의 다른 글

SQL 2  (0) 2023.07.03
SQL 1  (0) 2023.06.04