WindowsのDBツール「A5:SQL Mk-2」5つの便利機能

#A5:SQL Mk-2（A5M2）の概要
DB参照、更新用のソフトで、僕が愛用しておすすめしているのは「A5:SQL Mk-2」です。
https://a5m2.mmatsubara.com/

読みは「エーファイブ・エスキューエル・マークツー」で、A5M2「エー・ゴ・エム・ツー」と呼んでいます。

公式にも「高機能かつ軽量な汎用SQL開発ツール / ER図ツール / フリーソフト」と書かれておりますが、まさにその通り。
ちょこっとした作業を行うにはもってこいのソフトです。

DBツールは、重いソフトが多くて起動にストレスがかかるのも多い中、A5M2ではそのストレスはほぼありませんね。

で、このソフトで非常に有用で便利な機能が5つあります。

- テーブルからSQLを生成
- INSERT文／UPDATE文の出力
- テーブル定義書出力
- 複数のSELECT結果のExcel出力
- SQLの比較実行

下記で1つずつ詳しく解説しますね。

## テーブルからSQLを生成
まずは何といってもSQLの生成から。
短文なら手入力もありですが、カラムが多い場合は自動で生成してもらいましょう。

以下は手順

◆テーブル選択→右クリック→SQLの生成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/258092/b6e43bee-3afa-357d-2130-e0c8a57e877a.png)

◆生成するSQLにチェック→OK
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/258092/8ca658fa-ff06-24ef-7361-63cd69726a1a.png)

```sql
--*DataTitle "invoices"
--*CaptionFromComment
SELECT
  "InvoiceId"                                     -- InvoiceId
  , "CustomerId"                                  -- CustomerId
  , "InvoiceDate"                                 -- InvoiceDate
  , "BillingAddress"                              -- BillingAddress
  , "BillingCity"                                 -- BillingCity
  , "BillingState"                                -- BillingState
  , "BillingCountry"                              -- BillingCountry
  , "BillingPostalCode"                           -- BillingPostalCode
  , "Total"                                       -- Total
FROM
  "invoices"
WHERE
  "CustomerId" = :CustomerId 
ORDER BY
  "CustomerId"; 
 
INSERT
INTO "invoices" ( 
  "InvoiceId"
  , "CustomerId"
  , "InvoiceDate"
  , "BillingAddress"
  , "BillingCity"
  , "BillingState"
  , "BillingCountry"
  , "BillingPostalCode"
  , "Total"
) 
VALUES ( 
  :InvoiceId
  , :CustomerId
  , :InvoiceDate
  , :BillingAddress
  , :BillingCity
  , :BillingState
  , :BillingCountry
  , :BillingPostalCode
  , :Total
); 
 
UPDATE "invoices"
SET
  "CustomerId" = :CustomerId
  , "InvoiceDate" = :InvoiceDate
  , "BillingAddress" = :BillingAddress
  , "BillingCity" = :BillingCity
  , "BillingState" = :BillingState
  , "BillingCountry" = :BillingCountry
  , "BillingPostalCode" = :BillingPostalCode
  , "Total" = :Total 
WHERE
  "CustomerId" = :CustomerId; 
 
DELETE
FROM
  "invoices"
WHERE
  "CustomerId" = :CustomerId
```

あっという間にSQLのテンプレートが出来上がりました。
実際に使用する場合は、必要なSQLタイプだけ出力すればいいでしょう。


## INSERT文／UPDATE文の出力

次は、INSERT文とUPDATE文の出力です。
これも手書きでやると非常に面倒ですが、ツールを使えばすぐに出すことが可能です。

◆テーブルのデータを表示する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/258092/a5946cdc-3bdb-60bd-32de-acae2f2485d3.png)

◆出力したい行を選択→右クリック→レコードコピー→INSERT文 or UPDATE文
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/258092/f93339ce-ddd5-288e-e6bb-0751136442db.png)

◆OKボタンを押す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/258092/ee3eba72-a825-2614-2922-f1abfe7f85b9.png)

クリップボードにコピーされるので、適用な場所に貼り付ければ完成です。

- INSERT文

```sql
insert into "sqlite_sequence"("name","seq") values ('genres','25');
insert into "sqlite_sequence"("name","seq") values ('media_types','5');
insert into "sqlite_sequence"("name","seq") values ('artists','275');
insert into "sqlite_sequence"("name","seq") values ('albums','347');
insert into "sqlite_sequence"("name","seq") values ('tracks','3503');
insert into "sqlite_sequence"("name","seq") values ('employees','8');
insert into "sqlite_sequence"("name","seq") values ('customers','59');
insert into "sqlite_sequence"("name","seq") values ('invoices','412');
insert into "sqlite_sequence"("name","seq") values ('invoice_items','2240');
insert into "sqlite_sequence"("name","seq") values ('playlists','18');
```

