データベース技術 9(database 9)
TRANSCRIPT
データの追加・更新•全てのカラムに値を指定して追加
- 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日火曜日
データの取得•基本的書式
- 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日火曜日
いろいろな検索方法•値の範囲を指定(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日火曜日
データを並べ替えて表示•書式
- SELECT カラム名 , ... FROM テーブル名 ORDER BY カラム名1 [ASC | DESC], カラム名2 [ASC | DESC], ...;
- ASC:昇順
- DESC:降順
- ASC、DESCを省略した場合は昇順
1315年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日火曜日
他テーブルからのデータの追加•他のテーブルからデータを取得し格納する
- 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日火曜日