表の定義
CREATE TABLE文を用いて、表(テーブル)を定義(作成)することができます。
例 CREATE TABLE 社員(
社員番号 DEC(4),
氏名 NCHAR VARYING(10) NOT NULL,
性別 CHAR,
生年月日 DATE,
部署コード CHAR(4),
PRIMARY KEY (社員番号),
FROREIGN KEY (部署コード) REFERENCES 部署(部署コード),
CHECK (性別 = ’M’ OR 性別 = ’F’))
1.列定義
列定義は、社員番号、氏名、生年月日、部署コードの部分で、列名のあとにデータ型を指定します。また、必要に応じて列制約を定義します。
データ型 | 短縮形 | 内容 |
---|---|---|
INTEGER | INT | 符号付き整数 |
NUMERIC(p,q) | けた数(精度)がP、小数点以下がqけたの10進数 qを省略した場合、小数点なし pを省略した場合、処理系に依存 | |
DECIMAL(p,q) | DEC(p,q) | けた数(精度)が少なくともP、小数点以下がqけたの10進数 p・q省略した場合、NUMERICと同様 |
CHARACTER(n) | CHAR(n) | n文字の固定長1バイト文字 nを省略した場合、n=1とみなされる |
CHARACTER VARYING(n) | VARCHAR(n) | 最大n文字の可変長1バイト文字 nを省略した場合、n=1とみなされる |
NATION CHARACTER(n) | NRCHAR(n) | 最大n文字の固定長2バイト文字 nを省略した場合、n=1とみなされる |
NATION CHARACTER VARYING(n) | NCHAR VARYING(n) | 最大n文字の可変長2バイト文字 nを省略した場合、n=1とみなされる |
DATE | yyyy-mm-dd形式の日時 |
2.列制約
列制約は、その列に対する制約で、列定義に含まれます。
NOT NULLが該当します。
列制約に違反する(挿入や更新など)は許可されません。
NOT NULL | 列の値が空値となってはならない(非ナル制約) |
UNIQE | 表中で一意の値をとらなければならない |
PRIMAY KEY | 主キーの定義(主キー制約) |
REFERENS <表名>(<表名>) | <表名>で指定した表の<列名>を参照する(参照制約) |
3.主キーと外部キー
主キーと外部キーは、単一に列であれば列制約と表制約のどちらでも定義でき、複数列の組み合わせであれば表制約で定義します。
表制約では、主キーはPRIMARY KEYで定義します。列の組合せが主キーである場合(複合キー)は、
PRIMARY KEY(列名1, 列名2,・・・・・)
と列名を列挙して指定します。
同様に表制約では、外部キーはFOREIGN KEYで定義します。列を指定した後には、REFERENCES以降に参照する表とその主キー(または一意性のある列)を指定します。
例えば、「部署コードを、部署表の部署コードを参照する外部キーとする」のであれば
FOREIGN KEY (部署コード) REFERENCES 部署(部署コード)
のように記述します。
4.検査制約
検査制約はmその列が満たすべき条件を設定し、不正な設定がされていなようにするための制約です。表制約と列制約のどちらでも設定することが可能でCHEACKに続けて条件を設定します。
CHECK(給与 BETWEEN 100000 AND 300000) | 給与は10万円から30万円の間である |
CHECK(給与 >= 100000 AND 給与 <= 300000) | 同上 給与は10万円以上かつ30万円以下である |
CHECK 性別 IN (’M’ , ’F’) | 性別は’M’か’F’のいずれか |
CHECK (性別 = ’M’ OR 性別 = ’F’) | 同上 性別は’M’か’F’ |
権限定義
定義した表に関する処理権限を定義するには、GRANT文を用います。
GRANT <動作リスト> ON <表名> TO <ユーザ名リスト>
動作リストには、SELECTやINSERTといった各ユーザに許可したい動作を列挙して指定します。
データ操作
・行の挿入
例 INSERT INTO 社員 VALUES (’0005′ , ‘長谷川’ , ‘M’ , ‘1980-01-10’ , ‘SYS1’)
または、INSERT INTO 社員(社員番号 , 氏名)VALUES (’0005′ , ‘長谷川’)
列を指定することもできる、指定しない列の値はNULLまたはデフォルト値
・行の削除
例 DELETE FROM 社員 WHERE 社員番号 = ‘0005’
社員番号0005の行を、社員表から削除する
・行の更新
例 UPDATE 社員 SET 部署コード = ‘MNG1’ WHERE 社員番号 = ’0005’
社員番号0005の行の部署コードをMNG1に更新する
実表とビュー
実表 〜 実際に存在する表
ビュー(仮想表) 〜 実表からデータを抜いたり加工して、ユーザが使いやすい形に一時的(仮想的)な表
3層スキーマアーキテクチャでは概念スキーマが実表に該当し、外部スキーマがビューに該当します。
ビュー定義
ビューはCREATE VIEW文で定義します。ビューは実表と同じように扱うことができますが、実際には利用者の見えないところで指定されたSELECT文が実行され、その結果を実表のように見せているだけです。
CREATE VIEW <ビュー名>(<列名リスト>) AS <SELECT文>
例 CREATE VIEW 基本人件費(部署コード, 部署名, 月人件費)
AS SELECT 部署.部署コード, 部署.部署名, SUM(基本給)
FROM 社員, 部署
WHERE 社員.部署コード = 部署.部署コード
GROUP BY 部署.部署コード, 部署.部署名
なお、ビューに対してINSERT文、UPDATE文、DELETE文などを実行することで、ビューのデータを更新することもできます。ただし更新が可能なビューは、ビューのデータを更新するとビューの元となる実表に反映されます。なお、上のビューは「グループ化」が行われているので更新できません。
プログラムからのSQLの呼び出し
プログラムからSQLを呼び出す方法には、埋込み方式とモジュール方式があります。
埋込み方式では、カーソルを操作します。カーソルは、SQL文の問合せを1行ずつ取り出すための仕組みです。
モジュール方式では、ストアドプロシージャ(手続きをデータベースサーバに格納しておく)に発展します。ネットワークの通信量を軽減できます。