アリクイのデータベース勉強記録

データベースやプログラミングについて勉強した内容を発信していきます。

【SQL入門編】並び替えや集計操作

今回はデータを見やすくする操作全般について紹介します。 難しい操作はありませんが使用頻度は高い内容かと思います。

SQLにコメントを挿入する

別のサイトや業務で使うSQLに普通に日本語で書かれている文章を見かけて戸惑った方もいらっしゃるかもしれませんね。 実はSQL内に文字列にコメントを残すことができます。 書き方は簡単で、半角ハイフン(-)を二つ並べて半角スペースを挿入してからコメントとして残せます。

-- 社員情報のテーブル
SELECT * -- SQLの途中でもコメントを残せます。
FROM animals; 

コメントを残しておくと後でSQLを見直した時に分かりやすく便利なのでぜひ活用してみてください。

カラムの表示名を変える

(併せてテーブル名も別の名前に置き換える) カラム名の後に(AS) 表示したい文字を入れるだけで簡単に表示名を変えることが可能です。 サイトによってASがついていたり逆になかったりで分かりにくいかもしれませんがどちらでも大丈夫です。 (慣れないうちはASも含めて書いたほうが見直した時に分かりやすいかと思いますが…)

こちらは前回JOINしたテーブルを使用してみます。

db-arikui.hatenablog.com

SELECT 
a.id AS 社員番号, -- カラム名の後にAS表示したい文字
a.name 社員名, -- 実はASは省略可能 
a.group_code 部署コード,
w.group_name 部署名
FROM animals AS a -- テーブル名もASを使用して置き換え可能(JOINするときに毎回入れると大変)
INNER JOIN work_group w -- こちらもASは省略可能
ON
a.group_code = w.group_code;

+----------+--------------------+------------+------------------+
| 社員番号 | 社員名             | 部署コード | 部署名           |
+----------+--------------------+------------+------------------+
|        1 | アリクイ           |          2 | システム開発部   |
|        2 | チベットスナギツネ |          2 | システム開発部   |
|        3 | マヌルネコ         |          3 | サポートセンター |
|        4 | ハダカデバネズミ   |          1 | 営業部           |
|        5 | ホンドギツネ       |          3 | サポートセンター |
+----------+--------------------+------------+------------------+

昇順降順でソートする

試しに入社日(join_day)を起点にして昇順降順でソートをかけてみます。 SELECT カラム FROM テーブル名 ORDER BY 並び変える基準になるカラム 

SELECT * FROM animals
ORDER BY
join_day;

+----+--------------------+------------+------------+------------+
| id | name               | group_code | join_day   | out_day    |
+----+--------------------+------------+------------+------------+
|  5 | ホンドギツネ       |          3 | 2010-12-01 | 1111-11-11 |
|  3 | マヌルネコ         |          3 | 2017-06-01 | 1111-11-11 |
|  4 | ハダカデバネズミ   |          1 | 2017-06-01 | 2022-03-31 |
|  1 | アリクイ           |          2 | 2019-04-01 | 1111-11-11 |
|  2 | チベットスナギツネ |          2 | 2019-05-01 | 1111-11-11 |
|  6 | オオサンショウウオ |          5 | 2022-06-01 | 1111-11-11 |
+----+--------------------+------------+------------+------------+

カラムを指定した後にDESCと入力することで降順での表示が可能になります。

SELECT * FROM animals
ORDER BY
join_day DESC;

+----+--------------------+------------+------------+------------+
| id | name               | group_code | join_day   | out_day    |
+----+--------------------+------------+------------+------------+
|  6 | オオサンショウウオ |          5 | 2022-06-01 | 1111-11-11 |
|  2 | チベットスナギツネ |          2 | 2019-05-01 | 1111-11-11 |
|  1 | アリクイ           |          2 | 2019-04-01 | 1111-11-11 |
|  3 | マヌルネコ         |          3 | 2017-06-01 | 1111-11-11 |
|  4 | ハダカデバネズミ   |          1 | 2017-06-01 | 2022-03-31 |
|  5 | ホンドギツネ       |          3 | 2010-12-01 | 1111-11-11 |
+----+--------------------+------------+------------+------------+