- UPDATE文

```sql
update "sqlite_sequence" set name = 'genres', seq = '25' where ;
update "sqlite_sequence" set name = 'media_types', seq = '5' where ;
update "sqlite_sequence" set name = 'artists', seq = '275' where ;
update "sqlite_sequence" set name = 'albums', seq = '347' where ;
update "sqlite_sequence" set name = 'tracks', seq = '3503' where ;
update "sqlite_sequence" set name = 'employees', seq = '8' where ;
update "sqlite_sequence" set name = 'customers', seq = '59' where ;
update "sqlite_sequence" set name = 'invoices', seq = '412' where ;
update "sqlite_sequence" set name = 'invoice_items', seq = '2240' where ;
update "sqlite_sequence" set name = 'playlists', seq = '18' where ;
```

※UPDATE文はWHERE句が不完全なので、適宜修正してください。

ちなみに、SELECT文実行後の結果からでも出力できます。（INSERT文のみ）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/258092/9e20f2ce-e0f2-e2bd-6a33-ee5f3dcdbd07.png)

SELECTの結果からINSERT文を作成してくれる機能は意外と無くて、これは重宝しますよ。
昔はSQLの結果をExcelに貼り付けて、関数orマクロ使ってINSERT文作ったりしていましたが、この機能が実装されてからは使うことがなくなりました。

## テーブル定義書出力
次はテーブル定義書の出力です。

独自のテーブル定義書のフォーマットを作る会社が多いと思いますが、独自に定義すると管理コストが増加します。ツールのフォーマットに合わせてしまいましょう。

◆出力対象のデータベースを選択→右クリック→テーブル定義
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/258092/48120ed4-57cd-a78d-1d0a-b7887c9b1820.png)
書作成

◆出力対象のデータベースを選択→右クリック→テーブル定義書作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/258092/4daf95a6-ffa5-ebb4-715d-b75111984fa9.png)

しばらく待てばテーブル定義書を出力されます。
フォーマットは以下のような感じです。
業務でも十分使えるものなので、一度お試しあれ。

- 一覧
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/258092/44240045-d82e-8609-85d5-8593757a71c3.png)

- 各テーブル
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/258092/eae3ea67-a7ff-a802-6425-22fa9ad734cb.png)


## 複数のSELECT結果のExcel出力

テーブルのデータやSELECT結果をExcelに出力することができます。

SELECT結果を出力する場合、単数の実行結果はもちろん、複数の実行結果を同一のExcelに出力することも可能です。
その際、シートごとに分ける方が見やすいので、設定を先に変えておきます。

◆設定→オプション→複数結果セットを～にチェック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/258092/af9f322c-d3e7-2af3-7d1a-d79600d49493.png)

◆複数のSELECTを実行→Excel出力(ALL)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/258092/219a61e4-881a-e787-032c-8b4075e6eee7.png)

出力結果は以下のようなイメージです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/258092/9c240b07-12e3-1540-fbb9-2c21ac189fbe.png)

## SQLの比較実行
同一のSQLを2回実行したときの差分内容を出力します。
1回SELECT文を実行し、データを変更、そしてもう1回SELECT文を実行する流れです。

◆任意のSELECT文を実行
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/258092/31d95776-7115-f184-d7d7-8f76d415eac6.png)

◆デーブルデータを更新する
データに何かしらの変更を加える。

◆「A:B」を押す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/258092/40c073fc-539e-a966-de59-987a3e55aaed.png)

◆実行（比較）を押す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/258092/bf729463-03f0-8b25-137a-80c354242491.png)

下記のように結果セットの比較画面が出ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/258092/4848764b-af7a-f6b2-d472-c3bd1dd71984.png)

差分内容が一目瞭然のスグレモノですよ！　
また、差分内容をクリップボードにコピーしたり、Excelに出力したりもできます。

# 最後に：A5:SQL Mk-2はコスパ良しの神ソフト
データベースを扱うフリーソフト、「A5:SQL Mk-2」についてまとめてみました。

本ソフトはWindowsユーザで業務系、Web系のシステム開発を行う人にとっては定番で、非常に使い勝手が良い最強のソフトです。

エンジニアの人は、自分のお気に入りのソフトがあると思いますが、記事で紹介した内容が良いと思ったらぜひ使ってみてください。
作業が捗ること間違いなし。