• MySQL매뉴얼
    • MySQL 5.6 매뉴얼
    • MySQL 5.1 매뉴얼
    • MySQL 5.0 매뉴얼
    • MySQL HA 매뉴얼
  • 기술문서
    • Xtrabackup 구성
    • 메모리 사용량 모니터링
  • 라이선스
  • 온라인문의
  • 회사소개
  • → 목 록 (MySQL5.6 한글메뉴얼) [close]
  • 1. MySQL 5.6 새로운 기능
  • 2. MySQL 설치 및 업그레이드
  • 3. MySQL Tutorial
  • 4. MySQL 프로그램
  • 5. MySQL 서버관리
  • 6. 보안
  • 7. 백업 및 복구
  • 8. 최적화
  • 9. Language Structure(언어구조)
  • 10. Character Sets(Globalization)
  • 11. 데이터형(Data Types)
  • 12. 함수와 연산자
  • 13. SQL 문법
  • 1. 데이터 정의 문
    2. 데이터 조작 문
    1. CALL 구문
    2. DELETE 구문
    3. DO 구문
    4. HANDLER 구문
    5. INSERT 구문
    6. LOAD DATA INFILE 구문
    7. LOAD XML 구문
    8. REPLACE 구문
    9. SELECT 구문
    10. 서브 쿼리 구문
    1. 스칼라 피연산자로 서브 쿼리
    2. 서브 쿼리를 사용한 비교
    3. ANY, IN 또는 SOME을 사용한 서브 쿼리
    4. ALL을 사용한 서브 쿼리
    5. 13.2.10.5 row(행) 서브 쿼리
    6. EXISTS 또는 NOT EXISTS를 사용한 서브 쿼리
    7. 상관 서브 쿼리
    8. FROM절의 서브 쿼리
    9. 서브 쿼리 오류
    10. 서브 쿼리의 최적화
    11. 서브 쿼리의 결합으로 재 작성
    11. UPDATE 구문
    3. MySQL 트랜잭션과 잠금 문
    4. 복제 문
    5. Prepared Statements위한 SQL 구문
    6. MySQL 복합문 구문
    7. 데이터베이스 관리 문
    8. MySQL 유틸리티 문
  • 14. InnoDB 스토리지 엔진
  • 15. 기타 스토리지 엔진
  • 16. 고가용성 및 확장성
  • 17. 리플리케이션
  • 18. MySQL Cluster
  • 19. 파티셔닝
  • 20. Stored Programs and Views
  • 21. INFORMATION_SCHEMA
  • 22. PERFORMANCE SCHEMA
  • 23. 컨넥터 및 API
  • 24. MySQL 확장
  • 25. MySQL Enterprise Edition
  • 26. MySQL Workbench
  • 27. 제약 및 제한
  • 28. MySQL 5.7 새로운 기능

13.2.10.6 EXISTS 또는 NOT EXISTS를 사용한 서브 쿼리

서브 쿼리가 적어도 1 행을 반환하는 경우, EXISTS subquery 는 TRUE 이며, NOT EXISTS subquery 는 FALSE 입니다. 예 :

 SELECT column1 FROM t1 WHERE EXISTS (SELECT * FROM t2);

기존보다 EXISTS 서브 쿼리는 SELECT * 으로 시작하지만, SELECT 5 이나 SELECT column1 , 혹은 다른 무엇으로 시작도 괜찮습니다. MySQL은 이러한 하위 쿼리의 SELECT 목록을 무시하기 때문에 아무런 차이 태어난 없습니다.

앞의 예에서는 t2 에 어떠한 행이 포함되어있는 경우 ( NULL 값 이외는 아무것도 포함하지 않는 행을 위해) EXISTS 조건은 TRUE 입니다. [NOT] EXISTS 서브 쿼리는 거의 항상 상호 관계가 포함되므로 이것은 실제로는 것 같지도 예입니다. 다음은보다 현실적인 몇 가지 예를 보여줍니다.

  • 하나 이상의 도시에 존재하는 어떤 종류의 가게입니까?

     SELECT DISTINCT store_type FROM stores
       WHERE EXISTS (SELECT * FROM cities_stores
                     WHERE cities_stores.store_type = stores.store_type);
    
  • 어느 도시에도 존재하지 않는 것은 어떤 종류의 가게입니까?

     SELECT DISTINCT store_type FROM stores
       WHERE NOT EXISTS (SELECT * FROM cities_stores
                         WHERE cities_stores.store_type = stores.store_type);
    
  • 모든 도시에 존재하는 어떤 종류의 가게입니까?

     SELECT DISTINCT store_type FROM stores s1
       WHERE NOT EXISTS (
         SELECT * FROM cities WHERE NOT EXISTS (
           SELECT * FROM cities_stores
            WHERE cities_stores.city = cities.city
            AND cities_stores.store_type = stores.store_type));
    

마지막 예는 이중으로 중첩 된 NOT EXISTS 쿼리입니다. 즉, NOT EXISTS 절에 NOT EXISTS 절이 존재합니다. 이것은 공식적으로 " Stores 없는 가게가 포함되어있는 도시는 존재합니까 "?라는 질문에 대답합니다. 그러나 중첩 된 NOT EXISTS 가 " x 는 모든 y 에 대해서 TRUE 입니까? "라는 질문에 대답하는 것이 더 쉽습니다.

서울시 강남구 영동대로 602 6층
TEL: 02-6061-0006  /  E: csr@mysqlkorea.com
주식회사 이노클러스터  등록번호 : 727-86-02261
Copyright © innocluster Co. ltd. all rights reserved