属性ごとにデータの件数や最大値、最小値、平均値、合計値で集計する

①FROM テーブル名 GROUP BYで合計や件数などで集計したいカラムを選択する ②集合関数でどうやってまとめるかを指定する 集合関数はSELECTでカラムを指定する時に集合関数(カラム名)で使用することができます。 集合関数は以下の通り COUNT:GROUP BYで指定したカラムの各データが何件あるかを表示する MAX:GROUP BYで指定したカラムの各データの中で最大のものを表示する MIN:GROUP BYで指定したカラムの各データの中で最小のものを表示する AVG:GROUP BYで指定したカラムの各データの平均値を表示する SUM:GROUP BYで指定したカラムの各データの合計を表示する

試しに以下のSQLを実行してみましょう。

SELECT 
group_code, -- 部署ごとで
MAX(join_day)-- MAX(join_day)で入社日が一番大きい(最近入社した)社員を表示する
FROM animals
GROUP BY
group_code;

+------------+---------------+
| group_code | MAX(join_day) |
+------------+---------------+
|          2 | 2019-05-01    |
|          3 | 2017-06-01    |
|          1 | 2017-06-01    |
|          5 | 2022-06-01    |
+------------+---------------+

これで各部署で入社日が一番大きい(最近入社した)社員を表示することができました。 (若干見栄えが悪いですが…)

せっかくなので最後にGROUP BYとORDER BYを組み合わせてgroup_code順に並び変えてみましょう。

SELECT 
group_code, -- 部署ごとで
MAX(join_day)-- MAX(join_day)で入社日が一番大きい(最近入社した)社員を表示する
FROM animals
GROUP BY
group_code
ORDER BY -- ORDER BYでgroup_code順に並び変える
group_code;

+------------+---------------+
| group_code | MAX(join_day) |
+------------+---------------+
|          1 | 2017-06-01    |
|          2 | 2019-05-01    |
|          3 | 2017-06-01    |
|          5 | 2022-06-01    |
+------------+---------------+

本日はここまで! 使用頻度が高い操作ばかりなのでぜひマスターしてみてください!

【雑記】家の鍵を落として死ぬほど焦った話

 

タイトルそのまんまです。

普段は技術系ブログもどきをやってますが備忘録と同じような事で悩んだ方の役に立てばと思ったので書いていきます。

 

紛失に気づくまで

日曜日に近所の整体で体をほぐしたついでにATMで共用口座への生活費の入金や駅での定期の更新、最後にスーパーでの買い物を終えてアパートの前で鍵を無くしたことに気づきました。


出かけるときに鍵を締め忘れたかと思いましたが帰宅すると鍵はしっかり締まっていたため妻に開けてもらうことでなんとか家には入れました。(幸運1)

 

まずは心当たりのある店と通った道を探すも成果は無く……

スーパーやコンビニでは私以外の人が落とした鍵が結構保管してあったのでもしそういうお店に立ち寄った際に落としたかもしれない人は聞いてみてもいいかもしれないですね。

 

再度帰宅して疲れ果てたので探して出てこないものはもう仕方ないので、観念して鍵交換値段で調べまくると2万円前後という情報もあり、ヘコんで一晩を過ごしました。

 

一日経って

翌日もう一回立ち寄った店に届いてないか確認して駄目だったら諦めて不動産屋に相談して鍵交換しようと思いながら出勤。

 

キーケースに思い入れがあったので後日キーケースだけでも帰ってきたら良いと思い、翌日の通勤中に遺失物の届出をネットで申請(結構記入内容が多くて大変だったけど諦めずに出して良かった……)


昼休みも立ち寄ったお店に電話しましたが鍵は届いておらず、いよいよ駄目かと覚悟を決めたところ昼過ぎに警察署から電話。
「はいはい申請に不備があった連絡ね〜」と思って出たらそれらしき落とし物が届いているという連絡(幸運2)

 

