SQL このページは、著作権の関係から、近々メンバーページに移動します。
SQLのふたつの機能
DDL・・・データ定義言語(データ・・・ランゲッジ)
DML・・・データ操作言語(〃)
スキーマ・・・データベース構造の定義。
ハードウェア、ソフトウェア、データ入力用表・行・列などを定義記述したもの
DDL(データ定義言語)を用いて定義する。
- 副スキーマ(外部スキーマ)
- スキーマ(概念スキーマ)
- 記憶スキーマ(内部スキーマ)
主な命令
- データ定義言語
- CREATE SCHEMA クリエイト スキーマ スキーマを定義する
- CREATE TABLE クリエイト テーブル 実表を定義する
- CREATE VIEW クリエイト ビュー ビュー表を定義する
- GRANT データベースへのアクセス権を定義する
- データ操作言語
- SELECT 抽出する セレクトとは、直訳すると「選ぶ」なんですよね
- INSERT 行を追加する
- DELETE 行を削除する
- UPDATE 値を更新する
実例1 射影 (列の抽出)
- SELECT 列1,列2 FROM 表A
───┬───── ──┬───
文 句
列が複数→「,」で区切る=列の抽出
- SELECT * FROM 表A
表Aの列すべてを抽出する
実例2 選択 (行の抽出)
- SELECT * FROM 表A WHERE 項目x=’男’AND項目y>=70
シングルクォーテーションマークを使う。↑
項目xが男で、項目yが70以上の人の行を抽出する=行の抽出
AND、OR、NOT、<>=などの説明・・・省略
実例3 条件付け抽出1・・・基本の方
- SELECT 項目1,項目2,項目3 FROM 表A
WHERE 項目x=’男’AND項目y>=70
↑シングルクォーテーションマークを使う。
項目xが男で、項目yが70以上の人の行を抽出する=行の抽出
列は、項目1,項目2,項目3を抽出する=列の抽出
つまり、射影と選択を同時に行う
実例4 条件付け抽出2・・・難しい方
- SELECT 項目1,項目2 FROM 表A
WHERE 項目x BETWEENND50AND60
項目xが、50から60の間(50以上60以下)の項目1、項目2を抽出する
- SELECT 項目1,項目2 FROM 表A WHERE 項目x LIKE %川__
項目xが、「0字以上」+川+二文字の項目1、項目2を抽出する
%は、「0字以上」を表し、_は1文字を表す
- SELECT 項目1,項目2 FROM 表A WHERE
項目x IN (SELECT MAX(項目x) FROM 表A)
↑副問合せ ↑集計関数
表Aの中で項目xのある条件の項目1,2を抽出するが、ある条件とは項目xの最大値である。
例 成績表の国語の最高点を算出し、その最高点と同じ国語の点数を持つ氏名を抽出する。
実例5 表の結合
- SELECT 表A.項目x,表A.項目2,表A.項目3,表B.項目4,表B.項目5
FROM 表A,表B WHERE 表A.項目x=表B.項目x
表Aと表Bの項目xという共通の列で結合し、SELECTの後に表示する列を表示する。
実例6 データのグループ化 (グループ化=GROUP BY)
- SELECT 項目x,AVG(項目y) GROUP BY 項目x
項目xでグループ化し、項目yの平均を表示する。
例えば、性別でグループ化し、数学の平均を表示する。
答えは、性別と平均が男女の2行2列の表になる
- SELECT 項目x GROUP BY 項目x HAVING 抽出条件
項目xでグループ化し、抽出条件に合った項目xの表示する。
HAVING は、WHEREと似ている。
WHEREは、行や列の抽出での抽出条件、HAVINGは、グループ化の抽出条件を表示する
実例7 抽出データ、並べ替え (並べ替え=ORDER BY)
ASC:昇順 、 DESC:降順 、 (空白値は、最大値として扱われる)
左端上端にESCキーがありますが、これとは違います。ASCとDESCです。
- SELECT * FROM 表A ORDER BY 項目x ASC
表Aからすべての列を抽出し項目xを昇順で並べ替え、表示する。
実例8 行の追加 (行の追加 = INSERT INTO 〜 VALUES 〜)
(INSERT INTOの後の項目の数と、VALUESの後の入力文字の数は、同じでないとエラーになる)
- INSERT INTO 表A(項目1,項目2) VALUES (’入力文字1’,’入力文字2’)
入力文字1と入力文字2の行を追加する。(指定しなかった項目は空白値が入る)
実例9 行の削除 (行の削除 = DERETE FROM 〜 WHERE 〜)
- DERETE FROM 表A WHERE 項目1=条件文字a
項目1の中の条件文字aの行を削除する。
- DERETE FROM 表A WHERE 抽出条件
項目1の中の抽出条件に合う行を削除する。
実例10 値の更新 (値の更新 = UPDATE 〜 SET 〜 WHERE 〜)
- UPDATE 表A SET 項目2=’入力文字a’ WHERE 項目1=条件文字a
主キー項目1の中の条件文字aの行の項目2を入力文字aに更新する。
- UPDATE 表A SET 項目2=’入力文字a’ WHERE 商品番号=’0002’
商品番号が0002の行の項目2を入力文字aに更新する。
UPDATE 表A SET 項目2=項目2 * 0.7
項目2を一律70%に更新する。このように計算式を代入できる
正規化
- 問題集 p223の問3の図のように矢印で、関係を見たら分かりやすいようです。
┌───┐ ┌──┬───┐
│
↓ │ ↓
↓
製品No 製品名 倉庫No 倉庫名 所在地 在庫数量 総在庫数量
│└───┬──┘ ↑=なお文
↑
│ └──────────────┘
│
└─────────────────────────┘
下半分の矢印は、本文の「なお」以下の説明による
製品No 製品名 総在庫数量
倉庫No 倉庫名 所在地
製品No 倉庫No 在庫数量 ・・・リレーションする表、外部キー
上の矢印はER図の1対多と同じ状態です。
そして、1側は、項目が主キーで、マスタ表になっています。
多側は、項目が外部キーで、データ入力表になっています。
- マスタ表・・・製品Noで始まる表、倉庫Noで始まる表
- データ入力表・・・在庫数量を入れる表