Loading...
MySQL 9.5 Reference Manual 9.5의 15.2.15 Subqueries의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
15.2.15.1 The Subquery as Scalar Operand
15.2.15.2 Comparisons Using Subqueries
15.2.15.3 Subqueries with ANY, IN, or SOME
15.2.15.4 Subqueries with ALL
15.2.15.5 Row Subqueries
15.2.15.6 Subqueries with EXISTS or NOT EXISTS
15.2.15.7 Correlated Subqueries
15.2.15.8 Derived Tables
15.2.15.9 Lateral Derived Tables
15.2.15.10 Subquery Errors
15.2.15.11 Optimizing Subqueries
15.2.15.12 Restrictions on Subqueries
subquery는 다른 statement 안에 포함된 SELECT statement입니다.
SQL standard가 요구하는 모든 subquery 형식과 연산은, MySQL 고유의 몇 가지 기능과 함께 지원됩니다.
다음은 subquery의 예입니다:
1SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2);
이 예에서 SELECT * FROM t1 ...은 outer query (또는 outer statement)이고, (SELECT column1 FROM t2)는 _subquery_입니다. 이 subquery가 outer query 안에 nested 되어 있다고 말하며, 실제로 subquery를 다른 subquery 안에 상당한 깊이까지 중첩하는 것이 가능합니다. subquery는 항상 괄호 안에 나타나야 합니다.
subquery의 주요 장점은 다음과 같습니다:
statement의 각 부분을 분리할 수 있도록 structured 된 query를 허용합니다.
그렇지 않으면 복잡한 조인과 유니온이 필요한 연산을 수행하기 위한 대체 방법을 제공합니다.
많은 사람들이 복잡한 조인이나 유니온보다 subquery가 더 읽기 쉽다고 느낍니다. 실제로 subquery의 혁신이 초기의 SQL을 “Structured Query Language”라고 부르게 된 원래의 아이디어를 제공했습니다.
다음은 SQL standard에 의해 정의되고 MySQL에서 지원되는 subquery syntax의 주요 포인트를 보여 주는 example statement입니다:
1DELETE FROM t1 2WHERE s11 > ANY 3 (SELECT COUNT(*) /* no hint */ FROM t2 4 WHERE NOT EXISTS 5 (SELECT * FROM t3 6 WHERE ROW(5*t2.s1,77)= 7 (SELECT 50,11*s1 FROM t4 UNION SELECT 50,77 FROM 8 (SELECT * FROM t5) AS t5)));
subquery는 스칼라(단일 값), 단일 row, 단일 column, 혹은 table(하나 이상의 row와 하나 이상의 column)을 반환할 수 있습니다. 이러한 것들을 스칼라, column, row, table subquery라고 합니다. 특정 종류의 결과를 반환하는 subquery는 다음 절에서 설명하는 것처럼 보통 특정 context에서만 사용할 수 있습니다.
subquery를 사용할 수 있는 statement 유형에는 거의 제한이 없습니다. subquery는 일반적인 SELECT에 포함될 수 있는 많은 키워드나 절을 포함할 수 있습니다: DISTINCT, GROUP BY, ORDER BY, LIMIT, 조인, 인덱스 힌트, UNION 구성, 주석, 함수 등.
TABLE 및 VALUES statement는 subquery에서 사용할 수 있습니다. VALUES를 사용하는 subquery는 일반적으로 집합 표기법을 사용하거나 SELECT 또는 TABLE syntax로 더 간결하게 다시 작성할 수 있는 subquery의 더 장황한 버전입니다. table ts가 다음 statement를 사용하여 생성된다고 가정하면 CREATE TABLE ts VALUES ROW(2), ROW(4), ROW(6), 여기 나와 있는 statement들은 모두 동등합니다:
1SELECT * FROM tt 2 WHERE b > ANY (VALUES ROW(2), ROW(4), ROW(6)); 3 4SELECT * FROM tt 5 WHERE b > ANY (SELECT * FROM ts); 6 7SELECT * FROM tt 8 WHERE b > ANY (TABLE ts);
TABLE subquery의 example은 뒤따르는 section들에 나와 있습니다.
subquery의 outer statement는 다음 중 하나일 수 있습니다: SELECT, INSERT, UPDATE, DELETE, SET, 또는 DO입니다.
optimizer가 subquery를 어떻게 처리하는지에 대한 정보는 Section 10.2.2, “Optimizing Subqueries, Derived Tables, View References, and Common Table Expressions”를 참조하십시오. subquery syntax의 특정 형태에 대한 성능 이슈를 포함하여 subquery 사용에 대한 제한 사항에 대한 논의는 Section 15.2.15.12, “Restrictions on Subqueries”를 참조하십시오.
15.2.14 Set Operations with UNION, INTERSECT, and EXCEPT
15.2.16 TABLE Statement