TABLE
は、MySQL 8.0.19 で導入された DML ステートメントで、指定されたテーブルの行とカラムを返します。
TABLE table_name [ORDER BY column_name] [LIMIT number [OFFSET number]]
TABLE
ステートメントは、いくつかの方法で SELECT
のように動作します。 t
という名前のテーブルが存在する場合、次の 2 つのステートメントによって同一の出力が生成されます:
TABLE t;
SELECT * FROM t;
ORDER BY
句および LIMIT
句をそれぞれ使用して、TABLE
によって生成される行数を順序付けおよび制限できます。 これらの関数は、次に示すように、SELECT
で使用する場合と同じ句 (LIMIT
でのオプションの 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
では、常にテーブルのすべてのカラムが表示されます。TABLE
では、行の任意のフィルタリングは許可されません。つまり、TABLE
ではWHERE
句はサポートされません。
返されるテーブルのカラムを制限するには、ORDER BY
および LIMIT
(あるいはその両方) を使用して達成できる以上の行をフィルタリングし、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 OUTFILE
またはINTO DUMPFILE
を使用してテーブルデータをファイルに書き込みます。 詳細および例は、セクション13.2.10.1「SELECT ... INTO ステートメント」 を参照してください。-
多くの場合、サブクエリーを使用できます。
a
という名前のカラムを持つ任意のテーブルt1
と、単一のカラムを持つ別のテーブル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);
詳しくはセクション13.2.11「サブクエリー」,をご覧ください。
INSERT
およびREPLACE
ステートメントを使用します。それ以外の場合は、SELECT *
を使用します。 詳細および例については、セクション13.2.6.1「INSERT ... SELECT ステートメント」を参照してください。TABLE
は、多くの場合、CREATE TABLE ... SELECT
またはCREATE VIEW ... SELECT
のSELECT
のかわりに使用することもできます。 詳細および例については、これらのステートメントの説明を参照してください。