選択
SELECTステートメントは、TiDB からデータを読み取るために使用されます。
概要
選択ステートメント:
FromDual:
選択ステートメントオプション:
選択ステートメントフィールドリスト:
テーブル参照句:
- TableRefsClause
- AsOfClause
TableRefsClause ::=
TableRef AsOfClause? ( ',' TableRef AsOfClause? )*
AsOfClause ::=
'AS' 'OF' 'TIMESTAMP' Expression
WhereClauseオプション:
選択グループ:
持つ節:
順序オプション:
選択ステートメント制限:
最初または次:
フェッチファーストオプト:
行または行:
ロックオプションを選択:
- SelectLockOpt
- TableList
SelectLockOpt ::=
( ( 'FOR' 'UPDATE' ( 'OF' TableList )? 'NOWAIT'? )
| ( 'LOCK' 'IN' 'SHARE' 'MODE' ) )?
TableList ::=
TableName ( ',' TableName )*
ウィンドウ句オプション
テーブルサンプルオプション
- TableSampleOpt
TableSampleOpt ::=
'TABLESAMPLE' 'REGIONS()'
構文要素の説明
例
選択
mysql> CREATE TABLE t1 (id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, c1 INT NOT NULL);
Query OK, 0 rows affected (0.11 sec)
mysql> INSERT INTO t1 (c1) VALUES (1),(2),(3),(4),(5);
Query OK, 5 rows affected (0.03 sec)
Records: 5 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM t1;
+----+----+
| id | c1 |
+----+----+
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 4 | 4 |
| 5 | 5 |
+----+----+
5 rows in set (0.00 sec)
mysql> SELECT AVG(s_quantity), COUNT(s_quantity) FROM stock TABLESAMPLE REGIONS();
+-----------------+-------------------+
| AVG(s_quantity) | COUNT(s_quantity) |
+-----------------+-------------------+
| 59.5000 | 4 |
+-----------------+-------------------+
1 row in set (0.00 sec)
mysql> SELECT AVG(s_quantity), COUNT(s_quantity) FROM stock;
+-----------------+-------------------+
| AVG(s_quantity) | COUNT(s_quantity) |
+-----------------+-------------------+
| 54.9729 | 1000000 |
+-----------------+-------------------+
1 row in set (0.52 sec)
上記の例では、 tiup bench tpcc prepareで生成されたデータを使用しています。最初のクエリはTABLESAMPLEの使用を示しています。
選択...出力ファイルへ
SELECT ... INTO OUTFILEステートメントは、クエリの結果をファイルに書き込むために使用されます。
注記:
- このステートメントは TiDB Self-Managed にのみ適用され、 TiDB Cloudでは使用できません。
- このステートメントは、Amazon S3 や GCS などへのクエリ結果の書き込みをサポートしてい外部ストレージん。
ステートメントでは、次の句を使用して出力ファイルの形式を指定できます。
FIELDS TERMINATED BY: ファイル内のフィールド区切り文字を指定します。たとえば、コンマ区切り値 (CSV) を出力するには','指定し、タブ区切り値 (TSV) を出力するには'\t'指定します。FIELDS ENCLOSED BY: ファイル内の各フィールドを囲む囲み文字を指定します。LINES TERMINATED BY: 特定の文字で行を終了する場合に、ファイル内の行末文字を指定します。
次のような 3 つの列を持つテーブルtがあるとします。
mysql> CREATE TABLE t (a INT, b VARCHAR(10), c DECIMAL(10,2));
Query OK, 0 rows affected (0.02 sec)
mysql> INSERT INTO t VALUES (1, 'a', 1.1), (2, 'b', 2.2), (3, 'c', 3.3);
Query OK, 3 rows affected (0.01 sec)
次の例は、 SELECT ... INTO OUTFILEステートメントを使用してクエリ結果をファイルに書き込む方法を示しています。
例1:
mysql> SELECT * FROM t INTO OUTFILE '/tmp/tmp_file1';
Query OK, 3 rows affected (0.00 sec)
この例では、クエリ結果は次のように/tmp/tmp_file1で見つかります。
1 a 1.10
2 b 2.20
3 c 3.30
例2:
mysql> SELECT * FROM t INTO OUTFILE '/tmp/tmp_file2' FIELDS TERMINATED BY ',' ENCLOSED BY '"';
Query OK, 3 rows affected (0.00 sec)
この例では、クエリ結果は次のように/tmp/tmp_file2で見つかります。
"1","a","1.10"
"2","b","2.20"
"3","c","3.30"
例3:
mysql> SELECT * FROM t INTO OUTFILE '/tmp/tmp_file3'
-> FIELDS TERMINATED BY ',' ENCLOSED BY '\'' LINES TERMINATED BY '<<<\n';
Query OK, 3 rows affected (0.00 sec)
この例では、クエリ結果は次のように/tmp/tmp_file3で見つかります。
'1','a','1.10'<<<
'2','b','2.20'<<<
'3','c','3.30'<<<
MySQL 互換性
- 構文
SELECT ... INTO @variableはサポートされていません。 - 構文
SELECT ... INTO DUMPFILEはサポートされていません。 - 構文
SELECT .. GROUP BY expr、 MySQL 5.7のようにGROUP BY expr ORDER BY expr意味するわけではありません。TiDB は MySQL 8.0 の動作と一致し、デフォルトの順序を意味しません。 - 構文
SELECT ... TABLESAMPLE ...は、他のデータベース システムおよびISO/IEC 9075-2標準との互換性のために設計された TiDB 拡張機能ですが、現在 MySQL ではサポートされていません。












