Loading...
MySQL 9.5 Reference Manual 9.5의 15.2.11 Parenthesized Query Expressions의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
1parenthesized_query_expression: 2 ( query_expression [order_by_clause] [limit_clause] ) 3 [order_by_clause] 4 [limit_clause] 5 [into_clause] 6 7query_expression: 8 query_block [set_op query_block [set_op query_block ...]] 9 [order_by_clause] 10 [limit_clause] 11 [into_clause] 12 13query_block: 14 SELECT ... | TABLE | VALUES 15 16order_by_clause: 17 ORDER BY as for SELECT 18 19limit_clause: 20 LIMIT as for SELECT 21 22into_clause: 23 INTO as for SELECT 24 25set_op: 26 UNION | INTERSECT | EXCEPT
MySQL 9.5는 위의 구문에 따라 괄호로 감싼 쿼리 식(parenthesized query expression)을 지원합니다. 가장 단순한 형태에서, 괄호로 감싼 쿼리 식은 하나의 SELECT 또는 결과 세트를 반환하는 다른 하나의 문장만을 포함하고 그 뒤에 오는 선택적 절은 없습니다:
1(SELECT 1); 2(SELECT * FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'mysql'); 3 4TABLE t; 5 6VALUES ROW(2, 3, 4), ROW(1, -2, 3);
괄호로 감싼 쿼리 식에는 또한 하나 이상의 집합 연산(예: UNION)으로 연결된 쿼리를 포함할 수 있으며, 선택적 절 중 하나 이상으로 끝날 수 있습니다:
1mysql> (SELECT 1 AS result UNION SELECT 2); 2+--------+ 3| result | 4+--------+ 5| 1 | 6| 2 | 7+--------+ 8mysql> (SELECT 1 AS result UNION SELECT 2) LIMIT 1; 9+--------+ 10| result | 11+--------+ 12| 1 | 13+--------+ 14mysql> (SELECT 1 AS result UNION SELECT 2) LIMIT 1 OFFSET 1; 15+--------+ 16| result | 17+--------+ 18| 2 | 19+--------+ 20mysql> (SELECT 1 AS result UNION SELECT 2) 21 ORDER BY result DESC LIMIT 1; 22+--------+ 23| result | 24+--------+ 25| 2 | 26+--------+ 27mysql> (SELECT 1 AS result UNION SELECT 2) 28 ORDER BY result DESC LIMIT 1 OFFSET 1; 29+--------+ 30| result | 31+--------+ 32| 1 | 33+--------+ 34mysql> (SELECT 1 AS result UNION SELECT 3 UNION SELECT 2) 35 ORDER BY result LIMIT 1 OFFSET 1 INTO @var; 36mysql> SELECT @var; 37+------+ 38| @var | 39+------+ 40| 2 | 41+------+
INTERSECT는 UNION 및 EXCEPT보다 먼저 동작하므로, 다음 두 문장은 동등합니다:
1SELECT a FROM t1 EXCEPT SELECT b FROM t2 INTERSECT SELECT c FROM t3; 2 3SELECT a FROM t1 EXCEPT (SELECT b FROM t2 INTERSECT SELECT c FROM t3);
괄호로 감싼 쿼리 식은 쿼리 식으로도 사용되므로, 보통 쿼리 블록으로 구성되는 쿼리 식은 괄호로 감싼 쿼리 식으로도 구성될 수 있습니다:
1(TABLE t1 ORDER BY a) UNION (TABLE t2 ORDER BY b) ORDER BY z;
쿼리 블록은 뒤따르는 ORDER BY 및 LIMIT 절을 가질 수 있으며, 이는 바깥쪽 집합 연산, ORDER BY, LIMIT보다 먼저 적용됩니다.
괄호로 감싸지 않으면, 뒤에 ORDER BY 또는 LIMIT가 따라오는 쿼리 블록을 사용할 수 없지만, 다양한 방식으로 강제하기 위해 괄호를 사용할 수 있습니다:
LIMIT를 적용하려면:1(SELECT 1 LIMIT 1) UNION (VALUES ROW(2) LIMIT 1); 2 3(VALUES ROW(1), ROW(2) LIMIT 2) EXCEPT (SELECT 2 LIMIT 1);
LIMIT를 적용하려면:1(SELECT 1 LIMIT 1) UNION (SELECT 2 LIMIT 1) LIMIT 1;
LIMIT를 적용하려면(괄호 없이):1VALUES ROW(1), ROW(2) INTERSECT VALUES ROW(2), ROW(1) LIMIT 1;
LIMIT를 적용하려면:1(SELECT 1 LIMIT 1) UNION SELECT 2 LIMIT 1;
이 절에서 설명하는 구문에는 몇 가지 제약이 적용됩니다:
괄호 안에 또 다른 INTO 절이 있는 경우, 쿼리 식에 대한 뒤따르는 INTO 절은 허용되지 않습니다.
괄호로 감싼 쿼리 식 내부에 있으면서 바깥쪽 쿼리에도 적용되는 ORDER BY 또는 LIMIT는 SQL 표준에 따라 처리됩니다.
중첩된 괄호로 감싼 쿼리 식도 허용됩니다. 지원되는 최대 중첩 수준은 63이며, 이는 파서에 의해 모든 단순화 또는 병합이 수행된 이후의 값입니다.
이러한 문장의 예는 다음과 같습니다:
1mysql> (SELECT 'a' UNION SELECT 'b' LIMIT 2) LIMIT 3; 2+---+ 3| a | 4+---+ 5| a | 6| b | 7+---+ 82 rows in set (0.00 sec)
괄호로 감싼 식 본문을 축소할 때, MySQL은 SQL 표준 시맨틱스를 따르므로, 더 높은 바깥쪽 limit가 더 낮은 안쪽 limit를 무시할 수 없습니다. 예를 들어, (SELECT ... LIMIT 5) LIMIT 10은 최대 다섯 개의 행만 반환할 수 있습니다.
15.2.10 LOAD XML Statement
15.2.12 REPLACE Statement