Documentation Home

13.2.12 TABLE 语句

TABLE是 MySQL 8.0.19 中引入的 DML 语句,它返回指定表的行和列。

TABLE table_name [ORDER BY column_name] [LIMIT number [OFFSET number]]

TABLE语句在某些方面就像SELECT. 鉴于存在名为 的表t,以下两个语句产生相同的输出:

TABLE t;

SELECT * FROM t;

TABLE您可以分别对使用ORDER BYLIMIT子句 生成的行数进行排序和限制 。这些功能与 with 一起使用时的相同子句相同 SELECT(包括可选 OFFSET子句 with LIMIT),如您在此处所见:

mysql> TABLE t;
+----+----+
| a  | b  |
+----+----+
|  1 |  2 |
|  6 |  7 |
|  9 |  5 |
| 10 | -4 |
| 11 | -1 |
| 13 |  3 |
| 14 |  6 |
+----+----+
7 rows in set (0.00 sec)

mysql> TABLE t ORDER BY b;
+----+----+
| a  | b  |
+----+----+
| 10 | -4 |
| 11 | -1 |
|  1 |  2 |
| 13 |  3 |
|  9 |  5 |
| 14 |  6 |
|  6 |  7 |
+----+----+
7 rows in set (0.00 sec)

mysql> TABLE t LIMIT 3;
+---+---+
| a | b |
+---+---+
| 1 | 2 |
| 6 | 7 |
| 9 | 5 |
+---+---+
3 rows in set (0.00 sec)

mysql> TABLE t ORDER BY b LIMIT 3;
+----+----+
| a  | b  |
+----+----+
| 10 | -4 |
| 11 | -1 |
|  1 |  2 |
+----+----+
3 rows in set (0.00 sec)

mysql> TABLE t ORDER BY b LIMIT 3 OFFSET 2;
+----+----+
| a  | b  |
+----+----+
|  1 |  2 |
| 13 |  3 |
|  9 |  5 |
+----+----+
3 rows in set (0.00 sec)

TABLESELECT在两个关键方面 不同于 :

  • TABLE始终显示表的所有列。

  • TABLE不允许任意过滤行;也就是说,TABLE 不支持任何WHERE子句。

为了限制返回哪些表列,过滤超出使用ORDER BYLIMIT/或两者可以完成的行,使用 SELECT

TABLE可以与临时表一起使用。

TABLE也可以用于代替 SELECT许多其他结构,包括此处列出的结构:

  • 使用UNION,如下所示:

    mysql> TABLE t1;
    +---+----+
    | a | b  |
    +---+----+
    | 2 | 10 |
    | 5 |  3 |
    | 7 |  8 |
    +---+----+
    3 rows in set (0.00 sec)
    
    mysql> TABLE t2;
    +---+---+
    | a | b |
    +---+---+
    | 1 | 2 |
    | 3 | 4 |
    | 6 | 7 |
    +---+---+
    3 rows in set (0.00 sec)
    
    mysql> TABLE t1 UNION TABLE t2;
    +---+----+
    | a | b  |
    +---+----+
    | 2 | 10 |
    | 5 |  3 |
    | 7 |  8 |
    | 1 |  2 |
    | 3 |  4 |
    | 6 |  7 |
    +---+----+
    6 rows in set (0.00 sec)

    刚才展示的UNION相当于下面的语句:

    mysql> SELECT * FROM t1 UNION SELECT * FROM t2;
    +---+----+
    | a | b  |
    +---+----+
    | 2 | 10 |
    | 5 |  3 |
    | 7 |  8 |
    | 1 |  2 |
    | 3 |  4 |
    | 6 |  7 |
    +---+----+
    6 rows in set (0.00 sec)

    TABLE也可以与SELECT语句、 VALUES语句或两者联合使用。请参阅 第 13.2.10.3 节,“UNION 子句”

  • 使用INTO填充用户变量,使用INTO OUTFILEINTO DUMPFILE将表数据写入文件。有关更具体的信息和示例, 请参阅 第 13.2.10.1 节,“SELECT ... INTO 语句” 。

  • 在许多情况下,您可以使用子查询。t1给定具有名为 的列的 任何表 ,以及 具有单个列 a的第二个表,如下语句是可能的:t2

    SELECT * FROM t1 WHERE a IN (TABLE t2);

    假设表的单列t1 名为x,前面的内容等同于此处显示的每个语句(并且在两种情况下产生完全相同的结果):

    SELECT * FROM t1 WHERE a IN (SELECT x FROM t2);
    
    SELECT * FROM t1 WHERE a IN (SELECT * FROM t2);

    有关更多信息,请参阅第 13.2.11 节,“子查询”

  • WithINSERTREPLACE语句,否则您将使用 SELECT *. 有关更多信息和示例, 请参阅第 13.2.6.1 节,“INSERT ... SELECT 语句” 。

  • TABLE在许多情况下也可以用来代替SELECTin CREATE TABLE ... SELECTCREATE VIEW ... SELECT. 有关更多信息和示例,请参阅这些语句的描述。