상세 컨텐츠

본문 제목

오라클 EXISTS, NOT EXISTS 함수

프로그래밍/Oracle

by ........? 2012. 9. 7. 13:57

본문

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);
  • 서브쿼리 조건에 만족하는 모든 레코드를 반환 한다.
  •  즉, EXISTS A : A라는 데이트를 반환

 

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의 레코드를 반환 한다.
  •  즉, NOT EXISTS A : A라는 데이트를 빼고 반환


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


출처 : http://www.cyworld.com/shinmk0617/6628209


'프로그래밍 > Oracle' 카테고리의 다른 글

오라클 TRUNCATE  (0) 2012.09.07
오라클 DDL, DML, DCL, DQl, TCL, TRANSACTION  (0) 2012.09.07
테이블에 칼럼 추가/삭제  (0) 2012.08.08
랜덤한 숫자/문자 생성 (DBMS_RANDOM 활용)  (0) 2012.06.19
오라클 ROW_NUMBER()  (0) 2012.06.07

관련글 더보기

댓글 영역