データベース技術 9(database 9)

30
データベース技術 9回(2015.11.241 151124日火曜日

Upload: yuka-obu

Post on 09-Jan-2017

183 views

Category:

Education


0 download

TRANSCRIPT

データベース技術第9回(2015.11.24)

115年11月24日火曜日

データの追加・更新•全てのカラムに値を指定して追加

- INSERT INTO テーブル名 VALUES(値1, 値2, ...);

•特定のカラムだけに値を指定しデータを追加- INSERT INTO テーブル名(カラム1, カラム2, ...)

VALUES(値1, 値2, ...);

•既に格納されているデータを変更する- UPDATE テーブル名 SET カラム名1 = 値1, カラム名2

= 値2, ... WHERE 条件式;215年11月24日火曜日

データの削除•テーブルに格納済みのデータを削除する

- DELETE FROM テーブル名 WHERE 条件式;

-削除対象のデータは、WHERE句の条件式で指定する

-条件式に一致するデータが複数の場合は、複数の  データが削除される

- WHERE句を省略した場合、全てのデータが削除される

315年11月24日火曜日

SQLiteの操作•データーベスの作成&接続

•テーブルの作成

•データの追加、更新、削除

•データの取得 今日やること

415年11月24日火曜日

データの取得•基本的書式

- SELECT カラム名1, カラム名2, ... FROM テーブル名;

•全てのカラムを取得する場合- SELECT * FROM テーブル名;

•取得するデータの条件を指定する場合- SELECT カラム名 , ... FROM テーブル名 WHERE 条件式;

515年11月24日火曜日

条件の作成(1)•比較演算子

比較演算子 意味 例 例の意味

A=B AとBが等しい 価格=200 価格が200と等しい

A>B AがBより大きい 価格>200 価格が200より大きい

A>=B AはB以上 価格>=200 価格が200以上

A<B AがBより小さい 価格<200 価格が200より小さい

A<=B AはB以下 価格<=200 価格が200以下

A<>B AとBは等しくない 価格<>200 価格が200でない

615年11月24日火曜日

条件の作成(2)•論理演算子

論理演算子 意味 例 例の意味

AND AかつB商品コード>=200

AND 単価=100商品コードが200以上でかつ 単価が100

OR AまたはB商品コード>=200

OR 単価=100商品コードが200以上かまたは 単価が100

NOT Aではない NOT 単価=100 単価が100でない

715年11月24日火曜日

Select文実行例

815年11月24日火曜日

いろいろな検索方法•値の範囲を指定(BETWEEN BY)

•空値の検索(IS NULL)

•データを並べ替えて表示(ORDER BY)

•データをグループ化して合計や平均を計算(GROUP BY)-集計関数

915年11月24日火曜日

値の範囲を指定•カラムが値1と値2の間に含まれている場合

- SELECT カラム名 , ... FROM テーブル名    WHERE カラム BETWEEN 値1 AND 値2;

•カラムが値1と値2の間に含まれていない場合- SELECT カラム名 , ... FROM テーブル名   

WHEREカラム NOT BETWEEN 値1 AND 値2;

1015年11月24日火曜日

値の範囲を指定 実行例

1115年11月24日火曜日

空値の検索•書式

- SELECT カラム名 , ... FROM テーブル名    WHERE カラム IS NULL;

•実行例

1215年11月24日火曜日

データを並べ替えて表示•書式

- SELECT カラム名 , ... FROM テーブル名 ORDER BY カラム名1 [ASC | DESC], カラム名2 [ASC | DESC], ...;

- ASC:昇順

- DESC:降順

- ASC、DESCを省略した場合は昇順

1315年11月24日火曜日

データを並べ替えて表示 実行例

1415年11月24日火曜日

データをグループ化(1)•集計関数を使う

集計関数 意味COUNT(*) 行の数を求める

COUNT(列名) 空値を除く行の数を求めるCOUTN(DISTINCT 列名) 空値と重複行を除く行の数を求める

SUM(列名) 各行の合計値を求めるAVG(列名) 各行の平均値を求めるMAX(列名) 各行の最大値を求めるMIN(列名) 各行の最小値を求める

1515年11月24日火曜日

データをグループ化(2)•書式

- SELECT カラム名, ... FROM テーブル名 GROUP BY カラム名, カラム名, ...;

•例-平均年齢を求める:select avg(old) from user;

- addressごとの平均年齢を求める:select address, avg(old) from user group by address;

1615年11月24日火曜日

データをグループ化 実行例

1715年11月24日火曜日

他テーブルからのデータの追加•他のテーブルからデータを取得し格納する

- INSERT INTO テーブル名 SQL文;

- INSERT INTO テーブル名(カラム名1, カラム名2, ...) SQL文;

-データを追加するテーブルのカラム数とSQL文で取得するデータ数は同じである必要がある• 例:INSERT INTO テーブル1 SELECT C1, C2, C3 FROM テーブル2

WHERE …;

1815年11月24日火曜日

ここで...•これまでの流れ

-売上報告書から第三正規形の表を作成

-データベース化を行った(SQLiteの操作)

•データベースから売上報告書を作成する   →表の結合(複数の表をつなげること)

1915年11月24日火曜日

売上報告書•売上報告書報告書コード 日付 輸出先コード 輸出先名 商品コード 商品名 単価 個数

1101 3/5 12 アメリカ 101 メロン ¥800 1,1001101 3/5 12 アメリカ

102 いちご ¥150 3001102 3/7 23 中国 103 りんご ¥120 1,7001103 3/8 25 フランス 104 レモン ¥200 500

2015年11月24日火曜日

第三正規形にまでにした表•リレーショナルデータベースではこの表を使う

報告書コード 日付 輸出先コード

1101 3/5 121102 3/7 231103 3/8 25

輸出先コード 輸出先名

12 アメリカ23 中国25 フランス

「売上」表 「輸出先」表

商品コード 商品名 単価101 メロン ¥800102 いちご ¥150103 りんご ¥120104 レモン ¥200

報告書コード 商品コード 個数1101 101 1,1001101 102 3001102 103 1,7001103 104 500

「商品」表「売上明細」表

参照

参照

参照

2115年11月24日火曜日

表の結合•SQL文作成のポイント

-「主キーとそれを参照している外部キーが等しい」という条件をつける

-同じカラム名がある場合はテーブル名.カラム名とする

•具体例:売上.輸出先コード=輸出先.輸出先コード

報告書コード 日付 輸出先コード

1101 3/5 121102 3/7 231103 3/8 25

輸出先コード 輸出先名

12 アメリカ23 中国25 フランス

「売上」表 「輸出先」表

参照

2215年11月24日火曜日

表の結合 具体例SELECT 売上.報告書コード, 日付,     売上.輸出先コード, 輸出先名,     売上明細.商品コード, 商品名, 単価, 個数FROM 売上, 売上明細, 商品, 輸出先WHERE 売上.報告書コード = 売上明細. 報告書コード    AND    売上明細.商品コード = 商品.商品コード    AND    輸出先.輸出先コード = 売上.輸出先コード

報告書コード 日付 輸出先コード

1101 3/5 12

輸出先コード 輸出先名

12 アメリカ

「売上」表

「輸出先」表

商品コード 商品名 単価

101 メロン ¥800

報告書コード 商品コード 個数

1101 101 1,100

「商品」表

「売上明細」表

2315年11月24日火曜日

表の結合 結果

報告書コード 日付 輸出先コード 輸出先名 商品コード 商品名 単価 個数

1101 3/5 12 アメリカ 101 メロン ¥800 1,1001101 3/5 12 アメリカ 102 いちご ¥150 3001102 3/7 23 中国 103 りんご ¥120 1,7001103 3/8 25 フランス 104 レモン ¥200 500

SELECT 売上.報告書コード, 日付,     売上.輸出先コード, 輸出先名,     売上明細.商品コード, 商品名, 単価, 個数FROM 売上, 売上明細, 商品, 輸出先WHERE 売上.報告書コード = 売上明細. 報告書コード    AND    売上明細.商品コード = 商品.商品コード    AND    輸出先.輸出先コード = 売上.輸出先コード

2415年11月24日火曜日

いろいろな結合方法(1)•内部結合(inner join)

-値が共通する行だけ選択する結合方法-等結合(equi join)

• 同じ意味を表す列を介して表を結合すること

• 同じ値を持つ行を結合条件として指定する

• 売上報告書の例がこれにあたる

-自然結合(natural join)• 重複する列を1つにまとめる結合

2515年11月24日火曜日

いろいろな結合方法(2)•外部結合(outer join)

-どちらか一方の表の行全体を残し、もう片方の表にない行に空値を設定する結合方法報告書コード 日付 輸出先コード

1101 3/5 121102 3/71103 3/8 25

輸出先コード 輸出先名

12 アメリカ23 中国25 フランス

報告書コード 日付 輸出先コード 輸出先名

1101 3/5 12 アメリカ1102 3/71103 3/8 25 フランス

2615年11月24日火曜日

いろいろな結合方法(2)•外部結合(outer join)

-どちらか一方の表の行全体を残し、もう片方の表にない行に空値を設定する結合方法

-左外部結合(left outer join)

-右外部結合(right outer join)• 2つの表をSQL文中で左・右どちらかにおいた時、どちらの表の行を全部残すかによって決まる

2715年11月24日火曜日

いろいろな結合方法(3)右表左表

左外部結合 右外部結合

2815年11月24日火曜日

Work:小テスト•データを取得するSQL文を考える問題

•manabaから解答(解答者を出席とします)

2915年11月24日火曜日

参考文献•SQLite入門 http://www.dbonline.jp/sqlite/

•マンガでわかるデータベース, オーム社

3015年11月24日火曜日