複数テーブルからなるデータベース

今日は、『実践Pythonによるデータベース入門』の4.2節 "複数テーブルからなるデータベース"で学んだことをアウトプットします。

【例題4.1】

SQL命令文を用いて以下の要求を実現し、それをMySQL上で実行し、動作作確認せよ。

仕様要求
(1)データベースjikanwaribaseを作成する
(2)表4.13の構成でテーブルgakuseiを作成して、表4.10のデータを入力する。

画像1

(3)表4.14の構成でテーブルkamokuを作成して、表4.11のデータを入力する。

画像2

(4)表4.15の構成でテーブルrishuを作成して、表4.12のデータを入力する。

画像3

(5)作成したテーブルgakusei, kamokuとrishuの全件データを表示する。

【SLQ命令文】

(1)データベースjikanwaribaseを作成する

mysql> CREATE DATABASE jikanwaribase;
Query OK, 1 row affected (1.58 sec)

mysql> SHOW databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| jikanwaribase      |
| mysql              |
| performance_schema |
| salesbase          |
| sys                |
| testbase           |
| todoufukenbase     |
| vsearchlogDB       |
+--------------------+
9 rows in set (1.04 sec)

(2)表4.13の構成でテーブルgakuseiを作成して、表4.10のデータを入力する。

画像1

まず、テーブルgakuseiを作成します。

mysql> USE jikanwaribase;
Database changed
mysql> CREATE TABLE gakusei(gakuseino CHAR(10), namae CHAR(20), kana CHAR(30));
Query OK, 0 rows affected (2.00 sec)

mysql> SHOW fields FROM gakusei;
+-----------+----------+------+-----+---------+-------+
| Field     | Type     | Null | Key | Default | Extra |
+-----------+----------+------+-----+---------+-------+
| gakuseino | char(10) | YES  |     | NULL    |       |
| namae     | char(20) | YES  |     | NULL    |       |
| kana      | char(30) | YES  |     | NULL    |       |
+-----------+----------+------+-----+---------+-------+
3 rows in set (0.08 sec)

表4.10のデータを入力します。

mysql> INSERT INTO gakusei VALUES ('80AB0001', '田中花子', 'たなかはなこ');
Query OK, 1 row affected (0.21 sec)

mysql> INSERT INTO gakusei VALUES ('80AB0002', '山田聡', 'やまださとし');
Query OK, 1 row affected (0.11 sec)

mysql> INSERT INTO gakusei VALUES ('80AB0003', '佐藤美那子', 'さとうみなこ');
Query OK, 1 row affected (0.12 sec)

mysql> INSERT INTO gakusei VALUES ('80AB0004', '鈴木博', 'すずきひろし');
Query OK, 1 row affected (0.15 sec)

(3)表4.14の構成でテーブルkamokuを作成して、表4.11のデータを入力する。

画像2

テーブルkamokuを作成します。

mysql> CREATE TABLE kamoku(kamokuno CHAR(10), kamokumei CHAR(30), kyouin CHAR(20), kyoushitsu CHAR(10), tani INT, youbi CHAR(10), jigen CHAR(10));
Query OK, 0 rows affected (1.31 sec)

mysql> SHOW fields FROM kamoku;
+------------+----------+------+-----+---------+-------+
| Field      | Type     | Null | Key | Default | Extra |
+------------+----------+------+-----+---------+-------+
| kamokuno   | char(10) | YES  |     | NULL    |       |
| kamokumei  | char(30) | YES  |     | NULL    |       |
| kyouin     | char(20) | YES  |     | NULL    |       |
| kyoushitsu | char(10) | YES  |     | NULL    |       |
| tani       | int      | YES  |     | NULL    |       |
| youbi      | char(10) | YES  |     | NULL    |       |
| jigen      | char(10) | YES  |     | NULL    |       |
+------------+----------+------+-----+---------+-------+
7 rows in set (0.01 sec)

表4.11のデータを入力します。

