• 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.5 row(행) 서브 쿼리

여기까지의 설명은 스칼라 또는 컬럼 서브 쿼리, 즉 단일 값 또는 값의 컬럼을 돌려 서브 쿼리에 대해 었습니다. 행 서브 쿼리는 단일 행을 반환하고이를 위해 여러 컬럼 값을 반환 할 수있는 서브 쿼리 변형입니다. 행 서브 쿼리의 비교를위한 정당한 연산자는 다음과 같습니다.

 => <> = <= <>! = <=>

다음 두 가지 예를 보여줍니다.

 SELECT * FROM t1
   WHERE (col1, col2) = (SELECT col3, col4 FROM t2 WHERE id = 10);
 SELECT * FROM t1
   WHERE ROW (col1, col2) = (SELECT col3, col4 FROM t2 WHERE id = 10);

두 쿼리에서 테이블 t2 에 id = 10 를 가진 단일 행이 포함되어있는 경우이 서브 쿼리는 단일 행을 반환합니다. 이 행에 t1 의 하나의 행 col1 과 col2 값에 동일한 col3 및 col4 값이 포함되어있는 경우 WHERE 식은 TRUE 이며, 각 쿼리는 이러한 t1 행을 반환합니다. t2 행의 col3 및 col4 값이 어느 t1 행 col1 과 col2 값도 동일하지 않은 경우,이 식은 FALSE 이며,이 쿼리는 빈 결과 집합을 반환합니다. 서브 쿼리에 의해 행이 생성되지 않은 경우,이 식은 불명 (즉, NULL )입니다. 서브 쿼리에 의해 여러 행이 생성되는 경우 행 서브 쿼리가 최대 1 행만 반환 할 수 없기 때문에 오류가 발생합니다.

식 (1,2) 및 ROW(1,2) 은 행 생성자라고도합니다. 이 둘은 동일합니다. 행 생성자와 하위 쿼리에서 반환되는 행에는 같은 수의 값이 포함되어 있어야합니다.

행 생성자는 두 개 이상의 열을 반환 서브 쿼리와의 비교에 사용됩니다. 서브 쿼리가 단일 컬럼을 반환하면 이것은 행이 아닌 스칼라 값으로 간주되므로 적어도 2 개의 컬럼을 반환하지 않는 서브 쿼리에서 행 생성자를 사용할 수 없습니다. 따라서 다음의 쿼리 구문 오류로 실패합니다.

 SELECT * FROM t1 WHERE ROW (1) = (SELECT column1 FROM t2)

행 생성자는 다른 컨텍스트에서도 합법적입니다. 예를 들어, 다음 두 문장은 의미 적으로 동등합니다 (또한 최적화 프로그램 같은 방식으로 처리됩니다).

 SELECT * FROM t1 WHERE (column1, column2) = (1,1);
 SELECT * FROM t1 WHERE column1 = 1 AND column2 = 1;

다음 쿼리는 "테이블 t2 에 존재하는 테이블 t1 의 모든 행을 검색한다 '는 요구에 응답합니다.

 SELECT column1, column2, column3
   FROM t1
   WHERE (column1, column2, column3) IN
          (SELECT column1, column2, column3 FROM t2);


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