1 분 소요

이 포스팅 내용은 얄팍한 코딩사전 강좌를 수강하며 학습한 내용과 추가로 공부한 내용을 정리한 포스팅입니다.


서브쿼리

1. 비상관 서브쿼리

: 원래 쿼리와 괄호 안 쿼리가 독자적으로 실행됨.

SELECT * FROM Products
WHERE Price < (
  SELECT AVG(Price) FROM Products
);
  • ~ALL , ~ANY : 서브쿼리의 모든 / 하나 이상의 결과에 대해 ~ 하다.

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

    -> Products 테이블에서 모든 컬럼을 가져오는데, Price가 괄호() 의 모든 값 보다 큰 경우

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

    -> Categories 테이블에서 CategoryID, CategoryName, Description 컬럼을 가져오는데, CategoryId가 괄호() 의 값 중 하나라도 해당되는게 있는 경우

2. 상관 서브쿼리

:

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

-> ProductID, ProductName, 그리고 괄호() 안의 내용을 CategoryName로 하여 Products 테이블에서 가져옴

-> 괄호()는, Categories 테이블에서 Categories 테이블의.CategoryID와 Products 테이블의 CategoryID가 같은 것의 CategoryName 을 가져옴

  • Categories 테이블

    image-20221213005327617

  • Products 테이블

    image-20221213005316274

  • 서브쿼리 결과

    image-20221213005302507

    -> 정규화를 통해서 나누어진 내용에 대해서 가져오는구나!

    -> 서브쿼리도 가능하지만 JOIN 테이블로도 가능!

  • EXISTS / NOT EXISTS : 조건에 해당하는 / 해당하지 않는 데이터 가져오기

    SELECT
      CategoryID, CategoryName
    FROM Categories C
    WHERE EXISTS (
      SELECT * FROM Products P
      WHERE P.CategoryID = C.CategoryID
      AND P.Price > 80
    );
    

마지막 수정일시: 2022-12-13 01:18

카테고리:

업데이트:

댓글남기기