電話の内容はだいたいこんな感じ
・それっぽいのが届いてます
・所管の警察署は落とし物担当は会計課
・受け取れるのは平日午前9時から夕方4時15分まで(確か)
・発行された落とし物番号(自分は4桁だった)
・預かっていられるのは3ヶ月ぐらいなので注意
・身分証明書と鍵番号と鍵の形で照合するので(あれば)スペアキーが必要

 

落とし物の受け取り

平日しか担当課が対応していないのは残念でしたが、有給がかなり余っているので有給を使用して後日警察署を訪問。

 

鍵を落としたとき聞かれたことはこんな感じ
・基本的には申請した情報の再確認
・電話で教えてもらった落とし物番号
・住所氏名
・落としたもの
・キーケースブランド種類
・キーボードケースについてる鍵の本数
・何の鍵か(自宅・車など)
スペアキーがあれば鍵の番号
・他の特徴(不動産屋が貼ったシールがそのままだったので→シール色と文字の色も聞かれた)

 

情報を伝えるとだいたい5分ぐらいでキーケースが出てきました。
最後に免許証で本人確認をしてから書類に住所氏名連絡先を書いて手続き終了!

 

お礼について

ネットで調べると「遺失物法28条で遺失物のお礼は5〜20%相当の金品を拾得者に支払う義務がある」と定められてるたのことだったので、受け取り時に拾ってくれた方の事を聞こうと思っていましがお礼や届いた連絡は不要と言われてたとのことで拾ってくれた方の情報は不明でした。
(個人情報の絡みもあるから教えたくない人もいますよね)

拾った方にはお礼を請求する権利があるようなので、お礼を希望されている場合は連絡してお礼について話をした方が無難化かと思います。

 

鍵交換しなくなって済んだ分とキーケース代のお礼でクオカード送ろうと思ってたけど買わなくて良かった……

どこで拾ったかの○丁目☓番地付近で拾われたぐらいの情報は教えてもらえましたが普通に道中で落としていたことぐらいしかわかりませんでした。

 

グーグルマップの評価が★2.0割ってて心配したけど親切に対応してもらえたので良かったです。
警察署というだけで評価低くなるから大変ね……

 

落とし物をしたら諦めずにまずは届出!

 

念のため遺失物の公表ページを見てみるのもいいと思います。

www.npa.go.jp

 

それではここまでご覧いただきありがとうございました。

【SQL入門編】テーブルに情報を追加して結合(JOIN)してみよう~実践編~

前回まででデータを追加してテーブル同士を結合する準備ができたので早速作業をしてみましょう。

db-arikui.hatenablog.com

内部結合(INNER JOIN)の書き方以下の通りです。 カラムを指定するときにテーブル名をつけないとどのテーブルのカラムを表示したらいいかわからなくなってエラーが出てしまうので要注意。 SELECT 表示したいカラム名1(テーブル名.カラム名), 表示したいカラム名2(テーブル名.カラム名), 表示したいカラム名3(テーブル名.カラム名), ・ ・ FROM テーブル1 INNER JOIN テーブル2 ON テーブル1のキーになるカラム1 = テーブル2のキーになるカラム;

※今回はanimalsのgroup_codeとwork_groupのgroup_codeが一致するものを表示しています。  animalsのgroup_codeが2の時はwork_groupのgroup_codeが2のシステム開発部が表示されます。

今回はあえてanimalsテーブルのgroup_codeとwork_groupのgroup_code両方を表示してみました。

SELECT 
animals.id,
animals.name,
animals.group_code,
work_group.group_name 
FROM animals
INNER JOIN work_group
ON
animals.group_code = work_group.group_code;

+----+--------------------+------------+------------+------------------+
| id | name               | group_code | group_code | group_name       |
+----+--------------------+------------+------------+------------------+
|  1 | アリクイ           |          2 |          2 | システム開発部   |
|  2 | チベットスナギツネ |          2 |          2 | システム開発部   |
|  3 | マヌルネコ         |          3 |          3 | サポートセンター |
|  4 | ハダカデバネズミ   |          1 |          1 | 営業部           |
|  5 | ホンドギツネ       |          3 |          3 | サポートセンター |
+----+--------------------+------------+------------+------------------+

