• 検索結果がありません。

Microsoft PowerPoint pptx

N/A
N/A
Protected

Academic year: 2021

シェア "Microsoft PowerPoint pptx"

Copied!
21
0
0

読み込み中.... (全文を見る)

全文

(1)

データベース

データベース

第11回(2009年11月27日) テーブル結合と集計(演習) テ ブル結合と集計(演習)

(2)

11

11回

回のテーマ

のテーマ

11

11回

回のテーマ

のテーマ

y 前回より シラバスから離れ 進捗状況に y 前回より、シラバスから離れ、進捗状況に 合わせて全体構成を変更しています。 y テーマ1:テーブルの結合 テ 2 結合した結果からの様々な検索 y テーマ2:結合した結果からの様々な検索 y テーマ3:集計の方法

(3)

今日学ぶべきことがら

今日学ぶべきことがら

今日学ぶべきことがら

今日学ぶべきことがら

y Select文のさまざまな表現 y Select文のさまざまな表現 ◦ Natural join ◦ sum(*) ◦ orrder byy ◦ Group by ◦ などを学ぶ ◦ などを学ぶ ノートの左側:「問い」の部分に記載する (書き込むのは、後にしよう。)

(4)

前回出した予習課題

前回出した予習課題

前回出した予習課題

前回出した予習課題

y 教科書P65の 明細テ ブルの内容を y 教科書P65の、明細テーブルの内容を 入力してしておいて下さい。 y Select文を用いての検索例として、試 します。 します。

(5)

データを入力する

データを入力する

データを入力する。

データを入力する。

以下のSQL文を実行する 以下のSQL文を実行する。

create table detailTB ( OrderNo char(5) not null, Item varchar(40) not null, Price int unsigned not null, Qty smallint unsigned not null, primary key (OrderNo, Item) ); insert into detailTB values ('16001', 'Personal Computer', 100, 2 );

insert into detailTB values ('16001', 'MO Drive', 50, 1 ); insert into detailTB values ('16001' 'Table Tap' 2 4 ); insert into detailTB values ( 16001 , Table Tap , 2, 4 ); insert into detailTB values ('16001', 'Display', 45, 2 );

insert into detailTB values ('16002', 'Digital Camera', 30, 1 ); d lTB l ('16002' 'CF M ' 10 2 ) insert into detailTB values ('16002', 'CF Memory', 10, 2 ); insert into detailTB values ('16003', 'Filter', 6, 2 );

insert into detailTB values ('16003', 'Personal Computer', 90, 3 ); insert into detailTB values ('16004', 'Carrier', 5, 1 );

insert into detailTB values ('16004', 'Battery', 9, 1 ); insert into detailTB values ('16004', 'Display', 40, 3 ); insert into detailTB values ( 16004 , Display , 40, 3 );

(6)

SQL

SQL文読み込みのコマンド

文読み込みのコマンド

SQL

SQL文読み込みのコマンド

文読み込みのコマンド

y detailSQL sqlファイルを読み込む y detailSQL.sqlファイルを読み込む。 ◦ USBメモリを準備してください。 C ¥M SQLD ¥ y C:¥MySQLData¥ ◦ にコピーする。 y MySQLで、以下の文を実行する。 source C:¥MySQLData¥detailSQL.sql;y q ◦ ファイル「detailSQL.sql」の内容が、コマンドと して実行される。

◦ 注意:load data infile ‘データファイル名’ into table ‘テーブル名’ …..

(7)

演習を簡単にするためには

演習を簡単にするためには

演習を簡単にするためには

演習を簡単にするためには

y SQL文を書いて C:¥MySQLData¥の下 y SQL文を書いて、C:¥MySQLData¥の下 に、SQL文のファイルを置いておき、 その イ を編集し 実行する そのファイルを編集して実行する。 source ファイル名; で実行可能 sou ce ファイル名; で実行可能 y そうすると、毎回書きなおす手間が省 ける ける。

(8)

