🐧

【新人向け】データベースと SQL を勉強してみよう

2023/03/31に公開

こんにちは。地図パズル製作所の都島です。桜の季節になりましたね。一年が過ぎ去るのが早いこと。。。明日から新しい年度が始まりますね!

ということで、4月から IT 業界に入ってくる新人の方々に向けて、データベースと SQL に関する簡単な資料を作ってみました。学校でプログラミングを勉強していた方向けというよりは、そういういことを全く勉強していなかった方向けです!

ただ、私も分かっていないことがいろいろありますし、間違っていることや個人的な考えも含まれていると思いますが、、、そういう点があれば、コメントで指摘していただければと思います!

データベースとは

データベースとは簡単に言うと、データをちゃんと決まりを決めてコンピューターなどに保存したものです。データベースにはいろいろな種類があります。リレーショナルデータベース、列指向データベース、ドキュメント型データベース、、、いろいろあります。

そんないろいろな種類があるデータベースですが、IT 業界に入りたての方でしたら、「リレーショナルデータベース」だけ覚えておけばいいと思います。リレーショナルデータベースとは、

ID(id) 会社名(name) 住所(address)
1 日本ユニテック 東京都港区〇〇町1-1-1
2 麻布プロデュース 東京都港区〇〇町2-2-2
3 地図パズル製作所 大阪府大阪市都島区××町1-1-1

とか、こんな表みないな感じでデータを保存するデータベースです。

・・・いや、本当はもっと複雑なんですが、最初はこんなイメージでいいと思います。

演習問題1

(目安時間: 10分)
データベースにはどのような種類があるのか調べてみましょう!

データベースを動かしてみよう

データベースについては、基礎の基礎がわかったと思います。本当はもっとたくさん伝えたいことがあるのですが、習うより慣れろということで、リレーショナルデータベースを触っていきたいと思います!

今回は Docker Desktop を使ってリレーショナルデータベースの代表格、 MySQL を動かしてみようと思います。まだ、Docker Desktop をインストールしていない方はこちらからインストールしてくださいね。

https://www.docker.com/products/docker-desktop/

あと、MySQL Workbench も使います。これはデータベースを操作するためのものです。「データベースクライアント」と言ったりします。こちらからダウンロードして、インストールしてください。

https://www.mysql.com/jp/products/workbench/

ここでは、Docker Desktop と MySQL Workbench の詳細なインストール方法は省きたいと思います。

では、二つともインストールできたでしょうか?できたら早速 MySQL を動かしてみましょう!コマンドプロンプトか、Powershell を開いて、以下のコマンドを実行してみてください!!

docker run --name mysql-test -e MYSQL_ROOT_PASSWORD=mysql -d -p 3306:3306 mysql

コマンドがエラーなく実行されましたか?これでじつはもうデータベースが動いているんです。いやー、簡単でしたね。じつは、これは Docker という技術を使っているからこんなに簡単にできるんです。また、Docker については別の機会に説明できたらと思います。

MySQL にアクセスする

では、次に MySQL Workbench で MySQL にアクセスしてみましょう。

MySQL Workbench を開いてください。開いたら、赤枠で囲んだ+マークを押してください。

MySQL Wrokbench のホーム画面

そしたら次のように表示されますね。

コネクションの追加

次に赤枠の部分に "Test" と入力します。

コネクション名の入力

次に "Store in Vault" を押して、パスワード "mysql" を入力します。

Store in Vault

パスワードの入力

これで、二回 "OK" を押したら、作成した "Test" コネクションをクリックしてアクセスしてみましょう。

Test コネクションにアクセス

そうすると、こんな画面が表示されるはずです。

コネクションの画面

これで、MySQL にアクセスできました!!

データベースの作成

MySQL にアクセスできたら、まず、今回利用するデータベースを作成します。次のように入力してください。

create database test;

このよく分からない英語の文字、これを「SQL」と言います。SQL とはリレーショナルデータベースを操作するための言語です。これは重要な語句なので、覚えておいてください。

では、先ほどの SQL を実行してみましょう。実行は下の画像の赤枠のボタンを押してください。

create の実行

