뭉
노재능 록리형 개발자
뭉
전체 방문자
오늘
어제
  • 분류 전체보기 (27)
    • Java (18)
      • Grammer (14)
      • Problem Solving (4)
    • JavaScript (0)
      • Grammer (0)
      • jQuery (0)
    • Spring (0)
    • DB (9)
      • SQL (6)
      • JPA (3)
    • Storage (0)
    • ETC (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
뭉

노재능 록리형 개발자

EXISTS
DB/SQL

EXISTS

2022. 2. 27. 07:13

특정 조건에 해당하는 컬럼들을 검색하고 싶을 때 우리는 WHERE절을 사용합니다.

그렇다면 검색한 결과를 검색 조건에 반영하고 싶을 때는 어떻게 할까요? 바로 EXISTS를 사용하면 됩니다.

 

해당 문법은 WHERE절에만 사용이 가능합니다.

-- EXISTS
SELECT * FROM A
WHERE EXISTS ( 
	SELECT 1 FROM B WHERE {A.컬럼ID} = {B.컬럼ID} 
)

-- NOT EXISTS
SELECT * FROM A
WHERE NOT EXISTS ( 
	SELECT 1 FROM B WHERE {A.컬럼ID} = {B.컬럼ID} 
)

 

서브쿼리 때문에 복잡해보이지만 실상은 그렇지 않습니다.

서브쿼리의 결과는 무엇이 나오던지 상관이 없으므로 관습적으로 1을 사용합니다.

그리고 조건절에는 서로의 식별자를 맞추어 놓습니다.

EXISTS라면 검색한 값만 조회하고, NOT EXISTS라면 검색한 값을 제외하고 조회한다.

 

실사용 예제를 봅시다.

-- EXISTS
SELECT * FROM ITEM A
WHRER EXISTS (
    SELECT 1 FROM ORDERS_ITEM B 
    WHERE A.ORDER_ID = B.ORDER_ITEM_ID
)  -- 주문상품에 있는 상품들만 조회

-- EXISTS
SELECT * FROM ITEM A
WHRER NOT EXISTS (
    SELECT 1 FROM ORDERS_ITEM B 
    WHERE A.ORDER_ID = B.ORDER_ITEM_ID
)  -- 주문상품에 없는 상품들만 조회

특히 IN 문법도 위와 같이 서브쿼리를 사용할 수 있고 검색결과도 같습니다.

하지만 성능상 EXISTS / NOT EXISTS 가 유리하기 때문에 IN절은 서브쿼리가 아닌 여러값들을 검색할 때만 사용하길 권장드립니다.

'DB > SQL' 카테고리의 다른 글

CTE  (0) 2022.03.12
PIVOT~FOR  (0) 2022.03.01
STRING_AGG와 STUFF~FOR XML PATH  (0) 2022.02.27
CASE WHEN과 IIF  (0) 2022.02.27
ISNULL  (0) 2022.02.27
    'DB/SQL' 카테고리의 다른 글
    • PIVOT~FOR
    • STRING_AGG와 STUFF~FOR XML PATH
    • CASE WHEN과 IIF
    • ISNULL
    뭉
    뭉
    노재능 록리형 개발자

    티스토리툴바