MySQLのクエリ結果を整形、縦表示やCSV出力で見やすくする方法

便利ワザ

MySQLを使用して、クエリ結果を整形する方法を解説します。

コマンド末尾に \GINTO OUTFILE といった構文を付加することで、
縦表示に切り替えたり CSV ファイルに出力することができます。

MySQL 8 インストール手順 (CentOS)
MySQL 8 インストール手順 (Ubuntu)



MySQL の縦表示には「\G」オプション

テスト用に users テーブルを用意しました。
「ユーザー一覧」を想定した内容で、簡易的に5カラムとしています。

MySQL コマンドで通常通りにを実行すると、横長の表形式で出力されます。

> SELECT * FROM users;

 
画面に収まる場合は問題ありませんが、カラム数が増えると入り切りません。
1行に収まらずに折り返してしまい、非常に見づらい表となってしまいます。

 
ここで、末尾の文字を ; から \G に変えると縦表示が可能です。

> SELECT * FROM users\G

 
カラムごとの結果が縦に並ぶため、文字が折り返すこともなく見やすくなります。
横に長いテーブルを確認する場合には、特に重宝するオプションです。

「INTO OUTFILE」で MySQL の結果を CSV 出力

SELECT した結果を、CSV ファイルとして出力することができます。
SELECT 文の最後に INTO OUTFILE <ファイル名> を付け足せば OK です。

> SELECT * FROM users INTO OUTFILE '/tmp/users.txt';

指定した場所にファイルが出力されました。
OS によっては /tmp/systemd-private-*** 等のサブディレクトリに出力されることもあります。

> cat /tmp/users.txt
1    Database Taro   taro-test@example-database.com    2018-09-01 11:22:33    0
2    Database Jiro   jiro-test@example-database.com    2018-09-01 15:00:00    0
3    Database Hanako hanako-test@example-database.com  2018-09-01 19:00:00    0

FIELDS オプションで区切り文字を指定できます。
カンマを指定することで、CSV ファイルとしての出力が可能です。

> SELECT * FROM uses INTO OUTFILE '/tmp/users.csv' FIELDS TERMINATED BY ',';

SQL クエリの結果を less で確認する

MySQL で実行したクエリ結果を less で確認する方法があります。
文字列検索や矩形選択を行いたい場合に便利です。

MySQL サーバーに接続した状態で pager コマンドを実行して有効します。
正しく設定された場合は PAGER set to *** と表示されます。

> pager less -S
PAGER set to 'less -S'

この状態で SELECT などを実行すると、less が起動して結果を確認できます

> SELECT * FROM users;

 
画像では分かりづらいですが、通常の less と同じ操作でスクロールや文字列検索が行なえます。

元に戻すときは nopager コマンドを実行します。

> nopager;

まとめ

MySQL のクエリ結果を整形する方法、CSV 出力する方法について解説しました。

\GINTO OUTFILE などのオプションを使うだけで、出力が扱いやすくなります。
大規模テーブルを扱う際などに、ぜひご活用ください。

【関連記事】
MySQL が遅いときの調査方法
curl の便利なオプションを解説
MySQL 8 インストール手順 (CentOS)
MySQL 8 インストール手順 (Ubuntu)
jq コマンドで JSON の整形や加工を行う
jq コマンド応用編