Loading...
MySQL 9.5 Reference Manual 9.5의 15.2.19 VALUES Statement의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
VALUES는 하나 이상의 행 집합을 테이블로 반환하는 DML 문입니다. 즉, 단독 SQL 문으로도 동작하는 테이블 값 생성자(table value constructor)입니다.
1VALUES row_constructor_list [ORDER BY column_designator] [LIMIT number] 2 3row_constructor_list: 4 ROW(value_list)[, ROW(value_list)][, ...] 5 6value_list: 7 value[, value][, ...] 8 9column_designator: 10 column_index
VALUES 문은 VALUES 키워드 뒤에 하나 이상의 행 생성자 목록(row constructor list)이 콤마로 구분되어 오는 형태로 구성됩니다. 행 생성자는 ROW() 행 생성자 절과, 괄호 안에 하나 이상의 스칼라 값을 가지는 값 목록(value list)으로 구성됩니다. 값은 어떤 MySQL 데이터 타입의 리터럴이 될 수도 있고, 스칼라 값으로 평가되는 표현식이 될 수도 있습니다.
ROW()는 비어 있을 수 없습니다 (하지만 제공된 각 스칼라 값은 NULL이 될 수 있습니다). 동일한 VALUES 문 내의 각 ROW()는 값 목록 안에 동일한 개수의 값을 가져야 합니다.
DEFAULT 키워드는 VALUES에서 지원되지 않으며, INSERT 문에서 값을 제공하기 위해 사용되는 경우를 제외하면 구문 오류를 발생시킵니다.
VALUES의 출력은 테이블입니다:
1mysql> VALUES ROW(1,-2,3), ROW(5,7,9), ROW(4,6,8); 2+----------+----------+----------+ 3| column_0 | column_1 | column_2 | 4+----------+----------+----------+ 5| 1 | -2 | 3 | 6| 5 | 7 | 9 | 7| 4 | 6 | 8 | 8+----------+----------+----------+ 93 rows in set (0.00 sec)
VALUES에서 출력된 테이블의 컬럼은 column_0, column_1, column_2 등과 같이 암묵적으로 이름이 지정되며, 항상 0부터 시작합니다. 이 점을 이용하여, 선택적인 ORDER BY 절을 사용해 행을 컬럼 기준으로 정렬할 수 있으며, 이 절이 SELECT 문에서 동작하는 것과 동일한 방식으로 동작합니다. 예시는 다음과 같습니다:
1mysql> VALUES ROW(1,-2,3), ROW(5,7,9), ROW(4,6,8) ORDER BY column_1; 2+----------+----------+----------+ 3| column_0 | column_1 | column_2 | 4+----------+----------+----------+ 5| 1 | -2 | 3 | 6| 4 | 6 | 8 | 7| 5 | 7 | 9 | 8+----------+----------+----------+ 93 rows in set (0.00 sec)
VALUES 문은 또한 출력의 행 개수를 제한하기 위한 LIMIT 절도 지원합니다.
VALUES 문은 컬럼 값의 데이터 타입에 대해 관대합니다; 다음과 같이 동일한 컬럼 내에서 타입을 섞어서 사용할 수 있습니다:
1mysql> VALUES ROW("q", 42, '2019-12-18'), 2 -> ROW(23, "abc", 98.6), 3 -> ROW(27.0002, "Mary Smith", '{"a": 10, "b": 25}'); 4+----------+------------+--------------------+ 5| column_0 | column_1 | column_2 | 6+----------+------------+--------------------+ 7| q | 42 | 2019-12-18 | 8| 23 | abc | 98.6 | 9| 27.0002 | Mary Smith | {"a": 10, "b": 25} | 10+----------+------------+--------------------+ 113 rows in set (0.00 sec)
주의
ROW()가 하나 이상 포함된 VALUES는 테이블 값 생성자로 동작합니다; INSERT 또는 REPLACE 문에서 값을 제공하는 데 사용할 수 있지만, 이 목적을 위해서도 사용되는 VALUES 키워드와 혼동해서는 안 됩니다. 또한 INSERT ... ON DUPLICATE KEY UPDATE에서 컬럼 값을 참조하는 VALUES() 함수와도 혼동해서는 안 됩니다.
또한 ROW()는 행 값 생성자(row value constructor)(Section 15.2.15.5, “Row Subqueries” 참조)인 반면, VALUES ROW()는 테이블 값 생성자라는 점을 유념해야 합니다. 이 둘은 상호 교환하여 사용할 수 없습니다.
VALUES는 다음에 열거된 경우를 포함하여, SELECT를 사용할 수 있는 많은 경우에 사용할 수 있습니다:
UNION과 함께, 다음 예시와 같이 사용할 수 있습니다:1mysql> SELECT 1,2 UNION SELECT 10,15; 2+----+----+ 3| 1 | 2 | 4+----+----+ 5| 1 | 2 | 6| 10 | 15 | 7+----+----+ 82 rows in set (0.00 sec) 9 10mysql> VALUES ROW(1,2) UNION VALUES ROW(10,15); 11+----------+----------+ 12| column_0 | column_1 | 13+----------+----------+ 14| 1 | 2 | 15| 10 | 15 | 16+----------+----------+ 172 rows in set (0.00 sec)
여러 행을 가진 생성된 테이블을 다음과 같이 union할 수 있습니다:
1mysql> VALUES ROW(1,2), ROW(3,4), ROW(5,6) 2 > UNION VALUES ROW(10,15),ROW(20,25); 3+----------+----------+ 4| column_0 | column_1 | 5+----------+----------+ 6| 1 | 2 | 7| 3 | 4 | 8| 5 | 6 | 9| 10 | 15 | 10| 20 | 25 | 11+----------+----------+ 125 rows in set (0.00 sec)
또한 이런 경우에는, (그리고 보통은 그렇게 하는 것이 더 바람직합니다) UNION을 아예 생략하고, 다음과 같이 단일 VALUES 문을 사용할 수 있습니다:
1mysql> VALUES ROW(1,2), ROW(3,4), ROW(5,6), ROW(10,15), ROW(20,25); 2+----------+----------+ 3| column_0 | column_1 | 4+----------+----------+ 5| 1 | 2 | 6| 3 | 4 | 7| 5 | 6 | 8| 10 | 15 | 9| 20 | 25 | 10+----------+----------+
VALUES는 또한 SELECT 문, TABLE 문, 또는 둘 모두와 함께 union에 사용할 수도 있습니다.
UNION에 포함되는 생성된 테이블은 SELECT를 사용할 때와 마찬가지로 동일한 개수의 컬럼을 포함해야 합니다. 더 많은 예시는 Section 15.2.18, “UNION Clause”를 참조하십시오.
UNION과 거의 동일한 방식으로 EXCEPT 및 INTERSECT와 함께 VALUES를 사용할 수 있습니다. 예시는 다음과 같습니다:
1mysql> VALUES ROW(1,2), ROW(3,4), ROW(5,6) 2 -> INTERSECT 3 -> VALUES ROW(10,15), ROW(20,25), ROW(3,4); 4+----------+----------+ 5| column_0 | column_1 | 6+----------+----------+ 7| 3 | 4 | 8+----------+----------+ 91 row in set (0.00 sec) 10 11mysql> VALUES ROW(1,2), ROW(3,4), ROW(5,6) 12 -> EXCEPT 13 -> VALUES ROW(10,15), ROW(20,25), ROW(3,4); 14+----------+----------+ 15| column_0 | column_1 | 16+----------+----------+ 17| 1 | 2 | 18| 5 | 6 | 19+----------+----------+ 202 rows in set (0.00 sec)
더 많은 정보는 Section 15.2.4, “EXCEPT Clause” 및 Section 15.2.8, “INTERSECT Clause”를 참조하십시오.
조인에서 사용. 더 많은 정보와 예시는 Section 15.2.13.2, “JOIN Clause”를 참조하십시오.
INSERT 또는 REPLACE 문에서 VALUES()를 대신하여 사용할 수 있으며, 이 경우 그 시맨틱은 여기서 설명한 것과 약간 다릅니다. 자세한 내용은 Section 15.2.7, “INSERT Statement”를 참조하십시오.
CREATE TABLE ... SELECT 및 CREATE VIEW ... SELECT에서 소스 테이블 대신 사용할 수 있습니다. 더 많은 정보와 예시는 해당 문 설명을 참조하십시오.
15.2.18 UNION Clause
15.2.20 WITH (Common Table Expressions)