データベース技術
第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 12
1102 3/7 23
1103 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,100
1101 3/5 アメリカ いちご ¥150 300
1102 3/7 中国 りんご ¥120 1,700
1103 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 メロン ¥800
102 いちご ¥150
103 りんご ¥120
104 レモン ¥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.close
1515年12月7日月曜日
プログラムを動かす
•コマンドプロンプトを使う
- 「ruby database.rb」と入力 -> エンターキーで実行
•プログラムを動かせるWebサービスを使う
- paiza.IO
• C、C++、Java、PHP、MySQLなど様々なコードの実行が可能
• アカウントを作成するとソースコードの保存、公開などができる
1615年12月7日月曜日
paiza.IOでのプログラム実行
- 言語からRubyを選択し、ソースコードを入力、実行
Rubyを選択
ソースコード
を入力
実行
実行結果
1715年12月7日月曜日

データベース技術 10(Database 10)