教科書の例を入力する

教科書の例を入力する

(3)

(3)

教科書の例を入力する

教科書の例を入力する

(3)

(3)

y Not null ではなく 値がない場合 y Not null ではなく、値がない場合

Insert into CorpTB ( CorpID, CorpName ) values ( ‘B112’, ‘Yawataya’ ); テ ブル名の後に列名を記して それ テーブル名の後に列名を記して、それ に対応するように値を列挙する。 CorpAddrの列には値がないので、その 部分を除外する。 部分を除外する。

(9)

教科書の例を入力する

教科書の例を入力する

(4)

(4)

教科書の例を入力する

教科書の例を入力する

(4)

(4)

y 入力を間違えた場合の修正 y 入力を間違えた場合の修正

Insert into CorpTB values (

‘A012’ ‘Ohyama Syoten’ ‘Yachiyo’ );A012 , Ohyama Syoten , Yachiyo );

‘Ohyama Syoten’ではなく’Koyama Syoten’

だ た

だった・・ Update CorpTBp p

set CorpName=‘Koyama Syoten’ h C ID ‘A012’

(10)

教科書の例を入力する

教科書の例を入力する

(5)

(5)

教科書の例を入力する

教科書の例を入力する

(5)

(5)

y 1レコ ドを丸ごと削除する y 1レコードを丸ごと削除する。

Delete from CorpTB

where CorpID = ‘E012’;

y この where の後は key項目でなく y この、where の後は、key項目でなく ても記述できる。 y また、該当するレコードがすべて削除 される。 される。 y Where以下を書かないと、全部のレ コ ドが削除されてしまう! コードが削除されてしまう!

(11)

二つのテーブルを結合する

二つのテーブルを結合する

二つのテーブルを結合する。

二つのテーブルを結合する。

Select OrderNo CorpName Select OrderNo, CorpName

from OrderTB, CorpTB

where OrderTB.CorpID = CorpTB.CorpID;

y 意味:意味 ◦ 注文テーブル:OrderTBの「会社ID」と、 会社テ ブル:C TBの「会社ID」とが ◦ 会社テーブル:CorpTBの「会社ID」とが ◦ 等しいレコードを結び付けて、 ◦ 注文番号と、その注文をした会社名を表 示する。

(12)

自然結合

自然結合

自然結合

自然結合

y OrderTBとCorpTBとでは 会社IDを表 y OrderTBとCorpTBとでは、会社IDを表 現する列名を同じにしてある。 y この場合には、自然結合が使える。

Select * from OrderTB Select from OrderTB

(13)

明細データとの結合結果表示

明細データとの結合結果表示

明細データとの結合結果表示

明細データとの結合結果表示

項目名が同じなので 自然結合できる 項目名が同じなので、自然結合できる。 Select * from OrderTB

(14)

注文金額を知りたい

注文金額を知りたい

注文金額を知りたい

注文金額を知りたい

y 教科書P98 y 教科書P98 ◦ 算術演算子が使える

select OrderNo, Item, Price*1000*Qty from detailTB;

(15)

注文番号ごとに集計したい

注文番号ごとに集計したい

注文番号ごとに集計したい

注文番号ごとに集計したい

y P103 104 y P103, 104

Select OrderNo, sum(Price*1000*Qty ) from detailTB group by OrderNo; group by OrderNo; 表示したい項目をSelectの後に書く。 Group by で、「注文番号ごと」を記述 sum()は合計を求める集合関数 sum()は合計を求める集合関数 group by は、何で集合するかを表す。

(16)

注文

注文番号ごとの集計に、日付と

番号ごとの集計に、日付と

会社名を表示したい。

会社名を表示したい。

y P103 104 y P103, 104

Select OrderNo, sum(Price*1000*Qty ) from detailTB

group by OrderNo; group by OrderNo;

(17)

結果を比べてみよう

結果を比べてみよう

結果を比べてみよう

結果を比べてみよう