mysql> INSERT INTO kamoku VALUES ('C110', 'ネットワーク基礎', '小川', '2111', 2, '火', '1');
Query OK, 1 row affected (0.20 sec)

mysql> INSERT INTO kamoku VALUES ('C111', 'プログラミング入門', '川田', '2111', 2, '火', '2');
Query OK, 1 row affected (0.12 sec)

mysql> INSERT INTO kamoku VALUES ('C211', 'オペレーティングシステム', '山川', '1203', 2, '月', '3');
Query OK, 1 row affected (0.12 sec)

mysql> INSERT INTO kamoku VALUES ('C212', 'データベース', '大山', '1203', 4, '月', '2');
Query OK, 1 row affected (0.16 sec)

mysql> INSERT INTO kamoku VALUES ('C321', 'プロジェクト1', '前田', '1211', 2, '水', '3');
Query OK, 1 row affected (0.13 sec)

mysql> INSERT INTO kamoku VALUES ('C322', 'プロジェクト2', '大島', '1212', 2, '水', '4');
Query OK, 1 row affected (0.15 sec)

mysql> INSERT INTO kamoku VALUES ('T1022', '英語1', '島田', '3221', 2, '火', '2');
Query OK, 1 row affected (0.08 sec)

mysql> INSERT INTO kamoku VALUES ('T1023', '英語2', '島田', '3221', 2, '金', '2');
Query OK, 1 row affected (0.10 sec)

mysql> INSERT INTO kamoku VALUES ('T1211', '体育1', '前川', '体育館', 1, '水', '3');
Query OK, 1 row affected (0.14 sec)

mysql> INSERT INTO kamoku VALUES ('T1212', '体育2', '前川', 'グランド', 1, '火', '2');
Query OK, 1 row affected (0.08 sec)

(4)表4.15の構成でテーブルrishuを作成して、表4.12のデータを入力する。

画像3

テーブルrishuを作成します。

mysql> CREATE TABLE rishu(gakuseino CHAR(10), kamokuno CHAR(10));
Query OK, 0 rows affected (0.79 sec)

mysql> SHOW fields FROM rishu;
+-----------+----------+------+-----+---------+-------+
| Field     | Type     | Null | Key | Default | Extra |
+-----------+----------+------+-----+---------+-------+
| gakuseino | char(10) | YES  |     | NULL    |       |
| kamokuno  | char(10) | YES  |     | NULL    |       |
+-----------+----------+------+-----+---------+-------+
2 rows in set (0.00 sec)

表4.12のデータを入力します。

mysql> INSERT INTO rishu VALUES('80AB0001', 'C110');
Query OK, 1 row affected (0.10 sec)

mysql> INSERT INTO rishu VALUES('80AB0001', 'C212');
Query OK, 1 row affected (0.15 sec)

mysql> INSERT INTO rishu VALUES('80AB0001', 'T1022');
Query OK, 1 row affected (0.10 sec)

mysql> INSERT INTO rishu VALUES('80AB0001', 'T321');
Query OK, 1 row affected (0.14 sec)

mysql> INSERT INTO rishu VALUES('80AB0001', 'T1211');
Query OK, 1 row affected (0.13 sec)

mysql> INSERT INTO rishu VALUES('80AB0002', 'C211');
Query OK, 1 row affected (0.10 sec)

mysql> INSERT INTO rishu VALUES('80AB0002', 'C110');
Query OK, 1 row affected (0.13 sec)

mysql> INSERT INTO rishu VALUES('80AB0002', 'C321');
Query OK, 1 row affected (0.10 sec)

mysql> INSERT INTO rishu VALUES('80AB0002', 'T1211');
Query OK, 1 row affected (0.10 sec)

mysql> INSERT INTO rishu VALUES('80AB0002', 'T1023');
Query OK, 1 row affected (0.11 sec)

mysql> INSERT INTO rishu VALUES('80AB0003', 'C211');
Query OK, 1 row affected (0.09 sec)

mysql> INSERT INTO rishu VALUES('80AB0003', 'C110');
Query OK, 1 row affected (0.19 sec)

