[SQL문] 서브쿼리 (SQL문 내부에 또 다른 SQL문)

2024. 9. 15. 15:18·SQL [DB]
목차
  1. 서브쿼리는 어떻게 작성할까?
  2. 서브쿼리
  3. SELECT절에 서브쿼리 작성하기
  4. FROM절에 서브쿼리 작성하기
  5. WHERE절에 서브쿼리 작성하기
  6. HAVING절에 서브쿼리 작성하기

 

 

 


 

서브쿼리는 어떻게 작성할까?

 

 


 

 

 

 

서브쿼리

 

--

서브쿼리는

SQL문에서 내부에 또 다른 SQL문을 작성하는 쿼리다.

 

일반적으로 서브쿼리를 작성하는 절

  • SELECT절
  • FROM절
  • WHERE절
  • HAVING절
SELECT문뿐만 아니라 INSERT, UPDATE, DELETE문에서도 작성 가능하다.

 

 

서브쿼리와 같이 사용할 수 있는 연산자

  • IN  :  서브쿼리에서 반환된 값들 중에 하나라도 일치하는 값이 있는지 확인
  • EXISTS   :   서브쿼리의 결과가 존재하는지 여부 확인
주로 WHERE절 or HAVING절에서 사용된다.

 

 

IN 연산자 형식

속성명 IN (서브쿼리)

 

EXISTS 연산자 형식

EXISTS (서브쿼리)

--

 

 

 

 

SELECT절에 서브쿼리 작성하기

 

--

SELECT절에 작성하는 서브쿼리는

일반적으로  특정 속성(컬럼)을 계산하거나 , 특정 값을 반환하는 데 사용될 수 있다.

 

SELECT memberId, ( SELECT COUNT(*)
                   FROM Order
                   WHERE Order.orderId ) AS OrderCount
FROM Members;

--

 

 

 

 

FROM절에 서브쿼리 작성하기

 

--

FROM절에 사용하는 서브쿼리는

일반적으로  해당 SQL문에 임시로 사용할 테이블처럼 사용된다.

(이러한 방식을 "인라인 뷰(Inline)"라고도 부른다.)

 

SELECT AVG(OrderCount)
FROM ( SELECT customerId, COUNT(*) AS OrderCount
       FROM Orders
       GROUP By coustomerId ) AS CustomerOrders;

--

 

 

 

 

WHERE절에 서브쿼리 작성하기

 

--

WHERE절에 사용하는 서브쿼리는

일반적으로  어떠한 조건에 사용할 데이터를 반환하는 데 사용된다.

 

SELECT bookName
FROM Book
WHERE price = ( SELECT MAX(price)
                FROM Book; );

 

 

IN 연산자를 사용하는 경우

SELECT Name
FROM Customers
WHERE CustomerID IN ( SELECT CustomerID
                      FROM Orders
                      WHERE Amount > 100 );

 

 

EXISTS 연산자를 사용하는 경우

SELECT Name
FROM Customers C
WHERE EXISTS ( SELECT 1
               FROM Orders O
               WHERE O.CustomerID = C.CustomerID
               AND O.Amount > 100 );
서브쿼리에 해당하는 행이 Customers 테이블에 하나라도 있으면
해당하는 행의 name속성의 값을 반환
(만약 해당하는 행이 하나도 없다면 빈테이블을 반환)
서브쿼리에서 SELECT 1에 1은 아무의미가 없다.
사실 EXISTS 연산자에서 사용하는 서브쿼리는 반환 값이 무엇인지 전혀 중요하지 않다.
해당 조건의 행 존재만 확인하기 때문에
SELECT에 다른 속성을 작성하든 *를 작성하든 상관이 없기 때문에
불필요한 데이터를 선택하지 않고, 최소한의 값인 1을 작성하는 것이 간단하고 효율적이다.

--

 

 

 

 

HAVING절에 서브쿼리 작성하기

 

--

HAVING절에 사용하는 서브쿼리는

일반적으로 집계 함수에 조건을 걸어 필터링할 때 사용된다.

 

SELECT CustomerID, COUNT(*) AS OrderCount
FROM Orders
GROUP BY CustomerID
HAVING COUNT(*) > ( SELECT AVG(OrderCount)
                    FROM ( SELECT CustomerID, COUNT(*) AS OrderCount
                           FROM Orders
                           GROUP BY CustomerID ) AS CustomerOrders );

--

 

 

 

 

 

저작자표시 비영리 변경금지 (새창열림)

'SQL [DB]' 카테고리의 다른 글

[SQL문] 트랜잭션 제어어 (TCL)  (1) 2024.09.14
[SQL문] 데이터 제어어 (DCL)  (0) 2024.09.13
[SQL문] 데이터 조작어 (DML)  (0) 2024.09.12
[SQL문] 데이터 정의어 (DDL)  (0) 2024.09.12
관계 데이터 모델의 개념 (릴레이션, 무결성, 관계대수)  (1) 2024.09.10
  1. 서브쿼리는 어떻게 작성할까?
  2. 서브쿼리
  3. SELECT절에 서브쿼리 작성하기
  4. FROM절에 서브쿼리 작성하기
  5. WHERE절에 서브쿼리 작성하기
  6. HAVING절에 서브쿼리 작성하기
'SQL [DB]' 카테고리의 다른 글
  • [SQL문] 트랜잭션 제어어 (TCL)
  • [SQL문] 데이터 제어어 (DCL)
  • [SQL문] 데이터 조작어 (DML)
  • [SQL문] 데이터 정의어 (DDL)
아-니지
아-니지
아-니지
성장 기록.zip
아-니지
  • 분류 전체보기 (266)
    • Language (76)
      • Java (39)
      • Kotlin (0)
      • HTML (10)
      • CSS (17)
      • Java Script (10)
    • JPA (11)
    • Spring Boot (27)
    • QueryDSL (2)
    • SQL [DB] (8)
    • Docker (29)
    • AWS (19)
    • Git & GitHub (17)
    • DevOps (1)
    • Terminology (14)
    • CS (50)
      • 컴퓨터 구조 (12)
      • 운영체제 (11)
      • 자료구조 (11)
      • 알고리즘 (0)
      • 네트워크 (16)
    • Record (7)
      • 알고리즘 풀이 (4)
      • 자바 메서드 (3)
    • Self Q&A (5)
hELLO· Designed By정상우.v4.5.3
아-니지
[SQL문] 서브쿼리 (SQL문 내부에 또 다른 SQL문)

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.