前回の最後に追加したidが6のオオサンショウウオさんが表示されていないことがわかるかと思います。 これは不具合やSQLの誤りではなくwork_groupテーブルにオオサンショウウオさん属している部署の情報(group_code,group_name)がないため表示されていないものになります。 INNER JOINは対応するデータが無い場合は非表示になる!

さて、勘のいい方はお気づきかと思いますが内部結合があるということは外部結合もあります。 外部結合はINNER JOINの部分をLEFT(RIGHT)JOINで行えます。

SELECT 
animals.id,
animals.name,
animals.group_code,
work_group.group_code,
work_group.group_name 
FROM animals
LEFT JOIN work_group
ON
animals.group_code = work_group.group_code;

+----+--------------------+------------+------------+------------------+
| id | name               | group_code | group_code | group_name       |
+----+--------------------+------------+------------+------------------+
|  1 | アリクイ           |          2 |          2 | システム開発部   |
|  2 | チベットスナギツネ |          2 |          2 | システム開発部   |
|  3 | マヌルネコ         |          3 |          3 | サポートセンター |
|  4 | ハダカデバネズミ   |          1 |          1 | 営業部           |
|  5 | ホンドギツネ       |          3 |          3 | サポートセンター |
|  6 | オオサンショウウオ |          5 |       NULL | NULL             |
+----+--------------------+------------+------------+------------------+

-- RIGHT JOINだと左右が入れ替わると思いきやレコードの順番が変わりました。

+------+--------------------+------------+------------+------------------+
| id   | name               | group_code | group_code | group_name       |
+------+--------------------+------------+------------+------------------+
|    4 | ハダカデバネズミ   |          1 |          1 | 営業部           |
|    2 | チベットスナギツネ |          2 |          2 | システム開発部   |
|    1 | アリクイ           |          2 |          2 | システム開発部   |
|    5 | ホンドギツネ       |          3 |          3 | サポートセンター |
|    3 | マヌルネコ         |          3 |          3 | サポートセンター |
| NULL | NULL               |       NULL |          4 | 管理部           |
+------+--------------------+------------+------------+------------------+

外部結合(LEFT or RIGHT JOIN)は優先するテーブルを一つ決めて、そのにある情報はすべて表示したまま対応するデータが結合したテーブルにあれば表示するということ……らしいです。 LEFT JOINでは従業員のanimalsテーブルが基準になっていたのでidが順にデータが並んでいましたが、RIGHT JOINでは部署のwork_groupテーブルが基準になっているのでgroup _codeが基準になってJOINした結果が表示されています。 ほとんどRIGHT JOINを使うケースはないかと思いますが知識として知っておくのがいいと思うので頭の片隅にでも置いといていただければ幸いです。

カラムの表示順を変えたいときはSELECTでカラムを指定するときに表示したい順番で記述することで好きな順番で表示することができます。

長くなりましたが今回はここまで! テーブルの結合(JOIN)とLEFT JOINとRIGHT JOINの違いについてでした。 結合はとても重要なのでぜひマスターしてください!

【SQL入門編】テーブルに情報を追加して結合(JOIN)してみよう~準備編~

いままで簡単なテーブルを作成や、テーブルの基本設定について説明しましたこれだけだと「やってることはわかるけど何の役に立つの?」と思われた方もいらっしゃるかと思います。

なので今回からはSQLで色々な操作をしていきます。

目標は作成したテーブルにデータを追加して、別のテーブルと結合して必要な情報を表示できるまで何回かに分けて練習してみましょう。 ↓イメージはこんな感じ

まずは過去に作成したテーブルに情報を追加していきます。

db-arikui.hatenablog.com

名前(name)のカラムの後ろに部署コードを追加していきます。

以下の ALTER TABLE テーブル名 ADD 追加するカラム名 型情報 AFTER 既存カラム名;

