TABLE 是 MySQL 8.0.19 中引入的一个 DML 语句,它返回指定表的行和列。
1. TABLE table_name [ORDER BY column_name] [LIMIT number [OFFSET number]]
TABLE 语句在某些方面类似于 SELECT。假设存在一个名为 t 的表,以下两个语句将产生相同的输出:
1. TABLE t;
2.
3. SELECT * FROM t;
可以分别使用 ORDER BY 和 LIMIT 子句对 TABLE 生成的行数进行排序和限制。当与 SELECT (包括带 LIMIT 的可选 OFFSET 子句)一起使用时,相同的子句也会有这些相同功能,如下所示:
1. mysql> TABLE t;
2. +----+----+
3. | a | b |
4. +----+----+
5. | 1 | 2 |
6. | 6 | 7 |
7. | 9 | 5 |
8. | 10 | -4 |
9. | 11 | -1 |
10. | 13 | 3 |
11. | 14 | 6 |
12. +----+----+
13. 7 rows in set (0.00 sec)
14.
15. mysql> TABLE t ORDER BY b;
16. +----+----+
17. | a | b |
18. +----+----+
19. | 10 | -4 |
20. | 11 | -1 |
21. | 1 | 2 |
22. | 13 | 3 |
23. | 9 | 5 |
24. | 14 | 6 |
25. | 6 | 7 |
26. +----+----+
27.7 rows in set (0.00 sec)
28.
29. mysql> TABLE t LIMIT 3;
30. +---+---+
31. | a | b |
32. +---+---+
33. | 1 | 2 |
34. | 6 | 7 |
35. | 9 | 5 |
36. +---+---+
37. 3 rows in set (0.00 sec)
38.
39. mysql> TABLE t ORDER BY b LIMIT 3;
40. +----+----+
41. | a | b |
42. +----+----+
43. | 10 | -4 |
44. | 11 | -1 |
45. | 1 | 2 |
46. +----+----+
47. 3 rows in set (0.00 sec)
48.
49. mysql> TABLE t ORDER BY b LIMIT 3 OFFSET 2;
50. +----+----+
51. | a | b |
52. +----+----+
53. | 1 | 2 |
54. | 13 | 3 |
55. | 9 | 5 |
56. +----+----+
57. 3 rows in set (0.00 sec)
TABLE 与 SELECT 在两个主要的不同:
● TABLE 始终显示表的所有列。
● TABLE 不允许任意筛选行;也就是说,TABLE 不支持任何 WHERE 子句。
要限制返回哪些表列,筛选超出使用 ORDER BY 和 LIMIT 可以控制的行,请使用 SELECT 语句。
TABLE 可以与临时表一起使用。
在许多其他结构中,TABLE 也可以用来代替 SELECT,包括下面列出的那些:
● 与 UNION 一起使用,如下所示:
1. mysql> TABLE t1;
2. +---+----+
3. | a | b |
4. +---+----+
5. | 2 | 10 |
6. | 5 | 3 |
7. | 7 | 8 |
8. +---+----+
9. 3 rows in set (0.00 sec)
10.
11. mysql> TABLE t2;
12. +---+---+
13. | a | b |
14. +---+---+
15. | 1 | 2 |
16. | 3 | 4 |
17. | 6 | 7 |
18. +---+---+
19. 3 rows in set (0.00 sec)
20.
21. mysql> TABLE t1 UNION TABLE t2;
22. +---+----+
23. | a | b |
24. +---+----+
25. | 2 | 10 |
26. | 5 | 3 |
27. | 7 | 8 |
28. | 1 | 2 |
29. | 3 | 4 |
30. | 6 | 7 |
31. +---+----+
32. 6 rows in set (0.00 sec)
以上显示的 UNION 相当于以下语句:
1. mysql> SELECT * FROM t1 UNION SELECT * FROM t2;
2. +---+----+
3. | a | b |
4. +---+----+
5. | 2 | 10 |
6. | 5 | 3 |
7. | 7 | 8 |
8. | 1 | 2 |
9.| 3 | 4 |
10. | 6 | 7 |
11. +---+----+
12. 6 rows in set (0.00 sec)
TABLE 也可以与 SELECT 语句、VALUES 语句一起使用。
● 与 INTO 一起使用,填充用户变量,与 INTO OUTFILE 或 INTO DUMPFILE 一起使用,将表数据写入文件。
● 在许多情况下,可以使用子查询。如果表 t1 有一个列 a,而第二个表 t2 只有一个列,则可以使用以下语句:
1. SELECT * FROM t1 WHERE a IN (TABLE t2);
假设表 ts 的唯一列名为 x,则前面的语句等价于这里显示的每个语句(在任何一种情况下都会产生完全相同的结果):
1. SELECT * FROM t1 WHERE a IN (SELECT x FROM t2);
2.SELECT * FROM t1 WHERE a IN (SELECT * FROM t2);
● 用于 INSERT 和 REPLACE 语句,也可以使用 SELECT *。
● 在许多情况下,TABLE 也可以用来代替 CREATE TABLE ... SELECT 或 CREATE VIEW ... SELECT 中的 SELECT。