複数テーブルからなるデータベース
今日は、『実践Pythonによるデータベース入門』の4.2節 "複数テーブルからなるデータベース"で学んだことをアウトプットします。
【例題4.1】
SQL命令文を用いて以下の要求を実現し、それをMySQL上で実行し、動作作確認せよ。
仕様要求
(1)データベースjikanwaribaseを作成する
(2)表4.13の構成でテーブルgakuseiを作成して、表4.10のデータを入力する。
(3)表4.14の構成でテーブルkamokuを作成して、表4.11のデータを入力する。
(4)表4.15の構成でテーブルrishuを作成して、表4.12のデータを入力する。
(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のデータを入力する。
まず、テーブル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のデータを入力する。
テーブル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のデータを入力する。
テーブル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)
サポート、本当にありがとうございます。サポートしていただいた金額は、知的サイドハッスルとして取り組んでいる、個人研究の費用に充てさせていただきますね♪