/* 表の作成例 */
CREATE TABLE 社員表
( 社員コード NUMBER(7),
社員氏名 CHAR(20),
住所 CHAR(40),
電話番号 CHAR(12),
生年月日 CHAR(8) )
|
CREATE TABLE 学生表
( 学生コード NUMBER(7) NOT NULL,
氏名 CHAR(20),
住所 CHAR(40),
クラスコード CHAR(12)
PRIMARY KEY(学生コード)
FOREIGN KEY(学生コード) REFERENCES 成績表 ON DELETE CASCADE )
|
| 整合性制約 | 説明 |
|---|---|
| CONSTRAINT const | 整合性制約の定義と制約名の格納 |
| NULL | 列にNULL値を含むことが出来る。[default] |
| NOT NULL | 列にNULL値を含むことは出来ない。 |
| UNIQUE | 列または列の組み合わせを一意キーとして指定する。 |
| PRIMARY KEY | 列または列の組み合わせを表の主キーとして指定する。 |
| FOREIGN KEY | 列または列の組み合わせを 参照整合性制約の外部キーとして指定する。 |
| REFERENCES | 参照整合制約の外部キーによって参照「される」 主キーまたは一意キーとして指定する。 |
| ON DELETE CASCADE | 参照主キーまたは参照一意キーを削除する時に、 依存外部キーを自動削除する。(参照整合性が維持される。) |
| DISABLE | 整合性制約を使用禁止にする。 |
/* ビューの作成例 */
CREATE VIEW 試験平均点ビュー
AS SELECT 科目コード, AVG(点数)
FROM 試験成績表
GROUP BY 科目コード
|
CREATE VIEW SEビュー(SE番号,氏名,部署,級)
AS SELECT 社員番号,社員氏名,部署コード,職級
FROM 全従業員表
WHERE 職種='SE'
WITH READ ONLY
|
/* 条件合致行数のカウント */ SELECT COUNT(*) FROM <表名> WHERE A=1 AND B=1 |
/* 指定項目の降順出力 */ ORDER BY <項目名> DESC |
/* GROUP BY による平均値の算出 */
SELECT 発注番号, AVG(発注数量) FROM 発注明細
GROUP BY 発注番号
|
SELECT 部署ID,部署名,SUM(売上金額)
FROM 部署表,売上表 /* 表を2つ指定→結合 */
WHERE 部署表.部署ID = 売上表.部署ID /* 等価結合 */
AND 職種 = '営業' /* 集計対象部署をWHEREで絞る */
GROUP BY 部署ID /* グループ(要約)化 */
HAVING SUM(売上金額) > 1000000 /* 要約結果を更に絞る */
|
| 関数名 | 構文 | 説明 |
|---|---|---|
| AVG | AVG([DISTINCT|ALL] n) | nの平均値を戻す |
| COUNT | COUNT({*|[DISTINCT|ALL] expr}) | exprを指定した場合、NULLでない行の数を返す。 *を指定した場合、重複値,NULL値も含めた全行数を返す。 |
| MAX | MAX([DISTINCT|ALL] expr}) | exprの最大値を返す。 |
| MIN | MIN([DISTINCT|ALL] expr}) | exprの最小値を返す。 |
| SUM | SUM([DISTINCT|ALL] n}) | nの合計値を返す。 |
| VARIANCE | VARIANCE([DISTINCT|ALL] x}) | xの分散を返す。 |
| STDDEV | STDDEV([DISTINCT|ALL] x}) | xの標準偏差を返す。 |
表T
|
|
SLECT * FROM 顧客表
WHERE 顧客番号 NOT IN (
SELECT Distinct(顧客番号) FROM 注文表)
|
SELECT * FROM 商品表 A
WHERE A.単価 > ALL(
SELECT 単価 FROM 商品表 B
WHERE A.商品番号 <> WHERE B.商品番号)
|
SELECT 商品番号 FROM 商品表
WHERE EXISTS(
SELECT * FROM 売上明細
WHERE 売上明細.商品番号 = 商品表.商品番号)
|
INSERT INTO 部署表
VALUES (18, '営業部', '三田地区')
|
INSERT INTO 賞与表
SELECT 氏名, 職級, 基本給与, 成績点 FROM 売上表
WHERE 成績点 > 75
OR 職級 IN ('社長', '取締役', '管理職')
|
UPDATE 試験成績表
SET 追試フラグ = 1
WHERE 点数 < 平均点数 - 30
|
UPDATE 雇用表
SET 職級='主任', 給料=給料+1050, 部署コード=17
WHERE 氏名='HIJK'
|
| 権限 | 許可される操作 | 表 | ビュー |
|---|---|---|---|
| DELETE | DELETEコマンドでの行削除 | ○ | ○ |
| INSERT | INSERTでの新規行追加 | ○ | ○ |
| SELECT | SELECTによる問い合わせ | ○ | ○ |
| UPDATE | UPDATEによるデータ変更 | ○ | ○ |
| ALTER | ALTERTABLEでの表定義の変更 | ○ | |
| INDEX | CREATE INDEXによる索引の作成 | ○ | |
| REFERENCES | 表の参照制約の作成 | ○ |
| 権限付与対象 | 説明 |
|---|---|
| user | ユーザ |
| role | ロール。ユーザまたは他のロールに付与できる 権限の集合 |
| PUBLIC | 全てのユーザ |
GRANT SELECT, UPDATE ON 教育受講履歴表 TO PUBLIC |
GRANT REFERENCES(雇用者コード), UPDATE(雇用者コード,給料,職級)
ON 雇用表 TO 人事部員
|