15.2.16 表语句
TABLE
是一个 DML 语句,返回指定表的行和列。
TABLE table_name [ORDER BY column_name] [LIMIT number [OFFSET number]]
在某些方面,TABLE
语句类似于SELECT
。给定一个名为 t
的表,以下两个语句将产生相同的输出:
TABLE t;
SELECT * FROM t;
您可以使用 TABLE
语句中的 ORDER BY
和 LIMIT
take 语句来限制输出的行数。这些语句在使用 SELECT
语句时具有相同的效果(包括可选的 OFFSET
语句),如以下所示:
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)
TABLE
和 SELECT
在两个关键方面不同:
-
TABLE
总是显示表中的所有列。Exception:
TABLE
的输出不包括不可见的列。请参阅第15.1.20.10节,“不可见的列”。 -
TABLE
不允许对行进行任意过滤;即TABLE
不支持任何WHERE
语句。
要限制返回的列,请使用 SELECT
语句中的 WHERE
语句。
TABLE
可以与临时表一起使用。
TABLE
也可以用作 SELECT
语句的替代品,在以下构造中使用:
-
使用 set 操作符,如
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
语句或两者组合使用。请参阅第15.2.18节,“UNION Clause”、第15.2.4节,“EXCEPT Clause”和第15.2.8节,“INTERSECT Clause”,了解更多信息和示例。请参阅第15.2.14节,“Set Operations with UNION, INTERSECT, and EXCEPT”。 -
使用
INTO
来填充用户变量,并使用INTO OUTFILE
或INTO DUMPFILE
将表数据写入文件。请参阅第15.2.13.1节,“SELECT ... INTO Statement”,了解更多信息和示例。 -
在许多情况下,您可以使用子查询。假设您有一个名为
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);
请参阅第15.2.15节,“子查询”,了解更多信息。
-
在使用
INSERT
和REPLACE
语句时,您通常将使用SELECT *
。请参阅第15.2.7.1节,“INSERT ... SELECT 语句”,了解更多信息和示例。 -
TABLE
也可以在许多情况下代替SELECT
在CREATE TABLE ... SELECT
或CREATE VIEW ... SELECT
中。请参阅这些语句的描述,了解更多信息和示例。