블로그 이미지
잡초 개발자의 좌충우돌 이야기 yysvip

카테고리

분류 전체보기 (211)
Java Programing (24)
Web Programing (20)
Database (36)
Tool (46)
까칠한 IT (27)
까칠한 정보 (42)
까칠한 Strory (16)
까칠한 Project (0)
Total906,222
Today3,705
Yesterday7,350

달력

« » 2018.10
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

공지사항

EXISTS 와 IN 차이와 활용

  까칠한 남자 Strory       yysvip.tistory.com       잡초 개발자 까찰한 쑤의 좌충우돌 개발 이야기

 

 

SQL : EXISTS Condition

 

  • EXISTS 조건은 subquery 에 해당하는 row가 적어도 한 개 이상 존재할 경우가 충족되는 경우 SELECT가 실행된다.
  • EXISTS 조건은 유효한 SQL 문장인 select, inset, update, delete 에서 사용 가능 하다.
  • 형식은 아래와 같이..

 

SELECT COLUMNS
FROM TABLES
WHERE EXISTS ( subquery );

 

Example 일반적인 사용 예제

SELECT *
  FROM suppliers
 WHERE EXISTS (SELECT *
                 FROM orders
                WHERE suppliers.supplier_id = orders.supplier_id);

서브쿼리 조건에 만족하는 모든 레코드를 반환 한다.

 

 

Example 2 (NOT EXISTS)
SELECT *
  FROM suppliers
 WHERE NOT EXISTS (SELECT *
                     FROM orders
                    WHERE suppliers.supplier_id = orders.supplier_id);

suppliers.supplier_id = orders.supplier_id 일치 하지 않는 suppliers의 레코드를 반환 한다.

 

 

Exists vs IN

 

  • 차이점 :

    • EXISTS : 단지 해당 row가 존재하는지만 확인하고, 더 이상 수행되지 않는다.
    • IN : 실제 존재하는 데이터들의 모든 값까지 확인한다.

 

  • 따라서 일반적인 경우에 EXISTS가 더 좋은 성능 나타내므로, 사용을 권장 한다.

  • 주의
    • NOT IN을 사용하면 조건에 맞는 데이터가 있다고 하더라도 NULL 이 존재하면 “no rows selected”라고 나오게 된다.
    • 따라서 NVL를 이용한 NULL 처리가 꼭 필요하다.

 

SELECT product_type_id, name
  FROM product_types
 WHERE product_type_id NOT IN
       (SELECT NVL(product_type_id, 0) FROM product);

Posted by yysvip
TAG , ,

최근에 달린 댓글

최근에 받은 트랙백

글 보관함