Search

ファイルからSQL文を実行し、実行結果をファイル出力

unknown

$ mysql [-t | -N] -u ユーザー名 -p データベース名 < SQLファイル名 > 出力ファイル名
Enter password: パスワード
SELECT文で有効なオプション「-t」、「-N」
-t または --table表形式で結果表示
-N または --skip-column-namesフィールド名を出力しない

以下の2つの例では、下のようにSELECT文の書かれたSQLファイルを実行し、 その実行結果を例1では表形式、 例2ではフィールド名なしの表形式でファイル出力します。

SQLファイル(select.sql)の内容
SELECT * FROM tbl_Customer;

例1: 実行結果を表形式(-t)で出力

# ファイルからSELECT文を実行し、実行結果を表形式でファイル出力
C:\mysql\bin> C:\mysql\bin>mysql -t -u root -p db_User < C:\mysql\data\select.sql > C:\mysql\data\sql.log Enter
Enter password: ********* Enter
出力ファイル(sql.log)の内容
+--------+-----------+----------+------+------+
| UserID | FirstName | LastName | Sex  | Age  |
+--------+-----------+----------+------+------+
| U001   | 花子      | 鈴木     | f    |   21 |
| U002   | 太郎      | 田中     | m    |   30 |
| U003   | 一郎      | 鈴木     | m    |   45 |
| U004   | 萌子      | 山口     | f    |   18 |
| U005   | 愛        | 森永     | f    |   21 |
| U006   | 太郎      | 鈴木     | m    |   22 |
| U007   | 花子      | 佐藤     | f    |   35 |
+--------+-----------+----------+------+------+

例1: 実行結果形式(-t)で、フィールド名を含めずに(-N)出力

# ファイルからSELECT文を実行し、実行結果を表形式でファイル出力
C:\mysql\bin> mysql -t -N -u root -p db_User < c:\mysql\data\select.sql > c:\mysql\data\sql.log Enter
Enter password: ********* Enter
出力ファイル(sql.log)の内容
+------+------+------+------+------+
| U001 | 花子 | 鈴木 | f    |   21 |
| U002 | 太郎 | 田中 | m    |   30 |
| U003 | 一郎 | 鈴木 | m    |   45 |
| U004 | 萌子 | 山口 | f    |   18 |
| U005 | 愛   | 森永 | f    |   21 |
| U006 | 太郎 | 鈴木 | m    |   22 |
| U007 | 花子 | 佐藤 | f    |   35 |
+------+------+------+------+------+

ファイルからSQL文を実行し、その実行結果をファイルに追加出力

unknown

$ mysql [-t -N] データベース名 < SQLファイル名 >> 出力ファイル名
SELECT文で有効なオプション「-t」、「-N」
-t または --table表形式で結果表示
-N または --skip-column-namesフィールド名を出力しない

以下の例では、まずSELECT * FROM tbl_Customer WHERE Sex='f';と書かれたSQLファイル(select1.sql)を実行し、 表形式で実行結果を「sql.log」というファイル名で出力します。

# select1.sql ファイルのSELECT文を実行し、
# 実行結果を表形式で sql.log という名でファイル出力
C:\mysql\bin> mysql -t -u root -p db_User < C:\mysql\data\select1.sql > C:\mysql\data\sql.log Enter
Enter password: ******** Enter
出力ファイル(sql.log)の内容
+--------+-----------+----------+------+------+
| UserID | FirstName | LastName | Sex  | Age  |
+--------+-----------+----------+------+------+
| U001   | 花子      | 鈴木     | f    |   21 |
| U004   | 萌子      | 山口     | f    |   18 |
| U005   | 愛        | 森永     | f    |   21 |
| U007   | 花子      | 佐藤     | f    |   35 |
+--------+-----------+----------+------+------+

次に、SELECT * FROM tbl_Customer WHERE Sex='m';と書かれたSQLファイル(select2.sql)を実行し、 フィールド名を含めない表形式で実行結果を既存の「sql.log」に追加出力します。

