宿題提出
なし.
・リレーショナルデータベース言語SQLのDMLは,前章のリレーショナル代数の演算機能を備えている.
・SQLのDDLとDML実習
Postgres | SQL92/SQL3 | 説明 |
---|---|---|
bool | boolean | 論理ブール型(真/偽) |
char(n) | character(n) | 固定長文字列 |
date | date | 時刻を除くカレンダー日付 |
float4/8 | float(p) | 精度pを持つ浮動小数点数 |
float8 | real, double precision | 倍精度浮動小数点数 |
int2 | smallint | 符号付き2バイト整数 |
int4 | int, integer | 符号付き4バイト整数 |
int4 | decimal(p,s) | p <= 9, s = 0である正確な数値 |
int4 | numeric(p,s) | p == 9, s = 0である正確な数値 |
money | decimal(9,2) | USスタイルの通貨 |
time | time | 時刻 |
timespan | interval | 汎用の時間間隔 |
timestamp | timestamp with time zone | 日付/時刻 |
varchar(n) | character varying(n) | 可変長文字列 |
日本語は1文字1-3バイト必要.
学内限定公開のURLでSQLの実習ができるようになっています.URLやユーザ名やパスワードは授業で指示します.このURLで動作しているWebアプリケーションは,教科書7-2章「データベースとWWWの連携」の一例にもなっています.
また,コマンドラインでRDBMSをフル操作することもできます.
SQLのひとつの命令文の最後にはセミコロンをつけます.改行しただけでは文の終わりとはみなされませんので,命令文の最後のセミコロンをお忘れなく.この性質を使って,適当に(SELECT句やFROM句などの単位で)改行した方が見やすくなります.
SQLでは大文字と小文字は区別されません.SELECTなどのあらかじめ予約されている語は大文字で書き,変数やテーブル名を小文字で書くのが良い作法とされているようですが,ここでは全部小文字で書いています.
CREATE TABLE 品物g02c999 ( 品名コード CHAR(5) PRIMARY KEY, 品名 CHAR(20), 値段 INTEGER );
PRIMARY KEYという修飾語で主キーを指定しています.
ALTER TABLE 品物g02c999 ADD COLUMN 材質 CHAR(20);
ADDの他に,DROP,MODIFYなどもあります.
ALTER TABLE 品物g02c999 DROP COLUMN 材質;
これは最後にやります:
DROP TABLE 品物g02c999;
RDBでは,仮想的な表を作ることも出来ます.View表はDBMSが作り出した仮想的な表で,外部スキーマをあらわします.
CREATE VIEW 推薦枠g02c099 AS SELECT 新卒個人データ.整理番号, 新卒個人データ.氏名, 採用内定者.出身大学 FROM 新卒個人データ, 採用内定者 WHERE 新卒個人データ.整理番号=採用内定者.整理番号;
VIEW表を削除するには,
DROP VIEW 推薦枠g02c099;
INSERT INTO 品物g02c999 VALUES ('00010', 'みかん', 200);
INSERT INTO 品物g02c999 VALUES ('00011', 'りんご', 400);
INSERT INTO 品物g02c999 VALUES ('00012', 'イチゴ', 600);
UPDATE 品物g02c999 SET 値段=値段*0.9 WHERE 品名='みかん';
WHERE修飾を忘れると全部更新されてしまいます!
DELETE FROM 品物g02c999 WHERE 品名='みかん';
WHERE修飾を忘れると全部消えてしまいます!
SELECT * FROM 品物g02c999;
品物テーブルの全データを表示します.
SELECT 品名, 値段 FROM 品物g02c999 WHERE 値段<200;
WHERE句で選択条件を指定できます.
SELECT 品名 FROM 品物g02c999 WHERE 値段 BETWEEN 200 AND 1000 AND 品名='イチゴ';
SELECT 品名 FROM 品物g02c999 ORDER BY 品名 ASC;
昇順表示がASC(ascendant),降順表示がDESC(descendent)です.
SELECT * FROM 売上明細 WHERE 売上明細.商品ID= (SELECT 商品ID FROM 商品 WHERE 商品名='マウス');
2段構えにばらして考えるとわかりやすい.
SELECT 商品ID FROM 商品 WHERE 商品名='マウス';
は,003(マウスの商品ID)を返す.
SELECT * FROM 売上明細 WHERE 売上明細.商品ID='003';
は,商品IDが003の売上明細を返す.
SELECT * FROM 売上明細 WHERE 売上明細.商品ID=
(SELECT 商品ID FROM 商品 WHERE 商品名='マウス');
は,商品IDを知らなくても,マウスの売上明細を調べることができる.SELECT AVG(単価) FROM 商品;
SELECT MAX(単価) FROM 商品;
SELECT MIN(単価) FROM 商品;
SELECT SUM(単価) FROM 商品;
SELECT COUNT(*) FROM 商品;
SELECT 出身大学, COUNT(*) FROM 採用内定者 GROUP BY 出身大学;
直積になってしまう:
SELECT * FROM 売上明細, 商品;
ので,等結合をとる.
SELECT * FROM 売上明細, 商品 WHERE 売上明細.商品ID=商品.商品ID;
今度は自然結合
SELECT 売上明細.受付ID, 売上明細.商品ID, 商品.商品名, 商品.単価, 売上明細.個数 FROM 売上明細, 商品 WHERE 売上明細.商品ID=商品.商品ID;
SELECT U.受付ID, U.商品ID, S.商品名, S.単価, U.個数 FROM 売上明細 U, 商品 S WHERE U.商品ID=S.商品ID;