ALTER TABLE animals ADD group_code int(2) AFTER name;

最初のカラムに追加 ALTER TABLE テーブル名 ADD 追加するカラム名 データ型 FIRST;

INSERT INTO animals
VALUES
(3, 'マヌルネコ', 3, "2017-06-01",default),
(4, 'ハダカデバネズミ', 1, '2017-06-01','2022-03-31'),
(5, 'ホンドギツネ', 3, "2010-12-01",default);

defaultでこの前設定したデフォルトの値が呼び出されます。 SELECT文でテーブルの中身を確認してみましょう。

SELECT * FROM animals;

既存のレコードで新しく追加したカラムが空欄になってしまっているのでこちらを埋めてみましょう。 今回はSQLではなくWorkbenchの機能で直接編集してみます。 やり方は簡単です。

空欄になっていたところに数字を入れて「Apply」をクリック。 ポップアップが出てきたらもう一度「Apply」をクリックして最後に「Finish」をクリックして終了です。

実はここで直接編集した内容を反映したSQLを自動が自動で作成されて実行されています。

それではこのまま二つ目のテーブルに作ってしまいましょう! テーブルの作成は過去にやっている内容なので細かい説明は割愛します。

CREATE TABLE work_group(
  group_code int,group_name varchar(10));

テーブルができたらデータを追加しましょう。

INSERT INTO work_group
VALUES
(1, '営業部'),
(2, 'システム開発部'),
(3, 'サポートセンター'),
(4, '管理部');

SELECTで新しく作ったテーブルの内容を確認しましょう!

SELECT * FROM work_group;

ここで終わりにしようと思いましたが結合(JOIN)の説明で必要なので例えば新しい部門の責任者としてオオサンショウウオさんが来月入社してくるけど、新部門の情報がまだ決まっていない場合を想定してみましょう。 とりあえず部門コードを5にして部署名を検討しているパターンを想定してみます。(本当にそういうパターンがあるかは置いといて)

まずは従業員(animals)のテーブルを編集してオオサンショウウオさんを追加していきましょう。 (もうこのあたりの操作はなれたものかと思いますが下記SQLで追加できます)

INSERT INTO animals
VALUES
(6, 'オオサンショウウオ', 5, "2022-06-01",default)

お疲れさまでした。今回はここまで!

次回はテーブル同士を結合させてみます。 次回 db-arikui.hatenablog.com

【SQL入門編】作成したテーブルに色々な設定をしてみよう

前回作ったテーブルに情報を追加する前に、色々と細かい設定をしていきたいと思います。

前回の記事はこちら db-arikui.hatenablog.com

今回は以下の設定を行います。 ・IDのカラムに重複を排除する設定をする ・退社日のカラムのデフォルト値を1111-11-11で設定する

PRIMARY KEY(主キー)の設定

主キー設定方法は以下の通りです。 ALTER TABLE テーブル名 ADD PRIMARY KEY(列名);

PRIMARY KEY(主キー)とは?

PRIMARY KEYは(主キー)とは、テーブルに登録するレコード(データ行)の全体のうち、ひとつのデータに特定することをデータベースが保証する列のこと……というと難しい 主キーに設定するカラムは一意であり、Nullがあってはいけない……これでもちょっとまだ難しいですね

例えば、今回のように従業員テーブルに「社員ID、氏名、部署コード、入社日、退社日」の項目があるとして、 「社員ID」がわかると一人の従業員の情報を簡単に特定できるようになります。 そして「社員ID」は重複も空白もあり得ないカラム(一意)なので条件を満たしている……というイメージです。 こういったカラムをPRIMARY KEYに設定することが多いようです。

ポイント 社員IDは重複しておらず(一意)、空白(Null)ではないため設定ができる ただし一つのテーブルに一つしか設定できない。 主キーを作成すると自動的にインデックスが貼られる(知らなかった…)

