- 追加された行はこの色です。
- 削除された行はこの色です。
* 第3日午後 データベースとSQL実習 [#gaef5153]
* 第3日午後 アセンブラ(CASL)実習 [#re226e6a]
** 目次 [#r061f41b]
** 目次 [#me0b8261]
#contents
** データベースの準備 [#pb8615f7]
** 実習 [#q6787ab1]
*** 「SQLの窓」のインストール [#l0356e16]
+ 「SQLの窓」をダウンロードする。
-- http://vilab.org/dept/summer/winofsql15.lzh
+ ホームディレクトリ(マイ ドキュメント)の中に展開する。
-- フォルダ winofsql15 を D:\ から マイドキュメントにコピーする。
+ 東京の郵便番号データをダウンロードし、Excelで内容を確認する。
-- http://vilab.org/dept/summer/ziptokyo.xls
+ 「SQLの窓」展開したフォルダの中の db.html をダブルクリックして起動する。
-- winofsql15 の下の db.html
+ 「参照...」ボタンを押して、データベースとして ziptokyo.xls を読み込む。
+ 「select *」ボタンを押して、データベースの内容を確認する。
*** CASL?環境(EduCasl)の設定 [#h050ad0b]
*** テーブルの設計 [#wc11d619]
+ 以下からCASLのエミュレータをダウンロードする。
-- http://vilab.org/summer/educasl.zip
+ 展開して,Setup.Exeを実行(ダブルクリック)する。
関係データベースは、「テーブル」(表)から構成されている。テーブルには「カラム」または「フィールド」と呼ばれる縦の欄(項目)があり、ひとつひとつのデータは横一列の「レコード」(行)として並ぶ。
*** EduCaslの実行 [#ba2de7ca]
今回は以下のようなテーブルを作る。「旧番号」「新番号」「都道府県名」などの欄がカラムであり、「060, 0600041, 北海道, 札幌市中央区, 大通東」のようなひとまとまりのデータがレコードである。
+ ソースコード入力画面が出るので,プログラムを打ち込む。
+ プログラムを入力し終わったら,「アセンブル」でアセンブルする。
+ エラーが出なければ,「実行」ボタンが押せるようになり,実行画面に移れる。
+ 実行画面では,メモリやレジスタの内容を確認しながら,1行ずつ実行できる。
|旧番号|新番号 |都道府県名|市区郡町村名 |町村字名|h
|060 |0600041|北海道 |札幌市中央区 |大通東 |
|154 |1540002|東京都 |世田谷区 |下馬 |
|468 |4680039|愛知県 |名古屋市天白区 |西入町 |
|90718 |9071801|沖縄県 |八重山郡与那国町|与那国 |
*** プログラムの実行 [#o10070b1]
テーブルの設計ではカラム(各欄)の型を定義します。「型」というのは、そのカラムに入るデータの形式のことで必ず定義します。今回は以下のようになります。テーブルの設計はデータベース構築の肝です。興味があれば、「正規化」と呼ばれるデータベースの論理設計手法を勉強してみてください。
- 以下のプログラムを入力して,どのような動作をするか調べてみなさい。
- 動作の要点を言葉で説明し,さらにフローチャートを書きなさい。
|zipcode|>|>||h
|名称 |内容 |型 |属性|h
|oldzip|旧番号 |text||
|newzip|新番号 |text|空欄不可|
|pref |都道府県名 |text||
|city |市区郡町村名|text||
|addr |町字名 |text|空欄不可|
+ メッセージ出力
HELLO START
OUT BUF,LEN
RET
BUF DC 'HELLO!'
LEN DC 6
END
+ ロードとストア
EXLD START
LD GR0, DATA1
LAD GR1, 20
ST GR0, DATA2
ST GR1, DATA3
RET
DATA1 DC 10
DATA2 DS 1
DATA3 DS 1
END
+ 演算(減算)
EXSUB START
LD GR1,X
LD GR2,Y
SUBA GR1,GR2
ST GR1,Z
RET
X DC 15
Y DC 6
Z DS 1
END
+ 演算(加算と減算)
EXSUB START
LD GR0,X
ADDA GR0,Y
SUBA GR0,Z
ST GR0,W
RET
X DC 90
Y DC 87
Z DC 77
W DS 1
END
+ 条件分岐(if)
EXIF START
LD GR1,DATA1
CPA GR1,DATA2
JZE SKIP1
LAD GR2,0
JUMP SKIP2
SKIP1 LAD GR2,1
SKIP2 ST GR2,ANS
RET
DATA1 DC 5
DATA2 DC 5
ANS DS 1
END
*** 上級課題 [#sa30d548]
** SQLによるテーブル操作 [#p8459703]
+ 繰り返し(while)
EXLOOP START
LAD GR1,0 ;GR1の初期値を0とする
LOOP LD GR2,GR1
LD GR3,GR2
LD GR4,GR3
ADDA GR1,C1 ;GR1を1増やす
CPA GR1,N
JMI LOOP
RET
N DC 3
C1 DC 1
END
+ ループと演算の組み合わせ
SUM10 START ENTRY
; データ
COUNT DC 10 ; 値10
C1 DC 1 ; 値1
TOTAL DC 0 ; 結果
; プログラム
; GR1=カウンタ
; GR2=総和
ENTRY LD GR1,COUNT ; カウンタの初期値
XOR GR2,GR2 ; 総和の初期値=0
LOOP ADDL GR2,GR1 ; 総和に加算
SUBL GR1,C1 ; カウンタから1を引く
JNZ LOOP ; 0でなければLOOPへ飛ぶ
ST GR2,TOTAL ; 総和をストア
RET
END
+ DCで確保した数値の内容を4倍するCASLプログラムを作成しなさい。
+ DCで確保した数値の内容が偶数か奇数かを判定するCASLプログラムを作成しなさい。
+ 10以上20未満の整数の合計を計算するCASLプログラムを作成しなさい。
「SQLの窓」では、Excelのワークシート名をworksheetとすると、テーブル名は ''[worksheet$]'' で参照する。この郵便番号データベースの例だと、''zipcodeのかわりに [zipcode$]''と書く必要がある。
- 上級課題をやった人は,(その分だけ)メールで送っていいです。
hi-shiozawa@engs.tamagawa.ac.jp
-- メールを出すときは,上記アドレスの「@」は半角の「@」に変更してください。
- もし時間が余ったら申告してください。さらに課題を作ります。
*** テーブルの作成(省略) [#t366f18b]
** CASL?エミュレータ [#q62cd34b]
>''【基本構文】 create table テーブル名 (カラム名1 カラム型1, カラム名2 カラム型2, ...);''
<
- EduCasl
-- http://www.vector.co.jp/soft/winnt/prog/se369290.html
-- 動かない人は,これを(.NET 1.1)入れる必要があるかも。
--- http://www.microsoft.com/downloads/details.aspx?FamilyID=262d25e3-f589-4842-8157-034d1e7cf3a3&DisplayLang=ja
- Web版CASL?エミュレータ
-- http://www.chiba-fjb.ac.jp/fjb_labo/casl/casl2.cgi
- その他のエミュレータ
-- http://www.vector.co.jp/vpack/filearea/win/prog/casl/
- IPAの純正エミュレータ
*** テーブルの削除(省略) [#m338309f]
** 参考資料 [#t1246396]
>''【基本構文】 drop table テーブル名; ''
<
*** CASL?公式 仕様書 [#v053b915]
*** データを表示する - SELECT文 [#i5975842]
- アセンブラ言語の仕様
-- http://www.jitec.jp/1_01mosikomi/18a_annaisho/18a_11.pdf
>''【基本構文】 select フィールド名 from テーブル名 ; ''
<
*** おすすめ資料 [#b6ab7358]
+ 前項で登録したデータを表示してみる。テーブルからレコードを取り出すには、「セレクト(SELECT)文」を使う。
+ 郵便番号と都道府県のみ選択して表示する。
select newzip,pref from zipcode;
+---------+--------+
| newzip | pref |
+---------+--------+
| 0600041 | 北海道 |
| 1540002 | 東京都 |
| 4680039 | 愛知県 |
| 9071801 | 沖縄県 |
+---------+--------+
+ すべてのフィールドを表示する場合は、*記号で代用できる。
select * from zipcode;
- COMET? & CASL?
-- http://www016.upp.so-net.ne.jp/masuda2/text2/casl2/index.html
- CASL入門コーナー
-- http://www5a.biglobe.ne.jp/~teamcasl/caslkozatop.htm
- だれでも一度はアセンブラを学んでおこう!(日経BP ITPro)
-- http://itpro.nikkeibp.co.jp/members/ITPro/ITBASIC/20021218/1/
-- http://itpro.nikkeibp.co.jp/members/ITPro/ITBASIC/20021220/1/
-- http://itpro.nikkeibp.co.jp/members/ITPro/ITBASIC/20021224/1/
-- http://itpro.nikkeibp.co.jp/members/ITPro/ITBASIC/20021225/1/
-- http://itpro.nikkeibp.co.jp/members/ITPro/ITBASIC/20021226/1/
** データの検索 [#x127fe34]
*** その他の資料 [#nc749b04]
テーブル操作のSQL文を使ってみる。データベースの肝の部分。 あらかじめMySQLにログインしてからデータベースを選択しておくこと。
- アセンブラ言語入門 CASL? (東北福祉大学)
-- http://tfusvsun.tfu.ac.jp/mko/CASL2/index.html
- CプログラマのためのCASLII入門講座
-- http://www.officedaytime.com/dcasl2/pguide/index.html
- CASLII入門
-- http://ww3.tiki.ne.jp/~tno2/shikaku/casl_content.htm
- 計算機の原理とアセンブラ(電気通信大学)
--http://www.mlab.ice.uec.ac.jp/mit/text/Jikken/casl/casl.html
- 計算機基礎(三重大学)
-- http://www.cs.info.mie-u.ac.jp/~toshi/lectures/introcomp/index.html
*** データを検索する - WHERE句 [#s0272778]
テーブルからデータ(レコード)を検索するには 「セレクト(SELECT)文」を使う。WHERE句で条件文をしているすることにより、条件にマッチするデータのみを表示できる。
>''【基本構文】 select フィールド名 from テーブル名 where 条件式 ; ''
<
複数の行に分けて書くこともできる。
select フィールド名
from テーブル名
where 条件式 ;
+ 古い郵便番号が「113」の、すべてのフィールドを表示する。
select * from zipcode where oldzip='113' ;
+ 市区名が「世田谷区」の、新番号と町村名を表示する。
select newzip,addr
from zipcode
where city='世田谷区' ;
+ 以下のようにすると、条件にマッチするレコードの件数が分かる。
select count(*)
from zipcode
where city='国分寺市' ;
+ 以下のように「リミット(LIMIT)句」を使うと、表示する件数を限定できる。 県名が「新宿区」の、すべてのフィールドを、50件表示する。
select *
from zipcode
where city='新宿区'
limit 50;
*** ちょっと高度な検索 [#fbffe792]
以下のSQLを理解し、結果を記録してください。
+ 市区郡町村名が「渋谷区」 または 「新宿区」
select *
from zipcode
where city='渋谷区' || city='新宿区' ;
+ 市区郡町村名に「島」が含まれる(likeは文字列比較、%はワイルドカード)
select *
from zipcode
where city like '%島%';
+ 市区郡町村名が「中央区」 かつ 市区郡町村名が「日本橋」で始まる。
select *
from zipcode
where city='中央区' && addr='日本橋%' ;
*** データの挿入 - INSERT文 [#le52b3c1]
>''【基本構文】 insert into テーブル名 (カラム名1, カラム名2, ...) values (カラム値1, カラム値2, ...); ''
<
+ テーブルにデータ(レコード)を作成するには 「インサート(INSERT)文」を使う。
insert into zipcode
(oldzip,newzip,pref,city,addr)
values('060','0600041','北海道','札幌市中央区','大通東');
+ 同様にして、以下のデータを登録してください。
|旧番号|新番号 |都道府県名|市区郡町村名 |町村字名|h
|060 |0600041|北海道 |札幌市中央区 |大通東 |
|468 |4680039|愛知県 |名古屋市天白区 |西入町 |
|90718 |9071801|沖縄県 |八重山郡与那国町|与那国 |
** 課題 [#wb4812fd]
+ 「東京都町田市」の郵便番号の一覧を検索しなさい。
+ 「東京都町田市玉川学園」の郵便番号を検索しなさい。
+ 旧郵便番号が「132」だった地区の住所を検索しなさい。
+ 町字名(addr)が、「霞が関」(または、自分の好きな地名何でもいい。結果が出てくるようにしてください)を含む地区の一覧を検索しなさい。
+ 住所のどこかに「神田」の入っている地名の一覧を検索しなさい。
----