# select2.sqlファイルのSELECT文を実行し、
# 実行結果をフィールド名を含めないファイル形式で
# 上で出力した「sql.log」ファイルに追加出力
C:\mysql\bin> mysql -t -u root -p db_User < C:\mysql\data\select2.sql >> C:\mysql\data\sql.log Enter
Enter password: ********
出力ファイル(sql.log)の内容
+--------+-----------+----------+------+------+
| UserID | FirstName | LastName | Sex  | Age  |
+--------+-----------+----------+------+------+
| U001   | 花子      | 鈴木     | f    |   21 |
| U004   | 萌子      | 山口     | f    |   18 |
| U005   | 愛        | 森永     | f    |   21 |
| U007   | 花子      | 佐藤     | f    |   35 |
+--------+-----------+----------+------+------+
+--------+-----------+----------+------+------+
| UserID | FirstName | LastName | Sex  | Age  |
+--------+-----------+----------+------+------+
| U002   | 太郎      | 田中     | m    |   30 |
| U003   | 一郎      | 鈴木     | m    |   45 |
| U006   | 太郎      | 鈴木     | m    |   22 |
+--------+-----------+----------+------+------+

テーブルの内容をファイルに出力(部分一致)

unknown

tbl_Customer テーブルから、FirstName フィールドに「子」が含まれるレコードを検索し、その検索結果を「name_in_ko.tab」というファイル名でファイル出力します。

C:\mysql\bin> mysql -u root -p db_User Enter
Enter password: ***** Enter
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 32 to server version: 4.0.26-nt

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

# tbl_Customerテーブルの内容
mysql> SELECT * FROM tbl_Customer; Enter
+--------+-----------+----------+------+------+
| UserID | FirstName | LastName | Sex  | Age  |
+--------+-----------+----------+------+------+
| U001   | 花子      | 鈴木     | f    |   21 |
| U002   | 太郎      | 田中     | m    |   30 |
| U003   | 一郎      | 鈴木     | m    |   45 |
| U004   | 萌子      | 山口     | f    |   18 |
| U005   | 愛        | 森永     | f    |   21 |
| U006   | 太郎      | 鈴木     | m    |   22 |
| U007   | 花子      | 佐藤     | f    |   35 |
+--------+-----------+----------+------+------+
7 rows in set (0.00 sec)

# 部分一致するレコードのみファイル出力
mysql> SELECT * INTO OUTFILE 'c:\\mysql\\data\\name_in_ko.tab' Enter
    -> FIELDS TERMINATED BY '\t' Enter
    -> LINES TERMINATED BY '\r\n' Enter
    -> FROM db_User.tbl_Customer Enter
    -> WHERE FirstName LIKE '%子%'; Enter
Query OK, 3 rows affected (0.00 sec)
出力ファイル(name_in_ko.tab)の内容
U001    花子    鈴木    f    21
U004    萌子    山口    f    18
U007    花子    佐藤    f    35

テーブルの内容をファイルに出力(完全一致)

unknown

tbl_Customer テーブルから、LastName フィールドが「鈴木」のレコードを検索し、その検索結果を「suzuki.tab」というファイル名でファイル出力します。

C:\mysql\bin> mysql -u root -p db_User Enter
Enter password: ***** Enter
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 32 to server version: 4.0.26-nt

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

# tbl_Customerテーブルの内容
mysql> SELECT * FROM tbl_Customer; Enter
+--------+-----------+----------+------+------+
| UserID | FirstName | LastName | Sex  | Age  |
+--------+-----------+----------+------+------+
| U001   | 花子      | 鈴木     | f    |   21 |
| U002   | 太郎      | 田中     | m    |   30 |
| U003   | 一郎      | 鈴木     | m    |   45 |
| U004   | 萌子      | 山口     | f    |   18 |
| U005   | 愛        | 森永     | f    |   21 |
| U006   | 太郎      | 鈴木     | m    |   22 |
| U007   | 花子      | 佐藤     | f    |   35 |
+--------+-----------+----------+------+------+
7 rows in set (0.00 sec)

# 完全一致するレコードのみファイル出力
mysql> SELECT * INTO OUTFILE 'c:\\mysql\\data\\suzuki.tab' Enter
    -> FIELDS TERMINATED BY '\t' Enter
    -> LINES TERMINATED BY '\r\n' Enter
    -> FROM db_User.tbl_Customer Enter
    -> WHERE LastName='鈴木'; Enter
Query OK, 3 rows affected (0.00 sec)

出力ファイル(suzuki.tab)の内容
U001    花子    鈴木    f    21
U003    一郎    鈴木    m    45
U006    太郎    鈴木    m    22

データベースからテーブル内容をダンプ

unknown

