データベースの設計

Download Report

Transcript データベースの設計

物理DB定義と操作
科目:情報工学基礎実験Ⅱ(2010後期)
テーマ:データベースの設計と応用
(第2回)
情報工学科
実験の内容
INDEX
第1回目:データベースの設計
(キー、正規化、ER図、論理DB構造)
データベース
次回の準備として、DBサーバをインストール
(リレーショナルDB)
第2回目:物理DBの定義と操作
DBサーバ(MySQL)
(DB生成、テーブル生成、挿入・更新・削除)
第3回目:DB利用の実用化
(インデックス使用時の検索時間測定、
簡単なWebアプリによるDB利用)
Webサーバ(Apache)
アプリケーション(Perl)
第2回目:実験の進め方
実験2:設計済みの
DB構造で使う
慣れたら、効率アップする
実験1:実際に使う
SQL、MySQLを知る
今回のレポートのまとめ方
以下の項目を必ず含めること。
1) 実験1では
・create tabele shop のコマンド入力内容
・insert 以降のSQL文すべて
・その他、自分で試したSQL文
2) 実験2では
・tableの定義内容すべて(showコマンドにて)
・指定した検索結果すべて(select実行結果)
3)感想
4)考察
注:必ず手書きで書くこと(キャプチャしたものはノリで貼る)
目次
1.SQL、MySQLとは
2.実験1:練習用shopテーブル
3.慣れてきたら効率アップ
4.実験2:受講管理システム
5.今回のレポートのまとめ方
参考書・参考URL
1.SQL、MySQLとは
1) MySQLとは
2) MySQLの起動と停止
3) MySQLのディレクトリ構成
4) MySQL特有のコマンドと関数
5) クライアントの実行方法
6) SQLの基本
1)MySQLとは
• MySQL(マイエスキューエル)は、
・ 世界中で最もよく利用されているオープンソースの
DBMSの一つで、高速で使いやすい、対応言語が多い
・ サーバとクライアントの二つから出来ている
・ Webシステムでの使用が中心(Perl,PHP,Java・・・)
俗称 LAMP=Linux,Apache,MySQL,Perl/PHP/Python
俗称 WAMP=Windows,Apache,MySQL,Perl/PHP/Python
• SQLは、IBM社が開発し、1987年にISO規格の採用
・Structured Query Languageの意味(非専門家向け)
・二つの部分からなる
・DDL(データ定義言語---table、項目、アクセス権)
・DML(データ操作言語---tableの追加、更新、削除、検索)
2)MySQLの起動と停止
• MySQLサーバの起動と停止
・実験では、 Windows起動時に自動起動の設定としている。
・停止は、 bin>mysqladmin –u root –p shutdown
・ほかに
コマンドプロンプトを右クリックで管理者として実行すれば
bin>net start mysql で起動する
bin>net stop mysql で停止する
• MySQLクライアントの起動と停止
・起動時は、ユーザーidとパスワードが必要。
bin>mysql –uユーザ名 –pパスワード
プロンプトが mysql> に変われば起動が成功。
(例示:mysql –uroot -psuetsugu)
・停止は mysqlプロンプトで exit [または quit または \q ]
資料:MySQLサーバの状態の確認方法
1) コントロールパネルで、
「システムとメンテナンス」→「管理ツール」→ 「サービス」をクリックする。
開始:開始中
自動:自動起動
を示す
2) 簡便な方法としては、「CTRL、ALT、DEL」キーを同時に押して、
「タスクマネージャーの起動」をクリック→「サービス」タブで確認できる。
・MySQL の 実行中または停止が表示される。
補足:MySQLクライアントが起動しない
•
•
•
•
•
パスワードは正しいか?
パスワードを設定していないのに「-p」を付けたのか?
PATHが正しく設定されていないのか?
「-p」とパスワードの間を空けて入力しているか?
単語間のスペースが全角になっていないか?
3)MySQLのディレクトリ構成
(C)ドライブ
mysql
bin
(実行ファイル)
data
mysql (DBです)
(管理ファイル)
test (DBです)
(初期は空)
share
(ログファイル)
(my.ini などの構成用ファイル)
my.ini の77行目で
任意のDirにDBを作成でき
るが、当実験では
Dir の位置は変えない。
dataフォルダの下にDBを作る。
DBの下にtableを作る。
実験では、
・練習用のtableは test DBに作成する。
・練習用にDBを追加して定義してもよい。
・「受講システム」のDBは data フォルダの下に作成する。
4)MySQL特有のコマンド
• mysql>use DB名;
DBを選択。これでDBが使えるようになる
• mysql>show コマンド
status;
MySQLの設定情報を表示
show databases; DBを表示
show tables;
選択したDB内のtableを表示
show fields from table名;
tableのデータ項目を表示
desc[ribe] table名;
同上
show grants for ユーザー名 ユーザーのアクセス権を表示
show create database DB名; 文字コードを表示
show create table table名; 文字コードを表示
• MySQLの関数の紹介 (注:DBMSにより違いがある。)
• mysql>select 関数名(引数);
now();
curdate();
curtime();
version();
user();
database();
conv(‘20’,10,16);
bin(‘20’);
pow(2,3);
事例:statusコマンド結果
mysql> status;
-------------mysql Ver 14.12 Distrib 5.0.86, for Win32 (ia32)
Connection id:
1
Current database:
test
Current user:
sue@localhost
SSL:
Not in use
Using delimiter:
;
Server version:
5.0.86-community-nt MySQL Community Edition (GPL)
Protocol version:
10
Connection:
localhost via TCP/IP
Server characterset: sjis
Db characterset: sjis
Client characterset: sjis
Conn. characterset: sjis
TCP port:
3306
Uptime:
2 hours 16 min 40 sec
Threads: 1 Questions: 30 Slow queries: 0 Opens: 18 Flush tables: 1 Open tables: 2 Queries per
second avg: 0.004
--------------
補足:コマンドプロンプトの便利な方法
1)背景色、文字色の変更
・alt,space キーを同時に押し
・現れたメニューで「プロパティ」→「画面の色」タブを選択
・「画面の文字」で黒を選択
・「画面の背景」で白を選択
・OKボタン
2)コピーしてファイルに張り付け保存する
・alt,space キーを同時に押し
・現れたメニューで「編集」→「すべて選択」
・alt,space キーを同時に押し
・現れたメニューで「コピー」
・メモ帳に張り付け(ctrl+v) 名前を付けて保存する
・編集して必要部分のみを残すとよい
5)クライアントの実行方法
• クライアントの起動方法(rootユーザー)
c:\Windows\system32>cd c:\
c:\>cd mysql/bin
c:\mysql\bin>mysql -u root -p
パスワード
Enter password: ******** ユーザID
または
c:\mysql\bin>mysql -uroot –psuetsugu
これでMySQLクライアントが起動される。
ここからmysql>プロンプトで、sqlコマンドを入力する。
• 必ず、初めに、使うDBをuseコマンドで指定する
use test;
Database changed
mysql>
ここからtestDBにtableを生成する。
6)SQLの基本
SQLは非手続き型言語
• SQLはC言語などの手続き型言語とは異なり、
「どういう順序で命令を実行するかを記述するのではなく、
何がやりたいかを記述するのみで良い。」
最も効率がよい命令実行の順序は、
DBMSが自動で決定する。
したがって、条件分岐や繰り返しという命令順序を
変えるような命令は存在しない。
(その必要があれば手続き型言語で行う)
SQLの機能
データ定義・管理
DDL
スキーマ定義
表(テーブル)、VIEW、INDEX作成
(CREATE、ALTER、DROP)
権限の管理
データ利用の権限付与、取消し
(GRANT、REVOKE)
実行の制御
トランズアクション管理、カーソル操作
(COMMIT、ROLLBACK、
CURSOR)
データ変更
データの追加、更新、削除
(INSERT、DELETE、UPDATE)
データ検索
データの取り出し(検索)
(SELECT)
データ操作
DML
SQL命令の構成
キーワード、句、文の三つからなる。
・句=キーワードの後ろに単語を付けたもの
・文=幾つかの句(Phrase)を集めたもの
文の終わり
キーワード
キーワード
SELECT * FROM 学生名簿TBL ;
句
句
文
(STATEMENT)
文字の扱い
① 大文字、小文字の区別が無い(データ値は別)
② 空白文字の個数は関係ない
・空白が幾つ連続しても1つとみなされる。
・空白文字とは、半角スペース、タブ、改行
・全角スペースは空白文字では無い
・改行時、自動で半角空白が入る
③ 文字列定数はシングルクォートで囲む
・文字列に「’」を含む場合は「’’」と重ねる
‘SUETSUGU’’S’ → SUETSUGU’S の意味
(続き)文字の扱い
④定数の取扱い
・数値定数は、「’」で囲む必要は無い
(例: 1、1.23、0.12、1e23)
・文字定数は、「’」で囲むこと
(例: ’A’、’商品’、’学生’)
⑤コメントの記入
・マイナス記号二つで、その行の終わりまでコメント
(例: select * --全ての列の検索 )
・「/*」と「*/」で囲んだ範囲をコメントに出来る
データ項目(=列名)の記述
・通常は、列名を使うが、Table間で重複時は、「.」で結ぶ
・商品名の例: 商品TBL.商品名
売上TBL.商品名
・列名の後にスペースを置いて、別名を定義できる。
・商品 商品名称
列名
別名
・計算式の結果を別名で表すことが出来る
・SELECT (支給総額-控除額) 手取額
列の名前を使った計算式
別名
資料:主要なデータ型
データ型の種類
文字列 固定長
可変長
数値
数字
数字
整数
実数
バイナリー 固定長
可変長
日付
日
時刻
データ型の表記法
char または character
varchar または character varying
decまたはdecimal(長さ,小数点長さ)
numeric(長さ,小数点長さ)
int またはinteger
real または float
bit
bit varying
date (2009-10-08)
time (13:15:20)
資料:主要な演算子
集合演算子
その他演算子
AND
INTERSECT
+
>
BETWEEN
MINUS
-
*
>=
IN
UNION
IS NULL
/
<
NOT
JOIN
∥
%
<=
OR
CASE
<>
ALL
LIKE
!=
ANY
算術演算子
比較演算子
+
=
-
論理演算子
EXISTS
SOME
資料:予約語
予約語は、表名、列名には使用できない
・ただし、〔 〕で囲めば使用可能。
例: SELECT 〔INSERT〕 FROM 〔SELECT〕
ALL
CROSS
FOREIGN
JOIN
ORDER
SUM
ALTER
CURSER
FROM
KEY
OUTER
TABLE
AND
DECLARE
FULL
LEFT
PRIMARY
TRUE
ANY
DELETE
GRANT
LIKE
REFERENCES
UNION
AS
DESC
GROUP
LOWER
REVOKE
UNIQUE
AVG
DISTINCT
HAVING
MAX
ROLLBACK
UNKNOWN
BETWEEN
DROP
IN
MIN
SCHEMA
UPDATE
BY
EXCEPT
INNER
NOT
SELECT
UPPER
COMMIT
EXEC
INSERT
NULL
SET
USER
COUNT
EXISTS
INTERSECT
ON
SOME
WHERE
CREATE
FALSE
INTO
OR
SUBSTRING
Table定義(Tableの作成)
mysql> use test;
mysql> create table tbl1(
-> データ項目名 データ型(桁数)
->
unsigned zerofill default '0000' not NULL unique,
・
・
・
種々の初期値を設定できる
-> データ項目名 データ型(桁数),
-> primary key(データ項目名)
-> ) character set sjis ;
日本語(実験ではsjis)を入れるデータ項目があれば、必須!!
単純なDB検索例
商品価格TBL
SELECT 商品名,価格,仕入先
FROM 商品価格TBL
商
品
コ
ー
ド
商
品
名
価
格
仕
入
先
仕
入
単
価
WHERE 価格<10000
ORDER BY 商品コード ;
SELECT文の中の説明
SELECT 計算式
FROM 表名
WHERE 条件式
ORDER BY 行の順序
説明上は日本語表記したが、
通常はtable名、項目名は
英数字を使うこと。
単純なDB変更例
(朱筆はキーワード、つまり決まった文字です)
INSERT INTO 商品価格TBL
追加
[(商品コード、商品名、価格、仕入先、単価)]
VALUES (10030,’商品名BB’, 1500,
‘Y商事’,1200) ;
更新(上書き)
UPDATE 商品価格TBL
SET 商品名 = ‘商品名称AAA’
WHERE 商品コード = 10010 ;
削除
DELETE
FROM 商品価格TBL
WHERE 商品コード = 10070 ;
商品価格TBL
商
品
コ
ー
ド
商
品
名
価
格
仕
入
先
仕
入
単
価
2. 実験1:練習用shopテーブル
2-1.以下の事例を使ってtable作成、更新、検索
shopテーブル
備考
Field
Type
NULL
Key
Default
code
dec(10)
not null
key
なし
price
int (6)
not null
なし
name
varchar(30)
not null
なし
class
char(2)
not null
なし
←商品分類
zaiko
Int(5)
not null
なし
←後から追加
tdate
date
not null
なし
←後から追加
日本語
1) shop テーブルをtestDBに作成する。
2) insertコマンドで10件(次頁)作成し、表示する。
3) updateコマンドでname内容を変更し、表示する。
4) deleteコマンドで1件ほど削除し、表示する。
10件のデータ例:
code
price
name
class
zaiko
tdate
1001
10000
商品A
01
2
2009-11-04
1002
2500
商品B
02
10
2009-11-04
1003
300
商品C
04
100
2009-11-04
1004
4000
商品D
02
20
2009-11-04
1005
450
商品あ
04
200
2009-11-04
1006
600
商品い
04
300
2009-11-04
1007
7000
商品う
02
30
2009-11-04
1008
8000
商品X
03
400
2009-11-04
1009
9000
商品Y
03
40
2009-11-04
1010
101000
商品Z
01
3
2009-11-04
後から書き込み
ヒント1:
Tableの作成:
use test;
create table shop (
code dec(10) not null ,
price int(6) not null,
name char( 30),
class char(2)
) character set sjis ;
ヒント2:
データの追加、更新、削除:
insert ・・・・・ ;
--注:↑キーを使うと効率的です
select * from shop;
update ・・・・・;
select * from shop;
--商品名nameの内容を変える
update shop set tdate=now() where code=‘xxxx’;
3-5)でやる
--現在日を入れる
delete ・・・・・;
--codeの値を指定して、1件削除
select * from shop;
2-2.いろいろなselect文を試す
1) 特定のデータ項目(列)のみを取り出す:
select name, price from shop;
2) 検索条件を付ける:
select * from shop where (price >=1000) ;
条件に使う記号(= > < >= <= != )
and or で複数の条件を指定できる
3) あいまい検索条件:
select * from shop where(name like ‘%AA%’ ) ;
(nameの文字列中にAAを含むものを意味する)
4) システム日付を使ってdate項目をupdateする:
update shop set tdate= now() またはcurdate() ;
3.慣れてきたら効率アップ
1)DB定義とユーザーの登録
2)ワイルドカード
3) tableのコピーを保存
4)データに日本語(漢字)を使う
5) tableの定義変更
6) 小技の紹介
7) バッチSQLコマンド
8) リダイレクション
1)DB定義とユーザーの登録
• 今までの稼働確認はrootユーザーで行ってきたが、
• 通常は、ユーザーを作成して、
• このユーザーでクライアントを起動する
c:\mysql\bin>mysql -uroot –psuetsugu
mysql> grant all on *.* to sue identified by 'suep';
権限の設定
sueというユーザー
パスワード
mysql> flush privileges;
←権限情報の再読み込み
mysql> create database suedb;←DB生成(sueが作ったDB)
mysql> show databases;
←DB生成の確認
mysql> exit;
c:\mysql\bin>mysql -usue –psuep ←sueで再起動
(ここで作ったDBは自分の練習用に使ってください。)
2)ワイルドカード
・比較演算では、「あいまいな文字列」を指定
することができる。
・「%」は複数の文字列にマッチさせる場合
・「_」は一文字の文字列(アンダースコア記号)
例:SELECT * FROM 商品TBL
WHERE 商品名 LIKE ‘%AAA%’
または
‘A%A’
または
‘A-’
または
‘-A’
3) tableのコピーを保存
• データを挿入済みのtableをコピーしておく。
• 練習用に内容を変更しても安心できる。
create table shop2 select * from shop;
• 別のファイルにバックアップしておく。(=エクスポート)
• mysqltestフォルダの下に入れる例では
select * into outfile ‘C:/mysqtest/shopbu.csv’
fields terminated by ‘,’
from
shop;
(注: csvファイルを扱う場合はpathの区切りに「 / 」を使うこと。)
Tableの複製
作成済みのテーブル定義やデータをコピー
テーブル定義のみコピー
CREATE TABLE 新テーブル名
LIKE
元のテーブル名;
テーブルの定義およびデータのコピー
CREAT TABLE 新テーブル名 SELECT * FROM 元のテーブル名;
テーブルのデータのみコピー
INSERT INTO テーブル名 SELECT * FROM 元のテーブル名;
4)データに日本語(漢字)を使う
• コマンドプロンプトで日本語を入れるには、
ALT+漢字キーを同時に押す。
• 元に戻すには、漢字キーを押す。
• 日本語データは ‘
’ で囲む。
• データ以外の個所では全角スペースは使わないこと。
• 日本語を入力したら、select文で表示してみよう。
• うまく表示できない時は、
create table の最後に character set sjis ;を忘れている。
show create table テーブル名; で確認し、
utf8になっていたらcreate tableからやり直し。
いったん drop table テーブル名;で削除後。
5) Tableの定義変更
作成済みのテーブル定義を変更、削除する
テーブルの削除
(DATABASE、VIEW、INDEXも同様である)
DROP TABLE テーブル名;
テーブルの変更
ALTER TABLE テーブル名 ADD
追加列名
ALTER TABLE テーブル名 MODIFY
列の属性;
変更列名
ALTER TABLE テーブル名 DROP COLUMN
新しい属性;
列名;
Table定義変更の事例
灰色部分を変更してみる。
shopテーブル
Field
Type
NULL
Key
Default
code
dec(10)
not null
key
なし
price
int (6)
not null
なし
name
nchar(30)
not null
なし
class
char(2)
not null
なし
zaiko
Int(5)
not null
なし
tdate
date
not null
なし
備考
日本語
1) field「zaiko」 int(5) を追加、在庫数を入れて表示。
2) field「tdate」 date を追加、現在の日時を入れて表示。
ヒント
データ項目の追加、更新、削除:
alter table shop add zaiko int(5) not null ;--field追加
show fields from shop; --shopの列を表示
update ・・・・・;
--在庫数を入れる
select * from shop;
alter table shop add tdate date not null ;--field追加
show fields from shop; --shopの列を表示
update shop set tdate= now( ) where code=‘XXXX’ ;
--現在日を入れる
--where句を無しでやってみる
select * from shop;
6) 小技の紹介
1) 数値の表示書式を指定する
select format(price,2) --form関数(列、小数点桁数)
2) 年月日の表示書式
select date_format(tdate,’%Y年%m月%d日’);
tdateが2009-10-28であれば2009年10月28日と表示される
3) 連結
select concat(‘商品=’,code,name) 連結
from shop;
4) 別名を名乗る
select code as hinmoku, price *1.05 as 税込価格
(続き) 小技の紹介
5) 出力の順序を指定する:
select *
from テーブル名
where 条件
order by 項目名 [asc または desc] \G
6)データの数を数える
select count(*) from shop;
select count(*) as 件数 from shop;
7)データの合計、平均を求める
select class, avg (price), sum (price*zaiko) 金額
from shop
group by class;
7) バッチSQLコマンド
select文に慣れてくれば、ファイルから実行すると効率的
・SQLのsource句を使用
・Cドライブ直下に mysqltest フォルダを作成
・mysqltest に txtファイルを作る
・mysql source ファイル名 で実行
例: testbatch.txt にSQL文を書く
use test;
use DB名;が初めにくる
select now();
show tables;
select * from shop;
mysql> source c:/mysqltest/testbatch.txt ;で実行
8) リダイレクション
Linuxで習ったリダイレクションを使えば、
コマンド入力の数を減らすことができる。
・「.bat」ファイルを使って起動する。(=cd も含めると、より効率的)
・SQLクライアント開始も含める
・ 標準出力もリダイレクションが可能(=ファイルに出る)
例:
cd c:\mysqltes
(.bat ファイルの置き場所)
c:\mysqltest>redirect01.bat
redirect01.bat 中には
入力ファイル
出力ファイル
cd c:\mysqbin
mysql -usue -psuep < c:\mysqltest\aa.txt > c:\mysqltesbb.txt
aa.txt 中には
use test;
select 文 insert文 など通常のSQL文を書く
補足: 良く使うSQL命令はコピペ
• テキスト編集ソフトで、正しく動くSQL命令を作っておく。
• それをコマンドプロンプトに張り付ける。
・コマプロで、ALT+spaceキーで「編集」を出す
・「張り付け」でプロンプトの後ろにペーストする。
• 例示:sample.txt の内容
insert into shop values(1001,10000, ’商品A’ , ’01’);
update shop set price=400 where code=1000;
delete from shop where code=1009;
alter table name add tdate date not null;
alter table name drop column tdate;
load data infile ‘c:/mysqltest/gakusei.csv‘ into table gakusei fields terminated by',';
select * into outfile ‘C:/mysqtest/shopbu.csv’ fields terminated by ‘,’ from
shop;
ここまでで練習は終り
4. 実験2:受講管理システム
第1回目で作成した受講管理システム用の論理DB構造をもとに、
DB,tableを作成して、初期データ設定をする。
その後、指示された検索をしてみる。
1) DBとtableを定義
2) 効率的な初期設定の方法(インポート)
3) 指定した select文で結果を表示する
1) DBとtableを定義
Source句が非常に便利
・DBは「juko」を定義すること。
・table名、データ項目名は事前に決めておくこと。
・数が多い場合は、バッチSQLコマンド方式が望ましい。
(TeraPadを使えば、コピペが容易である)
・table 定義が終われば、表示すること。
(show tables コマンド)
(show fields from table名 コマンド)
レポートに掲載が必須。
2) インポートによる初期設定
フィルハンドルを使えば、
・tableごとにExcelでデータを作成。
テストデータの作成が容易。
・csv形式でmysqlフォルダに保存。
・csvファイルをインポート命令でDBに入れる。
例:mysql> load data infile 'c:/mysqltest/gakusei.csv'
-> into table gakusei
-> fields terminated by',';
・以上を繰り返せば、容易に初期設定ができる。
注:初期設定データは10~20件程度作ること。
・インポートができない者は、insert でもよい。
レポートに掲載が必須。
3) select文で結果表示
① 受講科目を指定して、受講者を表示
・科目コード、科目名、受講者の学生番号、氏名
②受講科目を指定して、て受講者の成績を表示
・科目名、氏名、評価点
③ 挑戦課題として、第1回目で提示した帳票にある
項目を同じような並びで表示する。
・二つの表を表示する。(学生番号指定による)
・受講申請データ
・成績データ
④挑戦課題として、 科目ごとの平均点を表示する。
レポートには① ②の二つは掲載が必須。
ヒント1:
特定の受講科目について受講者の表示
・処理順序は考えず、表示するデータ項目を決める
・表示するデータ項目の横の順番を決める
・どのtableから取り出すかを決める
・表示する行の順序を決める(order by)
科目名
科目コード
科目TBL
学生番号
受講TBL
氏名
学生TBL
(表示項目)
(
・考察: 科目コードが指定されると仮定する
・受講TBLから合致する科目コードを取り出す
・科目TBLから、上記の科目コードと合致する科目名を取り出す
・学生TBLから、受講TBLの学生番号に合致する氏名を取り出す
結合)
(続き)
select kname,juko.kamoku,juko.gakuban,name
from kamoku,juko,gakusei
where juko.kamoku = ‘指定した科目コード’
and juko.kamoku = kamoku.kamoku --join受講TBL,科目TBL
and juko.gakuban = gakusei.gakuban --join受講TBL,学生TBL
oerder by juko.kamoku,juko.gakuban;
各グループで検討したtable、データ項目が異なるので
必ずしも上記の通りにはならない。
(続き) 結合演算(= join)
where TBL1.学科コード = TBL2.学科番号; の結果
TBL1
名前
学科コー
ド
Aさん 100
Bさん 200
Cさん 130
Xさん 200
Yさん 100
TBL1.学科コード=TBL2.学科番号
TBL2
学科
名称
電子
機械
情報
学科
番号
100
130
200
名前
学科コー 学科
ド
名称
Aさん
Bさん
Cさん
Xさん
100
200
130
200
電子
情報
機械
情報
Yさん
100
電子
ヒント2:
特定の受講科目について受講者の成績
・① と同様であるが、成績TBLも検索の対象となる
科目名
氏名
評価点
(表示項目)
学生TBL
科目TBL
受講TBL
成績TBL
(
結合)
・考察: 科目コードが指定されると仮定する
・受講TBLから合致する科目コードを取り出す
・科目TBLから、上記の科目コードと合致する科目名を取り出す
・学生TBLから、受講TBLの学生番号に合致する氏名を取り出す
・成績TBLから、受講TBLの学生番号に合致する評価点を取り出す
ヒント3:
コマンドプロンプトの横幅を広げるとよい。
・プロパティの変更でできる
レイアウトの幅を変更する。
フォントで小サイズを選ぶ。
(続き)ヒント3:
ヒント4:
科目ごとの平均点を求める
科目名
科目TBL
点数
(表示項目)
(
成績TBL
結合)
・考察: 成績TBLを対象に科目コードごとに点数を集計し平均を求める
・小技で説明した group by 句 と avg 関数を使う
・小数点以下の桁数は format 関数を使う
select ・・・,format(avg(seiseki.ten),2)
科目平均点
from 成績TBL,科目TBL
where ・・・
group by 成績TBL.kamoku
order by 成績TBL.kamoku;
+----------+----------------+------------+
| kamoku | kname
| 科目平均点 |
+----------+----------------+------------+
| AA00001H | 科目名AA1 |
| AA00002H | 科目名AA2 |
| AA00003S | 科目名AA3 |
| AB00004S | 科目名AB4 |
| AB00005H | 科目名AB5 |
| AB00006H | 科目名AC6 |
94.00
87.50
66.50
73.50
76.67
71.14
|
|
|
|
|
|
+----------+----------------+------------+
5.今回のレポートのまとめ方
以下の項目を必ず含めること。
1) 実験1では
・create tabele shop のコマンド入力内容
・insert 以降のSQL文すべて
・その他、自分で試したSQL文
2) 実験2では
・tableの定義内容すべて(showコマンドにて)
・指定した検索結果すべて(select実行結果)
3)感想
4)考察
注:必ず手書きで書くこと(キャプチャしたものはノリで貼る)
参考書・参照URL
書籍も大切ですが、まず実際に動かしてみてください。
• 西沢夢路「基礎からのMySQL」(ソフトバンクCREATIVE)
• 志村伸弘「MySQL徹底攻略ガイド」(技術評論社)
• ライアンほか「SQLプログラミング入門」(ソフトバンク)
• 日本MySQLユーザー会
http://www.mysql.gr.jp/
• MySQL初心者入門講座
http://mysqlweb.net/