データベースシステム覚え書き②

 過去に稀に見る高度プロフェッショナルな課題。勝手になんらかのソフトをダウンロードして、シラバスのヒントを頼りに課題のデータベースを完成させなさい、という学生の主体的思考を重んじた丸投げの課題。
 ちなみにテキストも理論的なものが書いてあるだけで、特定のソフトの使い方などは書いてないので、ほぼノーヒント。テキストはあくまでテキストでマニュアルじゃないのである。(´;ω;`)
 つまりコマンドプロンプトとかいじくった経験のある人じゃないと、自分のパソコンぶっ壊しそうでちょっと踏み出せない。てことで、コンピュータに強い後輩に泣きつきました。やっぱり理系はカッチョいい。
 逆に、環境設定とかできれば、作成する表自体はかなりシンプルというか・・・エクセルで10分で作れるものだったりする。
 結局、大企業の膨大なデータなんかは、今もDBMSで管理しているらしいんだけど、そういう場合もサーバーとかで構築しているみたくて、家庭用パソコンでデータベースを作成とかは現在はほとんどしないし、必要がないんだってよ。

問1
RDBMSをインストールした上で,データベース(名称は任意)を作成しなさい。次に,以下の2つの表を作成し,データも登録しなさい。その際,以下の(a)から(c)を提出しなさい。
名称は任意なので「KADAI01」にしました。

(a)STUDENTS(学生)表の定義のために入力したSQL文
学生番号はユニークな主キーなので、設定でPRI(プライマルキー)とする。
名前と電話番号はデフォルトでNULL(データなし)とするが、学籍番号はしない。
()のなかの数字は桁数。電話番号はハイフンを入れるため、数字列ではなく、文字列(char)扱いにするのがポイント(電話番号を足したり引いたりみたいに計算はしないので文字列で良い)。
課題1a.jpg

型の設定をしたら各データを「INSERT INTO」文で入力していく。

まず、番号1801、名前ピーター、電話番号123-4567から。

mysql> INSERT INTO KADAI01.STUDENTS(SNO, SNAME, TEL) VALUES ('1801', 'Peter', '123-4567');
Query OK, 1 row affected (0.04 sec)

こんな感じで、ジョンとアリスも入れていく。

mysql> INSERT INTO KADAI01.STUDENTS(SNO, SNAME, TEL) VALUES ('1802', 'John', '234-5678');
Query OK, 1 row affected (0.03 sec)

mysql> INSERT INTO KADAI01.STUDENTS(SNO, SNAME, TEL) VALUES ('1803', 'Alice', '345-6789');
Query OK, 1 row affected (0.06 sec)

(b)SCORES(成績)表の定義のために入力したSQL文
学籍番号とテスト名の複合キーを作らなければいけない。
課題1b①.jpg

設定変更①取り消し
「ALTER TABLE テーブル名 DROP 変更箇所」で取り消せる。
課題1b②.jpg

設定変更②設定追加
「ALTER TABLE テーブル名 ADD 追加箇所」で追加できる。
課題1b③.jpg

これで学籍番号とテスト名の復号キーができた。

SCORES(成績)表のデータも入れていく。

mysql> INSERT INTO KADAI01.SCORES(SNO, TEST, SCORE) VALUES ('1801', 'C Language', '70');
Query OK, 1 row affected (0.06 sec)

mysql> INSERT INTO KADAI01.SCORES(SNO, TEST, SCORE) VALUES ('1801', 'Database','80');
Query OK, 1 row affected (0.08 sec)

mysql> INSERT INTO KADAI01.SCORES(SNO, TEST, SCORE) VALUES ('1802', 'Database','90');
Query OK, 1 row affected (0.04 sec)

mysql> INSERT INTO KADAI01.SCORES(SNO, TEST, SCORE) VALUES ('1803', 'C Language', '75');
Query OK, 1 row affected (0.01 sec)

(c)各々の表について設定されたデータの一覧を表示
「SELECT * FROM」文で表示ができる。
課題1c.jpg

※ヒントというか条件
STUDENTS(学生)表のSNO列は学生を一意に識別する番号(学生番号)を格納する列であり,この表の主キーである。SNAME列は学生氏名,TEL列は電話番号を格納する列である。
また,SCORES(成績)表のSNO列は学生を一意に識別する番号(学生番号)を,TEST列は試験の名称を,SCORE列は評価点を格納する列である。試験の名称は試験を一意に識別するものとする。この表の主キーはSNO列とTEST列による複合キーである。
なお,STUDENTS表のSNO列とSCORES表のSNO列は同一ドメインの列とし,両者の間に参照制約を設定すること。
表の作成に関して特に指定のない事項(例えば,データ型など)については,各自の判断で適正に対処すること。

問2
上で設定した表を対象に,以下の(a)から(c)の指示に従ってSQL文を実行しなさい。

(a)名前の昇順表示
「ORDER BY SNAME ASC」で名前をアルファベット順に並べ替えてくれる。
課題2a.jpg

(b)平均点の算出
「AVG」で平均を返してくれる。ちなみに二科目テストを受けている人が1801番のピーターしかいないのでかなり盛り上がらない。
課題2b.jpg

(c)条件式と表の結合
SCORES表のすべての成績のうち,評価点(SCORE)が80以上の成績について,学生番号(SNO),学生氏名(SNAME),試験の名称(TEST),評価点(SCORE)を表示しなさい。

①条件式
とりあえずSCORES表の80点以上の成績だけ抽出してみる。
80点以上という条件をつけて絞り込む方法は以下の不等式を作る。
条件式.jpg

②表の結合
だが、これだと学生氏名が持ってこれてないので、STUDENTS表からピーターとジョンを持ってくる必要がある。
具体的には、どちらの表にもあるプライマリーキーである学籍番号(SNO)を等式で繋いでしまう。
表の結合.jpg

最後にこれを同時に行なってみる。ただ単純にコードをつなぐだけで実行してくれた。ありがとう(´;ω;`)
課題2c.jpg
Calendar
<< April 2024 >>
SunMonTueWedThuFriSat
 123456
78910111213
14151617181920
21222324252627
282930
search this site.
tags
archives
recent comment
recent trackback
others
にほんブログ村 科学ブログへ にほんブログ村 科学ブログ 恐竜へ カウンター
admin
  • 管理者ページ
  • 記事を書く
  • ログアウト