これで、「test」データベースが作成されました!ここでいう「データベース」とはエクセルの「ファイル」のようなものだと思ってください。エクセルの中にはいくつか「シート」(下のタブで切り替えられるの)があって、その中にデータがありますよね。エクセルでいう「シート」がデータベースでいうテーブル(表)です。そのテーブルがいくつもあつまったのが、データベースになるわけです。

今作成した「test」データベースを確認するには、左側の「Schemas」を押します。

test データベースの確認

データベースができているのが確認できましたね!

データベースが作成されている

では、今作成した test データベースに接続してみましょう。
メニューから、[Database] > [Connect to Database] と選択します。

test データベースへの接続

スキーマとして「test」と入力して、「OK」を押します。

test データベースへの接続2

↓の画面になりましたら、test データベースへの接続完了です!

test データベースへの接続完了

テーブルの作成

では、次は作成した test データベースにテーブルを作成してみましょう。今から作る会社(company)テーブルはこんな感じです。

ID(id) 会社名(name) 住所(address)
1 日本ユニテック 東京都港区〇〇町1-1-1
2 地図パズル製作所 大阪府大阪市都島区××町1-1-1
3 麻布プロデュース 東京都港区〇〇町2-2-2

まずは、データはなしで、このテーブルの「スキーマ」を作成しましょう。スキーマとはこのテーブルがどんな形をしているか、というものです。「会社テーブルのスキーマ」というと「ID」カラムがあってそれには数字が入っていて、「会社名」カラムがあってそれには文字列が入っていて、、、ということを言います。

あ、そういえば、「カラム」というのを何か説明していませんでしたね。「カラム」とは日本語でいうと「列」ですが、上の表の列のことを言っています。ID、会社名、住所など同じ種類のデータ保存されています。

それに対して、行は「ロウ」ではなくて、「レコード」と言います。この二つも重要なので覚えておきましょう!

ということで、以下のコマンドを実行して 会社テーブルを作成してみましょう!

create table company(
	id int primary key auto_increment, 
	name varchar(100) not null, 
	address varchar(200)
);

この文字列も、もちろん SQL です。上の SQL を入力して、実行すると、下に結果が表示されます。成功していますね!

create table の実行

テーブルが作成できていることは、左側の「Schemas」から確認してくださいね。

テーブルが作成されていることの確認

では、先ほどの SQL を解説していきましょう。と思ったのですが、この SQL がどのような意味なのかというのを調べるのは演習問題にしましょう!プログラマは誰かに聞いて学ぶことも大事ですが、自分で調べてみるのもとても大事です!

演習問題2

(目安時間 合計20分)

create table company(
	id int primary key auto_increment, 
	name varchar(100) not null, 
	address varchar(200)
);

上の SQL がどういう意味を持つのか調べてみましょう。Google で「SQL create table」などと調べてみてもいいですね。特に以下の語句がどういう役割なのか調べてみましょう。

  • create table
  • int
  • primary key
  • auto_increment
  • varchar(100)
  • not null

データの挿入と確認

では、次にデータの挿入をします。次の SQL を実行してみてください。

insert into company(name, address) 
	values("日本ユニテック", "東京都港区〇〇町1-1-1");

insert の実行

挿入できましたね!

演習問題3

  • 先程の insert 文がどういう意味なのか調べましょう。
  • 先程の insert 文では name カラムと address カラムを指定しましたが、id カラムを指定しなくていいのは、なぜでしょうか?調べてみましょう。演習問題2をきちんと調べて方は、すぐに分かるかもしれません。
  • 以下のテーブルの ID=2 と ID=3 のデータも挿入してみましょう。
ID(id) 会社名(name) 住所(address)
1 日本ユニテック 東京都港区〇〇町1-1-1
2 麻布プロデュース 東京都港区〇〇町2-2-2
3 地図パズル製作所 大阪府大阪市都島区××町1-1-1

データの確認

では、次に挿入したデータを確認してみましょう。

このような SQL を実行してください。

select * from company;

そうすると、次のように表示されますね。

Select の実行

ちなみに、先ほどの SQL は次のように書いても同じ結果になります。

select id, name, address from company;

演習問題4

先程の SQL がどのような意味か調べましょう。

