[ mysql ] 쿼리 안에 서브쿼리

JooKit 주킷 2021. 9. 7. 00:24
목차 접기
728x90
반응형

mysql 연습 데이터로 쿼리 작성해보는 사이트로 이동

위 링크로 이동해서 아래 쿼리를 입력해보자.

 

 

비상관 서브쿼리

 

 

 

연습 1

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

 

 

 

연습 2

SELECT * 
FROM Products
WHERE Price < (
    SELECT AVG(Price) FROM Products    
);

 

 

 

연습 3

SELECT 
    CategoryID,
    CategoryName,
    Description
FROM Categories
WHERE CategoryID = (
    SELECT CategoryID FROM Products WHERE ProductName = 'Chais'
);

 

 

 

연습 4

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

 

 

 

 

 

 

  • ~ ALL : 서브쿼리의 모든 결과에 대해 ~ 하다.
  • ~ ANY : 서브쿼리의 하나 이상의 결과에 대해 ~ 하다.

 

 

연습 5

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

의미 : Products 테이블의 CategoryID 가 2인 Price들 모두 보다
큰 Price를 가진 데이터들을 출력하겠다는 의미이다.
MAX(Price) 보다 큰 의미로 해석해도 된다.

 

 

 

 

연습 6

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

= ANY를 IN으로 바꾸어도 결과 값은 똑같다.

 

 

 

상관 서브쿼리

 

 

연습 1

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

 

 

 

연습 2

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 CustomerInTheCity
FROM Suppliers S;

 

 

 

연습 3

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;

 

 

 

연습 4

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

 

 

 

연습 5

SELECT 
    CategoryID,
    CategoryName,
    (
        SELECT MAX(Price) FROM Products P
        WHERE P.CategoryID = C.CategoryID
    ) AS MaximumPrice
FROM Categories C
WHERE EXISTS (
    SELECT * FROM Products P
    WHERE P.CategoryID = C.CategoryID
    AND P.Price > 80
);
728x90
반응형
LIST