当然ですが、PRIMARY KEYを設定した列は重複するデータを登録できなくなります(NULL値も登録できない)。 また、PRIMARY KEYを設定すると「どこに何が登録されているか?」を探すためのインデックスと呼ばれる情報が自動的に作成されます。

主キー以外にもUNIQUEキーを設定することができますが、今回主キーで設定したいと思います。 ・重複を許さない(e-mailアドレスや電話番号を入力するとき便利) ・Nullは許容する ・複数のカラムで設定が可能

補足:インデックスとは? データベースにおけるインデックスとは、目的のレコードを効率よく取得するための「索引」のことです。 インデックスを貼ることででテーブルを本に例えると、アリクイの情報は社員の本のページ1のように検索しやすくなる(データが増えたときに検索が早くなる) 本当はもっと細かい内容もありますが、今回は本当に軽くそういものもあるぐらいの感覚でOKです。

主キー設定

ALTER TABLE テーブル名 ADD PRIMARY KEY(列名); ALTER TABLEはテーブル自体の構造とか設定を変更するときに使うことが多いです。

ALTER TABLE animals ADD PRIMARY KEY(id);
テーブルのデフォルト値を設定

以下のSQLでカラムにデフォルトの値を設定することができます。 設定しておけばレコードを追加したときにいちいち入力しなくてもデフォルト値を入れてくれます。 ALTER TABLE テーブル名 COLUMN カラム名 SET DEFAULT 設定する値 ;

ALTER TABLE animals ALTER COLUMN out_day SET DEFAULT '1111-11-11' ;
-- ※設定前に作成されたレコードで既にNULLになっているカラムはそのまま残る

テーブルの設定を確認すると…… DESC テーブル名;

DESC animals;

idのKeyの所にPRIとout_dayのDefaultの所に先ほど設定したデフォルト値が入っていればOK!

最初にこういった細かい設定をしておくと後々作業の手戻りが少なくて便利なのでぜひマスターしてみてください! 設定内容も不要であれば削除することができるので練習だと思って挑戦してみましょう!

【資格試験】Pythonのインデックス&スライスとfor文の書き方についての整理

普段はデータベース関係の初心者向け記事を書いていますが、Pythonエンジニア認定試験に申し込みをしたので備忘録も兼ねてつまづきポイントを整理していきたいと思います。 未経験者や初心者は同じような所でつまづくかもしれないので、役に立てば幸いです。

インデックスの基本

シーケンス(順番に並んだ一続きのデータ)内の要素を返す 先頭を指定するときは0番目で末尾は-1番目になる

0番目が先頭になるのはインデックスがどこに配置するかと考えるとわかりやすい(要素の間) 〇番目の隙間にインデックスが来るのでそこを起点に何番目と考える。

#文字列
name = "abcdefghijklmnopqr"
print(name[3])
#実行結果:d

#リスト
num = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
print(num[3])
#実行結果:4

name[3]の[3]でインデックスを指定しています。

スライスとfor文のrange関数の違い

スライスはシーケンスの一部をインデックスを指定して取り出すそうさである

name = "abcdefghijklmnopqr"
print(name[1:10])
#実行結果:bcdefghij
#インデックスが0ではなく1~なのでbからになる

終了位置の省略
name = "abcdefghijklmnopqr"
print(name[1:])
#実行結果:bcdefghijklmnopqr

開始位置の省略(最初から)
name = "abcdefghijklmnopqr"
print(name[:10])
#実行結果:abcdefghij

全体を取得
name = "abcdefghijklmnopqr"
print(name[:])
#実行結果:abcdefghijklmnopqr
name = "abcdefghijklmnopqr"
print(name[0:15:3])
#実行結果:adgjm

最後の例は15番目はpなので表示されるのでは?となりそうなので要注意です。 Pythonチュートリアルに記載のとおり、以下のように考えるとわかりやすくなる。 https://docs.python.org/ja/3/tutorial/introduction.html#strings

ちょっと汚いですがイメージはこんな感じです。

インデックスは文字と文字の間(between)を指しており、最初の文字の左端が0になっている ()で括ったアルファベットが0を基準に3飛ばしで取得できるアルファベットです。 pはスライスの範囲から外れているため表示されない。