演習問題5: データの更新、削除、テーブル削除

  • 地図パズル製作所の住所を「岩手県宮古市〇〇町1-1-1」に書き換えてみましょう。書き換える SQL 調べてみましょう。
  • 会社テーブルから地図パズル製作所を削除してみましょう。削除する SQL も Google などで調べてみましょう。
  • 先程作成した company テーブルを削除してみましょう。こちらも調べてみましょう。

演習問題6

  • 一度 MySQL Workbench を閉じてから再度開きなおして、MySQL の test データベースに接続してみましょう。
  • 下のような 部署(department)テーブルを作成し、データを投入し、データの取得・更新・削除を試してみましょう。
ID(id) 会社ID(company_id) 部署名(name)
1 1 人事部
2 1 営業部
3 1 総務部
4 1 翻訳部
5 1 開発部
6 2 人事部
7 2 総務部
8 2 翻訳部
  • 上の部署テーブルから select 文を使って、下のような「日本ユニテック」の部署一覧を表示してみましょう。
ID(id) 部署名(name)
1 人事部
2 営業部
3 総務部
4 翻訳部
5 開発部

※ヒント: where というのを使います。

演習問題7: 外部キー

部署(department)テーブルの会社ID(company_id)カラムは会社(company)テーブルの ID カラムの値のみが設定できます。こういうときには、「外部キー」というものを使います。

  • 「外部キー」の設定方法を調べて、設定してみましょう。

テーブルの結合

データベースを使っていると複数のテーブルから新しいリストを作りたくなることがあります。例えば、これまで作ってきた会社(company)テーブルと部署(department)テーブルから下のような会社名と部署名の対応付けを作りたくなることがあります。

会社名 部署名
日本ユニテック 人事部
日本ユニテック 営業部
日本ユニテック 総務部
日本ユニテック 翻訳部
日本ユニテック 開発部
麻布プロデュース 人事部
麻布プロデュース 総務部
麻布プロデュース 翻訳部

この場合、以下のような SQL を実行します。

select c.name, d.name 
	from company as c 
		inner join department as d 
	on c.id = d.company_id

では、テーブルの結合に関して演習問題をやってみましょう!

演習問題8

  • 先ほどのテーブル結合の SQL について、以下がそれぞれどういう意味か調べてみましょう。
    • as
    • inner join
    • on
  • 新しく社員データをデータベースで管理することになりました。テーブル名はユーザー(user)です。ユーザーテーブルでは、以下の情報が必要です。スキーマ設計をしてみましょう。
    • ID
    • ユーザーがどの部署に所属しているか(ユーザーは一つの部署にのみ所属する)
    • ユーザーの名前
    • ユーザーのメールアドレス
  • スキーマ設計ができたら、スキーマを DB 設計書に書いてみましょう。先輩から DB 設計書のサンプルをもらいましょう。あまり話したことのない先輩から仲良くなるのもかねてもらってみるのもいいですね。
  • テーブル結合を用いて部署とユーザー名のリストを表示してみましょう。
  • テーブル結合を用いて会社名、部署名、ユーザー名のリストを表示してみましょう。
  • ユーザーが複数の部署に所属することができる場合のスキーマを考えて DB 設計書に書いてみましょう。また、「正規化」について調べて、自分が作ったスキーマが正規化されているか確認してみましょう。

演習問題9: 集計関数

  • 集計関数とは何なのか調べてみましょう。
  • SQL で部署ごとのユーザー数を取得してみましょう。
  • SQL で会社ごとのユーザー数を取得してみましょう。
  • 集計関数にはどのような種類があるか調べましょう。

演習問題10: ユニークキー、インデックス

  • ユニークキーは何か調べましょう。メールアドレスは世界に一つしかありませんので、ユーザーテーブルのメールアドレスカラムはユニークキーを設定しましょう。
  • インデックスとは何か調べましょう。会社名カラム、部署名カラム、ユーザー名カラムにインデックスを設定してみましょう。

終わりに

今日は IT 業界未経験の新人の方たちに向けて、データベースと SQL の解説をまとめました!新人の皆さん、応援しています!

最後に地図パズル製作所の宣伝をします!地図パズル製作所は地図パズルで遊べて、大人でも楽しめるウェブサイトです。ぜひ一度遊んでみてください!

https://chizu-puzzle.com

Discussion