• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 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子句来排序和限制产生的行数。与一起使用时,这些功能与相同的子句相同SELECT(包括带有的可选OFFSET子句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语句或两者结合使用。请参见“ UNION子句”。

    • INTO填充用户变量,用INTO OUTFILEINTO DUMPFILE将表数据写入文件。有关更多特定信息和示例,请参见“ SELECT ... INTO语句”。
    • 在许多情况下,您可以使用子选择。给定任何t1具有名为的列的表a,以及t2具有单个列的第二个表,则可以执行以下语句:

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

      假设表的单列ts被命名为x,则前面的语句等效于此处显示的每个语句(在两种情况下都产生完全相同的结果):

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

      有关更多信息,请参见“子查询”。

    • 使用INSERTREPLACE语句,否则将使用SELECT *。有关更多信息和示例,请参见“ INSERT ... SELECT语句”。
    • TABLE也可以在许多情况下代替SELECTin CREATE TABLE ... SELECTCREATE VIEW ... SELECT。有关更多信息和示例,请参见这些语句的描述。