Select OrderTB.OrderNo, OrderDate, CorpName, sum(Price*1000*Qty) Se ect O e .O e o, O e ate, Co p a e, su ( ce 000 Qty)

from OrderTB natural join CorpTB, DetailTB group by OrderNo

order by OrderDate;

Select OrderTB.OrderNo, OrderDate, CorpName, sum(Price*1000*Qty) from OrderTB DetailTB CorpTB

from OrderTB, DetailTB, CorpTB

where OrderTB.orderNo = DetailTB.OrderNo and OrderTB.CorpID = CorpTB.CorpID group by OrderNo order by OrderDate; 同じことをやっているはずだが 結果が異なる 同じことをやっているはずだが、結果が異なる ⇒ natural joinだけに任せていると、予期せぬ結果が出ることがあ るので、whereを用いた書き方をきちんと覚えよう。

(18)

さらに、注文内容が「

さらに、注文内容が「

Personal

Personal

Computer

Computer」だけの集計を出す

」だけの集計を出す

Select OrderTB OrderNo OrderDate CorpName Select OrderTB.OrderNo, OrderDate, CorpName,

sum(Price*1000*Qty)

from OrderTB, DetailTB, CorpTB from OrderTB, DetailTB, CorpTB

where OrderTB.orderNo = DetailTB.OrderNo and OrderTB CorpID = CorpTB CorpID and OrderTB.CorpID CorpTB.CorpID group by OrderNo

order by OrderDate; order by OrderDate;

y where節に、andで続ける

and Item=‘Personal Computer’ and Item= Personal Computer を書き加える。

(19)

【今日のレポート:来週提出】

以下のそれぞれのコマンドの、実行結果をそれぞれについて記 して下さい。(2点ずつ) 各述語、句(group by 句など)ごとに、コマンドの意味を説明 して下さい。(各項目1点) 概算12点満点 説明する項目の数が多いほど 点数は高くなります 説明する項目の数が多いほど、点数は高くなります。

Select OrderTB.OrderNo, OrderDate, CorpName, sum(Price*1000*Qty) from OrderTB natural join CorpTB, DetailTB

group by OrderNo order by OrderDate;

Select OrderTB.OrderNo, OrderDate, CorpName, sum(Price*1000*Qty) from OrderTB, DetailTB, CorpTB

where OrderTB orderNo = DetailTB OrderNo where OrderTB.orderNo DetailTB.OrderNo

and OrderTB.CorpID = CorpTB.CorpID group by OrderNo

d b O d D order by OrderDate;

(20)

今日学んだこと

今日学んだこと

今日学んだこと

今日学んだこと

y Select文に述語 句を加えると様々な y Select文に述語、句を加えると様々な 集計・検索が可能となる。

(21)

12

12回

回の予習

の予習

12

12回

回の予習

の予習

本日返却した 「自作デ タベ ス」 y 本日返却した、「自作データベース」 のテーブル設計を具体的に進め、各項 2 3行 ド( プ デ 目2~3行のレコード(サンプルデー タ)を登録して、SQLを実行できるよ うに、考えてきておいて下さい。

参照

関連したドキュメント

[r]

いかなる使用の文脈においても「知る」が同じ意味論的値を持つことを認め、(2)によって

First three eigenfaces : 3 個で 90 %ぐらいの 累積寄与率になる.

まずフォンノイマン環は,普通とは異なる「長さ」を持っています. (知っている人に向け て書けば, B

READ UNCOMMITTED 発生する 発生する 発生する 発生する 指定してもREAD COMMITEDで動作 READ COMMITTED 発生しない 発生する 発生する 発生する デフォルト.

共通点が多い 2 。そのようなことを考えあわせ ると、リードの因果論は結局、・ヒュームの因果

と言っても、事例ごとに意味がかなり異なるのは、子どもの性格が異なることと同じである。その

ダウンロードしたファイルを 解凍して自動作成ツール (StartPro2018.exe) を起動します。.