SELECT ... INTO OUTFILE 'ファイル名'
  [FIELDS OPTIONALY
    [TERMINATED by '区切り文字']
     [ENCLOSED BY '数値型以外を囲む文字列']
    [ESCAPED BY 'エスケープ文字']
  ]
  [LINES
    [TERMINATED BY "改行文字"]
  ]
FROM テーブル名;

SELECTしたテーブル内容をファイルに書き出します。
ファイルは指定したファイル名で、サーバーホスト上に作成されます。

指定したファイル名が既に存在する場合はエラーになります。

SELECT ... INTO OUTFILE 'ファイル名' FROM テーブル名;のように、 FIELDS OPTIONALLYオプション、LINESオプションを省略した場合は、各デフォルト値(区切り文字は 、改行文字は 、エスケープ処理なし)が適用されます。

SELECT ... INTO OUTFILE 'ファイル名'形式のSELECT文を実行するには、サーバーホストに対するFILE権限が必要です。

例1: テーブルの内容を全てダンプ

tbl_Customerテーブルの全てのレコードを、「tbl_Customer.tab」というファイル名で出力します。

# データベース選択
mysql> USE db_User Enter
Database changed
# tbl_Customerテーブルの内容を全てダンプ
mysql> SELECT * INTO OUTFILE 'c:\\mysql\\data\\tbl_Customer.tab' Enter
    -> FIELDS OPTIONALLY Enter
    -> ENCLOSED BY "'" Enter
    -> TERMINATED BY '\t' Enter
    -> LINES TERMINATED BY '\r\n' Enter
    -> FROM db_User.tbl_Customer; Enter
Query OK, 7 rows affected (0.01 sec)
tbl_Customer.tab の内容
'U001'    '花子'    '鈴木'    'f'    21
'U002'    '太郎'    '田中'    'm'    30
'U003'    '一郎'    '鈴木'    'm'    45
'U004'    '萌子'    '山口'    'f'    18
'U005'    '愛'    '森永'    'f'    21
'U006'    '太郎'    '鈴木'    'm'    22
'U007'    '花子'    '佐藤'    'f'    35

例2: テーブルから指定したフィールドのデータのみダンプ

tbl_Customerテーブルから、UserID、FirstName、LastNameフィールドのみ、「FullName.tab」というファイル名で出力します。

# データベース選択
mysql> USE db_User Enter
Database changed
# 指定したフィールドのデータのみダンプ
mysql> SELECT UserID, CONCAT(LastName, ' ', FirstName) INTO Enter
    -> OUTFILE 'c:\\mysql\\data\\FullName.tab' Enter
    -> FIELDS OPTIONALLY Enter
    -> ENCLOSED BY "'" Enter
    -> TERMINATED BY '\t' Enter
    -> LINES TERMINATED BY '\r\n' Enter
    -> FROM db_User.tbl_Customer; Enter
Query OK, 7 rows affected (0.01 sec)
FullName.tab の中身
'U001'    '鈴木 花子'
'U002'    '田中 太郎'
'U003'    '鈴木 一郎'
'U004'    '山口 萌子'
'U005'    '森永 愛'
'U006'    '鈴木 太郎'
'U007'    '佐藤 花子'

このページで使用しているサンプルデータ

unknown

# データベース(db_User)作成
CREATE DATABASE IF NOT EXISTS db_User;

#データベース選択
USE db_User;

# テーブル(tbl_Customer)作成
CREATE TABLE tbl_Customer(
UserID VARCHAR(4) NOT NULL PRIMARY KEY,
FirstName VARCHAR(32) NOT NULL,
LastName VARCHAR(32) NOT NULL,
Sex CHAR(2) DEFAULT NULL,
Age INTEGER DEFAULT NULL
);

# データ挿入
INSERT INTO tbl_Customer (UserID,FirstName,LastName,Sex,Age) VALUES
('U001','花子','鈴木','f',21),
('U002','太郎','田中','m',30),
('U003','一郎','鈴木','m',45),
('U004','萌子','山口','f',18),
('U005','愛','森永','f',21),
('U006','太郎','鈴木','m',22),
('U007','花子','佐藤','f',35);

関連コンテンツ

Q. このサイトの情報はお役に立ちましたでしょうか?

投票する 投票結果を見る

管理人に【web拍手】を送るweb拍手(1行メッセージも送れます♪)

pagetop

polarized women