データベース技術 10(database 10)
TRANSCRIPT
データベース技術第10回(2015.12.1)
115年12月7日月曜日
SQLiteの操作•データーベスの作成&接続
•テーブルの作成
•データの追加、更新、削除
•データの取得
create table、alter table、drop table
insert、update、delete
select文、条件文の作り方between by, is null, order by, group by集計関数
215年12月7日月曜日
表の結合•SQL文作成のポイント
-「主キーとそれを参照している外部キーが等しい」という条件をつける
-同じカラム名がある場合はテーブル名.カラム名とする
•具体例:売上.輸出先コード=輸出先.輸出先コード
報告書コード 日付 輸出先コード
1101 3/5 121102 3/7 231103 3/8 25
輸出先コード 輸出先名
12 アメリカ23 中国25 フランス
「売上」表 「輸出先」表
参照
315年12月7日月曜日
内部結合(inner join)•値が共通する行だけ選択する結合方法
-等結合(equi join)• 同じ意味を表す列を介して表を結合すること
• 同じ値を持つ行を結合条件として指定する• 売上報告書の例がこれにあたる
-自然結合(natural join)• 重複する列を1つにまとめる結合
415年12月7日月曜日
外部結合(outer join)•どちらか一方の表の行全体を残し、もう片方の表にない行に空値を設定する結合方法-左外部結合(left outer join)
-右外部結合(right outer join)• 2つの表をSQL文中で左・右どちらかにおいた時、どちらの表の行を全部残すかによって決まる
515年12月7日月曜日
左外部結合と右外部結合右表左表
左外部結合 右外部結合
615年12月7日月曜日
ビュー表の作成•ビュー表(View table)
-ユーザーから見たときのみに存在する仮想的な表
-実表(Base table):実際のデータが入力される表
•ビュー表 作成の書式- CREATE VIEW ビュー名 AS SELECT文;
•作成したビューからデータの取得- SELECT * FROM ビュー名;
715年12月7日月曜日
ビュー表 実行例
- .tablesを実行すると実表と合わせてビューも表示される
-ビューの削除:DROP VIEW ビュー名;
815年12月7日月曜日
ビュー表の使用方法の例•複数の表を結合した結果をビューとして定義しておく-ビュー表に対して検索を行う-ビュー表をユーザに提示する
報告書コード 日付 輸出先名 商品名 単価 個数
1101 3/5 アメリカ メロン ¥800 1,1001101 3/5 アメリカ いちご ¥150 3001102 3/7 中国 りんご ¥120 1,7001103 3/8 フランス レモン ¥200 500
915年12月7日月曜日
データベースとプログラム•プログラムとデータの独立性
- SQLでデータベース処理を行うことにより、プログラムとデータを分けて考えることが可能
-生産性の向上につながる
データベース
DBMSプログラム SQL
1015年12月7日月曜日
クライアントとサーバ•Webの場合
-アプリケーションサーバがDBのデータを利用
データベース
データベースサーバ
Webサービス Webアプリ
アプリケーションサーバ
Webサーバ
Webサイトの見た目を作るクライアントとの窓口
計算をする データを管理する役割り:
ユーザ
クライアント
1115年12月7日月曜日
プログラムの例(Ruby)require "sqlite3"
db = SQLite3::Database.new("database.db")
sql = "create table Item (商品コード integer primary key, 商品名 text, 価格 int)"db.execute(sql)puts "Itemテーブルを作成しました。"
db.transaction do sql = "insert into Item values (?, ?, ?)" db.execute(sql, 101, "メロン", 800) db.execute(sql, 102, "いちご", 150) db.execute(sql, 103, "リンゴ", 120) db.execute(sql, 104, "レモン", 200)end
db.execute2("select * from Item") do | row | puts row.join("\t")end
db.close
SQL文を作成
SQL文を作成
SQL文を実行
具体的なデータを入力しSQL文を実行
SQL文を実行
結果を表示
データベースに接続
1215年12月7日月曜日
プログラム内部での表の扱い•カーソル(行の位置を表す概念)を使う
-抽出結果として得た表に、1行ずつアクセスする
-繰り返し文を使って1行ずつカーソルを進める
-フェッチ:カーソルで1行ずつデータを取り出すこと
db.execute2("select * from Item") do | row | puts row.join("\t")end
商品コード 商品名 単価101 メロン ¥800102 いちご ¥150103 りんご ¥120104 レモン ¥200
カーソル繰り返し文
1315年12月7日月曜日
プログラムを作ってみよう•テキストエディタでソースコードを入力
•文字コード:utf-8
•ファイル名「database.rb」で保存
1415年12月7日月曜日
ソースコードrequire "sqlite3"
db = SQLite3::Database.new("database.db")
sql = "create table Item (商品コード integer primary key, 商品名 text, 価格 int)"db.execute(sql)puts "Itemテーブルを作成しました。"
db.transaction do sql = "insert into Item values (?, ?, ?)" db.execute(sql, 101, "メロン", 800) db.execute(sql, 102, "いちご", 150) db.execute(sql, 103, "リンゴ", 120) db.execute(sql, 104, "レモン", 200)end
db.execute2("select * from Item") do | row | puts row.join("\t")end
db.close1515年12月7日月曜日
プログラムを動かす•コマンドプロンプトを使う
-「ruby database.rb」と入力 -> エンターキーで実行
•プログラムを動かせるWebサービスを使う- paiza.IO
• C、C++、Java、PHP、MySQLなど様々なコードの実行が可能
• アカウントを作成するとソースコードの保存、公開などができる
1615年12月7日月曜日
paiza.IOでのプログラム実行-言語からRubyを選択し、ソースコードを入力、実行
Rubyを選択
ソースコードを入力
実行
実行結果
1715年12月7日月曜日