• 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.7 상관 서브 쿼리

상관 서브 쿼리는 외부 쿼리에 나타나는 테이블에 대한 참조를 포함 서브 쿼리입니다. 예 :

 SELECT * FROM t1
   WHERE column1 = ANY (SELECT column1 FROM t2
                        WHERE t2.column2 = t1.column2);

이 서브 쿼리는 서브 쿼리의 FROM 절에서 테이블 t1 이 지정되어 있지 않은 경우에도 t1 의 컬럼에 대한 참조가 포함됩니다. 따라서 MySQL이 서브 쿼리의 외부를 찾아 외부 쿼리에서 t1 을 찾습니다.

테이블 t1 에 column1 = 5 이고 column2 = 6 인 행이 포함되어있는 반면, 테이블 t2 에 column1 = 5 이고 column2 = 7 인 행이 포함되어 있다고합니다. 간단한 식 ... WHERE column1 = ANY (SELECT column1 FROM t2) 는 TRUE 가됩니다 만,이 예에서는 하위 쿼리의 WHERE 절 ( (5,6) 가 (5,7) 에 동일하지 않기 때문에) FALSE 입니다. 따라서 전체적으로 식은 FALSE 입니다.

범위 규칙 : MySQL은 내부에서 외부로 평가합니다. 예 :

 SELECT column1 FROM t1 AS x
   WHERE x.column1 = (SELECT column1 FROM t2 AS x
     WHERE x.column1 = (SELECT column1 FROM t3
       WHERE x.column2 = t3.column1));

이 문은 SELECT column1 FROM t2 AS x ... 이 t2 의 이름을 변경하기 위해 x.column2 테이블 t2 의 컬럼이어야합니다. SELECT column1 FROM t1 ... 이 또한 외부에있는 외부 쿼리이기 때문에 이것은 테이블 t1 의 컬럼이 없습니다.

HAVING 또는 ORDER BY 절에 서브 쿼리의 경우 MySQL은 외부 선택 목록에서 열 이름을 찾습니다.

어떤 경우는 상관 서브 쿼리가 최적화됩니다. 예 :

 val IN (SELECT key_val FROM tbl_name WHERE correlated_condition )

그렇지 않으면 이러한 비효율적이며 느려질 수 있습니다. 쿼리를 조인으로 다시 작성하면 성능이 향상 될 수 있습니다.

상관 서브 쿼리 내의 집계 함수는 그 함수에 외부 참조 이외에는 아무것도 들어 있지 않고, 한편 그 함수가 다른 함수 나 수식에 포함되어 있지 않은 경우, 외부 참조를 포함 할 수 있습니다.

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