VALUES Statement +----------+------------+--------------------+ | q | 42 | 2019-12-18 | | 23 | abc | 98.6 | | 27.0002 | Mary Smith | {"a": 10, "b": 25} | +----------+------------+--------------------+ 3 rows in set (0.00 sec) VALUES  with one or more instances of  ROW()  acts as a table value constructor; although it can be used to supply values in an  INSERT  or  REPLACE  statement, do not confuse it with the  VALUES  keyword that is also used for this purpose. You should also not confuse it with the  VALUES()  function that refers to column values in  INSERT ... ON DUPLICATE KEY UPDATE . You should also bear in mind that  ROW()  is a row value constructor (see Section 13.2.11.5, “Row Subqueries” , whereas  VALUES ROW()  is a table value constructor; the two cannot be used interchangeably. VALUES  can be used in many cases where you could employ  SELECT , including those listed here: It is also possible in this fashion to union together constructed tables having more than one row, like this: You can also (and it is usually preferable to) omit  UNION  altogether in such cases and use a single VALUES  statement, like this: Important •With  UNION , as shown here: mysql>  SELECT 1,2 UNION SELECT 10,15; mysql>  VALUES ROW(1,2) UNION VALUES ROW(10,15); mysql>  VALUES ROW(1,2), ROW(3,4), ROW(5,6) > UNION VALUES ROW(10,15),ROW(20,25); mysql>  VALUES ROW(1,2), ROW(3,4), ROW(5,6), ROW(10,15), ROW(20,25); +----+----+ | 1 | 2 | +----+----+ | 1 | 2 | | 10 | 15 | +----+----+ +----------+----------+ | column_0 | column_1 | +----------+----------+ | 1 | 2 | | 10 | 15 | +----------+----------+ +----------+----------+ | column_0 | column_1 | +----------+----------+ | 1 | 2 | | 3 | 4 | | 5 | 6 | | 10 | 15 | | 20 | 25 | +----------+----------+ +----------+----------+ | column_0 | column_1 | +----------+----------+ | 1 | 2 | 5 rows in set (0.00 sec) 2 rows in set (0.00 sec) 2 rows in set (0.00 sec)