mysql> INSERT INTO rishu VALUES('80AB0003', 'T1212');
Query OK, 1 row affected (0.09 sec)

mysql> INSERT INTO rishu VALUES('80AB0003', 'C321');
Query OK, 1 row affected (0.10 sec)

mysql> INSERT INTO rishu VALUES('80AB0003', 'T1023');
Query OK, 1 row affected (0.09 sec)

mysql> INSERT INTO rishu VALUES('80AB0004', 'C211');
Query OK, 1 row affected (0.10 sec)

mysql> INSERT INTO rishu VALUES('80AB0004', 'C111');
Query OK, 1 row affected (0.15 sec)

mysql> INSERT INTO rishu VALUES('80AB0004', 'C322');
Query OK, 1 row affected (0.10 sec)

mysql> INSERT INTO rishu VALUES('80AB0004', 'C1212');
Query OK, 1 row affected (0.09 sec)

mysql> INSERT INTO rishu VALUES('80AB0004', 'C1023');
Query OK, 1 row affected (0.10 sec)

(5)作成したテーブルgakusei, kamokuとrishuの全件データを表示する。

mysql> SELECT * FROM gakusei;
+-----------+-----------------+--------------------+
| gakuseino | namae           | kana               |
+-----------+-----------------+--------------------+
| 80AB0001  | 田中花子        | たなかはなこ       |
| 80AB0002  | 山田聡          | やまださとし       |
| 80AB0003  | 佐藤美那子      | さとうみなこ       |
| 80AB0004  | 鈴木博          | すずきひろし       |
+-----------+-----------------+--------------------+
4 rows in set (0.05 sec)
mysql> SELECT * FROM kamoku;
+----------+--------------------------------------+--------+--------------+------+-------+-------+
| kamokuno | kamokumei                            | kyouin | kyoushitsu   | tani | youbi | jigen |
+----------+--------------------------------------+--------+--------------+------+-------+-------+
| C110     | ネットワーク基礎                     | 小川   | 2111         |    2 || 1     |
| C111     | プログラミング入門                   | 川田   | 2111         |    2 || 2     |
| C211     | オペレーティングシステム             | 山川   | 1203         |    2 || 3     |
| C212     | データベース                         | 大山   | 1203         |    4 || 2     |
| C321     | プロジェクト1                        | 前田   | 1211         |    2 || 3     |
| C322     | プロジェクト2                        | 大島   | 1212         |    2 || 4     |
| T1022    | 英語1                                | 島田   | 3221         |    2 || 2     |
| T1023    | 英語2                                | 島田   | 3221         |    2 || 2     |
| T1211    | 体育1                                | 前川   | 体育館       |    1 || 3     |
| T1212    | 体育2                                | 前川   | グランド     |    1 || 2     |
+----------+--------------------------------------+--------+--------------+------+-------+-------+
10 rows in set (0.00 sec)
mysql> SELECT * FROM rishu;
+-----------+----------+
| gakuseino | kamokuno |
+-----------+----------+
| 80AB0001  | C110     |
| 80AB0001  | C212     |
| 80AB0001  | T1022    |
| 80AB0001  | C321     |
| 80AB0001  | T1211    |
| 80AB0002  | C211     |
| 80AB0002  | C110     |
| 80AB0002  | C321     |
| 80AB0002  | T1211    |
| 80AB0002  | T1023    |
| 80AB0003  | C211     |
| 80AB0003  | C110     |
| 80AB0003  | T1212    |
| 80AB0003  | C321     |
| 80AB0003  | T1023    |
| 80AB0004  | C211     |
| 80AB0004  | C111     |
| 80AB0004  | C322     |
| 80AB0004  | T1212    |
| 80AB0004  | C1023    |
+-----------+----------+
20 rows in set (0.00 sec)



サポート、本当にありがとうございます。サポートしていただいた金額は、知的サイドハッスルとして取り組んでいる、個人研究の費用に充てさせていただきますね♪