書き方がfor文と似ていてつまづいたポイント

スライスとfor文で3ずつ表示した時の処理はこちら。(書き方は似ているのが意味が違う) for 変数 in range(stop) 変数はiで設定することが多い。 0<=i<終了(range()で指定した数値は『含まない』)

for i in range(3,15,3):
    print(i, end=", ")
#実行結果[3, 6, 9, 12]

i>=15になるまで処理を継続(iは3ずつ増えている)なので実行結果は15は含まない

num = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
print(num[3:15:3])
#実行結果[3, 6, 9, 12]

おまけ 1から始まるリストだとこうなる

num = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
print(num[3:15:3])
#実行結果[4, 7, 10, 13]

その他の細かい補足 0と-0は区別がつかない(そもそも-0という考え方がおかしい?)ので設定不可

インデックスに負の値を指定した場合は右から〇番目でスライスする

name = "abcdefghijklmnopqr"
print(name[-10:])
実行結果:ijklmnopqr

公式チュートリアルが初学者にはかなり難しい言い回しなので今後もこう言った自分なりの理解について記事を書いていこうと思いますので、よろしくお願いします。

【入門編】黒画面からの脱却~MySQL Workbenchを使ってみよう~

いままで黒い画面のコマンドラインツールでSQLを練習してきましたが、使ってみて色々と気になる点が出てきたかと思います。

・途中で入力ミスに気づいたときに戻って修正するのが大変…… ・せっかくSQLを書いたけど保存されないから見直しができない…… ・実行結果が分かりにくい…… などなど勉強する意欲がなくなるようなことが多いですね。

しかしこれらの問題を解決してくれるツールがMySQLには存在し、 実はMySQLをインストールする際に皆さんのPCにもすでにインストールが完了しているのです!

その名もMySQL Workbenchです! 公式ホームページによると「MySQL Workbench は、データベースアーキテクト、開発者、DBA のための統合ビジュアルツールです。」とのこと。 とりあえず今はSQLを書いたりデータベースの操作を手助けしてくれる便利なツールだと思っていただければ大丈夫です。

www.mysql.com

残念ながらこちらのWorkbenchは日本語対応していないので私と一緒に勉強していきましょう! (日本語で使えるようにしている方々はいるのですが、正攻法とは言い難いっぽいです)今回は「最低限これができれば勉強を進められる」という以下の二点についてスクショを用意したので順番に説明していきます。 ①SQLを書いて実行する ②書いたSQLを保存する

まずはWorkbenchを起動しましょう。

起動したら青枠の所をクリック!

クリックしたらポップアップが表示されるので少し待ちます。

こんな感じの画面が表示されればOK

左の方にある+マーク付きのアイコンをクリックするとSQLを書けるエディタが表示されます。 (最初から表示されている場合はこの操作は不要です)

それではエディタの所にSQLを書いてみましょう。 USEデータベース名で使用するデータベースの選択と、SELECT * FROM テーブル名でテーブルの全データを表示してみましょう。 ↓のSQLを書いたら稲妻のマークをクリック! (今回はせっかくなので二つののSQLを同時に実行してみました)

USE animal;

SELECT * FROM animals;

前回作成したテーブルの内容が表示されるはずです。

それでは今回作成したSQLを保存してみます。 フロッピーのアイコンをクリック!

ドキュメントのフォルダが開かれるので、ここにMySQLとか名前を付けたフォルダを作成してダブルクリック。

SQLに名前を付けて保存するといつても呼び出せるようになります。

試しに呼び出してみましょう。 左上「File」をクリックしたら「Open SQL Script」をクリックするとフォルダが開きます。

先ほど保存したtestがあることが確認できます。 こちらを選択して「開く」をクリックすればOK!

いかがでしょうか? 前回に比べるとずいぶん作業しやすくなったかと思います。 db-arikui.hatenablog.com

引き続きデータベース初学者向けの内容を発信していきますのでよろしくお願いします。