...

IBM Red Brick Warehouse バージョン 6.2 年 9 月 2002

by user

on
Category: Documents
141

views

Report

Comments

Transcript

IBM Red Brick Warehouse バージョン 6.2 年 9 月 2002
IBM Red Brick Warehouse
バージョン 6.2
2002 年 9 月
Part No. 000-9054-8
注意 :
本書の情報および該当製品をご利用になる前に、付録「特記事項」の内容をお読みください。
本書には、IBM の著作権情報が含まれます。本書は、使用許諾契約に基づいて提供され、著作権法により
保護されます。本書の内容には、いかなる製品の明示的または黙示的保証も含まれません。
お客様が IBM に情報をお送りなる場合は、IBM に当該情報を自由に使用、頒布するための権利を許諾され
たものとみなされます。IBM が当該情報を利用することにより、お客様に責任が及ぶことはありません。
© Copyright International Business Machines Corporation 1996, 2002. All rights reserved.
米国政府機関ユーザーの権利の制限 - IBM Corporation との間の GSA ADP Schedule Contract により、使用、複
製、および開示が制限されます。
ii SQL Reference Guide
目次
目次
まえがき
この章について . . . . .
まえがき . . . . . . .
対象読者 . . . . . .
ソフトウェア要件 . .
本書の表記法 . . . . . .
文字の表記規則 . . .
構文の規則 . . . . .
構文ダイアグラム . .
キーワードと区切り文字
識別子と名前 . . . .
文中記号の表記規則 . .
関連文献 . . . . . . .
その他のドキュメント . .
オンライン マニュアル .
印刷マニュアル . . .
オンライン ヘルプ . .
第1章
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3
3
3
4
5
5
6
7
9
9
10
11
13
13
13
13
この章について . . . . . . . . .
リレーショナル データベースのテーブル
複数ユーザとテーブル ロック . .
テーブルのビュー . . . . . .
インデックス . . . . . . . .
プライマリ キーとフォーリン キー
データベースの整合性 . . . . .
権限と特権 . . . . . . . . .
システムカタログ . . . . . .
IBM Red Brick Warehouse . . . . . .
スキーマ設計 . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1-3
1-5
1-5
1-6
1-7
1-7
1-8
1-9
1-9
1-10
1-10
IBM Red Brick Warehouse の概要
意思決定支援向け関数および OLAP 関数
サブクエリによる比較 . . . . . . .
マクロ . . . . . . . . . . . .
セグメント単位の格納 . . . . . . .
ローカライゼーション . . . . . . .
Aroma データベース . . . . . . .
第2章
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
SQL Reference Guide
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1-11
1-11
1-11
1-12
1-13
1-14
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2-3
2-3
2-4
2-4
2-5
2-6
2-9
2-9
2-10
2-12
2-13
2-14
2-15
2-16
2-19
2-20
2-21
2-22
2-22
2-23
2-24
2-24
2-25
2-26
2-26
2-27
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3-3
3-4
3-4
3-5
式と条件
この章について
式 . . . .
単項式 .
多項式 .
iv
.
.
.
.
.
.
SQL 言語の各要素
この章について . . . . . . . . . . . . . .
名称と識別子 . . . . . . . . . . . . . .
標準識別子 . . . . . . . . . . . . . .
区切り識別子 . . . . . . . . . . . . .
大文字と小文字 . . . . . . . . . . . .
エリアスと相関名 . . . . . . . . . . .
定数 . . . . . . . . . . . . . . . . . .
文字列定数 . . . . . . . . . . . . . .
日付時間定数 . . . . . . . . . . . . .
整数定数 . . . . . . . . . . . . . .
10 進数定数 . . . . . . . . . . . . .
浮動小数点定数 . . . . . . . . . . . .
データ型 . . . . . . . . . . . . . . . .
CHARACTER . . . . . . . . . . . . .
DATETIME データ型 :DATE、TIME、TIMESTAMP
INTEGER . . . . . . . . . . . . . .
SERIAL . . . . . . . . . . . . . . .
SMALLINT . . . . . . . . . . . . .
TINYINT . . . . . . . . . . . . . .
DECIMAL と NUMERIC . . . . . . . . .
REAL . . . . . . . . . . . . . . .
DOUBLE PRECISION と FLOAT . . . . . .
値の欠落と NULL 値 . . . . . . . . . . . .
列データの代入と比較 . . . . . . . . . . .
列データの代入 . . . . . . . . . . . .
比較 . . . . . . . . . . . . . . . .
第3章
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
多項式の評価 .
条件 . . . . . .
比較述部 . . .
BETWEEN 述部
EXISTS 述部 .
IN 述部 . . .
IS NULL 述部 .
LIKE 述部 . .
検索条件 . . .
第4章
.
.
.
.
.
.
.
.
.
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
.
.
.
.
.
.
.
.
.
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
.
.
.
.
.
.
.
.
.
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
.
.
.
.
.
.
.
.
.
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
. . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 4-3
. 4-4
. 4-5
. 4-7
. 4-9
. 4-10
. 4-11
この章について . .
条件付きスカラ関数
CASE . . . .
COALESCE . .
DECODE . . .
IFNULL . . .
NULLIF . . .
数値スカラ関数 . .
ABS . . . .
CEIL . . . .
DEC . . . .
EXP . . . .
FLOAT . . . .
FLOOR . . .
INT . . . . .
LN . . . . .
REAL . . . .
SIGN . . . .
SQRT . . . .
統計関数マクロ
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
集約関数
この章について .
一般的な使用方法
AVG . . . . .
COUNT . . . .
MAX . . . . .
MIN . . . . .
SUM . . . . .
第5章
3-7
3-10
3-11
3-12
3-13
3-14
3-15
3-16
3-17
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
スカラ関数
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . . 5-3
. . . . 5-4
. . . . 5-4
. . . . 5-8
. . . . 5-9
. . . . 5-12
. . . . 5-13
. . . . 5-15
. . . . 5-16
. . . . 5-17
. . . . 5-19
. . . . 5-21
. . . . 5-22
. . . . 5-23
. . . . 5-25
. . . . 5-27
. . . . 5-28
. . . . 5-29
. . . . 5-30
. . . . 5-31
目次
v
文字列スカラ関数 . . . . . . . . . . . . . . . . . .
CONCAT . . . . . . . . . . . . . . . . . . .
LENGTH . . . . . . . . . . . . . . . . . . .
LENGTHB . . . . . . . . . . . . . . . . . . .
LOWER . . . . . . . . . . . . . . . . . . . .
LTRIM . . . . . . . . . . . . . . . . . . . .
POSITION . . . . . . . . . . . . . . . . . . .
POSITIONB . . . . . . . . . . . . . . . . . .
RTRIM . . . . . . . . . . . . . . . . . . . .
STRING . . . . . . . . . . . . . . . . . . . .
SUBSTR . . . . . . . . . . . . . . . . . . . .
SUBSTRB . . . . . . . . . . . . . . . . . . .
TRIM . . . . . . . . . . . . . . . . . . . . .
UPPER . . . . . . . . . . . . . . . . . . . .
日付時間スカラ関数 . . . . . . . . . . . . . . . . .
日付時間スカラ関数の日付フィールド . . . . . . . . .
CURRENT_DATE、CURRENT_TIME、CURRENT_TIMESTAMP
DATE . . . . . . . . . . . . . . . . . . . . .
DATEADD . . . . . . . . . . . . . . . . . . .
DATEDIFF . . . . . . . . . . . . . . . . . . .
DATENAME . . . . . . . . . . . . . . . . . .
EXTRACT . . . . . . . . . . . . . . . . . . .
TIME . . . . . . . . . . . . . . . . . . . . .
TIMESTAMP . . . . . . . . . . . . . . . . . .
TO_CHAR . . . . . . . . . . . . . . . . . . .
CURRENT_USER 関数 . . . . . . . . . . . . . . . .
第6章
分析関数
この章について . . . . . . . . . . . . . . . .
SQL OLAP 関数 . . . . . . . . . . . . . . . .
OLAP 関数の種類 . . . . . . . . . . . . .
OVER 句 . . . . . . . . . . . . . . . .
OLAP 関数の使用に関する基本規則 . . . . . . .
RANK、DENSE_RANK、NTILE の構文 . . . . .
ROW_NUMBER および ROWNUMBER の構文 . . .
AVG、COUNT、MIN、MAX、SUM の構文 . . . .
RATIO_TO_REPORT および RATIOTOREPORT の構文 .
RISQL 表示関数 . . . . . . . . . . . . . . .
CUME . . . . . . . . . . . . . . . . .
MOVINGAVG . . . . . . . . . . . . . . .
vi SQL Reference Guide
5-34
5-35
5-36
5-38
5-39
5-40
5-42
5-44
5-45
5-47
5-50
5-52
5-54
5-56
5-58
5-58
5-60
5-61
5-62
5-63
5-64
5-66
5-68
5-69
5-70
5-73
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
6-3
6-4
6-5
6-7
6-15
6-16
6-22
6-24
6-44
6-47
6-48
6-52
MOVINGSUM .
NTILE . . . .
RANK . . . .
RATIOTOREPORT
TERTILE . . .
第7章
第8章
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
6-55
6-58
6-62
6-66
6-68
この章について . . . . . . . . . . .
結合および非結合クエリ式 . . . . . . .
テーブル結合 . . . . . . . . . . . .
構文 . . . . . . . . . . . . .
限定結合 . . . . . . . . . . . .
クロス結合 . . . . . . . . . . .
テーブル参照 . . . . . . . . . .
クエリ指定 . . . . . . . . . . . . .
検索項目リスト . . . . . . . . .
FROM 句 . . . . . . . . . . . .
サンプリング . . . . . . . . . .
WHERE 句 . . . . . . . . . . .
GROUP BY 句 . . . . . . . . . .
HAVING 句 . . . . . . . . . . .
WHEN 句 . . . . . . . . . . . .
UNION、EXCEPT、INTERSECT 式 . . . .
SELECT 文 . . . . . . . . . . . . .
ORDER BY 句 . . . . . . . . . .
SUPPRESS BY 句 . . . . . . . . .
SELECT 文の処理方法 . . . . . . .
サブクエリ . . . . . . . . . . . . .
スカラ サブクエリとテーブル サブクエリ
相関サブクエリ . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
7-3
7-4
7-7
7-7
7-7
7-12
7-13
7-16
7-17
7-22
7-28
7-36
7-39
7-41
7-43
7-45
7-54
7-55
7-66
7-68
7-69
7-69
7-72
クエリ式
SQL 文と RISQL 拡張機能
この章について . . . . . . .
ALTER DATABASE . . . . . .
ALTER INDEX . . . . . . .
ALTER MACRO . . . . . . .
ALTER ROLE . . . . . . . .
ALTER SEGMENT . . . . . .
ALTER SEGMENT - ATTACH 句
ALTER SEGMENT - その他の句
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . . 8-5
. . . . 8-6
. . . . 8-14
. . . . 8-17
. . . . 8-19
. . . . 8-20
. . . . 8-21
. . . . 8-30
目次
vii
ALTER SYNONYM . . . . . . . . .
ALTER SYSTEM . . . . . . . . . .
ALTER TABLE . . . . . . . . . . .
列の削除 . . . . . . . . . . .
列の変更 . . . . . . . . . . .
制約の追加 . . . . . . . . . . .
制約の削除 . . . . . . . . . . .
制約の変更 . . . . . . . . . . .
ALTER USER . . . . . . . . . . .
ALTER VIEW . . . . . . . . . . .
CHECK INDEX . . . . . . . . . . .
CHECK TABLE . . . . . . . . . . .
CREATE HIERARCHY . . . . . . . .
CREATE INDEX . . . . . . . . . .
インデックス指定 . . . . . . . .
セグメント定義 . . . . . . . . .
セグメント範囲指定 . . . . . . .
WITH FILLFACTOR n . . . . . . .
DOMAIN SIZE . . . . . . . . .
CREATE MACRO . . . . . . . . . .
CREATE ROLE . . . . . . . . . . .
CREATE SEGMENT . . . . . . . . .
CREATE SYNONYM . . . . . . . . .
CREATE TABLE . . . . . . . . . .
列の定義 . . . . . . . . . . .
プライマリ キー参照 . . . . . . .
フォーリン キー参照 . . . . . . .
プライマリ キーとフォーリン キー制約名
セグメント定義 . . . . . . . . .
CREATE TEMPORARY TABLE . . . . .
CREATE VIEW . . . . . . . . . . .
DELETE . . . . . . . . . . . . .
DROP HIERARCHY . . . . . . . . .
DROP INDEX . . . . . . . . . . .
DROP MACRO . . . . . . . . . . .
DROP ROLE . . . . . . . . . . . .
DROP SEGMENT . . . . . . . . . .
DROP SYNONYM . . . . . . . . . .
DROP TABLE . . . . . . . . . . .
DROP VIEW . . . . . . . . . . . .
viii SQL Reference Guide
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
8-55
8-57
8-72
8-81
8-82
8-86
8-89
8-90
8-93
8-94
8-96
8-99
8-102
8-105
8-109
8-114
8-118
8-124
8-125
8-127
8-131
8-133
8-136
8-137
8-139
8-144
8-146
8-149
8-150
8-160
8-163
8-171
8-176
8-177
8-180
8-181
8-182
8-184
8-185
8-187
EXPAND . . . . . . . . .
EXPLAIN . . . . . . . . .
EXPORT . . . . . . . . . .
GRANT ( 権限とロール ) . . . .
GRANT CONNECT . . . . . .
GRANT ( 特権 ) . . . . . . .
INSERT . . . . . . . . . .
LOCK ( テーブルのロック ) . . .
LOCK DATABASE . . . . . .
REVOKE ( 権限とロール ) . . .
REVOKE CONNECT . . . . .
REVOKE ( 特権 ) . . . . . . .
SELECT . . . . . . . . . .
UNLOCK ( テーブルのロック解除 )
UNLOCK DATABASE . . . . .
UPDATE . . . . . . . . . .
第9章
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
8-188
8-189
8-190
8-201
8-207
8-211
8-214
8-221
8-222
8-224
8-226
8-227
8-229
8-229
8-230
8-231
この章について . . . . . . . . . . . . .
SET ADVISOR LOGGING . . . . . . . . . .
SET ADVISOR MAXIMUM CANDIDATE VIEWS . .
SET ADVISOR SAMPLE SIZE . . . . . . . .
SET ARITHIGNORE、ARITHABORT . . . . . .
SET CHECK REPORT FILE PERMISSIONS . . . .
SET CHECK_TABLE_INDEX_DIRECTORY . . . .
SET COUNT RESULT . . . . . . . . . . .
SET CROSS JOIN . . . . . . . . . . . . .
SET DEFAULT DATA SEGMENT . . . . . . .
SET DEFAULT INDEX SEGMENT . . . . . . .
SET DEFAULT PSU EXTENDSIZE . . . . . . .
SET DEFAULT SEGMENT SIZE . . . . . . . .
SET EXPORT_DEFAULT_PATH . . . . . . . .
SET EXPORT_DELIMITER . . . . . . . . .
SET EXPORT_MAX_FILE_SIZE . . . . . . .
SET FIRST DAYOFWEEK . . . . . . . . . .
SET FORCE TASKS . . . . . . . . . . . .
FORCE_SCAN_TASKS . . . . . . . . .
FORCE_FETCH_TASKS と FORCE_JOIN_TASKS
FORCE_TARGETJOIN_TASKS . . . . . .
FORCE_HASHJOIN_TASKS . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
9-5
9-5
9-6
9-7
9-8
9-9
9-10
9-10
9-11
9-13
9-15
9-16
9-18
9-19
9-20
9-21
9-22
9-23
9-25
9-25
9-25
9-25
SET 文
目次 ix
FORCE_AGGREGATION_TASKS . . . . . . . . .
SET IDLE TIMEOUT . . . . . . . . . . . . . . .
SET IGNORE OPTICAL INDEXES . . . . . . . . . .
SET IGNORE PARTIAL INDEXES . . . . . . . . . .
SET INDEX TEMPSPACE と SET QUERY TEMPSPACE . . .
SET INFO MESSAGE LIMIT . . . . . . . . . . . .
SET LOCK . . . . . . . . . . . . . . . . . .
SET OLAP APPROXIMATE NUMERIC FAST COMPUTATION .
SET OPTICAL AVAILABILITY . . . . . . . . . . .
SET ORDER BY . . . . . . . . . . . . . . . . .
SET PARALLEL SET_OPERATION . . . . . . . . . .
SET PARALLEL_HASHJOIN . . . . . . . . . . . .
SET PARTIAL AVAILABILITY . . . . . . . . . . . .
SET PARTITIONED PARALLEL AGGREGATION . . . . .
SET PERFORMANCE MONITOR . . . . . . . . . . .
SET PRECOMPUTED VIEW MAINTENANCE . . . . . .
SET PRECOMPUTED VIEW MAINTENANCE ON ERROR . .
SET PRECOMPUTED VIEW QUERY REWRITE . . . . . .
SET QUERY MEMORY LIMIT . . . . . . . . . . . .
SET QUERYPROCS . . . . . . . . . . . . . . .
SET REPORT_INTERVAL . . . . . . . . . . . . .
SET RESULT BUFFER と SET RESULT BUFFER FULL ACTION
SET ROWCOUNT . . . . . . . . . . . . . . . .
SET ROWS_PER...TASK . . . . . . . . . . . . . .
ROWS_PER_SCAN_TASK . . . . . . . . . . .
ROWS_PER_FETCH_TASK と ROWS_PER_JOIN_TASK .
ROWS_PER_TARGETJOIN_TASK . . . . . . . . .
SET SAMPLE MARGIN . . . . . . . . . . . . . .
SET SAMPLE SEED . . . . . . . . . . . . . . .
SET SEGMENTS . . . . . . . . . . . . . . . .
SET STATS . . . . . . . . . . . . . . . . . .
SET TARGETJOIN LOCAL PREDICATES . . . . . . . .
SET TEMPORARY SEGMENT STORAGE PATH . . . . . .
SET TRANSACTION ISOLATION LEVEL . . . . . . . .
SET UNIFORM PROBABILITY FOR ADVISOR . . . . . .
SET USE INVALID PRECOMPUTED VIEWS . . . . . . .
SET USE LATEST REVISION . . . . . . . . . . . .
SET VERSIONING . . . . . . . . . . . . . . . .
x SQL Reference Guide
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
9-25
9-26
9-27
9-28
9-29
9-33
9-34
9-35
9-36
9-38
9-39
9-40
9-41
9-43
9-44
9-46
9-47
9-48
9-49
9-50
9-51
9-52
9-53
9-54
9-55
9-55
9-56
9-57
9-59
9-61
9-62
9-64
9-67
9-68
9-69
9-70
9-71
9-72
付録 A
構文一覧
付録 B
予約語
付録 C
日付時間フォーマット
特記事項
索引
目次 xi
まえがき
まえがき
この章について .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3
まえがき . . . . .
対象読者 . . . .
ソフトウェア要件 .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3
3
4
本書の表記法
. . . . .
文字の表記規則 . . .
構文の規則 . . . . .
構文ダイアグラム . . .
キーワードと区切り文字
識別子と名前 . . . .
文中記号の表記規則 . .
コメント記号 . . .
プラットフォーム記号
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5
5
6
7
9
9
10
10
10
関連文献
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
11
. .
. .
. .
. .
13
13
13
13
.
.
.
.
.
.
.
その他のドキュメント .
オンライン マニュアル
印刷マニュアル . .
オンライン ヘルプ .
.
. . . . .
. . . . .
. . . . .
. . . . .
. . . .
. . . .
. . . .
. . . .
. . . . .
. . . . .
. . . . .
. . . . .
2 SQL Reference Guide
この章について
この章では、本書の概要と表記法について説明します。
まえがき
このマニュアルは、IBM Red Brick Warehouse SQL の実装、およびウェアハウス デー
タベース向けの RISQL 拡張機能に関する詳細な言語リファレンスです。
対象読者
本書では、以下のユーザを対象としています。
■
■
■
■
■
■
■
■
データベース ユーザ
データベース管理者
データベース サーバ管理者
データベース アプリケーション プログラマー
データベース設計者
データベース デザイナー
データベース開発者
パフォーマンス エンジニア
本書では、読者が以下の経験や知識を持っていることを前提としています。
■
■
■
■
使用しているコンピュータ、オペレーティング システム、およびオペレー
ティング システムが提供するユーティリティに対する実務知識
リレーショナル データベースの使用経験、またはデータベースの概念に関
する知識
コンピュータ プログラミングの経験
データベース サーバ管理、オペレーティング システム管理、またはネッ
トワーク管理の経験
まえがき 3
ソフトウェア要件
ソフトウェア要件
本書では、データベース サーバとして IBM Red Brick Warehouse、Version 6.2 を使用
することを前提としています。
IBM Red Brick Warehouse には、コーヒーと紅茶を取り扱う架空の会社の販売データ
をおさめた Aroma というデータベースが添付されています。このデータベースで
は、Aroma Coffee and Tea Company という企業の毎日の販売業務を管理しています。
このデータベースのディメンジョン モデルは、1 つのファクト テーブルと、それに
付属する複数のディメンジョン テーブルから成っています。
サンプル データベースの作成とデータのロードの詳細は、『Administrator's Guide』
を参照してください。データベースとそのデータ内容の詳細は、『SQL Self-Study
Guide』を参照してください。
サンプル データベースのインストール スクリプトは <redbrick_dir>/sample_input
ディレクトリにあります。<redbrick_dir> は、使用しているシステムの IBM Red
Brick Warehouse ディレクトリをさします。
4 SQL Reference Guide
本書の表記法
本書の表記法
ここでは、このマニュアルで使用される、以下の表記規則について説明します。表
記規則を覚えておくと、このマニュアル、およびほかのマニュアルの内容を理解す
るのに役立ちます。
以下のような表記規則があります。
■
■
■
■
■
■
文字の表記規則
構文の規則
構文ダイアグラム
キーワードと区切り文字
識別子と名前
文中記号の表記規則
文字の表記規則
このマニュアルは、新しい用語、画面表示、コマンド構文などを表記するのに、以
下の規則を使用します。
表記規則
意味
KEYWORD
プログラミング言語の文中では、主要な要素 ( キーワード )
は、すべて大文字のセリフ フォントで表記されます。
Computer
製品の表示情報やユーザの入力情報はモノスペース フォント
で表記されます。
♦
この記号は、製品やプラットフォームなどに特有の情報の終
わりを表します。
➞
この記号は、メニュー項目を表します。たとえば、"[ ツール ]
➞[ オプション ] を選択します。" は、[ ツール ] メニューの
[ オプション ] を選択することを意味します。
ヒント : コマンドの入力、または実行の指示がある場合、入力後に ENTER キーを
押してください。コマンド以外の文字の入力やほかのキーを押す指示がある場合、
ENTER キーを押す必要はありません。
まえがき 5
構文の規則
構文の規則
このマニュアルでは、オペレーティング システム コマンドの構文の記述に以下の
表記規則を使用します。
コマンドの構成要素 例
表記規則
値および
パラメータ
<table_name>
適切な名前、値、式に置き換える項目は、
山形かっこ <> で囲んで表記します。
オプション項目
[ ]
オプション項目は、角かっこで囲みます。
角かっこは入力しません。
選択肢
ONE |TWO
選択肢は縦線で区切ります。必要に応じ
て、いずれか 1 つを選択できます。
必須選択肢
{ONE|TWO}
必須選択肢は、中かっこで囲みます。いず
れか 1 つを選択してください。中かっこは
入力しません。
デフォルト値
ONE|TWO
デフォルト値は、下線を付けて表記しま
す。ただし、図の部分では、太字で表記し
ます。
繰り返し項目
name, …
繰り返し可能な項目は、後にカンマと省略
記号を記述します。各項目は カンマで区切
ります。
記述記号
() , ; .
丸かっこ、カンマ、セミコロン、ピリオド
は記述記号です。記述されているとおりに
使用してください。
6 SQL Reference Guide
構文ダイアグラム
構文ダイアグラム
このマニュアルでは、以下の要素で作成されたダイアグラムを使用して、ステート
メントの構文と、システム レベルのコマンド以外のすべてのコマンドを記述しま
す。
構成要素
意味
ステートメントの開始。
ステートメントの構文は次の行に続きます。完全
なステートメント以外の構文要素はこの記号で終
了します。
ステートメントは前の行から続いています。完全
なステートメント以外の構文要素はこの記号で始
まります。
ステートメントの終了。
SELECT
ステートメントの必須項目。
オプション項目。
DISTINCT
DBA TO
CONNECT TO
選択を含む必須項目。1 つの項目が存在する必要
があります。
SELECT ON
ASC
選択を含むオプション項目。デフォルト値が存在
する場合、太字で印刷されます。
DESC
,
オプション項目。複数項目が可能です。繰り返す
項目の前にカンマが必要です。
ASC
DESC
まえがき 7
構文ダイアグラム
先行する構文要素は、以下のように組み合わされてダイアグラムを形成します。
REORG
<table_name>
,
INDEX
(
<index_name>
)
;
ON
OPTIMIZE
RECALCULATE RANGES
OFF
以下のように複雑な構文ダイアグラムは、要素の詳細なダイアグラムのポイント参
照用として繰り返されます。ポイント参照ダイアグラムは、影を付けて角を囲み、
グレーの線と小さい文字で表します。
LOAD
<INPUT_CLAUSE>
DATA
<optimize_clause>
<FORMAT_CLAUSE>
<TABLE_CLAUSE>
<segment_clause>
’<DISCARD_CLAUSE>’
;
<criteria_clause>
<comment_clause>
ポイント参照ダイアグラムの後に、影付き部分の拡大ダイアグラム ( この場合は
INPUT_CLAUSE) が続きます。
INPUTFILE
filename
INDDN
(
START
RECORD
8 SQL Reference Guide
'<FILENAME> '
<START_ROW>
<START_ROW
)
TAPE
DEVICE
STOP
RECORD
'<DEVICE_NAME>'
<stop_row>
キーワードと区切り文字
キーワードと区切り文字
キーワードとは、ステートメントおよびコマンド ( システム レベルのコマンドを除
く ) で使用するために予約された単語のことです。構文ダイアグラムでは、キー
ワードが大文字で表記されます。ユーザが実際にキーワードを記述する場合は、大
文字 / 小文字のどちらを使用してもかまいません。ただし、スペルは構文ダイアグ
ラムに表記されるとおりでなければなりません。
構文ダイアグラム内の区切り文字も、ダイアグラムに示されているとおりにステー
トメントとコマンドの中に入れる必要があります。
識別子と名前
構文ダイアグラムおよび例の中の変数は、識別子および名前に対するプレースホル
ダです。変数は、文脈に応じて任意の名前、識別子、またはリテラルに置き換える
ことができます。変数は、追加の構文ダイアグラムで拡大される複雑な構文要素を
表すためにも使用されます。変数は、構文ダイアグラム、例、テキストでは、< >
(山形かっこ)で表記されますす。
以下に示す構文ダイアグラムでは、変数を使用して簡単な SELECT 文の一般的な
フォームを説明しています。
SELECT
<column_name>
FROM
<table_name>
このフォームの SELECT 文を書き込む場合、変数の <column_name> と <table_name>
を特定の列とテーブルに置き換えます
まえがき 9
文中記号の表記規則
文中記号の表記規則
マニュアル内では、数種類の記号によってその内容が区別されるテキストがありま
す。この節では、これらの記号について説明します。
コメント記号
コメント記号によって区別される情報には、次の表に示す 3 種類があります。
記号
ラベル
説明
警告 :
必須の情報、注意、重要な情報が含まれています。
重要 :
現在説明されている手順または機能に関する重要な
情報が含まれています。
ヒント :
現在説明されている機能に関する、詳細または
ショートカットなどの追加情報が含まれます。
プラットフォーム記号
機能記号、製品記号、およびプラットフォーム記号、特定のプラットフォームに関
する情報を意味します。
記号
説明
UNIX
Windows
10 SQL Reference Guide
UNIX と Linux オペレーティング システムにのみ関連のあ
る情報を意味します。
Windows プラットフォームにのみ関連のある情報を意味
します。
関連文献
これらの記号は、節全体に適用される場合と、節内の一部の段落にのみ適用される
場合があります。記号が節見出しの隣に付いている場合、その機能、製品、または
プラットフォーム固有の情報の範囲は、同じレベルまたは上位レベルの節が現れる
直前までです。◆ 記号は、機能、製品、またはプラットフォーム固有の情報が節内
の一部のパラグラフにのみ記述されている場合に、その固有情報の範囲の末尾を表
します。
関連文献
IBM Red Brick Warehouse のマニュアルには、次の文書が含まれています。
マニュアル
説明
『Administrator's Guide』
ウェアハウスのアーキテクチャやサポートされる
スキーマなど、データべースに関連した基本概念
のマニュアルです。データべースのインプリメン
トや保守の手順について説明しています。システ
ム テーブルとコンフィグレーション ファイルの説
明も含まれています。
『Client Installation and
Connectivity Guide』
ODBC、Red Brick JDBC Driver、RISQL エントリ
ツール、RISQL レポータ をクライアント システム
にインストールして構成するためのガイドです。C
および C++ アプリケーション用 ODBC 製品と Java
アプリケーション用 JDBC 製品を使用して、IBM
Red Brick Warehouse にアクセスする方法を説明し
ています。
『IBM Red Brick Vista User’s
Guide』
IBM Red Brick Vista の集約計算とマネジメントのシ
ステムについて説明しています。集約を使用して
クエリを自動的にリライトすることによって Vista
クエリ パフォーマンスを向上させる方法、毎日集
められるデータをもとに最高の集約セットを作る
よう推奨すること、詳細テーブルが更新されると
きに集約テーブルがどのように保守されるかを説
明しています。
『Installation and Configuration
Guide』
IBM Red Brick Warehouse のインストールと環境設
定に関する説明書と、プラットフォーム別マニュ
アルです。UNIX および Linux ベースのシステム用
と、Windows ベースのシステム用があります。
(1/2)
まえがき
11
関連文献
マニュアル
説明
『Messages and Codes
Reference Guide』
IBM Red Brick Warehouse 製品が出力するすべての
状態情報、警告、エラー メッセージとその考えら
れる原因、対処方法が示されています。ログ ファ
イルに書き込まれるイベント ログ メッセージも記
述されています。
『Query Performance Guide』
クエリ パフォーマンスの決定要因と、最適なクエ
リ パフォーマンスを得るためのデータベースの
チューニング方法について説明しています。Red
Brick ツール (SET STATS、Dynamic Statistic Tables :
動的統計テーブル、EXPLAIN、および Query
Performance Monitor) を使用してクエリ パフォーマ
ンスを評価する方法についても、例を挙げて説明
しています。
『リリースノート』
マニュアルの印刷後に判明した現リリースに関す
る情報が含まれます。
『RISQL Entry Tool and RISQL
Reporter User's Guide』
SQL 文の入力に使用するコマンドライン ツールで
ある RISQL エントリ ツール と、RISQL エントリ
ツール にレポートのフォーマット設定機能を付加
した RISQL エントリ ツール の詳細なガイドです。
このマニュアル
Red Brick SQL のインプリメントと RISQL (IBM Red
Brick Warehouse データベースのための拡張機能 ) に
関する詳細な言語リファレンスです。
『SQL Self-Study Guide』
例題に基づいて SQL を復習し、RISQL 拡張機能、
マクロ関数、Aroma のサンプル データベースを紹
介します。
『Table Management Utility
Reference Guide』
データのロード、管理、バックアップに関連した
機能をまとめた、Table Management Utility について
説明しています。データのコピーと rb_cm コピー
管理ユーティリティについても説明しています。
(2/2)
このほか、以下の書籍やマニュアルも役に立つ場合があります。
■
■
■
12 SQL Reference Guide
SQL の入門書
リレーショナル データベースの入門書
ご使用のハードウェア プラットフォームとオペレーティング システムの
マニュアル
その他のドキュメント
その他のドキュメント
上記以外の情報は、以下のマニュアルを参照してください。
■
■
■
オンライン マニュアル
印刷版マニュアル
オンライン ヘルプ
オンライン マニュアル
Red Brick 製品には、各種の IBM Red Brick Warehouse マニュアルを電子フォーマット
で収録した CD-ROM が同梱されています。収録されているマニュアルは、システム
にインストールして使用することも、CD-ROM から直接アクセスすることも可能で
す。
印刷マニュアル
印刷マニュアルを注文する場合は、担当販売員までご連絡ください。
オンライン ヘルプ
IBM はグラフィカル ユーザ インタフェース (GUI) を用いたオンライン ヘルプを提
供します。これにより、各インタフェースや実行する関数についての情報を参照す
ることができます。オンライン ヘルプを表示するには、GUI のヘルプ機能を利用し
てください。
まえがき
13
第1章
の
概要
この章について .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1-3
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1-5
1-5
1-6
1-7
1-7
1-8
1-9
1-9
IBM Red Brick Warehouse . . . . . . . .
スキーマ設計 . . . . . . . . . .
意思決定支援向け関数および OLAP 関数
サブクエリによる比較 . . . . . . .
マクロ . . . . . . . . . . . . .
セグメント単位の格納 . . . . . . .
ローカライゼーション . . . . . . .
Aroma データベース . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1-10
1-10
1-11
1-11
1-11
1-12
1-13
1-14
リレーショナル データベースのテーブル
複数ユーザとテーブル ロック . .
テーブルのビュー . . . . . . .
インデックス . . . . . . . .
プライマリ キーとフォーリン キー .
データベースの整合性 . . . . .
権限と特権 . . . . . . . . .
システムカタログ . . . . . . .
1-2 SQL Reference Guide
この章について
IBM Red Brick Warehouse は、データ ウェアハウス、データマート、オンライン分析
処理 (OLAP) アプリケーションを対象としたリレーショナル データベース管理シス
テム (RDBMS) です。オンライン トランザクション処理 (OLTP) やユニバーサル
データベース製品と比べ、IBM Red Brick Warehouse はクエリの処理やデータのロー
ドが効率的で管理しやすく、数 GB から数 TB、数人のユーザから何千人ものユーザ
まで、広範囲のアプリケーションに対応する機能を備えています。
IBM Red Brick Warehouse は、ワークグループから全社的スケールまで対応し、標準
オープン データベース コネクティビティ (ODBC および JDBC) を使用するオープン
クライアント / サーバ環境向けに設計され、標準 SQL でアクセスします。サーバで
は OLAP 機能と RISQL 拡張機能が統合され、順位付けや比率計算などの一般的なビ
ジネス計算を必要とする分析を簡略化し、Vista, STARjoin、STAR index、
TARGETjoin、TARGET index の各技術は、多彩なスキーマ設計の超大型データベー
スに対する特別なクエリや分析について、優れた性能を提供します。分析的なクエ
リを数多く実行し、必要な情報をすぐに得られるため、ビジネス上の決定を迅速か
つ的確に下すことができます。
IBM Red Brick Warehouse の概要
1-3
この章では IBM Red Brick Warehouse の概要を示します。この章は次のセクションで
構成されています。
■
■
1-4
SQL Reference Guide
リレーショナル データベースのテーブル
❑ 複数ユーザとテーブル ロック
❑ テーブルのビュー
❑ インデックス
❑ プライマリ キーとフォーリン キー
❑ データベースの整合性
❑ 権限と特権
❑ システムカタログ
IBM Red Brick Warehouse
❑ スキーマ設計
❑ 意思決定支援向け関数および OLAP 関数
❑ サブクエリによる比較
❑ マクロ
❑ セグメント単位の格納
❑ ローカライゼーション
❑ Aroma データベース
リレーショナル データベースのテーブル
リレーショナル データベースのテーブル
リレーショナル データベースは、次の特性を持つテーブルの集合です。
■
■
■
■
■
■
■
テーブルは、列と行で構成されます。
列は、データ型が同じである値の集合です。たとえば、文字データ型の列
は文字列を格納し、整数データ型の列は整数を格納します。
行は、行の n 番目の値が、テーブルの n 番目の列に対応するように配列さ
れた値のシーケンスです。
通常、各行はプライマリ キーと呼ばれる一意な値によって識別されます
( 一般には使用されないが、プライマリ キー列を持たないテーブルの作成
も可能 )。
基本テーブルは、CREATE TABLE 文を使って作成したテーブルです。基本
テーブルは、DROP TABLE 文で削除するまでデータベースに存在します。
リザルト テーブルは、SELECT 文から結果として返されるテーブルです。
テンポラリ テーブルは、それ自身が作成されたセッションの間だけアクセ
スできるテーブルです。テンポラリ テーブルは、セッション中だけ、また
は DROP TABLE 文で削除するまでデータベースに存在します。
意思決定支援データベースの分野ではデータベースのテーブルをファクト テーブル
またはディメンジョン テーブルと呼ぶこともあります。ファクト テーブルは、売
上、販売個数、比率などの加算可能な数値データを格納し、ディメンジョン テーブ
ルは都市名、製品名、商標、ブランド、期間などの記述的なデータを格納します。
ファクト テーブルとディメンジョン テーブルの内容が異なるのは、スキーマ設計
上の問題であり、テーブルの作成やクエリの処理には影響がありません。IBM Red
Brick Warehouse ソフトウェアを使ってテーブルを作成する場合は、テーブルのタイ
プは 1 つであり、ファクト テーブルとディメンジョン テーブルのデータに対する制
約はありません。本書ではほとんどの場合、ファクト テーブルの代わりに参照元
テーブル、ディメンジョン テーブルの代わりに参照先テーブルという用語を使いま
す。これによって、プライマリ キー / フォーリン キー関係で結合できるテーブルの
間の論理関係において、テーブル タイプの参照関係をはっきりと区別できます。
スキーマ設計の詳細は、『Administrator's Guide』を参照してください。
複数ユーザとテーブル ロック
複数ユーザ向けシステムでは、複数のユーザが 1 つのテーブルに同時にアクセスす
ることができます。テーブルの更新を同時に行うことが許可されると、テーブルが
破壊されることがあります。テーブルが破壊されるのを防ぎ、データの整合性を維
持するため、更新されるテーブルへのアクセスはデータベース サーバが自動的に制
御します。
IBM Red Brick Warehouse の概要
1-5
テーブルのビュー
データベース サーバによるアクセスの制御は、テーブルのロックによって行われま
す。テーブルの更新後は、ロックが自動的に解除されます。テーブルを更新する操
作を行うと、ほかのユーザを待たせることになり、検索の所要時間が予想より長く
なる場合があります。
テーブルを更改するときに、データベース サーバは更新と読み取りの並行アクセス
を許可します。
適切なアクセス権を持つユーザは、テーブルを明示的にロックし、他のユーザのア
クセスを制御することもできます。
テーブルのビュー
ビューとは、CREATE VIEW 文を使って任意の数の基本テーブルに設定する仮想
テーブルです。テーブルと同様に、ビューも列と行で構成されます。FROM 句で参
照したり、相関名を与えたり、特定のアクセス権を割り当てることができます。た
だし、基本テーブルと無関係に、単独で存在することはできません。
一般に、ビューは次の目的に使用します。
■
■
■
テーブルの一部アクセス制限。たとえば、東部地域の売上だけに限定した
ビューと、西部地域の売上だけに限定したビューを定義することができま
す。
データの簡略化。たとえば、ニューヨークで販売した製品について、1992
年第 1 四半期と第 2 四半期の売上を抽出する場合は、複数のテーブルを参
照する複雑なクエリが必要になります。ビューを設定すれば、必要なデー
タを 1 つのテーブルにまとめることができます。
異なる視点からのデータ分析。たとえば、特定の地区、地域と様々な計算
結果を表す列をビューとして定義することができます。
事前計算ビューは、事前計算テーブルという物理データベース テーブルにリンクす
る特別なタイプのビューです。このビューはクエリを定義し、テーブルにはそのク
エリの事前計算リザルトが格納されます。事前計算ビューは、集約クエリを書き換
えてクエリ性能を最適化します。クエリ リライトの詳細は、『IBM Red Brick Vista
User’s Guide』を参照してください。
1-6
SQL Reference Guide
インデックス
インデックス
CREATE TABLE 文を使って新規に基本テーブルを作成すると、テーブルのプライ
マリ キー列に B-TREE インデックスが自動的に作成されます。
CREATE INDEX 文を使ってインデックスを列や列のグループに追加すると、テーブ
ル全体のデータを高速にアクセスできるようになります。使用できるインデックス
のタイプは、次のとおりです。
■
■
■
B-TREE。デフォルトです。
STAR。テーブル結合を高速化します。STAR インデックスは、フォーリン
キーが設定されている任意の基本テーブルに作成できます。
TARGET。選択性の低い制約を扱うクエリを高速に処理するためのビット
ベクトル インデックスです。TARGET インデックスは、一意でない 1 つの
列に設定できます。TARGET インデックスは、TARGETjoin 処理を有効に
することもできます。
プライマリ キーとフォーリン キー
通常、データベース テーブルには、各行を一意に識別するプライマリ キーが設定
されています。プライマリ キーは、1 つの列の値でも、複数列の値を組み合わせた
ものでもかまいません。
IBM Red Brick Warehouse データベースの基本テーブルには、複数列のプライマリ
キーを設定できます。テーブルの作成時にプライマリ キーとして指定する 1 つまた
は複数の列は、次の条件を満たしている必要があります。
■
■
テーブルの各行に対応する値を格納していること。つまり、NOT NULL と
指定する必要があります。
各行について、キーの値 ( または値の組み合わせ ) が一意であること。
意味のある値で構成されるプライマリ キーの例としては、車体番号、従業員 ID 番
号、社会保険番号などがあります。意味のある値で構成せず、単に一意の数字列や
文字列のプライマリ キーも多くあります。
フォーリン キー列は、ほかのテーブルのプライマリ キー列の値を格納します。
フォーリン キー列の値は、2 つのテーブルの関係を確立するものです。ほかのテー
ブルの 1 つまたは複数の行を参照します。
プライマリ キー列と異なり、フォーリン キー列には次の例に示すように重複値を
格納することができます。
IBM Red Brick Warehouse の概要
1-7
データベースの整合性
例
右のテーブルには、左のテーブルを参照するフォーリン キーが含まれています。
図 1-1
フォーリン キー参照
reg_pk
------1
2
3
4
5
6
region
-----------South
North
Central
South Central
South West
US
state_pk
-------1
2
3
4
5
6
7
8
0
state
foreign_k
--------- --------Florida
1
Georgia
1
Alabama
1
Mississippi
1
Louisiana
1
Chicago
3
Illinois
3
Minnesota
3
Total US
6
IBM Red Brick Warehouse は、多様なスキーマ作成のデータベースを管理できるよう
に設計されているため、テーブル間の関係を柔軟に設定できます。どのテーブルも
ほかのテーブルのフォーリン キーで参照でき、複数の列からなるプライマリ キー
を設定することもできます。結合がクエリに明示され、結合する列が比較可能な
データ型であれば、各テーブルを結ぶ結合パスが複数あっても問題ありません。
データベースの整合性
リレーショナル データベースは、次の 2 種類の整合性規則に従う必要があります。
■
■
エンティティの整合性 : 各テーブルのプライマリ キー列の値は、一意であ
る必要があります。
参照の整合性 : フォーリン キー列の値は、参照先テーブルのプライマリ
キーに存在するものである必要があります。
Table Management Utility (TMU) は、データベースをロードする際に、これらの整合
性を確認します。さらに、INSERT、UPDATE、DELETE 文でデータベースを更新す
る際にはカスケード ロックと削除動作によって整合性を保証します。
パラレル TMU を使用する場合は、データのロードと並行して参照の整合性が確認
され、ロード全体の効率が向上します。
データベースのロードは、『Table Management Utility Reference Guide』を参照してく
ださい。
1-8
SQL Reference Guide
権限と特権
権限と特権
SQL ( 構造化問い合わせ言語 ) 文を実行するユーザは、必要な権限を持っている必
要があります。権限は、システム ロール、タスク権限、オブジェクト特権によって
制御されます。
■
■
データベース ユーザには、特定のシステム ロール (CONNECT、
RESOURCE、DBA) が割り当てられます。システム ロールを与えられたメ
ンバーは、そのロールに設定された作業を実行できます。データベース
ユーザに個別のタスク権限を割り当てることもできます。
テーブルは、特定のデータベース ユーザに許可または禁止されるオブジェ
クト特権 (SELECT、INSERT、UPDATE、DELETE) によって保護されます。
前述のシステム ロールとオブジェクト特権の付与と取消しは、それぞれ GRANT 文
と REVOKE 文によって行います。
システムカタログ
データベース サーバは、システム カタログと呼ばれるシステム テーブルの集合を
管理しています。システム カタログには、データベースに存在する全データと、
データベースの管理および保護に必要なコントロール情報が設定されています。こ
のシステム テーブルは、必要なアクセス権を持ったユーザが SELECT 文を用いて参
照することができます。詳細は、『Administrator's Guide』を参照してください。
IBM Red Brick Warehouse の概要
1-9
IBM Red Brick Warehouse
IBM Red Brick Warehouse
IBM Red Brick Warehouse は、意思決定支援アプリケーションの質と性能を向上させ
るための情報システム (IS) 向けクライアント / サーバ型 RDBMS です。IBM Red
Brick Warehouse は、次の基本技術に基づいて優れた性能を実現しています。
■
■
■
■
■
■
■
データベース情報の検索を高速化するインデックス技法と結合技法
順次演算と OLAP 分析を効率化する意思決定支援向け関数
複数の値を効率的に比較できるスカラ サブクエリ
複雑なクエリを汎用化し、簡略化するマクロ コマンド
大型テーブルを可能にし、データの可用性を高めるセグメント単位の格納
管理とアクセスが容易なわかりやすいデータベース構造
集約クエリの性能を高速化するクエリ リライト技術
スキーマ設計
スキーマとは、データベースの構造の定義です。つまり、テーブル、テーブルの
列、プライマリ キー、フォーリン キーの関係を定義するものです。更新処理に注
目したスキーマの設計と最適化を行うと、検索の効率が低下します。逆に、検索に
注目してスキーマを最適化すると、更新の効率が損なわれます。データウェアハウ
スのスキーマは、検索に注目して設計され、最適化されます。
たとえば、スター スキーマは、エンド ユーザによるデータのディメンジョン分析
を目的として設計されています。スター スキーマのテーブルは、ビジネスの各次元
を反映する記述的データであるディメンジョン データを格納するか、ビジネスの進
行状況を記録する数値データを中心としたファクトを格納するのが一般的です。
データ抽出の高速化には、プライマリ キーおよびフォーリン キーに設定したイン
デックスも役立ちます。
IBM Red Brick Warehouse データベースは、スター スキーマの多様な発展形態に対応
する柔軟性を持ち、一般的なスター スキーマの形態では表現できない変則的なス
キーマへのクエリも処理することができます。スター スキーマに基づく設計はクエ
リ処理の性能を最適化する効果がありますが、設計できるスキーマの種類に制限は
ありません。
1-10
SQL Reference Guide
意思決定支援向け関数および OLAP 関数
意思決定支援向け関数および OLAP 関数
IBM Red Brick Warehouse は、Red Brick サーバ専用に開発された独自の RISQL 表示
関数と、ANSI SQL-99 標準に準拠しそれを拡張した一連の SQL OLAP 関数の、2 種
類の分析関数をサポートします。また、Red Brick サーバは ANSI SQL-99 標準の
Elementary OLAP パッケージで定義されているすべての関数をサポートします。
OLAP 関数は、RISQL 関数の機能を踏襲し、拡張したもので、RISQL 関数よりもさ
らに汎用的な、一連の分析機能を提供します。RISQL 表示関数はすべて、OLAP 構
文または独自の形式で表すことができます。
たとえば、これらの関数では次の計算を行うことができます。
■
■
■
■
■
■
累積合計
移動平均
移動合計
順位付け
4 分位や 100 分位など、値の範囲を任意の数のグループに等分したレベル
分け
比率
サブクエリによる比較
クエリの検索項目リストにサブクエリまたは CASE 式を使うか、FROM 句でサブク
エリを使うと、データを比較するクエリを簡略化することができます。たとえば、
次のような比較を行うことができます。
■
■
■
今月の売上と過去 6 カ月間の売上
今年の売上と昨年および一昨年の売上
西部を東部、南部、中西部と比較した売上
比較の結果は、見やすいスプレッドシート形式で表示できます。このような表示関
数をサポートしない SQL では、こうした日常的な比較を行うことが非常に難しく、
結果も読みにくいものになります。
マクロ
CREATE MACRO 文を使うと、指定した文字列を略記するマクロを定義することが
できます。SQL 文の中にマクロ名があると、データベース サーバはそのマクロ名を
対応する文字列に置き換えます。
IBM Red Brick Warehouse の概要
1-11
セグメント単位の格納
不定な文字列を使ったマクロも作成できます。その場合は、複数のパラメータを含
む文字列として指定します。たとえば、次のマクロを作成し、複雑な条件を略記で
きます。
sales(mon, day, yr)
このマクロをクエリに使用する場合は、次のように特定の月、日、年に置き換えま
す。
sales(12, 25, 2000)
この文字列がマクロ定義に置き換えられると、月、日、年にそれぞれ 12、25、2000
が代入されます。このようなパラメータ型マクロは、ユーザにも使いやすく、再利
用可能な汎用クエリになります。
セグメント単位の格納
データベースのテーブルおよびインデックスは、デフォルト セグメントに格納する
か、またはデータベース管理者が明示的に設定した任意の数のセグメントに格納す
ることができます。セグメントとは、CREATE SEGMENT 文で定義したファイルの
集合です。作成したセグメントには、1 つのテーブルのデータまたは 1 つのテーブ
ルのインデックスを格納することができます。
セグメントを利用すると、大規模データベースの管理が容易になります。データ
ベースの性能が向上し、1 つのファイルに格納しきれない大容量のテーブルをサ
ポートできるようになります。複数のセグメントに 1 つのテーブルやインデックス
を格納し、セグメント レベルでテーブルやインデックスを管理できるようになりま
す。データ行とインデックス エントリは同じようにセグメント化でき、定期的な
データベースのメンテナンスを効率よく行うことができます。
1-12
SQL Reference Guide
ローカライゼーション
ローカライゼーション
IBM Red Brick Warehouse は、ロケールにかかわらず、すべての機能を提供します。
データベース サーバのロケールを設定した後は、次を行うことができます。
■
■
■
■
■
■
シングルバイトまたはマルチバイトの文字セットのロード、格納、イン
デックス付け、クエリの実行
サポートされている言語のエラー メッセージ、警告メッセージ、通知メッ
セージの表示
テーブル、列、インデックス、セグメント、ロール、ユーザなどのデータ
ベース オブジェクトに対し、シングルバイトまたはマルチバイトの名称を
付ける
SQL の制約および分析関数がロケールに設定された照合シーケンスでソー
トし、設定されたロケールに基づく結果を返す
ローカライズ フォーマットによる数値、日付、時間のデータのロード
ローカライズ データに日付時間と文字列のスカラ関数を実行する
データベース サーバ ロケールの設定の詳細は、『Installation and Configuration Guide』
を参照してください。
IBM Red Brick Warehouse の概要
1-13
Aroma データベース
Aroma データベース
本書の例では、Aroma 基本データベースのデータを主に使用しています。このデー
タベースは、Aroma Coffee and Tea Company という企業の毎日の販売業務を管理して
います。販売スキーマは、4 つの主要ディメンジョン テーブル (Period : 会計期間、
Product : 製品、Store : 店舗、Promotion : 販売促進活動 )、ファクト テーブル
(Sales)、2 つのアウトボード テーブル (Class、Market) で構成されます。図 1-2 は、
この基本スキーマを示したものです。
図 1-2
Aroma データベース スキーマ
Sales
Class
Product
classkey
class_type
class_desc
classkey
prodkey
prod_name
pkg_type
Store
storekey
mktkey
store_type
store_name
street
city
state
zip
Market
mktkey
hq_city
hq_state
district
region
perkey
classkey
prodkey
storekey
promokey
quantity
dollars
Period
perkey
date
day
week
month
qtr
year
Promotion
promokey
promo_type
promo_desc
value
start_date
end_date
本書の例には、Aroma Company から仕入先への注文情報を格納した仕入れスキーマ
を使用するものもあります。Aroma データベースの詳細は、『SQL Self-Study Guide』
を参照してください。
1-14
SQL Reference Guide
第2章
言語の各要素
この章について .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2-3
2-3
2-4
2-4
2-5
2-6
名称と識別子
. .
標準識別子 . .
区切り識別子 .
大文字と小文字
エリアスと相関名
. .
. .
. .
. .
. .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. .
. .
. .
. .
. .
定数 . . . . . .
文字列定数 . .
日付時間定数 .
整数定数 . . .
10 進数定数 . .
浮動小数点定数
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2-9
2-9
2-10
2-12
2-13
2-14
データ型 . . . . . . . . . . . . . . . .
CHARACTER . . . . . . . . . . . . .
DATETIME データ型 :DATE、TIME、TIMESTAMP
INTEGER . . . . . . . . . . . . . . .
SERIAL . . . . . . . . . . . . . . .
SMALLINT . . . . . . . . . . . . . .
TINYINT . . . . . . . . . . . . . . .
DECIMAL と NUMERIC . . . . . . . . .
REAL . . . . . . . . . . . . . . . .
DOUBLE PRECISION と FLOAT . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2-15
2-16
2-19
2-20
2-21
2-22
2-22
2-23
2-24
2-24
値の欠落と NULL 値 .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2-25
列データの代入と比較
列データの代入 .
比較 . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2-26
2-26
2-27
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2-2 SQL Reference Guide
この章について
SQL 文は、精巧に設計された SQL 言語の各要素を組み合わせ、基本的な文法に
従って作成されます。この章では、SQL 言語の各要素と文法について説明します。
■
■
■
■
■
名称と識別子
定数
データ型
値の欠落と NULL 値
列データの代入と比較
名称と識別子
名称とは、データベース オブジェクト、データベース ユーザ、パスワードを識別
するものです。名称と識別子は同義です。
データベース オブジェクト名は、シングルバイトあるいはマルチバイト文字のどち
らでも指定できます。この柔軟性により、次のオブジェクトについて、自国語でわ
かりやすい名称を設定することができます。
■
■
■
■
■
■
テーブル、テーブル列、ビュー、シノニム
インデックス
セグメント
マクロ
ロール
データベース ユーザ名
データベース ユーザ名を除き、オペレーティング システムからも使用される名称
には、マルチバイト文字は使用できません。したがって、パスワードおよびファイ
ル名には、サーバ ロケールにかかわらず、シングルバイト文字しか使用できませ
ん。
データベース ロケールに指定されたコード セットのサブセットとして、シングル
バイト文字が含まれている場合は、シングルバイト文字とマルチバイト文字の両方
を含むオブジェクト名を作成できます。
SQL 言語の各要素
2-3
標準識別子
標準識別子
SQL 文で使用する名前は、次の規則に従っている必要があります。
■
■
■
■
■
文字 ( 英語では A ∼ Z と a ∼ z)、桁 (0 ∼ 9)、あるいは半角の ASCII アンダー
スコア (_) のみで構成されていること。マルチバイトの下線記号文字は、
構文エラーとなる
アルファベット文字で始まること
1 バイト以上、128 バイト以下であること
引用符およびスペースを含まないこと
予約語 ( 付録 B「予約語」参照 ) でないこと
これらの規則に従わない識別子の使用の詳細は、2-4 ページ「区切り識別子」を参
照してください。
次にデータベース識別子の例を示します。
識別子
データベース オブジェ
クト
product
テーブル名
dollars
列名
top_25_brands
列名
区切り識別子
IBM Red Brick Warehouse は、ANSI SQL-92 に準拠した区切り識別子として、文字列
を囲む二重引用符 (") をサポートします。これにより、どんな文字列を含む識別子
の作成も可能になります。二重引用符は、2-4 ページ「標準識別子」で説明した規
則に従わない識別子を定義する場合に必要です。二重引用符 (") を含む識別子を作
成するには、その二重引用符の前にさらに二重引用符を付けます。
リテラルの最初と最後をマークするのに二重引用符を用いるアプリケーションを使
用する場合は、二重引用符を一重引用符で置き換える必要があります。
2-4
SQL Reference Guide
大文字と小文字
例
次の表は、区切り識別子の構文、区切り識別子の出力結果、および二重引用符が必
要な理由の簡単な説明を例示します。
SQL 構文
結果
説明
"table"
table
TABLE は予約語であるため、その名前の識別子は二重引用符で
囲まれる必要があります。
"""SELECT"""
"SELECT"
SELECT は予約語であるため、その名前の識別子は二重引用符
で囲まれる必要があります。出力結果に二重引用符の文字を含
めるには、それぞれの二重引用符の文字は二重引用符で囲まれ
る必要があります。
"Column Name"
Column Name
識別子にスペースが入っており、大文字と小文字が混在してい
るため二重引用符は必須です。
"The ""STAR"""
The "STAR"
最初の引用符は識別子の開始を示し、第 2 の引用符は第 3 の引用
符を文字として扱うことを示し、第 4 の引用符は第 5 の引用符を
文字として扱うことを示し、第 6 の引用符は識別子の終了を示し
ます。
"STAR" という列名の列を持つ table という名称のテーブルを作成するには、次の
SQL 文を入力します。
create table "table" (
"The ""STAR""" int) ;
このテーブルを選択するには、次のステートメントを入力します。
select "The ""STAR"""
from "table" ;
大文字と小文字
サーバでは、システム テーブルに格納する際に、小文字を大文字に変換します。た
とえば、MaRkeT という名称は MARKET に、fred は FRED に変換されます。このた
め、Market は MARKET と同等であり、MARKET の値が未設定または不定 (NULL)
でない限り、次の条件は真になります。
MarKet = MARKET
名称の値が未設定の場合、そのステートメントは不明と評価されます。
漢字などのように、大文字と小文字の区別がない文字は、入力したとおりに格納さ
れます。
SQL 言語の各要素
2-5
エリアスと相関名
例
次のクエリは、fred が作成したすべてのテーブルの名前を返します。fred は大文字
に変換されるため、検索条件には FRED を使用する必要があります。
select name
from rbw_tables
where creator = 'FRED'
エリアスと相関名
列およびテーブルには作成時に名称を付けますが、クエリの中では列エリアスおよ
びテーブル相関名で置き換えることができます。この一時的な名称は、ステートメ
ントの処理中のみ有効です。
列エリアス
列のエリアスは、オプションの AS キーワードを使って検索項目リストで設定しま
す。クエリ実行時に列名を変更したり、未設定の列に名称を与えます。エリアスを
割り当てた列は、それ以降の句でエリアスによって参照することができます。
次のクエリは検索項目リストの列に brand と sales という名称を割り当て、WHERE
句と GROUP BY 句で brand を使用します。
select prod_name as brand, sum(dollars) as sales
from product natural join sales
where brand = 'Aroma Roma'
group by brand
テーブルの相関名
テーブルの相関名は、FROM 句 (AS キーワードはオプション ) のテーブル参照の直
後に定義します。相関名は、1 つの相関条件でクエリやサブクエリが同じテーブル
を参照する場合や、テーブルをそれ自身と結合する場合に参照のあいまいさを除く
ために用いられます。また、サブクエリやほかの選択式から派生するテーブルに名
前を付ける手段にもなります。
テーブルのエリアスは、シノニムとは異なります。シノニムは、8-136 ページ
「CREATE SYNONYM」を参照してください。
FROM 句のテーブル参照に相関名を使用する場合は、相関名の後に列名リストを指
定することができます。単純なテーブル参照の場合は、テーブルの列名を列リスト
に指定された名前に一時的に置き換えます。クエリ式の場合は、派生テーブルの列
に一意な名前を与える手段となります。どちらの場合も、列リストはクエリの中で
のみ有効です。
2-6
SQL Reference Guide
エリアスと相関名
列リストを指定する場合は、テーブルのすべての列の名前を指定してください。列
リストを使用する場合は、列リストに指定した列名に基づいて列が結合されるた
め、自然結合と列を指定した結合 (USING サブ句を指定した結合 ) の指定に注意が
必要です。
自然結合と列を指定した結合では、列名が一致する 2 列を 1 列に結合したテーブル
が派生しますが、ON で指定した結合では、結合する 2 列がそのまま派生テーブル
に残されます。
列エリアスの構文は 7-19 ページ、相関名と列リストは 7-13 ページ、各種の結合は
7-7 ページ を参照してください。
修飾列名
修飾列名とは、テーブル名、ビュー名、テーブルやビューのシノニムのいずれかに
よって修飾された列名のことです。テーブル名は、CREATE 文で定義した名前か、
FROM 句で指定した相関名です。
列名とテーブル名は、ピリオドで区切ります。
sales.dollars
s.dollars
period.perkey
t1.perkey
view_sales99.quantity
v99.quantity
テーブル参照の詳細は、7-13 ページを参照してください。
例
次に列エリアスと相関名の使い方の例を示します。ここに示す 2 つの例の詳細は、
『SQL Self-Study Guide』の第 4 章と第 5 章を参照してください。
この例では、サブクエリとメイン クエリ両方の FROM 句に相関名が割り当てられ
ています。修飾された列名により、サブクエリの相関条件での列参照と、メイン ク
エリの検索項目リストおよび GROUP BY 句での列参照が区別されています。
select q.prod_name, e.month, sum(dollars) as sales_99,
(select sum(dollars)
from store t natural join sales s
natural join product p
natural join period d
where d.month = e.month
and d.year = e.year-1
and p.prod_name = q.prod_name
and t.city = u.city) as sales_98
SQL 言語の各要素
2-7
エリアスと相関名
from store u natural join product q
natural join period e natural join sales l
where year = 1999
and qtr = 'Q1_99'
and prod_name like 'Lotta Latte%'
and city like 'San J%'
group by q.prod_name, e.month, e.year, u.city;
メイン クエリの WHERE 句における列参照は、参照先が特定できるため修飾は不要
です。メイン クエリの FROM 句に指定されたテーブルを参照します。
次の例は、FROM 句の 2 つのサブクエリの外部結合から派生したテーブルおよび列
に相関名と列リストを指定しています。また、検索項目リストには (wk_no) という
列エリアスが指定され、
extract(week from date)
という式から得られる列に名前を付けています。このエリアスは、後で ORDER BY
句と BREAK BY 句で参照されます。
select date, extract(week from date) as wk_no, prices, sales
from ((select d1.date, sum(price)
from orders natural join period d1
where d1.year = 2000 and d1.week in (12, 13)
group by d1.date) as t1
full outer join
(select d2.date, sum(dollars)
from sales natural join period d2
where d2.year = 2000 and d2.week in (12, 13)
group by d2.date) as t2
on t1.date = t2.date) as t3(order_date, prices, date,
sales)
order by wk_no, date
break by wk_no summing 3, 4;
外部結合は、列を指定した結合でも自然結語でもないため、派生テーブル t3 には、
3 つではなく 4 つの列があります。
2-8
SQL Reference Guide
定数
定数
定数とは、文字列定数または数値定数のことです。文字列定数は、リテラル、文字
列、ストリングとも呼ばれます。日付時間リテラルは、日付と時間の一方または両
方を表す特別な文字列定数です。
数値定数は、整数、10 進数値、浮動小数点のいずれかで、符号、精度、スケールが
設定されます。精度は定数全体の桁数、スケールは小数点以下の桁数のことです。
文字列定数
文字列定数の始まりと終わりは、一重引用符 (') で示します。文字列定数の長さは、
定数の文字数になります。次に文字列定数の構文ダイアグラムを示します。
'
'
<character>
''
サーバが使用するコード セットは、インストールの際にロケール設定の一部として
定義されます。ロケールの詳細は、『Administrator's Guide』を参照してください。
使用上の注意
■
■
■
■
■
文字とは、アルファベット、数値、特殊文字のいずれかです。
文字列定数の長さは、0 ∼ 1024 文字の範囲である必要があります。
2 つの一重引用符で囲んだ長さが 0 の文字列 (' ') は、「空の文字列」と呼ば
れます。これは、NULL とは異なります。
文字列で一重引用符 (') を使用する場合は、2 つの一重引用符 (' ') を使用し
てください。
文字列定数は、大文字と小文字の区別があります。Chicago と chicago は同
じではありません。
SQL 言語の各要素
2-9
日付時間定数
例
次に文字列定数の例を示します。
'IBM Software'
'Scarlet O''hara'
日付時間定数
DATE、TIME、TIMESTAMP の各キーワードは、その後に続く定数が ANSI SQL-92
標準の日付時間データ型に準拠した指定であることを示します。
次に日付時間定数の構文ダイアグラムを示します。
DATE
'<YYYY-MM-DD>''
'<alternative_date_value>'
TIME
'<HH:MM:SS> '
'<HH:MM:SS.fraction> '
'<alternative_time_value>'
TIMESTAMP
'<YYYY-MM-DD>
<HH:MM:SS> '
<HH:MM:SS.fraction>'
'<alternative_timestamp_value >'
一部のクエリ ツールは、ANSI-92 が定義する日付時間定数に準拠しない SQL を生成
するため、IBM Red Brick Warehouse は、ほかの SQL サーバの日付時間フォーマット
も限定的にサポートします。これらのフォーマットは、サーバ ロケールの言語を
English、テリトリを United States に指定した場合だけ使用できます。それ以外のロ
ケールでは、ANSI 日付時間定数を使用する必要があります。ANSI-92 標準型式以
外の日付時間フォーマットの詳細は、付録 C「日付時間フォーマット」を参照して
ください。
2-10
SQL Reference Guide
日付時間定数
使用上の注意
■
■
■
■
■
■
日付時間定数の始まりと終わりは、一重引用符 (') で示します。
日付と時間を構成する要素は、符号なしの整数とし、次に示す範囲である
必要があります。
要素
意味
最小値
最大値
YYYY
年
0001
9999
MM
月
01
12
DD
日
01
31
HH
時間
00
23
MM
分
00
59
SS
秒
00
59
fraction
秒未満の端数
0
999999
日付の要素間はハイフン (-) で区切ります。
YYYY-MM-DD
日付エレメント間に空白を使用することはできません。
時間の要素は、次のようにコロン (:) またはピリオド (.) で区切ります。
HH:MM:SS
HH:MM:SS.fraction
時間の要素間に空白を使用することはできません。
fraction は秒未満の端数を表す 0 ∼ 6 桁の数字です。
タイムスタンプの日付フィールドと時間フィールドの間には空白が使用で
きますが、必須ではありません。
例
次に日付時間定数の例を示します。
DATE'1999-12-25'
TIME'08:23:16'
TIME'14:23:16.5'
TIMESTAMP'1999-12-25 08:23:16'
次の例は、DATE 型の列に ANSI SQL-92 の日付時間定数の制約を適用します。
select * from period where date = DATE '1999-12-25'
SQL 言語の各要素
2-11
整数定数
ANSI SQL-92 標準型式以外の日付時間の定数を使用する場合は、付録 C「日付時間
フォーマット」に示すように、使用するフォーマットに DATEFORMAT 変数を指定
します。
整数定数
整数定数は、0 ∼ 9 桁の数字列です。数字の前には、正符号 (+) または負符号 (-) を
付けることができます。次に整数定数の構文ダイアグラムを示します。
<digit>
+
–
使用上の注意
■
■
■
■
整数定数は、9 桁以下である必要があります。コンパイラは、10 桁から 38
桁までの整数定数を 10 進数定数と解釈します。38 桁を超える場合は、浮
動小数点定数を使用します。
整数定数の精度は、桁数で表す長さです。スケールは 0 です。
整数定数にはカンマを含めることはできません。たとえば、1,000 とは記
述できません。
有効な数値文字として認識されるのは、数値を表すシングルバイトの文字
だけです。
例
次に整数定数の例を示します。
234
-5280333
+2274
+999990001
2-12
SQL Reference Guide
10 進数定数
10 進数定数
10 進数定数は、小数点を含んだ数字列です。10 進数定数の前には、正符号 (+) また
は負符号 (-) を付けることができます。次に 10 進数定数の構文ダイアグラムを示し
ます。
<digit>
.
+
<digit>
.
<digit>
使用上の注意
■
■
■
■
■
■
10 進数定数は、符号および小数点を除いて 38 桁以下である必要がありま
す。38 桁を超えると、浮動小数点定数と解釈されます。
10 進数定数の精度は、桁数で表す長さです。スケールは、小数点以下の桁
数になります。
10 進数定数の小数点は、必須ではありません。小数点を使用しないと、ス
ケールは 0 と解釈されます。
10 進数定数にはカンマを含めることはできません (1,100.10 など )。
サーバ ロケールにかかわらず、小数点文字はピリオド (.) である必要があ
ります。
有効な数値文字として認識されるのは、数値を表すシングルバイトの文字
だけです。
例
次に 10 進数定数の例を示します。
234
精度 3、スケール 0
+234.78
精度 5、スケール 2
+.007
精度 3、スケール 3
-2.1414
精度 5、スケール 4
1234567890.123456789
精度 19、スケール 9
SQL 言語の各要素 2-13
浮動小数点定数
浮動小数点定数
浮動小数点定数は、38 桁を超える数字列か、「指数表記」による数字列です。指数
表記は、10 進数値と指数部を 1 文字 (E または e) で区切って表します。指数表現の
値は、指数部で指定する 10 の累乗と 10 進数値の積になります。この表記は指数表
記とも呼ばれています。
次に浮動小数点数値の構文ダイアグラムを示します。前半は 10 進数値の部分、後
半は指数部です。
<digit>
.
+
<digit>
.
<digit>
E
<digit>
e
+
-
例
次に浮動小数点定数の例を示します。
1.73e+5
-2.93E+9
145.06e-5
.003E+4
+1234.56789e105
使用上の注意
■
■
2-14
サーバ ロケールにかかわらず、浮動小数点定数の小数点文字はピリオド (.)
である必要があります。
有効な数値文字として認識されるのは、数値を表すシングルバイトの文字
だけです。
SQL Reference Guide
データ型
データ型
サーバが格納、検索、削除、挿入、更新する値は、各値の特性を示すデータ型を
持っています。データ型は、CREATE TABLE 文でテーブルを作成する時に指定しま
す。データ型は、演算の処理中に変換することができます。たとえば、整数を 10
進数値に加算する場合は、整数が 10 進数値に変換されます。
Red Brick の構造化問い合わせ言語 (SQL) の実装では、ANSI SQL-89 標準データ型お
よび TINY 整数のデータ型をサポートし、ANSI SQL-92 の日付データ型の一部もサ
ポートします。
次の表は、サポートされるデータ型の一覧です。この表は、Red Brick ODBC Driver
が実行する、CREATE TABLE 文で指定したサーバのデータ型と ODBC データ型と
の間のデータ型マッピングも示します。
サーバ データ型
ODBC SQL データ型
デフォルトの ODBC C
データ型
CHAR
SQL_CHAR
SQL_C_CHAR
VARCHAR
SQL_CHAR
SQL_C_CHAR
TINYINT
SQL_TINYINT
SQL_C_STINYINT
SMALLINT
SQL_SMALLINT
SQL_C_SSHORT
INTEGER
SQL_INTEGER
SQL_C_SLONG
SERIAL
SQL_INTEGER
SQL_C_SLONG
NUMERIC、DECIMAL
SQL_DECIMAL
SQL_C_CHAR
REAL
SQL_REAL
SQL_C_FLOAT
DOUBLE、FLOAT
SQL_DOUBLE
SQL_C_DOUBLE
DATE
SQL_DATE
SQL_C_DATE
TIME
SQL_TIME
SQL_C_TIME
TIMESTAMP
SQL_TIMESTAMP
SQL_C_TIMESTAMP
3 番目の列は、Red Brick のデータ型が論理的にマッピングされる ODBC のデータ型
を示します。
エンド ユーザ ODBC アプリケーションの作成についての詳細は、
『Client Installation
and Connectivity Guide』を参照してください。
SQL 言語の各要素 2-15
CHARACTER
浮動小数点データ型の最大値と最小値は、ホストのプラットフォームによって異な
ります。
CHARACTER
文字列は固定長または可変長の値として格納できます。CHAR データ型は固定長と
して、VARCHAR データ型は可変長として文字列を格納します。
7 または 8 ビットの ASCII コード セットを使用した場合は、1 文字の長さが常に 1 バ
イトになるため、列サイズが、バイト数か文字数のどちらと見なされても違いはあ
りません。ただし、マルチバイトのコード セットを使用する場合は、シングルバイ
トのコード セットと同数の文字が列に格納できないことがあるので注意してくださ
い。
CHARACTER
CHAR
(
<length>
)
VARCHAR
CHARACTER VARYING
(
<length>
)
WITH FILLFACTOR<n>
CHAR VARYING
WITH
FILLFACTOR
<n>
この句は、可変長文字 (VARCHAR) 型の列にのみ適用されます。
通常の VARCHAR が取るべき列の長さの割合を指定します。この
値は、ブロックに割り当てる行サイズと行数の計算に使用されま
す。
WITH FILLFACTOR を指定しないと、rbw.config ファイルに設定さ
れているデフォルトの列フィル ファクタが使用されます。
rbw.config ファイルで列フィル ファクタが設定されていない場合
は、システム デフォルトである 10% が使用されます。
フィル ファクタの詳細は、『Administrator's Guide』を参照してくだ
さい。
2-16
SQL Reference Guide
CHARACTER
使用上の注意
■
■
■
■
■
■
■
CHARACTER キーワードは、CHAR と同義です。
CHARACTER VARYING キーワードと CHAR VARYING キーワードは
VARCHAR と同義です。
文字列長の値は最大列幅を指定し、1,024 以下である必要があります。デ
フォルトは 1 です。
CHAR 列に格納された文字列は左寄せされ、残りのスペースに空白が追加
されます。CHAR 列に格納された文字列の長さはすべて同じです。
VARCHAR 列に格納された文字列の長さは、ソース文字列または、その文
字列 ( 追加された空白を含む ) を生成した式の長さと同じです。VARCHAR
列に格納された文字列は可変長です。
VARCHAR 列に格納された文字列には 2 バイトのオーバーヘッドが生じま
す。このデータ型は、列幅が 6 バイト未満、または同等の長さの文字列を
格納する列には使用できません。CHAR データ型を使用してください。
文字列を比較する場合、シングルバイトの ASCII 空白文字ではなく、( 東ア
ジア言語でサポートされている ) ダブルバイトの空白文字を含むデータを
ロードすると、予測できない結果になることがあります。可能な場合に
は、ダブルバイトの空白をシングルバイトの空白に置き換えて、データの
ロード前に入力ファイルからダブルバイトの後ろの空白を取り除きます。
VARCHAR と CHAR の使用方法
VARCHAR データ型は、ソース文字列の長さが大きく異なる場合など、主に格納ス
ペースを効率的に利用したいときに使用します。CHAR(20) 列に 5 文字の文字列を
格納すると、格納された文字列の長さは 20 文字に増加します (15 文字分は末尾の空
白 )。同じ文字列を VARCHAR(20) 列に格納すると、5 文字分しか必要としません。
次の場合には、VARCHAR ではなく CHAR を使用します。
■
■
■
6 バイト未満の列幅
文字列の長さが、あまり大幅に異ならないソース文字列
頻繁に更新され、格納された行が長くなる列。この場合は、最適に行が格
納されないことがあるので、データへのアクセスに時間がかかる可能性が
あります。
重要 : VARCHAR 列の末尾に空白が存在すると、予想外の、または不定な結果に結
びつくことがあります。末尾に空白を含むデータは VARCHAR 列には保存しないこ
とを推奨します。
SQL 言語の各要素 2-17
CHARACTER
CHAR 列に格納されると、末尾空白の有無は重要性を失います。‘zebra’ および
‘zebra ’ ( 末尾に 1 つ空白が存在 ) の 2 つのソース文字列は、CHAR(20) 列に格納する
と文字列の長さはどちらも 20 ですが、VARCHAR(20) 列に格納すると、文字列の長
さはそれぞれ 5 と 6 になります。VARCHAR 列内の末尾空白は、LENGTH、
CONCAT、SUBSTR などのスカラ関数を使用する際に重要な意味を持ちます。
VARCHAR 列内の末尾空白はまた、LIKE などの比較述部を使用する検索条件に対
しても重要な意味を持ちます。たとえば、文字列が 'zebra ' のとき次の検索条件は真
ですが、条件が 'zebra' のときは偽になります。
animal LIKE 'zebra %'
VARCHAR 列の末尾に空白があると、不定な結果に結びつくことがあります。たと
えば、次のクエリでは 5 または 6 が返されます。
select LENGTH(MAX(animal))
from kingdom_table;
任意の処理を実行中にクエリが、'zebra' または 'zebra ' のどちらの値を選択するかに
より、返される値が変わります。MAX 集約関数では、この 2 つの文字列は同等で
あり、どちらでも最大値として選ばれる可能性があります。実際に選択される値
は、テーブル内でのデータ順、および選択されたクエリ プランや実際の並列度な
ど、クエリ実行の状況に左右されます。
VARCHAR データの末尾に空白が含まれていなければ、不整合は起きません。末尾
に空白が必要な場合は、一貫して使用してください。たとえば、1 つの末尾空白が
必要な場合は、すべての値の末尾に空白を 1 つ追加します。論理上、最小列幅を指
定しなければならない場合は、最小列幅より少ない値の末尾に空白を追加し、最小
列幅が満たされるようにします。それ以外の値からは末尾の空白をすべて取り除き
ます。
2-18
SQL Reference Guide
DATETIME データ型 :DATE、TIME、TIMESTAMP
DATETIME データ型 :DATE、TIME、TIMESTAMP
日付、時間、タイムスタンプのデータ型 ( 日付時間データ型と総称 ) は、スカラ関
数、比較関数、集約関数を使用できる形式で日付と時間の情報を格納します。
DATE、TIME、TIMESTAMP のデータ型は、次の例外を除き、ANSI SQL-92 の日付
時間データ型の定義に準拠します。
■
■
時間帯はサポートされません。
時間間隔は直接にはサポートされませんが、スカラ関数により間接的にサ
ポートされます。
前述のデータ型は、DATE、TIME、TIMESTAMP の各キーワードで指定します。
DATE
TIME
( <scale> )
TIMESTAMP
( <scale> )
使用上の注意
■
■
■
スケールの値は、0 ∼ 6 の整数である必要があります。この値は、表示お
よび計算に使用する秒未満の桁数を指定します。<scale> に 0 より大きい値
を指定すると、内部には 6 桁が格納されますが、<scale> で指定した桁数だ
けが有効になります。つまり、残りの桁は 0 になります。<scale> = 0 の場
合は、秒未満の桁は格納されません。
スケールの値を指定しないと、<scale> のデフォルト値は次のようになりま
す。
TIME
TIMESTAMP
日付時間データ型の範囲は、次のとおりです。
DATE
January 1, 1 to December 31, 9999
TIME
0:0:0 to 23:59:59.999999
TIMESTAMP
January 1, 1 0:0:0.000000 to
December 31, 9999 23:59:59.999999
精度が異なる値を比較する場合は、精度の低い方の値に 0 を追加し、精度
の高い値と同じ桁数にします。
SQL 言語の各要素 2-19
INTEGER
■
■
日付時間データ型をソートまたは比較するときは、日付時間の古いものか
ら順になります。
日時 (DATETIME) 型の文字列を処理する場合、シングルバイトの ASCII 空
白文字ではなく、( 東アジア言語でサポートされている ) ダブルバイトの
空白文字を含むデータをロードすると、予測できない結果になることがあ
ります。可能な場合には、ダブルバイトの空白をシングルバイトの空白に
置き換えて、データのロード前に入力ファイルからダブルバイトの後ろの
空白を取り除きます。
例
次に日付時間データ型の指定の例を示します。
DATE
TIME
秒未満の端数なし
TIME(6)
秒未満の有効桁数は 6
TIMESTAMP(0)
秒未満の端数なし
TIMESTAMP
秒未満の有効桁数は 6
TIMESTAMP(2)
秒未満の有効桁数は 2
INTEGER
整数データ型は、- 231 ∼ 231-1 (231 = 2,147,483,648) の符号付き整数です。このデータ
型は、INTEGER または INT キーワードで指定します。
2-20
SQL Reference Guide
SERIAL
SERIAL
シリアル (SERIAL) 型は、1 ∼ 231-1 (231=2,147,483,648) の符号付き整数です。この
データ型は、SERIAL キーワードで指定します。
SERIAL
(
)
<start_value>
,
,
<step_value>
<step_value>
<start_value>
SERIAL 列の値の開始値。0 より大きく 231 未満の数値リテラルであ
る必要があります。デフォルト値は 1 です。
<step_value>
SERIAL 列の 2 つの値の差。0 より大きく 231 未満の数値リテラルで
ある必要があります。デフォルト値は 1 です。
使用上の注意
シリアル (SERIAL) 型は特殊な整数 (INTEGER) 型です。シリアル (SERIAL) 型の使
用上の制限を次に示します。
■
■
■
■
■
シリアル (SERIAL) 型は、整数 (INTEGER) 型が使用できるほとんどの場合
に使用できます。
どのテーブルも 1 つだけシリアル (SERIAL) 型の列を持つことができます。
シリアル (SERIAL) 型の列は、任意のテーブルのプライマリ キーとして使
用できますが、フォーリン キーの一部として使用することはできません。
シリアル ( SERIAL) 型の列をフォーリン キーとして参照する場合は、
フォーリン キー列を整数 ( INTEGER ) 型の列として指定する必要がありま
す。
ほかの列と同様にシリアル (SERIAL) 型の列に一意性インデックスを定義
できる場合でも、このインデックスは別に作成する必要があります。一意
性インデックスは、2 つの同じシリアル番号が同時にテーブルに存在しな
いようにします。ただし、一意性インデックスでは、シリアル番号を使用
している行のインデックス管理でオーバーヘッドが発生します。
シリアル (SERIAL) 型は、ビュー列、ビュー テーブル列、述部などの事前
計算ビュー定義では許可されません。
SQL 言語の各要素 2-21
SMALLINT
シリアル (SERIAL) 型値の生成
シリアル (SERIAL) 型列の値は、自動的に挿入または更新することも、手動で挿入
または更新することもできます。手動で挿入または更新する場合は、ローダ (TMU)
を使用するか、INSERT 文または UPDATE 文を使用します。シリアル (SERIAL) 型列
の値を指定せずに挿入すると、値が自動的に生成されます。データ行を挿入すると
きに、シリアル (SERIAL) 型値の生成に規則が適用されます。この規則により、同
じシリアル (SERIAL) 型値が自動的に生成されないようにします。
重要 : シリアル (SERIAL) 型列に一意性インデックスが定義されていない場合、シリ
アル (SERIAL) 型値を手動で設定すると、値の一意性が保証されません。一意性イン
デックスは、2 つの同じシリアル番号が同時にテーブルに存在しないようにします。
サーバは、テーブルで一番大きなシリアル番号を、内部的に追跡します。
<step_value> が 1 の場合、一意のシリアル番号は 2,147,483,647 だけ存在します。
<step_value> が大きくなると一意の値の数は少なくなります。
システムに格納されているシリアル番号より大きい値を持つ行をテーブルに挿入す
ると、格納されている値は、挿入された大きい値に置き換えられます。シリアル番
号が最大許容値を超えるとエラー メッセージが生成され、操作が失敗します。その
時点で、シリアル (SERIAL) 型の <start_value> をシステム管理者がリセットするま
で、テーブルへの挿入はできなくなります。2,147,483,647 に近い行数のテーブルで
は、シリアル (SERIAL) 型は使用しないでください。
削除などにより、すべてのシリアル (SERIAL) 型値がテーブルに存在するのではな
いのため、実際には 2,147,483,647 より少ない行を格納できます。
重要 : システムが生成する次のシリアル (SERIAL) 型値が 2,147,483,647 ( システム
が生成できる最大のシリアル番号 ) より大きくなる場合、シリアル (SERIAL) 型値の
自動生成は停止され、テーブルに行を挿入することはできません。エラー メッセー
ジが返されます。
データをその元のシリアル番号とともにアーカイブおよび復元できます。行が削除
されても、最大シリアル (SERIAL) 型値はリセットされません。次のシリアル番号
は、最後に割り当てられたシリアル番号に基づきます。
SMALLINT
小桁整数 (SMALLINT) 型は、- 215 ∼ 215-1 (215 = 32,768) の符号付き整数です。この
データ型は、SMALLINT キーワードで指定します。
TINYINT
TINY 整数 (TINYINT) 型は、- 27 ∼ 27-1 (27 = 128) の符号付き整数です。このデータ型
は、TINYINT キーワードで指定します。
2-22
SQL Reference Guide
DECIMAL と NUMERIC
DECIMAL と NUMERIC
DECIMAL 型と NUMERIC 型は、精度とスケールを正確に表した数値データ型です。
DECIMAL と NUMERIC は同義です。このデータ型は、DECIMAL、DEC、
NUMERIC、、NUM のいずれかのキーワードで指定します。
DECIMAL
DEC
NUMERIC
( <precision>
)
, <scale>
NUM
使用上の注意
■
■
■
■
10 進数値データ型の最大精度は 38 桁です。
10 進数値データ型のスケールは正数で表し、その精度の桁数以下としま
す。
デフォルトは、精度が 9、スケールが 0 です。
DECIMAL データ型は、NUMERIC データ型と同義です。
例
次に 10 進数値データ型の型指定の例を示します。
DECIMAL
精度 9、スケール 0
DEC
精度 9、スケール 0
DECIMAL(9)
精度 9、スケール 0
DECIMAL(38,38)
精度 38、スケール 38
NUMERIC
精度 9、スケール 0
NUMERIC(9)
精度 9、スケール 0
SQL 言語の各要素 2-23
REAL
REAL
実数データ型は、符号付き浮動小数点数値を単精度で表した概数です。このデータ
型は、REAL キーワードで指定します。
使用上の注意
小桁実数 (REAL) 型は、おおよそ 1.17549435E-38F ∼ 1.E37 の単精度数です ( 最小範
囲と最大範囲はホスト プラットフォームに依存します )。
DOUBLE PRECISION と FLOAT
倍精度データ型と浮動小数点データ型は、符号付き浮動小数点数値を倍精度で表し
た概数です。このデータ型は、DOUBLE PRECISION または FLOAT キーワードで指
定します。
使用上の注意
■
■
2-24
このデータ型は、2.3E-308 ∼ 1.E307 の倍精度数です ( これは最小範囲で、
最大範囲はホスト プラットフォームに依存します )。
DOUBLE PRECISION データ型と FLOAT データ型は、同義です。
SQL Reference Guide
値の欠落と NULL 値
値の欠落と NULL 値
IBM Red Brick Warehouse は、値の欠落を次のように処理します。
■
値の欠落は、空白とは異なります。たとえば、次のステートメントは、
Market 列に空白が格納されていれば偽、入力データが欠落していれば真
になります。
(market is null)
■
値の欠落は、0 とは異なります。たとえば、次のステートメントは、
Dollars 列に 0 が格納されていれば真ですが、値が欠落していれば真でも偽
でもありません。
(dollars = 0)
■
値が欠落していれば真でも偽でもなく、不定と判定されます。
条件が参照する値が欠落している場合は、3 値 ( 真、偽、不定 ) 論理によっ
て評価されます。たとえば、次のステートメントの真理値は、Dollars 列の
値が欠落していれば不定になります。
(dollars > 100)
■
算術式が参照する値が欠落している場合は、NULL と評価されます。たと
えば、次のステートメントで Dollars 列の値が欠落していれば NULL が返さ
れます。
(dollars+5)
■
列の値が欠落している場合、IS NULL 述部は真、IS NOT NULL 述部は偽に
なります。たとえば、次のステートメントは、Dollars 列の値が欠落してい
る場合に真になります。
(dollars is null)
■
ほとんどの表示関数と集約関数は、値の欠落を無視します。たとえば、次
のステートメントは、既存値の順位だけを返します。
rank(dollars)
■
ほとんどのスカラ関数式は値が欠落していると、NULL を返します。たと
えば、次のステートメントで Dollars 列の値が欠落していれば NULL が返さ
れます。
(float(dollars))
■
IFNULL スカラ関数は、値の欠落を検出し、指定された値に置き換えます。
たとえば、次のステートメントで Market 列の値が欠落していれば No
Name という値が返されます。
(ifnull(market, 'No Name'))
SQL 言語の各要素 2-25
列データの代入と比較
列データの代入と比較
INSERT 文や UPDATE 文は列に値を代入し、各種の演算子や関数は値を比較します。
代入または比較の対象となる値は、互換性のあるデータ型である必要があります。
数値データ型と文字データ型は互換性がありません。たとえば、数値データ型に定
義された列に文字列を格納することはできず、文字列と数値を比較することもでき
ません。
列データの代入
CHARACTER と指定された列には、文字列しか格納できません。DATETIME と指
定された列には日付時間の値、NUMERIC と指定された列には数値しか格納できま
せん。さらに次の規則が適用されます。
文字列
文字列を列に挿入したり、文字列で列を更新する場合は、次の規則が適用されます。
■
■
■
文字列の長さが CHAR 列の指定長より短ければ、必要な数の空白が文字列
の右に追加されます。
文字列の長さが VARCHAR 列の指定長より短ければ、その文字列の
VARCHAR 属性は、代入された文字列の長さとなります。
文字列の長さが列の指定長より長ければ、INSERT 文や UPDATE 文が失敗
し、エラー メッセージが返されます。
日付時間の値
日付時間定数を列に挿入したり、日付時間定数で列を更新する場合は、次の規則が
適用されます。
■
■
■
2-26
DATE、TIME、TIMESTAMP のプレフィクスを持つ定数は、日付時間の値
と解釈されます。
タイムスタンプの値に時間の部分が欠落していれば、午前 0 時が使用され
ます。
タイムスタンプの値に日付の部分が欠落していれば、1900 年 1 月 1 日
(1900-01-01) が使用されます。
SQL Reference Guide
比較
■
DATE、TIME、TIMESTAMP のプレフィクスを持たない定数は、その内容が
日付時間の値であると推定される場合のみ、文字定数ではなく日付時間定
数であると解釈されます。その場合、定数は日付時間の値に変換されます。
INSERT 文で、DATETIME 型の列に挿入される定数は、適切な日付時間
データ型に変換されます。
insert into table1 (date_col) values ('1999-07-04')
UPDATE 文で、DATETIME 列に代入される定数は、適切な日付時間データ
型に変換されます。
update table1 set date_col = current_date
変換が失敗すると、ステートメントの実行が中止され、エラーになります。
数値
数値を列に挿入したり、数値で列を更新する場合は、次の規則が適用されます。
整数や 10 進数値の整数部は、切り捨てられません。端数部は、必要に応じて切り
捨てられます。
比較
文字はほかの文字と比較でき、日付時間はほかの日付時間、数値はほかの数値と比
較することができます。さらに次の規則が適用されます。
文字列
文字列を比較する場合は、比較する文字列の長さが同等であることが必要です。文
字列長が異なる場合は、長い方の文字列と同じ長さになるまで、短い方の文字列の
右端に空白スペースが追加されます。その上で、各文字列の対応する文字ごとに、
左から右へ比較されます。次の規則が適用されます。
■
■
2 つの文字列の長さと対応する文字が同じ場合は、等しいと見なされます。
文字列の文字が同じでない場合、最初の等しくない文字によって、文字列
の大小関係が決まります。つまり、システムの相関シーケンスにおいて最
も大きな値の文字を持つ文字列の方が大きいと判断されます。
日付時間の値
日付時間の値は、次のように比較されます。
■
■
日付の値は、日付の値と比較されます。
時間の値は、時間の値と比較されます。精度が異なる値を比較する場合
は、精度の低い値に 0 を追加し、精度の高い値と同じ桁数にします。
SQL 言語の各要素 2-27
比較
■
■
■
■
タイムスタンプの値は、タイムスタンプの値と比較されます。精度が異な
る値を比較する場合は、精度の低い値に 0 を追加し、精度の高い値と同じ
桁数にします。
日付の値は、タイムスタンプの値と比較されます。日付の値には、比較の
ために深夜の時間の値が埋め込まれます。
時間の値は、タイムスタンプの値と比較されます。その時間の値には比較
のために日付値 1900-01-01 が埋め込まれます。
DATE、TIME、TIMESTAMP のプレフィクスを持たない定数は、その内容
が日付時間の値であると推定される場合のみ、文字定数ではなく ANSI
SQL-92 標準型式以外の日付時間定数であると解釈されます。その場合、
定数は日付時間の値に変換されます。詳細は付録 C「日付時間フォーマッ
ト」を参照してください。
例
WHERE、HAVING、WHEN の各句で日付時間列と比較する定数は、適切な日付時
間データ型に変換されます。
select *
from table1
where date_col <> '7-4-1999'
検索項目リスト中の式で、日付時間データ型が期待される位置に定数が指定されて
いる場合は、適切な日付時間データ型に変換されます。
select datediff (dy, date_col, '7-4-1999')
from table1
変換が失敗すると、ステートメントの実行が中止され、エラーになります。
数値
数値は、符号と大きさに基づいて比較されます。たとえば、5 は 1 より量的には大
きな値ですが、+1 は ‐ 5 より大きいと評価されます。異なる型の数値が混在する
場合は、次のように比較されます。
■
■
■
■
2-28
整数と 10 進数値を比較する場合は、整数が一時的に 10 進数値に変換され
ます。
スケールの異なる 10 進数値どうしを比較する場合は、小数点以下の桁数
が少ない方の末尾にゼロを追加し、一時的に拡張します。
浮動小数点数値を 10 進数値または整数と比較する場合は、10 進数値また
は整数が一時的に浮動小数点数値に変換されます。
単精度の浮動小数点数値 (REAL) と倍精度の浮動小数点数値 (DOUBLE ま
たは FLOAT) を比較する場合は、単精度の数値が一時的に倍精度の数値に
変換されます。
SQL Reference Guide
第3章
式と条件
この章について .
式
.
.
.
. . . . . . . .
単項式 . . . . . .
多項式 . . . . . .
多項式の評価 . . .
条件 . . . . . .
比較述部 . . .
BETWEEN 述部
EXISTS 述部 .
IN 述部 . . .
IS NULL 述部 .
LIKE 述部 . .
検索条件 . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3-3
3-4
3-4
3-5
3-7
. . . . .
. . . . .
. . . . .
. . . . .
. . . .
. . . .
. . . .
. . . .
. . . . .
. . . . .
. . . . .
. . . . .
. .
. .
. .
. .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3-10
3-11
3-12
3-13
3-14
3-15
3-16
3-17
3-2 SQL Reference Guide
この章について
IBM Red Brick Warehouse の SQL インプリメンテーションには、各種の算術演算子、
論理演算子、論理述部が組み込まれています。
この章では、次の事項について説明します。
■
■
式
❑ 単項式
❑ 多項式
❑ 多項式の評価
条件
❑ 比較述部
❑ BETWEEN 述部
❑ EXISTS 述部
❑ IN 述部
❑ IS NULL 述部
❑ LIKE 述部
❑ 検索条件
式と条件
3-3
式
式
式は、一意の値を表します。たとえば、5+12 という式は 17 となります。次の式は
1,000 ドル単位の値を返します。
(sales.dollars /1000)
次に示す列名の値はコンテキストによって決まります。
sales.dollars
という名の列は指定した行に対する値になります。
単項式
単項式は、次のいずれかになります。
■
■
■
■
■
■
■
定数
スカラ関数
列名
集約関数
RISQL 表示関数
OLAP 関数
スカラ サブクエリ
スカラ サブクエリの詳細は、7-69 ページ「スカラ サブクエリとテーブル サブクエ
リ」を参照してください。
例
次の式は、いずれも単項式です。
'Lotta Latte'
2.1416
sum(dollars)
rank(sales)
rank(sum(dollars))
integer(dollar_cents)
dollars
(select max(bonus) from employee)
3-4
SQL Reference Guide
多項式
多項式
多項式は、算術演算子で結合した単項数値式のシーケンスです。多項式では、かっ
こを使って評価順を指定することができます。次に多項式の構文ダイアグラムを示
します。
/
*
+
–
<simple_expression>
+
–
(
<compound_expression>
)
多項式に使用する単項式は、数値を返すものである必要があります。
分析関数
次の RANK を使った例に示すように、1 つの多項式には任意の数の OLAP 関数また
は RISQL 表示関数を使用することができます。ただし、同じ式または同じ問い合わ
せで OLAP と RISQL 表示関数を混在させることはできません。
詳細は、第 6 章「分析関数」を参照してください。
例
次の式は、いずれも多項式です。
(125+sales.dollars)/5
avg(sales.dollars/1000)
sum(sales.dollars)/count(*)
rank() over(order by sales)/100
rank() over(order by sum(dollars)desc)/rank() over(order by
sum(quantity)desc)
rank(price)/rank(earnings)
ratiotoreport(dollars) over(order by quantity)*100
ratiotoreport(sales)*100
(select salary from employee where emp_no = 227)*1.1
式と条件
3-5
多項式
入れ子になった式
ほかの関数に入れ子にできる関数もあります。たとえば、次の式は、数値を切り捨
てる場合に使用することができます。
string(sum(dollars), 7, 2)
スカラ関数は、ほかのスカラ関数の入れ子とすることができます。たとえば、次の
式は、日付時間の構成要素のうち、年の部分を返します。
string(current_date, 4)
OLAP 関数と RISQL 表示関数は、集約関数、ほかの OLAP 関数、またはほかの表示
関数の引数として使用することはできません。このため、次の式はエラーになりま
す。
sum(rank() over(order by dollars))
rank(cume(dollars))
ただし、集約関数を OLAP 関数または表示関数の入れ子とすることはできます。た
とえば、次の式で Dollars 列の値を合計し、合計値の順位付けをすることができま
す。
rank() over(order by sum(dollars) desc)
(rank(sum(dollars))
3-6
SQL Reference Guide
多項式の評価
多項式の評価
多項式の値は、式の構成要素をデータベース サーバがどのように評価するかで決ま
ります。評価基準は、次のとおりです。
■
■
■
演算子のタイプと演算子の優先順位
オペランドのデータ型
値の欠落 (NULL) があるかどうか
演算子のタイプ
多項算術式は、次の演算子を使って作成することができます。
演算子
説明
( )
評価順を指示するかっこ
+、-
正と負の単項演算子
*、 /
乗算と除算
+、-
加算と減算
上の表では、演算子は優先度の高いものから順に ( 上から下、同一レベル内では左
から右に ) 記されています。
かっこは、評価順を制御する必要がある場合に使う演算子です。データベース サー
バは、かっこの中にある式を最初に評価します。かっこが入れ子にされていれば、
1 番内側のかっこから順に評価していきます。
単項演算子のプラス (+) を使用した場合、オペランドの符号は変わりません。単項
演算子のマイナス (-) は、オペランドの符号を逆にします。ゼロを表す符号なしの
定数 (0、.0、0.0) は正の値と見なされます。
例
次にかっこの用例を示します。
10*5+7 = 57
10*(5+7) = 120
式と条件
3-7
多項式の評価
演算結果のデータ型
乗算、加算、減算のオペランドがいずれも整数の場合は、結果を表現できる最小の
整数型が演算結果になります。結果が大きすぎて整数に格納できなければ、10 進数
値に変換されます。
ただし、この規則は除算演算子には適用されません。整数を整数で除算した場合の
戻り値は、整数ではなく数値データ型になります。整数の除算には、10 進数値の除
算と同じ規則が適用されます。
一方のオペランドが整数で他方が 10 進数値の場合は、整数がスケール ( 小数点以下
の桁数 ) を 0 とする 10 進数値に一時的に変換されます。演算結果は、10 進数値にな
ります。
オペランドが両方とも 10 進数値の場合、演算結果の精度とスケールは次の表に示
す規則に従います。
式
結果の精度
結果のスケール
d1 + d2
max(p1- s1, p2-s2) + max(s1, s2) + 1
max(s1, s2)
d1 ñ d2
max(p1- s1, p2-s2) + max(s1, s2) + 1
max(s1, s2)
d1 * d2
p1 + p2
s1 + s2
d1 / d2
max(6,s1+p2-s2+1) + p1s1+s2
max(6,s1+p2-s2+1)
オペランドの一方が浮動小数点数値の場合は、オペランドが一時的に浮動小数点数
値に変換されます。演算結果は、浮動小数点数値になります。
除算の結果、精度が 38 桁を超えた場合は、精度が 38 桁になるようにスケールが減
らされます。スケールは、6 桁まで減らすことができます。スケールを 6 に減らし
ても精度が 38 桁を超える場合は、実行時オーバーフロー エラーが発生します。
3-8
SQL Reference Guide
多項式の評価
値の欠落
算術演算のオペランドが NULL の場合は、NULL が返されます。次の表は、各算術
演算の結果を定義したものです。x は NULL を表し、y は数値を表します。
演算
結果
-x
NULL
+x
NULL
x+y
NULL
x-y
NULL
x*y
NULL
x/y
NULL
式と条件
3-9
条件
条件
条件は、1 つまたは複数の行に対し、真、偽、不定のいずれかを評価するステート
メントのことです。条件は、SQL の比較述部と数量述部を使って表現します。次に
各述部を使った条件の構文ダイアグラムを示します。
<expression>
<expression>
=
SOME
<>
<
ANY
>
ALL
<table_subquery>
<=
>=
BETWEEN
<expression>
<expression>
AND
<expression>
NOT
<expression>
IS
NULL
NOT
<expression>
LIKE
<string_expression>
NOT
ESCAPE <string_expression>
EXISTS
<table_subquery>
NOT
<expression>
<table_subquery>
IN
NOT
,
(
<constant>
)
ヒント : 式 (expression) には、文字、日付時間、数値のいずれも使用できますが、
複数の式を 1 つの条件に指定する場合は、比較可能なデータ型である必要がありま
す。
3-10
SQL Reference Guide
比較述部
比較述部
比較述部は、2 つの値の論理的関係を表しており、指定した行に対し、真、偽、不
定のいずれかを評価します。次に比較述部を使った条件の構文ダイアグラムを示し
ます。
<expression>
=
<expression>
<>
SOME
<
ANY
>
ALL
<table_subquery>
<=
>=
<expression>
式には、文字、日付時間、数値が使用できますが、比較可能な
データ型である必要があります。式の値が NULL の場合やサブ
クエリの戻り値が NULL の場合、その条件は不定と評価されま
す。
スカラ サブクエリは式に使用できますが、行サブクエリとテー
ブル サブクエリは使用できません。
SOME、ANY、ALL 数量述部は、テーブル サブクエリの戻り値と式を比較します。
<table_subquery>
サブクエリは複数の行を選択できますが、検索項目リストの列
数は 1 つに制限されます。
SOME 数量述部と ANY 数量述部は、シノニムです。SOME ま
たは ANY で表した比較は、サブクエリが返した値の中に指定
条件を満たす値が 1 つ以上あれば真と評価されます。ALL で表
した比較は、サブクエリが返したすべての値について、比較条
件が真の場合に真と評価されます。
戻り値がなければ、SOME や ANY を使った比較は偽と評価さ
れ、ALL を使った比較は真と評価されます。
式と条件
3-11
BETWEEN 述部
例
次の条件は、Dollars 列の値が 100 以上の場合は真になります。
dollars >= 100
次の条件は、Hot_Products テーブルの製品に、同じ Brand のものが 1 つでもあれば
真になります。
brand = any
(select product from hot_products)
次の条件は、Dollars 列の各値が San Jose におけるどの売上よりも大きければ真にな
ります。サブクエリの戻り値がない、つまり San Francisco の売上がない場合も、真
になります。これは Dollars 列の値がいずれも 0 以上であるためです。
dollars >= all
(select dollars from store join sales
on store.storekey = sales.storekey
where city = 'San Jose')
SOME および ALL 述部の詳細は、『SQL Self-Study Guide』を参照してください。
BETWEEN 述部
BETWEEN 述部は、ある値が指定した範囲にあるかどうかを評価します。次に
BETWEEN 述部を使った条件の構文ダイアグラムを示します。
<expression>
BETWEEN
<expression>
AND
<expression>
NOT
<expression>
式には、文字、日付時間、数値が使用できますが、比較可能なデー
タ型である必要があります。
BETWEEN 述部の最初の <expression> は小さい方の値、2 番目の
<expression> は大きい方の値である必要があります。たとえば、次
の条件は常に偽と評価されます。
between 12 and 1
BETWEEN
x between y and z この条件は、次と同義です。
(x >=y) and (x<=z)
NOT BETWEENx not between y and z この条件は、次と同義です。
(x<y) OR (x>z)
3-12
SQL Reference Guide
EXISTS 述部
例
次の条件は、Dollars 列の値の中で、200 以上 500 以下の値について真になります。
dollars between 200 and 500
次の条件は、Dollars 列の値の中で、200 未満か、500 より大きい値について真にな
ります。
(dollars not between 200 and 500)
EXISTS 述部
EXISTS 述部は、サブクエリの戻り値が 1 行以上あれば真と評価されます。NOT を
指定すると、サブクエリの戻り値が 1 行もない場合に真と評価されます。次に
EXISTS 述部を使った条件の構文ダイアグラムを示します。
EXISTS
<table_subquery>
NOT
<table_subquery>
結果が 1 つ以上の列と 1 つ以上の行を持つテーブルとなるサブ
クエリ。
例
次の条件は、サブクエリの戻り値が 1 行以上あれば真になります。
exists (select prod_name from store
where population > 5000}
次の条件は、サブクエリの戻り値が 1 行もなければ真になります。
not exists (select prod_name from store
where population > 5000)
次のクエリは、サブクエリの戻り値が 1 行以上あれば、Deal テーブルのすべての行
を返します。
select * from deal
where exists
(select dealkey, discount from deal
union
select promokey, value from promotion);
EXISTS 述部の詳細は、『SQL Self-Study Guide』を参照してください。
式と条件 3-13
IN 述部
IN 述部
IN 述部は、列の値を複数の値と比較します。次に IN 述部を使った条件の構文ダイ
アグラムを示します。
<expression>
IN
<table_subquery>
NOT
,
(
<constant>
)
<expression>
文字、日付時間、数値が使用できますが、<constant> または
<row_subquery> の戻り値と比較可能なデータ型である必要があ
ります。
<table_subquery>
結果が 1 つ以上の行を持つテーブルとなるサブクエリ。ただし、
このクエリの検索項目リストには、1 つの列しか指定できませ
ん。
例
■
次の条件は、1000、10000、100000 のいずれか 1 つと等しい値について真
になります。
quantity in (1000, 10000, 100000)
■
次の条件は、1000、10000、100000 のいずれとも等しくない値について真
になります。
quantity not in (1000, 10000, 100000)
■
次の条件は、JAN、FEB、MAR のいずれか 1 つと等しい月について真にな
ります。
month in ('JAN', 'FEB', 'MAR')
■
次の条件は、Hot_Products テーブルの Product の値と等しい製品について
真になります。
product in (select product from hot_products)
3-14
SQL Reference Guide
IS NULL 述部
IS NULL 述部
IS NULL 述部は、列に値の欠落があるかどうかを判定します。次に IS NULL 述部を
使った条件の構文ダイアグラムを示します。
<column_name>
IS
NULL
NOT
IS NULL
列の値が欠落していれば真、値が存在していれば偽と評価されま
す。
IS NOT NULL 列の値が欠落していれば偽、値が存在していれば真と評価されま
す。
例
次の条件は、Product 列値が欠落していれば真になります。
product is null
次の条件は、Product 列値が欠落していれば偽になります。
product is not null
式と条件 3-15
LIKE 述部
LIKE 述部
LIKE 述部は、列の値を、指定した文字列定数、式、またはパーセント (%) と下線記
号 (_) のワイルドカード文字を使った文字パターンと比較します。次に LIKE 述部を
使った条件の構文ダイアグラムを示します。
<expression>
LIKE
<string_expression>
NOT
<expression>
ESCAPE <string_expression>
LIKE 述部を使った式に指定する列は、文字データ型である必
要があります。数値や日付時間のデータ型を格納する列は指定
できません。
<string_expression> <expression> の値と比較する文字列定数または文字列式を指定
します。
ESCAPE
1 文字の <string_expression> をエスケープ文字として指定し、ワ
イルドカードを制御文字ではなく文字定数または式として扱え
るようにします。ESCAPE キーワードは、照合する文字パター
ン自体にパーセントや下線記号が含まれている場合 (「例」の
最後の例を参照 ) に使用します。
ESCAPE <string_expression> の評価結果は、シングルバイトまた
はマルチバイトの 1 文字からなる文字列である必要がありま
す。
ワイルドカード文字
パーセント (%) のワイルドカード文字は、任意の文字列を意味します。下線記号 (_)
のワイルドカード文字は、任意の 1 文字を意味します。これらのワイルドカード
は、シングルバイトの ASCII 文字で指定します。マルチバイトの下線文字やパーセ
ント文字を使用すると、リテラル値とみなされます。
3-16
SQL Reference Guide
検索条件
例
city like '%ville'
City 列の文字列で、ville で終わるものはすべて真になります。この例で
は、末尾に空白がある文字列は真になりません。
city like '%son%'
City 列の文字列で、son を含むものはすべて真になります。
city like 'San%'
City 列の文字列で、San で始まるものはすべて真になります。
prod_name like '_EE%'
Product の文字列で、2 番目と 3 番目の文字が EE のものはすべて真になり
ます。
prod_name like '%LE_N%'
Product の文字列で、指定したパターンを含むものはすべて真になります。
CLEAN、KLEEN、EXCEPTIONALLY KLEEN は、いずれもこのパターンに
一致します。
sales_pct like '%Monthly ¥%' escape '¥'
Monthly % で終わる文字列は、すべて真になります。
検索条件
検索条件は、真、偽、不定のいずれかを評価する論理条件を指定するものです。論
理接続詞を使うと、基本条件を組み合わせた複合検索条件を指定することができま
す。条件は、かっこを使ってグループ分けすることができます。次に検索条件の構
文ダイアグラムを示します。
AND
OR
<condition>
NOT
式と条件 3-17
検索条件
評価結果
複合検索条件の値は、条件を構成する要素の値で決まります。複合検索条件の評価
結果は次のようになります。
C1
C2
C1 AND C2
C1 OR C2
NOT C2
真
真
真
真
偽
真
偽
偽
真
真
真
不定
不定
真
不定
偽
真
偽
真
偽
偽
偽
偽
偽
不定
偽
不定
不定
真
不定
真
不定
偽
偽
不定
不定
不定
不定
不定
評価順
かっこで評価順を指定しないと、NOT 演算子は AND 演算子の前に評価され、AND
は OR の前に評価されます。
例
次の論理演算は、State 列の値が NY で、Year 列の値が 1999 である行を選択します。
state = 'NY' and year = 1999
次の論理演算は、State 列の値が NY または GA で、Year 列の値が 2000 である行を
選択します。
(state = 'NY' or state = 'GA') and year = 2000
3-18
SQL Reference Guide
第4章
集約関数
この章について .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4-3
一般的な使用方法 .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4-4
AVG .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4-5
COUNT .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4-7
MAX
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4-9
MIN .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4-10
SUM .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4-11
4-2 SQL Reference Guide
この章について
集約関数は、1 つまたは複数の値を 1 つの値に集約した結果を返します。たとえば
次の式は、Dollars 列の値を合計します。
sum(dollars)
IBM Red Brick Warehouse は、次の集約関数をサポートします。この章では、各関数
をアルファベット順に説明します。
機能
説明
AVG
平均値
COUNT
該当する行数
MAX
最大値
MIN
最小値
SUM
合計値
サーバでは、データの一部のパーティションに対して集約値を計算する OLAP 集約
関数もサポートされています。これらの関数の構文は、第 6 章「分析関数」を参照
してください。
集約関数
4-3
一般的な使用方法
一般的な使用方法
集約関数は、ANSI SQL-92 標準に定義されています。値の集合に対する演算を行う
ので集合関数と呼ばれたり、値のグループを対象とするので グループ関数と呼ばれ
たり、列の値を処理するので列関数呼ばれることもあります。
集約関数は、検索項目リストまたは HAVING 句で使用することができます。1 つの
式には、1 つの集約関数しか使用できません。集約関数を入れ子にする、つまり集
約関数の中で集約関数を使用することはできません。たとえば、次の検索項目リス
トはエラーになります。
select max(avg(salary))
集約関数は、WHERE 句の検索条件では使用できません。
OLAP 関数と RISQL 表示関数は、集約関数の引数としては使用できません。たとえ
ば、次の式はエラーになります。
sum(rank() over(order by dollars)
sum(rank(dollars))
ただし、RISQL 表示関数の引数として集約関数を使用することは可能です。次の式
は有効です。
rank() over(order by sum(dollars))
rank(sum(dollars))
クエリに集約関数を使用する場合に必要なグループ分けの条件は、7-39 ページ
「GROUP BY 句」を参照してください。
IBM Red Brick Vista を使用して、集約関数を使ったクエリの性能を高速化する方法
の詳細は、『IBM Red Brick Vista User’s Guide』を参照してください。
4-4
SQL Reference Guide
AVG
AVG
AVG 関数は、指定した値集合の平均値を返します。
構文
次に AVG 関数を使った式の構文ダイアグラムを示します。
AVG
(
<n_expression>
)
ALL
DISTINCT
<n_expression> 数値です。集約関数や表示関数を参照することはできません。
ALL
ALL キーワードは、<n_expression> の重複値を使用して、平均値を
計算します。ALL がデフォルトです。
DISTINCT
DISTINCT キーワードは、指定した式から重複値を削除してから、
平均値を計算します。
結果
指定した値集合が空でなければ、AVG は平均値を返します。空の場合は NULL を返
します。
<n_expression> が指数表現を用いないデータ型 (TINYINT、SMALLINT、INTEGER、
DECIMAL) の場合は、AVG の戻り値も指数表現を使用いないデータ型になります。
結果データ型の精度とスケールは、小数点より左の桁数はそのままで、小数点より
右の桁数が 6 桁増やされます。これは、AVG 関数の戻り値が非常に小さくなって
も、結果データ型の有効桁数に納まるようにするためです。
集約関数
4-5
AVG
次の表は、<n_expression> のデータ型に応じて AVG 関数が返すデータ型の一覧で
す。
<n_expression> のデータ型
結果のデータ型
TINYINT
DECIMAL(9,6)
SMALLINT
DECIMAL(11,6)
INTEGER
DECIMAL(16,6)
SERIAL
DECIMAL(16,6)
DECIMAL
NUMERIC
DECIMAL(p,s)
p = min(38, <n_expression> の精度 +6)
s = min(6, 38 - <n_expression> の精度 )
REAL
REAL
FLOAT
DOUBLE PRECISION
FLOAT
DOUBLE PRECISION
例
次のクエリは、Demitasse MS の日別売上合計の平均値を返します。
select avg(dollars) as sales_avg
from sales join product on sales.classkey = product.classkey
and sales.prodkey = product.prodkey
where prod_name = 'Demitasse Ms';
SALES_AVG
204.29551820
4-6
SQL Reference Guide
COUNT
COUNT
COUNT 関数は、検索した行の行数を返します。
構文
次に COUNT 関数を使った式の構文ダイアグラムを示します。
COUNT
<expression>
(
)
ALL
DISTINCT
*
ALL
列名を <expression> に指定し、列名の前に ALL キーワードを指定す
る ( またはキーワードを何も指定しない ) と、指定した列に値を持
つ行数が返されます。値が欠落している (NULL 値 ) 行は、カウント
されません。
DISTINCT
列名を <expression> に指定し、列名の前に DISTINCT キーワードを
指定すると、指定した列に重複値を持つ行を除外してカウントが行
われます。値が欠落している (NULL 値 ) 行は、カウントされませ
ん。
<expression>
<expression> が列名の場合、指定した列に値が存在する行数が返さ
れます。値が欠落している (NULL 値 ) 行は、カウントされません。
<expression> で、集約関数や表示関数を参照することはできません。
*
引数がアスタリスク (*) の場合、行集合の行数 ( 空集合の場合は 0)
が返されます。この関数は、「カウント スター」関数とも呼ばれま
す。NULL 値を含む行もカウントされます。
結果
COUNT 関数は、負でない整数を返します。NULL を返すことはありません。
集約関数
4-7
COUNT
例
次のクエリは、Product テーブルの製品数をカウントします。
select count(prod_name) as prod_count
from product
PROD_COUNT
59
次のクエリは、Product テーブルの一意な製品名をカウントします。
select count(distinct prod_name) as prod_count
from product
PROD_COUNT
38
ヒント : 2 番目の例は、製品数ではなく、固有の製品名をカウントします。Aroma
データベースのコーヒーと紅茶製品は、計り売りとパッケージ入りの製品名が同じ
ため、一意な製品数の方が少なくなります。
4-8
SQL Reference Guide
MAX
MAX
MAX 関数は、指定した値集合の最大値を返します。
構文
次に MAX 関数を使った式の構文ダイアグラムを示します。
MAX
(
<expression>
)
ALL
DISTINCT
<expression>
集約関数や表示関数を参照することはできません。
ALL
指定した値集合に重複値を残しますが、結果には影響がありませ
ん。
DISTINCT
指定した値集合から重複値を除外しますが、結果には影響がありま
せん。
結果
指定した値集合が空でなければ、MAX は最大値を返します。空の場合は NULL を返
します。
例
次のクエリは、Coffee Sampler 製品の売上について、dollars 列と quantity 列 ( 日別合
計 ) の最大値を返します。
select max(dollars) as max_dol, max(quantity) as max_qty
from product natural join sales
where prod_name = 'Coffee Sampler'
MAX_DOL
MAX_QTY
570.00
19
集約関数
4-9
MIN
MIN
MIN 関数は、指定した値集合の最小値を返します。
関数
次に MIN 関数を使った式の構文ダイアグラムを示します。
MIN
(
<expression>
)
ALL
DISTINCT
<expression>
集約関数や表示関数を参照することはできません。
ALL
指定した値集合に重複値を残しますが、結果には影響がありませ
ん。
DISTINCT
指定した値集合から重複値を除外しますが、結果には影響がありま
せん。
結果
指定した値集合が空でなければ、MIN は最小値を返します。空の場合は NULL を返
します。
例
次のクエリは、East Coast Roast 店の売上について、dollars 列と quantity 列 ( 日別合計 )
の最小値を返します。
select min(dollars) as min_dol, min(quantity) as min_qty
from store natural join sales
where store_name = 'East Coast Roast'
MIN_DOL MIN_QTY
3.75 1
4-10
SQL Reference Guide
SUM
SUM
SUM 関数は、指定した値集合の合計値を計算します。
構文
次に SUM 関数を使った式の構文ダイアグラムを示します。
SUM
<n_expression>
(
)
ALL
DISTINCT
<n_expression> 数値です。集約関数や表示関数を参照することはできません。
ALL
重複値を使用して、合計値を計算します。ALL がデフォルトです。
DISTINCT
DISTINCT キーワードは、指定した式から重複値を削除してから、
合計値を計算します。
結果
指定した値集合が空でなければ、SUM は合計値を返します。空の場合は NULL を返
します。
<n_expression> が指数表現を用いないデータ型 (TINYINT、SMALLINT、INTEGER、
DECIMAL) の場合は、SUM の戻り値も指数表現を用いないデータ型になります。
結果データ型の精度は 6 桁増やされます。これは割り当てられた格納領域に納める
ためです。
集約関数
4-11
SUM
次の表は、<n_expression> のデータ型に応じて SUM 関数が返すデータ型の一覧で
す。
<n_expression> のデータ型
結果のデータ型
TINYINT
DECIMAL(9,0)
SMALLINT
DECIMAL(11,0)
INTEGER
DECIMAL(16,0)
SERIAL
DECIMAL(16,0)
DECIMAL
NUMERIC
DECIMAL(p,s)
p = min(38、<n_expression> の精度 +6)
s = <n_expression> のスケール
REAL
REAL
FLOAT
DOUBLE PRECISION
FLOAT
DOUBLE PRECISION
例
次のクエリは、パッケージ入り紅茶製品の売上を合計した値を返します。
select sum(dollars) as tea_dollars
from class natural join product
natural join sales
where class_type = 'Pkg_tea';
TEA_DOLLARS
510507.25
4-12
SQL Reference Guide
第5章
スカラ関数
この章について .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5-3
条件付きスカラ関数 . .
CASE . . . . . .
COALESCE . . . .
DECODE . . . . .
IFNULL . . . . .
NULLIF . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. .
. .
. .
. .
. .
. .
5-4
5-4
5-8
5-9
5-12
5-13
数値スカラ関数 . . . .
ABS . . . . . .
CEIL . . . . . .
DEC . . . . . .
EXP . . . . . .
FLOAT
. . . . .
FLOOR . . . . .
INT . . . . . . .
LN . . . . . . .
REAL . . . . . .
SIGN . . . . . .
SQRT . . . . . .
統計関数マクロ . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. .
. .
. .
. .
. .
. .
. .
. .
. .
. .
. .
. .
. .
5-15
5-16
5-17
5-19
5-21
5-22
5-23
5-25
5-27
5-28
5-29
5-30
5-31
文字列スカラ関数
CONCAT . .
LENGTH . .
LENGTHB .
LOWER . .
LTRIM . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. .
. .
. .
. .
. .
. .
5-34
5-35
5-36
5-38
5-39
5-40
. . .
. . .
. . .
. . .
. . .
. . .
POSITION
POSITIONB
RTRIM . .
STRING .
SUBSTR .
SUBSTRB .
TRIM . .
UPPER . .
.
.
.
.
.
.
.
.
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
.
.
.
.
.
.
.
.
5-42
5-44
5-45
5-47
5-50
5-52
5-54
5-56
日付時間スカラ関数 . . . . . . . . . . . . . . . .
日付時間スカラ関数の日付フィールド . . . . . . . .
CURRENT_DATE、CURRENT_TIME、CURRENT_TIMESTAMP
DATE . . . . . . . . . . . . . . . . . . . .
DATEADD . . . . . . . . . . . . . . . . . .
DATEDIFF . . . . . . . . . . . . . . . . . .
DATENAME . . . . . . . . . . . . . . . . . .
EXTRACT . . . . . . . . . . . . . . . . . .
TIME . . . . . . . . . . . . . . . . . . . .
TIMESTAMP . . . . . . . . . . . . . . . . . .
TO_CHAR . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5-58
5-58
5-60
5-61
5-62
5-63
5-64
5-66
5-68
5-69
5-70
CURRENT_USER 関数
.
.
5-73
5-2 SQL Reference Guide
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
この章について
RISQL 拡張機能には、1 行ずつ式を処理するスカラ関数が組み込まれています。ス
カラ関数は、多項式に使用したり、ほかのスカラ関数で入れ子にすることができま
す。第 6 章で説明する OLAP 関数および RISQL 表示関数も、スカラ関数の引数とし
て使用できます。
スカラ関数は、次のカテゴリに分類されます。この章では、各カテゴリについて説
明します。
■
■
■
■
■
条件付きスカラ関数
CASE、COALESCE、DECODE、IFNULL、NULLIF
CASE、COALESCE、NULLIF は ANSI SQL-92 標準に定義されています。
数値スカラ関数
ABS、CEIL、DEC、EXP、FLOAT、FLOOR、INT、LN、SIGN、SQRT
文字列スカラ関数
CONCAT、LENGTH、LENGTHB、LOWER、LTRIM、POSITION、
POSITIONB、RTRIM、STRING、SUBSTR、SUBSTRB、TRIM、UPPER
日付時間スカラ関数
CURRENT_DATE、CURRENT_TIME、CURRENT_TIMESTAMP、DATE、
DATEADD、DATEDIFF、DATENAME、EXTRACT、TIME、TIMESTAMP、
TO_CHAR
CURRENT_USER 関数 : 情報スカラ関数
ヒント : クエリで 0 を除数に使用した場合、エラーと NULL のどちらが返されるか
は、ARITHIGNORE オプションの設定で決まります。ARITHIGNORE は、rbw.config
ファイルの OPTION ARITHIGNORE を使ってサーバ レベルで設定するか、SET
ARITHIGNORE 文を使ってセッションごとに設定することができます (9-8 ページ )。
スカラ関数
5-3
条件付きスカラ関数
条件付きスカラ関数
条件付きスカラ関数は次のとおりです。各関数の戻り値は、関数の引数が条件を満
たすかどうかによって決まります。
条件付きスカラ関
数
説明
CASE
指定した条件のどれに合致しているかに応じて値を返しま
す。
COALESCE
指定した値のうち、NULL でない最初の値を返します。
DECODE
対象の値に応じて、値を置き換えます。
IFNULL
NULL が存在するかどうかを判定し、値を返します。
NULLIF
2 つの値を比較し、等しい場合は NULL を返します。
CASE
CASE 式は、指定した条件のどれに合致しているかに応じて値を返します。
構文
CASE 式にはシンプル形式とサーチ形式の 2 つがあります。
シンプル形式の CASE 式では、WHEN 句の前に最初の <expression> を指定します。
WHEN 句には、任意の数の <expression> と、それに対応する <result> を指定します。
サーチ形式の CASE 式では、WHEN 句に任意の数の <search_conditions> と、各
<search_conditions> に対応する <result> を指定します。
次に両タイプの CASE 式の構文ダイアグラムを示します。上の WHEN 句はシンプル
形式の CASE 式で、下の WHEN 句はサーチ形式の CASE 式です。
5-4
SQL Reference Guide
CASE
CASE
WHEN
<expression>
WHEN
<expression>
<search_condition>
THEN
<result>
THEN
<result>
END
ELSE
<result>
<expression>
データ型の異なる <expression> を比較する場合は、正しい暗黙
的な変換が行える必要があります。<expression> のデータ型を
変換する規則は、7-45 ページの 「UNION、INTERSECT、
EXCEPT 演算子」に示す規則と同じです。
<result>
任意の式。データ型の異なる <result> がある場合は、正しい暗
黙的な変換が行える必要があります。<result> のデータ型を変
換する規則は、7-45 ページの 「UNION、INTERSECT、
EXCEPT 演算子」に示す規則と同じです。<result> のデータ型
は <expression> のデータ型と同じでなくてもかまいません。
<result> には、NULL を指定することもできます。ただし、
THEN 句または ELSE 句に NULL でない <result> を最低 1 つ指定
し、CASE 式の戻り値が不定にならないようにしてください。
<search_condition>
真、偽、または不定を評価する倫理条件を指定します。検索条
件の構文は 3-17 ページ「検索条件」を参照してください。
スカラ関数
5-5
CASE
結果
シンプル形式の CASE 式は、WHEN 句に指定した各 <expression> の値を最初の
<expression> の値と比較します。WHEN 句の <expression> は、指定した順に評価さ
れます。比較した結果が等しければ、それに応じた <result> が返され、処理が終了
します。
サーチ形式の CASE 式は、<search_condition> を指定した順に評価します。検索条件
が真と評価されれば、それに応じた <result> が返され、処理が終了します。
シンプル形式、サーチ形式のどちらも、WHEN 句の条件が 1 つも満たされなけれ
ば、ELSE 句に指定した <result> の値を返します。ELSE 句を指定しなかった場合の
デフォルトの戻り値は NULL です。
使用上の注意
シンプル形式の CASE 式は、機能的には DECODE 関数と同じですが、ANSI SQL-92
標準に準拠している CASE を使用することをお勧めします。
シンプル形式の CASE 式はサーチ形式でも表現できますが、最初の <expression> を
1 度しか評価しないという最適化が図られます。シンプル形式の CASE 式の方が高
速になるため、シンプル形式を使用することをお勧めします。
例
次のクエリは、クエリから返される四半期の値をわかりやすい文字列に置き換える
シンプル形式の CASE 式の例です。
select case qtr
when 'Q1_98' then '1st Quarter'
when 'Q2_98' then '2nd Quarter'
when 'Q3_98' then '3rd Quarter'
when 'Q4_98' then '4th Quarter'
end as Period,
sum (dollars) as results
from sales natural join period
where year = 1998
group by qtr
PERIOD
1st Quarter
2nd Quarter
3rd Quarter
4th Quarter
5-6
SQL Reference Guide
RESULTS
723532.35
756282.05
778795.20
782359.05
CASE
次のクエリは、1 つの列 (Dollars) について 2 種類の合計値を返すサーチ形式の
CASE 式の例です。
select year,
sum (case when region = 'West' then dollars else 0 end)
as West_Region,
sum (case when ((region = 'Central') or (region = 'North')
or (region = 'South')) then dollars
else 0 end) as Other_Regions
from sales, store, market, period
where sales.perkey = period.perkey
and sales.storekey = store.storekey
and store.mktkey = market.mktkey
group by year
order by year
YEAR
1998
1999
2000
WEST_REGION
1164414.20
1195795.10
296379.45
OTHER_REGIONS
1876554.45
2084195.95
511010.95
CASE 式の例は、『SQL Self-Study Guide』を参照してください。
スカラ関数
5-7
COALESCE
COALESCE
COALESCE 関数は、NULL でない最初の引数の値を返します。
COALESCE 関数は、CASE 関数の特殊な用法の省略形として ANSI で定義されたも
のなので、CASE 関数で表すことができます。
構文
次に COALESCE 関数を使った式の構文ダイアグラムを示します。
,
COALESCE
(
<expression>
<expression>
,
<expression>
)
2 つの式のデータ型が異なる場合は、正しい暗黙的な変換が行える
必要があります。<expression> のデータ型を変換する規則は、
7-45 ページ に示す UNION 演算の規則と同じです。2 つ以上の式を
指定する必要があります。
結果
COALESCE 関数は各引数の値を指定した順に評価し、NULL でない最初の引数の値
を返します。すべての引数が NULL の場合は、NULL を返します。
例
次の COALESCE 式は、1 つの Date 列をリザルト セットに返します。
coalesce(orders.close_date, line_items.receive_date) as date
5-8
SQL Reference Guide
DECODE
DECODE
DECODE 関数は、式を比較してほかの値に変換します。
ヒント : シンプル形式の CASE 式は、DECODE 関数と機能的には同じですが、
ANSI SQL-92 標準に準拠している CASE を使用することをお勧めします。
構文
次に DECODE 関数を使った式の構文ダイアグラムを示します。
,
DECODE
(
<expression>
,
<target> ,
<replacement>
NULL,
)
, <default>
<expression>
任意のデータ型を指定できます。
<target>
第 1 引数 <expression> と同じデータ型にする必要があります。
<replacement> 任意のデータ型を指定できますが、すべてを同じデータ型にする必
要があります。
<default>
指定する場合は、<replacement> と同じデータ型にする必要がありま
す。
結果
<expression> が <target> と一致すれば、対応する <replacement> に置き換えられます。
一致しなければ、<default> に置き換えられます。<default> を指定しなかった場合
は、NULL が代入されます。
ヒント : 最初の <expression> に指定する値として、<default> を指定することもでき
ます。このように指定した場合、<expression> が <target> と一致しないときは、置き
換えられません。
<expression> が文字列の場合、結果の最大サイズは <replacement> の最大サイズにな
ります。<expression> が数値の場合、結果のデータ型は、精度が最大の
<replacement> と同じ精度になります。
値の欠落は、NULL ( 引用符なしの 4 文字リテラル ) を <target> に指定することで検
出できます。NULL に対応する <replacement> も指定してください。
スカラ関数
5-9
DECODE
例
次のクエリは、Los Angeles における製品別の総販売数量を返します。
select prod_name,
sum (decode (city, 'Los Angeles', dollars, 0.0)) as LA
from store sr, product pr, period pd, sales sl
where sl.storekey = sr.storekey
and sl.classkey = pr.classkey
and sl.prodkey = pr.prodkey
and sl.perkey = pd.perkey
and year = 1998
group by prod_name
PROD_NAME
Aroma Roma
Aroma Sheffield Steel Teapot
Aroma Sounds CD
Aroma Sounds Cassette
Aroma baseball cap
Aroma t-shirt
Assam Gold Blend
Assam Grade A
Breakfast Blend
Cafe Au Lait
Christmas Sampler
Coffee Mug
...
LA
1989
51
177
180
440
529
791
898
832
1339
4
39
city の値が Los Angeles であれば、対応する dollar の値が返されます。そうでなけれ
ば、0.0 が返されます。この DECODE 関数の例における構文の各要素の指定は、次
のとおりです。
■
■
■
■
5-10
city = <expression>
'Los Angeles' = <target>
dollars = <replacement>
0.0 = <default>
SQL Reference Guide
DECODE
次のクエリは、クエリから返される Quarter 列の値を記述的な文字列に変換します。
select decode(qtr,
'Q1_98', '1st Quarter',
'Q2_98', '2nd Quarter',
'Q3_98', '3rd Quarter',
'Q4_98', '4th Quarter') as Period,
sum(dollars) as results
from sales, period
where sales.perkey = period.perkey
and year = 1998
group by qtr
PERIOD
1st Quarter
2nd Quarter
3rd Quarter
4th Quarter
RESULTS
723532.35
756282.05
778795.20
782359.05
スカラ関数
5-11
IFNULL
IFNULL
IFNULL 関数は、式を評価して値の欠落の有無をチェックし、指定した値に置き換
えます。
IFNULL 関数は、COALESCE 関数の特殊な用法ですが、ANSI SQL-92 標準に準拠し
ている COALESCE を使用することをお勧めします。
構文
次に IFNULL 関数を使った式の構文ダイアグラムを示します。
IFNULL
(
<expression> ,<substitute>
)
<expression>
<expression> は、任意のデータ型です。
<substitute>
<expression> と比較可能なデータ型である必要があります。
<expression> 引数と <substitute> 引数のデータ型が異なる場合は、正
しい暗黙的な変換が行える必要があります。<expression> のデータ
型を変換する規則は 7-49 ページ「データ型の変換」に示す規則と同
じです。
結果
<expression> が NULL の場合は、<substitute> が返されます。NULL でない場合は、
<expression> の値が返されます。
<expression> と <substitute> のデータ型が同じ場合は、結果も同じデータ型になりま
す。<expression> と <substitute> のデータ型が異なる場合、結果は暗黙的な変換の
データ型になります。
例
■
■
5-12
ifnull(market, 'New City')- NULL を New City に置き換えます。
ifnull(dollars, 0.0) - Dollars 列の NULL を 0.0 に置き換えます。
SQL Reference Guide
NULLIF
NULLIF
NULLIF 関数は 2 つの式を比較し、値が等しい場合は NULL を返します。等しくな
ければ、最初の式の値が返されます。
構文
次に NULLIF 関数を使った式の構文ダイアグラムを示します。
NULLIF
(
<expression>,
<expression>
<expression>, <expression>
)
2 つの式のデータ型が異なる場合は、正しい暗黙的な変換が行える
必要があります。<expression> のデータ型を変換する規則は、
7-45 ページ に示す UNION 演算の規則と同じです。
結果
NULLIF 関数は、2 つの式の値が等しければ NULL を返します。等しくなければ、
最初の式の値を返します。
使用上の注意
NULLIF 関数を用いて除算を行うクエリで 0 を NULL に置き換えることで、0 で除算
が行われるのを避けることができます。これは、SET ARITHIGNORE 文を使って行
うこともできます。詳細は、9-8 ページ「SET ARITHIGNORE、ARITHABORT」を
参照してください。
スカラ関数 5-13
NULLIF
例
次のクエリは、City 列が San Jose でなければ City 列の値を返し、San Jose な
らば NULL を返します。
select prod_name,
nullif(city, 'San Jose') as not_SJ, sum(dollars) as totals
from sales sl, store st, product pr, class cl
where cl.classkey = pr.classkey
and sl.classkey = pr.classkey
and sl.prodkey = pr.prodkey
and sl.storekey = st.storekey
and class_type like 'Gifts%'
group by prod_name, city
order by prod_name
PROD_NAME
Aroma Sounds CD
Aroma Sounds CD
Aroma Sounds CD
Aroma Sounds CD
Aroma Sounds Cassette
Aroma Sounds Cassette
Aroma Sounds Cassette
Aroma Sounds Cassette
Christmas Sampler
Christmas Sampler
Christmas Sampler
Christmas Sampler
...
5-14
SQL Reference Guide
NOT_SJ
Miami
NULL
Atlanta
Los Angeles
Los Angeles
NULL
Atlanta
Miami
Atlanta
Los Angeles
NULL
Miami
TOTALS
2883.00
4480.00
4329.00
4087.00
2786.50
2795.50
2640.00
3420.50
210.00
270.00
1140.00
300.00
数値スカラ関数
数値スカラ関数
数値スカラ関数は、数値表現式か、数値を表す文字式を処理します。数値スカラ関
数は次のとおりです。
数値スカラ関数
説明
ABS
数値表現式の絶対値を返します。
CEIL
数値表現式の値を下回らない最小の整数値を返します。
DEC
文字または数値データ型を DECIMAL 型に変換します。
EXP
関数引数の指数値を返します。つまり、EXP(x) は ex=y とな
る y の値を返します (e = 2.71828183)。
FLOAT
文字または数値データ型を FLOAT 型に変換します。
FLOOR
数値表現式の値を上回らない最大の整数値を返します。
INT
文字または数値データ型を INTEGER 型に変換します。
LN
関数引数の自然対数を返します。つまり、LN(y) は ex=y とな
る x の値を返します (e=2.71828183)。
REAL
指定した値を REAL データ型に変換します。
SIGN
数値表現式の符号を返します。
SQRT
関数引数の平方根を返します。
スカラ関数 5-15
ABS
ABS
ABS 関数は、数値表現式の絶対値を返します。
構文
次に ABS 関数を使った式の構文ダイアグラムを示します。
ABS
(
<expression>
<expression>
)
数値データ型または文字データ型を使用できます。文字列式の場合
は、数値を表す式である必要があります。
'19.2'- 有効
'RAJ'- 無効
結果
引数のデータ型が、REAL、FLOAT、DOUBLE PRECISION、DECIMAL、NUMERIC
のいずれかである場合は、入力したデータ型で絶対値を計算して返します。
引数のデータ型が、INTEGER、SMALLINT、TINYINT の場合は、絶対値を計算し
て整数で返します。
引数が数値を表す文字列である場合は、その値を倍精度の浮動小数点数値に変換し
て絶対値を計算し、倍精度の浮動小数点数値で返します。数値を表さない文字列の
場合は、エラーになります。引数が NULL の場合は、NULL が返されます。
例
次のクエリは、DECIMAL 型の列 (numvalue) の絶対値を抽出し、文字データ型の列
(stringnum) の絶対値に加算します。
select numvalue, stringnum, (abs(numvalue) + abs(stringnum))
as total from table_1
numvalue
-9.45
-2.05
5-16
SQL Reference Guide
stringnum
total
8.30
17.75
-8.05
10.10
CEIL
CEIL
CEIL 関数は、引数の値を下回らない最小の整数値を返します。
構文
次に CEIL 関数を使った式の構文ダイアグラムを示します。
CEIL
<expression>
(
<expression>
)
数値データ型または文字データ型の式を使用できます。文字列式の
場合は、数値を表す式である必要があります。
'19.2'- 有効
'RAJ'- 無効
結果
引数のデータ型が、REAL、FLOAT、DOUBLE PRECISION、DECIMAL、NUMERIC
の場合は、入力したデータ型で CEIL を計算して返します。
引数のデータ型が、INTEGER、SMALLINT、TINYINT の場合は、入力したデータ
型を変えずに引数の値をそのまま返します。
引数が数値を表す文字列の場合は、その値を倍精度の浮動小数点数値に変換して
CEIL を計算し、倍精度の浮動小数点数値で返します。数値を表さない文字列の場
合は、エラーになります。
引数が NULL の場合は、NULL が返されます。
スカラ関数 5-17
CEIL
例
次のクエリは、品目別価格を算出し、CEIL 関数を使ってそれを下回らない最小の
整数値に切り上げます。
select distinct prod_name, store_name,
ceil(dollars/quantity) as price
from product natural join sales natural join period
natural join store
where year = 2000
and month = 'MAR'
and prod_name like 'Xalapa Lapa%'
5-18
prod_name
store_name
price
Xalapa
Xalapa
Xalapa
Xalapa
Xalapa
Xalapa
Xalapa
Xalapa
Xalapa
Xalapa
Xalapa
Xalapa
Xalapa
Xalapa
Xalapa
Xalapa
Xalapa
Xalapa
Xalapa
Xalapa
Xalapa
Beaches Brew
Beans of Boston
Coffee Brewers
Coffee Connection
Cupertino Coffee Supply
East Coast Roast
Instant Coffee
Instant Coffee
Instant Coffee
Java Judy’s
Miami Espresso
Minnesota Roaster
Minnesota Roaster
Moon Pennies
Moroccan Moods
Moulin Rouge Roasting
Olympic Coffee Company
Roasters, Los Gatos
San Jose Roasting Company
Texas Teahouse
The Coffee Club
9
9
9
9
9
9
7
8
9
9
9
8
9
9
9
9
9
9
9
9
9
SQL Reference Guide
Lapa
Lapa
Lapa
Lapa
Lapa
Lapa
Lapa
Lapa
Lapa
Lapa
Lapa
Lapa
Lapa
Lapa
Lapa
Lapa
Lapa
Lapa
Lapa
Lapa
Lapa
DEC
DEC
DEC 関数は、指定した値を DECIMAL データ型の値に変換します。
構文
次に DEC 関数を使った式の構文ダイアグラムを示します。
DEC
(
<expression>
)
, <precision>
DECIMAL
, <scale>
<expression>
数値データ型または文字データ型の式を使用できますが、数値を表
す式である必要があります。
'19.2'- 有効
'RAJ'- 無効
<precision>
変換後の DECIMAL 値の精度を指定します。指定できる範囲は 1 ∼
38 です。デフォルトは 9 です。
<scale>
変換後の DECIMAL 値のスケールを指定します。指定できる範囲
は、0 から <precision> に指定した値までです。デフォルトは 0 です。
結果
この関数は 10 進数 (DECIMAL ) 型 (<precision>、<scale>) で指定した値を返します。
引数が NULL のときは NULL を返します。数値を表す CHARACTER または
VARCHAR データ型の式を引数として指定した場合は、DECIMAL データ型に変換
されます。数値を表さない式の場合は、エラーになります。
<expression> に指定した値が大きすぎるために、有効桁 ( 小数点より左の桁 ) を切り
捨てないと DECIMAL (<precision>、<scale>) で表現できない場合は、"out of range
( 有効範囲外 )" エラーになります。小数点より右の桁を切り捨てないと、指定した
DECIMAL (<precision>、<scale>) データ型で表現できない場合は、エラーになりま
せん。
スカラ関数 5-19
DEC
例
次の式は、10 進数値 40000.00 を返します。
DEC('40E3',7,2)
SELECT 文での DEC 関数の例は、『SQL Self-Study Guide』を参照してください。
5-20
SQL Reference Guide
EXP
EXP
EXP 関数は、関数引数の指数値を返します。つまり、EXP (x) は ex=y となる y の値
を返します (e = 2.71828183)。
構文
次に EXP 関数を使った式の構文ダイアグラムを示します。
EXP
<expression>
(
<expression>
)
<expression> のデータ型は数値を表すものである必要があります。
'19.2'- 有効
-8.634E2- 有効
'RAJ'- 無効
結果
この関数は DOUBLE PRECISION 型の値を返します。
<expression> のデータ型が TINYINT、SMALLINT、INTEGER、REAL、FLOAT、
DECIMAL、NUMERIC のいずれかである場合は DOUBLE PRECISION 型に変換され
ます。
<expression> のデータ型が、数値を表す CHARACTER または VARCHAR 式の場合
は、EXP 関数は、この値を倍精度の浮動小数点数値に変換し、指数値を計算し、倍
精度の指数値として返します。文字列が数値を表していない場合はサーバがエラー
メッセージを返します。引数が NULL のときは NULL を返します。
結果がオーバーフローして、DOUBLE PRECISION データ型で表現できない場合は、
エラーになります。
例
次の式は、e の 2 乗である 7.389056 を返します (e = 2.71828183)。
EXP(2.0)
スカラ関数 5-21
FLOAT
FLOAT
FLOAT 関数は、指定した値を倍精度の浮動小数点数値に変換します。
構文
次に FLOAT 関数を使った式の構文ダイアグラムを示します。
FLOAT
<expression>
(
<expression>
)
数値データ型または文字データ型の式を使用できますが、数値を表
す式である必要があります。
'19.2'- 有効
'RAJ'- 無効
結果
この関数は DOUBLE PRECISION 型の値を返します。引数が NULL のときは NULL
を返します。
数値を表す CHARACTER または VARCHAR データ型の式を引数として指定した場
合は、浮動小数点数値に変換されます。または数値を表さない式の場合は、エラー
になります。
引数のデータ型が TINYINT、SMALLINT、INTEGER、REAL、FLOAT、DECIMAL、
NUMERIC のいずれかである場合は DOUBLE PRECISION 型に変換されます。
結果がオーバーフローして、DOUBLE PRECISION データ型で表現できない場合は、
エラーになります。
ヒント : 浮動小数点数値のリザルト セット内での表示方法は、クライアント ツー
ルのフォーマット設定機能によって異なります。たとえば、RISQL Reporter のユー
ザは SET COLUMN <column_name> FORMAT 文を使用して、表示フォーマットを
EXPONENTIAL に設定することができます。
例
次の例は、指数表記が指定された場合、浮動小数点値 -1.969893967E+07 を返します。
float('-19698939.67')
5-22
SQL Reference Guide
FLOOR
FLOOR
FLOOR 関数は、引数の値を上回らない最大の整数値を返します。
構文
次に FLOOR 関数を使った式の構文ダイアグラムを示します。
FLOOR
<expression>
(
<expression>
)
数値データ型または文字データ型の式を使用できますが、数値を表
す式である必要があります。
'19.2'- 有効
'RAJ'- 無効
結果
引数のデータ型が、REAL、FLOAT、DOUBLE PRECISION、DECIMAL、NUMERIC
の場合は、入力したデータ型で FLOOR を計算して返します。
引数のデータ型が、INTEGER、SMALLINT、TINYINT の場合は、入力したデータ
型を変えずに引数の値をそのまま返します。
引数が数値を表す文字列の場合は、その値を倍精度の浮動小数点数値に変換して
FLOOR を計算し、倍精度の浮動小数点数値で返します。数値を表さない文字列の
場合は、エラーになります。
引数が NULL の場合は、NULL が返されます。
スカラ関数 5-23
FLOOR
例
次のクエリは、品目別価格を算出し、それを上回らない最大の整数値に切り捨てます。
select prod_name, store_name,
floor(dollars/quantity) as price
from product natural join sales natural join period
natural join store
where date = '03-31-2000'
and prod_name like 'Xalapa Lapa%'
PROD_NAME
Xalapa Lapa
Xalapa Lapa
5-24
SQL Reference Guide
STORE_NAME
Instant Coffee
Moroccan Moods
PRICE
8
9
INT
INT
INT 関数は、指定した数値列を整数値に変換します。
構文
次に INT 関数を使った式の構文ダイアグラムを示します。
INT
(
( <expression>
)
INTEGER
<expression>
数値データ型または文字データ型の式を使用できますが、数値を表
す式である必要があります。
'19.2'- 有効
'RAJ'- 無効
結果
INT 関数は、INTEGER データ型の値を返します。引数が NULL のときは NULL を返
します。算出値の長さが INTEGER データ型の長さを超える場合は、「out of range
( 有効範囲外 )」エラーになります。
引数が数値を表す文字列の場合は、整数に変換されます。数値を表さない式の場合
は、エラーになります。
引数が TINYINT データ型または SMALLINT データ型の値の場合は、先頭に空白を
充填した整数が返されます。
引数の値が小桁実数 (REAL) 型、実数 (FLOAT) 型、実数 (DOUBLE PRECISION) 型、
10 進数 (DECIMAL) 型、10 進数 (NUMERIC) 型の場合は、スケールが切り捨てられ
ます。切り捨て値の長さが INTEGER データ型の長さを超える場合は、
「out of range
( 有効範囲外 )」エラーになります。
例
次の式は、整数 197 を返します。
int('197.665')
スカラ関数 5-25
INT
次のクエリは、dollars 列の値から小数点以下の桁を削除します。
select int(dollars) as no_cents
from sales join product using (classkey, prodkey)
join period using (perkey)
where prod_name like 'Vera%'
and month = 'FEB'
and year = 2000
NO_CENTS
88
96
72
48
144
48
64
...
次のクエリは、RISQL 表示関数 (CUME) 内で入れ子にされた INT 関数の例です。
select cume(int(price)) as price, line_item
from line_items
where order_no = 3600
order by line_item
PRICE
180
480
720
960
1200
LINE_ITEM
1
2
3
4
5
RISQL 表示関数および OLAP 関数を、スカラ関数で入れ子にすることもできます。
たとえば、次のようになります。
select int(cume(price)) as price, line_item
from line_items
where order_no = 3600
order by line_item
5-26
SQL Reference Guide
LN
LN
LN 関数は、関数引数の自然対数を返します。つまり、LN (y) は ex=y となる x の値を
返します (e= 2.71828183)。
構文
次に LN 関数を使った式の構文ダイアグラムを示します。
LN
<expression>
(
( <expression>
)
データ型は数値を表すものである必要があります。
'19.2'- 有効
'RAJ'- 無効
結果
この関数は DOUBLE PRECISION 型の値を返します。引数が NULL のときは NULL
を返します。算出値の長さが DOUBLE PRECISION データ型の長さを超える場合は、
「out of range ( 有効範囲外 )」エラーになります。
引数の値のデータ型が TINYINT、SMALLINT、INTEGER、REAL、FLOAT、
DECIMAL、NUMERIC のいずれかである場合は DOUBLE PRECISION 型に変換され
ます。
引数が 0 または負のときの動作は、ゼロ除算処理と同様、ARITHIGNORE または
ARITHABORT の設定に従います。ARITHIGNORE が on ( または ARITHABORT が
off) の場合、負の引数の LN を算出した結果として、サーバは NULL を返します。
ARITHIGNORE が off ( または ARITHABORT が on) の場合、サーバはエラーメッ
セージを生成します。ARITHIGNORE および ARITHABORT の設定の詳細は、
9-8 ページを参照してください。
引数が正の数を表す文字式のときは、それを倍精度の浮動小数点数に変換します。
それ以外の場合は、サーバがエラーメッセージを返します。
例
次の式は、3.22 を返します (e3.22 = 25; e = 2.71828183)。
ln(25.0)
スカラ関数 5-27
REAL
REAL
REAL 関数は、指定した値を REAL データ型の値に変換します。
構文
次に REAL 関数を使った式の構文ダイアグラムを示します。
REAL
<expression>
(
<expression>
)
数値データ型または文字データ型の式を使用できますが、数値を表
す式である必要があります。
'19.2'- 有効
'RAJ'- 無効
結果
REAL 関数は、REAL データ型の値を返します。引数が NULL のときは NULL を返
します。
数値を表す CHARACTER または VARCHAR データ型の式を引数として指定した場
合は、REAL 型に変換されます。または数値を表さない式の場合は、エラーになり
ます。
引数のデータ型が TINYINT、SMALLINT、INTEGER、FLOAT、REAL、DECIMAL、
NUMERIC のいずれかである場合は REAL 型に変換されます。
結果がオーバーフローして、REAL データ型で表現できない場合は、エラーになり
ます。
例
次の式は、5-22 ページで述べたように指数表記を指定した場合、浮動小数点数値の
-1.9698940E+07 を返します。
real('-19698939.67')
5-28
SQL Reference Guide
SIGN
SIGN
SIGN 関数は、整数値の符号 (+ または -) を返します。
構文
次に SIGN 関数を使った式の構文ダイアグラムを示します。
SIGN
(
<expression>
<expression>
)
数値データ型または文字データ型の式を使用できますが、数値を表
す式である必要があります。
'19.2'- 有効
'RAJ'- 無効
結果
SIGN 関数は式の符号を判定し、正数の場合は 1、負数の場合は -1、ゼロの場合は 0
を返します。戻り値は、INT データ型です。
引数が数値を表さない CHARACTER または VARCHAR データ型の式の場合は、エ
ラーになります。
引数が NULL の場合は、NULL が返されます。
例
select numvalue, sign(numvalue) from numtable;
numvalue
22.89
-90.03
0
sign(numvalue)
1
-1
0
スカラ関数 5-29
SQRT
SQRT
SQRT 関数は、関数引数の平方根を返します。
構文
次に SQRT 関数を使った式の構文ダイアグラムを示します。
SQRT
<expression>
(
( <expression>
)
データ型は数値を表すものである必要があります。
'19.2'- 有効
'RAJ'- 無効
結果
この関数は DOUBLE PRECISION 型の値を返します。引数が NULL のときは NULL
を返します。算出値の長さが DOUBLE PRECISION データ型の長さを超える場合は、
「out of range ( 有効範囲外 )」エラーになります。
引数の値のデータ型が TINYINT、SMALLINT、INTEGER、REAL、FLOAT、
DECIMAL、NUMERIC のいずれかである場合は DOUBLE PRECISION 型に変換され
ます。
引数が負のときの動作は、ゼロ除算処理と同様、ARITHIGNORE または
ARITHABORT の設定に従います。ARITHIGNORE が on ( または ARITHABORT が
off) の場合、負の引数の平方根を算出した結果として、サーバは NULL を返します。
ARITHIGNORE が off ( または ARITHABORT が on) の場合、サーバはエラーメッ
セージを生成します。ARITHIGNORE および ARITHABORT の設定の詳細は、第 9
章を参照してください。
引数が数値を表す文字式の場合、SQRT 関数は引数を倍精度の浮動小数点数に変換
後、平方根の値を計算し、結果を倍精度の値として返します。文字列が数値を表し
ていない場合はサーバがエラーメッセージを返します。
例
次の式は、5.000 を返します。
sqrt(25.0)
5-30
SQL Reference Guide
統計関数マクロ
統計関数マクロ
次のマクロは統計上使用される関数です。ほとんどが EXP、LN、SQRT スカラ関数
を使用して作成されています。
■
■
■
■
■
累乗
対数 (log)
常用対数 (log 10)
常用対数 (log 10)
❑ 祖集団値
❑ 標準偏差推定サンプル
分散
❑ 祖集団値
❑ 推定祖集団分散の不偏サンプル
これらのマクロについて説明します。
累乗
次のマクロは x を y 乗した値を計算します。
create macro power(x, y) as
(exp( (y) * ln((x)) ));
対数 (log)
次のマクロは y を底とする数値 x の対数を計算します。
create macro log(x, y) as
( ln ((x)) / ln((y)) );
常用対数 (log 10)
次のマクロは 10 を底とする数値 x の対数を計算します。
create macro log10(x) as
( ln((x)) / ln(10) );
祖集団の標準偏差
祖集団値の標準偏差は次のように計算されます。
σ = [Â(xi-m)2/N]1/2
m は祖集団の中間値を、N は祖集団の規模を表します。
スカラ関数 5-31
統計関数マクロ
次のマクロは、<col_name> に指定された、祖集団値の標準偏差を計算します。
create macro stddev(<col_name>) as
sqrt( abs(( sum((<col_name>) * (<col_name>)) ((sum((<col_name>)) * sum((<col_name>))) /
count((<col_name>))) ) / count((<col_name>))) );
祖集団の標準偏差推定サンプル
祖集団の標準偏差推定サンプルは次のように計算されます。
σ = [Â(xi-xbar)2/n-1]1/2
xbar はサンプルの中間値を、n はサンプルの規模を表します。
次のマクロは、<col_name> に指定された、祖集団値の標準偏差の推定サンプルを計
算します。
create macro population_stddev(<col_name>) as
sqrt( abs(((count((<col_name>)) *
sum((<col_name>) * (<col_name>))) (sum((<col_name>)) * sum((<col_name>)))) /
(count((<col_name>)) * (count((<col_name>)) - 1))) );
分散
祖集団値の分散は次のように計算します。
σ2 = Â(xi-m)2/N
m は祖集団の中間値を、N は祖集団の規模を表します。
次のマクロは、<col_name> に指定された祖集団値の分散を計算します。
create macro variance(<col_name>) as
( (sum((<col_name>) * (<col_name>)) ((sum((<col_name>)) * sum((<col_name>))) /
count((<col_name>)))) / count((<col_name>)) );
推定祖集団分散の不偏サンプル
推定祖集団分散の不偏サンプルは次のように計算されます。
σ2 = [Â(xi-xbar)2/n-1]1/2
xbar はサンプルの中間値を、n はサンプルの規模を表します。
5-32
SQL Reference Guide
統計関数マクロ
次のマクロは、<col_name> に指定された推定祖集団分散の不偏サンプルを計算しま
す。
create macro population_variance(<col_name>) as
( ((count((<col_name>)) * sum((<col_name>) * (<col_name>))) (sum((<col_name>)) * sum((<col_name>)))) /
(count((<col_name>)) * (count ((<col_name>)) - 1)) );
例
次のクエリは stddev マクロを使用し、1999 年第 1 四半期中の西地区における紅茶
"Earl Gray" の平均売上の標準偏差を計算します。
select store_name, sum(dollars) as Sales,
avg(dollars) as AvgSales,
stddev(dollars) as S_Dev
from period natural join sales
natural join store
natural join market
natural join product
where region = 'West'
and prod_name = 'Earl Grey'
and qtr='Q1_99'
and year = 1999
group by qtr, store_name
order by qtr, store_name;
STORE_NAME
SALES
Beaches Brew
1159.50
Cupertino Coffee Supply
628.50
Instant Coffee
717.50
Java Judy’s
595.50
Roasters, Los Gatos
911.00
San Jose Roasting Company 395.00
AVGSALES
S_DEV
39.98275862
15.35
28.56818181
15.93
42.20588235
14.92
35.02941176
18.34
41.40909090
18.13
28.21428571
15.64
スカラ関数 5-33
文字列スカラ関数
文字列スカラ関数
数値データ型の値を文字列に変換する STRING 関数を除き、文字列スカラ関数は文
字列を処理します。シングルバイトおよびマルチバイトの文字処理をサポートしま
す。
文字列スカラ関数は次のとおりです。
5-34
文字列スカラ関数
説明
CONCAT
文字列を連結します。
LENGTH
文字列内の文字数を計算します。
LENGTHB
文字列のバイト数を計算します。
LOWER
文字列を小文字に変換します。
LTRIM
先頭の空白を削除します。
POSITION
検索文字列での文字の論理位置を判断します。
POSITIONB
検索文字列での文字のバイト位置を判断します。
RTRIM
末尾の空白を削除します。
STRING
数値データ型を CHARACTER データ型に変換します。
SUBSTR
部分文字列を抽出します。
Substrb
文字列から部分文字列をバイト数で抽出します。
TRIM
先頭と末尾の空白を削除します。
UPPER
文字列を大文字に変換します。
SQL Reference Guide
CONCAT
CONCAT
CONCAT 関数は、文字列を連結します。
構文
次に CONCAT 関数を使った式の構文ダイアグラムを示します。
,
CONCAT
(
<c_expression>
,
<c_expression>
)
<c_expressions> 文字データ型の式です。この引数は、シングルバイトとマルチバイ
トのどちらでも、任意の数を指定できます。
結果
すべての引数が NULL でない文字式の場合は、各引数を連結した文字列が返されま
す。引数に NULL がある場合は、NULL が返されます。
返される文字列の最大長は、各引数の最大バイト数の合計になりますが、1,024 バ
イトを超えることはできません。実際の長さは、各引数の実際の長さの合計と等し
くなります。文字列の最大長を短くするには、SUBSTR、TRIM、LTRIM、RTRIM
の関数を使います。
例
次のクエリは、4 つの異なる列の文字列を連結します。
select concat(hq_city, ' ', hq_state, ' ', district, ' ',
region)
from market
where region = 'West' or region = 'North'
New York
Philadelphia
Boston
Hartford
San Jose
San Francisco
...
NY
PA
MA
CT
CA
CA
New York
New York
Boston
Boston
San Francisco
San Francisco
North
North
North
North
West
West
スカラ関数 5-35
LENGTH
LENGTH
LENGTH 関数は文字列の文字数を計算します。
構文
次に LENGTH 関数を使った式の構文ダイアグラムを示します。
LENGTH
(
<c_expression>
)
<c_expression> 文字を表すデータ型である必要があります。
結果
引数が NULL でない場合、この関数は引数文字列内の文字数を指定する整数を返し
ます。引数が NULL のときは NULL を返します。
VARCHAR 列の長さには末尾の空白が含まれます。
CHARACTER 列の長さは CREATE TABLE 文で指定されている長さです。TRIM、
LTRIM、RTRIM 関数で、文字列中の文字の長さが分かります。
重要 : LENGTH 関数が返すのは文字列内の文字数であり、バイト数ではありません。
例
次のクエリは、Market テーブル内の地区名の長さを文字単位で返します。TRIM や
SUBSTR といった関数を使用して文字列の最大の長さを短くしていないため、この
クエリは文字列の長さの最大値を返します。
select distinct district, length(district) as char_len
from market;
DISTRICT
Atlanta
Boston
Chicago
Los Angeles
Minneapolis
New Orleans
New York
San Francisco
5-36
SQL Reference Guide
CHAR_LEN
20
20
20
20
20
20
20
20
LENGTH
次のクエリは、Market テーブル内で最も長い地区名を返します。TRIM 関数を使用
しているため、文字列の最大の長さではなく、それぞれの地区名を形成する実際の
文字数が考慮されます。
select distinct district from market
where length(trim(district)) =
(select max(length(trim(district))) from market)
DISTRICT
San Francisco
スカラ関数 5-37
LENGTHB
LENGTHB
LENGTHB 関数は文字列内のバイト数を計算します。
構文
次に LENGTH 関数を使った式の構文ダイアグラムを示します。
LENGTHB
(
<c_expression>
)
<c_expression> 文字を表すデータ型である必要があります。
結果
引数が NULL でない場合、<c_expression> のバイト数を指定する整数を返します。
引数が NULL のときは NULL を返します。
LENGTHB 関数が返すのは文字列内のバイト数であり、文字数ではありません。文
字列内の文字数に戻る場合は、LENGTH 関数を使います。
例
可変バイト長のマルチバイト コード セットを使用して次のクエリを実行すると、
文字列中のバイト数が返されます。この文字列で、0 ∼ 9 の数字はシングルバイト
長、Xx および Yy 文字はダブルバイト長、Zzz 文字は 3 バイト長です。
select lengthb ('12XxYyZzz3') as 'length in bytes' from test
10
LENGTH 関数は、文字列中の文字数である 6 を返します。
5-38
SQL Reference Guide
LOWER
LOWER
LOWER 関数は、文字列を小文字に変換します。
構文
次に LOWER 関数を使った式の構文ダイアグラムを示します。
LOWER
(
<c_expression>
)
<c_expression> 文字を表すデータ型である必要があります。
結果
引数が NULL でない場合は、文字列が小文字に変換されます。NULL の場合は、
NULL が返されます。
例
次のクエリは M で始まる都市名を Market テーブルから返します。リザルト テーブ
ルには大文字と小文字が混在した都市名 ( テーブルにロードした時の状態 ) が表示
されます。
select hq_city
from market
where hq_city like 'M%'
HQ_CITY
----------Miami
Minneapolis
Milwaukee
次のクエリは、LOWER 関数を使って都市名を小文字で表示します。
select lower(hq_city) as lower_city
from market
where hq_city like 'M%'
LOWER_CITY
----------miami
minneapolis
milwaukee
スカラ関数 5-39
LTRIM
LTRIM
LTRIM 関数は、文字列の先頭の空白の位置を移動します。マルチバイトの空白は、
シングルバイトの空白と同じ方法で処理されます。
構文
次に LTRIM 関数を使った式の構文ダイアグラムを示します。
LTRIM
(
<c_expression>
)
<c_expression> 文字を表すデータ型である必要があります。
結果
引数が NULL でない場合は、文字列から先頭の空白が削除されます。NULL の場合
は、NULL が返されます。
結果の最大長は、引数の最大長になります。
使用上の注意
CHAR 列と出力データは常に固定長であるため、指定の長さを満たすために空白が
追加されます。CHAR 列または出力列幅の短縮に LTRIM は使用できません。
例
次の式は、Market 列から先頭の空白を削除します。
ltrim(market)
5-40
SQL Reference Guide
LTRIM
次のクエリは、Hq_City 列と District 列から先頭の空白を削除します。
select concat( ltrim(hq_city), ltrim(district)) as
mkt_district
from market
where region in ('South', 'North')
MKT_DISTRICT
Atlanta
Miami
New Orleans
Houston
New York
Philadelphia
Boston
Hartford
Atlanta
Atlanta
New Orleans
New Orleans
New York
New York
Boston
Boston
スカラ関数 5-41
POSITION
POSITION
POSITION 関数はソース文字列を処理し、検索文字列内の文字の開始位置を示す数
値を返します。たとえば、ソース文字列が 'David Banner' で検索文字列が
'Banner' の場合、POSITION 関数は、'David Banner' 内の 'Banner' の開始位置を
示す 7 を返します。
構文
次に POSITION 関数を使った式の構文ダイアグラムを示します。
position
( <c_expression>, <c_expression> )
<c_expression> 最初の <c_expression> は検索文字列を指定します。2 番目の
<c_expression> はソース文字列を示します。<c_expression> には、
1,024 文字以下のシングルバイト文字またはマルチバイト文字で構
成される文字型を使用できます。
結果
POSITION 関数には、次の 5 つの結果があります。
■
■
■
■
■
最初の <c_expression> を見つけた場合、この関数は 2 番目の <c_expression>
内での最初の <c_expression> の開始位置を示す整数を返します。
最初の <c_expression> が見つからない場合、結果は 0 です。
最初の <c_expression> の長さが 0 の場合、結果は 1 です。
最初の <c_expression> が NULL の場合、エラー メッセージが返されます。
2 番目の <c_expression> が NULL の場合、結果は 0 です。
例
次の 2 つの例では、検索文字列内での文字の開始位置を示す数値が返されます。
5-42
SQL Reference Guide
POSITION
次の例で、クエリは "Imports" の文字 I の開始位置を示す 4 を返します。文字 C で始
まり "Imports" という単語を含まないほかの 2 つの会社名の場合、このクエリは 0 を
返します。
select name, position('Imports', name) as name_pos
from supplier
where name like 'C%'
NAME
CB Imports
Colo Coffee
Crashing By Design
NAME_POS
4
0
0
次の例で、クエリは単語 "Express" の文字 E の開始位置を示す 10 を返します。
select NAME, position('Express', name) as NAME_POS
from supplier
where NAME like 'E%';
NAME
Espresso Express
NAME_POS
10
スカラ関数 5-43
POSITIONB
POSITIONB
POSITIONB 関数はソース文字列を処理し、検索文字列内の文字の開始バイト位置
を示す数値を返します。
構文
次に POSITIONB 関数を使った式の構文ダイアグラムを示します。
positionb
( <c_expression>, <c_expression> )
<c_expression> 最初の <c_expression> は検索文字列を指定します。2 番目の
<c_expression> はソース文字列を示します。<c_expression> には、
1,024 文字以下のシングルバイト文字またはマルチバイト文字で構
成される文字型を使用できます。
結果
POSITIONB 関数には、次の 5 つの結果があります。
■
■
■
■
■
最初の <c_expression> を見つけた場合、この関数は 2 番目の <c_expression>
内での最初の <c_expression> の開始バイト位置を示す整数を返します。
最初の <c_expression> が見つからない場合、結果は 0 です。
最初の <c_expression> の長さが 0 の場合、結果は 1 です。
最初の <c_expression> が NULL の場合、エラー メッセージが返されます。
2 番目の <c_expression> が NULL の場合、結果は 0 です。
例
次の例では、検索文字列内の文字の開始バイト位置を示す数値を返します。2 バイ
トのコード セットを <mb-x> で表すものとします。たとえば、文字列
<mb-A><mb-n><mb-n> は 3 つの文字の 6 バイト表現を表します。
select name, positionb('<mb-a><mb-v><mb-i><mb-d>',name)
as NAME_POS
from customer
where NAME like '<mb-D>'
NAME
NAME_POS
---------------------------------------------<mb-D><mb-i><mb-a><mb-n><mb-n><mb-e>
0
<mb-D><mb-a><mb-v><mb-i><mb-d>
3
<mb-D><mb-i><mb-c><mb-k>
0
<mb-D><mb-e><mb-n><mb-n><mb-i><mb-s>
0
5-44
SQL Reference Guide
RTRIM
RTRIM
RTRIM 関数は、文字列の末尾の空白の位置を移動します。マルチバイトの空白は、
シングルバイトの空白と同じ方法で処理されます。
構文
次に RTRIM 関数を使った式の構文ダイアグラムを示します。
RTRIM
(
<c_expression>
)
<c_expression> 文字を表すデータ型である必要があります。
結果
引数が NULL でない場合は、文字列から末尾の空白が削除されます。NULL の場合
は、NULL が返されます。
結果の最大長は、引数の最大長になります。
使用上の注意
文字 (CHAR) 型の列と出力データは常に固定長であるため、指定の長さを満たすた
めに空白が追加されます。CHAR 列または出力列幅の短縮に RTRIM は使用できま
せん。
例
次の式は、Market 列から末尾の空白を削除します。
rtrim(market)
スカラ関数 5-45
RTRIM
次のクエリは、Hq_City 列から末尾の空白を削除します。さらに、カンマと空白を
区切り記号として、Hq_City 列と District 列を連結します。
select concat(rtrim(hq_city), ', ' , district) as mkt_district
from market
where region in ('South', 'North')
MKT_DISTRICT
Atlanta, Atlanta
Miami, Atlanta
New Orleans, New Orleans
Houston, New Orleans
New York, New York
Philadelphia, New York
Boston, Boston
Hartford, Boston
5-46
SQL Reference Guide
STRING
STRING
STRING 関数は、数値データ型または日付時間データ型の値を文字列に変換します。
構文
次に STRING 関数を使った式の構文ダイアグラムを示します。
STRING
(
)
<expression>
, <length>
, <scale>
<expression>
数値データ型または日付時間データ型です。<expression> が NULL
でない場合は、文字列が返されます。NULL の場合は、NULL が返
されます。
<length>
戻り値の最大文字数を指定します。NULL は使用できません。整数
定数または整数式を指定するか、指定を省略することができます。
この引数を省略した場合は、次の表に示すように、式のデータ型に
よって戻り値の文字数が決まります。
データ型
戻り値のデフォルト文字数
TINYINT
4 文字
SMALLINT
6 文字
INTEGER
11 文字
SERIAL
11 文字
DECIMAL、NUMERIC
( 精度 + 2) 文字
または
( 精度 + 3) 文字
戻り値が < 0 で、スケール = 精度の場合
REAL、FLOAT、
DOUBLE PRECISION
23 文字
(1/2)
スカラ関数 5-47
STRING
データ型
戻り値のデフォルト文字数
DATE
10 文字 (8 桁、区切り記号 2 桁 )
TIME
15 文字 (12 桁、区切り記号 3 桁 )
TIMESTAMP
26 文字 (20 桁、区切り記号 5 桁、空白 1 桁 )
(2/2)
データ型戻り値の値を表すのに必要な桁数が、STRING 関数が返す文字数を超える
場合は、結果が切り捨てられます。たとえば、指定したデータ型に対し、戻り値の
デフォルト文字数が不足している場合や、指定した <length> 引数の値が小さい場合
です。
特に、FLOAT データ型の式には注意が必要です。STRING 関数は指数表記を使用し
ないため、<LENGTH> 引数を指定しないと、1E35 のような値は切り捨てられます。
これは、FLOAT データ型の式に対する戻り値のデフォルトが、23 文字のためです。
複数の列を使った数値表現式を指定した場合は、結果が浮動小数点数値に変換され
ます。<length> 引数が式の場合は、行ごとに式の値を切り捨てた整数を使用して第
1 引数のフォーマットを設定します。<length> が短すぎても、エラー メッセージや
警告メッセージを表示せずに結果が切り捨てられます。
ヒント : STRING 関数は、数値表現式のすぐ左にあるマイナス符号 (ñ)、プラス符
号 (+)、空白などの桁を文字数にカウントします。このため、次の式は、1234 では
なく 123 と評価されます。
string(1234, 4)
数値データ型の場合は小数点以下の桁数、時間データ型およびタイ
ムスタンプ データ型の場合は秒未満の桁数を指定します。<scale>
の値は (<length>- 3) 以下とし、NULL は使用できません。DATE 型の
式は、スケールが無視されます。
<scale>
例
■
次の式は、小数点以下の桁数が 2 で、10 文字以内の文字列を返します。
string(dollars/quantity, 10,2)
■
次の式は、1999-11-07 のように、現在の日付を表す文字列を返します。
string (current_date)
■
次の式は、2000 のように、現在の日付から年の部分だけを返します。
string (current_date, 4)
5-48
SQL Reference Guide
STRING
■
次の式は、現在のタイムスタンプを表す文字列を返します。
string (current_timestamp)
たとえば、次のようになります。
'2000-11-07 14:50:40.710474'
■
次の式は、秒未満を 4 桁とする現在のタイムスタンプを表す文字列を返し
ます。
string (current_timestamp, 26, 4)
たとえば、次のようになります。
'2000-11-07 14:50:40.7104'
■
次のクエリは、STRING 関数を使って、Price 列の値を小数第 2 位まで算出
します。STRING 関数を使用しないと、Price 列の値は桁数の多い数値デー
タ型で返されます。
select prod_name, sum(dollars) as total_sales,
sum(quantity) as total_qty,
string(sum(dollars)/sum(quantity), 7, 2) as price
from product natural join sales
natural join period
where year = 2000
group by prod_name
SELECT 文で STRING 関数を使用する例は、
『SQL Self-Study Guide』を参照してく
ださい。
スカラ関数 5-49
SUBSTR
SUBSTR
SUBSTRB 関数は、文字列から部分文字列を抽出します。
SUBSTR スカラ関数の <start> 引数と <length> 引数は、バイト値ではなく文字値とし
て解釈されます。ただし、この関数の結果に割り当てられるバイト幅は、ウェアハ
ウス ロケールで定義されるコード セット内の最大バイト幅を文字数に掛けたもの
です。
このコード セット内で最も幅の広い文字に 2 バイトの格納域が必要だとします。ど
のクエリでも、substr(name, 1, 3) のような式は、結果に 3 バイトではなく 6
バイトを割り当てます。
SUBSTR 関数の <length> 引数も 5 に設定される CHAR(5) 型列などに SUBSTR 関数
が指定されている INSERT INTO SELECT 文では、エラー メッセージが表示されま
す。このエラーが発生するのは、10 バイトを部分文字列に割り当てようとしている
のに、5 バイトのみが CREATE TABLE 文に割り当てられているためです。
構文
次に SUBSTR 関数を使った式の構文ダイアグラムを示します。
SUBSTR
(
<c_expression>, <start>
)
, <length>
<c_expression> 文字を表すデータ型である必要があります。
<start>
第 1 引数の部分文字列の開始文字の位置を指定する整数式です。先
頭位置は 1 です。
<length>
抽出する文字数を指定します。<length> を指定する場合は、NULL
でない整数式か、整数定数を使用することができます。<length> が
整数定数の場合は、第 1 引数の長さより大きい値は指定できませ
ん。
結果
与えられた条件に応じて、次のいずれかの結果が SUBSTR 関数に返されます。
■
■
5-50
第 1 引数が NULL でなければ、<start> で指定した位置で始まり、<length>
で指定した長さの部分文字列が返されます。<length> を指定しなかった場
合は、<start> から <c_expression> の終わりまでの部分文字列が返されます。
第 1 引数が NULL ならば、NULL が返されます。
SQL Reference Guide
SUBSTR
■
■
<start> 引数が 1 未満か NULL ならば、エラーになります。<start> が第 1 引
数の長さより大きい場合は、長さ 0 の文字列が返されます。
<length> が (<c_expression> の長さ _<start>) +1 より長ければ、
(<c_expression> の長さ - <start>) +1 文字だけが返されます。
末尾空白の使用方法
SUBSTR がクライアントで使用された場合、システムの末尾空白の処理方法によっ
ては、出力が矛盾することがあります。現在のネイティブ ODBC 接続ソフトウェア
では、末尾の空白は削除し、以前のものでは削除されずに残されているからです。
これは、rbw.config オプション OPTION SERVER_TRIM_TRAILING_SPACES を使用
することにより解決できます。クライアントのアプリケーションにデータを送る前
に、サーバが SUBSTR 動作の結果で発生した末尾空白を削除するかどうかを設定
します。デフォルトは YES です。
例
次の式は、文字位置 5 で始まる 10 文字の部分文字列を抽出します。
substr(market, 5, 10)
次のクエリは、文字位置 1 で始まる 8 文字の部分文字列を抽出します。
select classkey as class_no,
substr(class_type, 1, 8) as type
from class
CLASS_NO
1
2
3
4
5
6
7
8
12
TYPE
Bulk_bea
Bulk_tea
Bulk_spi
Pkg_coff
Pkg_tea
Pkg_spic
Hardware
Gifts
Clothing
スカラ関数 5-51
SUBSTRB
SUBSTRB
SUBSTRB 関数は、文字列からバイト単位で部分文字列を抽出します。
構文
次に SUBSTRB 関数を使った式の構文ダイアグラムを示します。
SUBSTRB
(
<c_expression>, <start>
)
, <length>
<c_expression> 文字を表すデータ型である必要があります。
<start>
第 1 引数の部分文字列の開始文字の位置を指定する整数式です。先
頭位置は 1 です。
<length>
抽出するバイト数を指定します。<length> を指定する場合は、
NULL でない整数式か、整数定数を使用することができます。
<length> が整数定数の場合は、<c_expression> の長さより大きい値は
指定できません。
結果
与えられた条件に応じて、次のいずれかの結果が SUBSTRB 関数に返されます。
■
第 1 引数が NULL でなければ、<start> で指定した位置で始まり、<length>
で指定したバイト数の部分文字列が返されます。<length> を指定しなかっ
た場合は、<start> から <c_expression> の終わりまでの部分文字列が返され
ます。
警告 : SUBSTRB は文字ではなく、バイトを返すため、マルチバイト文字の途中の
位置を指定する <start> や <lentgh> 引数を指定することができます。この場合は、シ
ングルバイトを含む結果が返されます。
■
■
■
5-52
第 1 引数が NULL ならば、NULL が返されます。
<start> 引数が 1 未満か NULL ならば、エラーになります。<start> が第 1 引
数の長さより大きい場合は、長さ 0 の文字列が返されます。
<length> が (<c_expression> の長さ _<start>) +1 より長ければ、
(<c_expression> の長さ - <start>) +1 バイトだけが返されます。
SQL Reference Guide
SUBSTRB
例
可変バイト長のマルチバイト コード セットを使用して次のクエリを実行すると、
文字列中のバイト数が返されます。この文字列で、0 ∼ 9 の数字はシングルバイト
長、Xx および Yy 文字はダブルバイト長、Zzz 文字は 3 バイト長です。
select substrb ('12XxYyZzz3',3,4) from test;
XxYy
SUBSTR 関数では、次の結果が返されます。
select substr ('12XxYyZzz3',3,4) from test;
XxYyZzz3
次のクエリは、マルチバイト文字の途中の位置を指定する <length> 引数を含む
SUBSTRB です。
select substrb ('12XxYyZzz3',3,3) from test;
Xx<blank>
マルチバイト文字の最初のバイト Yy ではなく、シングルバイトの空白が返されま
す。
スカラ関数 5-53
TRIM
TRIM
TRIM 関数は、文字列の先頭と末尾の空白の位置を移動します。マルチバイトの空
白は、シングルバイトの空白と同じ方法で処理されます。
構文
次に TRIM 関数を使った式の構文ダイアグラムを示します。
TRIM
(
)
<c_expression>
, 'Both'
, 'Right'
, 'Left'
<c_expression> 文字を表すデータ型である必要があります。
Both、Right、 Both、Right、Left は、リテラルです。大文字、小文字、大文字と小
Left
文字の混在のいずれでもかまいません。一重引用符文字 (') は必須で
す。Both は、先頭の空白と末尾の空白の両方を削除します。Right
は、末尾の空白を削除します。Left は、先頭の空白を削除します。
デフォルトは、Both です。
結果
第 1 引数が NULL でなければ、文字列から先頭の空白と末尾の空白が削除されま
す。第 1 引数が NULL ならば、NULL が返されます。結果の最大長は、第 1 引数の
最大長です。
使用上の注意
CHAR 列と出力データは常に固定長であるため、指定の長さを満たすために空白が
追加されます。CHAR 列または出力列幅の短縮に TRIM は使用できません。
TRIM 関数の処理では、シングルバイトの ASCII 空白文字ではなく、東アジア言語
でサポートされているダブルバイトの文字を使用すると、予測できない結果になる
ことがあります。文字列内のダブルバイトの空白はシングルバイトの空白に置き換
え、データのロード前に入力ファイルからダブルバイトの後ろの空白を取り除いて
おきます。
5-54
SQL Reference Guide
TRIM
例
次の式は、Market 列の文字列の後ろの空白の位置を移動します。right 引数を指定
した TRIM は、RTRIM 関数と同じです。
trim(market, 'right')
次のクエリは、City 列の値の先頭と末尾の空白の位置を移動します。
select trim(hq_city) as city
from market
スカラ関数 5-55
UPPER
UPPER
UPPER 関数は、文字列を大文字に変換します。
構文
次に UPPER 関数を使った式の構文ダイアグラムを示します。
UPPER
(
<c_expression>
)
<c_expression> 文字を表すデータ型である必要があります。
結果
引数が NULL でなければ、文字列は大文字に変換されます。引数が NULL ならば、
NULL が返されます。
例
次のクエリは M で始まる都市名を Market テーブルから返します。リザルト テーブ
ルには大文字と小文字が混在した都市名が、テーブルに挿入されたときの状態で表
示されます。
select hq_city as city
from market
where hq_city like 'M%'
CITY
----------Miami
Minneapolis
Milwaukee
5-56
SQL Reference Guide
UPPER
次のクエリは、UPPER 関数を使って都市名を大文字で表示します。
select upper(hq_city) as city
from market
where hq_city like 'M%'
UPPER_CITY
----------MIAMI
MINNEAPOLIS
MILWAUKEE
スカラ関数 5-57
日付時間スカラ関数
日付時間スカラ関数
このセクションでは、日付時間式を処理するスカラ関数について説明します。日付
時間スカラ関数は次のとおりです。
日付時間関数
説明
CURRENT_DATE
現在の日付を返します。
CURRENT_TIME
現在の時間を返します。
CURRENT_TIMESTAMP
現在の日付時間を返します。
DATE
TIMESTAMP または文字列を DATE に変換します。
DATEADD
日付時間の値に、時間隔を加算します。
DATEDIFF
2 つの日付時間の差異を算出します。
DATENAME
日付時間の日付フィールドを、文字列として抽出し
ます。
EXTRACT
日付時間の日付フィールドを、INTEGER として抽出
します。
TIME
TIMESTAMP または文字列を TIME に変換します。
TIMESTAMP
DATE または TIME または文字列を TIMESTAMP に変
換します。
TO_CHAR
日付、時刻、タイムスタンプをユーザ指定の形式で
返します。
DATEADD、DATEDIFF、EXTRACT の各関数の例は、『SQL Self-Study Guide』を参
照してください。
日付時間スカラ関数の日付フィールド
スカラ関数の中には、日付時間データ型を構成する特定のサブフィールド、つまり
日付フィールドを処理するものがあります。EXTRACT 関数を使うと、日付時間の
値から該当する日付フィールドを抽出することができます。
datepart 引数はローカライズされません。これらの datepart 引数は、どのロケールで
も同じフォーマットです。ただし、DATENAME 関数と EXTRACT 関数の出力デー
タはローカライズされます。
5-58
SQL Reference Guide
日付時間スカラ関数の日付フィールド
各日付フィールドの定義は次のとおりです。
日付フィールド
略記
戻り値の範囲
YEAR
yy
1 ∼ 9999
QUARTER
qq
1 ∼ 4 ( 月の値から判定 )
MONTH
mm
1 ∼ 12 (DATENAME 関数で指定した場合は、
ローカライズされた月 )
DAYOFYEAR
dy
1 ∼ 366
DAY
dd
1 ∼ 31
WEEK
wk
1 ∼ 53。最初の週を除き、週は 1 週間が始ま
る曜日から始まります ( サーバ ロケールが
指定するテリトリのフォーマット規則によ
り指定 )。最初および最後の週は、1 月 1 日
の曜日に応じて、1 週間未満になる場合があ
ります。
WEEKDAY
dw
1 ∼ 7。1 は 1 週間が始まる曜日です ( サーバ
ロケールが指定するテリトリのフォーマッ
ト規則により指定 )。DATENAME 関数で指
定した場合は、この引数はローカライズさ
れた曜日名を返します。
HOUR
hh
0 ∼ 23
MINUTE
mi
0 ∼ 59
SECOND
ss
0 ∼ 59
MILLISECOND
ms
0 ∼ 999
MICROSECOND
us
0 ∼ 999999
ヒント : ANSI SQL-92 EXTRACT 関数を使用しないクライアント ツールのために、
非標準の DATEPART スカラ関数がサポートされています。DATEPART の詳細は、
付録 C を参照してください。
スカラ関数 5-59
CURRENT_DATE、CURRENT_TIME、CURRENT_TIMESTAMP
CURRENT_DATE、CURRENT_TIME、
CURRENT_TIMESTAMP
CURRENT_DATE、CURRENT_TIME、CURRENT_TIMESTAMP 関数は、それぞれ現
在の日付、時間、タイムスタンプの値を返します。
構文
次に上記の関数を使った日付時間式の構文ダイアグラムを示します。
CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP
(
<n>
)
(
<n>
)
TIME および TIMESTAMP の値を構成する秒未満の精度を指定する
整数です。
<n>
<n> を指定しなかった場合、デフォルトの精度は次のようになります。
■
■
CURRENT_TIME(0)
CURRENT_TIMESTAMP(6)
結果
CURRENT_DATE、CURRENT_TIME、CURRENT_TIMESTAMP 関数の結果は、クエ
リの処理中は同じ値です。
例
次に現在の日付を Date_Col 列に挿入する例を示します。
insert into table_1 (date_col)
values (CURRENT_DATE)
5-60
SQL Reference Guide
DATE
DATE
DATE 関数は、文字列式またはタイムスタンプ式から DATE を算出します。
構文
次に DATE 関数を使った日付時間式の構文ダイアグラムを示します。
DATE
<c_expression>
(
)
<timestamp_expression>
<c_expression>、
<timestamp_expression>
引数には文字列式またはタイムスタンプ式を指定します。
日付式も指定できますが、その場合は変換は行われませ
ん。文字列式は、2-10 ページ「日付時間定数」に示す有
効な日付の値である必要があります。非標準の日付
フォーマットやタイムスタンプ フォーマットは指定でき
ません。
結果
結果は DATE データ型です。
例
次に DATE 関数を使ってテーブルの文字型の列の値を変換し、別のテーブルの
Date_Col 列に挿入する例を示します。
insert into table_1 (date_col)
select date (char_col) from table_2
次に DATE 関数を使って TIMESTAMP 型の値を DATE 型の値に変換する例を示しま
す。
insert into table_1 (date_col)
select date (timestamp_col) from table_2
DATE フォーマットのデフォルトは yyyy-mm-dd です。日付を異なるフォーマットで
表示するには、EXTRACT 関数を使用します。具体的な例は、5-66 ページ
「EXTRACT」を参照してください。
スカラ関数 5-61
DATEADD
DATEADD
DATEADD 関数は、日付時間の値に経過時間を加算します。
構文
次に DATEADD 関数を使った日付時間式の構文ダイアグラムを示します。
DATEADD
(
<datepart>,
<interval>,
<datetime_expression>
)
<datepart>
経過時間を加算する日付フィールド名を指定します。
5-58 ページ「日付時間スカラ関数の日付フィールド」に示す
フィールド名または略記を指定する必要があります。
<interval>
整数である必要があります。
<datetime_expression> DATE、TIME、または TIMESTAMP のデータ型である必要が
あります。
結果
結果は <datetime_expression> と同じデータ型になります。
<day>、<dayofyear>、<dayofweek> が関わる計算は、日数単位で行われます。
加算する経過時間の日付フィールドが月または四半期で、結果の日付がその月の日
数を超える場合、その月の最終日が返されます。
加算する経過時間の日付フィールドが年で、うるう年の場合は 2 月 29 日が返され、
うるう年以外の場合は 3 月 1 日が返されます。
例
この DATEADD 関数は、Table_1 の Date_Col 列の各値について、月の値を 1 増やし
ます。
select dateadd(month, 1, date_col) as month_increment
from table_1
日付 1999-11-25 は、1999-12-25 になります。日付 1999-12-25 は、2000-1-25 になります。
次の例は、Table_1 の Date_Col 列の各値について、月の値を 1 減らします。
select dateadd(month, -1, date_col) as month_decrement
from table_1
5-62
SQL Reference Guide
DATEDIFF
DATEDIFF
DATEDIFF 関数は、2 つの日付時間式の時間差を算出します。
構文
次に DATEDIFF 関数を使った日付時間式の構文ダイアグラムを示します。
DATEDIFF
(
<datepart>, <datetime_expression>,
<datetime_expression>
)
<datepart>
時間差の計算の対象となる日付フィールド名を指定します。
5-58 ページ「日付時間スカラ関数の日付フィールド」に示す
フィールド名または略記を指定する必要があります。
<datetime_expression>
式は DATE、TIME、または TIMESTAMP のデータ型である
必要があります。2 つの式が同じデータ型である必要はあり
ませんが、どちらにも指定した日付フィールドが含まれて
いる必要があります。
一方の式に指定した日付フィールドが含まれていない場合は、時間には午前 0 時、
日付にはデフォルトの日付 1900-01-01 が使用されます。
結果
DATEDIFF 関数は、結果を日付フィールドを単位とする整数で返します。<day>、
<dayofyear>、<dayofweek> が関わる計算は、日数単位で行われます。
例
Table_1 の Date_Col 列に、1998-12-03 という日付の値が格納されているとします。
select current_date as today,
datediff(year, '01-01-2001', current_date) as till_next_mil
from period where date = '12-03-1998';
TODAY
1999-09-02
TILL_NEXT_MIL
スカラ関数 5-63
DATENAME
DATENAME
DATENAME 関数は、指定した日付フィールドを抽出し、文字列として値を返しま
す。
構文
次に DATENAME 関数を使った日付時間式の構文ダイアグラムを示します。
DATENAME
(
<datepart>,
<datetime_expression>
)
<datepart>
日付時間式から抽出する日付フィールド名を指定します。
5-58 ページ「日付時間スカラ関数の日付フィールド」に示す
フィールド名または略記を指定する必要があります。
<datetime_expression>
DATE、TIME、または TIMESTAMP のデータ型である必要
があります。
結果
指定した日付フィールドが日付時間式に含まれていなければ、時間には午前 0 時、
日付にはデフォルトの日付 1900-01-01 が使用されます。これらのデフォルト値も、
文字列として返されます。
DATENAME 関数の出力データはローカライズされます。月と日は、サーバ ロケー
ルが指定する言語およびテリトリに従って表示されます。
例
サーバ ロケールが指定する言語が English で、日付の値が 1999-12-25 の場合、次の
DATENAME 関数は、December を返します。
select datename(mm, date)
from period
where date = '12-25-1999'
December
5-64
SQL Reference Guide
DATENAME
ドイツ語のデータベースでは、DATENAME 関数は、ドイツ語の月と曜日を返しま
す。
select distinct datename(mm, date)
from period
where qtr like 'Q4%'
Dezember
November
Oktober
select datename(dw, date)
from period
order by perkey
Samstag
Sonntag
Montag
...
日付が 1999-12-25 の場合、次の DATENAME 関数は、1999 を返します。
select datename(yy, date '1999-12-25')
from period
1999
...
日付が 1997-12-01 の場合、次の DATENAME 関数は、1 を返します。
select datename(dd, date '1997-12-01')
from period
1
...
スカラ関数 5-65
EXTRACT
EXTRACT
EXTRACT 関数は、日付時間の値から、指定された日付フィールドを整数値として
抽出します。
構文
次に EXTRACT 関数を使った日付時間式の構文ダイアグラムを示します。
EXTRACT
(
<datepart>
FROM
<datetime_expression>
)
<datepart>
日付時間式から抽出する日付フィールド名を指定します。
5-58 ページ「日付時間スカラ関数の日付フィールド」に示す
フィールド名または略記を指定する必要があります。
<datetime_expression>
DATE、TIME、または TIMESTAMP のデータ型である必要
があります。
結果
指定した日付フィールドが日付時間式に含まれていなければ、時間には午前 0 時、
日付にはデフォルトの日付 1900-01-01 が使用されます。これらのデフォルト値も、
整数として返されます。
EXTRACT 関数の出力データは、サーバ ロケールが指定するテリトリのフォーマッ
ト規則に従ってローカライズされます。たとえば、日付から曜日 (1 から 7 までの数
字 ) を抽出する場合、1 週間が何曜日から始まるかによって結果が異なります。
<datepart> が週の場合、指定した年の最初の日が何曜に当たるかを考慮して抽出が
行われます。たとえば、1 月の最初の日が土曜で、1 週間が日曜から始まる場合は、
2 番目の日は週 2 ( 第 2 週 ) になります。1 週間が月曜から始まる場合は、2 番目の日
は週 1 ( 第 1 週 ) となります。
5-66
SQL Reference Guide
EXTRACT
例
この EXTRACT 関数は、日付から年を抽出します。
select extract (year from date_col) as year_1999
from table_1
1999
...
EXTRACT 関数は、日付を異なるフォーマットで表示することができます。
select date,
concat (substr (string (extract(month from date_col)), 10, 2),
'/',
substr (string (extract (day,date_col)), 10, 2),
'/',
substr (string (extract (year from date_col)), 10, 2)) as
new_date
from period;
DATE
1998-01-01
1998-01-02
1998-01-03
NEW_DATE
1/1/98
1/2/98
1/3/98
「/」は、必要に応じて省略することも、
「-」に変更することもできます。
EXTRACT 関数は、曜日のローカライズされた値を返します。たとえば、
English_UnitedStates にロケール設定されたデータベースで次のクエリを実行する
と、2 の値を返します。
select extract(dw from date)
from period
where date = '01-03-2000'
2
1 週間が日曜から始まり、2000 年 1 月 3 日が月曜日なのでこの結果となります。
German_Germany のロケール設定のように、1 週間が月曜から始まる言語や地域の場
合は、同じクエリが 1 の値を返します。
ヒント : ANSI SQL-92 EXTRACT 関数を使用しないクライアント ツールのために、
非標準の DATEPART スカラ関数がサポートされています。DATEPART の詳細は、
付録 C を参照してください。
スカラ関数 5-67
TIME
TIME
TIME 関数は、文字列データ型またはタイムスタンプ データ型の式から TIME を算
出します。
構文
次に TIME 関数を使った日付時間式の構文ダイアグラムを示します。
TIME
(
<c_expression>
)
<timestamp_expression>
<c_expression>、
<timestamp_expression>
文字列式またはタイムスタンプ式を指定します。時間式も
指定できますが、その場合は変換は行われません。文字列
式は、2-10 ページ「日付時間定数」に示す有効な時間の
値である必要があります。非標準の時間フォーマットやタ
イムスタンプ フォーマットは指定できません。
結果
結果は TIME データ型になります。
例
次に TIME 関数を使ってテーブルの文字列の値を変換し、別のテーブルの TIME 列
に挿入する例を示します。
insert into table_1 (time_col)
select time (char_col) from table_2
次に TIME 関数を使って TIMESTAMP 型の値を TIME 型の値に変換する例を示しま
す。
insert into table_1 (time_col)
select time (timestamp_col) from table_2
5-68
SQL Reference Guide
TIMESTAMP
TIMESTAMP
TIMESTAMP 関数は、文字列または日付時間の値から TIMESTAMP を算出します。
構文
次に TIMESTAMP 関数を使った日付時間式の構文ダイアグラムを示します。
TIMESTAMP
(
<c_expression>
<date_expression>
)
,
<time_expression>
<c_expression>、
引数を 1 つ指定する場合は、文字列式である必要があります。
<date_expression>、 文字列式は、2-10 ページ「日付時間定数」に示す有効なタイム
<time_expression> スタンプの値である必要があります。非標準の時間フォーマッ
トやタイムスタンプ フォーマットは指定できません。
引数を 2 つ指定する場合は、第 1 引数を DATE 式、第 2 引数を TIME 式とし、各式
をカンマ (,) で区切ります。DATE 式か TIME 式のどちらかが NULL の場合は、結果
の TIMESTAMP 式も NULL になります。
結果
結果は TIMESTAMP データ型になります。
例
次に TIMESTAMP 関数を使ってテーブルの文字列の値を変換し、別のテーブルの
TIMESTAMP 列に挿入する例を示します。
insert into table_1 (timestamp_col)
select timestamp (char_col) from table_2
次に TIMESTAMP 関数を使って DATE 型と TIME 型の値を TIMESTAMP 型の値に変
換する例を示します。
insert into table_1 (timestamp_col)
select timestamp (date_col, time_col) from table_2
スカラ関数 5-69
TO_CHAR
TO_CHAR
TO_CHAR 関数は、日付 (DATE)、時刻 (TIME)、タイムスタンプ (TIMESTAMP)の
データ型を処理し、指定された形式の文字列を返す日時スカラ関数です。日時リテ
ラルは ANSI SQL-92 DATETIME データ型標準に準拠しています。
構文
次に TO_CHAR 関数を使った式の構文ダイアグラムを示します。
( <source_date>
to_char
)
, <format_str>
<source_date>
日付、時刻、タイムスタンプのいずれかのデータ型である必要
があります。列名、式、リテラル文字列のいずれかを指定でき
ます。
<format_str>
リテラル文字列を指定する必要があります。
この関数のオプションの <format_str> 引数では、次の要素がサポートされています。
要素
意味
最小値
最大値
YYYY
4 桁の年
0000
9999
YY
2 桁の年
00
99
MONTH
ロケール定義に基づく月のフル ネーム
MON
ロケール定義に基づく月の省略名
MM
2 桁の月
01
12
DAY
ロケール定義に基づく日のフル ネーム
DY
ロケール定義に基づく日の省略名
DD
日
01
31
DDD
年ごとの日付
001
366
(1/2)
5-70
SQL Reference Guide
TO_CHAR
要素
意味
最小値
最大値
CC
週の数値日
0
6
HH
時間
01
12
HH12
日の中の時
01
12
HH24
日の中の時
00
23
MI
分
00
59
SS
秒
00
59
A.M./P.M.
ロケール定義に基づく 12 時間制表示
(2/2)
TO_CHAR 関数の要素を指定する場合には次の要因を考慮します。
■
■
■
<format_str> 要素間の区切り記号として、数字、文字、句読点の任意の組
合せを使用できます。ただし、区切り記号は必須ではありません。たとえ
ば、次の形式文字列はいずれも有効です。
❑ MM/DD/YY
❑ 日付は MONTH、DAY、YEAR で時刻は HH:MI
❑ 日付 MM-DD-YY
週の中の数値日は 0 ∼ 6 の数値を返します。0 は日曜日を表します。
タイムスタンプの日付要素と時刻要素の間に空白を使用できますが、必須
ではありません。
結果
TO_CHAR 関数には、次の 3 つの結果があります。
■
■
■
TO_CHAR 関数は、指定された <format_str> 形式の <source_date> に指定さ
れた日付を含む文字列を返します。<source_date> は、日付 (DATE)、時刻
(TIME)、タイムスタンプ (TIMESTAMP) のいずれかのデータ型である必要
があります。
<format_str> を指定しない場合、そのデータ型に対応する適切なロケール
表現が使用されます。
<source_date> が NULL の場合、結果は NULL になります。
スカラ関数 5-71
TO_CHAR
例
次の 3 つの例は、指定された形式で表された、指定された日付を含む文字列を返し
ます。
次の例では、購入日を選択し、それを P_DATE として表示します。
select to_char(purchase_date) as P_DATE from sales
where customer_id < 1000
P_DATE
-------------1999-02-24
次の例では、close_date を選択し、2 桁の日、2 桁の月、2 桁の年をハイフンで区
切って C_DATE として表示します。
select to_char(close_date, 'dd-mm-yy') as C_DATE
from orders
where dealkey > 30
C_DATE
07-01-00
07-01-00
21-01-00
02-03-00
11-02-00
18-02-00
13-03-00
24-03-00
19-03-00
04-04-00
次の例では、CLOSE_DATE を選択し、それを元の形式で 1 回、TO_CHAR 形式で 1
回表示します。TO_CHAR 形式では、2 桁の日、3 文字の月、4 桁の年が、区切り文
字なしで CLOSING として表示されます。
select CLOSE_DATE, to_char(CLOSE_DATE, 'dd MON yyyy') as
CLOSING from orders
where order_no < 3604;
CLOSE_DATE
2000-01-07
2000-01-07
2000-01-07
2000-01-21
5-72
SQL Reference Guide
CLOSING
07 Jan 2000
07 Jan 2000
07 Jan 2000
21 Jan 2000
CURRENT_USER 関数
CURRENT_USER 関数
CURRENT_USER 関数は、情報の提供や管理を目的としたスカラ関数です。この関
数は、データベースを現在使用しているユーザのデータベース ユーザ名 ( 使用権
ID) を返します。データベース ユーザ名は、8-207 ページに説明する GRANT
CONNECT 文を使って作成します。
構文
次に USER 関数を使った式の構文ダイアグラムを示します。
CURRENT_USER
USER
結果
データベースの現在のユーザ名が返されます。この関数は、ユーザ名に基づいてア
クセスを制限したり提供するために使用できます。
例
次のクエリは、現在データベースに接続しているユーザが作成したテーブルを表示
します。
select *
from rbw_tables
where creator = CURRENT_USER
次のビューは、各ユーザが作成したテーブルを表示します。
create view table_list
as select * from rbw_tables
where creator = CURRENT_USER
ビューの作成者は select 特権を public に付与して、そのビューに各ユーザがアクセ
スできるようにする必要があります。
grant select on table_list to public
これにより、各ユーザが Table_List を検索し、自分が作成したテーブルを一覧でき
るようになります。表示されるのは、現在のユーザが作成したテーブルだけです。
システム テーブルと、アクセス権があってもユーザが作成していないテーブルは表
示されません。
select * from table_list
スカラ関数 5-73
第6章
分析関数
この章について .
.
.
.
.
.
.
.
.
.
6-3
SQL OLAP 関数 . . . . . . . . . . . . . . .
OLAP 関数の種類 . . . . . . . . . . . . .
OVER 句 . . . . . . . . . . . . . . . .
OLAP ウィンドウ パーティション . . . . . .
パーティション内の行のソート . . . . . .
ウィンドウ フレーム . . . . . . . . . .
OLAP 関数の使用に関する基本規則 . . . . . .
RANK、DENSE_RANK、NTILE の構文 . . . . .
OLAP <window_partition> 句 . . . . . . . .
OLAP <window_order> 句 . . . . . . . . .
OLAP 順位付けの例 . . . . . . . . . . .
ROW_NUMBER および ROWNUMBER の構文 . . .
ROW_NUMBER の例 . . . . . . . . . .
使用上の注意 . . . . . . . . . . . . .
AVG、COUNT、MIN、MAX、SUM の構文 . . . .
OLAP <window_frame> 句 . . . . . . . . .
行ベースのウィンドウ フレームの例 . . . . .
値ベースのウィンドウ フレームの例 . . . . .
リードおよびラグ ウィンドウ フレーム . . . .
NULLS FIRST および NULLS LAST の例 . . .
OLAP 集約の使用上の注意 . . . . . . . .
OLAP 集約の例 . . . . . . . . . . . .
RATIO_TO_REPORT および RATIOTOREPORT の構文
使用上の注意 . . . . . . . . . . . . .
OLAP RATIOTOREPORT の例 . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
6-4
6-5
6-7
6-7
6-7
6-10
6-15
6-16
6-17
6-17
6-18
6-22
6-23
6-23
6-24
6-25
6-30
6-33
6-36
6-37
6-38
6-40
6-44
6-45
6-46
. .
. .
. .
6-47
6-48
6-52
RISQL 表示関数 . . . .
CUME . . . . . .
MOVINGAVG . . .
.
.
.
.
.
. . . . .
. . . . .
. . . . .
.
.
.
.
. . . .
. . . .
. . . .
.
. . . . .
. . . . .
. . . . .
MOVINGSUM .
NTILE . . . .
RANK . . . .
RATIOTOREPORT
TERTILE . . .
6-2 SQL Reference Guide
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
6-55
6-58
6-62
6-66
6-68
この章について
IBM Red Brick Warehouse は、Red Brick サーバ専用に開発された独自の RISQL 表示
関数と、ANSI SQL-99 標準に準拠しそれを拡張した一連の SQL OLAP 関数の、2 種
類の分析関数をサポートします。また、Red Brick サーバは ANSI SQL-99 標準の
Elementary OLAP パッケージで定義されているすべての関数をサポートします。
OLAP 関数は RISQL 関数の機能を踏襲し、拡張したもので、RISQL 関数よりもさら
に汎用的な、一連の分析機能を提供します。RISQL 表示関数はすべて、新しい
OLAP 構文または独自の形式で表すことができます。
一般に、分析関数は次の点で有用です。
■
■
■
複雑かつ頻出するビジネス上の問合わせを SQL 文で表すことが簡単になる
効率が良い
ほかの計算実行方法より高速である
この章では、これら 2 種類の関数の使用方法を 2 つのセクションに分けて説明しま
す。
■
■
SQL OLAP 関数
RISQL 表示関数
分析関数
6-3
SQL OLAP 関数
SQL OLAP 関数
SQL OLAP 関数は、単一のクエリ式内でパーティション分割されたリザルト セット
に対して適用されます。ウィンドウ パーティションとは、クエリで返される行のサ
ブセットで、特別な OVER() 句で 1 つ以上の列によって定義されます。
olap_function() over (partition by col1, col2...)
クエリ内の各 OLAP 関数は、それぞれのウィンドウ パーティションの内容に対して
適用されます。一方、分析関数でない関数は、リザルト セットの各行に対して計算
を実行します。たとえば、次のクエリの OLAP RANK 関数を例に考えてみます。
RISQL> select date, store_name, sum(dollars) as sales_dols,
> rank() over (partition by date order by sales_dols desc) as
date_rank
> from period, store, sales
> where period.perkey = sales.perkey
>
and store.storekey = sales.storekey
>
and state = 'CA'
> group by date, store_name
> order by date;
DATE
1998-01-02
1998-01-02
1998-01-02
1998-01-02
1998-01-02
1998-01-03
1998-01-03
1998-01-03
1998-01-03
1998-01-03
1998-01-04
1998-01-04
...
STORE_NAME
Beaches Brew
Roasters, Los Gatos
San Jose Roasting Company
Cupertino Coffee Supply
Instant Coffee
Instant Coffee
San Jose Roasting Company
Cupertino Coffee Supply
Roasters, Los Gatos
Beaches Brew
Instant Coffee
San Jose Roasting Company
SALES_DOLS DATE_RANK
785.55
1
762.25
2
636.25
3
634.00
4
457.75
5
713.75
1
633.25
2
470.50
3
433.00
4
367.25
5
1031.50
1
613.95
2
このクエリは売上額の順位を返します。小売店は各日付の総売上高に基づいて順位
付けされます。日付が変わると順位の値はリセットされます。複数の順位値 (1 ∼ n)
のセットは、サブクエリや複雑な SQL を使うことなく、単一のクエリ式で計算され
ます。
6-4
SQL Reference Guide
OLAP 関数の種類
実際、OLAP 関数を使用することによって、アプリケーション開発者は分析的なビ
ジネス クエリを簡単かつ効率的に作成できます。たとえば、さまざまな間隔に対し
て移動平均や移動合計を計算したり、選択した列の値の変化に応じて集約と順位付
けをリセットしたり、複雑な比率を単純な用語で表現できます。また、単一のクエ
リ式内で、複数の異なる OLAP 関数を各関数固有のパーティション分割規則で定義
できます。RISQL 表示関数は OLAP の機能の一部をエミュレートしていますが、標
準的な方法ではなく、柔軟性に欠けています。
OLAP 関数の種類
IBM Red Brick Warehouse でサポートされる OLAP 関数は、次の 4 つのカテゴリに分
類されます。
■
■
■
■
順位付け
❑ RANK
❑ DENSE_RANK および DENSERANK ( シノニム )
❑ NTILE
番号付け : ROW_NUMBER および ROWNUMBER ( シノニム )
集約 :
❑ AVG
❑ COUNT
❑ MIN
❑ MAX
❑ SUM
COUNT(DISTINCT) などの集約関数での DISTINCT の指定もサポートされ
ています。
比率レポート :RATIO_TO_REPORT および RATIOTOREPORT ( シノニム )
分析関数
6-5
OLAP 関数の種類
次の表に、サポートされている OLAP 関数と、対応する RISQL 表示関数を示しま
す。
SQL OLAP 関数
対応する RISQL 表示関数
RANK
RANK
DENSE_RANK、DENSERANK
NTILE
NTILE、TERTILE
RATIO_TO_REPORT、RATIOTOREPORT
RATIOTOREPORT
ROW_NUMBER、ROWNUMBER
CUME(1)
AVG
MOVINGAVG
COUNT
MIN
MAX
SUM
CUME、MOVINGSUM
OVER 句がない場合、5 つの集約関数は第 4 章「集約関数」の説明のように機能し
ます。RISQL CUME、MOVINGAVG、および MOVINGSUM 関数は、OLAP OVER 句
で AVG および SUM 関数を使用してエミュレートできます。
6-6
SQL Reference Guide
OVER 句
OVER 句
OLAP 関数は RISQL 表示関数などのほかの分析関数やレポート関数とは異なり、
OLAP OVER 句を使用できます。OVER 句では主に、次の 3 つの操作を行えます。
■
■
■
ウィンドウ パーティションの定義 (PARTITION BY 句 )
パーティション内の行のソート (ORDER BY 句 )
ウィンドウ フレームの定義 (ROWS/RANGE 指定 )
OVER 句の使用規則は、それが使用される OLAP 関数の種類 ( 順位付けや集約など )
によって異なります。使用規則は、この章で後述している個々の構文の解説を参照
してください。次に、ウィンドウ パーティション、パーティション分割した行の
ソート、およびウィンドウ フレームについて、その概念を簡単に説明します。すで
にこれらの概念を理解している場合は、6-16 ページからの構文説明と例に進んでく
ださい。
OLAP ウィンドウ パーティション
ウィンドウ パーティションとは、OLAP 関数を適用するためにグループ分けされた
列の集合のことです。OLAP 関数は各行に適用されますが、計算はパーティション
内の行全体に対して行われます。パーティションが指定されていない場合、OLAP
関数は完全な中間リザルト セットに対して計算を行います。
パーティション内の行のソート
OLAP ORDER BY 句は、任意のクエリ式に追加できる ORDER BY 句とは区別されま
す。7-55 ページを参照してください。OLAP 関数の ORDER BY 句は通常、ウィンド
ウ パーティション内で行をソートするための式を定義するものですが、先行する
PARTITION BY 句なしでも ORDER BY 句を使用できます。つまり、中間リザルト
セットをソートするために、意図的に OLAP 関数を使用できます。
この指定は OLAP 関数の順位付けファミリでは必須となります。順位値は関数自体
の引数ではなく、ORDER BY 句によって決定されます。OLAP 集約の場合は、一般
的に ORDER BY 句は必須ではありませんが、ウィンドウ フレームを定義するとき
には必須となります 6-10 ページを参照してください。パーティション分割された行
は、各フレームに適切な集約値を計算する前にソートされている必要があります。
分析関数
6-7
OVER 句
ORDER BY 句には NULL の取り扱い規則と同様、昇順および降順のソートを定義す
るためのセマンティクスが含まれます。デフォルトでは OLAP 関数は昇順による
ソートを行い、最低値が 1 に順位付けされます。この動作は SELECT 文の末尾に
ORDER BY 句を使用する場合のデフォルトの動作と一致していますが、ほとんどの
順序計算には非直観的なものとなっています。OLAP 計算ではしばしば降順による
ソートが必要となります。このとき、最高値が 1 に順位付けされますが、これは
ORDER BY 句で DESC キーワードを使用して明示的に指定する必要があります。
6-17 ページを参照してください。
次の例では、ウィンドウ パーティションは「Dimension」列で定義されています。
ここでは値「A」を持つ 5 つの行で 1 つのウィンドウが構成されています。「B」お
よび 「C」の場合も同様です。Measure 列は OLAP RANK 関数の入力データで、各
パーティションの行は Measure 列の値によってソートされています。RANK 関数が
適用される場合は、各パーティションに対して計算が行なわれます。Measure 列の
値は各パーティション内で 1 ∼ 5 に順位付けされます。デフォルトの昇順では最低
値に 1 が割り当てられます。
6-8
SQL Reference Guide
OVER 句
この例では OLAP ROW_NUMBER 関数の計算も行われます。ここでは PARTITION
BY 句を使わずに、リザルト セット全体に対して連続した行番号が生成されます。
Row
Dimension
Measure
OLAP_RANK
1
A
10
1
2
A
50
2
3
A
100
3
4
A
120
4
5
A
500
5
6
B
50
1
7
B
60
2
8
B
200
3
9
B
220
4
10
B
600
5
11
C
40
1
12
C
300
2
13
C
500
3
14
C
1000
4
15
C
2000
5
このクエリの SQL 文は次のようになります。
select row_number() over() as row,
dimension,
measure,
rank() over(partition by dimension order by measure)
as olap_rank
from...;
この例のように、ウィンドウ パーティションは単一のディメンジョンの値で定義で
きます。また、複数のディメンジョンを指定することもできます。たとえば、市と
州、あるいは月と四半期と年の値に基づいて、行をパーティションに分割できま
す。
分析関数
6-9
OVER 句
ウィンドウ フレーム
集約など、順位付けを行わない OLAP 関数に対しては、ウィンドウ フレームを定義
できます。ウィンドウ フレームはウィンドウ パーティション内の行の集合を定義
します。ウィンドウ フレームが定義されると、OLAP 関数はパーティション全体の
固定内容ではなく、この移動フレームの内容に対して計算を行います。
ウィンドウ フレームの定義は行ベース (ROWS 指定 ) または値ベース (RANGE 指定 )
で行うことができます。
行ベースのウィンドウ フレーム
どのウィンドウ フレームの場合も、参照ポイントは現在の行になります。SQL
OLAP 構文は、行ベースのウィンドウ フレームを定義するためのメカニズムを提供
します。この構文では、現在の行の前後の行数を任意に指定できます。
次のダイアグラムでは、行 1 ∼ 5 は1つのパーティションを表します。OLAP ウィ
ンドウ フレームが前方にスライドするにつれ、各行が現在の行となります。ここで
フレームは現在の行から次の 2 行目までと定義されており、各フレームには最大で
3 行、最小で 1 行が含まれます。フレームがパーティションの末尾に達すると、現
在の行のみが含まれることになります。グレー部分は各ステップでフレームから除
外される行を示します。
1
現在の行
2
現在の行 +1
現在の行
3
現在の行 +2
現在の行 +1
現在の行
現在の行 +2
現在の行 +1
現在の行
現在の行 +2
現在の行 +1
4
5
現在の行
つまり、ここではウィンドウ フレームによって次の規則が課されます。
■
■
■
■
■
6-10
行 1 が現在の行の場合、行 4 と 行 5 が除外される
行 2 が現在の行の場合、行 5 と 行 1 が除外される
行 3 が現在の行の場合、行 1 と 行 2 が除外される
行 4 が現在の行の場合、行 1、2、3 が除外される
行 5 が現在の行の場合、行 1、2、3、4 が除外される
SQL Reference Guide
OVER 句
次の図では、これらの規則を具体的な値の集合に適用し、各行に対して計算される
OLAP AVG 関数を示します。ここではスライドしながら計算を行い、現在の行の位
置によって 3 つまたはそれ以下となる行の間隔に対して、移動平均を算出していま
す。
Row
Dimension
Measure
OLAP_AVG
1
A
10
53.3
2
A
50
90.0
3
A
100
240
4
A
120
5
A
500
}
310
}
500
このクエリの SQL 文は次のようになります。
select row_number() over() as row,
dimension,
measure,
avg(measure) over(partition by dimension
order by measure
rows between current row and 2 following) as olap_avg
from...
平均値は次のように計算されます。
■
■
■
■
■
Row 1 = (10 + 50 + 100)/3
Row 2 = (50+ 100 + 120)/3
Row 3 = (100 + 120 + 500)/3
Row 4 = (120 + 500)/2
Row 5 = (500)/1
リザルト セットの残りのすべてのパーティション (B、C、...) に対しても、同様の計
算が行われます。
値ベースのウィンドウ フレーム
行ベースのウィンドウ フレームの定義は数多くありますが、前の例ではその中の 1
つを紹介しました。SQL OLAP 構文では、特定の連続する行ではなく値ベース、つ
まり範囲ベースの行の集合に対して制限範囲を定義するウィンドウ フレームもサ
ポートしています。
分析関数
6-11
OVER 句
値ベースのウィンドウ フレームは、特定の範囲の数値を含むウィンドウ パーティ
ション内に行を定義します。OLAP 関数の ORDER BY 句は、RANGE 指定を適用す
る数値列を定義します。これは、その列の現在の行の値からの相対的な値で定義さ
れます。RANGE 指定は ROWS 指定と同じ構文を使用しますが、その解釈は異なり
ます。
たとえば、1 つのフレームを Year 値を持つ行の集合であると定義し、現在の行の年
の前または後の任意の年数を指定することができます。具体的には次のようになり
ます。
order by year asc range between current row and 1 preceding
1 preceding は現在の行の Year 値マイナス 1 を意味します。
この種の範囲指定では、範囲の両端の値が含まれます。現在の行の Year 値が 2000
の場合、パーティション内の行の物理的な位置に関係なく、Year 値が 2000 または
1999 であるウィンドウ パーティション内のすべての行がフレームに含まれること
になります。値ベースの行を含めたり除外したりするための規則は、行ベースのフ
レームに適用される規則とは大きく異なります。行ベースのフレームは行の物理的
な順序に完全に依存します。
次に OLAP AVG の計算について説明します。ここでは、次の部分的なリザルト
セットを使用して、値ベースのウィンドウ フレームの概念を説明します。前述のよ
うに、フレームは次の行で構成されています。
■
■
6-12
現在の行と同じ年を持つ行
現在の行から 1 を引いた年を持つ行
Row
Dimension
Year
Measure
Olap_Avg
1
A
1999
10000
10000
2
A
2001
5000
3000
3
A
2001
1000
3000
4
A
2002
12000
5250
5
A
2002
3000
5250
SQL Reference Guide
OVER 句
このクエリの SQL 文は次のようになります。
select row_number() over() as row,
dimension,
year,
measure,
avg(measure) over(partition by dimension
order by year asc
range between current row and 1 preceding)
as olap_avg
from...
平均値は次のように計算されます。
■
■
■
■
■
Row 1 = 1999、Row 2 ∼ 5 は除外、AVG = 10,000/1
Row 2 = 2001、Row 1、4、5 は除外、AVG = 6,000/2
Row 3 = 2001、Row 1、4、5 は除外、AVG = 6,000/2
Row 4 = 2002、Row 1 は除外、AVG = 21,000/4
Row 5 = 2002、Row 1 は除外、AVG = 21,000/4
ウィンドウ フレームの例については、6-30 ページを参照してください。
値ベースのフレームの昇順および降順
OLAP 関数の ORDER BY 句で値ベースのウィンドウ フレームを指定する場合、
RANGE 指定の対象となる数値列を識別するだけでなく、ORDER BY 値のソート順
も指定することになります。たとえば、次のような指定があるとします。
range between current row and n following
この指定は、先に行われるソート順 (ASC または DESC) の影響を受けます。n
following という指定は、次の意味を持ちます。
■
■
パーティションがデフォルトである昇順 (ASC) でソートされる場合、n を
加算
パーティションが降順 (DESC) でソートされる場合、n を減算
分析関数 6-13
OVER 句
たとえば、Year 列に 1999 ∼ 2002 の 4 つの異なる値がある場合を例に考えてみます。
次の表では、左にデフォルトである昇順、右に降順を示しています。
ORDER BY year ASC
ORDER BY year DESC
1999
2002
2000
2001
2001
2000
2002
1999
前の年
↕
次の年
現在の行が 1999 で、次のように指定されているとします。
order by year asc range between current row and 1 following
この場合、値 1999 および 2000 を持つ行がフレームに含まれます。一方、ソートが
降順で指定されるとします。
order by year desc range between current row and 1 following
この場合は、値 1999 および 1998 を持つ行がフレームに含まれます (1998 を持つ行
はこのテーブルに存在しません )。ORDER BY 値のソート順は、値ベースのフレー
ムで行を指定する場合に決定的な項目となります。数値のみで除外するか含めるか
は決定されません。
6-14
SQL Reference Guide
OLAP 関数の使用に関する基本規則
OLAP 関数の使用に関する基本規則
次の規則はサポートされているすべての OLAP 関数に適用されます。
■
■
OLAP 関数は、SQL クエリの次の部分で使用できます。
❑ 検索項目リストの中。
❑ 式の中。
❑ スカラ関数の引数。
❑ WHEN 句の中。
❑ 最後の ORDER BY 句の中 ( エイリアス、またはそのクエリ内の別の場
所にある OLAP 関数への位置参照を使用 )。
❑ BREAK BY...SUMMING 句を含むクエリの中。
❑ サブクエリの中。
OLAP 関数は、次の部分では使用できません。
❑ RISQL 表示関数と同じクエリの中。
❑ WHERE 句の検索条件の中。
❑ SET ( 集約 ) 関数の引数。たとえば、次の式は無効です。
sum(rank() over(order by dollars))
❑
■
■
同じクエリ ブロック内にあるほかの OLAP 関数の引数。ただし、サブ
クエリ ブロック内の OLAP 関数の結果は、外部のクエリ ブロック内
のほかの OLAP 関数から参照できます。
❑ 事前計算ビュー定義の中。ただし、OLAP 関数を含むクエリは、Vista
クエリ リライト システムでリライトできます。また、これらのリラ
イトに基づいて、候補ビューを生成できます。
OLAP 関数が参照する列は、グループ分けされた列か、OLAP 関数と
GROUP BY 句がある同じクエリ ブロックからの集約関数である必要があり
ます。OLAP 処理はグループ分け処理および集約処理の後で、最後の
ORDER BY 句が適用される前に行われます。したがって、それらの中間結
果を使用して OLAP 式を記述する必要があります。
GROUP BY 句がクエリ ブロックにない場合、OLAP 関数は検索項目リスト
内のほかの列を参照できます。
相関参照は OLAP 関数内で許可されていますが、相関列のエイリアスは許
可されていません。
個々の OLAP 関数の使用方法の注意点は、この章で後述している各構文の説明を参
照してください。
分析関数 6-15
RANK、DENSE_RANK、NTILE の構文
RANK、DENSE_RANK、NTILE の構文
RANK、DENSE_RANK、および NTILE は、IBM Red Brick Warehouse でサポートさ
れる OLAP 関数の順位付けファミリを構成します。これらの関数は、順位値の計算
に使用する列または式を定義している OVER 句内の ORDER BY 句に依存します。
PARTITION BY 句はオプションです。
RANK()
<window_order>
OVER (
DENSE_RANK()
)
<window_partition>
DENSERANK()
NTILE(<unsigned_constant>)
RANK()
OVER 句で必須の ORDER BY 式に基づいて、各行の順位
値を決定します。オプションの PARTITION BY 句も指定
している場合は、順位は行グループごとにリセットされま
す。同順位の行が 2 つ以上ある場合、次の順位値までは間
があきます。たとえば、2 つの行が 1 に順位付けされる
と、次の順位は 3 になります。
空のかっこを指定する必要があります。
DENSE_RANK()、
DENSERANK()
OVER 句で必須の ORDER BY 式に基づいて、各行の順位
値を決定します。オプションの PARTITION BY 句も指定
した場合は、順位は行グループごとにリセットされます。
DENSE_RANK 関数は、同順位の行が 2 つ以上ある場合も
次の順位値までの間があかない点が RANK 関数と異なり
ます同順位の行が 2 つ以上ある場合、次の順位値までは間
があきます。たとえば、2 つの行が 1 に順位付けされて
も、次の順位は 2 のままです。
DENSE_RANK と DENSERANK は同じ関数のシノニムで
です。空のかっこを指定する必要があります。
NTILE
3 分位、4 分位、100 分位など、順位値をレベル分けして
計算します。計算は、関数の引数 ( 符号なし定数 ) および
OVER 句で必須の ORDER BY 式に基づいて行われます。
たとえば、関数
ntile(100) over (order by dollars) は Dollar 列
の値に対して 100 分位での順位を計算します。
6-16
SQL Reference Guide
RANK、DENSE_RANK、NTILE の構文
(<unsigned_constant>)
NTILE 関数で必須です。第 2 章「SQL 言語の各要素」で
定義したように、符号なし整数定数を指定します。
OVER (
順位付け関数の window 句 (<window_partition> および
<window_order>) を指定します。OLAP 順位付け関数は
RISQL 順位付け関数とは異なり、OVER 句を使用できま
す。
<window_partition>
RANK、DENSE_RANK、NTILE 関数のオプションです。
6-17 ページを参照してください。
<window_order>)
RANK、DENSE_RANK、NTILE 関数で必須です。この句
は順位値の基準となる列または式を定義します。
6-17 ページを参照してください。
OLAP <window_partition> 句
次に OLAP 関数の <window_partition> 句の構文ダイアグラムを示します。
,
<expression>
PARTITION BY
PARTITION BY
OLAP 関数のウィンドウを 1 つ以上の式で定義します。
<expression>
第 3 章「式と条件」で定義したように、任意の有効な式を
指定します。
OLAP <window_order> 句
次に OLAP 関数の <window_order> 句の構文ダイアグラムを示します。
,
ORDER BY
<expression>
ASC
NULLS LAST
DESC
NULLS FIRST
分析関数 6-17
RANK、DENSE_RANK、NTILE の構文
ORDER BY
各パーティション内の行をソートします。パーティション
が指定されていない場合、この句は完全な中間リザルト
セットをソートします。ORDER BY 句は OLAP 関数の順
位付けファミリでは必須で、順位値の基準となる列を定義
します。この句は <window_frame> 句を含む、順位付けを
行わない OLAP 関数で必須です。
この句は COUNT (DISTINCT) などの DISTINCT キーワー
ドを含む OLAP 集約関数には使用できません。集約関数
は、6-24 ページを参照してください。
<expression>
ソート操作を行う 1 つ以上の列または式を定義します。第
3 章「式と条件」で定義したように、OLAP ORDER BY 句
には、有効であればどのような式でも記述できます。ただ
し、SELECT 文に追加できる通常の ORDER BY 句の定数
とは異なり、数値定数は位置を表す数値としては解釈され
ません。
値ベースのウィンドウ フレーム (RANGE 指定 ) を使用す
る OLAP 関数には 1 つの式のみを記述でき、この式は数値
式である必要があります。6-25 ページ を参照してくださ
い。
ASC
昇順を指定します ( デフォルト )。ORDER BY 列の最低値
は 1、最高値は n に順位付けされます。
DESC
降順を指定します。ORDER BY 句の最高値は 1、最低値は
n に順位付けされます。
NULLS FIRST、
NULLS LAST
ORDER BY の列の値を、NULL を含む行が最初 (1 に順位
付け ) または最後 (n に順位付け ) になるようにソートしま
す。昇順 ASC の場合 NULLS FIRST ( デフォルト )、降順
DESC の場合 NULLS LAST となります。
OLAP 順位付けの例
次の例は OLAP RANK、DENSE_RANK、NTILE 関数がどのように機能するかを示
しています。これに対応する RISQL RANK および NTILE の例は、この章で後述し
ます。
6-18
SQL Reference Guide
RANK、DENSE_RANK、NTILE の構文
RANK の例、上位 5 行
次のクエリは総売上高の製品ごとの順位付けを行います。WHEN 句は上位 5 行以外
をすべて削除するために使用します。この例ではパーティションが指定されていな
いため、順位は完全なリザルト セット全体に適用されます。
select prod_name, sum(dollars) as prod_sales,
rank() over(order by prod_sales desc) as prod_rank
from product join sales on sales.classkey = product.classkey
and sales.prodkey = product.prodkey
group by prod_name
when prod_rank <=5;
PROD_NAME
Demitasse Ms
Xalapa Lapa
NA Lite
Lotta Latte
Cafe Au Lait
PROD_SALES
PROD_RANK
656401.50
1
577450.00
2
557655.00
3
533454.50
4
526793.50
5
このクエリの OLAP ORDER BY 句は 2 つの主要な機能を実行しています。
■
■
順位値が割り当てられる列の値を指定します。この場合は Prod_Sales 列で
す。
降順のソート順 (DESC キーワード ) を指定します。ここでは Prod_Sales の
最高値に順位 1 が割り当てられます。
SQL 標準の OLAP 関数のデフォルトのソート順は昇順 (ASC キーワード )
です。デフォルトの順位付けでは順位 1 が最低売上額に割り当てられるた
め、DESC キーワードは重要です。
RISQL の順位付け関数では、より直観的な降順がデフォルトとなっていま
す。
この例に対応する RISQL クエリは、6-62 ページに記載しています。
分析関数 6-19
RANK、DENSE_RANK、NTILE の構文
DENSE_RANK の例
OLAP DENSE_RANK 関数により返される順位を理解するには、OLAP RANK 関数
により返される同等の値と比較するとよいでしょう。次のクエリでは両方の値セッ
トが返されます。ORDER BY 句に同順位の行が出現するまで、順位が同じであるこ
とに注意してください。同順位の行が出現すると、DENSE_RANK 関数は同順位の
行に同じ順位値を割り当てますが、次の順位値をスキップするわけではありませ
ん。
select date, prod_name, sum(dollars) as aroma_sales,
rank() over(order by sum(dollars) desc) as aroma_rank,
dense_rank() over(order by sum(dollars) desc) as
aroma_dense
from sales natural join period natural join product
where qtr = 'Q1_00' and prod_name like 'Aroma%'
group by date, prod_name;
DATE
2000-03-07
2000-02-27
2000-03-02
2000-01-30
2000-02-21
2000-02-09
2000-03-24
2000-03-09
2000-02-07
2000-01-14
2000-03-29
2000-03-31
2000-03-04
2000-02-01
2000-02-15
2000-03-13
2000-03-25
2000-02-05
2000-03-27
2000-02-08
2000-01-15
2000-03-28
2000-03-22
2000-02-26
2000-01-02
2000-02-17
2000-03-03
2000-02-02
2000-03-06
2000-01-22
...
6-20
SQL Reference Guide
PROD_NAME
Aroma Roma
Aroma Roma
Aroma Roma
Aroma Roma
Aroma Roma
Aroma Roma
Aroma Roma
Aroma Roma
Aroma Roma
Aroma Roma
Aroma Roma
Aroma Roma
Aroma Roma
Aroma Roma
Aroma Roma
Aroma Roma
Aroma Roma
Aroma Roma
Aroma Roma
Aroma Roma
Aroma Roma
Aroma Roma
Aroma Roma
Aroma Roma
Aroma Roma
Aroma Roma
Aroma Roma
Aroma Roma
Aroma Roma
Aroma Roma
AROMA_SALES AROMA_RANK AROMA_DENSE
1537.00
1
1
1457.25
2
2
1339.50
3
3
1261.50
4
4
1174.50
5
5
1152.75
6
6
1113.00
7
7
1109.25
8
8
1074.00
9
9
1057.50
10
10
1029.50
11
11
1022.25
12
12
1015.00
13
13
1000.50
14
14
993.25
15
15
971.50
16
16
964.25
17
17
935.25
18
18
928.00
19
19
913.50
20
20
884.50
21
21
884.50
21
21
877.25
23
22
870.00
24
23
855.50
25
24
855.50
25
24
848.25
27
25
841.00
28
26
833.75
29
27
813.75
30
28
RANK、DENSE_RANK、NTILE の構文
DENSE_RANK に対応する RISQL 関数はありません。RISQL RANK 関数は OLAP
RANK 関数と同じように同順位の行を扱います。
NTILE の例
次のクエリでは OLAP NTILE(5) 関数が CASE 式内に使用されています。CASE 式は
NTILE 順位 (1 ∼ 5) を 3 つの名前付きグループに再分類します。WHEN 句は中間リ
ザルト セットから上位 20 行のみを保持します。
select prod_name, date, dollars,
case ntile(5) over(order by dollars desc)
when 1 then 'top_20'
when 2 then 'mid_60'
when 3 then 'mid_60'
when 4 then 'mid_60'
when 5 then 'low_20'
end as n_rank
from sales natural join product
natural join period
natural join store
where year = 2000
and day = 'TH'
and store_name like 'Minnesota Roaster%'
when n_rank = 'top_20'
order by prod_name;
PROD_NAME
Colombiano
Demitasse Ms
NA Lite
NA Lite
Veracruzano
Veracruzano
DATE
DOLLARS
2000-02-03
276.75
2000-03-30
292.50
2000-01-06
396.00
2000-03-02
297.00
2000-01-13
360.00
2000-02-10
322.50
N_RANK
top_20
top_20
top_20
top_20
top_20
top_20
このセクションで前述した OLAP RANK の例と同様に、ORDER BY 句は決定的な項
目です。ここでも、高から低へ順位付けを行うには DESC キーワードを使用する必
要があります。
この例に対応する RISQL クエリは、6-58 ページ以降の NTILE 関数の説明で記載し
ています。
分析関数 6-21
ROW_NUMBER および ROWNUMBER の構文
ROW_NUMBER および ROWNUMBER の構文
ROW_NUMBER 関数は各 OLAP パーティションの各行の番号を返します。各パー
ティションの行番号は 1 で始まり、各行は同順位であるかないかに関係なく 1 ずつ
増加します。<window_partition> 句が指定されない場合、完全なリザルト セットに
対して 1 ∼ n の番号が付けられます。
<window_partition> および <window_order> 句はどちらもオプションですが、OVER()
キーワードとかっこは指定する必要があります。この関数自体は引数を必要としま
せんが、かっこは指定する必要があります。次のクエリは有効です。
select row_number() over() from table;
<window_order> 句が指定されない場合は、クエリで処理されるデフォルトの行順序
に従って行番号が割り当てられます。<window_order> 句が指定される場合は、
ORDER BY 指定により行番号の割り当てが決まります。
次にこの関数の完全な構文ダイアグラムを示します。
ROW_NUMBER()
)
OVER (
ROWNUMBER()
ROW_NUMBER()、
ROWNUMBER()
<window_partition>
<window_order>
現在のパーティション内の各行に一意の行番号を割り当て
ます。行番号は 1 から開始されます。
ROW_NUMBER および ROWNUMBER は同じ関数のシノ
ニムです。空のかっこは必須です。
6-22
OVER()
<window_partition> および <window_order> 句を指定しま
す。空の OVER() 句も有効です。
<window_partition>
6-17 ページ を参照してください。ROW_NUMBER 関数の
オプションです。
<window_order>
6-17 ページ を参照してください。ROW_NUMBER 関数の
オプションです。
SQL Reference Guide
ROW_NUMBER および ROWNUMBER の構文
ROW_NUMBER の例
次のクエリでは Product テーブル内の行をパッケージの種類によりパーティション
分割し、各パーティションで行番号を 1 から再開しています。
select rownumber() over(partition by pkg_type order by
prod_name)
as rownum, prod_name, pkg_type
from product;
ROWNUM
1
2
1
2
3
4
5
1
2
3
4
5
6
7
8
9
10
11
12
13
...
PROD_NAME
Aroma Sounds CD
Aroma Sounds Cassette
Christmas Sampler
Coffee Sampler
Easter Sampler Basket
Spice Sampler
Tea Sampler
Aroma Roma
Aroma baseball cap
Aroma t-shirt
Assam Gold Blend
Assam Grade A
Breakfast Blend
Cafe Au Lait
Coffee Mug
Colombiano
Darjeeling Number 1
Darjeeling Special
Demitasse Ms
Earl Grey
PKG_TYPE
Aroma designer box
Aroma designer box
Gift box
Gift box
Gift box
Gift box
Gift box
No pkg
No pkg
No pkg
No pkg
No pkg
No pkg
No pkg
No pkg
No pkg
No pkg
No pkg
No pkg
No pkg
<window_order> 句は Prod_Name 列を指定しているため、行番号は製品名のアル
ファベット順に基づいて付けられます。たとえば、No pkg パーティション内の 3 つ
の Aroma 製品には、1、2、3 の番号が付けられています。大文字は小文字より先に
ソートされることに注意してください。
使用上の注意
ROW_NUMBER 関数は簡略化した RANK 関数のようなもので、ORDER BY 句を必
要とせず、同順位を検出しません。ROW_NUMBER 関数は常に、各ウィンドウ
パーティション内の各列について、一意の値を返します。
この関数は各基本テーブルに存在する rbw_rownum 擬似列には関係しません。
分析関数 6-23
AVG、COUNT、MIN、MAX、SUM の構文
AVG、COUNT、MIN、MAX、SUM の構文
これらの OLAP 集約関数は、第 4 章で説明した SQL 集約関数と同じ名前を持ち、部
分的に同じ構文を使いますが、SQL 関数とは別のクラスに属します。次に、集約関
数を含む式をもとに OLAP 集約関数を使った式の構文ダイアグラムを示します。
<set_function>
)
OVER (
<window_partition>
<window_order>
<window_frame>
<set_function>
第 4 章「集約関数」で定義したように、AVG、COUNT、
MIN、MAX、SUM を含む式を指定します。
COUNT(DISTINCT) など、集約での DISTINCT の指定もサ
ポートされます。ただし、<window_order> 句はこれらの
DISTINCT 関数で使用できません。
6-24
OVER()
<window_partition>、<window_order>、<window_frame> な
ど、OLAP 関数の window 句を指定します。SQL OLAP 集
約関数は標準の SQL 集約関数とは異なり、OVER 句を使
用できます。
<window_partition>
6-17 ページを参照してください。AVG、COUNT、MIN、
MAX、SUM のオプションです。
<window_order>
6-17 ページを参照してください。AVG、COUNT、MIN、
MAX、SUM のオプションです。<window_frame> 句を指
定する場合は必須です。
<window_frame>
6-25 ページを参照してください。AVG、COUNT、MIN、
MAX、SUM のオプションです。
SQL Reference Guide
AVG、COUNT、MIN、MAX、SUM の構文
OLAP <window_frame> 句
<window_order> 句はウィンドウ フレームを定義する場合に必須です。ORDER BY
句はパーティションごとに各行の順序を決定し、ウィンドウ フレームはその順序に
対して適用されます。ウィンドウ フレームの概念的な説明は、6-30 ページを参照し
てください。
次に OLAP <window_frame> 句の構文ダイアグラムを示します。
ROWS
<frame_start>
RANGE
<frame_end>
<frame_between>
ROWS、RANGE
ウィンドウ フレームの種類を行ベース (ROWS) または値
ベース (RANGE) で定義します。<window_frame> 句の前に
は <window_order> 句が必要です。6-17 ページを参照して
ください。
行ベースのウィンドウフレームは、<frame_start>、
<frame_end> または <frame_between> の指定の基準となる
参照ポイントとして現在の行を使用することで、パーティ
ション内での正確な行数を定義します。
値ベースのウィンドウ フレームは、<window_order> 句、
および <frame_start>、<frame_end>、<frame_between> のい
ずれかで指定する基準を満たす行の集合を定義します。現
在の行は参照ポイントとして機能します。値ベースのウィ
ンドウ フレームの場合、<window_order> 句に含める式は 1
つだけにする必要があり、また、その式は数値式である必
要があります。
ウィンドウ フレームの一般的な説明は、6-10 ページを参
照してください。構文の例は、6-30 ページを参照してく
ださい。
<frame_start>
現在の行を基準として、ウィンドウ フレームの開始行 ( 下
端の行 ) を定義します。この場合、終了行 ( 上端の行 ) が
現在の行となります。6-26 ページを参照してください。
分析関数 6-25
AVG、COUNT、MIN、MAX、SUM の構文
<frame_end>
現在の行を基準として、ウィンドウ フレームの終了行 ( 上
端の行 ) を定義します。この場合、開始行 ( 下端の行 ) が
現在の行となります。6-27 ページを参照してください。
<frame_between>
現在の行を基準として、ウィンドウ フレームの開始行と
終了行を定義します。6-27 ページを参照してください。
<frame_start> 句
次に <frame_start> 句の構文ダイアグラムを示します。
UNBOUNDED PRECEDING
<unsigned_constant> PRECEDING
CURRENT ROW
UNBOUNDED
PRECEDING
パーティションの最初の行を開始行 ( 下端の行 ) に指定し
ます。
<unsigned_constant>
PRECEDING
現在の行から n 行前を行ベースの開始行に指定します。ま
たは、現在の行の ORDER BY 値に n を加算または減算し
た値の行を、値ベースの開始行とします。加算または減算
のどちらになるかは、ORDER BY 句のソート指定 (ASC ま
たは DESC) によって決まります。
CURRENT ROW
現在の行を開始行に指定します。
<frame_start> 句のみを指定した場合、ウィンドウ フレームの上端の行が現在の行と
なります。
6-26
SQL Reference Guide
AVG、COUNT、MIN、MAX、SUM の構文
<frame_end> 句
次に <frame_end> 句の構文ダイアグラムを示します。
UNBOUNDED FOLLOWING
<unsigned_constant> FOLLOWING
CURRENT ROW
UNBOUNDED
FOLLOWING
パーティションの最後の行を終了行 ( 上端の行 ) に指定し
ます。
<unsigned_constant>
FOLLOWING
現在の行から n 行後を行ベースの終了行に指定します。ま
たは、現在の行の ORDER BY 値に n を加算または減算し
た値の行を、値ベースの終了行とします。加算または減算
のどちらになるかは、ORDER BY 句のソート指定 (ASC ま
たは DESC) によって決まります。
CURRENT ROW
現在の行を終了行に指定します。
<frame_end> 句のみを指定した場合、ウィンドウ フレームの下端の行が現在の行と
なります。
<frame_between> 句
次に <frame_between> 句の構文ダイアグラムを示します。
BETWEEN
<frame_bound1>
<frame_bound1>、
<frame_bound2>
AND
<frame_bound2>
BETWEEN...AND キーワードで指定されたウィンドウ フ
レームの開始行 ( 下端の行 ) と終了行 ( 上端の行 ) を指定
します。
分析関数 6-27
AVG、COUNT、MIN、MAX、SUM の構文
<frame_bound1>
次に <frame_bound1> 句の構文ダイアグラムを示します。
UNBOUNDED PRECEDING
<unsigned_constant> PRECEDING
<unsigned_constant> FOLLOWING
CURRENT ROW
UNBOUNDED
PRECEDING
パーティションの最初の行を開始行に指定します。
<unsigned_constant>
PRECEDING
現在の行から n 行前を行ベースの開始行に指定します。ま
たは、現在の行の ORDER BY 値に n を加算または減算し
た値の行を、値ベースの開始行とします。加算または減算
のどちらになるかは、ORDER BY 句のソート指定 (ASC ま
たは DESC) によって決まります。
<unsigned_constant>
FOLLOWING
現在の行から n 行後を行ベースの開始行に指定します。ま
たは、現在の行の ORDER BY 値に n を加算または減算し
た値の行を、値ベースの開始行とします。加算または減算
のどちらになるかは、ORDER BY 句のソート指定 (ASC ま
たは DESC) によって決まります。
<frame_bound1> に FOLLOWING を指定する場合は、
<frame_bound2> に PRECEDING または CURRENT ROW は
指定できません。
CURRENT ROW
現在の行をウィンドウの上端または下端の行に指定しま
す。<frame_bound1> に CURRENT ROW を指定する場合
は、<frame_bound2> に PRECEDING は指定できません。
<frame_bound2>
次に <frame_bound2> 句の構文ダイアグラムを示します。
6-28
SQL Reference Guide
AVG、COUNT、MIN、MAX、SUM の構文
UNBOUNDED FOLLOWING
<unsigned_constant> PRECEDING
<unsigned_constant> FOLLOWING
CURRENT ROW
UNBOUNDED
FOLLOWING
パーティションの最後の行を終了行に指定します。
<unsigned_constant>
PRECEDING
現在の行から n 行前を行ベースの終了行に指定します。ま
たは、現在の行の ORDER BY 値に n を加算または減算し
た値の行を、値ベースの終了行とします。加算または減算
のどちらになるかは、ORDER BY 句のソート指定 (ASC ま
たは DESC) によって決まります。
<frame_bound1> に FOLLOWING または CURRENT ROW を
指定した場合は、<frame_bound2> に PRECEDING を指定
できません。
<unsigned_constant>
FOLLOWING
現在の行から n 行後を行ベースの終了行に指定します。ま
たは、現在の行の ORDER BY 値に n を加算または減算し
た値の行を、値ベースの終了行とします。加算または減算
のどちらになるかは、ORDER BY 句のソート指定 (ASC ま
たは DESC) によって決まります。
CURRENT ROW
現在の行を終了行に指定します。<frame_bound1> に
FOLLOWING を指定した場合は、<frame_bound2> に
CURRENT ROW は指定できません。
分析関数 6-29
AVG、COUNT、MIN、MAX、SUM の構文
行ベースのウィンドウ フレームの例
行ベースのウィンドウ フレームは現在の行とその前の数行で構成されます。フレー
ム内の前後の行数は、定数 (1、2、3 など ) または無制限として指定できます。無制
限の場合、パーティション内での現在の行の前または後のすべての行が対象となり
ます。
次の例は、各種ウィンドウ フレームを指定するメカニズムと、そのメカニズムがど
のように OLAP AVG 関数の計算に影響を与えるかを示しています。ウィンドウ フ
レームを使用したビジネス クエリの例は、6-40 ページ「OLAP 集約の例」を参照し
てください。
この例では、8 行 3 列の Points テーブルを使用します。
PLAYER
Smith
Singh
Ricci
Osaka
Baxter
Chun
Tran
Kwan
TEAM
A
A
B
B
B
C
D
D
POINTS
14
7
12
8
18
13
16
9
このテーブルは次の SQL 文を実行することで作成できます。
create table points
(player char(10),
team char(10),
points int);
insert
insert
insert
insert
insert
insert
insert
insert
6-30
SQL Reference Guide
into
into
into
into
into
into
into
into
points
points
points
points
points
points
points
points
values('Smith','A',14);
values('Singh','A',7);
values('Chun','C',13);
values('Osaka','B',8);
values('Ricci','B',12);
values('Baxter','B',18);
values('Kwan','D',9);
values('Tran','D',16);
AVG、COUNT、MIN、MAX、SUM の構文
ROWS UNBOUNDED PRECEDING は、現在の行とその前にあるパーティション内の
各行がフレームに含まれることを意味します。
RISQL> select team, player, points,
> avg(points) over(partition by team order by points desc
> rows unbounded preceding) as olap_avg
> from points;
TEAM
PLAYER
POINTS OLAP_AVG
A
Smith
14 14.00000000000
A
Singh
7 10.50000000000
B
Baxter
18 18.00000000000
B
Ricci
12 15.00000000000
B
Osaka
8 12.66666666666
C
Chun
13 13.00000000000
D
Tran
16 16.00000000000
D
Kwan
9 12.50000000000
この例と同じウィンドウ フレームを、次の <frame_between> 句でも表現できます。
rows between unbounded preceding and current row
この場合、Points 値にデフォルトの昇順ではなく降順を使用していることに注意し
てください。つまり、最も多くの得点を獲得したプレイヤーが各パーティションの
最初にソートされます。
ROWS n PRECEDING は、現在の行とその前にあるパーティション内の n 行がフ
レームに含まれることを意味します。この例では、ORDER BY 句にデフォルトの昇
順を使用しています。
select team, player, points,
avg(points) over(partition by team order by points
rows 1 preceding) as olap_avg
from points;
TEAM
A
A
B
B
B
C
D
D
PLAYER
Singh
Smith
Osaka
Ricci
Baxter
Chun
Kwan
Tran
POINTS
7
14
8
12
18
13
9
16
OLAP_AVG
7.00000000000
10.50000000000
8.00000000000
10.00000000000
15.00000000000
13.00000000000
9.00000000000
12.50000000000
この例と同じウィンドウ フレームを、次の <frame_between> 句でも表現できます。
rows between 1 preceding and current row
分析関数 6-31
AVG、COUNT、MIN、MAX、SUM の構文
ROWS BETWEEN n PRECEDING AND n FOLLOWING は、現在の行とその前の n 行、
および現在の行の後の n 行がフレームに含まれることを意味します。
select team, player, points,
avg(points) over(partition by team order by points
rows between 1 preceding and 1 following) as olap_avg
from points;
TEAM
PLAYER
POINTS OLAP_AVG
A
Singh
7 10.50000000000
A
Smith
14 10.50000000000
B
Osaka
8 10.00000000000
B
Ricci
12 12.66666666666
B
Baxter
18 15.00000000000
C
Chun
13 13.00000000000
D
Kwan
9 12.50000000000
D
Tran
16 12.50000000000
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING は、
パーティション内のすべての行がフレームに含まれることを意味します。
select team, player, points,
avg(points) over(partition by team order by points
rows between unbounded preceding and unbounded
following)
as olap_avg
from points;
TEAM
A
A
B
B
B
C
D
D
PLAYER
Singh
Smith
Osaka
Ricci
Baxter
Chun
Kwan
Tran
POINTS
7
14
8
12
18
13
9
16
OLAP_AVG
10.50000000000
10.50000000000
12.66666666666
12.66666666666
12.66666666666
13.00000000000
12.50000000000
12.50000000000
OLAP ORDER BY 句が指定されない場合、これはデフォルトのウィンドウ フレーム
です。実際この指定では、各パーティション内の各行の同じウィンドウ フレームに
対して、OLAP の計算が適用されることになります。
6-32
SQL Reference Guide
AVG、COUNT、MIN、MAX、SUM の構文
値ベースのウィンドウ フレームの例
次の例は、OLAP 関数に指定できる値ベースのウィンドウ フレームを示していま
す。この例では 4 列の Points_Age テーブルを使用します。このテーブルには Points
テーブルと同じデータに加えて、Age 列が含まれています。
PLAYER
Smith
Singh
Chun
Osaka
Ricci
Baxter
Kwan
Tran
AGE
26
25
21
35
40
27
22
31
TEAM
A
A
C
B
B
B
D
D
POINTS
14
7
13
8
12
18
9
16
このテーブルは次の SQL 文を実行することで作成できます。
create table points_age
(player char(10),
age int,
team char(10),
points int);
insert
insert
insert
insert
insert
insert
insert
insert
into
into
into
into
into
into
into
into
points_age
points_age
points_age
points_age
points_age
points_age
points_age
points_age
values('Smith', 26, 'A',14);
values('Singh', 25, 'A',7);
values('Chun', 21, 'C',13);
values('Osaka', 35, 'B',8);
values('Ricci', 40, 'B',12);
values('Baxter', 27, 'B',18);
values('Kwan', 22, 'D',9);
values('Tran', 31, 'D',16);
この例では、ORDER BY 列にデフォルトの昇順を使用します。Age 値は各パーティ
ション内で低から高の順に並びます。DESC キーワードを追加する場合は次のよう
になります。
order by age desc...
OLAP 関数の結果は、昇順と降順のどちらを指定するかによって異なります。
分析関数 6-33
AVG、COUNT、MIN、MAX、SUM の構文
次の例では、現在の行の年齢に 9 を足した年齢までがウィンドウ フレームに指定さ
れています。
select player, age, team, points,
avg(points) over(partition by team order by age
range between current row and 9 following) as olap_avg
from points_age;
PLAYER
Singh
Smith
Baxter
Osaka
Ricci
Chun
Kwan
Tran
AGE
25
26
27
35
40
21
22
31
TEAM
A
A
B
B
B
C
D
D
POINTS
7
14
18
8
12
13
9
16
OLAP_AVG
10.50000000000
14.00000000000
13.00000000000
10.00000000000
12.00000000000
13.00000000000
12.50000000000
16.00000000000
パーティション D の Kwan の平均値は Tran の得点を考慮したものであることに注意
してください。両者の年齢は指定された値ベースの範囲内にあります。パーティ
ション B では、Baxter の平均値に 8 才上の Osaka の得点が含まれていますが、13 才
上の Ricci の得点は含まれていません。
次の例では、現在の行の年齢から 3 を引いた年齢までがウィンドウ フレームに指定
されています。
select player, age, team, points,
avg(points) over(partition by team order by age
range between 3 preceding and current row) as olap_avg
from points_age;
PLAYER
Singh
Smith
Baxter
Osaka
Ricci
Chun
Kwan
Tran
AGE
25
26
27
35
40
21
22
31
TEAM
A
A
B
B
B
C
D
D
POINTS
7
14
18
8
12
13
9
16
OLAP_AVG
7.00000000000
10.50000000000
18.00000000000
8.00000000000
12.00000000000
13.00000000000
9.00000000000
16.00000000000
パーティション A の Smith の平均値は前の行の Singh の得点を考慮したものである
ことに注意してください。両者の年齢は指定の範囲内にあります。この例にあるほ
かのすべての行については、現在の行以外は平均値の計算から除外されます。
6-34
SQL Reference Guide
AVG、COUNT、MIN、MAX、SUM の構文
次の例では、現在の行の年齢から 1 を引いた年齢から現在の行の年齢に 1 を足した
年齢までが、ウィンドウ フレームに指定されています。
select player, age, team, points,
avg(points) over(partition by team order by age
range between 1 preceding and 1 following) as olap_avg
from points_age;
PLAYER
AGE TEAM
POINTS OLAP_AVG
Singh
25 A
7 10.50000000000
Smith
26 A
14 10.50000000000
Baxter
27 B
18 18.00000000000
Osaka
35 B
8 8.00000000000
Ricci
40 B
12 12.00000000000
Chun
21 C
13 13.00000000000
Kwan
22 D
9 9.00000000000
Tran
31 D
16 16.00000000000
パーティション A の Singh と Smith の平均が同じであることに注意してください。
Singh が現在の行の場合、Smith はフレームに含まれます (26 = 1 才上 )。Smith が現
在の行の場合、Singh はフレームに含まれます (25 = 1 才下 )。この例にあるほかのす
べての行については、現在の行以外は平均値の計算から除外されます。
分析関数 6-35
AVG、COUNT、MIN、MAX、SUM の構文
リードおよびラグ ウィンドウ フレーム
次の形式でウィンドウ フレームを指定することで、SQL OLAP LEAD および LAG 関
数の機能をエミュレートできます。
rows between 1 preceding and 1 preceding
rows between 2 preceding and 1 preceding
rows between 1 following and 3 following
これらのウィンドウ フレームには現在の行が含まれず、現在の行の OLAP 関数は現
在の行の前の行の集合 ( ラグ ) または後の行の集合 ( リード ) に基づきます。たとえ
ば次のクエリでは、現在の行の前にあるパーティション内の 2 行に対して、Points
列の値で OLAP 平均値を計算しています。
RISQL> select player, age, team, points,
avg(points) over(partition by team order by age
rows between 2 preceding and 1 preceding) as olap_avg
from points_age;
PLAYER
AGE TEAM
POINTS
OLAP_AVG
Singh
25 A
7
NULL
Smith
26 A
14
7.00000000000
Baxter
27 B
18
NULL
Osaka
35 B
8
18.00000000000
Ricci
40 B
12
13.00000000000
Chun
21 C
13
NULL
Kwan
22 D
9
NULL
Tran
31 D
16
9.00000000000
パーティション B では、Ricci の平均値は Baxter および Osaka の Points 合計から計算
しています ((18 + 8 = 26)/2 = 13)。現在の行に前の行が存在せず、計算に使用できな
い場合、OLAP 関数は NULL を返します。
6-36
SQL Reference Guide
AVG、COUNT、MIN、MAX、SUM の構文
NULLS FIRST および NULLS LAST の例
次の例は OLAP ORDER BY 句に NULLS FIRST および NULLS LAST を設定した場合
の動作を示しています。この動作を示すため、2 つの新しい行を Points_Age テーブ
ルに挿入します。
RISQL> insert into points_age values('Scofield', NULL,
'A',15);
RISQL> insert into points_age values('Guinness', NULL,
'C',10);
次は ORDER BY 句に NULLS FIRST が指定されている場合の例です。
RISQL> select player, age, team, points,
> avg(points) over(partition by team order by age nulls first
> rows between 1 preceding and 1 following) as olap_avg
> from points_age;
PLAYER
AGE TEAM
POINTS OLAP_AVG
Scofield
NULL A
15 11.00000000000
Singh
25 A
7 12.00000000000
Smith
26 A
14 10.50000000000
Baxter
27 B
18 13.00000000000
Osaka
35 B
8 12.66666666666
Ricci
40 B
12 10.00000000000
Guinness
NULL C
10 11.50000000000
Chun
21 C
13 11.50000000000
Kwan
22 D
9 12.50000000000
Tran
31 D
16 12.50000000000
同じクエリに NULLS LAST ( デフォルト ) を指定した場合は、次のようになります。
RISQL> select player, age, team, points,
> avg(points) over(partition by team order by age nulls last
> rows between 1 preceding and 1 following) as olap_avg
> from points_age;
PLAYER
AGE TEAM
POINTS OLAP_AVG
Singh
25 A
7 10.50000000000
Smith
26 A
14 12.00000000000
Scofield
NULL A
15 14.50000000000
Baxter
27 B
18 13.00000000000
Osaka
35 B
8 12.66666666666
Ricci
40 B
12 10.00000000000
Chun
21 C
13 11.50000000000
Guinness
NULL C
10 11.50000000000
Kwan
22 D
9 12.50000000000
Tran
31 D
16 12.50000000000
NULL ORDER BY 値での行の配置方法によって、OLAP の平均値計算結果が各パー
ティション内でどのように変化するかに注意してください。
分析関数 6-37
AVG、COUNT、MIN、MAX、SUM の構文
OLAP 集約の使用上の注意
次の規則は SQL 標準に準拠しています。
集約関数は OLAP 集約関数で入れ子にすることができます。たとえば、次のクエリ
は有効です。
select avg(sum(dollars)) over() from sales;
ここで SUM 関数は集約関数であり、これを囲む AVG 関数は OLAP 関数です。クエ
リの処理順としては、OLAP 関数の計算は常にグループ分けと集約操作の後、最後
の ORDER BY 操作の前に実行されます。
OLAP 集約関数の OVER 句が空の場合、または OVER 句に <window_partition> のみ
が指定されている場合、OLAP の計算は各パーティション内の各行について、同じ
デフォルトのウィンドウ フレームに対して適用されます。したがって、OLAP 関数
の結果は、パーティション内の各行で同じになります。たとえば、次のようになり
ます。
select player, team, age, points,
sum(points) over(partition by team) as olap_sum
from points_age;
PLAYER
Smith
Singh
Ricci
Osaka
Baxter
Chun
Tran
Kwan
TEAM
A
A
B
B
B
C
D
D
AGE POINTS OLAP_SUM
26
14
21
25
7
21
40
12
38
35
8
38
27
18
38
21
13
13
31
16
25
22
9
25
<window_order> 句はあるが <window_frame> 句がない OLAP 集約関数では、デフォ
ルトの値ベースのフレームが使用され、次のように指定した場合と同じになりま
す。
range between unbounded preceding and current row
6-38
SQL Reference Guide
AVG、COUNT、MIN、MAX、SUM の構文
たとえば、次のようになります。
select player, team, age, points,
sum(points) over(order by team) as olap_sum
from points_age;
PLAYER
Smith
Singh
Ricci
Osaka
Baxter
Chun
Tran
Kwan
TEAM
A
A
B
B
B
C
D
D
AGE POINTS OLAP_SUM
26
14
21
25
7
21
40
12
59
35
8
59
27
18
59
21
13
72
31
16
97
22
9
97
この動作により累積合計が計算されますが、同一の ORDER BY 値を持つ行には同じ
累積合計が割り当てられます。
分析関数 6-39
AVG、COUNT、MIN、MAX、SUM の構文
OLAP 集約の例
次の例で、累積合計と移動平均などのさまざまな OLAP 集約がどのように計算され
るかを示します。
累積合計
次のクエリは与えられた期間における製品売上の累積合計を計算します。OLAP
SUM 関数は累積合計を計算するために使用されます。この例に対応する RISQL ク
エリは、6-48 ページ以降の CUME 関数の説明で記載しています。
select prod_name, store_name, date,
sum(quantity) over(order by date rows unbounded
preceding)
as run_total
from sales natural join period natural join product
natural join store
where day = 'FR'
and year = 2000
and qtr = 'Q1_00'
and prod_name = 'Aroma baseball cap'
order by date
PROD_NAME
Aroma baseball
Aroma baseball
Aroma baseball
Aroma baseball
Aroma baseball
Aroma baseball
cap
cap
cap
cap
cap
cap
STORE_NAME
San Jose Roasting Company
Miami Espresso
Olympic Coffee Company
San Jose Roasting Company
San Jose Roasting Company
Beaches Brew
DATE
2000-02-11
2000-02-18
2000-03-03
2000-03-17
2000-03-24
2000-03-24
RUN_TOTAL
2
10
24
30
44
48
このクエリでは、ウィンドウ フレームを次のように指定しています。
rows unbounded preceding
この行ベースのウィンドウ フレームは、各パーティション内の完全な行の集合 ( 現
在の行とその前にあるすべての行 ) で構成されます。したがって、累積合計は行ご
とに増加します。同じウィンドウ フレームを、BETWEEN...AND を使用して次のよ
うに表現することもできます。
rows between unbounded preceding and current row
6-40
SQL Reference Guide
AVG、COUNT、MIN、MAX、SUM の構文
累積合計のリセット
次の例は、SUM 関数に OLAP パーティションを使用して、累積合計を計算およびリ
セットする方法を示しています。製品名が変わるときに PROD_TOTAL 列がリセッ
トされることに注意してください。
select prod_name, city, sum(dollars) as prod_dol,
sum(sum(dollars))
over(partition by prod_name order by prod_name, city
rows
unbounded preceding) as prod_total,
sum(sum(dollars))
over(order by prod_name, city rows unbounded
preceding)
as run_total
from sales natural join product
natural join period
natural join store
natural join market
where year = 1999
and district like 'Chicago%'
group by prod_name, city
order by prod_name, city;
PROD_NAME
Aroma Roma
Aroma Roma
Cafe Au Lait
Cafe Au Lait
Colombiano
Colombiano
Demitasse Ms
Demitasse Ms
Expresso XO
Expresso XO
La Antigua
La Antigua
Lotta Latte
Lotta Latte
NA Lite
NA Lite
Veracruzano
Veracruzano
Xalapa Lapa
Xalapa Lapa
CITY
Chicago
Detroit
Chicago
Detroit
Chicago
Detroit
Chicago
Detroit
Chicago
Detroit
Chicago
Detroit
Chicago
Detroit
Chicago
Detroit
Chicago
Detroit
Chicago
Detroit
PROD_DOL PROD_TOTAL RUN_TOTAL
13188.50
13188.50 13188.50
12820.75
26009.25 26009.25
17394.50
17394.50 43403.75
15737.50
33132.00 59141.25
10544.25
10544.25 69685.50
11104.75
21649.00 80790.25
16960.50
16960.50 97750.75
17264.00
34224.50 115014.75
10494.75
10494.75 125509.50
11644.75
22139.50 137154.25
11774.00
11774.00 148928.25
13949.00
25723.00 162877.25
16402.00
16402.00 179279.25
10940.50
27342.50 190219.75
11864.00
11864.00 202083.75
14931.00
26795.00 217014.75
9561.00
9561.00 226575.75
11764.00
21325.00 238339.75
13079.50
13079.50 251419.25
16747.00
29826.50 268166.25
この例は、7-59 ページの RESET BY 句の説明で使用している RISQL の例に対応し
ています。
分析関数 6-41
AVG、COUNT、MIN、MAX、SUM の構文
移動平均
次の例は、OLAP AVG 関数を使用して移動平均を計算する方法を示しています。
select month, quantity,
dec(avg(quantity)
over(order by sales.perkey desc rows 2 following),7,2)
as mv_avg
from sales natural join period natural join promotion
where month in ('DEC', 'APR')
and sales.promokey in (1001, 1002, 2001, 2002)
order by sales.perkey;
MONTH QUANTITY
MV_AVG
APR
16
16.00
APR
13
14.50
APR
17
15.33
APR
7
12.33
APR
14
12.66
APR
7
9.33
APR
13
11.33
APR
18
12.66
APR
4
11.66
APR
17
13.00
DEC
4
8.33
DEC
12
11.00
DEC
7
7.66
APR
1
6.66
APR
8
5.33
...
移動平均の行範囲は 3 行で、ここでは次のように表現されています。
rows 2 following
同じウィンドウ フレームを次のように表現することもできます。
rows between current row and 2 following
この例に対応する RISQL クエリは、6-52 ページ以降の MOVINGAVG 関数の説明で
記載しています。
6-42
SQL Reference Guide
AVG、COUNT、MIN、MAX、SUM の構文
値ベースのウィンドウ フレームを使用した OLAP SUM 関数
次の例で、OLAP の機能が RISQL 表示関数で使用できる機能よりも強力である場合
を示します。
このクエリは OLAP SUM 関数に値ベースのウィンドウ フレームを使用し、Dollars
列の値で 7 日間 ( 現在の行の 3 日前から現在の行の 3 日後まで ) の売上合計を計算し
ています。リザルト セットは Prod_Name および Store_Name 列でパーティション分
割されます。OLAP ORDER BY 句に EXTRACT 関数が使用されていることに注意し
てください。この関数は日付の値を数値データ型で返します。値ベースのフレーム
の ORDER BY 句には、1 つの数値列のみを指定する必要があります。
select date, prod_name, store_name, dollars,
sum(dollars) over(partition by prod_name, store_name
order by extract(day from date)
range between 3 preceding and 3 following) as olap_sum
from sales natural join store
natural join period
natural join product
where month = 'MAR' and year = 2000 and prod_name = 'Earl Grey'
group by date, prod_name, store_name, dollars
order by store_name;
DATE
2000-03-04
2000-03-05
2000-03-05
2000-03-08
2000-03-12
2000-03-15
2000-03-18
2000-03-24
2000-03-26
2000-03-28
2000-03-31
2000-03-05
2000-03-06
2000-03-08
2000-03-09
2000-03-22
2000-03-29
2000-03-30
2000-03-01
2000-03-06
2000-03-07
2000-03-08
2000-03-10
2000-03-11
2000-03-17
2000-03-17
2000-03-18
2000-03-28
2000-03-30
...
PROD_NAME
Earl Grey
Earl Grey
Earl Grey
Earl Grey
Earl Grey
Earl Grey
Earl Grey
Earl Grey
Earl Grey
Earl Grey
Earl Grey
Earl Grey
Earl Grey
Earl Grey
Earl Grey
Earl Grey
Earl Grey
Earl Grey
Earl Grey
Earl Grey
Earl Grey
Earl Grey
Earl Grey
Earl Grey
Earl Grey
Earl Grey
Earl Grey
Earl Grey
Earl Grey
STORE_NAME
Beaches Brew
Beaches Brew
Beaches Brew
Beaches Brew
Beaches Brew
Beaches Brew
Beaches Brew
Beaches Brew
Beaches Brew
Beaches Brew
Beaches Brew
Beans of Boston
Beans of Boston
Beans of Boston
Beans of Boston
Beans of Boston
Beans of Boston
Beans of Boston
Coffee Brewers
Coffee Brewers
Coffee Brewers
Coffee Brewers
Coffee Brewers
Coffee Brewers
Coffee Brewers
Coffee Brewers
Coffee Brewers
Coffee Brewers
Coffee Brewers
DOLLARS OLAP_SUM
24.50
90.50
24.00
153.50
42.00
153.50
63.00
129.00
56.00
68.00
12.00
96.00
28.00
40.00
56.00
108.50
52.50
161.00
52.50
161.00
56.00
108.50
20.00
71.50
7.50
123.50
44.00
123.50
52.00
103.50
56.00
56.00
28.00
60.00
32.00
60.00
21.00
21.00
66.50
143.50
35.00
183.50
42.00
235.50
40.00
169.00
52.00
134.00
44.00
64.50
17.50
64.50
3.00
64.50
28.00
119.50
32.00
119.50
分析関数 6-43
RATIO_TO_REPORT および RATIOTOREPORT の構文
RATIO_TO_REPORT および RATIOTOREPORT の
構文
RATIO_TO_REPORT と RATIOTOREPORT は同じ関数のシノニムです。値グループ
の合計値に対する値の比率を計算します。値グループとして扱うのは、完全なリザ
ルト セットまたは OVER 句で指定したパーティションです。OVER 句はオプション
で、次のクエリは有効となります。
select ratio_to_report(expression) over() from table;
RATIO_TO_REPORT(<expression>)
OVER (
<window_partition>
RATIOTOREPORT(<expression>)
)
<window_order>
<window_frame>
RATIOTOREPORT、
RATIO_TO_REPORT
関数の引数に基づいて、パーティション内の残りの行に対
する各行の比率を計算し、小数で表します。
<window_partition>、<window_order>、および
<window_frame> 句はオプションであり、パーティション
分割後の行、または完全なリザルト セットに対して比率
の計算を行うことができます。
RATIO_TO_REPORT と RATIOTOREPORT は同じ関数のシ
ノニムです。
6-44
<expression>
第 3 章「式と条件」で定義したように、有効な数値式を指
定します。この式は必須です。ここから RISQL 表示関数
および OLAP 関数は参照できません。
OVER()
<window_partition>、<window_order>、<window_frame> 句
を指定します。OLAP RATIOTOREPORT 関数は RISQL
RATIOTOREPORT 関数とは異なり、OVER 句を使用でき
ます。空の OVER() 句は許可されますが、OVER キーワー
ドとかっこは指定する必要があります。
SQL Reference Guide
RATIO_TO_REPORT および RATIOTOREPORT の構文
<window_partition>
6-17 ページを参照してください。RATIOTOREPORT のオ
プションです。
<window_order>
6-17 ページを参照してください。RATIOTOREPORT のオ
プションです。
<window_frame>
6-25 ページを参照してください。RATIOTOREPORT のオ
プションです。
使用上の注意
SUM や MAX などの OLAP 集約関数の OVER 句が空の場合、または OVER 句に
<window_partition> のみが指定されている場合、OLAP 関数の結果はパーティション
内の各行に対して同じになります。これは RATIOTOREPORT の場合には当てはま
りません。RATIOTOREPORT の場合はパーティション内の各行に異なる比率が割り
当てられ、パーティション全体で約 1 となります。百分率で比率を出すには、次の
例のように関数に 100 を掛けます。
分析関数 6-45
RATIO_TO_REPORT および RATIOTOREPORT の構文
OLAP RATIOTOREPORT の例
次の例では、すべての市の総売上高に対する各市の売上の比率を計算しています。
値は小数で表されます。
select city, sum(dollars) as sales,
ratiotoreport(sales) over() *100 as ratio_dollars
from sales natural join store natural join period
group by city
order by sales desc;
CITY
San Jose
Atlanta
Miami
Los Angeles
Phoenix
New Orleans
Cupertino
Boston
Houston
New York
Los Gatos
Philadelphia
Milwaukee
Detroit
Chicago
Hartford
Minneapolis
SALES
896931.15
514830.00
507022.35
503493.10
437863.00
429637.75
424215.00
421205.75
417261.00
397102.50
394086.50
392377.75
389378.25
305859.75
294982.75
236772.75
165330.75
RATIO_DOLLARS
12.58
7.22
7.11
7.06
6.14
6.03
5.95
5.91
5.85
5.57
5.53
5.50
5.46
4.29
4.14
3.32
2.32
この例に対応する RISQL クエリは、6-66 ページ以降の RATIOTOREPORT 関数の説
明の中で記載しています。
6-46
SQL Reference Guide
RISQL 表示関数
RISQL 表示関数
RISQL 表示関数は、ビジネス関連のクエリでよく使用されるような順次計算を、行
の集合に対して実行します。たとえば、次の関数は、行の集合の各行について累積
合計を返します。
CUME(dollars)
次の表は、各 RISQL 表示関数の一覧です。
機能
説明
CUME
累積合計 ( 総額 ) を計算します。
MOVINGAVG
移動平均 (<n> 行ごとの平均 ) を計算します。
MOVINGSUM
移動合計 (<n> 行ごとの合計 ) を計算します。
NTILE
<n> レベルに値をグループ分けします。
RANK
順位を決定します。
RATIOTOREPORT
合計に対する部分の比率を計算します。
TERTILE
3 レベル ( 上位、中位、下位 ) に値をグループ分けします。
RISQL 表示関数を使ったクエリの詳しい例は、『SQL Self-Study Guide』を参照して
ください。
SQL クエリでは、RISQL 表示関数を次の場所で使用できます。
■
■
■
■
■
検索項目リストの中。
式の中。
スカラ関数の引数。
WHEN 句の条件の中。
サブクエリの中。
表示関数は、次の場所では使用できません。
■
■
■
OLAP 関数と同じクエリの中。
WHERE 句の検索条件の中。
SET 関数 ( 集約関数 ) や、ほかの表示関数の引数。たとえば、次の式は無効
です。
cume(rank(sales))
sum(rank(sales))
ただし、表示関数の引数としては SET 関数を使用できます。
分析関数 6-47
CUME
CUME
CUME 関数は、行集合の ( 現在の行を含む ) 各行について累積合計を計算します。
ORDER BY 句に RESET BY サブ句を指定すると、累積合計を 0 にリセットできま
す。
構文
次に CUME 関数を使った式の構文ダイアグラムを示します。
CUME
(
<n_expression>
)
<n_expression> 数値である必要があります。また、ほかの表示関数を参照すること
はできません。
結果
現在の行とそれ以前の行について、指定した引数の累積合計を計算します。不定値
と NULL は無視されます。戻り値は、行の順序に依存するため注意が必要です。
6-50 ページ「リザルト セットの並び順」を参照してください。
<n_expression> のデータ型が指数表現を使用しないデータ型 (TINYINT、
SMALLINT、INTEGER、SERIAL、DECIMAL) の場合は、戻り値も指数表現を使用
しないデータ型になります。結果データ型の精度は 6 桁増やされます。これは割り
当てられた格納領域に納めるためです。
6-48
SQL Reference Guide
CUME
次の表は、<n_expression> のデータ型に応じて CUME 関数が返すデータ型の一覧で
す。
<n_expression> のデータ型
結果のデータ型
TINYINT
DECIMAL(9,0)
SMALLINT
DECIMAL(11,0)
INTEGER
DECIMAL(16,0)
SERIAL
DECIMAL(16,0)
DECIMAL
NUMERIC
DECIMAL(p,s)
p = min(38, <n_expression> の精度 + 6)
s = <n_expression> のスケール
REAL
REAL
FLOAT
DOUBLE PRECISION
FLOAT
DOUBLE PRECISION
RESET BY
7-55 ページ に示すように、ORDER BY 句に RESET BY サブ句を指定すると、指定
した列値が変わるときに累積合計を 0 にリセットできます。
例
次の式は、現在の行とそれ以前の行の Dollars 列の値を合計して 1000 ドル単位で返
します。
cume(dollars/1000)
分析関数 6-49
CUME
次のクエリは、2000 年第 1 四半期の金曜日に販売した Aroma baseball cap の販売総量
の累計合計を返します。ORDER BY 句が指定されているため、日付 (Date 列の値 )
の古い順にリザルト セットがソートされます。
select prod_name, store_name, date,
cume(quantity) as run_total
from sales natural join period natural join product
natural join store
where day = 'FR'
and year = 2000
and qtr = 'Q1_00'
and prod_name = 'Aroma baseball cap'
order by date
PROD_NAME
Aroma baseball
Aroma baseball
Aroma baseball
Aroma baseball
Aroma baseball
Aroma baseball
cap
cap
cap
cap
cap
cap
STORE_NAME
San Jose Roasting Company
Miami Espresso
Olympic Coffee Company
San Jose Roasting Company
San Jose Roasting Company
Beaches Brew
DATE
2000-02-11
2000-02-18
2000-03-03
2000-03-17
2000-03-24
2000-03-24
RUN_TOTAL
2
10
24
30
44
48
リザルト セットの並び順
次の関数の結果は、これらの関数を使用するクエリで ORDER BY 句が使用されなけ
れば、正確に、または整合性を持って計算されないことがあります。
■
■
■
CUME
MOVINGAVG
MOVINGSUM
ORDER BY 句を使用すると、表示関数による値の計算は、表示関数の引数である数
値式の値の集合が一貫してソートされた結果に基づいて行われることになります。
CUME、MOVINGSUM、MOVINGAVG 関数を使用するクエリ式の結果が (UNION ク
エリの場合のように ) ほかのクエリ式の結果と統合される場合、ORDER BY 句はク
エリ全体の結果に適用されます。したがって、最初のクエリ式の中の表示関数によ
り計算される値は、ソートされた行集合にはなりません。このとき、ORDER BY 句
は 2 つのクエリ式が統合されてから初めて適用されます。このため、複数のクエリ
式を含むクエリに CUME、MOVNGSUM、MOVINGAVG 関数を使用することは、実
用的ではありません。
6-50
SQL Reference Guide
CUME
たとえば、次のクエリは、最初のクエリ式の結果のソート方法によっては、
Cume_Sales 列に関して予期せぬ結果を返すことがあります。
select qtr, sum(dollars) as total_sales,
cume(sum(dollars)) as cume_sales
from sales_west natural join period
group by qtr
union
select qtr, sum(dollars) as total_sales,
cume(sum(dollars)) as cume_sales
from sales_east natural join period
group by qtr
order by total_sales asc;
同様に、ビューで指定したクエリ式に表示関数を使用することができますが、その
クエリ式に ORDER BY 句を使用することはできません。したがって、ビュー定義に
CUME、MOVINGSUM、MOVINGAVG 関数を使用するのは、実用的ではありませ
ん。ビューの詳細は、8-163 ページ「CREATE VIEW」を参照してください。
分析関数 6-51
MOVINGAVG
MOVINGAVG
MOVINGAVG 関数は、指定した値集合に対して、指定した行数の移動平均を計算し
ます。
関数
次に MOVINGAVG 関数を使った式の構文ダイアグラムを示します。
MOVINGAVG
(
<n_expression>
, <integer>
)
<n_expression>、<integer>第 1 引数は数値、第 2 引数は正の整数である必要がありま
す。<n_expression> は、ほかの表示関数を参照することは
できません。
結果
行ごとに、現在の行とその前にある <integer>-1 行の <n_expression> の平均として移
動平均を返します。
<integer> で指定した行数だけ NULL が連続すると、NULL が返されます。最初の移
動平均を計算するための十分な行が処理されるまで、先頭の <integer> -1 行には、
NULL が表示されます。戻り値は、行の順序に依存するため注意が必要です。
6-50 ページ「リザルト セットの並び順」を参照してください。
<n_expression> のデータ型が指数表現を使用しないデータ型 (TINYINT、
SMALLINT、INTEGER、DECIMAL) の場合は、戻り値も指数表現を使用しない
データ型になります。結果データ型の精度とスケールは、小数点より左の桁数はそ
のままで、小数点より右の桁数が 6 桁増やされます。これは、MOVINGAVG 関数の
戻り値が非常に小さくなっても、結果データ型の有効桁数に納めるようにするため
です。
6-52
SQL Reference Guide
MOVINGAVG
次の表は、<n_expression> のデータ型に応じて MOVINGAVG 関数が返すデータ型の
一覧です。
<n_expression> のデータ型
結果のデータ型
TINYINT
DECIMAL(9,6)
SMALLINT
DECIMAL(11,6)
INTEGER
DECIMAL(16,6)
SERIAL
Decimal (16,0)
DECIMAL
NUMERIC
DECIMAL(p,s)
p = min(38, <n_expression> の精度 + 6)
s = min(6, 38 - <n_expression> の精度 )
REAL
REAL
FLOAT
DOUBLE PRECISION
FLOAT
DOUBLE PRECISION
RESET BY
7-55 ページ に示すように、ORDER BY 句に RESET BY サブ句を指定すると、値集
合が変わるときに移動平均を 0 にリセットできます。
例
次の式は、現在の行とその前にある 5 行の Dollars 列の値の平均値を計算し、Dollars
列の移動平均として返します。
movingavg(dollars,6)
分析関数 6-53
MOVINGAVG
次のクエリは、Quantity 列の移動合計を返します。MOVINGAVG の結果が DEC ス
カラ関数で指定された桁数を超えた場合は切り捨てられます。
select month, quantity, dec(movingavg(quantity, 3),7,2)
from sales natural join period natural join promotion
where month in ('DEC', 'APR')
and sales.promokey in (1001, 1002, 2001, 2002)
order by sales.perkey
MONTH
APR
APR
APR
APR
APR
APR
APR
APR
APR
APR
DEC
DEC
DEC
APR
APR
...
6-54
SQL Reference Guide
QUANTITY
16
13
17
7
14
7
13
18
4
17
4
12
7
1
8
MV_AVG
NULL
NULL
15.33
12.33
12.66
9.33
11.33
12.66
11.66
13.00
8.33
11.00
7.66
6.66
5.33
MOVINGSUM
MOVINGSUM
MOVINGSUM 関数は、指定した値集合に対して、指定した行数の移動合計を計算
します。
構文
次に MOVINGSUM 関数を使った式の構文ダイアグラムを示します。
MOVINGSUM
(
<n_expression>
, <integer>
)
<n_expression>、<integer>第 1 引数は数値、第 2 引数は整数である必要があります。
<n_expression> は、ほかの表示関数を参照することはでき
ません。
結果
行ごとに、現在の行とその前にある <integer>-1 行の <n_expression> の合計として移
動合計を返します。<integer> で指定した行数だけ NULL が連続すると、NULL が返
されます。戻り値は、行の順序に依存するため注意が必要です。6-50 ページ「リザ
ルト セットの並び順」を参照してください。
<n_expression> のデータ型が指数表現を使用しないデータ型 (TINYINT、
SMALLINT、INTEGER、DECIMAL) の場合は、戻り値も指数表現を使用しない
データ型になります。結果データ型の精度は 6 桁増やされます。これは割り当てら
れた格納領域に納めるためです。
分析関数 6-55
MOVINGSUM
次の表は、<n_expression> のデータ型に応じて MOVINGSUM 関数が返すデータ型の
一覧です。
<n_expression> のデータ型
結果のデータ型
TINYINT
DECIMAL(9,0)
SMALLINT
DECIMAL(11,0)
INTEGER
DECIMAL(16,0)
DECIMAL
NUMERIC
DECIMAL(p,s)
p = min(38, <n_expression> の精度 + 6)
s = <n_expression> のスケール
REAL
REAL
FLOAT
DOUBLE PRECISION
FLOAT
DOUBLE PRECISION
RESET BY
7-55 ページ に示すように、ORDER BY 句に RESET BY サブ句を指定すると、値集
合が変わるときに移動合計を 0 にリセットできます。
例
次の式は、現在の行とその前にある 5 行の Dollars 列の値の合計値を計算し、Dollars
列の移動合計として返します。
movingsum(dollars,6)
6-56
SQL Reference Guide
MOVINGSUM
次のクエリは、Quantity 列の移動合計を返します。
select promo_desc, quantity,
movingsum(quantity, 3) as mvg_sum
from sales natural join promotion natural join period
where year = 2000
and month = 'FEB'
and promo_desc like '%coupon%'
order by sales.perkey;
PROMO_DESC
Aroma catalog
Aroma catalog
Aroma catalog
Aroma catalog
Aroma catalog
Aroma catalog
Aroma catalog
Aroma catalog
Aroma catalog
Aroma catalog
Aroma catalog
Aroma catalog
Aroma catalog
Aroma catalog
Aroma catalog
Aroma catalog
Aroma catalog
...
coupon
coupon
coupon
coupon
coupon
coupon
coupon
coupon
coupon
coupon
coupon
coupon
coupon
coupon
coupon
coupon
coupon
QUANTITY
3
9
12
11
6
7
28
16
16
14
9
1
39
19
9
24
27
MVG_SUM
NULL
NULL
24
32
29
24
41
51
60
46
39
24
49
59
67
52
60
分析関数 6-57
NTILE
NTILE
NTILE 関数は、指定した範囲に値をレベル分けします。値の範囲を 3 つに限定し、
レベルを表す文字 (H= 上位、M= 中位、L= 下位 ) を返す TERTILE 関数とは異なり、
NTILE 関数には任意の数の範囲を指定でき、結果は 1 ( 最高 ) ∼ 100 ( 最低 ) のよう
に該当する範囲を表す整数で返されます。
NTILE と RANK の違いは、NTILE が指定した整数に応じてリザルト セットを 5 等
分、10 等分、100 等分などに分割するのに対し、RANK は、値に応じてリザルト
セット全体を単純にソートする点です。
構文
次に NTILE 関数を使った式の構文ダイアグラムを示します。
NTILE
(
<n_expression>
, <integer>
)
<n_expression>、<integer>引数 <n_expression> は数値、<integer> は 0 でない正の整数
である必要があります。< n_expression> は、ほかの表示関
数を参照することはできません。
結果
<n_expression> 引数が NULL でない場合は、指定した範囲のレベルを表す整数が返
されます。たとえば、<integer> 引数を 5 と指定した場合、最高レベルに相当する値
には 1 が返され、最低レベルに相当する値には 5 が返されます。
RESET BY
7-55 ページ に示すように、ORDER BY 句に RESET BY サブ句を指定すると、指定
したグループが変わるときにレベル値をリセットできます。
使用上の注意
指定した整数で集合の行数が割り切れない場合、剰余になる行は上位グループに含
められます。ランクの境界に複数の等値がある場合は、隣接するグループに分配さ
れます。この場合、結果はクエリごとに異なります。
6-58
SQL Reference Guide
NTILE
たとえば、次の式は、リザルト セットの行数が 4 行の場合は 1、1、2、3 の各値を
返し、5 行の場合は 1、1、2、2、3 の各値を返します。
ntile(col_name, 3)
NTILE 関数は、TERTILE 関数の出力データのローカライズに使用できます。詳細
は、6-68 ページを参照してください。
例
このクエリは、Dollars 列の値の合計に基づいてコーヒー製品と紅茶製品をレベル分
けします。ランク数が 6 であるため、製品にはそれぞれ 1 ∼ 6 の値が返されます。
select prod_name, ntile(sum(dollars), 6) as sales_rank
from sales natural join product
where product.classkey in (1, 2, 4, 5)
group by prod_name
PROD_NAME
Demitasse Ms
Xalapa Lapa
NA Lite
Lotta Latte
Cafe Au Lait
Expresso XO
Aroma Roma
Veracruzano
La Antigua
Colombiano
Darjeeling Special
Assam Gold Blend
Darjeeling Number 1
Irish Breakfast
English Breakfast
Breakfast Blend
Earl Grey
Assam Grade A
Special Tips
Gold Tips
SALES_RANK
1
1
1
1
2
2
2
3
3
3
4
4
4
4
5
5
5
6
6
6
分析関数 6-59
NTILE
次の例は、CASE 式の中で NTILE 関数を使用し、レベル分け (5 等分 ) した値を 3 つ
の非均等グループに再分類します。ここでは上位 20% を <top_20>、中位 60% を
<mid_60>、下位 20% を <low_20> と表示します。
select prod_name, date, dollars,
case ntile(dollars, 5)
when 1 then 'top_20'
when 2 then 'mid_60'
when 3 then 'mid_60'
when 4 then 'mid_60'
when 5 then 'low_20'
end as n_rank
from sales natural join product
natural join period
natural join store
where year = 2000
and day = 'TH'
and store_name like 'Minnesota Roaster%'
order by prod_name
PROD_NAME
Aroma Roma
Aroma Roma
Cafe Au Lait
Colombiano
Colombiano
Colombiano
Colombiano
Colombiano
Colombiano
Demitasse Ms
Demitasse Ms
Demitasse Ms
Expresso XO
La Antigua
La Antigua
La Antigua
La Antigua
Lotta Latte
Lotta Latte
Lotta Latte
Lotta Latte
NA Lite
NA Lite
NA Lite
NA Lite
Veracruzano
Veracruzano
Veracruzano
Veracruzano
6-60
SQL Reference Guide
DATE
2000-03-23
2000-02-17
2000-02-24
2000-03-02
2000-02-24
2000-01-06
2000-01-20
2000-03-23
2000-02-03
2000-02-24
2000-03-30
2000-02-24
2000-02-17
2000-01-13
2000-03-23
2000-03-16
2000-01-13
2000-01-13
2000-02-17
2000-03-09
2000-01-27
2000-01-06
2000-03-02
2000-01-06
2000-02-17
2000-01-13
2000-02-10
2000-02-03
2000-01-27
DOLLARS
166.75
224.75
119.00
135.00
175.50
148.50
162.00
128.25
276.75
61.50
292.50
185.25
74.25
100.75
210.25
181.25
159.50
85.00
161.50
240.00
127.50
396.00
297.00
126.00
108.00
360.00
322.50
142.50
232.50
N_RANK
mid_60
mid_60
mid_60
mid_60
mid_60
mid_60
mid_60
mid_60
top_20
low_20
top_20
mid_60
low_20
low_20
mid_60
mid_60
mid_60
low_20
mid_60
mid_60
mid_60
top_20
top_20
mid_60
low_20
top_20
top_20
mid_60
mid_60
NTILE
前ページのクエリに WHEN 句を追加すると、上位 20% を除くすべての行をリザル
ト セットから除外することができます。
select prod_name, date, dollars,
case ntile(dollars, 5)
when 1 then 'top_20'
when 2 then 'mid_60'
when 3 then 'mid_60'
when 4 then 'mid_60'
when 5 then 'low_20'
end as n_rank
from sales natural join product
natural join period
natural join store
where year = 2000
and day = 'TH'
and store_name like 'Minnesota Roaster%'
when n_rank = 'top_20'
order by prod_name
PROD_NAME
Colombiano
Demitasse Ms
NA Lite
NA Lite
Veracruzano
Veracruzano
DATE
2000-02-03
2000-03-30
2000-01-06
2000-03-02
2000-01-13
2000-02-10
DOLLARS
276.75
292.50
396.00
297.00
360.00
322.50
N_RANK
top_20
top_20
top_20
top_20
top_20
top_20
分析関数 6-61
RANK
RANK
RANK 関数は、指定した値について、集合における相対的な順位を決定します。
構文
次に RANK 関数を使った式の構文ダイアグラムを示します。
RANK
(
<expression>
<expression>
)
任意のデータ型ですが、ほかの表示関数を参照することはできませ
ん。<expression> の前にマイナス (-) 符号を指定すると、昇順 ( 小さ
なものから順 ) に順位付けされます。非数値データ型の場合は、
サーバ ロケール設定で指定された照合シーケンスに応じてレベル分
けされます。
結果
引数が NULL でない場合は、値集合における相対的な順位を表す整数が返されます。
NULL の場合は NULL が返されます。昇順か、降順 ( デフォルト ) のどちらにも順位
付けできます。
順位付けする値が等しければ、同一順位になります。たとえば、3 位の行が 2 行あ
る場合は、4 位は飛ばされます。
上位 10 行
WHEN 句を使うと、最終的なリザルト テーブルの上位 5 行、上位 10 行というよう
に、返す結果を任意の数の順位に限定することができます。When 句の詳細は、
7-43 ページ「WHEN 句」を参照してください。
RESET BY
7-55 ページ に示すように、ORDER BY 句に RESET BY サブ句を指定すると、値の
グループが変わるときに順位付けを 0 にリセットできます。
6-62
SQL Reference Guide
RANK
例
次の式は、グループの各行の Dollars 列の値に基づいて、行の順位を表す整数を返し
ます。
rank(-dollars)
この順位付けは、昇順 ( 小さなものから順 ) になります。
次のクエリは、データベースの使用期間 (27 か月 ) にわたる売上合計に基づいて各
製品を順位付けします。
select prod_name, sum(dollars) as prod_sales,
rank(sum(dollars)) as prod_rank
from product join sales on sales.classkey = product.classkey
and sales.prodkey = product.prodkey
group by prod_name
PROD_NAME
Demitasse Ms
Xalapa Lapa
NA Lite
Lotta Latte
Cafe Au Lait
Expresso XO
Aroma Roma
Veracruzano
La Antigua
Colombiano
Ruby's Allspice
Darjeeling Special
Assam Gold Blend
Darjeeling Number 1
Irish Breakfast
English Breakfast
Breakfast Blend
Earl Grey
Assam Grade A
Special Tips
Gold Tips
Espresso Machine Italiano
Aroma t-shirt
Espresso Machine Royale
Tea Sampler
Aroma baseball cap
Coffee Sampler
Spice Sampler
Aroma Sheffield Steel Teapot
Aroma Sounds CD
Aroma Sounds Cassette
French Press, 4-Cup
Spice Jar
PROD_SALES
656401.50
577450.00
557655.00
533454.50
526793.50
514094.50
479330.25
479015.50
473434.50
462003.50
299977.00
292751.00
156962.00
136768.25
109281.00
100459.50
93790.75
90798.00
88651.00
87413.25
86315.75
48057.95
45632.80
35754.00
32411.00
32249.00
32220.00
16219.00
15797.00
15779.00
11642.50
9727.55
9694.00
PROD_RANK
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
分析関数 6-63
RANK
French Press, 2-Cup
Easter Sampler Basket
Travel Mug
Coffee Mug
Christmas Sampler
7060.25
5280.00
3312.80
2793.00
1920.00
34
35
36
37
38
上位 5 行を返すには、前ページのクエリに WHEN 句を追加します。
select prod_name, sum(dollars) as prod_sales,
rank(sum(dollars)) as prod_rank
from product join sales on sales.classkey = product.classkey
and sales.prodkey = product.prodkey
group by prod_name
when prod_rank <=5
PROD_NAME
Demitasse Ms
Xalapa Lapa
NA Lite
Lotta Latte
Cafe Au Lait
PROD_SALES
656401.50
577450.00
557655.00
533454.50
526793.50
PROD_RANK
1
2
3
4
5
次のクエリは、最小の値を第 1 位として、price の値を昇順 ( 小さなものから順 ) で
順位付けします。
select price, rank(-price)
from orders
where order_no > 3616
PRICE
3995.95
4325.25
4325.25
4425.00
4425.00
5400.00
5400.00
10234.50
10234.50
16500.00
6-64
SQL Reference Guide
1
2
2
4
4
6
6
8
8
10
RANK
順位付けされた行が表示される順序は、クエリの指定に応じて異なりますが、各値
の順位は変わりません。
select price, rank(-price)
from orders
where order_no > 3616
order by price desc
PRICE
16500.00
10234.50
10234.50
5400.00
5400.00
4425.00
4425.00
4325.25
4325.25
3995.95
10
8
8
6
6
4
4
2
2
1
分析関数 6-65
RATIOTOREPORT
RATIOTOREPORT
RATIOTOREPORT 関数は、合計値に対する値の比率を計算します。
構文
次に RATIOTOREPORT 関数を使った式の構文ダイアグラムを示します。
RATIOTOREPORT
(
<n_expression>
)
<n_expression> 数値である必要があります。また、ほかの表示関数を参照すること
はできません。
結果
引数が NULL でない場合は、合計値に対する値の比率が返されます。NULL の場合
は、NULL が返されます。
RESET BY
7-55 ページ に示すように、ORDER BY 句に RESET BY サブ句を指定すると、値の
グループが変わるごとに RATIOTOREPORT 関数をリセットできます。
例
次の式は、値の集合のすべての数量の合計値に対する各行の Quantity 列の値の比率
を返します。
ratiotoreport(quantity)
6-66
SQL Reference Guide
RATIOTOREPORT
次のクエリは、合計売上に対する売上の比率を (100 で乗算してパーセントで ) 返し
ます。
select city, sum(dollars) as sales,
ratiotoreport(sum(dollars))*100 as ratio_dollars
from sales natural join store natural join period
group by city
order by sales desc
CITY
San Jose
Atlanta
Miami
Los Angeles
Phoenix
New Orleans
Cupertino
Boston
Houston
New York
Los Gatos
Philadelphia
Milwaukee
Detroit
Chicago
Hartford
Minneapolis
SALES
896931.15
514830.00
507022.35
503493.10
437863.00
429637.75
424215.00
421205.75
417261.00
397102.50
394086.50
392377.75
389378.25
305859.75
294982.75
236772.75
165330.75
RATIO_DOLLARS
12.58
7.22
7.11
7.06
6.14
6.03
5.95
5.91
5.85
5.57
5.53
5.50
5.46
4.29
4.14
3.32
2.32
分析関数 6-67
TERTILE
TERTILE
TERTILE 関数は、数値グループの各値を上位、中位、下位のレベルに分けます。
構文
次に TERTILE 関数を使った式の構文ダイアグラムを示します。
TERTILE
(
<n_expression>
)
<n_expression> 数値である必要があります。また、ほかの表示関数を参照すること
はできません。
結果
引数が NULL でない場合は、上位、中位、下位を表す文字 H、M、L が返されます。
NULL の場合は NULL が返されます。
RESET BY
7-55 ページ に示すように、ORDER BY 句に RESET BY サブ句を指定すると、指定
したグループが変わるときにレベル値をリセットできます。
使用上の注意
集合の行数が 3 で割り切れない場合、剰余になる行は上位レベルに含められます。
ランクの境界に複数の等値がある場合は、隣接するグループに分配されます。この
場合、結果はクエリごとに異なります。NTILE 関数の説明にある例を参照してくだ
さい。
NTILE 関数は、TERTILE 関数の出力データをローカライズしながら、TERTILE 関
数の動作を再現することができます。つまり、値 H、M、L をデータベースの言語
にとって意味のある 3 つの文字列に変更することができます。NTILE 関数の詳細
は、6-58 ページ を参照してください。
6-68
SQL Reference Guide
TERTILE
例
次の式は、グループの各行について、Dollars 列の値に基づくレベル分けを行い、上
位、中位、下位を表す文字を返します。
tertile(dollars)
次のクエリは、Dollars 列と Quantity 列の値をレベル分けし、各列について上位、
中位、下位を表す文字を返します。
select prod_name, dollars, quantity,
tertile(dollars) as sales,
tertile(quantity) as qty
from store natural join sales
natural join period
natural join product
where year = 2000
and week = 2
and store_name like 'Instant%';
PROD_NAME
Lotta Latte
Colombiano
Lotta Latte
La Antigua
Cafe Au Lait
Darjeeling Special
Darjeeling Special
Lotta Latte
Lotta Latte
Colombiano
Xalapa Lapa
Darjeeling Number 1
Aroma Roma
...
DOLLARS QUANTITY SALES
328.00
41 H
216.00
32 H
216.00
27 H
210.25
29 H
136.00
16 H
126.50
11 H
115.00
10 H
110.50
13 H
110.50
13 H
108.00
16 H
99.00
11 M
94.50
18 M
94.25
13 M
QTY
H
H
H
H
H
L
L
M
H
H
M
H
M
次のマクロは、NTILE 関数を使って TERTILE 関数の動作を再現します。クエリで
このマクロが使用されると、レベル分けした dollars の合計に応じて値 A、B、C が
返されます。このような CASE 式は、ユーザの言語に応じた任意の 3 つの文字列を
返すことができます。
create macro nls_tertile as
case ntile((sum(dollars)), 3)
when 1 then 'A'
when 2 then 'B'
when 3 then 'C'
end as tile;
分析関数 6-69
第7章
クエリ式
この章について .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
7-3
結合および非結合クエリ式 .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
7-4
テーブル結合
. . . .
構文 . . . . . .
限定結合 . . . . .
クロス結合 . . . .
テーブル参照 . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. .
. .
. .
. .
. .
7-7
7-7
7-7
7-12
7-13
クエリ指定 . . .
検索項目リスト
FROM 句 . . .
サンプリング .
WHERE 句 . .
GROUP BY 句 .
HAVING 句 . .
WHEN 句 . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
7-16
7-17
7-22
7-28
7-36
7-39
7-41
7-43
UNION、EXCEPT、INTERSECT 式 .
.
.
.
.
.
.
.
.
.
.
.
.
7-45
. . . . .
. . . . .
. . . . .
. . . . .
. .
. .
. .
. .
7-54
7-55
7-66
7-68
.
.
.
.
.
.
7-69
7-69
7-72
SELECT 文 . . . . .
ORDER BY 句 . . .
SUPPRESS BY 句 . .
SELECT 文の処理方法
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. . . . .
. . . . .
. . . . .
. . . . .
. . . .
. . . .
. . . .
. . . .
サブクエリ . . . . . . . . . . . .
スカラ サブクエリとテーブル サブクエリ
相関サブクエリ . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
7-2 SQL Reference Guide
この章について
この章では、SQL でクエリを記述する場合の規則を説明します。まずクエリ式の概
要を説明し、次にクエリ式の構成要素と例を示します。章の最後では、SELECT 文
と各種のサブクエリについて説明します。
この章では、次の事項について説明します。
■
■
■
■
■
■
結合および非結合クエリ式
テーブル結合
クエリ指定
UNION、EXCEPT、INTERSECT 式
SELECT 文
サブクエリ
『SQL Self-Study Guide』にも、各種クエリ式の詳細な例が紹介されています。
クエリ式
7-3
結合および非結合クエリ式
結合および非結合クエリ式
クエリ式は、選択したデータを評価した結果をテーブルにします。単純なクエリの
場合は、このテーブルが最終的なリザルト セットとしてユーザに返されます。複雑
なクエリの場合は、このテーブルは中間テーブルとなり、ほかのクエリ式の結果と
統合されて最終的なリザルト セットになります。
SQL のクエリ記述のことをクエリ式といいます。テーブル式と呼ばれることもあり
ますが、このマニュアルでは、ANSI SQL 92 標準に従ってクエリ式という用語を使
用します。
各クエリ式は、結合または非結合のどちらかの形式をとります。非結合クエリ式
は、クエリ指定 ( 選択式とも呼ぶ )、明示的なテーブル、または UNION、
INTERSECT、EXCEPT などの演算子を含む複雑な式からできています。
結合クエリ式、つまりテーブル結合は、2 つ以上のテーブル参照を明示的に結合し
ます。テーブル参照は、単純なテーブル名、別の結合されたテーブル、または別の
クエリ式にすることができます。
次に、各種のクエリ式と簡単な例を示します。
図 7-1
クエリ式
クエリ式
非結合クエリ式
テーブル結合
明示的テーブル
table sales1
クエリ指定
sales1 join sales2 on sales1.a = sales2.a
(select * from sales1) as s1
natural join
(select * from sales2) as s2
select * from sales1
where dollars > 1000
UNION、INTERSECT、EXCEPT 演算子
select * from sales1 union select * from sales2
7-4
SQL Reference Guide
結合および非結合クエリ式
クエリ式で最も単純な形式は、シングル クエリ指定という形式です。複雑な形式の
クエリ式は、サブクエリから得られた複数の中間テーブル、テーブル結合、および
UNION、INTERSECT、EXCEPT 演算子を含む式から結果を導き出します。いろいろ
なクエリ式を組み合わせて 1 つのクエリに統合したり、SELECT キーワードが不要
なクエリを作成することができます。前述の例はセミコロン ( またはほかのエント
リ ツールの終端記号 ) を式に追加すれば、SQL の SELECT 文として実行できます。
構文
次にクエリ式の構文ダイアグラムを示します。
<joined_table>
<query_specification>
<union_expression>
TABLE
<joined_table>
<table_name>
2 つのテーブル参照を明示的に結合するクエリ式を指定します。
詳細な構文ダイアグラムと説明については、7-7 ページ
「テーブル結合」を参照してください。
<query_specification>
SELECT キーワードと FROM 句で始まるクエリ式を指定しま
す。オプションの句も指定できますが、それらには指定順序
があります。
詳細な構文ダイアグラムと説明については、7-16 ページ「ク
エリ指定」を参照してください。
クエリ式
7-5
結合および非結合クエリ式
<union_expression>
UNION、INTERSECT、EXCEPT 演算子で結合された 2 つ以
上のクエリ式からなります。<union_expression> という用語
は、各演算子による集合演算式を表します。
詳細な構文ダイアグラムと説明については、7-45 ページ
「UNION、EXCEPT、INTERSECT 式」を参照してください。
TABLE< table_name> 指定したテーブルの全行を意味する明示的なテーブル指定で
す。たとえば、次の 2 つのクエリは同じです。
table store
select * from store
7-6
SQL Reference Guide
テーブル結合
テーブル結合
テーブル結合は、2 つのテーブル参照を明示的に結合するクエリ式です。テーブル
結合には、次の 3 種類があります。
■
■
■
限定結合 : 結合するテーブル、結合の基準となる列を指定する内部結合ま
たは外部結合
クロス結合または直積結合
かっこで囲んだテーブル結合
結合の基準となる列が比較可能なデータ型で、その列がクエリに明示されていれ
ば、任意の 2 つのテーブルを結合できます。
構文
次に <joined_table> の構文ダイアグラムを示します。
<qualified_join>
<cross_join>
(<joined_table>)
限定結合
限定結合には、内部結合と外部結合があり、3 種類の指定方法があります。同じ名
前を持つ列を基準とする結合 ( 自然結合 )、指定した列に基づく結合、述部に基づ
く結合です。ここでは、内部結合と外部結合という用語の定義と、3 種類の指定方
法の構文を説明します。
内部結合
内部結合は、2 つ以上のテーブルから、列の値が一致している行を結合します。結
合するテーブルの行の列値が一致していると、その行をデータベース サーバが結合
し、中間リザルト テーブルに格納します。
クエリ式
7-7
限定結合
結合方法を明示しない結合がクエリにある ( 標準の限定結合構文を使用する ) 場合
は、それらのテーブルの直積 (2 つのテーブルのすべての行の可能な組み合わせの集
合 ) が生成されます。
たとえば、State と Region という 2 つのテーブルがあるとします。
STATE
FL
FL
GA
TN
CITY
Jacksonville
Miami
Atlanta
Nashville
CITY
Jacksonville
Miami
Atlanta
New Orleans
AREA
South
South
South
South
上記の 2 テーブルを内部結合で City 列に基づいて結合すると、次のリザルト セット
が返されます。
STATE
FL
FL
GA
STATE.CITY
Jacksonville
Miami
Atlanta
REGION.CITY
Jacksonville
Miami
Atlanta
AREA
South
South
South
City 列を対象とした内部結合の条件は、次のとおりです。
state.city = region.city
外部結合
外部結合には、レフト、ライト、フルの 3 種類があります。
この 3 種類の外部結合は、それぞれ異なる中間リザルト セットを生成します。レフ
ト外部結合は、内部結合が返すすべての行とレフト テーブル ( 最初に指定したテー
ブル ) の行のうち、ライト テーブルの行と一致しないすべての行を返します。
これに対しライト外部結合は、内部結合が返すすべての行とライト テーブル (2 番
めに指定したテーブル ) の行のうち、レフト テーブルの行と一致しないすべての行
を返します。
フル外部結合は、両方のテーブルにあるすべての行を返します。
3 種類の外部結合はいずれも、一致しない行の列を NULL で表します。
7-8
SQL Reference Guide
限定結合
たとえば、State テーブルと Region テーブルを対象としたレフト外部結合は、State
テーブルのすべての行を返します。Region テーブルと一致しない行の列には NULL
が表示されます。
STATE
FL
FL
GA
TN
STATE.CITY
Jacksonville
Miami
Atlanta
Nashville
REGION.CITY
Jacksonville
Miami
Atlanta
NULL
AREA
South
South
South
NULL
State テーブルと Region テーブルのライト外部結合は、Region テーブルのすべての
行を返す点を除けば、レフト外部結合と同じです。
STATE
FL
FL
GA
NULL
STATE.CITY
Jacksonville
Miami
Atlanta
NULL
REGION.CITY
Jacksonville
Miami
Atlanta
New Orleans
AREA
South
South
South
South
フル外部結合は、両テーブルのすべての行を返します。
state
FL
FL
GA
TN
NULL
state.city
Jacksonville
Miami
Atlanta
Nashville
NULL
region.city
Jacksonville
Miami
Atlanta
NULL
New Orleans
area
South
South
South
NULL
South
クエリ式
7-9
限定結合
限定結合の構文
次に限定結合の構文ダイアグラムを示します。
<table_reference>
JOIN
NATURAL
INNER
LEFT
OUTER
RIGHT
OUTER
FULL
OUTER
<table_reference>
<search_condition>
ON
,
USING
(
<column_name>
)
<table_reference>
テーブルとして評価されるテーブル、ビュー、シノニム、ク
エリ式を指定します。<table_reference> の詳細な構文について
は、7-13 ページ「テーブル参照」を参照してください。
NATURAL
自然結合は、同じ名前をもつ列を基準にしてテーブルを結合
します。列名は、明示的に指定しません。自然結合は、同じ
列名を持つ列が複数ある場合はそのすべての列をもとに 2 つ
のテーブルを結合します。
次の例は、Classkey 列と Prodkey 列という共通の列名を基準
にして Sales テーブルと Product テーブルを結合します。
sales natural join product
NATURAL キーワードを指定する場合は、ON 句と USING 句
は使用できません。
7-10
SQL Reference Guide
限定結合
INNER
テーブル参照の内部結合を指示します。INNER キーワードは
オプションです。
LEFT、RIGHT、FULLテーブル参照のレフト外部結合、ライト外部結合、フル外部
結合のいずれかを指定します。
OUTER
テーブル参照の外部結合を指示します。OUTER キーワード
はオプションです。LEFT、RIGHT、FULL のいずれかを指定
すれば、外部結合を暗黙的に指定することになります。
JOIN
テーブル参照の限定結合を指示します。このキーワードは、
内部結合と外部結合には必須入力です。INNER または
OUTER キーワードを指定しない場合、内部結合を暗黙的に
指定したことになります。
ON <search_condition> 述部を基準とした結合を指定します。USING 句や NATURAL
結合を指定する場合は、ON 句は使用できません。
<search_condition> は、2 つの行の結合に必要な条件となる述
部を記述します。結合する 2 つのテーブルの列を参照する、
論理条件式を指定します。通常は、単純等価結合を表す述部
を指定しますが、次のように複雑な式を指定することもでき
ます。
table1.col1 = table2.col2 + table2.col3
または、次のように非等価結合を指定することができます。
table1.col1 > table2.col2
どちらの場合も、論理条件式の前には ON キーワードを指定
してください。
on sales.classkey = product.classkey
and sales.prodkey = product.prodkey
USING
(<column_name>)
1 つ以上の列に基づく結合を指定します。
using (classkey, prodkey)
結合するテーブルの両方に存在する列を指定してください。
ON 句や NATURAL 結合を指定する場合、USING 句は指定で
きません。
クエリ式
7-11
クロス結合
使用上の注意
NATURAL JOIN または USING の構文を使ってテーブルを結合すると、最初のテー
ブルからすべての共通列が検出順に格納され、その後、最初のテーブルにある結合
の基準列でないすべての列、2 番めのテーブルにある結合の基準列でないすべての
列を格納したリザルト テーブルが返されます。結合から得られる列のデータ型は、
結合した 2 つのテーブルのどちらの列とも異なる場合がありますが、どちらの列値
も格納できるデータ型になります。
ON を使ってテーブルを結合すると、結合する両方の列 ( およびそのデータ型 ) が、
結果に残されます。たとえば、Perkey 列に基づいて Sales テーブルと Period テーブ
ルを結合すると、2 つの Perkey 列が中間リザルト セットに格納されます。
クロス結合
クロス結合は、結合するテーブルのすべての行の直積を生成します。つまり、各行
のすべての可能な組み合わせを返します。
データベース サーバはデフォルトでは、クロス結合を指定したクエリが実行される
とエラー メッセージを返します。クロス結合を指定したクエリを有効にするには、
SET CROSS JOIN ON 文を実行するか rbw.config ファイルの OPTION CROSS_JOIN パ
ラメータを編集します。このパラメータの詳細については、9-11 ページを参照して
ください。
構文
次にクロス結合の構文ダイアグラムを示します。
<table_reference>
CROSS JOIN
<table_reference>
<table_reference> テーブルとして評価されるテーブル、ビュー、シノニム、クエリ
式を指定します。<table_reference> の詳細な構文については、
7-13 ページ「テーブル参照」を参照してください。
CROSS JOIN
7-12
SQL Reference Guide
結合するテーブルのすべての行を結合し、各行のすべての可能な
組み合わせをリザルト セットに返します。
テーブル参照
テーブル参照
次にテーブル参照の構文ダイアグラムを示します。
<table_name>
<correlation_name>
<view_name>
( <column_list> )
AS
<synonym>
<joined_table>
( <query_expression> )
<correlation_name>
AS
<table_name>、
<view_name>、
<synonym>
( <column_list> )
相関名で修飾できるテーブル名、ビュー名、シノニム名のい
ずれかを指定します。シノニムの詳細については、8-136 ペー
ジ「CREATE SYNONYM」を参照してください。
クエリ式 7-13
テーブル参照
AS <correlation_name>基本テーブル、またはクエリの処理中にクエリ式から派生し
たテーブルに名前を割り当てます。テーブルに相関名を定義
した場合、クエリ中でそのテーブルを参照するときは相関名
を用いる必要があります。AS キーワードはオプションです。
相関名は、テーブル参照の直後に指定します。たとえば、次
のテーブル参照リストは、Store、Product、Period、Sales の
各テーブルに、それぞれ sr、pr、pd、sl という相関名を割
り当てます。
store sr, product pr, period pd, sales sl
相関名を割り当てるのは、クエリとサブクエリの両方が同じ
テーブルを参照する場合に、参照先が特定できなくなるのを
防ぐためです。サブクエリの詳細については、7-69 ページを
参照してください。
テーブルに相関名を割り当てると、テーブル名ではなく、相
関名を使って修飾列名を表すことができます。たとえば、
Period テーブルに pd という相関名を割り当てた場合、Period
テーブルの Month 列は、month または pd.month で指定する
ことができます。ただし、列参照の範囲内にほかの Month 列
がない場合に限ります。Month 列がほかにもあると、参照先
が特定できなくなってしまいます。この列を period.month
と指定すると、エラーになります。
通常、相関名を割り当てるのは、サブクエリの参照先を親 (
メイン ) クエリの参照先と関連付ける場合です。たとえば、
次の条件は、Month を参照先とするサブクエリと親クエリの
参照を関連付けます。
pp.month = pd.month
上記の条件式により、サブクエリの参照 (pp.month) は、親
クエリの参照 (pd.month) と同じになります。
相関名のもう 1 つの使い方は、それ自身と結合 ( セルフ結合 )
する場合に、そのテーブルに別の名前を付けることです。セ
ルフ結合の詳細については、『SQL Self-Study Guide』を参照し
てください。
7-14
SQL Reference Guide
テーブル参照
<column_list>
参照テーブルの列に、クエリの処理中に使用する名前を割り
当てます。テーブルの各列に固有の名前を指定してください。
テーブル参照が自然結合や列名に基づく結合に用いられるク
エリ式の場合、その列名は一意である必要があります。
<joined_table>
7-7 ページ「テーブル結合」の定義に従って、任意の有効な結
合クエリ式を指定します。
(<query_expression>) 7-4 ページで説明した非結合クエリ式またはテーブル結合を指
定します。テーブル参照として使用するクエリ式はかっこで
囲み、相関名を割り当てると、ほかのテーブルや、ほかのク
エリ式の結果と結合できるようになります。たとえば、次の
クエリは FROM 句の中にクエリ式を含む例です。
select *
from (class natural join product)
as cp(col1, col2, col3, col4, col5, col6)
列リストはオプションです。
クエリ式 7-15
クエリ指定
クエリ指定
クエリ指定 ( 選択式 ) には、SELECT、FROM、WHERE、GROUP BY、HAVING、
WHEN の SQL 句を指定します。これらの句には、指定順序があります。
構文
次にクエリ指定の構文ダイアグラムを示します。
<select_list>
SELECT
<from_clause>
<where_clause>
<group_by_clause>
<having_clause>
<when_clause>
クエリ指定には、次のものを指定してください。
■
■
■
SELECT キーワード
検索項目リスト
FROM 句
ほかの句はオプションです。オプションの句を指定する場合は、構文ダイアグラム
に示す順序で指定します。
ユーザには、クエリ指定で参照する基本テーブルとビューに対する SELECT 特権が
必要です。そうでない場合、クエリはエラーになります。
例
次のクエリは、Class テーブルから各クラス タイプの名前を返します。
select class_type
from class
CLASS_TYPE
Bulk_beans
Bulk_tea
Bulk_spice
Pkg_coffee
Pkg_tea
Pkg_spice
Hardware
Gifts
Clothing
7-16
SQL Reference Guide
検索項目リスト
検索項目リスト
検索項目リストには、最終的なリザルト テーブルに返す列を指定し、重複行を除外
するかを指定します。リザルト テーブルの列の代替名 ( エリアス ) を、検索項目リ
ストに指定することもできます。
構文
ここではクエリ指定を繰り返して、<select_list> の構文の参照のポイントを与えてい
ます。
SELECT
<select_list>
<from_clause>
<where_clause>
<group_by_clause>
<having_clause>
<when_clause>
次に検索項目リストの構文ダイアグラムを示します。
*
,
ALL
DISTINCT
<expression>
<c_alias>
AS
<table_name.*>
ALL
リザルト テーブルのすべての行を返すように指示します。
クエリ式 7-17
検索項目リスト
DISTINCT
重複行をリザルト テーブルから除外するように指示します。
リザルト テーブルの重複行とは、ある行の各列の値が、別の行の各
列の値と等しいものです。NULL は等しいとみなされます。リザル
ト テーブルには、検索項目リストに指定した列だけが格納されま
す。
*( アスタリス アスタリスク (*) は、FROM 句に指定されたすべてのテーブル参照
ク)
の列名を表します。
ヒント : IBM Red Brick Warehouse は明示的なテーブルもサポートします。たとえ
ば、次の 2 つのクエリは同じです。
select * from market
table market
7-18
SQL Reference Guide
検索項目リスト
<expression>
リザルト テーブルの特定の列を指定します。通常は、列名、修飾列
名、列名に関連づけた関数 ( 集約関数、スカラ関数、日付時間関数、
RISQL、OLAP) を <expression> に指定します。
<expression> には、スカラ サブクエリを指定することもできます。
つまり、1 つのスカラ値 ( 文字、日付時間、数値、NULL のいずれか
) を返すサブクエリです。サブクエリの詳細については、7-69 ペー
ジを参照してください。
7-21 ページの例に示すように、複数の DISTINCT キーワードを集約
関数の一部として同じ検索項目リストまたは HAVING 句に指定する
こともできます。
AS <c_alias>
列エリアス、つまりクエリ式を評価して得られたテーブルの列名を
指定します。エリアスは、最終的なリザルト テーブルの列見出しと
して返されます。エリアスは、そのクエリのほかの句 (WHERE、
GROUP BY など ) や、検索項目リストに指定するその後の列で参照
できます。
検索項目リストの列名は、左から右に処理されます。列エリアス
は、検索項目リストで使用する前に、AS 句で定義しておいてくだ
さい。たとえば、次の検索項目リストは、rank_dollars が AS 句
で定義される前に指定されているため、エラーになります。
select rank_dollars, rank(sum(dollars)) as
rank_dollars
上記の検索項目リストは、次のように修正すると適切になります。
select rank(sum(dollars)) as rank_dollars,
rank_dollars
AS キーワードはオプションです。たとえば、次の検索項目リスト
は rank_dollars を rank(sum(dollars)) のエリアスに定義し
ます。
select prod_name, rank(sum(dollars)) rank_dollars
列エリアスは、データベース識別子です。2-3 ページで説明した名
称と識別子の規則に従っている必要があります。
<table_name.*> 指定したテーブルのすべての列を指定します。
product.*
クエリ式 7-19
検索項目リスト
集約関数
クエリ指定に GROUP BY 句を指定しない場合、検索項目リストに指定できるのは集
約関数、定数値、非相関サブクエリとなります。検索項目リストに集約関数だけを
指定した場合、リザルト テーブルに返されるのは 1 行です。それ以外は、WHERE
句に指定した検索条件に応じて複数の行が返されます。
クエリ指定に GROUP BY 句を指定した場合、検索項目リストに指定する式は次のい
ずれかである必要があります。
■
■
■
■
文字定数、日付時間定数、数値定数
GROUP BY 句に指定した列名、または GROUP BY 句に指定した列名で構
成される式
FROM 句に指定したテーブルの列だけを参照する定数または式を引数とす
る集約関数
GROUP BY 句に指定した列だけを参照する式、定数を引数とする RISQL
表示関数、OLAP 関数、スカラ関数、またはそのクエリで有効な集約関数
リザルト テーブルには、各グループにつき 1 行が返されます。
例
次のクエリは、Market テーブルの一意な地区名を返します。
select distinct region
from market
REGION
Central
North
South
West
次のクエリは、各地区名と各地区の店舗数を返します。
select region, count(store_name) as nbr_stores
from market natural join store
group by region
REGION
South
North
Central
West
7-20
SQL Reference Guide
NBR_STORES
4
4
4
6
検索項目リスト
次のクエリは、開始日を返し、販売促進活動の一意な種類の数と開始日に対する一
意な値の数をカウントします。
select start_date, count (distinct promo_desc) as PROMO,
count(distinct value) as value
from promotion
group by start_date
START_DATE
1998-01-01
1998-02-01
1998-03-01
1998-03-31
1998-04-01
1998-05-01
1998-06-01
1998-07-01
1998-08-01
1998-09-01
1998-10-01
1998-11-01
1998-12-01
PROMO
4
4
4
1
4
4
4
4
4
4
4
4
5
VALUE
3
3
3
1
3
3
3
3
3
3
3
3
4
クエリ式 7-21
FROM 句
FROM 句
FROM 句は、クエリ指定で取得され評価されたデータのソースをリスト表示するこ
ともできます。各ソースはテーブル参照です。
構文
クエリ指定の構文ダイアグラムと FROM 句の構文のポイント ダイアグラムを示し
ます。
SELECT
<from_clause>
<select_list>
<where_clause>
<group_by_clause>
<having_clause>
<when_clause>
次に FROM 句の構文ダイアグラムを示します。
,
FROM
<table_reference>
<sample_clause>
7-22
SQL Reference Guide
FROM 句
<table_reference> テーブル名 ( 基本テーブル、システム テーブル、ビュー、シノニム ) 、
テーブル結合 (2 つ以上のテーブルを結合したクエリ式 )、サブクエリ
のいずれかを指定します。詳細な構文ダイアグラムと説明については、
7-13 ページ「テーブル参照」を参照してください。
FROM 句のテーブル参照にサブクエリを指定する場合は、テーブル
参照に相関名を付けてください。相関名はテーブルやビューにも使
用でき、テーブルに略記用の別名を与えたり、クエリとサブクエリ
が同じテーブルを参照する場合にテーブルを区別します。
1 つのテーブルを参照する場合は、そのテーブルがクエリ指定の唯
一のデータ ソースになります。複数のテーブルを参照する場合は、
クエリ指定の論理的結果は直積 ( またはクロス結合 ) になります。
直積を生成しないようにするには、FROM 句か WHERE 句に結合指
定を明示してください。
次のテーブル参照は、暗黙的なクロス結合を示します。
product, sales
次のテーブル結合は、明示的なクロス結合を示します。
product cross join sales
<sample_clause> テーブルの行のサンプルを指定します。7-28 ページを参照してくだ
さい。
FROM 句の結合
1 つの結合動作により、2 つのテーブル参照から行が抽出、結合されます。結合に
は、次の規則と制約があります。
■
■
■
■
結合動作は、内部結合または外部結合 (LEFT、RIGHT、FULL) を指定でき
ますが、どちらの場合も結合する列を明示的に指定する必要があります。
結合するテーブルは、FROM 句に指定します。結合する列は、結合のタイ
プ (INNER または OUTER) にかかわらず、FROM 句か WHERE 句に指定し
ます。
結合する列は比較可能なデータ型である必要があります。
1 つのテーブルを、それ自身と結合する (FROM 句に同じテーブルを重複し
て指定する ) ことができます。ただし、最低 1 つのテーブルに相関名を割
り当てて、テーブル参照を区別する必要があります。セルフ結合クエリの
例については、『SQL Self-Study Guide』を参照してください。
クエリ式 7-23
FROM 句
■
■
■
■
クロス結合 ( または直積結合 ) が生成されるのは、rbw.config ファイルの
OPTION CROSS_JOIN パラメータが ON に設定されている場合か、ユーザ
が SET CROSS JOIN ON 文を実行した場合だけです。この制約の目的は、
誤った限定結合指定などにより、無駄なクロス結合クエリが実行されない
ようにすることです。
ユニオン結合はサポートされません。
FROM 句で内部結合または外部結合を指定する方法には、次の 3 種類があ
ります。
❑ ON サブ句 ( 述部に基づく結合 )
❑ USING サブ句 ( 指定した列に基づく結合 )
❑ NATURAL JOIN 構文 ( 同じ名前の列の組み合わせを基準とする結合 )
FROM 句に外部結合条件を指定する場合、最初のテーブルが左のテーブ
ル、2 番めのテーブルが右のテーブルとみなされます。この結合を
WHERE 句に指定する場合、7-37 ページの構文ダイアグラムに示すように、
指定された演算子から外部結合が取られます。
各種結合の詳細な構文については、7-7 ページ「限定結合」を参照してください。
列名の修飾
FROM 句で参照するテーブルに同じ名前の列がある場合は、列が特定できるよう
に、所属先テーブルの名前で各列の参照を修飾してください。たとえば、Store
テーブルの Storekey 列は、次のどちらかの方法で指定できます。
■
■
7-24
storekey
store.storekey
SQL Reference Guide
FROM 句
しかし、Store テーブルと Sales テーブルの両方が FROM 句で参照される場合は、
Storekey 列への参照を次のように修飾する必要があります。
■
■
store.storekey
sales.storekey
クエリ式から派生するテーブルには、複数の同じ名前の列が生成される場合があり
ます。このような列をクエリのほかの部分で参照する場合は、適切なクエリ指定で
列エリアスを指定するか、相関名の後に派生テーブルの列名リストを指定して、一
意な名前を割り当ててください。
列名の修飾の詳細については、2-7 ページを参照してください。
例
このクエリは、すべての注文品と品目をそれぞれのテーブルから抽出し、平均価格
を算出します。検索項目リストと FROM 句で修飾された列名を指定して、2 つの
テーブルの Price 列と Order_No 列を区別しています。
select avg(orders.price) as orders_avg,
avg(line_items.price) as line_avg
from orders join line_items
on orders.order_no = line_items.order_no
ORDERS_AVG
12340.64758241
LINE_AVG
1380.16296703
このテーブルには、Promokey、Promo_Type、Promo_Desc、Value、Start_Date、
End_Date という列が定義されています。次の例は、Promotion テーブルに相関名 p
を割り当て、一時的に Promokey 列に Promo_Code、Value 列に Amount という別名
を割り当てる列リストを指定しています。
select promo_code, amount
from promotion p(promo_code, promo_type, promo_desc, amount,
start_date, end_date)
このクエリに、Promotion テーブルと Sales テーブルの自然結合指定を追加すると、
共通の列名が検出されないため、クロス結合が必要になります。これは、クエリの
処理中 Promotion テーブルの Promokey 列の名前が Promo_Code に置き換えられ、
Promokey という名前の列が存在しないためです。
クエリ式 7-25
FROM 句
次のクエリでは、3 種類の結合指定を FROM 句に指定していますが、結果は同じに
なります。
select prod_name, dollars
from sales natural join product
where dollars < 1000
select prod_name, dollars
from sales join product
on sales.classkey = product.classkey
and sales.prodkey = product.prodkey
where dollars < 1000
select prod_name, dollars from sales join product
using (classkey, prodkey)
where dollars < 1000
次の例では、3 つのテーブルの自然結合を指定しています。
select class_type, prod_name, dollars
from class natural join product natural join sales
CLASS_TYPE
Clothing
Clothing
Clothing
Clothing
Clothing
Clothing
PROD_NAME
Aroma t-shirt
Aroma t-shirt
Aroma t-shirt
Aroma t-shirt
Aroma t-shirt
Aroma t-shirt
DOLLARS
54.75
109.50
107.40
197.10
54.75
43.80
次の例では、FROM 句にサブクエリを使用し、Promotion テーブルの Value 列の値
を限定してから、派生テーブルを Sales テーブルに結合します。派生テーブルには、
相関名 (p) を指定する必要があります。
select distinct promo_desc, sum(dollars) as dollars
from (select * from promotion where value > 2.00) as p
join sales on sales.promokey = p.promokey
group by promo_desc
PROMO_DESC
Christmas special
Easter special
7-26
SQL Reference Guide
DOLLARS
1920.00
5280.00
FROM 句
システム テーブルも、基本テーブルやビューと同じ方法で結合することができま
す。次の例は、RBW_SEGMENTS テーブルと RBW_STORAGE テーブルを結合し、
セグメント名 (storage)、物理格納ユニット (PSU) のファイル名
(psu_location)、関連する基本テーブル (table_name) を表示します。
select segname as storage, location as psu_location,
tname as table_name
from rbw_storage join rbw_segments
on rbw_storage.segname = rbw_segments.name;
STORAGE
RBW_SYSTEM
RBW_SYSTEM
RBW_SYSTEM
RBW_SYSTEM
RBW_SYSTEM
DEFAULT_SEGMENT_1
DEFAULT_SEGMENT_2
DEFAULT_SEGMENT_3
DEFAULT_SEGMENT_5
DEFAULT_SEGMENT_7
PSU_LOCATION
RB_DEFAULT_SEGM
RB_DEFAULT_INDE
RB_DEFAULT_TABL
RB_DEFAULT_LOCK
RB_DEFAULT_IDX
dfltseg1_psu1
dfltseg2_psu1
dfltseg3_psu1
dfltseg5_psu1
dfltseg7_psu1
TABLE_NAME
NULL
NULL
NULL
NULL
NULL
MARKET
MARKET
STORE
CLASS
PRODUCT
クエリ式 7-27
サンプリング
サンプリング
サンプリング機能は、データ セット全体ではなく行の「無作為」サンプルを処理す
るクエリを実行する方法を提供します。サンプリング機能を使用するクエリが作成
するリザルト セットは、リザルト セット全体から分散的にサンプリングしたもの
です。たとえば、Sales テーブルの 10% の行から算出した平均日別売上は、テーブ
ル全体から算出したした実際の平均値に近い値になります。
サンプル要求のメカニズムは、SELECT 文の FROM 句の拡張機能です。FROM 句は
オプションの SAMPLE 句をサポートし、SAMPLE 句は次の 2 種類のサンプル要求を
サポートします。
■
■
リザルト セット全体から均一に分散してサンプリングした行のサブセット
データ行が格納された 8 KB ブロックのサブセット
構文
次にクエリ指定の FROM 句におけるオプションの <sample_clause> の構文ダイアグ
ラムを示します。
<size>
SAMPLE
ROW
COUNT
SEED
<value>
EXACT
BLOCK
7-28
SAMPLE
直前の <table_reference> のサンプリングを指定します。
ROW
基本テーブルから指定の数またはパーセントの行をサンプリングす
る、行サンプリングを指定します。デフォルトは ROW です。
EXACT
指定されたサイズと一致するサンプル サイズを、行のサンプリング
によって生成することを保証します。指定された数またはパーセン
トのブロックでサンプルを生成することを常に保証するブロック サ
ンプリングでは、このキーワードを使用できません。パーセントで
サイズを指定する行サンプリングでは、サンプル サイズは小数点以
下を切り捨てた正確な数になります。たとえば、35,967 行の 10% は
3,596 です。EXACT モード ( またはサブクエリ ) サンプリングの最
大誤差は ± 2 行です。
SQL Reference Guide
サンプリング
BLOCK
ブロック サンプリングを指定します。指定の数またはパーセントの
8KB データ ブロックがサンプリングされます。
<size>
サンプル サイズを、基本テーブル内の行数またはブロック数、ある
いは行またはブロックのパーセントで指定します。この値は必須で
す。この値は実数 (FLOAT) 型である必要があります。PERCENT を
指定する場合、100 より小さい値を指定します。
COUNT
サンプル サイズを、行数またはブロック数で指定します。COUNT
を指定しない場合、パーセントの値が返されます。サンプル サイズ
を、行またはブロックのパーセントで指定します。
SEED <value> 乱数発生プログラム用の開始数を指定し、サンプルを再現可能にし
ます。この数値は、正の整数である必要があります。
使用上の注意
サンプリング クエリの結果は、テスト データベースの「トレーニング セット」や、
データ採掘プログラムに渡すデータなど、ほかのアプリケーションの入力として使
用できます。この場合、サンプリング機能は、性能の最適化よりもアプリケーショ
ンの強化に利用されています。クエリやサブクエリがリザルト セット全体を返す
テーブル スキャンを必要としない限り、サンプリングによってクエリやサブクエリ
の性能が最適化されることはまずありません。テーブル スキャンを必要としないク
エリの場合、サンプリング機能を使用すると性能が低下することがあります。
Vista Advisor で候補ビュー分析を行う場合、ファクト テーブルの行のサンプルを制
約すれば、性能の最適化が保証されます。rbw.config ファイルの
ADVISOR_SAMPLE_SIZE パラメータは 5% に設定されているので、デフォルトで
候補分析が最適化されます。Advisor の詳細については、
『IBM Red Brick Vista User’s
Guide』を参照してください。
サンプル要求の対象として、次のいずれかの種類のテーブルを <table_reference> で
指定します。
■
■
■
■
基本テーブル
テンポラリ テーブル
ビュー
サブクエリから抽出したテーブル
システム テーブルのサンプリングはできません。
EXPORT 文、INSERT INTO...SELECT 文、および CREATE VIEW 文の中でも、通常
のビュー ( 事前計算ビュー以外のビュー ) に対するサンプリング機能を使用するこ
とができます。UPDATE 文 および DELETE 文の中ではサンプリング機能を使用でき
ません。
クエリ式 7-29
サンプリング
デフォルトではサンプル サイズを行またはブロックのパーセントで指定しますが、
行数またはブロック数で指定することもできます。サンプル要求の対象が基本テー
ブルまたはテンポラリ テーブルである場合、行とブロックのどちらのサンプリング
も使用できます。しかし、サブクエリから抽出されたテーブルを対象とする場合、
行サンプリングしか使用できません。この制約の理由は、ブロックの概念がデータ
ベース テーブルに格納されたデータにしか適用できないためです。ブロックの概念
は中間クエリ結果には適用できません。
テーブル データをセグメント化してもサンプリングを分散させる効果はありませ
ん。サンプリング対象のテーブルが 2 つのセグメントで構成されていて、サンプル
のパーセント値を 10 に指定した場合、各セグメントから 10 パーセントの行または
ブロックがサンプリングされます。
WHERE 句の制約は、サンプルの選択前ではなく選択後に適用されます。
重要 : いずれかのクエリで <sample_clause> が指定された場合、SuperScan アルゴリ
ズムは無効になります。それ以外の場合、このアルゴリズムは、クエリによる行の
読み取りシーケンスを変更して、サンプルが生成されるのを防ぎます。SuperScan
の技術については、『Administrator's Guide』を参照してください。
行サンプル
サンプルを要求するとき、結果全体の中の一定のパーセントの行をサンプリングす
るか、または特定の行数をサンプリングするかを指定できます。デフォルトのサン
プル要求は、テーブル内の指定のパーセントの行を選択する行サンプルであり、こ
れが最も簡単な方法です。次の例は、Sales テーブル内の約 20 パーセントの行を返
します。
select * from sales sample 20
次の例は、Sales テーブルから約 20 行を無作為に選択して返します。
select * from sales sample 20 count
行サンプルの場合、デフォルトでは指定の行数と実際のサンプル数が正確に一致し
ませんが、正確な行数をサンプリングすることもできます。次の例は、Sales テー
ブルから 20 行を無作為に選択して返します。
select * from sales sample exact 20 count
正確なサンプリングを行うモードでは、データの読み取り ( スキャン動作 ) は並列
実行されますが、サンプリング動作は別々に直列実行されます。デフォルトの不正
確なモードでは、スキャン動作とサンプリング動作はどちらも同時に並列実行され
ます。
重要 : 正確な行数のサンプルを要求した場合、処理速度は低下します。
7-30
SQL Reference Guide
サンプリング
ブロック サンプル
基本テーブルのサンプルでは、テーブル データが格納されたデータ ブロックのサ
ブセットを読み取るサンプルを要求できます。無作為に選択されたブロックのリス
トに格納されたすべての行がサンプル データセットを構成します。Red Brick の
データ行は 8 KB のブロック単位で格納され、行がブロックをまたがって分割され
ることはありません。10 パーセントの行サンプルを行うと、これらの行を生成する
ためにデータ ブロックのほとんどすべてがアクセスされます。しかし、10 パーセ
ントのブロック サンプルを行うと、ソース データの 10 パーセントだけが正確にア
クセスされます。デフォルトは、パーセント サンプルです。
select * from sales sample block 10
ブロック サンプリングによって、本当に無作為な行サンプリングとは異なる、「ク
ラスタ化サンプリング」ができます。この方法を使用すると性能は上がりますが、
技巧が複雑であり分析能力は落ちます。DBA は隣接するデータ行を意図的に選択し
ます。この場合、行が論理的にグループ化されたデータ配置になっていることを前
提とします。そのため性能向上の代償として、本当に分散されたサンプリングがで
きないことがあります。
ヒント : 分散されたサンプルが性能の向上よりも重要でなければ、ブロック サン
プリングを選択してください。
ブロック サンプリングの場合、ブロック数指定の方がパーセント指定よりも有効で
す。たとえば、テーブル内のブロック数がわからない場合でも、CHECK
TABLE...VERBOSE コマンドを使用すれば、テーブル内の行数を簡単に知ることが
できます。ブロック当たりの行数を判定すれば、それらの統計情報に基づいてブ
ロック数を指定することができます。
シード
クエリでサンプリングが使用された場合、サンプルの再生成が必要になる場合があ
ります。シード値、すなわち生成番号の疑似乱数シーケンスの開始番号を指定する
ことで、同じデータには同じクエリを実行できるように再生成可能サンプルを管理
することができます。重要なことは、どのシード番号を指定するかではなく、その
番号に一意性があることです。たとえば、シード値を 2、または 2000 に設定できま
すが、どちらに設定しても、そのシードに基づくサンプリング クエリでは同じリザ
ルト セットが返されます。
シリアル (SERIAL) データ型の詳細については、9-59 ページ「SET SAMPLE SEED」
を参照してください。
クエリ式 7-31
サンプリング
マージン
行サンプリングで返されるサンプルの実際のサイズは、要求したサイズと異なるこ
とがあります。マージン パラメータを設定することにより、行サンプルのサイズの
分散度を監視できます。実際のサイズが、指定したマージン百分位数の範囲外にな
るたびに、警告メッセージが表示されます。たとえば、マージンを 10 に設定した
場合、サンプル クエリで返される行の量が、要求した量よりも 10% を上回る、ま
たは下回るたびに、メッセージが表示されます。マージン設定にかかわらず、クエ
リは完全に実行されます。
マージンの詳細については、9-57 ページ「SET SAMPLE MARGIN」を参照してくだ
さい。
行サンプリングとブロック サンプリングの例
シングル テーブル行サンプル
次のクエリは、Sales テーブル内の行の約 5 パーセントのサンプルに基づき、Sales
テーブルの Dallars の平均値を返します。
select avg(dollars) from sales sample 5
102.40746567
このテーブル内の行 ( 合計 69,941 行 ) の 5 パーセントは約 3,500 行であるため、それ
と等価の行数サンプルを行うと次のようになります。
select avg(dollars) from sales sample 3500 count
101.99215714
どちらのサンプル クエリの結果も、実際の平均値に非常に近い値になります。
select avg(dollars) from sales
101.91947641
シングル テーブル ブロック サンプル
次の例は、前の例と同じ平均を要求しますが、Sales テーブルをブロック単位でサ
ンプリングします。
7-32
SQL Reference Guide
サンプリング
CHECK TABLE...VERBOSE を使用してブロック数を判定することができます。Sales
テーブルの行の 5 パーセントは 13 ブロックにほぼ等しく、これは Sales テーブルの
総ブロック数の 5 パーセントです。したがって、上記の 5 パーセントの行サンプル
と等価なブロック サンプルは、次のいずれかになります。
select avg(dollars) from sales sample block 13 count
102.56437937
select avg(dollars) from sales sample block 5
102.53939393
ブロック サンプルの結果は、実際の結果にも、行サンプルの結果にも近い値になり
ます。
クエリ式 7-33
サンプリング
サンプルへの結合
次のサンプル クエリは、サブクエリを使用して、Period ディメンジョン テーブル
から分散的にサンプリングした行のサブセットを生成します。テーブルの約 3 パー
セントを返し、それを Sales ファクト テーブルと Store ディメンジョン テーブルに
結合することにより、サンプルした日付について店舗ごとのドルの合計を算出しま
す。SET STATS INFO は、サンプリング動作に関する情報を返すために使用されま
す。
set stats info;
select date, store_name, sum(dollars) as daily_store_sales
from sales, store,
(select perkey, date from period sample 3)
as t1(perkey, date)
where t1.perkey = sales.perkey
and sales.storekey = store.storekey
and extract(year from date) = 1999
group by date, store_name
order by date, store_name;
** STATISTICS ** (500) Compilation = 00:00:00.07 cp time,
00:00:00.05 time, Logical IO count=56
DATE
1999-01-31
1999-01-31
1999-01-31
...
1999-12-04
1999-12-04
1999-12-04
STORE_NAME
Beaches Brew
Beans of Boston
Coffee Brewers
San Jose Roasting Company
Texas Teahouse
The Coffee Club
DAILY_STORE_SALES
1098.50
282.25
1095.25
497.00
993.75
197.25
** STATISTICS ** (1457) EXCHANGE (ID:6) Parallelism over 1
times High:4 Low:4 Average: 4.
** STATISTICS ** (1457) EXCHANGE (ID:11) Parallelism over 1
times High:1 Low:1 Average: 1.
** STATISTICS ** (1458) CHOOSE PLAN (ID:2) Choice:1 was chosen
1 times.
** STATISTICS ** (1459) CHOOSE PLAN (ID:2) STARjoin on 1
tables was done 1 times.
** STATISTICS ** (1460) CHOOSE PLAN (ID:2) used Index
SALES_STAR_IDX of Table SALES 1 times for STARjoin.
** INFORMATION ** (1466) SAMPLE SCAN (ID:4) Sample
Seed:963616913. Sample Margin:10 percent.Sample Size
specified 3.00000000 percent (25) rows, returned 3.16686967
percent (26) rows.
** STATISTICS ** (500) Time = 00:00:00.32 cp time, 00:00:00.39
time, Logical IO count=296
** INFORMATION ** (256) 229 rows returned.
7-34
SQL Reference Guide
サンプリング
サブクエリでサンプリングを使用すると、アウター クエリへの入力が減少し、それ
により STARjoin クエリの処理速度が上がります。
サンプルされた 26 行 ( メッセージ 1466 を参照 ) は、Sales テーブルと Store テーブル
への結合に対する入力として使用されました。これらの結合の結果として、229 行 (
メッセージ 256 を参照 ) からなる最終的なリザルト セットが作成されました。前に
示したこのリザルト セットでは、最初と最後の 3 行を除くすべての行が省略されて
います。
再生成可能サンプル
上記のクエリで Period テーブルのサンプルを再生成する場合は、メッセージ 1466
に示されたシード値を指定して、クエリを再実行できます。
select date, store_name, sum(dollars) as daily_store_sales
from sales, store,
(select perkey, date from period sample 3
seed 963616913)
as t1(perkey, date)
where t1.perkey = sales.perkey
and sales.storekey = store.storekey
and extract(year from date) = 1999
group by date, store_name
order by date, store_name
クエリを実行する前に、シード値を設定しておくこともできます。
set sample seed 963616913
自分専用のシード番号を選択して、クエリの実行前またはクエリの内部でそのシー
ド値を指定することができます。
set sample seed 9000
または
select date, store_name, sum(dollars) as daily_store_sales
from sales, store,
(select perkey, date from period sample 3
seed 9000)
...
クエリ式 7-35
WHERE 句
WHERE 句
WHERE 句には、FROM 句から得られた中間リザルト テーブルの各行に適用する検
索条件を指定します。
構文
ここではクエリ指定を繰り返して、<where_clause> の構文の参照のポイントを与え
ています。
SELECT
<select_list>
<from_clause>
<where_clause>
<group_by_clause>
<having_clause>
<when_clause>
次に WHERE 句の構文ダイアグラムを示します。
WHERE
<search_condition>
<search_condition> FROM 句から得られた中間リザルト テーブルの各行について真、
偽、不定を判定する条件です。条件が真と判定された行はリザ
ルト テーブルに残され、それ以外は除外されます。WHERE 句
を省略すると、中間リザルト テーブルのすべての行が残されま
す。
検索条件は、次の条件を満たしている必要があります。
■
■
7-36
3-10 ページ「条件」で説明した規則に従って記述されていること
検索条件で参照する列は、中間リザルト テーブルの列を一意に指定するも
のか、サブクエリでのみ可能な相関列の参照であること
SQL Reference Guide
WHERE 句
結合述部
結合するテーブルを FROM 句に指定した場合は、WHERE 句に結合を指定できま
す。結合述部は、7-11 ページで説明した規則に従っている必要があります。たとえ
ば、次のクエリは、City 列に基づく State テーブルと Region テーブルの内部等価結
合です。
select *
from state, region
where state.city = region.city
標準とは異なる外部結合の構文
外部結合の構文は、7-10 ページに示す FROM 句の構文にすることをお勧めします。
この構文は ANSI SQL-92 規格に準拠しています。
警告 : IBM Red Brick Warehouse は、次のダイアグラムに示す構文を、移行のために
のみサポートしています。この構文は、WHERE 句におけるレフト、ライト、フル
の外部結合指定を記述することができます。
Sybase 式の構文
<table_1.col>
*=
<table_2.col>
<table_1.col>
=*
*=*
<table_2.col>
<table_1.col>
<table_2.col>
Oracle 式の構文
<table_1.col>
=
<table_2.col(+)>
<table_1.col(+)>
=
=
<table_2.col>
<table_1.col(+)>
<table_2.col(+)>
クエリ式 7-37
WHERE 句
<table_1.col>、 2 つのテーブルから、比較可能なデータ型の 2 列を指定します。た
<table_2.col> とえば、Sales テーブルと Orders テーブルのレフト外部結合は、次
のように指定します。
where sales.perkey *= orders.perkey
Perkey 列を基準とした内部等価結合から返されるすべての行と、
Sales テーブルのうち、結合した列について Orders テーブルの行と
一致しない行が返されます。
上記と同じレフト外部結合は、次のように指定することもできま
す。
where sales.perkey = orders.perkey(+)
例
次のクエリは、1998 年 12 月の日別売上が 500 ドルを超えた製品の売上金額を返し
ます。WHERE 句には、Dollars 列の列エリアス top_prods が使用されていることに
注意してください。WHERE 句には、FROM 句で指定したテーブルについて、結合
の基準となる列も指定されています。
select prod_name, dollars as top_prods
from sales s, product p, period d
where s.classkey = p.classkey
and s.prodkey = p.prodkey
and s.perkey = d.perkey
and year = 1998
and month = 'DEC'
and top_prods > 500
PROD_NAME
Espresso Machine Italiano
Coffee Sampler
7-38
SQL Reference Guide
TOP_PRODS
699.65
570.00
GROUP BY 句
GROUP BY 句
GROUP BY 句は、指定した列に基づいてリザルト テーブルをグループ分けします。
構文
ここではクエリ指定を繰り返して、<group_by_clause> の構文の参照のポイントを与
えています。
SELECT
<select_list>
<from_clause>
<where_clause>
<group_by_clause>
<having_clause>
<when_clause>
次に GROUP BY 句の構文ダイアグラムを示します。
,
GROUP BY
<column_name>
<column_name> リザルト テーブルの列を一意に指定します。GROUP BY 句で参照す
る列を、グルーピング列と呼びます。
GROUP BY 句は、グルーピング列で定義された行のグループにリザルト テーブルを
分割します。1 つのグループは、1 行以上から構成されます。複数の行からなるグ
ループでは、どの行も GROUP BY に指定した列の値が同じです。NULL は列内の一
意な値として扱われます。リザルト テーブルには、各グループを集約した行が返さ
れます。
GROUP BY に指定するグループ分けの基準となる列は、リザルト テーブルに表示で
きます。ただし、検索項目リストになければ、リザルト テーブルには表示されませ
ん。
クエリ式 7-39
GROUP BY 句
クエリに GROUP BY 句を指定し、そのクエリの FROM 句に指定した列を検索項目
リストに指定する場合は、検索項目リストで参照している列は、集約関数の引数
か、GROUP BY 句に指定されている必要があります。つまり検索項目リストの式
は、次のいずれかである必要があります。
■
■
■
■
文字定数、日付時間定数、数値定数
GROUP BY 句に指定した列または列エリアス、または GROUP BY 句に指
定した列で構成される式
FROM 句に指定したテーブルの列だけを参照する定数または式を引数とす
る集約関数
GROUP BY 句に指定した列だけを参照する式、定数を引数とする RISQL
表示関数、OLAP 関数、スカラ関数、またはそのクエリで有効な集約関数
GROUP BY に指定する列は、HAVING 句の検索条件に指定することができます。
検索項目リストにサブクエリを指定したクエリで GROUP BY 句を指定する場合で相
関列がある場合、アウター クエリの GROUP BY 句で相関列を指定してください。
相関サブクエリの詳細については、このマニュアルの 7-72 ページおよび『SQL
Self-Study Guide』を参照してください。
例
次のクエリは、販売促進活動に基づいてグループ分けした 2000 年 1 月の売上合計を
返します。
select promo_desc, sum(dollars) as promo_totals
from promotion natural join sales natural join period
where year = 2000
and month = 'JAN'
group by promo_desc
PROMO_DESC
No promotion
Temporary price reduction
Aroma catalog coupon
Monthly coffee special
Store display
7-40
SQL Reference Guide
PROMO_TOTALS
250668.75
4046.25
5216.80
1083.00
1896.75
HAVING 句
HAVING 句
HAVING 句は、GROUP BY 句から得られたリザルト テーブルに適用する条件を指定
します。HAVING 句が使用できるのは、検索項目リストに集約関数を指定している
か GROUP BY 句を指定しているクエリ式だけです。
構文
ここではクエリ指定を繰り返して、<having_clause> の構文の参照のポイントを与え
ています。
SELECT
<select_list>
<from_clause>
<where_clause>
<group_by_clause>
<having_clause>
<when_clause>
次に HAVING 句の構文ダイアグラムを示します。
HAVING
<search_condition>
<search_condition>
リザルト テーブルの各グループについて真、偽、不定を判定
する条件です。条件が真と判定されたグループはリザルト
テーブルに残され、それ以外は除外されます。HAVING 句を
省略すると、リザルト テーブルのすべてのグループが残され
ます。
検索条件は、次の条件を満たしている必要があります。
■
■
3-10 ページ「条件」で説明した規則に従って記述されていること
条件で参照される列が、グルーピング列、相関列の参照、集約関数に指定
された列のいずれかであること
条件に相関サブクエリが指定された場合、その相関サブクエリはリザルト テーブル
の各グループについて評価されます。
クエリ式 7-41
HAVING 句
例
次のクエリは、売上が 50,000 ドルを超えた製品について、1998 年の売上合計を返し
ます。
select prod_name, sum(dollars) as total_1998
from product natural join sales natural join period
where year = 1998
group by prod_name
having total_1998 > 50000
PROD_NAME
Darjeeling Number 1
La Antigua
Expresso XO
Aroma Roma
Colombiano
Veracruzano
NA Lite
Ruby's Allspice
Darjeeling Special
Xalapa Lapa
Lotta Latte
Demitasse Ms
Assam Gold Blend
Cafe Au Lait
7-42
SQL Reference Guide
TOTAL_199
62283.25
197069.50
224020.00
203544.00
188474.50
201230.00
231845.00
133188.50
127207.00
251590.00
217994.50
282385.25
71419.00
213510.00
WHEN 句
WHEN 句
集約関数 (AVG、MIN、MAX、SUM、COUNT) の演算、HAVING 句の評価、RISQL
表示関数または OLAP 関数の処理の結果得られたリザルト テーブルに対する条件を
指定します。条件を満たす行は最終的なリザルト テーブルに残され、それ以外は除
外されます。
構文
ここではクエリ指定を繰り返して、<when_clause> の構文の参照のポイントを与え
ています。
SELECT
<from_clause>
<select_list>
<where_clause>
<having_clause>
<group_by_clause>
<when_clause>
次に WHEN 句の構文ダイアグラムを示します。
WHEN
<condition>
<condition>
集約関数の演算、HAVING 句の評価、RISQL 表示関数または OLAP
関数の処理の結果得られたリザルト テーブルに対する条件を指定し
ます。AND、OR、NOT の各論理接続詞を使った複合条件を指定す
ることもできます。
条件の詳細については、第 3 章「式と条件」を参照してください。
使用上の注意
WHEN 句の RISQL 表示関数に影響を与えるのは、単純な RESET BY 句だけです。
複雑な RESET BY 指定によって行を選別するには、検索項目で列エリアスを指定
し、その列エリアスを WHEN 句で参照する必要があります。この例は、7-62 ペー
ジを参照してください。
クエリ式 7-43
WHEN 句
例
次のクエリは、1999 年の合計売上に基づいて各製品を順位付けし、上位 10 製品の
売上を返します。
select prod_name, sum(dollars) as sales,
rank() over(order by sales) as top_ten_99
from sales natural join product
natural join period
where year = 1999
group by prod_name
when top_ten_99 <= 10
7-44
SQL Reference Guide
UNION、EXCEPT、INTERSECT 式
UNION、EXCEPT、INTERSECT 式
UNION、EXCEPT、INTERSECT の演算子はいずれも、複数のリザルト セットを処
理し、1 つのリザルト セットを返します。
■
■
■
UNION 演算子は、2 つのクエリ式の結果を 1 つのリザルト セットに結合し
ます。クエリ式は個別に実行され、各結果が 1 つのリザルト セットに統合
されます。
EXCEPT 演算子は、2 つのクエリ式の結果を評価し、差異を返します。最
初のクエリ式から返されるすべての行から、2 番めのクエリ式から返され
る行を除外した結果がリザルト セットに返されます。
INTERSECT 演算子は、2 つのクエリ式の結果を評価し、各結果に共通の行
だけを返します。
次の図は上記の概念をベン図で表したものです。陰影の部分がリザルト セットを示
しています。
図 7-2
リザルト セット
Union
Except
Intersect
構文
次に UNION 式の構文ダイアグラムを示します。
(
(
<query_expression>
EXCEPT
)
<query_expression>
UNION
ALL
INTERSECT
クエリ式 7-45
UNION、EXCEPT、INTERSECT 式
<query_expression>
7-5 ページで説明した結合クエリ式または非結合クエリ式を
指定します。
ステートメント中の各クエリ式では、それぞれの検索項目リ
ストの列数が一致する必要があります。各リストの対応する
列は、同じ順序で指定する必要がありますが、列名は一致し
なくてもかまいません。リザルト テーブルの列名は、最初の
クエリ式のものが使用されます。かっこを使っても変わりま
せん。
リザルト テーブルの列見出しを変更するには、最初のクエリ
式の検索項目リストに AS 句を使用します。<
union_expression> を FROM 句で使用する場合は、相関名と列
リストを使って見出しを指定します。7-13 ページを参照して
ください。
各クエリ式の対応する列は、同じデータ型か、データ型間で
暗黙の変換が行われるものにしてください。短いデータ型は
長いデータ型に変換され、精度の低いデータ型は精度の高い
データ型に変換されます。たとえば、一方の列が 小桁実数
(REAL) 型で、対応する列が実数 (FLOAT) 型の場合は、リザ
ルト テーブルの列は実数 (FLOAT) 型になります。これは小桁
実数 (REAL) 型より実数 (FLOAT) 型の方が精度が高いためで
す。
対応する列のデータ型間の変換は、7-49 ページのデータ型変
換表に示します。
UNION | EXCEPT |
INTERSECT
UNION は、2 つ以上のリザルト セットを 1 つのリザルト
セットに結合します。
EXCEPT は、2 つのリザルト セットを評価し、最初のリザル
ト セットから、2 番めのリザルト セットにない行を返しま
す。
INTERSECT は、2 つのリザルト セットに共通の行をリザル
ト セットに返します。
UNION、INTERSECT、EXCEPT の各演算子は、1 つの
<union_expression> にまとめることができます。
複数の演算子を使用したステートメントのデフォルト評価順
( 優先順位 ) は、左から右になります。ただし、INTERSECT
演算子は、UNION および EXCEPT の前に評価されます。評
価順は、かっこを使って変更できます。
7-46
SQL Reference Guide
UNION、EXCEPT、INTERSECT 式
ALL
ALL を指定すると、<union_expression> の結果から重複行が
除外されません。2 つのクエリ式から同じ行が返された場合、
2 行とも最終結果に返されます。ALL を指定しないと、重複
行はリザルト セットから除外されます。
複数の UNION、EXCEPT、INTERSECT 演算子と ALL キー
ワードを指定したステートメントでは、評価順によって結果
が変わります。重複行が除外されるかどうかは、クエリの評
価順と ALL キーワードの位置関係によって決まります。最後
に実行される演算に ALL キーワードを指定しないと、直前の
評価で残された重複行は除外されてしまいます。
クエリ式 7-47
UNION、EXCEPT、INTERSECT 式
使用上の注意
UNION 演算子と EXCEPT 演算子の優先順位は同じです。複数の演算子を指定した
クエリは、左から右に評価されます。
<query_expression1> union<query_expression2> except
<query_expression3>
上記のクエリは、次の順序で評価されます。
(<query_expression1> union <query_expression2>) except
<query_expression3>
INTERSECT 演算子は、UNION 演算子や EXCEPT 演算子よりも優先されます。かっ
こがなければ、INTERSECT 演算子が最初に評価されることになります。
<query_expression1> union<query_expression2> intersect
<query_expression3>
上記のクエリは、次の順序で評価されます。
<query_expression1> union (<query_expression2> intersect
<query_expression3>)
かっこを使ってデフォルトの優先順位を変更すると、処理順が変わり、重複行が除
外されるかどうかも変わります。
<union_expression> に指定した結合は、かっこでデフォルト評価順を変更した場合
を除き、上記の 3 つの演算子よりも優先されます。
INSERT INTO...SELECT 文には、UNION、INTERSECT、EXCEPT 演算子を使用でき
ます。
insert into orders.all
select * from orders.new
union
select * from orders.old
OR 接続詞を使って検索条件を指定したクエリは、UNION 演算子を使って書き直し
た方がクエリ性能が向上することがあります。この例については、『SQL Self-Study
Guide』の第 5 章を参照してください。
7-48
SQL Reference Guide
UNION、EXCEPT、INTERSECT 式
データ型の変換
UNION、INTERSECT、EXCEPT 演算で対応する列のデータ型が異なる場合、デー
タ型の変換結果は次の表のようになります。
データベース サーバが、サポートするデータ型のいずれかと CHAR、VARCHAR、
DEC、TINYINT、SMALLINT データ型のいずれかを比較する場合、変換結果は次の
表のようになります。
DEC(p2,
s2)
TINYINT
SMALLINT
VARCHAR
(MAX(M,N))
error
error
error
VARCHAR
(MAX(M,N))
VARCHAR
(MAX(M,N))
error
error
error
DEC(p1,s1)
error
error
†
†
†
TINYINT
error
error
†
TINYINT
SMALLINT
SMALLINT
error
error
†
SMALLINT
SMALLINT
INTEGER
error
error
†
INTEGER
INTEGER
SERIAL
error
error
†
INTEGER
INTEGER
error
error
FLOAT
REAL
REAL
FLOAT**
error
error
FLOAT
FLOAT
FLOAT
DATE
error
error
error
error
error
TIME(m)
error
error
error
error
error
TIMESTAMP(m)
error
error
error
error
error
CHAR(n)
VARCHAR(n)
CHAR(m)
CHAR
(MAX(M,N))
VARCHAR(m)
REAL
§
†
変換結果は、データ型の精度とスケールによって異なります。値を格納できる最
小許容データ型が使用されます。
§
REAL は、FLOAT(4) と同じです。
**
FLOAT は、DOUBLE PRECISION と同じです。
クエリ式 7-49
UNION、EXCEPT、INTERSECT 式
データベース サーバが、サポートするデータ型のいずれかと INTEGER、REAL、
FLOAT、DATE、TIME、TIMESTAMP データ型のいずれかを比較する場合、変換結
果は次の表のようになります。
INTEGER
REAL§
FLOAT**
DATE
TIME(n)
TIMESTAMP(n)
CHAR(m)
error
error
error
error
error
error
VARCHAR(m)
error
error
error
error
error
error
DEC(p1,s1)
†
FLOAT
FLOAT
error
error
error
TINYINT
INTEGER
REAL
FLOAT
error
error
error
SMALLINT
INTEGER
REAL
FLOAT
error
error
error
INTEGER
INTEGER
FLOAT
FLOAT
error
error
error
SERIAL
INTEGER
FLOAT
FLOAT
error
error
error
REAL
FLOAT
REAL
FLOAT
error
error
error
FLOAT**
FLOAT
FLOAT
FLOAT
error
error
error
DATE
error
error
error
DATE
error
error
TIME(m)
error
error
error
error
TIME(MAX(M,N))
error
TIMESTAMP(m)
error
error
error
error
error
TIMESTAMP
(MAX(M,N))
§
†
変換結果は、データ型の精度とスケールによって異なります。値を格納できる最
小許容データ型が使用されます。
§
REAL は、FLOAT(4) と同じです。
**
7-50
FLOAT は、DOUBLE PRECISION と同じです。
SQL Reference Guide
UNION、EXCEPT、INTERSECT 式
例
Store テーブルと Market テーブルの City 列と Hq_City 列からデータを抽出して結合
する、単純な UNION 演算の例を示します。
select hq_city as ca_cities
from market
where hq_state like 'CA%'
union
select city
from store
where state like 'CA%'
CA_CITIES
Cupertino
Los Angeles
Los Gatos
Oakland
San Francisco
San Jose
次に、ALL キーワードを使用し、Hq_City 列と City 列のエントリが重複していても
除外しない例を示します。
select hq_city as ca_cities
from market
where hq_state like 'CA%'
union all
select city
from store
where state like 'CA%'
CA_CITIES
San Jose
San Francisco
Oakland
Los Angeles
Los Gatos
San Jose
Cupertino
Los Angeles
San Jose
クエリ式 7-51
UNION、EXCEPT、INTERSECT 式
次の例では、UNION 演算子が EXCEPT 演算子に置き換えられています。その結果、
Market テーブルにある California 州の都市のうち、Store テーブルにないものだけが
返されます。
select hq_city as ca_cities
from market
where hq_state like 'CA%'
except
select city
from store
where state like 'CA%'
CA_CITIES
Oakland
San Francisco
次の例では、UNION 演算子が INTERSECT 演算子に置き換えられています。その結
果、Market テーブルと Store テーブルの両方にある California 州の都市だけが返さ
れます。
select hq_city as ca_cities
from market
where hq_state like 'CA%'
intersect
select city
from store
where state like 'CA%'
CA_CITIES
Los Angeles
San Jose
次のクエリは、複数の INTERSECT 演算子を使って、5 つのテーブルに共通のキー
値を返します。
select prodkey as common_keys from product
intersect select classkey from class
intersect select promokey from promotion
intersect select perkey from period
intersect select storekey from store
COMMON_KEYS
1
3
4
5
12
7-52
SQL Reference Guide
UNION、EXCEPT、INTERSECT 式
次に、UNION 演算子と INTERSECT 演算子を含むクエリの評価順をかっこで指定す
る例を示します。UNION 演算子はかっこで囲まれているため、最初に評価されま
す。かっこがなければ INTERSECT 演算子が優先され、リザルト セットの内容が異
なる可能性があります。
(select prod_name from product
natural join sales_canadian
union
select prod_name from product
natural join sales_mexican)
intersect
select prod_name from product
natural join sales
かっこは、UNION、EXCEPT、INTERSECT 演算のデフォルト評価順よりも優先さ
れるため、最終的なリザルト セットから重複行を除外するかどうかにも影響が生じ
ます。次の 2 つのクエリは、この例です。
最初のクエリでは、左から右のデフォルト評価順に従って、1 番めと 2 番めのクエ
リ式が最初に評価されます。UNION ALL 式が指定されているため、重複行は除外
されません。その後の UNION は、1 番めと 2 番めのクエリ式の結果を 3 番めのクエ
リ式と結合し、重複行を除外します。
select prod_name
natural join
union all
select prod_name
natural join
union
select prod_name
natural join
from product
sales_canadian
from product
sales_mexican
from product
sales
次のクエリでは、2 番めと 3 番めのクエリ式を結合する union が最初に評価され、重
複行が除外されます。その後で、1 番めのクエリ式と、2 番めと 3 番めのクエリ式の
結果とを結合する UNION ALL 演算が評価され、重複行は残されます。
select prod_name from product
natural join sales_canadian
union all
(select prod_name from product
natural join sales_mexican
union
select prod_name from product
natural join sales)
UNION、INTERSECT、EXCEPT 演算子を含むほかのクエリ例については、『SQL
Self-Study Guide』を参照してください。
クエリ式 7-53
SELECT 文
SELECT 文
SELECT 文は、データベースから複数のデータ行を抽出します。任意のクエリ式
と、その後に指定するオプションの SUPPRESS BY 句や ORDER BY 句から構成され
ます。クエリ式を、データベース サーバが実行できる SELECT 文に変えるには、セ
ミコロン ( または使用しているエントリ ツールに応じた終端記号 ) を付加します。
単純な例をいくつか示します。
■
テーブル結合 :
■
クエリ指定 :
■
UNION 式 :
sales_east natural join sales_west;
select * from sales_east natural join sales_west;
select * from sales_east union select * from
sales_west;
■
明示的テーブル :
table sales_east;
SELECT 文は、SELECT キーワードを必要とするとは限りません。クエリ式により、
検索項目リストや FROM 句が暗黙的に指定される場合もあります。
構文
次に SELECT 文の構文ダイアグラムを示します。
<query_expression>
<order_by_clause>
7-54
SQL Reference Guide
<suppress_by_clause>
ORDER BY 句
<query_expression>
7-5 ページで説明した結合クエリ式または非結合クエリ式を指
定します。
<order_by_clause>
リザルト テーブルの行をソートします。詳細については、
7-55 ページ「ORDER BY 句」を参照してください。ORDER
BY 句には、7-59 ページと 7-63 ページ でそれぞれ定義されて
いる RESET BY と BREAK BY の 2 つの RISQL サブ句を指定す
ることもできます。
BREAK BY 句を指定した SELECT 文は、INSERT 文では使用で
きません。
<suppress_by_clause> 指定した列に NULL、空白、または 0 が格納されていた場合
に、最終的なリザルト セットからその行を除外します。詳細
については、7-66 ページ「SUPPRESS BY 句」を参照してくだ
さい。
ORDER BY 句
ORDER BY 句は、指定した列の値に応じて、リザルト テーブルの行を昇順または降
順にソートします。
構文
次に ORDER BY 句の構文ダイアグラムを示します。
,
ORDER BY
<column_name>
<integer>
ASC
DESC
RESET BY <subclause>
NULL
FIRST
LAST
BREAK BY <subclause>
クエリ式 7-55
ORDER BY 句
<column_name> リザルト テーブルの行をソートする基準となる列を指定します。
結果のソートに使用する列は、リザルト テーブルに表示しなくても
かまいません。検索項目リストにない列を基準にソートする場合
は、ソートの基準列は表示されません。ORDER BY 句の前にあるク
エリ式がクエリ指定の場合は、検索項目リストに指定するすべての
列を GROUP BY 句に指定しないと、列に基づくソートはできませ
ん。
重複を除外する DISTINCT キーワードを SELECT 句に使用する場合
は、ORDER BY 句に指定するすべての列を検索項目リストに指定し
てください。
ORDER BY 句に複数の列名を指定した場合は、各列を組み合わせた
ソート順になり、優先順位は左から右になります。
<integer>
検索項目リストの列の相対列番号を指定します。0 より大きく、リ
ザルト テーブルの列数以下の整数を指定してください。この整数
は、検索項目リストの k 番めの列を指定します。
ASC
昇順に値をソートします。デフォルトは ASC です。
DESC
降順に値をソートします。
NULL
デフォルトのソートでは、NULL は、ホストのオペレーティング シ
ステムの照合シーケンスの最大値より大きいと評価されます。この
ため、昇順ソートの場合はシーケンスの最後、降順ソートの場合は
シーケンスの最初になります。デフォルトは、次の時点で変更でき
ます。
■
■
■
データベース サーバ初期化ファイルからデータベース
サーバを初期化したとき
SET ORDER BY 文を使ってクエリを実行する前
NULL サブ句を使ったクエリの実行中
データベース サーバ初期化ファイル (.rbwrc ファイル ) で NULL の
初期デフォルト位置を決める方法は、
『Administrator's Guide』で説明
されています。デフォルトの位置をクエリごとに変更する SET
ORDER BY 文は、9-38 ページで説明します。
整列順序
行は、各列のデータ型に応じた順にソートされます。数値データ型の場合は値の大
きさの順、文字データ型の場合はアルファベット順、日付時間データ型の場合は時
系列にソートされます。ソート シーケンスのどこで NULL が現れるかは、前の説明
を参照してください。
7-56
SQL Reference Guide
ORDER BY 句
データベース サーバは、サーバ ロケールが指定する照合シーケンスおよびソート
方法に従ってデータを比較、ソートします。異なるソート方法をクライアントに指
定しても、影響はありません。データベース サーバ ロケールの設定の詳細につい
ては、『Administrator's Guide』を参照してください。
使用上の注意
UNION 式の後に指定された ORDER BY 句は、最初のクエリ式から得られたテーブ
ルで指定された列を基準に、最終的なリザルト セットをソートする必要がありま
す。つまり、最初のクエリ式でエリアスを割り当てられた列名はそのエリアスで参
照される必要があり、その限定列を UNION 式の ORDER BY 句に指定することはで
きません。
UNION 式の後に指定される ORDER BY 句には、BREAK BY サブ句は使用できます
が、RESET BY 句は使用できません。
ORDER BY 句では、OLAP 関数のエリアス、またはクエリのほかの場所で使われて
いる OLAP 関数の定位置参照のどちらかを使うことができます。RISQL 表示関数を
ORDER BY 句で参照することはできません。
例
次の SELECT 文は、クエリ式にテーブル結合を指定して class テーブルと product
テーブルを結合し、得られた 6 列のテーブルを、package type 列を基準にソートしま
す。
class natural join product
order by pkg_type
CLASSKEY
8
8
8
8
8
8
8
CLASS_TYPE
Gifts
Gifts
Gifts
Gifts
Gifts
Gifts
Gifts
CLASS_DESC
Samplers
Samplers
Samplers
Samplers
Samplers
Samplers
Samplers
PRODKEY
31
30
20
4
10
5
3
PROD_NAME
Aroma Sounds CD
Aroma Sounds CD
Easter Sampler
Coffee Sampler
Christmas Sampler
Spice Sampler
Tea Sampler
KG_TYPE
Aroma designer box
Aroma designer box
Gift box
Gift box
Gift box
Gift box
Gift box
クエリ式 7-57
ORDER BY 句
次の SELECT 文は、UNION 式をクエリ式として使用しています。結果は、price 列
を基準にソートされます。最初のクエリ式の検索項目リストで指定される列エリア
ス Order_Amounts は Price 列を表し、ORDER BY 句で参照されています。ORDER
BY 句には、相対列番号 2 を使用することもできますが、「price」という語は使用で
きません。
select prod_name, price as order_amounts
from period natural join product natural join line_items
where year = 1998
and qtr = 'Q1_98'
union
select prod_name, price
from product, line_items
where prod_name like 'Lotta%'
order by order_amounts
次のクエリは、California 州の店舗で販売した袋詰め製品について、1999 年の売上
を返します。リザルト テーブルは、都市別に製品名と合計売上に基づいて降順に
ソートされます。
select prod_name, city, sum(dollars) as city_total
from sales natural join product
natural join store
natural join period
where year = 1999
and state = 'CA'
and pkg_type like '%bag%'
group by prod_name, city
order by prod_name, city_total desc
次のクエリは、Minneapolis で販売した製品について、1999 年 10 月の売上を返しま
す。リザルト テーブルは、quantity 列を基準に降順にソートされます。Quantity 列
は表示されないことに注意してください。
select prod_name, dollars
from sales natural join product
natural join period
natural join store
where city like 'Minn%'
and year = 1999
and month = 'OCT'
order by quantity desc
PROD_NAME
Colombiano
Aroma Roma
Colombiano
Colombiano
Aroma Roma
La Antigua
Veracruzano
7-58
SQL Reference Guide
DOLLARS
330.75
355.25
330.75
317.25
333.50
333.50
337.50
ORDER BY 句
次のクエリは、各都市で販売した Lotta Latte の売上合計と累積売上を返し、地区名
と都市名を基準にソートします。
select city, region, sum(dollars) as total_dollars,
cume(sum(dollars)) as running_total
from sales natural join product
natural join store
natural join market
where prod_name like 'Lotta%'
group by region, city
order by region, city
CITY
Chicago
Detroit
Milwaukee
Minneapolis
Boston
Hartford
New York
Philadelphia
Atlanta
Houston
Miami
New Orleans
Cupertino
Los Angeles
Los Gatos
Phoenix
San Jose
REGION
Central
Central
Central
Central
North
North
North
North
South
South
South
South
West
West
West
West
West
TOTAL_DOLLARS
32432.00
28033.00
31133.00
18475.50
26849.00
23896.50
35420.50
26848.50
30390.00
29766.00
28056.00
30878.50
29908.00
27887.00
32369.50
32813.50
68298.00
RUNNING_TOTAL
32432.00
60465.00
91598.00
110073.50
136922.50
160819.00
196239.50
223088.00
253478.00
283244.00
311300.00
342178.50
372086.50
399973.50
432343.00
465156.50
533454.50
RESET BY サブ句
RESET BY サブ句は、ORDER BY 句で参照される列で指定されているコントロール
ブレークに従って、RISQL 表示関数の算出値を 0 に再初期化します。
RESET BY の機能は OLAP 関数には必要ありません。OLAP パーティションが、
OVER 句で指定することで、RESET BY の動作をエミュレートします。
構文
次に、単純な RESET BY サブ句の構文ダイアグラムを示します。
RESET BY
<order_reference>
クエリ式 7-59
ORDER BY 句
次に、検索項目リストの表示関数を対象とした複雑な RESET BY サブ句の構文ダイ
アグラムを示します。
AND
,
RESET
<RISQL_reference>
BY
<order_reference>
RESET BY
ORDER BY 句の直後に指定するサブ句です。
<order_reference>
ORDER BY 句の列の中から、初期化の基準となる列を指定し
ます。<order_reference> の値、または ORDER BY 句で指定した
それ以前の列の値が変化するたびに、コントロール ブレーク
が発生します。
参照できるのは、次のどちらかです。
■
■
<RISQL_reference>
クエリの検索項目リストに指定した、最低 1 つの表示関数を参
照します。参照できるのは、次のどちらかです。
■
■
7-60
SQL Reference Guide
ORDER BY 句の列名。
ORDER BY 句の k 番めの列を指定する整数値。1 は
ORDER BY 句の最初の列、2 は ORDER BY 句の 2 番
めの列を示します。
0 より大きく、中間リザルト テーブルの列数以下の整
数値。この整数はクエリの k 番めの列を指定し、その
列には、RISQL 表示関数が含まれている必要があり
ます。
最低 1 つの RISQL 表示関数を含む検索項目リストに
指定された式を参照する列エリアス。
ORDER BY 句
例
次のクエリは、Chicago 地域で販売した製品について、1999 年の累積合計を返しま
す。Prod_Total 列の値は、製品名が変わるたびにリセットされますが、Run_Total
列の値はリセットされません。
select prod_name, city, sum(dollars) as prod_dol,
cume(sum(dollars)) as prod_total,
cume(sum(dollars)) as run_total
from sales natural join product
natural join period
natural join store
natural join market
where year = 1999
and district like 'Chicago%'
group by prod_name, city
order by prod_name, city
reset 4 by prod_name
PROD_NAME
Aroma Roma
Aroma Roma
Cafe Au Lait
Cafe Au Lait
Colombiano
Colombiano
Demitasse Ms
Demitasse Ms
CITY
Chicago
Detroit
Chicago
Detroit
Chicago
Detroit
Chicago
Detroit
PROD_DOL
13188.50
12820.75
17394.50
15737.50
10544.25
11104.75
16960.50
17264.00
PROD_TOTAL
13188.50
26009.25
17394.50
33132.00
10544.25
21649.00
16960.50
34224.50
RUN_TOTAL
13188.50
26009.25
43403.75
59141.25
69685.50
80790.25
97750.75
115014.75
同一製品グループ内の行の順番は不定です。
クエリ式 7-61
ORDER BY 句
WHEN 句で参照する RISQL 表示関数は、検索項目リストの RISQL 表示関数とは独
立しています。列エリアスを指定し、そのエリアスを WHEN 句が参照する場合を
除き、RESET BY 句は検索項目リストで参照する関数に動作します。次に、その例
を示します。
select city, prod_name, sum(dollars) as sales_00,
rank(sum(-dollars)) as rank_00
from sales s, product p, store r, period d
where s.prodkey = p.prodkey
and s.classkey = p.classkey
and s.storekey = r.storekey
and s.perkey = d.perkey
and year = 2000
and city in ('Atlanta', 'Boston', 'Phoenix')
group by city, prod_name
when rank_00 <= 2
order by city
reset rank_00 by city;
CITY
Atlanta
Atlanta
Boston
Boston
Phoenix
Phoenix
PROD_NAME
Coffee Mug
Aroma Sounds Cassette
Special Tips
Earl Grey
Earl Grey
Special Tips
SALES_00
55.00
136.00
538.25
556.00
436.00
714.50
RANK_00
1
2
1
2
1
2
rank(sum(-dollars))
上記の式では、エリアス rank_00 の代わりに次の式を WHEN 句に指定すると、すべ
ての都市について、2000 年の売上の下位 2 製品だけを返し、その都市における製品
の順位付けが示されます。
CITY
Atlanta
Atlanta
7-62
SQL Reference Guide
PROD_NAME
Coffee Mug
Aroma Sounds Cassette
SALES_00
55.00
136.00
RANK_00
1
2
ORDER BY 句
BREAK BY サブ句
BREAK BY サブ句に指定した列の値が変わるたびに、SUMMING 句に指定した列の
小計を算出します。
構文
次に BREAK BY サブ句の構文ダイアグラムを示します。
BREAK BY
SUMMING
<order_reference>
<select_reference>
,
<order_reference> または、ORDER BY 句で指定したそれ以前の列の値が変化するた
びに ( コントロール ブレーク )、BREAK BY サブ句は小計行をリザルト テーブルに
挿入します。この小計は、列値が変わるまで値を合計した値です。BREAK BY サブ
句は、リザルト テーブルの最終行に総計行も挿入します。
<order_reference> ORDER BY 句で参照する列を指定します。参照できるのは、次の
どちらかです。
■
■
列名またはエリアス。
0 より大きく、リザルト テーブルの列数以下の整数。こ
の整数は、検索項目リストの k 番めの列を指定します。
SUMMING
検索項目リストの数値表現式を指定します。参照できるのは、次
<select_reference> のどちらかです。
■
■
■
列名またはエリアス。
0 より大きく、リザルト テーブルの列数以下の整数。こ
の整数は、検索項目リストの k 番めの列を指定します。
<select_reference> は、小計が算出できる数値データ型で
ある必要があります。
クエリ式 7-63
ORDER BY 句
使用上の注意
BREAK BY サブ句を指定した SELECT 文は、INSERT 文では使用できません。
BREAK BY サブ句は、OLAP 関数を使ったクエリで使用することができます。
BREAK BY サブ句をデータベース サーバが処理する手順は、次のようになります。
■
■
<order_reference> の値、または ORDER BY 句で指定したそれ以前の列値が
変化するたびに、小計行を返します。
リザルト テーブルの最終行に、総計行を返します。
小計行のフォーマットは、リザルト テーブルのほかの行と同じですが、行の値は次
のようになります。
■
■
BREAK BY の基準の列には、現在の小計値
ほかの列には NULL
小計行を示す識別子はありません。リザルト テーブル中の小計行を見分けるには、
<order_reference> の値、または ORDER BY 句で指定したそれ以前の列値が変化する
行を検索します。
このように、小計行を識別するものがないため、小計行とデータ行が混同される恐
れがあります。混乱を避けるために、通信ゲートウェイを通じてデータベースにア
クセスするクライアント アプリケーションは小計行を検出、識別できる必要があり
ます。リザルト テーブルは表示できても、フォーマットを設定できない SQL ツー
ルの場合は、小計行の識別ができないことがあります。
7-64
SQL Reference Guide
ORDER BY 句
例
次のクエリは、San Jose で販売した Aroma Roma の 1998 年および 1999 年の第 1 四半
期の販売を返し、それぞれの第 1 四半期の小計を算出します。リザルト セットで、
Month 列が NULL の行が小計行で、最終行が総計行です。
select month, qtr, sum(dollars) as dollars,
sum(quantity) as qty
from sales natural join product
natural join period
natural join store
where prod_name like 'Aroma R%'
and city like 'San J%'
and year in (1998, 1999)
and month in ('JAN', 'FEB', 'MAR')
group by month, qtr
order by qtr
break by qtr summing 3, 4
MONTH
JAN
FEB
MAR
NULL
JAN
FEB
MAR
NULL
NULL
QTR
Q1_98
Q1_98
Q1_98
Q1_98
Q1_99
Q1_99
Q1_99
Q1_99
NULL
DOLLARS
1653.00
2495.50
1341.25
5489.75
1950.25
2022.75
3048.50
7021.50
12511.25
QTY
228
350
185
763
269
279
426
974
1737
クエリ式 7-65
SUPPRESS BY 句
SUPPRESS BY 句
SUPPRESS BY 句は、指定したすべての列が、NULL、空白、または 0 のいずれかで
ある行をリザルト テーブルから除外します。行の除外は、クエリに指定した RISQL
表示関数または OLAP 関数を実行する直前に行われます。
構文
次に SUPPRESS BY 句の構文ダイアグラムを示します。
,
SUPPRESS BY
<column_reference>
<column_reference> リザルト テーブルを評価するときに、NULL、空白、0 の有無
をチェックする列を指定します。SUPPRESS BY 句に指定でき
るのは、検索項目リストに指定した列名だけです。参照できる
ものは、次のどちらかです。
■
■
相対列番号 ( 整数 )
列名またはエリアス
SUPPRESS BY サブ句では、RISQL 表示関数や OLAP 関数は参照できません。
7-66
SQL Reference Guide
SUPPRESS BY 句
例
次のクエリは、Q198_Sales 列と Q198_Qty 列の両方が NULL、0、空白のいずれかで
ある行を除外します。
select store_name,
sum(dollars) as q198_sales,
sum(quantity) as q198_qty
from sales natural join store
natural join period
where year = 1998
and qtr = 'Q1_98'
group by store_name
suppress by 2, 3
STORE_NAME
Beaches Brew
Moroccan Moods
Instant Coffee
Roasters, Los Gatos
Cupertino Coffee Supply
Moulin Rouge Roasting
The Coffee Club
Q198_SALES
57893.00
44065.00
43129.50
43011.50
44280.75
44353.25
30962.25
Q198_QTY
7452
6323
6239
6114
6459
6517
3839
クエリ式 7-67
SELECT 文の処理方法
SELECT 文の処理方法
SELECT 文を実行すると、データベース サーバは次の処理を実行します。
1.
2.
FROM 句に指定されたテーブルからデータ行を抽出し、各テーブルの行を
結合し、中間リザルト テーブルを生成します。
WHERE 句に指定された検索条件を満たす行を、中間リザルト テーブルか
ら抽出します。WHERE 句を指定しなければ、中間リザルト テーブル全体
が残されます。
WHERE 句の制約は、サンプルの選択前ではなく選択後に適用されます。
たとえば、次のクエリは、ディメンジョン全体の 10% をサンプリングした
後で制約を適用します。
(select * from product sample 10 where prod_name =
'Aroma Roma')
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
つまり、この例ではサンプル スキャンの前にほかの演算は実行されませ
ん。
リザルト テーブルを、GROUP BY 句で指定したグループに分割します。
指定したグループ ( グループ分けを指定しなければリザルト テーブル全体
) に対し、集約関数を処理します。
HAVING 条件を指定した場合は、条件を満たすグループだけを残します。
SUPPRESS BY 句を指定した場合は、該当する行を除外します。
すべての OLAP 関数を処理します。
ORDER BY 句を指定した場合は、リザルト テーブルの行を最後の ORDER
BY 句の指定順序に並べ替えます。
すべての RISQL 表示関数を処理し、RESET BY サブ句に従って値を算出し
ます。
WHEN 句に指定した条件を満たす行だけを、リザルト テーブルに残しま
す。
検索項目リストに DISTINCT キーワードを指定した場合は、重複行を除外
します。
BREAK BY 行を作成します。BREAK BY サブ句は ORDER BY 句の一部で
す。
上記の動作が完了すると、最終的なリザルト テーブルがユーザに返されます。ただ
し、上記の手順はクエリによっては行われない部分もあります。たとえば、クエリ
式が UNION 式である場合、RESET BY 句は使用できません。
SELECT 文は、最終結果または中間結果の行のサイズが行の最大幅より大きいと異
常終了します。行の最大幅については、『Administrator's Guide』を参照してくださ
い。
7-68
SQL Reference Guide
サブクエリ
サブクエリ
サブクエリは、かっこで囲んだクエリ式のことです。サブクエリは、INSERT、
DELETE、UPDATE、SELECT 文、またはほかのクエリ式に任意の深さで入れ子に
することができます。サブクエリを含むステートメントや式を、サブクエリの親と
いいます。通常サブクエリは、親クエリのリザルト セットと相関させてリザルト
セットを導き出すのに使用します。
『SQL Self-Study Guide』には、検索項目リスト、FROM 句、WHERE 句の中で使用す
るサブクエリの詳しい例が示されています。
スカラ サブクエリとテーブル サブクエリ
ANSI 標準に従って、サブクエリはスカラ サブクエリ、行サブクエリ、およびテー
ブル サブクエリの 3 つに分類されます。IBM Red Brick Warehouse は、スカラ サブク
エリとテーブル サブクエリをサポートします。
■
■
スカラ サブクエリは、1 つのスカラ値 (1 つの列、行 ) を返し、検索項目リ
スト、または比較演算子の引数として条件に指定します。
テーブル サブクエリは、0 以上の行で構成されるリザルト テーブルを返
し、FROM 句、または EXISTS、IN、SOME、ANY、ALL 述部の引数とし
て条件に指定します。
FROM 句のサブクエリと、EXISTS 述部の引数として使用するサブクエリ
は、複数の列と複数の行を返すことができます。ただし、IN、SOME、
ANY、ALL 述部の引数として使用するサブクエリの検索項目リストは、1
列に限定されます。
条件と述部の構文については、第 3 章「式と条件」を参照してください。
構文
次にサブクエリの構文ダイアグラムを示します。
( <query_expression> )
<query_expression>
7-5 ページで説明した結合クエリ式または非結合クエリ式を指
定します。列名リストは、かっこで囲んでください。
クエリ式 7-69
スカラ サブクエリとテーブル サブクエリ
ほかのクエリ式と同様に、サブクエリでは ORDER BY 句や SUPPRESS BY 句は指定
できません。
次のどちらかのサブクエリの場合、サブクエリの検索項目リストには 1 つの式しか
指定できません。
■
■
スカラ サブクエリ
SOME、ANY、ALL、IN 述部の引数として条件に指定されるテーブル サブ
クエリ
クエリとサブクエリとの相関関係は、7-72 ページ「相関サブクエリ」で説明しま
す。
例
通常、サブクエリは、親クエリへの入力データとなる値集合を返します。次のス
テートメントでは、サブクエリがギフト製品の全製品名を抽出し、親クエリが 1999
年に San Jose で販売した同製品の売上合計を抽出します。
select prod_name, sum(dollars) as sales_99
from sales natural join product
natural join period
natural join store
where year = 1999
and city like 'San J%'
and prod_name in
(select prod_name
from product
where pkg_type like 'Gift%')
group by prod_name
PROD_NAME
Spice Sampler
Tea Sampler
Coffee Sampler
Christmas Sampler
7-70
SQL Reference Guide
SALES_99
1860.00
4207.00
3420.00
780.00
スカラ サブクエリとテーブル サブクエリ
前述のサブクエリは複数行を返すため、テーブル サブクエリになります。次のサブ
クエリは、1 つの値しか返さないのでスカラ サブクエリになります。複数の値を返
した場合は、エラーになります。このクエリは、ギフト製品の 1999 年 12 月の売上
と、全製品の年間売上を返します。
select prod_name, sum(dollars) as sales_dec,
(select sum(dollars)
from sales natural join period
where year = 1999
and pkg_type like 'Gift%') as sales_99
from sales natural join product
natural join period
where month = 'DEC'
and year = 1999
and pkg_type like 'Gift%'
group by prod_name
PROD_NAME
Tea Sampler
Coffee Sampler
Christmas Sampler
Spice Sampler
GIFT_SALES_DEC
1625.00
1140.00
1230.00
384.00
ALL_SALES_99
3279991.05
3279991.05
3279991.05
3279991.05
次に、FROM 句でサブクエリを使用する方法を示します。このサブクエリは、販売
促進活動のリストと、販売促進活動別の売上合計を返します。メイン クエリは、
「販売促進活動なし」の売上を除き、すべての販売促進活動の売上合計を返します。
select sum(promo_sales)
from (select promo_desc, sum(dollars)
as promo_sales from promotion natural join sales
group by promo_desc) as promos
where promo_desc not like 'No%'
PROMO_DOLLARS
267296.40
ヒント : 『SQL Self-Study Guide』に、FROM 句のサブクエリのさらなる詳細例が記
載されています。通常は、FROM 句のサブクエリの方が項目リストの等価相関サブ
クエリよりも速く実行されます。
クエリ式 7-71
相関サブクエリ
相関サブクエリ
前述の例はいずれも、1 度実行すればよいサブクエリです。相関サブクエリは、親
クエリとの相互参照があり、親クエリが新しい行を抽出するたびに、サブクエリを
強制的に実行させることができます。たとえば、次の条件を指定したサブクエリ
は、親クエリが行を抽出するたびに評価されます。
parent.month = child.month
Parent.Month 列が参照する値が変化すると条件そのものも変化するため、そのつど
サブクエリが実行されます。
例
次のサブクエリは、1998 年と 1999 年の 1 月に San Jose Roasting Company で販売した
計り売り Lotta Latte コーヒー豆の日別売上を比較します。比較は、この製品の販売
促進活動以外の売上に限定します。
select prod_name, substr(string(date),6,5) as date,
dollars as sales_99,
(select dollars
from store st2 natural join sales sa2
natural join product pr2
natural join class cl2
natural join period pe2
natural join promotion po2
where pe2.date = dateadd(year, -1, pe1.date)
and pr2.prod_name = pr1.prod_name
and cl2.class_type = cl1.class_type
and st2.store_name = st1.store_name
and po2.promo_desc = po1.promo_desc) as sales_98
from store st1 natural join sales sa1
natural join product pr1
natural join class cl1
natural join period pe1
natural join promotion po1
where year = 1999
and month = 'JAN'
and prod_name = 'Lotta Latte'
and class_type = 'Bulk_beans'
and promo_desc = 'No promotion'
and store_name = 'San Jose Roasting Company'
PROD_NAME
Lotta Latte
Lotta Latte
Lotta Latte
Lotta Latte
7-72
SQL Reference Guide
DATE
01-03
01-06
01-09
01-18
SALES_99
368.00
256.00
168.00
96.00
SALES_98
NULL
248.00
NULL
NULL
相関サブクエリ
このメイン クエリは 1999 年 1 月の日別売上を抽出し、サブクエリは ( 年度以外は同
じ制約を使用して ) 1998 年の対応する売上を抽出します。このクエリが行う動作は
次のとおりです。
1.
2.
3.
親クエリは、Date 列の値が 1999 年 1 月である行を抽出します。この行に
は、製品、製品分類名、日付、店舗名のデータが格納されています。
サブクエリは、1998 年 1 月について、対応する行を抽出します。
1999 年および 1998 年について、対応するデータを格納する 1 行がリザル
ト テーブルに作成されます。
列名の修飾
前述の例では、メイン クエリとサブクエリはいずれも、参照先テーブルに相関名を
割り当てます。たとえば、Store テーブルには、メイン クエリで st1 という相関名
が割り当てられ、サブクエリで st2 という相関名が割り当てられます。これらの相
関名は、それぞれの相関条件に指定する列名を修飾するために使用されます。
pe2.date = dateadd(year, -1, pe1.date)
pr2.prod_name = pr1.prod_name
cl2.class_type = cl1.class_type
st2.store_name = st1.store_name
po2.promo_desc = po1.promo_desc
サブクエリが親クエリで指定された列を参照する場合は、すべての列名を修飾する
ことをお勧めします。次のセクションで説明するように、この操作によってあいま
いさがなくなり、列名が正しく解決されます。列名を修飾しない理由が特にない限
り、修飾を付けるようにしてください。
列名の解決
データベース サーバは、サブクエリの検索項目リストに指定された列エリアスを検
索してから、サブクエリの FROM 句に指定されたテーブルを検索することで、修飾
されていない列参照名を解決します。
■
■
■
■
列名が検索項目リストで見つかった場合は、検索は正常に終了します。
1 つのテーブルで列名が見つかった場合は、検索は正常に終了します。
列名が複数のテーブルで見つかった場合は、データベース サーバはエラー
を返します。
列名が見つからない場合は、データベース サーバは親クエリの検索項目リ
ストに指定された列エリアスを検索してから、親クエリの FROM 句を検索
します。1 つのテーブルで列名が見つかった場合は、検索は正常に終了し
ます。列名が見つからず、親クエリがほかの親クエリの子クエリである場
合は、参照先列名が見つかるまで検索が続けられます。
クエリ式 7-73
相関サブクエリ
入れ子にされたサブクエリで列名が明示的に修飾されていない場合は、この列名の
解決手順が原因で、クエリが予期せぬ結果を返すことがあります。
データベース サーバは、FROM 句に指定されたテーブルを検索して、修飾された列
名の参照を解決します。この場合、最も似た修飾子を使ったクエリ指定が使用され
ます。
この列名の解決規則は、あらゆるサブクエリに適用されます。
例
列名を解決する例を示します。この例では、col_a 列は table_1 テーブルに存在
しますが、table_2 テーブルには存在しません。サブクエリで参照されている
col_a 列を特定するために、データベース サーバは table_2 を先に検索します。
col_a は table_2 には存在しないため、親クエリに指定されたテーブルが検索さ
れます。col_a 列は、親クエリの FROM 句に指定された table_1 で見つかり、ク
エリは正常に処理されます。
select col_a
from table_1
where col_a in
(select col_a
from table_2)
ただし、col_a が table_1 と tabel_2 の両方に存在する場合は、上記のサブクエ
リは、col_a の列参照名が次のように修飾されていない限り、table_2 から
col_a を取得します。
(select table_1.col_a from table_2)
重要 : 前出の例は、名前の解決方法を示すために紹介しましたが、このような列
名とテーブル名の付け方はお勧めできません。
行グループ
検索項目リストに集約関数を使用した親クエリが相関サブクエリも使用する場合
は、親クエリの GROUP BY 句に相関列を指定してください。これは、次の例に示す
ように、親クエリの GROUP BY 句が、親クエリの検索項目リストの列名とサブクエ
リの相関列名を使用することを意味します。
この規則は、親クエリの WHERE 句で使用する相関サブクエリには適用されませ
ん。
7-74
SQL Reference Guide
相関サブクエリ
例
次のクエリは、1998 年および 1999 年の第 1 四半期に San Jose で販売した Lotta Latte
の月間売上を比較します。
select pr1.prod_name, pe1.month, sum(sa1.dollars) as
sales_99,
(select sum(sa2.dollars)
from store st2 natural join sales sa2
natural join product pr2
natural join period pe2
where pe2.month = pe1.month
and pe2.year = pe1.year-1
and pr2.prod_name = pr1.prod_name
and st2.city = st1.city) as sales_98
from store st1 natural join sales sa1
natural join product pr1
natural join period pe1
where year = 1999
and qtr = 'Q1_99'
and prod_name = 'Lotta Latte'
and city = 'San Jose'
group by pe1.month, pe1.year, pr1.prod_name, st1.city
PROD_NAME
Lotta Latte
Lotta Latte
Lotta Latte
MONTH
JAN
FEB
MAR
SALES_99
1611.00
3162.50
2561.50
SALES_98
3195.00
4239.50
2980.50
次のサブクエリの相関条件は、親クエリの GROUP BY 句で指定されている列を参照
します。
pe2.month = pe1.month
pe2.year = pe1.year-1
pr2.prod_name = pr1.prod_name
st2.city = st1.city
クエリ式 7-75
第8章
文と
この章について .
拡張機能
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
8-5
ALTER DATABASE .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
8-6
ALTER INDEX
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
8-14
ALTER MACRO .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
8-17
ALTER ROLE .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
8-19
ALTER SEGMENT . . . . . . . . . . . . .
ALTER SEGMENT - ATTACH 句 . . . . . . .
RANGE LIKE SEGMENT 句 . . . . . . .
ALTER SEGMENT - その他の句 . . . . . . .
DETACH、OFFLINE、ONLINE、CLEAR 句 .
VERIFY 句と FORCE 句 . . . . . . . .
SEGMENT BY 句 . . . . . . . . . . .
RANGE 句 . . . . . . . . . . . . .
OPTICAL 句と RENAME 句 . . . . . . .
CHANGE MAXSIZE 句 . . . . . . . . .
ADD STORAGE 指定 . . . . . . . . .
DROP STORAGE 句と RELEASE STORAGE 句
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
8-20
8-21
8-28
8-30
8-32
8-43
8-44
8-45
8-49
8-49
8-52
8-54
ALTER SYNONYM .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
8-55
ALTER SYSTEM . . . . . . .
ユーザ操作の制御 . . . .
ユーザ優先順位の変更 . . .
ログ記録設定の変更 . . .
アカウンティング設定の変更
パフォーマンス モニタの変更
性能統計のクリア設定の変更
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
8-57
8-61
8-63
8-65
8-67
8-68
8-70
ALTER TABLE
列の削除 .
列の変更 .
制約の追加
制約の削除
制約の変更
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
8-72
8-81
8-82
8-86
8-89
8-90
ALTER USER .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
8-93
ALTER VIEW .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
8-94
CHECK INDEX .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
8-96
CHECK TABLE .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
8-99
CREATE HIERARCHY .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 8-102
CREATE INDEX . . . . . . . . . . . . . .
インデックス指定 . . . . . . . . . . . .
セグメント定義 . . . . . . . . . . . .
セグメント範囲指定 . . . . . . . . . . .
B-TREE インデックスと TARGET インデックス
WITH FILLFACTOR n . . . . . . . . . .
DOMAIN SIZE . . . . . . . . . . . . .
.
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
.
.
.
.
.
.
.
CREATE MACRO
8-105
8-109
8-114
8-118
8-118
8-124
8-125
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 8-127
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 8-131
CREATE SEGMENT
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 8-133
CREATE SYNONYM
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 8-136
CREATE ROLE
.
CREATE TABLE . . . . . . . . . . . . . . .
列の定義 . . . . . . . . . . . . . . . .
プライマリ キー参照 . . . . . . . . . . . .
フォーリン キー参照 . . . . . . . . . . . .
プライマリ キーとフォーリン キー制約名 . . . .
セグメント定義 . . . . . . . . . . . . .
8-2 SQL Reference Guide
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
.
.
.
.
.
.
8-137
8-139
8-144
8-146
8-149
8-150
CREATE TEMPORARY TABLE
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 8-160
CREATE VIEW .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 8-163
DELETE .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 8-171
DROP HIERARCHY .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 8-176
DROP INDEX
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 8-177
DROP MACRO .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 8-180
DROP ROLE .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 8-181
DROP SEGMENT .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 8-182
DROP SYNONYM .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 8-184
DROP TABLE
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 8-185
DROP VIEW .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 8-187
EXPAND .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 8-188
EXPLAIN .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 8-189
EXPORT .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 8-190
GRANT ( 権限とロール )
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 8-201
GRANT CONNECT
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 8-207
GRANT ( 特権 )
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 8-211
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 8-214
LOCK ( テーブルのロック )
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 8-221
LOCK DATABASE .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 8-222
REVOKE ( 権限とロール ) .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 8-224
REVOKE CONNECT .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 8-226
REVOKE ( 特権 ) .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 8-227
SELECT .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 8-229
.
.
.
.
.
.
.
.
.
.
.
.
. 8-229
INSERT
.
.
.
.
.
.
.
.
.
UNLOCK ( テーブルのロック解除 )
SQL 文と RISQL 拡張機能
8-3
UNLOCK DATABASE .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 8-230
UPDATE
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 8-231
.
.
8-4 SQL Reference Guide
.
.
.
この章について
構造化問い合わせ言語 (SQL) には、データを制御、定義、操作する各ステートメン
トがあります。この章は、各 SQL 文と、SQL を拡張した RISQL 拡張機能をアルファ
ベット順に説明したリファレンスです。
この章では、次の操作を行うステートメントについて説明します。
■
■
■
■
■
■
テーブル、インデックス、セグメントの変更
データベース オブジェクトの作成と削除
データベース行の変更
データベース アクセス権とテーブル アクセス権の付与と取消
テーブルとデータベースのロックと解除
データベースとユーザ操作の制御
SET 文は、第 9 章「SET 文」を参照してください。
SELECT 文の詳細については、第 7 章「クエリ式」を参照してください。
SQL 文と RISQL 拡張機能
8-5
ALTER DATABASE
ALTER DATABASE
ALTER DATABASE 文には、次の目的があります。
■
■
■
■
■
■
■
■
■
セグメント内にバージョン ログを作成します。
バージョン ログを削除します。
バージョニング トランザクションを開始、終了します。
データベースのバキューム クリーナ デーモン / スレッドを開始、終了しま
す。
バージョン ログを整理します。
後続のクエリで読み込むリビジョンの番号を固定します。
クエリが最新リビジョンを読み込めるように、リビジョン番号を解除しま
す。
データベース セッションを終了します。
セグメントをバックアップ セグメントとしてマークします。
1 つのデータベースにつき 1 つのセグメントだけが、バージョン ログとして指定で
きます。バージョン ログが定義されていない場合は、バージョニング トランザク
ションは実行できません。
1 つのデータベースにつき 1 つのセグメントだけが、バックアップ セグメントとし
て指定できます。バックアップ セグメントが存在しない場合、TMU バックアップ
操作および復元操作は実行できません。
アクセス権
ALTER DATABASE 文を実行するユーザは、次の中で少なくとも 1 つの条件を満た
している必要があります。
■
■
■
8-6 SQL Reference Guide
DBA システム ロールのメンバーであること
明示的に付与されるかユーザが作成したロールのメンバーであることによ
り、ALTER_SYSTEM 権限を持っていること ( バージョン ログを実行する
場合 )
明示的に付与されるかユーザが作成したロールのメンバーであることによ
り、BACKUP_DATABASE および RESTORE_DATABASE 権限を持っている
こと
ALTER DATABASE
構文
次に ALTER DATABASE 文の構文ダイアグラムを示します。
<version_log_specification>
ALTER DATABASE
DROP VERSION LOG
START VERSIONING
STOP VERSIONING
START CLEANING
STOP CLEANING
CLEAN VERSION LOG
REMOVE DAMAGED SEGMENTS
FREEZE QUERY REVISION
UNFREEZE QUERY REVISION
TERMINATE
DATABASE <database_logical_name>
CREATE BACKUP DATA IN <segment_name>
DROP BACKUP DATA
SQL 文と RISQL 拡張機能
8-7
ALTER DATABASE
<version_log_
specification>
CREATE VERSION LOG 文を指定します。指定した未使
用のセグメント内のディスク領域を使って、データベー
スのバージョン ログを作成します。この説明の後に、構
文ダイアグラムを示します。
1 つのデータベースにつき 1 つのバージョン ログだけを
作成できます。データベースのバージョニング トランザ
クションを有効にするには、まずバージョン ログを作成
する必要があります。バージョン ログ用のすべてのディ
スク領域が CREATE VERSION LOG 文によって割り当て
られるため、操作に時間がかることがあります。操作が
完了するまでに、セグメント内のすべての PSU が
MAXSIZE 値まで展開されます。
CREATE VERSION LOG 操作の実行中、ほかのユーザは
データベースに接続できません。操作開始後は、すべて
の接続が拒否されます。
CREATE VERSION LOG の実行中にエラーが発生した場
合は、バージョン ログを削除してから、操作を再実行し
てください。
バージョン ログの作成後、バージョニング (ALTER
DATABASE START VERSIONING) を開始しないと、デー
タベースはバージョニング トランザクションを受け付け
ません。
バージョン ログを作成すると、データベースのバキュー
ム クリーナ デーモン / スレッドが開始されます。
次にバージョン ログ指定の構文ダイアグラムを示しま
す。このダイアグラムでは、
MAXREVISIONS は、指定された時間内でバージョン ロ
グ内に作成可能なデータベースのバージョンの最大値で
す。デフォルトは 5000 です。
CREATE VERSION LOG IN <segment_name>
MAXREVISIONS <number>
8-8 SQL Reference Guide
ALTER DATABASE
DROP VERSION LOG
バキューム クリーナを終了し、バージョニングの共有リ
ソースを解放して、バージョン ログを格納したセグメント
を切り離します。セグメントが使用していたディスク領域
は解放されません。この動作は、PSU を 初期値まで縮小す
る DROP TABLE 文とは異なります。バージョニングがアク
ティブで、バキューム クリーナ デーモン / スレッドが未処
理のアクティブなデータがバージョン ログに存在する場合
は、操作は実行されずエラーが発生します。
バージョン ログの削除を行うには、ALTER DATABASE
STOP VERSIONING 文でバージョニングを停止し、バ
キューム クリーナがバージョン ログのクリーニングを完了
するまで待機する必要があります。DST_DATABASES テー
ブルの CURRENT_REVISION 列の値が、
LATEST_MERGED_REVISION 列の値と等しくなったとき、
バージョン ログは空になります。UPGRADE 操作の実行前
には、バージョン ログを削除する必要があります。
DROP VERSION LOG 操作の間、ほかのユーザはこのデータ
ベースに接続できません。
START
VERSIONING
データベースで新しいバージョニング トランザクションを
処理可能にします。バージョニングが明示的に停止された
場合、またはデータベースにバージョン ログを作成した直
後のみ、バージョニングを起動する必要があります。この
ステートメントを実行するには、バージョン ログが存在し
ている必要があります。
SQL 文と RISQL 拡張機能
8-9
ALTER DATABASE
STOP
VERSIONING
データベースが新しいバージョニング トランザクションを
受け入れるのを停止します。ALTER DATABASE STOP
VERSIONING 操作を実行すると、データベースのバージョ
ン情報を変更する新しいトランザクションは、自動的にブ
ロッキング トランザクションにはならず、エラーが発生し
て失敗します。
IBM Red Brick Warehouse の再起動後も、データベースの
バージョニング状態は保持されます。したがって、データ
ベースのバージョニングが動作中に rbwapid デーモン
(UNIX システムの場合 ) または IBM Red Brick Warehouse
サービス (Windows システムの場合 ) が停止された場合、
デーモンまたはサービスを再起動すると同時にバージョニ
ングは再起動されます。同様に、rbwapid デーモンまたは
IBM Red Brick Warehouse サービスが停止中にデータベース
のバージョニングが停止された場合、デーモンまたはサー
ビスを再起動してもそのデータベースのバージョニングは
停止されたままとなります。
START
CLEANING
データベースに対するバキューム クリーナ デーモンまたは
スレッドが停止している場合に、これを開始します。
STOP
CLEANING
データベースに対するバキューム クリーナ デーモンまたは
スレッドが動作している場合に、これを停止します。バ
キューム クリーナが停止中に rbwapid デーモン (UNIX シス
テムの場合 ) または IBM Red Brick Warehouse サービス
(Windows システムの場合 ) が停止された場合、そのデーモ
ンまたはサービスを再起動するとバキューム クリーナは自
動的に再起動されます。
8-10 SQL Reference Guide
ALTER DATABASE
CLEAN VERSION
LOG
バージョン ログの内容をフラッシュするように、バキュー
ム クリーナに指示します。ALTER DATABASE CLEAN
VERSION LOG はブロッキング文です。つまりバキューム
クリーナがバージョン ログにあるすべてのブロックをフ
ラッシュするまで、セッションへアクセスできません。
データベースのバージョニングが動作中の場合、バージョ
ン ログのフラッシュ完了時に、制御がユーザに返ります。
データベースのバージョニングが動作中でない場合、バー
ジョン ログは空のため、すぐに制御がユーザに返ります。
REMOVE DAMAGED SEGMENTS オプションは、バージョ
ン ログの中の破損したセグメントについてのブロックを廃
棄します。これによってデータベースが不整合な状態にな
るので、破損セグメントを修復できない場合に限ってこの
オプションを使用することをお勧めします。
このオプションは、重大なことが発生した後、たとえば、
バックアップからデータベースを復元する前にバージョン
を空にする場合などに削除するためのものです。
REMOVE DAMAGED SEGMENTS オプションを指定しな
かった場合、削除する必要がある破損セグメントが発見さ
れたところでコマンドが停止します。したがって、バー
ジョン ログは削除されないままです。この場合、CLEAN
VERSION LOG 文により次のメッセージが返されます。
The statement cannot complete because
segment <segment_name> is damaged.
ALTER DATABASE FREEZE QUERY REVISION 文によって
クエリ リビジョンが固定されている場合、バキューム ク
リーナが、バージョン ログを完全にディスクにフラッシュ
できるようになるのは、クエリ リビジョンが解除されてか
らです。したがって、CLEAN 文の実行時にクエリ リビ
ジョンが固定されている場合、クエリ リビジョンが解除さ
れ、バキューム クリーナによってデータベースのバージョ
ン ログが完全にフラッシュされてから、セッションの制御
がユーザに返されます。
重要 : ユーザがバージョン ログをチェックしてログが削除されているかどうかを
確認することをお勧めします。これには、DST_DATABASES テーブルの
CURRENT_REVISION 列と LATEST_MERGED_
REVISION 列へのクエリを実行します。この 2 つの列が一致している場合は、バー
ジョン ログが削除されています。
SQL 文と RISQL 拡張機能
8-11
ALTER DATABASE
FREEZE QUERY
REVISION
現在のリビジョン番号を読み込み、デフォルトの読み取り
リビジョン番号として設定します。セッション内で変更し
ない限り、この番号が後続のすべてのクエリで使用されま
す。ステートメントが正しく完了すると、クエリ リビジョ
ンとして選択したリビジョン番号が表示されます。
クエリ リビジョンがすでに固定されていた場合は、ステー
トメントが中止され、エラー メッセージが表示されます。
UNFREEZE
QUERY
REVISION
ALTER DATABASE FREEZE QUERY REVISION 文の実行結
果を取り消します。後続のクエリはすべて最新のリビジョ
ンを読み込み、システムに加えられたその他の制限もすべ
て取り消されます。
クエリ リビジョンが固定されていなかった場合は、ステー
トメントが中止され、エラー メッセージが表示されます。
TERMINATE
データベース セッションを終了し、そのデータベースのす
べての共有リソースを解放します。ほかのユーザが接続し
ている場合、このステートメントはエラーにより失敗しま
す。
DATABASE
<database_logical_
name>
ALTER DATABASE TERMINATE 文を ADMIN データベース
から実行する場合は、共有リソースを解放するデータベー
スを特定する DATABASE <database_logical_name> 句を指定
する必要があります。
CREATE BACKUP
DATA IN
<segment_name>
既存の未使用セグメントをバックアップ セグメントとして
マークします。TMU バックアップ操作および復元操作につ
いては、『Table Management Utility Reference Guide』を参照
してください。バックアップ セグメントは通常 CREATE
SEGMENT 文によって作成され、複数の PSU を使用できま
す。
DROP BACKUP DATA
データベースからバックアップ データを削除し、バック
アップ セグメントを通常のセグメントに変更します。セグ
メント自身は削除されません。このコマンドが実行された
後、TMU バックアップ操作および復元操作は実行できなく
なります。ALTER DATABASE コマンドを有効にするため
に、バックアップ セグメントをオフラインにする必要はあ
りません。データベースからバックアップ セグメントを削
除するために DROP SEGMENT 文を使用することはできま
せん。
8-12 SQL Reference Guide
ALTER DATABASE
使用上の注意
バージョン ログが作成されたセグメント内の PSU の展開には、時間がかかること
があります。このセグメントの PSU に対する MAXSIZE パラメータは、バージョン
ログに直接割り当てられるディスク領域の量を指定するため、このパラメータの設
定には注意してください。
バージョン ログのロケーションが、性能に影響を与えることがあります。バージョ
ン ログの使用量が多い場合、たとえば、LOAD 操作によってデータベース内の多数
のブロックを変更する場合などは、バージョン ログへのアクセスによってシステム
性能が低下することがあります。したがって、バージョン ログは RAID レベル 0 や
レベル 1 に設定された格納領域などの高性能格納領域に配置するのが最適です。最
良性能を確保するには、データベース ファイルが格納されているデバイスから独立
したデバイスにバージョン ログを配置することをお勧めします。高性能な Write 操
作が必要とされるため、RAID レベルが大きなデバイスには配置しないことをお勧
めします。
バージョン ログにはデータベース内の複数のセグメントからデータが格納されるた
め、バージョン ログを損失した場合は、データベース全体をバックアップから復元
する必要が生じる可能性があります。この問題を防止するため、バージョン ログ
は、RAID レベル 0 などの信頼性の高い格納装置上に格納する必要があります。
例
次にセグメントを作成し、バージョン ログとして指定する SQL 文を示します。
1.
セグメントを作成します。
create segment versionlog_seg
storage '/test/vl1' maxsize 1024,
storage '/test/vl2' maxsize 1024,
storage '/test/vl3' maxsize 1024,
storage '/test/vl4' maxsize 1024;
2.
作成したセグメントをバージョン ログとして指定します。
alter database create version log in versionlog_seg;
3.
このステートメントはすべての物理領域をバージョン ログとして割り当て
るため、時間がかかることがあります。
データベースのバージョニングを開始します。
alter database start versioning;
SQL 文と RISQL 拡張機能 8-13
ALTER INDEX
ALTER INDEX
ALTER INDEX 文には、3 つの目的があります。
■
■
■
インデックスのフィル ファクタの変更。フィル ファクタの設定値は、
データのロード時のインデックス ノードの使用率を指定します。
TARGET インデックスのオプションであるドメイン サイズの変更。
TARGET インデックスの格納方法、つまり 「表現形式」は、ドメイン サ
イズに基づいて選択されます。ドメイン サイズを指定しないと、適切な表
現形式をサーバが自動的に選択します。
インデックスの内容を説明したコメントの付加。コメントは、
RBW_INDEXES システム テーブルに格納されます。
アクセス権
インデックスを変更するユーザは、次の中で少なくとも 1 つの条件を満たしている
必要があります。
■
■
■
■
DBA システム ロールのメンバーであること
明示的に付与されるかユーザが作成したロールのメンバーであることによ
り、ALTER_ANY 権限を持っていること
RESOURCE システム ロールのメンバーで、かつインデックスの作成者で
あること
インデックスの作成者であり、明示的に付与されるかユーザが作成した
ロールのメンバーであることにより、ALTER_OWN 権限を持っていること
構文
次に ALTER INDEX 文の構文ダイアグラムを示します。
ALTER INDEX
<index_name>
<integer>
CHANGE FILLFACTOR
SMALL
CHANGE DOMAIN
SIZE
MEDIUM
LARGE
COMMENT
'<character_string>'
NULL
8-14 SQL Reference Guide
ALTER INDEX
<index_name>
変更するインデックスの名前を指定します。フィル ファクタとコ
メントは、ユーザが作成したインデックスとシステムが生成した
インデックスの両方を変更できます。ドメイン サイズは、ユーザ
が作成した TARGET インデックスだけに適用されます。
ユーザが作成したインデックスのフィル ファクタ、ドメイン サ
イズ、およびコメントを変更する場合は、CREATE INDEX 文に指
定したインデックス名を指定してください。システムが生成した
インデックスのフィル ファクタやコメントを変更する場合は、シ
ステムが生成したインデックス名を指定します。
システムが生成したインデックス名は、RBW_INDEXES テーブ
ルを確認するか、次の命名規則に従って指定します。
■
プライマリ キー インデックスの名前は、インデックス
の対象となるテーブル名に文字列 _PK_IDX を付加した
ものになります。たとえば、Market テーブルのプライ
マリ キー インデックスの名前は、次のようになります。
■
インデックス名は 128 文字以下です。テーブル名と文字
列を組み合わせたインデックス名が 128 文字を超える場
合は、テーブル名が切り捨てられます。
MARKET_PK_IDX
インデックス名は一意である必要があります。テーブル名と文字
列を組み合わせたインデックス名が一意でない場合は、001 ∼
999 の数字がインデックス名の末尾に追加され、重複しない名前
が付けられます。
CHANGE
FILLFACTOR
<integer>
データを初めてテーブルにロードするときや、REORG 操作でイ
ンデックスを再作成するときに、新規インデックス ノードを充填
する割合を指定します。その後、行が挿入されていくと、容量の
100% までインデックス ノードが充填され、インデックス ノード
が 100% を超すと、ノードの分割が生じます。
<integer> の有効範囲は 1 ∼ 100 ですが、フィル ファクタは一般に
50% 以上に設定します。
データのロード、データの再編成、最適化オプションの設定、
フィル ファクタの設定については、『Administrator's Guide』を参
照してください。
SQL 文と RISQL 拡張機能 8-15
ALTER INDEX
ユーザ定義の TARGET インデックスの DOMAIN を指定します。
ほかの種類のインデックスのドメイン サイズを設定、変更するこ
とはできません。ドメイン サイズの選択 ( オプション ) の詳細に
ついては、8-105 ページ「CREATE INDEX」を参照してください。
CHANGE
DOMAIN SIZE
SMALL、
MEDIUM、
LARGE
TARGET インデックスのドメイン サイズは変更できますが、ドメ
イン サイズの指定を削除、つまりデフォルト ドメインの
TARGET インデックスに変更することはできません。
SIZE キーワードはオプションです。
インデックスの内容を説明したコメント文字列を割り当てます。
コメントは、RBW_INDEXES システム テーブルに格納されます。
256 バイトまで入力できます。データベースはこのコメント テキ
ストを無視します。
COMMENT
NULL を指定すると、コメント文字列が NULL に置き換えられま
す。
使用上の注意
フィル ファクタ
インデックスの初期フィル ファクタは、インデックスの作成時に設定されます。
ユーザが作成したインデックスのフィル ファクタについては、CREATE
INDEX...WITH FILLFACTOR 文で設定します。
システムが自動的に生成するプライマリ キー インデックスのフィル ファクタは、
rbw.config ファイルの FILLFACTOR PI パラメータに指定したデフォルト値に自動的
に設定されます。初期デフォルトは 100% です。
システムが生成したインデックスのフィル ファクタを指定する方法は、2 種類で
す。
■
■
テーブルを作成する前に、rbw.config ファイルのデフォルトを必要に応じ
て変更します。
テーブルを作成した後に、システムが生成したインデックス名を使用して
ALTER INDEX 文でインデックスを変更します。
ドメイン サイズが SMALL の TARGET インデックスは、フィル ファクタを 100% (
デフォルト ) にしてください。ドメイン サイズが MEDIUM または LARGE のイン
デックスは、行の更新や削除の予定がない場合は 100% に設定してください。更新
や削除を行う場合は、100% より小さな値に変更してください。
8-16 SQL Reference Guide
ALTER MACRO
ドメイン サイズ
TARGET インデックスのドメイン サイズを変更する ALTER INDEX 文は、REORG
操作が実行されるまでインデックスが無効であるとマークします。したがって、あ
るインデックスのドメインを変更する場合、そのドメインをすぐに再作成する予定
のときには、単にインデックスを削除して再作成する方がよい場合もあります。
REORG 操作を使うと、複数のインデックスを一括して再作成することができます。
この方法では、インデックスを 1 つずつドロップして再作成するよりもリソースが
節約できます。無効なインデックスを持つ列を検索条件にしない限り、そのイン
デックスを持つテーブルにも引き続きクエリを実行できるため、REORG 操作は必
要に応じて延期することができます。
例
次のステートメントは、Market テーブルのプライマリ キー インデックスのフィル
ファクタを 75% に設定します。
alter index market_pk_idx change fillfactor 75;
次のステートメントは、TARGET インデックスのドメイン サイズを変更します。
alter index tgt_idx1 change domain large;
ALTER MACRO
ALTER MACRO 文は、マクロにその内容を説明したコメントを付けます。コメント
は、RBW_MACROS システム テーブルに格納されます。
アクセス権
マクロを変更するユーザは、次の中で少なくとも 1 つの条件を満たしている必要が
あります。
■
■
■
■
DBA システム ロールのメンバーであること
明示的に付与されるかユーザが作成したロールのメンバーであることによ
り、ALTER_ANY 権限を持っていること
RESOURCE システム ロールのメンバーで、かつマクロの作成者であるこ
と
マクロの作成者であり、明示的に付与されるかユーザが作成したロールの
メンバーであることにより、ALTER_OWN 権限を持っていること
SQL 文と RISQL 拡張機能 8-17
ALTER MACRO
構文
次に ALTER MACRO 文の構文ダイアグラムを示します。
MACRO
ALTER
<macro_name>
TEMPORARY
PUBLIC
COMMENT
'<character_string>'
NULL
TEMPORARY、
PUBLIC
変更するマクロのタイプを指定します。TEMPORARY と
PUBLIC のどちらも指定しないと、プライベート マクロが変更
されます。
<macro_name>
変更するマクロの名前を指定します。
COMMENT
マクロの内容を説明したコメント文字列を割り当てます。コメ
ントは、RBW_MACROS システム テーブルに格納されます。
256 バイトまで入力できます。コメントのテキストは、データ
ベース サーバが使用するものではありません。
NULL を指定すると、コメント文字列が NULL に置き換えられま
す。
8-18 SQL Reference Guide
ALTER ROLE
ALTER ROLE
ALTER ROLE 文は、ユーザが作成したロールにコメントを付けます。コメントは、
RBW_ROLES システム テーブルおよび RBW_USERAUTH システム テーブルに格
納されます。
アクセス権
ロールを変更するユーザは、次の中で少なくとも 1 つの条件を満たしている必要が
あります。
■
■
DBA システム ロールのメンバーであること
ROLE_MANAGEMENT タスク権限を持っていること
構文
次に ALTER ROLE 文の構文ダイアグラムを示します。
ALTER ROLE
<role_name>
COMMENT
'<character_string>'
NULL
<role_name>
変更するロールの名前を指定します。
COMMENT
ロールの内容を説明したコメント文字列を割り当てます。コメント
は、RBW_ROLES システム テーブルおよび RBW_USERAUTH シ
ステム テーブルに格納されます。256 バイトまで入力できます。
データベースはこのコメント テキストを無視します。
NULL を指定すると、コメント文字列が NULL に置き換えられます。
SQL 文と RISQL 拡張機能 8-19
ALTER SEGMENT
ALTER SEGMENT
ALTER SEGMENT 文はセグメントを変更するものです。次の目的に使用できます。
■
■
■
■
テーブルやインデックスへのセグメントのアタッチ
テーブルやインデックスからのセグメントの切り離し
セグメントの検証と、物理的な検査 ( セグメントの PSU に不良がなければ、
正常とマーク )
セグメントの修正
❑ セグメント化の基準となる列 ( セグメント化の基準列 ) の指定
❑ セグメントの範囲指定の変更
❑ セグメントの指定範囲の変更と移動
❑ セグメントのオフライン化
❑ セグメントのオンライン化
❑ セグメントのすべてのデータのクリア
❑ セグメント名の変更
❑ セグメントにおける PSU の最大サイズの変更
❑ セグメントにおける PSU の拡張サイズの変更
❑ セグメントにおける PSU のロケーション、パスまたはその両方の変更
❑ セグメント全体のロケーションの移行
❑ RBW_SEGMENTS システム テーブルへのセグメントのコメントの格
納
❑ セグメントへの新規 PSU の追加
❑ セグメント末尾の未使用領域の解放
❑ セグメント末尾からの空の PSU の削除
バージョン ログ セグメントの詳細については、8-6 ページ「ALTER DATABASE」を
参照してください。
セグメントのアタッチについては、8-21 ページ「ALTER SEGMENT - ATTACH 句」
を参照してください。セグメントの切り離し、検証、その他の変更については、
8-30 ページ「ALTER SEGMENT - その他の句」を参照してください。
8-20 SQL Reference Guide
ALTER SEGMENT - ATTACH 句
アクセス権
ALTER SEGMENT 文を実行するユーザは、次の中で少なくとも 1 つの条件を満たし
ている必要があります。
■
■
■
■
DBA システム ロールのメンバーであること
明示的に付与されるかユーザが作成したロールのメンバーであることによ
り、ALTER_ANY 権限を持っていること
RESOURCE システム ロールのメンバーで、かつセグメントおよび関連
テーブルの作成者であること
明示的に付与されるかユーザが作成したロールのメンバーであることによ
り、ALTER_OWN 権限を持っていること、かつセグメントおよび関連テー
ブルの作成者であること
ALTER SEGMENT - ATTACH 句
ここでは、テーブルやインデックスにセグメントをアタッチする方法を説明しま
す。セグメントの切り離し、検証、その他の変更は、8-31 ページを参照してくださ
い。
構文
次に、テーブルやインデックスにセグメントをアタッチする ALTER SEGMENT 文
の構文ダイアグラムを示します。
<segment_name>
ALTER SEGMENT
ATTACH TO
RANGE
TABLE
<table_name>
INDEX
<index_name>
( <literal:literal> )
INVALIDATE
( <rownum:rownum> )
)
: <segname>
( <segname>
<rownum>
LIKE SEGMENT
<rownum>
<referencing_table_segname>
SQL 文と RISQL 拡張機能 8-21
ALTER SEGMENT - ATTACH 句
<segment_name> テーブルやインデックスにアタッチする既存セグメントの名前を指
定します。アタッチするセグメントは、CREATE SEGMENT 文で作
成します。
ATTACH TO
TABLE、
INDEX
テーブルとインデックスのどちらにセグメントをアタッチするかを
指定します。セグメントをアタッチするには、セグメント化の基準
となる列の値の範囲を指定してください。この列は、CREATE
TABLE 文、CREATE INDEX 文、ALTER SEGMENT 文で指定します。
STAR インデックス、ローカルの B-TREE インデックス、TARGET
インデックスでは、参照されるテーブル セグメントの指定に従って
同一範囲にセグメントをアタッチできます。RANGE LIKE
SEGMENT 句の詳細については、8-28 ページを参照してください。
ローカル インデックスの詳細については、8-116 ページを参照して
ください。
重要 : ローカル インデックスを持つテーブルにデータ セグメント
をアタッチした後、テーブルを更新する前に各ローカル インデック
スに対応するセグメントをアタッチするか、ローカル インデックス
を選択するクエリ プランを実行する必要があります。または各ロー
カル インデックスに CHECK INDEX を実行する必要があります。
ATTACH 操作が完了したセグメントは、自動的にオンラインになり
ます。必要に応じて、アタッチした状態でオフラインにすることも
できます。
テーブルにセグメントをアタッチする場合は、次の制限に注意して
ください。
■
■
■
8-22 SQL Reference Guide
テーブルの MAXSEGMENTS に設定された値を超える数の
セグメントをアタッチすることはできません。
テーブルにセグメントをアタッチする前に、セグメント化
の基準列を 1 つ指定する必要があります。
ハッシュ値によって複数セグメントに分散されているデー
タが格納されているテーブルには、セグメントをアタッチ
することはできません。ハッシュによる格納については、
8-153 ページを参照してください。
ALTER SEGMENT - ATTACH 句
RANGE
新たにアタッチしたセグメントに格納する、セグメント化の基準列
の値の範囲を指定します。
このオプションを使用する場合は、次の制限に注意してください。
■
■
■
セグメントは、テーブルやインデックスの既存セグメント
の範囲内にアタッチする必要があります。このため、新規
セグメントの範囲は、一方を既存セグメントの境界と一致
させ、他方をそのセグメントの境界を超えない値に指定す
る必要があります。
テーブルにアタッチする場合、ATTACH 操作では新しいセ
グメントにデータを移動させることができないため、テー
ブルにすでに格納されているデータ値を含む範囲を指定す
ることはできません。
セグメントをインデックスにアタッチする場合、セグメン
トの範囲がインデックス内の既存値と重複するときは、
INVALIDATE キーワードが指定されているかどうかによっ
て動作が異なります。INVALIDATE が指定されている場合
は操作が続行され、インデックスは無効になります。指定
されていない場合は操作が拒否され、インデックスは変更
されません。INVALIDATE キーワードの詳細については、
8-25 ページを参照してください。
テーブルやインデックスにアタッチするセグメントが 1 つの場合、
そのセグメントの範囲は (<min:max>) になります。2 つ目のセグメ
ントをアタッチする場合は、ALTER SEGMENT 文の RANGE 指定の
一方に <min> か <max> を設定してください。
<literal:literal> リテラルの範囲は、テーブル、B-TREE インデックス、TARGET イ
ンデックスのセグメントに使用する必要があります。セグメント範
囲を指定しない場合は、エラー メッセージが返されます。
範囲の値は、セグメント化の基準列のデータ型に準じます。たとえ
ば、この列が INTEGER の場合は、-2,147,483,648 ∼ 2,147,483,647 の
値で範囲を指定します。文字データ型の場合は、文字で範囲を指定
してください。
指定した範囲が既存の行、または範囲と重なっていない場合、セグ
メントが追加されます。
SQL 文と RISQL 拡張機能 8-23
ALTER SEGMENT - ATTACH 句
<rownum:
rownum>、
<segname
rownum:
segname
rownum>
STAR インデックスのセグメント範囲には、列の値ではなく、セグ
メント化の基準列が参照するテーブルの行データ ID を指定します。
参照先テーブルが 1 つのセグメントに格納されている場合は、
<rownum:rownum> フォーマットを使用する必要があります。
<rownum> はそのセグメント内の行を示します。
参照先テーブルが複数のセグメントにある場合は、
<segname rownum:segname rownum> フォーマットを使用する必要が
あります。<segname> は参照先テーブルにアタッチされるセグメン
トを示します。<rownum> はオプションです。<rownum> を省略する
と、名前付きセグメントの最小行データ ID (<min>) とみなされま
す。
<rownum> の範囲は、0 から MAXROWS PER SEGMENT の値未満で
す。STAR インデックスの範囲を明示的に指定する場合は、次のク
エリを実行し、セグメント化の基準列を格納しているテーブルの行
データ ID とセグメント名を確認してください。
select primary_key, rbw_segname, rbw_rownum
from table_name
上記のクエリは、テーブルの全行を返します。テーブルの行データ
が多い場合は、リザルト セットが非常に大きくなります。
STAR インデックスのセグメントでは、RANGE 指定はオプションで
す。このオプションを省略すると、STAR インデックスの総セグメ
ント数と、参照先テーブルに設定された MAXSEGMENTS の値およ
び MAXROWS PER SEGMENT の値に基づいて範囲が自動的に設定
されます。この場合、REORG 文によって STAR インデックスを再
編成する必要があります。REORG 操作については、『Table
Management Utility Reference Guide』を参照してください。
STAR インデックスのセグメント化については、『Administrator's
Guide』を参照してください。
8-24 SQL Reference Guide
ALTER SEGMENT - ATTACH 句
INVALIDATE
指定された範囲がインデックス内の既存の値と重なっている場合、
そのインデックスが無効とマークされるように指定します。
セグメントをテーブルまたはローカル インデックスにアタッチする
場合、INVALIDATE キーワードは使用できません。
指定したインデックス セグメントの範囲がほかのインデックス セ
グメントの既存値と重複する場合、新しい境界を作成して値を別の
セグメントへ移動する必要があります。ATTACH 操作でデータを移
動することはできないため、動作は INVALIDATE キーワードを指定
したかどうかによって異なります。
■
■
INVALIDATE キーワードを指定した場合、セグメントが追
加されてインデックスが無効になり、インデックスの再作
成が必要になります。インデックスを再作成するには
TMU REORG 文を使用します。
INVALIDATE キーワードを指定しなかった場合、動作が失
敗し、セグメントは追加されず、インデックスは無効にな
りません。
STAR インデックスにアタッチするときに範囲を指定しなかった場
合、動作は INVALIDATE キーワードを指定したかどうかによって異
なります。
■
■
INVALIDATE キーワードを指定した場合、インデックス セ
グメントが既存のセグメントのリストの末尾にアタッチさ
れてインデックスが無効となり、再作成が必要となりま
す。ATTACH 操作はすべてのセグメントの範囲を再計算
し、それぞれのセグメントに対して均等に範囲を割り当て
ます。
INVALIDATE キーワードを指定しなかった場合、動作が失
敗し、セグメントは追加されず、インデックスは無効にな
りません。
重要 : INVALIDATE キーワードを指定しない限り、ALTER SEGMENT 文によって
インデックスが無効になることはありません。
ヒント : RANGE 指定では、コロン (:) の左側に MIN、右側に MAX と入力して、そ
れぞれ最小値と最大値を指定することもできます。たとえば、次のように範囲を指
定できます。
(min:literal)
(literal:max)
(min:rownum)
(segname rownum:max)
SQL 文と RISQL 拡張機能 8-25
ALTER SEGMENT - ATTACH 句
例
Mktkey 列の値を基準として、4 つのセグメントにデータを格納している Sales テー
ブルがあるとします。
create table sales
...
data in (data1, data2, data3, data4)
segment by values of (mktkey)
ranges (min:500, 500:1000, 1000:3000, 3000:max)
Sales テーブルに既存のセグメント data5 をアタッチするには、範囲を次のように
指定します。
alter segment data5
attach to table sales
range (1000:1500)
上記のステートメントは、次の条件が満たされるため有効です。
■
■
■
新しい範囲の最小値 (1000) は、data2 セグメントと data3 セグメントの
既存境界である
新しい範囲の最大値 (1500) は、上限を 3000 とする data3 セグメントの範
囲内である
Sales テーブルには、Mktkey 列の値が 1000 ∼ 1499 となっている行がない
Sales テーブルの新しいセグメント範囲は、図 8-1 のようになります。
図 8-1
data1
data2
data5
data3
data4
min:500
500:1000
1000:1500
1500:3000
3000:max
Sales テーブルの
新しいセグメント
範囲
Market テーブルを参照し、複数セグメントに格納されている Sales テーブルに、
STAR インデックスが作成されているとします。
create star index sales_star
on sales (mktkey)
in (ix_seg1, ix_seg2, ix_seg3, ix_seg4)
segment by references of (mktkey)
ranges (min:tab_seg1 500, tab_seg1 500:tab_seg2 1000,
tab_seg2 1000:tab_seg3 3000, tab_seg3 3000:max)
別のセグメント (ix_seg5) をインデックスにアタッチするには、次の ALTER
SEGMENT 文を実行します。
alter segment ix_seg5
attach to index sales_star
range (tab_seg2 1000:tab_seg3 1500)
8-26 SQL Reference Guide
ALTER SEGMENT - ATTACH 句
上記のステートメントは、次の条件が満たされるため有効です。
■
■
■
複数セグメントのテーブルを参照する STAR インデックスに必要な
<segname rownum> フォーマットが範囲指定で使用されている
新しい範囲の最小値 (tab_seg2 1000) は、ix_seg2 セグメントと
ix_seg3 セグメントの既存境界である
新しい範囲の最大値 (tab_seg3 1500) は、上限を 3000 とする ix_seg3
セグメントの範囲内である
古いセグメントから新しいセグメントに移動する必要があるデータが存在する場合
でも、このステートメントは有効です。このようなデータが存在する場合、イン
デックスは無効とマークされ、TMU の REORG 文で再編成する必要があります。
例
セグメント化の基準列を指定し、名前付きセグメント (seg_sales1) が 1 つだけ
Sales テーブルにアタッチされているとします。セグメントの範囲は、(<min:max>)
です。seg_sales2 セグメントを Sales テーブルにアタッチする場合は、次のどちらか
の ALTER SEGMENT 文を使用します。
alter segment seg_sales2
attach to table sales
range (500:max)
alter segment seg_sales2
attach to table sales
range (min:500)
新しい範囲は、(min:500, 500:max) になります。
デフォルト セグメントへのセグメントのアタッチ例
この例では、セグメント化の基準列を指定せずに Sales テーブルが作成されたとし
ます。すべてのデータが seg_sales1 セグメントに格納されています。
次の ALTER SEGMENT 文は、Perkey 列を基準として Sales テーブルをセグメント化
することを指定します。seg_sales1 セグメントの範囲は、(<min:max>) と暗黙的に設
定されます。
alter segment seg_sales1 of table sales
segment by perkey
これでセグメントの範囲が指定され、Perkey 列の値に基づいて新規セグメントを
Sales テーブルに追加することができます。
alter segment seg_sales2
attach to table sales
range (500:max)
SQL 文と RISQL 拡張機能 8-27
ALTER SEGMENT - ATTACH 句
Sales テーブルの新しいセグメント範囲は、図 8-2 のようになります。
図 8-2
seg_sales1
seg_sales2
min:500
500:max
Sales テーブルの
セグメント範囲
RANGE LIKE SEGMENT 句
RANGE
LIKE
SEGMENT
STAR インデックス、ローカルの B-TREE、TARGET インデッ
クス セグメントを、指定したテーブル セグメントと同じ範囲
にアタッチします。
この句を使用する場合は、次の制限に注意してください。
■
■
セグメントを B-TREE または TARGET インデックス
にアタッチする場合、そのインデックスはローカル
インデックスである必要があります。ローカル イン
デックスでは、インデックスとなる列がファクト
テーブルのセグメント化の基準列でなくてもかまい
ません。
セグメントを STAR インデックスにアタッチする場
合は次のようになります。
■ 参照元 ( ファクト ) テーブルのセグメント範囲で
は、先頭のディメンジョン テーブルに少なくと
も 1 つの列が存在する必要があります。
■ ファクト テーブルのセグメント化の基準列はイン
デックス キー内の先頭列である必要があります。
■ 範囲がインデックス内の既存値と重複する場合
は、ATTACH 操作の実行時に INVALIDATE キー
ワードを指定してインデックスを無効にしない
限り、操作は拒否されます。INVALIDATE オプ
ションの詳細については、8-25 ページを参照し
てください。
RANGE LIKE SEGMENT 句を使用した時間ごとのデータ保守
の詳細については、『Administrator's Guide』を参照してくださ
い。
<table_
segname>
8-28 SQL Reference Guide
インデックスのテーブル内の既存のセグメント名を指定しま
す。RANGE LIKE SEGMENT 句を使用してインデックス セグ
メントをアタッチする場合は、このセグメントと同じ範囲に
なります。
ALTER SEGMENT - ATTACH 句
例
Perkey 列の値と、そのデータと同じセグメント単位の STAR インデックス、および
ローカルの TARGET インデックスを基準として、Sales テーブルを作成するとしま
す。
create table sales (
perkey integer not null,
...
constraint sales_date_fkc foreign key (perkey)
references period (perkey),
...
data in (daily_data1, daily_data2)
segment by values of (perkey)
ranges (min:415, 415:max)
maxsegments 10
create star index sales_star_idx on sales
(sales_date_fkc, sales_product_fkc, sales_store_fkc,
sales_promo_fkc)
in (sales_star_seg1, sales_star_seg2) segment like data;
create target index prod_per_sales_ix on sales (promokey)
in (sales_target_ix1, sales_target_ix2) segment local;
この Sales テーブルにセグメントをアタッチするとします。ここで daily_data3、
sales_star_seg3、sales_target_ix3 の各セグメントが作成され、STAR インデックスの
先頭のディメンジョン テーブル (Period テーブル ) が新しい範囲の値であらかじめ
ロードされていることを想定します。この例の詳細については、『Administrator's
Guide』のデータ ウェアハウスの保守に関する章を参照してください。
データと同じ範囲でセグメントを Sales テーブルおよび STAR インデックス セグメ
ントにアタッチするには、次のステートメントを実行します。
alter segment daily_data3 attach to table sales
range (830:max);
alter segment sales_star_seg3 attach to index sales_star_idx
range like segment daily_data3;
alter segment sales_target_ix3 attach to index
prod_per_sales_ix
range like segment daily_data3;
上記のステートメントは、次の条件が満たされるため有効です。
■
■
■
■
新しい範囲の最小値 (830) は sales_data2 セグメントの範囲内にある。
新しい範囲の最大値 (max) は sales_data2 セグメントの既存境界である。
Sales テーブルには、Perkey 列の値が 830 ∼ max となっている行がない。
STAR インデックスの先頭のディメンジョン テーブル (Period テーブル ) に
少なくとも 1 つの列がある。
SQL 文と RISQL 拡張機能 8-29
ALTER SEGMENT - その他の句
■
■
STAR インデックスのセグメント化の基準列 (sales_date_fkc) はインデック
ス キーの先頭列 (Perkey) である。
TARGET インデックスはローカル インデックスである。したがって、イン
デックス付き列は Sales テーブルのセグメント化の基準列である必要はあ
りません。
ALTER SEGMENT - その他の句
このセクションでは、アタッチされたセグメントまたはテーブルやインデックスに
アタッチされていないセグメントを修正する方法を説明します。セグメントをア
タッチする方法は、8-21 ページ「ALTER SEGMENT - ATTACH 句」を参照してくだ
さい。
バージョン ログ セグメントに、次の句は使用できません。
■
■
■
■
■
■
■
■
DETACH
SEGMENT BY
RANGE
OFFLINE
ONLINE
CLEAR
DROP LAST STORAGE
RELEASE STORAGE
ALTER SEGMENT CLEAR 文を実行すると、事前計算ビューに対して集約保守が実
行されることがあります。集約保守の詳細については、『IBM Red Brick Vista User’s
Guide』を参照してください。
バージョン ログ セグメントの詳細については、8-6 ページ「ALTER DATABASE」を
参照してください。
8-30 SQL Reference Guide
ALTER SEGMENT - その他の句
構文
次に、セグメントを修正する ALTER SEGMENT 文の構文ダイアグラムを示します。
<segment_name>
ALTER SEGMENT
OF
TABLE
<table_name>
INDEX
<index_name>
<detach_offline_online_clear_specification>
VERIFY
FORCE INTACT
<segmenting _column>
SEGMENT BY
RANGE
( <rangeval:rangeval> )
MOVE
INVALIDATE
ON
OPTICAL
OFF
RENAME
<new_seg_name>
<psu_sequence_id>
CHANGE MAXSIZE
<psu_sequence_id>
CHANGE EXTENDSIZE
<psu_sequence_id>
CHANGE PATH
MIGRATE TO
TO
<max_size>
TO
TO
<increment>
'<new_filename>'
'<dir_path>'
DROPPING
PSUS
KEEPING
COMMENT
'<character_string>'
NULL
<add_storage_specification>
RELEASE STORAGE
DROP LAST STORAGE
SQL 文と RISQL 拡張機能 8-31
ALTER SEGMENT - その他の句
<segment_name> 修正するセグメントの名前を指定します。
<table_name>
セグメントをアタッチしているテーブルの名前を指定します。
テーブルにアタッチされたセグメントを修正する場合は、この句
を指定してください。テーブルにアタッチされていないセグメン
トの場合は、指定しないでください。
<index_name>
セグメントがアタッチされているインデックスの名前を指定しま
す。インデックスにアタッチされたセグメントを修正する場合は、
この句を指定してください。インデックスにアタッチされていな
いセグメントの場合は、指定しないでください。
DETACH、OFFLINE、ONLINE、CLEAR 句
次に DETACH、OFFLINE、ONLINE、CLEAR 句の構文ダイアグラムを示します。
DETACH
<override_fullindexcheck_specification>
INVALIDATE
OFFLINE
OVERRIDE REFCHECK
ONLINE
CLEAR
<override_fullindexcheck_specification>
OVERRIDE REFCHECK
8-32 SQL Reference Guide
ALTER SEGMENT - その他の句
DETACH
指定したテーブルまたはインデックスからセグメントを削除しま
す。
空でないテーブル セグメントを削除する場合、列データと対応す
るインデックス データが最初に削除されます。その後、テーブル
セグメントが削除されます。
テーブルにローカル インデックスがある場合、テーブル セグメン
トが削除されるときには Red Brick サーバにより対応するローカル
インデックス セグメントがすぐにクリアされます。ローカル イン
デックスがない場合は、OVERRIDE FULLINDEXCHECK 句を使用
してインデックス データを削除する処理速度を高めることができ
ます。OVERRIDE FULLINDEXCHECK 句の詳細については、
8-35 ページを参照してください。
テーブルとローカル インデックス セグメントは同じである必要が
あります。1 つ以上のローカル インデックスを持つテーブルから
セグメントを削除する場合、対応するローカル インデックス セグ
メントを削除してから次の操作を行います。
■
■
■
DELETE、INSERT、UPDATE 文を使用したテーブルの修
正
ローカル インデックスを使用したクエリ プランによる
テーブルへのクエリの実行
ローカル インデックスでの CHECK INDEX の実行
対応するテーブル セグメントを削除しない限り、ローカル イン
デックスを切り離すことはできません。
空でないインデックス セグメントを切り離す場合、DETACH 操作
の実行時に INVALIDATE キーワードを指定してインデックスを無
効にしない限り、操作は失敗します。INVALIDATE キーワードの
詳細については、8-36 ページを参照してください。
デフォルト セグメントを切り離した場合は、セグメントのデータ
とセグメント自体の両方が削除されます。名前付きセグメントを
切り離した場合は、セグメントのデータは削除されますが、セグ
メント自体は削除されません。名前付きセグメントは個別に
ALTER SEGMENT 文を使用して、テーブルまたはインデックスに
再アタッチすることができます。
SQL 文と RISQL 拡張機能 8-33
ALTER SEGMENT - その他の句
切り離したセグメントの範囲は、テーブルやインデックスのほか
のセグメントの範囲に併合されます。切り離したセグメントの下
限に隣接するセグメント範囲が、切り離したセグメントの領域ま
で拡張されます。
セグメントを切り離す場合は、次の制限に注意してください。
■
■
■
■
■
■
8-34 SQL Reference Guide
切り離すセグメントは、オフライン モードに設定してお
く必要があります。
テーブルまたはインデックスがセグメント化されていな
い場合は、エラーになります。
ローカル インデックスが存在する場合は、テーブル セグ
メントを切り離してから対応するローカル インデックス
セグメントを切り離す必要があります。
テーブル セグメントと対応するインデックス セグメント
を切り離すには、ALTER SEGMENT DETACH 文をそれぞ
れ実行する必要があります。
DETACH 句で切り離せるのは、複数のセグメントを持つ
テーブルやインデックスにアタッチされているセグメン
トだけです。テーブルやインデックスにアタッチされて
いないセグメントや、1 つのセグメントからなるテーブ
ルやインデックスのセグメントを切り離すことはできま
せん。DETACH 句では、複数のセグメントを持つテーブ
ルやインデックスのデフォルト セグメントを切り離すこ
とができます。
STAR インデックスの範囲指定で指定されているセグメ
ントは、参照先テーブルから切り離すことはできません。
これは、そのセグメントを切り離すと、範囲指定が無効
になってしまうためです。この場合、無効になる STAR
インデックスを示すエラー メッセージが表示されます。
ALTER SEGMENT - その他の句
<override_
fullindexcheck
_specification>
テーブルからデータ セグメントを切り離したりクリアするとき、
テーブル セグメントのインデックス エントリを削除します。これ
によって実行時間が短縮されます。インデックス セグメントが
テーブル セグメントとまったく同じようにセグメント化されてい
る場合、この句を使用して対応するインデックス セグメントに名
前を付け、インデックスをスキャンせずにインデックス セグメン
トをクリアしてインデックス エントリを削除できます。このオプ
ションを使用すると、10 億行を超えるような大きなファクト テー
ブルから、データ セグメントを切り離すような場合に時間が節約
できます。
Red Brick サーバは、インデックス セグメントとデータ セグメント
の対応を完全にチェックし、対応していない場合はエラー メッ
セージを返します。
この省略オプションは、ローカル インデックス セグメントでは無
効です。切り離しやクリア操作では、対応するローカル インデッ
クス セグメントのみを自動的にクリアし、インデックス内のほか
のセグメントはスキャンしません。ローカル インデックスの詳細
については、8-116 ページを参照してください。
次に OVERRIDE FULLINDEXCHECK 文の構文ダイアグラムを示します。
OVERRIDE FULLINDEXCHECK ON SEGMENTS
(
<index_segment>
)
,
SQL 文と RISQL 拡張機能 8-35
ALTER SEGMENT - その他の句
<index_segment> データ セグメントと同じ列を基準として、セグメント化されている
インデックス セグメントを指定します。この句はすべての種類の非
ローカル インデックスに使用できます。
データとインデックス セグメントの対応を検証した後、DETACH ま
たは CLEAR 操作によって次のことが行われます。
■
■
指定したデータ セグメントのクリア
このオプションで指定したインデックス セグメントのクリア
検証プロセスが失敗すると、操作が無効であることを警告するメッ
セージが表示されます。正しいインデックス セグメント名を指定
し、ステートメントを再実行してください。
<index_segment> で参照されるセグメントを持たないインデックスに
ついては、インデックス全体がスキャンされます。
INVALIDATE
切り離すセグメントが空でない場合、そのインデックスが無効と
マークされるように指定します。
空でないインデックス セグメントを切り離すと、テーブル内の列と
対応するエントリがインデックス内に存在しない可能性がありま
す。対応するエントリがない場合、インデックスとテーブルの整合
性が維持できなくなるため、インデックスを再作成する必要があり
ます。このため、インデックスは無効とマークされます。
■
■
INVALIDATE キーワードを指定した場合、セグメントが追
加され、インデックスが無効になります。無効となったイ
ンデックスは、TMU REORG 文を使用して再編成する必要
があります。
INVALIDATE キーワードを指定せず、インデックス セグメ
ントが空でない場合、DETACH 操作は失敗し、インデック
スは無効になりません。
インデックス セグメントが DETACH 操作以前に無効であった場合、
INVALIDATE キーワードは無視され、セグメントは切り離されてイ
ンデックスは無効のままとなります。
8-36 SQL Reference Guide
ALTER SEGMENT - その他の句
セグメントの切り離し例
テーブルの範囲が図 8-3 のようになっているとします。
図 8-3
seg1
seg2
seg3
seg4
min:100
100:200
200:400
400:max
テーブルの
セグメント範囲
seg3 を切り離すと、新しい範囲は図 8-4 のようになります。
図 8-4
seg1
seg2
seg4
min:100
100:400
400:max
seg3 が
切り離された
セグメント範囲
切り離したセグメントが範囲の下限のセグメントであった場合、下限から 2 番めの
セグメントがその領域まで拡張されます。前ページの範囲から seg1 を切り離すと、
seg2 が拡張され、新しい範囲が図 8-5 のようになります。
図 8-5
seg2
seg3
seg4
min:200
200:400
400:max
下限の
セグメントが
切り離された
セグメント範囲
OVERRIDE FULLINDEXCHECK オプションを使用した
DETACH の例
OVERRIDE FULLINDEXCHECK オプションを使用して、Sales テーブルから
daily_data1 セグメントを切り離す時間を短縮する例を示します。
alter segment DAILY_DATA1 of table sales offline;
alter segment daily_data1
of table sales
detach override fullindexcheck on segments
(sales_star_seg1, sales_pk1);
重要 : 切り離すセグメントは、オフライン モードに設定しておく必要があります。
SQL 文と RISQL 拡張機能 8-37
ALTER SEGMENT - その他の句
この OVERRIDE FULLINDEXCHECK オプションを使用して、次のように DETACH
操作を高速化します。
■
■
sales_star_seg1 インデックスと sales_pk1 インデックスは daily_data1 と同
じ列を基準としてセグメント化されているため、完全インデックス スキャ
ンを省略する
sales_star インデックスと sales_pk インデックス内のほかのセグメントを検
索しない
Sales テーブルにローカル インデックスがある場合、それらは daily_data1 セグメン
トと同じ基準でセグメント化されているため、DETACH 操作でそのローカル イン
デックスの完全スキャンは自動的に省略されます。ローカル インデックスの詳細に
ついては、8-116 ページを参照してください。
INVALIDATE キーワードを使用した DETACH の例
次の例では、daily_data1 テーブル セグメントに対応するインデックス セグメント
を切り離します。上記の例で対応するデータ セグメントから切り離されたインデッ
クス セグメントは空です。したがって、次の DETACH 文で INVALIDATE キーワー
ドは必要ありません。
alter segment sales_star_seg1 of index sales_star_idx
offline;
alter segment sales_star_seg1 of index sales_star_idx detach;
次の例では、インデックス セグメントに対応するテーブル セグメント daily_data2
が切り離されていないためインデックス セグメントは空でなく、INVALIDATE キー
ワードを使用して切り離す必要があります。インデックス セグメントが切り離され
ている場合、テーブル内の列と対応するエントリがインデックス内にない可能性が
あります。対応するエントリがない場合、インデックスとテーブルの整合性が維持
できなくなるため、インデックスを再作成する必要があります。
alter segment sales_star_seg2 of index sales_star_idx
offline;
alter segment sales_star_seg2 of index sales_star_idx
detach invalidate;
Red Brick サーバからは、この DETACH 操作によりインデックス sales_star_idx が無
効にされたという警告メッセージが返されます。
8-38 SQL Reference Guide
ALTER SEGMENT - その他の句
ATTACH および DETACH でセグメント範囲を変更する例
この例では、Budget テーブルが 2 つのセグメントに分割され、Mktkey 列がセグメ
ント化の基準列であるとします。セグメントの範囲は図 8-6 のようになります。
図 8-6
Budget
テーブルの
セグメント範囲
seg1
seg2
min:750
750:max
次の ALTER SEGMENT 文は、Budget テーブルに第 3 のセグメントをアタッチしま
す。このステートメントが有効なのは、Mktkey 列の値が 1500 ∼最大許容値の範囲
内にある行が Budget テーブルに存在しない場合だけです。
alter segment seg3
attach to table budget
range (1500:max)
seg2 の上限が 1500 になり、Budget テーブルの新しいセグメント範囲は図 8-7 のよ
うになります。
図 8-7
seg1
seg2
seg3
min:750
750:1500
1500:max
新規セグメントの
アタッチ後の
セグメント範囲
seg2 がオフライン モードに設定され、Budget テーブルから切り離されます。seg2
に格納されているすべての行がデータベースから削除されます。
alter segment seg2 of table budget
offline
alter segment seg2 of table budget
detach
Budget テーブルの新しいセグメント範囲は、図 8-8 のようになります。
図 8-8
seg1
seg3
min:1500
1500:max
seg2 を
OFFLINE に
設定した後の
セグメント範囲
SQL 文と RISQL 拡張機能 8-39
ALTER SEGMENT - その他の句
OFFLINE 句
OFFLINE
指定したセグメントをオフライン モードに設定し、データべースが
そのセグメントを一時的に使用できないようにします。管理者はオ
フラインのセグメントに対し新規データのロード、記憶媒体の障害
やデータ消失によるデータの復元、DETACH によるテーブルやイン
デックスからの切り離しができます。
テーブルに関連した行データやインデックス データを格納するセグ
メントがオフライン モードになった場合、そのテーブルは部分的に
しか利用できません。ユーザは、部分的に利用可能と設定された
テーブルのオンライン セグメントにアクセスできます。部分的に利
用可能なテーブルに対するクエリの動作は、rbw.config ファイルの
OPTION PARTIAL_AVAILABILITY パラメータか、SET PARTIAL
AVAILABILITY 文で設定します。rbw.config ファイルについては、
『Administrator's Guide』を参照してください。SET PARTIAL
AVAILABILITY 文については、9-41 ページを参照してください。
OFFLINE 句は、複数の名前付きセグメントからなるテーブルやイン
デックスにアタッチされたセグメントにしか使用できません。次の
セグメントはオフラインにできません。
■
■
■
OVERRIDE
REFCHECK
テーブルやインデックスにアタッチされていないセグメント
テーブルまたはインデックスに単独で存在するセグメント
テーブルやインデックスの最後のオンライン セグメント
ほかのテーブルが参照するテーブルにアタッチされているセグメン
トをオフラインにするかクリアする ALTER SEGMENT 文を実行する
とき、参照整合性チェックを省略します。
セグメントと参照元テーブルの両方にデータが格納されていても、
セグメントのクリアやオフライン化によって参照整合性違反が発生
しない場合は、このオプションを使用して動作を強制的に続行させ
ることができます。
警告 : OVERRIDE REFCHECK オプションの動作を正しく理解し、注意して使用し
てください。参照先テーブルのセグメントをクリアするとき、参照元テーブルの値
のいずれかがクリアするセグメントの値に対応している場合は、参照整合性が維持
できなくなります。
セグメントと参照元テーブルの両方にデータが格納されている場合、このオプショ
ンを使用しないと参照整合性違反が発生することがあります。その結果、ALTER
SEGMENT 文が中止され、エラー メッセージが表示されます。セグメントまたは参
照元テーブルが空の場合は、参照整合性違反は発生しないためステートメントは正
常に終了します。
8-40 SQL Reference Guide
ALTER SEGMENT - その他の句
例
1998 ∼ 2000 年の売上データを格納している Sales ファクト テーブルが、
period_seg1 と period_seg2 という 2 つのセグメントにデータを格納している
Period テーブルを参照する場合、どちらかのセグメントをオフラインにするとエ
ラー メッセージが表示されます。period_seg2 セグメントに格納されているデー
タが 1997 ∼ 1999 年のデータだけであれば、参照整合性チェックを省略してセグメ
ントをオフラインにしてもかまいません。
alter segment period_seg2 of table period
offline override refcheck
セグメントをオフラインにする例
次の ALTER SEGMENT 文は、STAR インデックスのセグメントをオフラインにしま
す。
alter segment default_segment_7 of index sales_star_idx
offline
重要 : テーブルやインデックスが 1 つのセグメントに格納されている場合は、オフ
ラインにできません。
ONLINE 句と CLEAR 句
ONLINE
オフライン セグメントをオンライン モードに設定し、データ
べースがそのセグメントを使用できるようにします。セグメント
をオンライン モードに設定する前に、セグメントが破損してい
ないかどうかが検証されます。破損している場合は、セグメント
はオフライン モードのままにされ、破損原因が報告されます。
テーブルの行データ セグメントとインデックス セグメントがす
べてオンラインになると、テーブル全体がデータベースで利用可
能になります。
オフライン ロードの終了後にオフライン セグメントをオンライ
ン モードに設定する前に、TMU の SYNCH コマンドでセグメン
トを同期させておく必要があります。TMU の SYNCH コマンド
については、『Table Management Utility Reference Guide』を参照し
てください。
SQL 文と RISQL 拡張機能 8-41
ALTER SEGMENT - その他の句
CLEAR
データ セグメントの全行と、それらの行を参照するインデックス
エントリを削除します。セグメントのクリアは、効率的にセグメ
ントのデータを大量に削除します。データの大量削除は、オフラ
イン セグメントへのロードを取り消す場合にも使用できます。
データ セグメントからすべての行を削除する操作は、比較的短
時間で済みますが、対応するインデックス エントリの削除は非
常に時間がかかります。特に、インデックス エントリの総数に
比べて関連するエントリの数が少ない場合にこのことがいえま
す。このため CLEAR は、行数および対応するインデックス エン
トリ数が多いセグメントを空にする場合に使用してください。行
数の少ないセグメントを空にする場合は、適切な制約を指定した
DELETE 文を使用してください。
CLEAR 句は、複数の名前付きセグメントに格納されたテーブル
にアタッチしているオンライン セグメントとオフライン セグメ
ントのクリアに使用できます。インデックス セグメント、ア
タッチされていないセグメント、1 つのセグメントからなるテー
ブルのセグメントはクリアできません。
ALTER SEGMENT CLEAR 文を実行すると、事前計算ビューに対
して集約保守が実行されることがあります。集約保守の詳細につ
いては、
『IBM Red Brick Vista User’s Guide』を参照してください。
<override_
fullindexcheck_
specification>
インデックス全体の参照整合性チェックを省略し、指定したテー
ブルからデータ セグメントをクリアします。詳細については、
8-35 ページを参照してください。
OVERRIDE
REFCHECK
ほかのテーブルが参照するテーブルに所属するセグメントをクリ
アする ALTER SEGMENT 文を実行する場合に、参照整合性
チェックを省略します。詳細については、8-40 ページを参照し
てください。
8-42 SQL Reference Guide
ALTER SEGMENT - その他の句
VERIFY 句と FORCE 句
VERIFY
指定したセグメントの PSU を検証し、セグメントが物理的に完全で
あるかを確認します。
セグメントが破損している理由が不明な場合は、VERIFY 句を使っ
て原因を調べてください。破損の修復後 VERIFY を再実行し、セグ
メントの PSU が完全であれば、セグメントは正常とマークされま
す。VERIFY を実行すると、RBW_SEGMENTS テーブルの INTACT
列が更新され、セグメントが正常とマークされます。
セグメントの PSU を 1 つずつ検証するプロセスは、時間がかかるこ
とがあります。
ONLINE 句を使用すると、VERIFY を実行した場合と同じ検証タス
クが実行され、同じ情報が返されます。こうしたタスクが実行され
るほか、その後でセグメントがオンラインになります。ONLINE 句
はオフラインのセグメントのみに使用できます。オンラインのセグ
メントの検証には、VERIFY 句を使用してください。
破損したセグメントの修復については、『Administrator's Guide』を参
照してください。
FORCE
INTACT
物理的損傷の有無をチェックする PSU の検証を省略し、
RBW_SEGMENTS テーブルの INTACT 列を更新して、利用できな
いセグメントを正常とマークします。FORCE INTACT 句と VERIFY
句のどちらを使用してもセグメントをマークすることができますが、
FORCE INTACT は PSU の検証を行わないため、VERIFY の場合より
も比較的処理時間が短くなります。
PSU が損傷している可能性がある場合は、VERIFY を実行してくだ
さい。FORCE INTACT は、データの整合性に影響のない軽度のエ
ラーのためにセグメントが利用不能になった場合に限り使用してく
ださい。
SQL 文と RISQL 拡張機能 8-43
ALTER SEGMENT - その他の句
SEGMENT BY 句
SEGMENT
BY
<segmenting_
column>
1 つのセグメントに格納され、セグメント化の基準列が設定されて
いないテーブルやインデックスに基準列を指定します。テーブルの
セグメントの列には、NULL は使用できません。インデックスでは、
インデックス キーに指定された最初の列をセグメント化の基準とな
る列に指定します。
STAR インデックス キーの最初の列が複数列のフォーリン キーの場
合は、SEGMENT BY 指定におけるインデックス キーの最初の構成要
素を識別するために、フォーリン キー制約名を指定する必要があり
ます。
セグメント化の基準列をテーブルやインデックスに指定すると、こ
の列の値または行データ ID に基づいて、セグメントの範囲
(<min:max>) が暗黙的に設定されます。そのテーブルやインデックス
には、ほかのセグメントをアタッチしたり、その範囲を暗黙的に
マージすることができます。
この句は、すでにセグメント化基準列が割り当てられているテーブ
ルまたはインデックスのセグメント化基準列を変更したり、ハッ
シュ値によってセグメント化されているテーブルにセグメント化基
準列を割り当てるのには使用できません。
8-44 SQL Reference Guide
ALTER SEGMENT - その他の句
RANGE 句
RANGE
<rangeval:
rangeval>
セグメントの値または行データ ID の範囲を指定します。
■
■
テーブル、B-TREE インデックス、TARGET インデックスに
アタッチするセグメントの範囲は、この列の値に基づいて
指定されます。その場合、rangeval はリテラル値である必要
があります。
STAR インデックスのセグメントの範囲は、この列が参照す
るテーブルの行データ ID ( セグメント名、行データ ID) に
基づいて指定されます。先頭の行データ ID は 0 です。
STAR インデックスの範囲指定には、8-24 ページで説明し
たフォーマットのいずれかを使用してください。
セグメント範囲の値については、CREATE TABLE 文と CREATE
INDEX 文の説明を参照してください。
テーブルやインデックスのセグメント範囲に不連続や重複を生じさ
せたり、既存の行データやインデックス データをほかのセグメント
に移動させる必要があるような範囲の修正はできません。
たとえば、既存セグメントの範囲が (1000:2000) の場合、(1000:2500)
に変更すると、そのセグメントの上位にあるセグメントの下限が
2500 に自動的に調整されますが、2000 ∼ 2500 の範囲に既存データ
がある場合は、ALTER SEGMENT 文はエラーになります。
RANGE 句は、複数の名前付きセグメントからなるテーブルやイン
デックスにアタッチされたセグメントにしか使用できません。次の
目的には使用できません。
■
■
■
テーブルやインデックスにアタッチされていないセグメン
トの範囲の変更
1 つのセグメントからなるテーブルやインデックスのセグ
メント範囲の変更
ハッシュによってセグメント化されているテーブルへの範
囲の追加
SQL 文と RISQL 拡張機能 8-45
ALTER SEGMENT - その他の句
MOVE
セグメントをテーブルやインデックスから切り離したり再アタッチ
したりせずに、範囲を移動します。
指定した範囲が既存の行、または範囲と重なっていない場合、セグ
メントは切り離され、指定した範囲に再アタッチされます。
RANGE MOVE 句を使用する場合は、次の制限に注意してください。
■
■
■
■
■
■
8-46 SQL Reference Guide
セグメント範囲を指定しなかった場合、インデックスがセ
グメント化されていないときは、エラー メッセージが返さ
れます。
新しい範囲の値の境界は、既存の別セグメントの境界と重
なる必要があります。既存のセグメントの範囲を拡張する
場合は、RANGE 句を使用します。
RANGE MOVE 操作によって範囲の値にすき間ができない
ようにする必要があります。RANGE MOVE 句を使用する
と、次の操作を実行できます。
■ 指定したセグメントの切り離しとクリア
■ 隣接するセグメントの範囲の調整
■ 切り離したセグメントの新しい範囲位置への再アタッチ
■ 隣接するセグメントの範囲の調整
RANGE MOVE 操作の例については、8-47 ページを参照し
てください。
あるインデックスについて、RANGE MOVE 操作によって
セグメント範囲が重複したり、インデックス データを別の
セグメントに移動する必要が生じた場合は、INVALIDATE
キーワードを指定しない限り、操作は拒否されます。詳細
については、下記の INVALIDATE を参照してください。
RANGE MOVE 操作による変更を行ったために、既存の行
データを別のセグメントに移動する必要が発生しないよう
にしてください。
RANGE MOVE 句はローカル インデックスでは無効です。
ALTER SEGMENT - その他の句
INVALIDATE
空でないセグメントに RANGE MOVE 操作を行う場合や、範囲がイ
ンデックスの既存の値に重複する場合、そのインデックスが無効と
マークされるように指定します。
■
■
移動したインデックス セグメントの範囲がほかのインデッ
クス セグメントの既存の値と重複する場合、新しい境界を
作成してそのインデックス キーの値を別のセグメントへ移
動する必要があります。RANGE MOVE 操作でインデック
ス キーを移動することはできません。インデックスを再作
成して無効とマークする必要があります。
空でないインデックス セグメントを移動する場合、そのイ
ンデックス キーは別の範囲にある可能性があります。
RANGE MOVE 操作はインデックス キーを別のセグメント
に移動しないため、インデックスを再作成する必要があり
ます。
INVALIDATE キーワードを指定した場合、セグメントが追加され、
インデックスが無効になります。
INVALIDATE キーワードを指定しなかった場合、動作が失敗し、セ
グメントは追加されず、インデックスは無効になりません。
RANGE MOVE 句の例
Sales テーブルの範囲が図 8-9 のようになっているとします。
図 8-9
daily_data1
daily_data2
daily_data3
daily_data4
min:200
200:400
400:600
600:max
Sales テーブルの
セグメント範囲
セグメント daily_data2 をテーブル末尾の新しい範囲へ移動し、現在の最大値が 799
である場合は、次の SQL 文を使用します。
alter segment daily_data2 of table sales range (800:max) move
RANGE MOVE 句は最初に切り離しを行い、セグメント daily_data2 はクリアされて
移動後は 0 行となります。Sales テーブルにローカル インデックスが定義されてい
る場合、テーブル セグメントに対して RANGE MOVE 操作を行うことで、対応する
ローカル インデックス セグメントもクリアされます。
SQL 文と RISQL 拡張機能 8-47
ALTER SEGMENT - その他の句
この ALTER SEGMENT RANGE MOVE 文によって、以前セグメント daily_data2 で
定義されていた範囲が、下位に隣接するセグメント daily_data1 に含まれるように
調整されます。この ALTER SEGMENT RANGE MOVE 文の実行結果の範囲は次に示
します。
daily_data1
daily_data3
daily_data4
daily_data2
min:400
400:600
600:800
800:max
最下位のセグメント daily_data1 の範囲を移動するには、次の SQL 文を使用します。
alter segment daily_data1 of table sales range (800:max) move
このステートメントによって、下から 2 番めのセグメント daily_data2 の範囲が該当
する部分まで拡張されます。図 8-9 の範囲を使用すると、新しい範囲は次のように
なります。
daily_data2
daily_data3
daily_data4
daily_data1
min:400
400:600
600:800
800:max
RANGE MOVE で同じ境界を使用できない理由の例
移動するセグメントの既存の境界と同じ範囲にある値を指定する場合、RANGE
MOVE 句を使用することはできません。たとえば、セグメント daily_data2 が図 8-9
に示す範囲のときに次の値の範囲を指定すると、この範囲を移動しなければならな
くなり、エラーになります。
alter segment daily_data2 of table sales range (300:400) move;
** ERROR ** (6415) To change the range of a segment without
moving
it to a different position in the range list, please use
the
ALTER SEGMENT RANGE command without the MOVE clause.
また、次の例のように、境界と一致しない値の範囲を指定した場合もエラーになり
ます。
alter segment daily_data2 of table sales range (300:500) move;
** ERROR ** (6414) Cannot change the range of segment
DAILY_DATA2
because the new range will not match a boundary when the
segment is being moved.
8-48 SQL Reference Guide
ALTER SEGMENT - その他の句
OPTICAL 句と RENAME 句
OPTICAL
ALTER SEGMENT...OPTICAL 文は、既存セグメントをニアライ
ン、または光学式のディスクに格納されているセグメントとして
マークします。
セグメントを OPTICAL ON に設定すると、RBW_SEGMENTS シ
ステム テーブルの OPTICAL 列が Y に設定され、9-36 ページで
説明されている SET OPTICAL AVAILABILITY の各ステートメン
トを使用してセグメントへのアクセスを制御できるようになりま
す。セグメントを OPTICAL OFF に設定すると、セグメントは光
ディスクに格納されているとは認識されなくなるため、利用効率
のステートメントを実行しても効果がありません。
RENAME
<new_seg_name>
指定したセグメントの名前を変更します。テーブルやインデック
スにアタッチしたり、切り離したりする時に、デフォルト セグ
メントや名前付きセグメントの名前を変更することができます。
<psu_sequence_id> セグメントの各 PSU にサーバが割り当てるシーケンス番号を指
定します。たとえば、セグメントの先頭 PSU にはシーケンス ID
1 が割り当てられ、次の PSU にはシーケンス ID 2 が割り当てら
れます。シーケンス ID 番号は、RBW_STORAGE テーブルに格
納されます。
CHANGE MAXSIZE 句
CHANGE
MAXSIZE
<psu_sequence_id>
TO < max_size>
PSU の最大サイズを変更します。PSU の最大サイズは、デフォ
ルト セグメントと名前付きセグメントの両方を変更できます。
<max_size> は KB 単位で指定しますが、実際のサイズは、8KB の
倍数に切り上げられます。MAXSIZE の許容最小値は 16KB です。
該当 PSU の次のシーケンス ID を持つ PSU にデータが格納されて
いる場合は、この句によって PSU の最大サイズを変更すること
はできません。ただし、次の PSU のサイズが INITSIZE パラメー
タによって領域確保されていても、その PSU にデータが格納さ
れていない場合は、最大サイズを増加させることができます。
SQL 文と RISQL 拡張機能 8-49
ALTER SEGMENT - その他の句
例
図 8-10 では psu2 にデータが割り当てられています。このため、psu1 の最大サイズ
を変更することはできません。psu3 にはデータが割り当てられていないため、psu2
の最大サイズを増加することは可能です。
図 8-10
PSU
データ割り当て
psu1
psu2
psu3
例
次の ALTER SEGMENT 文は、psu1 の最大サイズを 100KB に増やします。
alter segment
segment2 of table sales
change maxsize 1 to 100.
CHANGE
EXTENDSIZE
<psu_sequence_id> TO
<increment>
PSU を拡張するときの増分を変更します。増分値は KB 単
位で指定しますが、実際は指定値が 8 の倍数に切り上げら
れます。
CHANGE PATH
<psu_sequence_id> TO
'<new_filename>'
指定した PSU のロケーションを変更します。
新しいロケーションを指定しても、PSU が実際に移動するわけではありません。
RBW_STORAGE テーブルの LOCATION 列が更新されるだけです。ファイルを物
理的に移動したりコピーする場合には、オペレーティング システムの該当するコマ
ンドを使用してください。
データベース サーバは次の事項を検証します。
■
■
■
■
ディレクトリ パスにファイルが存在すること。存在しなければ、警告メッ
セージが表示されます。
redbrick ユーザによるアクセスが許可されているファイルであること。そ
うでない場合は、エラーになります。
ファイルのサイズが、8KB の倍数であること。そうでない場合は、エラー
になります。
ディレクトリ、キャラクタ デバイス、ブロック デバイス、名前付きパイ
プ、ハード リンク、シンボリック リンク、ソケットのいずれでもない、通
常のファイルであること。シンボリック リンク以外の場合は、エラーにな
ります。シンボリック リンクの場合は、通知メッセージが表示されます。
8-50 SQL Reference Guide
ALTER SEGMENT - その他の句
MIGRATE TO
'<dir_path>'
<dir_path> で指定したロケーションに、セグメントをコピーし
ます。<dir_path> は、絶対パスまたはデータベース ディレクト
リに対する相対パスです。
MIGRATE TO 句を使用してセグメント全体を移動できます。
たとえば、ディスクから光ディスクに移動したり、光ディスク
からディスクに移動したり、ディスクから別のディスクに移動
できます。
領域が不足していたりファイル名が重複しているために移動が
完了できない場合は、それらを修正して再実行すれば、残りの
PSU が引き続きコピーされます。
複数のディレクトリ上の PSU を 1 つのディレクトリに移動し
たためにファイル名が重複した場合は、次の手順で問題を解決
してください。
1.
2.
オペレーティング システムのコマンドで、PSU を格
納しているファイルを一意の名前に変更します。
ALTER SEGMENT…HANGE PATH 文で、データベー
スのシステム テーブルの PSU 名を変更します。
ALTER SEGMENT…IGRATE TO 文で PSU を移動します。
DROPPING、
KEEPING
コピー完了後、元の PSU を削除するかどうかを指定します。
デフォルトは DROPPING です。
COMMENT
セグメントの内容を説明するコメント文字列を割り当てます。
コメントは、RBW_SEGMENTS システム テーブルに格納され
ます。256 バイトまで入力できます。データベースはこのコメ
ント テキストを無視します。
NULL を指定すると、コメント文字列が NULL に置き換えられ
ます。
SQL 文と RISQL 拡張機能 8-51
ALTER SEGMENT - その他の句
ADD STORAGE 指定
ADD STORAGE 指定は、新しい PSU をセグメントに追加します。1 つのセグメント
に、サイズの異なる複数の PSU を割り当てることができます。
次に ADD STORAGE 文の構文ダイアグラムを示します。格納方法の指定と
ALTER SEGMENT 文との関係は、8-30 ページを参照してください。
ADD STORAGE
INITSIZE
'<filename>'
<init_size>
MAXSIZE
EXTENDSIZE
<max_size>
<increment>
ADD STORAGE 新しい PSU は、指定セグメント内の既存の PSU の最後に追加され
<filename>
ます。
新しい PSU のパス名は、データベース ディレクトリとの相対パス
名、絶対パス名のどちらでもかまいません。指定するディレクトリ
は、すべて存在するものにしてください。
MAXSIZE
<max_size>
PSU にロードするデータの最大量を KB 数で指定します。この値に
達すると、シーケンス内の次の PSU に切り換わります。<max_size>
は KB 単位で指定しますが、実際のサイズは、8KB の倍数に切り上
げられます。MAXSIZE の許容最小値は 16KB です。
MAXSIZE パラメータは、RBW_STORAGE システム テーブルの
MAXSIZE 列に格納されます。このシステム テーブルには、PSU の
使用済み KB 数 (USED 列 ) も格納されます。
8-52 SQL Reference Guide
ALTER SEGMENT - その他の句
INITSIZE
<init_size>
PSU にあらかじめ確保される領域の初期サイズを指定します。KB
単位で指定しますが、実際のサイズは 8KB の倍数に切り上げられま
す。指定する値は、MAXSIZE パラメータで指定した最大サイズ以
下にしてください。
INITSIZE パラメータは、RBW_STORAGE システム テーブルの
INITSIZE 列に格納されます。
セグメントの先頭 PSU の初期サイズは、16KB 以上にします。最初
の PSU に 9 KB 未満の初期サイズを指定した場合は、エラーが返さ
れます。9KB ∼ 16KB 未満の値を指定すると、16KB に切り上げら
れます。それ以降の PSU の初期サイズは、0 ∼最大サイズの任意の
値に設定できます。
デフォルトは 16KB です。
EXTENDSIZE PSU の容量が不足した場合に、初期サイズ以上に拡張するときの増
<increment>
分の単位を指定します。増分は KB 単位で指定しますが、実際のサ
イズは 8KB の倍数に切り上げられます。デフォルトは 8KB です。
SQL 文と RISQL 拡張機能 8-53
ALTER SEGMENT - その他の句
DROP STORAGE 句と RELEASE STORAGE 句
DROP LAST
STORAGE
指定したテーブルまたはインデックス セグメントの末尾から、最後
の PSU を削除します。最後の PSU は完全に空にしてから削除する
必要があります。この PSU はファイル システムから物理的に削除
されます。
重要 : 最後の PSU から行データを削除した後も領域が論理的に使
用されている場合、最初に ALTER SEGMENT RELEASE STORAGE
オプションを使用して領域を解放してから PSU を削除する必要があ
ります。RBW_SEGMENTS システム テーブルの Used 列に対してク
エリを実行し、領域が使用中であるかどうかを確認してください。
格納領域の解放と削除の詳細な手順については、『Administrator's
Guide』を参照してください。
複数の PSU を削除するには、PSU ごとに ALTER SEGMENT DROP
LAST STORAGE を実行します。
複数の PSU が存在する場合、デフォルト セグメントに DROP LAST
STORAGE オプションが使用できます。
RELEASE
STORAGE
テーブル セグメントの PSU に使用されていない割り当て領域を切
り捨てて、その領域をオペレーティング システムに返します。
セグメントから格納領域を解放すると、各 PSU の末尾の未使用領域
が使用可能になります。PSU が空の場合、領域は INITSIZE で指定
されたサイズにリセットされます。空の PSU は、テーブル セグメ
ントから削除されません。セグメント末尾の空の PSU を削除するに
は、DROP LAST STORAGE オプションを使用します。
重要 : RELEASE STORAGE オプションを使用すると、セグメント
の構造が変更され、セグメントが破損して問題が発生する場合があ
ります。セグメントが破損していないかどうかをチェックするに
は、セグメントに対して CHECK TABLE を実行してから ALTER
SEGMENT RELEASE STORAGE を実行します。
RELEASE STORAGE オプションはインデックス セグメントや名前
のないセグメントには無効です。
ALTER SEGMENT RELEASE STORAGE コマンドが完了すると、オ
ペレーティング システムに返されたブロックの割合を示すメッセー
ジが表示されます。
8-54 SQL Reference Guide
ALTER SYNONYM
セグメントの格納領域を解放 / 削除する例
ALTER SEGMENT 文を使用して DAILY_DATA2 セグメントの末尾から未使用の領域
を解放するには、次のようにします。
alter segment DAILY_DATA2 of table sales release storage;
ALTER SEGMENT 文を使用して Sales テーブルのセグメントの末尾から空の PSU を
削除するには、次のようにします。
alter segment DAILY_DATA2 of table sales drop last storage;
セグメントに格納領域を追加する例
ALTER SEGMENT 文を使用して Sales テーブルのセグメントの末尾に PSU を追加す
るには、次のようにします。
alter segment DAILY_DATA2 of table sales
add storage 'sales_psu4'
maxsize 1024
initsize 100
extendsize 100;
ALTER SYNONYM
ALTER SYNONYM 文は、シノニムまたはシノニムの列にコメントを付けます。シ
ノニムのコメントは、RBW_SYNONYMS および RBW_TABLES システム テーブル
に格納されます。列のコメントは、RBW_COLUMNS システム テーブルに格納さ
れます。
アクセス権
シノニムを変更するユーザは、次の中で少なくとも 1 つの条件を満たしている必要
があります。
■
■
■
■
DBA システム ロールのメンバーであること
明示的に付与されるかユーザが作成したロールのメンバーであることによ
り、ALTER_ANY 権限を持っていること
RESOURCE システム ロールのメンバーで、かつシノニムの作成者である
こと
シノニムの作成者であり、明示的に付与されるかユーザが作成したロール
のメンバーであることにより、ALTER_OWN 権限を持っていること
SQL 文と RISQL 拡張機能 8-55
ALTER SYNONYM
構文
次に ALTER SYNONYM 文の構文ダイアグラムを示します。
ALTER SYNONYM
<synonym_name>
<col_name>
ALTER
COLUMN
COMMENT
'<character_string>'
NULL
<synonym_name> 変更するシノニムの名前を指定します。
ALTER
COLUMN
<col_name>
指定したシノニムの中で、変更する列の名前を指定します。
COLUMN キーワードはオプションです。
COMMENT
シノニムまたはシノニムの列を説明するコメント文字列を割り当
てます。シノニムのコメントは、RBW_SYNONYMS および
RBW_TABLES システム テーブルに格納されます。列のコメン
トは、RBW_COLUMNS システム テーブルに格納されます。256
バイトまで入力できます。データベースはこのコメント テキス
トを無視します。
NULL を指定すると、コメント文字列が NULL インジケータに置
き換えられます。
8-56 SQL Reference Guide
ALTER SYSTEM
ALTER SYSTEM
ALTER SYSTEM 文は、データベース管理者や、必要なアクセス権を持ったユーザ
が、データベースの制御や各種の管理を行うときに使用します。
アクセス権
データベースに対して ALTER SYSTEM 文を実行するユーザは、次の中で少なくと
も 1 つの条件を満たしている必要があります。
■
■
DBA システム ロールのメンバーであること
明示的に付与されるかユーザが作成したロールのメンバーであることによ
り、ALTER_SYSTEM 権限を持っていること
管理データベースの DBA システム ロールのメンバーであるか、ALTER_SYSTEM
権限を持っているユーザは、すべてのウェアハウス データベースを対象とした
ALTER SYSTEM 文を実行することができます。
SQL 文と RISQL 拡張機能 8-57
ALTER SYSTEM
構文
次に ALTER SYSTEM 文の構文ダイアグラムを示します。
ALTER SYSTEM
RESET STATISTICS
DATABASE
ALL
<logical_db_name>
QUIESCE
DATABASE
ALL
<logical_db_name>
RESUME
DATABASE
START
ALL
<logical_db_name>
ADVISOR_LOGGING
STOP
SWITCH ADVISOR_LOG FILE
TERMINATE
ADMIN
ADMINISTRATION
<alter_user_activity>
<alter_user_priority>
<alter_logging>
<alter_accounting>
<alter_performance_monitor>
<alter_clear_performance_stats>
8-58 SQL Reference Guide
DAEMON
ALTER SYSTEM
RESET
STATISTICS
カレント データべースの動的統計テーブルの統計情報をすべて 0
にリセットします。カレント データベースが管理データベース
の場合は、DATABASE 句を指定してください。
DATABASE
1 つまたはすべてのデータベースを指定します。カレント データ
ベースが管理データベースの場合は、この句の入力は必須です。
そうでない場合は、使用しません。
ALL
ALTER SYSTEM 文が、すべてのウェアハウス データベースに適
用することを指定します。
<logical_db_name> データベース名を指定します。rbw.config ファイルに設定された
データベース論理名を使用することができます。
QUIESCE
カレント データべースまたは指定したデータべースを、静止し
た状態にします。静止状態のデータベースに対しては、新しくコ
マンドを実行したり、新しく接続することはできません。DBA
システム ロールのメンバーまたは IGNORE_QUIESCE タスク権
限を持つユーザが開始する場合は、コマンドや接続は実行可能で
す。現在実行中のコマンドは、完了させることができます。カレ
ント データベースが管理データベースの場合は、DATABASE 句
と対象データベース名を指定してください。
RESUME
静止状態のデータべースをアクティブ状態に変更します。静止
データベースでは新規にセッションが起動できないため、このコ
マンドは既存セッションで実行するか、管理データベースに接続
していて、その管理データベースに対する ALTER_SYSTEM 権限
を持っているユーザが実行する必要があります。カレント デー
タベースが管理データベースの場合は、DATABASE 句と対象
データベース名を指定してください。
START、STOP
ADVISOR_
LOGGING
Vista Advisor ログ ファイルへの情報の記録を開始または停止しま
す。このステートメントには、デフォルト設定はありません。こ
のステートメントは rbw.config ファイルの ADMIN
ADVISOR_LOGGING パラメータよりも優先されます。
SQL 文と RISQL 拡張機能 8-59
ALTER SYSTEM
SWITCH
ADVISOR_LOG
FILE
デフォルト名で新規のアクティブ ログ ファイルを作成し、次の
情報をログに記録します。
■
■
■
■
■
■
■
タイムスタンプ。メッセージがログ記録された日付と時
刻を示します。
データベース名。使用中のデータベースの名前を示しま
す。
基本テーブル識別番号。事前計算ビューの作成に使用さ
れた基本テーブルを識別します。
ビュー識別番号。クエリへの応答に使用された事前計算
ビューを識別します。
ロールアップ情報。ビューのグルーピング列のサブセッ
トまたはグラニュラリティ ( 詳細度 ) の低いディメン
ジョンの属性を問い合わせるクエリに応答するために
ビューが参照された回数を示します。
クエリおよびクエリ内の各集約ブロックの経過時間。ク
エリの集約部分の実行に要した合計時間を示します。
集約ブロックの SQL テキスト。ビューの定義を表しま
す。
TERMINATE
管理デーモン (rbwadmd) を終了します。rbwadmd を終了する
ADMIN DAEMON と、動的統計テーブル (DST) に格納されていた情報はすべて削除
されます。管理者は /redbrick/bin ディレクトリから rbwadmd ス
クリプトを実行して管理デーモンを再起動できます。
<alter_user_
activity>
ALTER SYSTEM の 2 つのオプション、CLOSE USER SESSION と
CANCEL USER COMMAND を含みます。どちらのオプションも、
現在実行中のユーザ コマンドを取り消すものです。異なる点は、
CLOSE USER SESSION オプションが、コマンドを実行している
セッションも終了させる点です。<alter_user_activity> 句の詳しい
定義は、8-61 ページ を参照してください。
<alter_user_
priority>
現在のユーザ セッションの優先順位を変更します。そのユーザ
に新しく開始されたセッションがある場合、そのセッションの優
先順位が既存の優先順位です。
ユーザ優先順位の変更を行うには、ALTER USER 文を使用しま
す。ユーザ優先順位をサポートするには、UNIX の renice コマン
ドを実行できるプラットフォームを使用してください。ADMIN
RENICE_COMMAND 構成パラメータで renice スクリプトのフル
パス名を指定してください。<alter_user_priority> 句の詳しい定義
は、8-63 ページを参照してください。
8-60 SQL Reference Guide
ALTER SYSTEM
ログ動作を制御するオプションが含まれます。<alter_logging> 句
の詳しい定義は、8-65 ページを参照してください。
<alter_logging>
<alter_accounting> アカウント動作を制御するオプションが含まれます。
<alter_accounting> 句の詳しい定義は、8-67 ページを参照してく
ださい。
<alter_performance_ パフォーマンス モニタを制御するオプションが含まれます。
monitor>
<alter_performance_monitor> 句の詳しい定義は、8-68 ページを参
照してください。
性能 DST をクリアするオプションが含まれます。
<alter_clear_performance_statistics> 句の詳しい定義は、8-70 ペー
ジを参照してください。
<alter_clear_
performance_
statistics>
ユーザ操作の制御
次にユーザ操作の制御句の構文ダイアグラムを示します。ユーザ操作の制御句と
ALTER SYSTEM 文との関係は、8-57 ページを参照してください。
<db_username>
CLOSE USER SESSION
CANCEL USER COMMAND
DATABASE
ALL
ALL
<logical_db_name>
PROCESS
ALL
<pid>
SQL 文と RISQL 拡張機能 8-61
ALTER SYSTEM
CLOSE USER
SESSION
カレント データべースの 1 つまたはすべてのユーザ セッションに
ついて、現在実行中のコマンドを取り消し、終了します。カレント
データベースが管理データベースの場合は、DATABASE 句を指定
してください。
CANCEL USER カレント データべースのそれぞれ、またはすべてのユーザ セッ
COMMAND
ションについて、現在実行中のコマンドを取り消します。カレント
データベースが管理データベースの場合は、DATABASE 句を指定
してください。
<db_username> 有効なデータベース ユーザ名を指定します。
ALL
ステートメントに指定したデータベースの全ユーザに適用すること
を指定します。
DATABASE
1 つまたはすべてのデータベースを指定します。カレント データ
ベースが管理データベースの場合は、入力が必須です。そうでない
場合は、使用しません。
ALL
ステートメントが、すべてのウェアハウス データベースに適用さ
れることを指定します。
<logical_db_
name>
rbw.config ファイルに設定されたデータベース論理名を指定しま
す。
PROCESS
セッションのプロセス ID により、特定のセッションを指定します。
管理データベースに接続している場合は、DATABASE 句の後にこ
の句を指定してください。たとえば、管理データベースに接続中に
データベース DB1 上の特定のユーザのすべての処理を終了させる
場合は、DATABASE DB1 句の後にこの句を指定する必要がありま
す。
ALL
すべてのセッションを指定します。PROCESS オプションを指定し
なければ、ALL がデフォルトになります。
<pid>
特定のユーザ セッションのプロセス ID を指定します。
8-62 SQL Reference Guide
ALTER SYSTEM
例
次のステートメントは、カレント データベースでユーザ diaz が実行している特定
のセッションについて、現在実行中のステートメントを取り消します。
alter system cancel user command diaz
process 23581
次のステートメントは、データベース marketing でユーザ intern が実行している全
セッションのステートメントを取り消し、同セッションを終了します。このステー
トメントを実行するユーザは、管理データベースに対する ALTER SYSTEM 権限を
持ち、管理データベースに接続している必要があります。
alter system close user session intern
database marketing
process all
次の例は、ユーザ jones が実行中の全ウェアハウス データベースの全セッションの
ステートメントを取り消し、同セッションを終了します。このステートメントを実
行するユーザは、管理データベースに対する ALTER SYSTEM 権限を持ち、管理
データベースに接続している必要があります。
alter system close user session jones database all
ユーザ優先順位の変更
次に <alter_user_priority> 句の構文ダイアグラムを示します。この句と ALTER
SYSTEM 文との関係は、8-57 ページを参照してください。
CHANGE USER
<db_username>
ALL
SET PRIORITY
<integer>
ON DATABASE
ALL
<logical_db_name>
PROCESS
ALL
<pid>
SQL 文と RISQL 拡張機能 8-63
ALTER SYSTEM
CHANGE
USER
1 つまたは複数のユーザ セッションの優先順位を変更します。この
句を使用するには、ADMIN RENICE_COMMAND パラメータを設定
してください。
<db_username> 有効なデータベース ユーザ名を指定します。
ALL
ステートメントに指定したデータベースの全ユーザに適用すること
を指定します。
SET PRIORITY セッションの優先順位を <integer> に指定した値に設定します。0 ∼
<integer>
100 の値を指定できます。最優先の順位は 0 です。
ON
DATABASE
1 つまたはすべてのデータベースを指定します。カレント データ
ベースが管理データベースの場合は、入力が必須です。そうでない
場合は、使用しません。
ALL
ステートメントが、すべてのウェアハウス データベースに適用する
ことを指定します。
<logical_db_
name>
rbw.config ファイルに設定されたデータベース論理名を指定します。
PROCESS
セッションのプロセス ID により、特定のセッションを指定します。
管理データベースに接続している場合は、DATABASE 句の後にこの
句を指定してください。たとえば、管理データベースに接続中に
データベース DB1 上の特定のユーザの優先順位を変更したい場合
は、DATABASE DB1 句の後にこの句を指定する必要があります。
ALL
すべてのセッションを指定します。PROCESS オプションを指定し
なければ、ALL がデフォルトになります。
<pid>
特定のユーザ セッションのプロセス ID を指定します。
8-64 SQL Reference Guide
ALTER SYSTEM
ログ記録設定の変更
次にログ記録設定句の構文ダイアグラムを示します。この句と ALTER SYSTEM 文
との関係は、8-57 ページを参照してください。
START LOGGING
STOP LOGGING
SWITCH LOGGING FILE
TERMINATE LOGGING DAEMON
CHANGE LOGGING LEVEL
AUDIT
ERROR
OPERATIONAL
ROUTINE
ALERT
URGENT
SCHEMA
USAGE
ヒント : 次に示す操作を実行するには、ログ デーモンが起動している必要があり
ます。
START
LOGGING
イべントのロギングを開始します。ログ デーモンが、ウェアハウス
プロセスからのログ要求メッセージの受信を開始し、対応するログ
レコードを新規ログ ファイルに書き込みます。
STOP
LOGGING
イべントのロギングを停止します。ログ デーモンは、ロギングを停
止し、アクティブ状態のログ ファイルを閉じます。ログ デーモン
は停止されないため、いつでもログ記録を再開できます。
SWITCH
LOGGING
FILE
アクティブ状態のログ ファイルを閉じ、その後のレコードを書き込
む新規のアクティブ ログ ファイルを作成します。閉じたファイル
は名前が rbwlog.<daemon_name>.active から
rbwlog.<daemon_name>.<datetime_stamp> に変更されます。ログ記
録が停止していると、このステートメントは無視されます。
SQL 文と RISQL 拡張機能 8-65
ALTER SYSTEM
TERMINATE
LOGGING
DAEMON
ログ記録タスクとアカウンティング タスクの両方を実行しているロ
グ デーモン プロセス (rbwlogd) を終了します。
CHANGE
LOGGING
LEVEL
選択したログ イべント カテゴリについて、ログの重要度を変更し
ます。変更は、ただちに有効になります。イべント カテゴリは、次
のとおりです。
■
■
■
■
■
ROUTINE、
ALERT、
URGENT
8-66 SQL Reference Guide
AUDIT ( セキュリティおよびアクセス コントロールに関連
したイべント )
ERROR ( エラー イべント )
OPERATIONAL ( 管理操作 )
SCHEMA ( データべースの物理的および論理的構造の変更 )
USAGE ( ロード操作、アンロード操作、DML 操作 )
そのイベント カテゴリについて、指定したレベル以上の重要度を持
つログ イベントだけが記録されます。最低レべルは ROUTINE、最
高レべルは URGENT です。ALERT の重要度レベルは、ROUTINE と
URGENT の中間です。
ALTER SYSTEM
アカウンティング設定の変更
次にアカウンティング設定の構文ダイアグラムを示します。この句と ALTER
SYSTEM 文との関係は、8-57 ページを参照してください。
START ACCOUNTING
STOP ACCOUNTING
SWITCH ACCOUNTING FILE
CHANGE ACCOUNTING LEVEL
WORKLOAD
JOB
START
ACCOUNTING
アカウンティング動作を開始します。ログ デーモンが、アカウ
ンティング要求メッセージの受信を開始し、対応するアカウン
ト レコードを新規アカウント ファイルに書き込みます。すで
にアカウンティングが開始していると、このオプションは無視
されます。
STOP
ACCOUNTING
アカウンティング動作を停止します。ログ デーモンは、アク
ティブ状態のアカウント ファイルを閉じます。ログ デーモン
は停止されないため、いつでもアカウンティングを再開するこ
とができます。
SWITCH
アクティブ状態のアカウント ファイルを閉じ、その後のアカウ
ACCOUNTING FILE ント レコードを書き込む新規のアクティブ ファイルを作成し
ます。閉じたファイルは名前が rbwacct.<daemon_name>.active
から rbwacct.<daemon_name>.<datetime_stamp> に変更されま
す。アカウンティングが実行中でなければ、このステートメン
トは無視されます。
CHANGE
ACCOUNTING
LEVEL
記録するアカウント レベルの詳細レベルを、JOB アカウンティ
ングまたは WORKLOAD アカウンディングに変更します。変更
は、ただちに有効になります。
WORKLOAD、
JOB
JOB アカウンティングまたは WORKLOAD アカウンティングを
指定します。JOB は、基本的なリソース使用率情報に限定され
ます。WORKLOAD アカウンティングには詳細な情報が含まれ
ます。主に IBM サポート スタッフがこのアカウンティングを
使用します。
SQL 文と RISQL 拡張機能 8-67
ALTER SYSTEM
パフォーマンス モニタの変更
次に パフォーマンス モニタの変更句の構文ダイアグラムを示します。この句と
ALTER SYSTEM 文との関係は、8-57 ページを参照してください。
PERFORMANCE MONITOR
START
SESSION <session_id>
STOP
DATABASE
<logical_db_name>
START、STOP
クエリの実行結果を収集および格納する場合に、パフォーマンス
PERFORMANCE モニタ デーモン (rbwpmond) を開始または停止します。このス
MONITOR
テートメントでは、QUERYPROCS、
PERFORMANCE_MONITOR_MAXSESSIONS、および
PERFORMANCE_MAXOPERATORS パラメータの現在の値を使
用してメモリを割り当てて、クエリ統計を収集および格納しま
す。メモリ要件とパフォーマンス モニタの使用の詳細について
は、『Query Performance Guide』を参照してください。
警告 : 性能の検証中はパフォーマンス デーモンを常に有効にし
ておき、クエリごとに起動および終了しないようにしてくださ
い。セッション中にクエリのモニタを開始および停止するには、
SET PERFORMANCE MONITOR ON および SET PERFORMANCE
MONITOR OFF を使用することをお勧めします。詳細について
は、9-44 ページ「SET PERFORMANCE MONITOR」を参照して
ください。
性能の検証は数日から 1 週間かかる場合もあります。割り当てら
れたメモリにクエリのすべてのモニタ結果を保存できる場合は、
検証中はパフォーマンス モニタを常に有効にしておくことがで
きます。メモリが不足した場合、ALTER SYSTEM コマンドの
CLEAR PERFORMANCE STATISTICS オプションを使用して、性
能 DST の行データをクリアすることができます。このオプショ
ンの詳細については、8-70 ページを参照してください。
SESSION
指定したセッションのパフォーマンス モニタを開始または停止
します。DBA はこのキーワードを使用して、パフォーマンス モ
ニタを個別のセッションに制限できます。
<session_pid>
現在アクティブなセッションを指定します。
8-68 SQL Reference Guide
ALTER SYSTEM
DATABASE
パフォーマンス モニタを開始または停止するデータベースを指
定します。カレント データベースが管理データベースの場合は、
入力が必須です。そうでない場合は、使用しません。
<logical_db_
name>
rbw.config ファイルに設定されたデータベース論理名を指定しま
す。
使用上の注意
ALTER SYSTEM コマンドの START PERFORMANCE MONITOR オプションによっ
て、パフォーマンス モニタ デーモン rbwpmond が開始され、システム全体の性能
をモニタするためのリソースが割り当てられます。
RISQL> alter system start performance monitor;
ALTER SYSTEM コマンドの START PERFORMANCE MONITOR オプションは、Red
Brick サーバがモニタを行うための調整を行います。実際にクエリ モニタを開始お
よび停止するには、セッションごとに SET PERFORMANCE MONITOR コマンドを
使用します。
RISQL> set performance monitor on;
RISQL> select ...;
RISQL> set performance monitor off;
詳細については、9-44 ページ「SET PERFORMANCE MONITOR」を参照してくださ
い。
デフォルトでは、パフォーマンス モニタはすべてのセッションで有効です。DBA
は SESSION <session_pid > 句とともに ALTER SYSTEM STOP PERFORMANCE
MONITOR コマンドを実行することで、指定したセッションのモニタを停止できま
す。
RISQL> alter system stop performance monitor session 6042;
セッション 6042 のユーザがモニタを開始しようとすると、エラーになります。
RISQL> set performance monitor on;
** ERROR ** (9112) Performance monitoring for this session has
been disabled
ユーザが SET PERFORMANCE MONITOR コマンドでモニタを開始していた場合、
この ALTER SYSTEM STOP コマンドを SESSION 句とともに使用して、セッション
のモニタを停止できます。
セッションのパフォーマンス モニタを手動で停止した後、DBA は ALTER SYSTEM
START PERFORMANCE MONITOR コマンドの SESSION 句を使用してモニタを再開
できます。
RISQL> alter system start performance monitor session 6042;
SQL 文と RISQL 拡張機能 8-69
ALTER SYSTEM
STOP PERFORMANCE MONITOR コマンドを SESSION キーワードを使用せずに実
行すると、パフォーマンス モニタ デーモン rbwpmond が停止され、システム全体
の性能をモニタするためのリソースが解放されます。
RISQL> alter system stop performance monitor;
パフォーマンス モニタの使用方法の詳細については、『Query Performance Guide』を
参照してください。
性能統計のクリア設定の変更
次に 性能統計のクリア設定の変更句の構文ダイアグラムを示します。この句と
ALTER SYSTEM 文との関係は、8-57 ページを参照してください。
CLEAR PERFORMANCE STATISTICS
START_TIMESTAMP <timestamp>
USERNAME <user_name>
DATABASE
<logical_db_name>
CLEAR
START_TIMESTAMP および USERNAME オプションを使用して、
PERFORMANCE 性能 DST に格納された行データをクリアします。
STATISTICS
START_TIMESTAMP と USERNAME のどちらも指定しない場合
は、すべての行がクリアされます。
この句を使用するには、パフォーマンス モニタ デーモン
rbwpmond が有効である必要があります。
START_
TIMESTAMP
コマンドの開始時間を基準にして、性能 DST から行データをク
リアします。
<timestamp>
コマンドの開始時間を指定します。この前に、性能 DST からす
べての行がクリアされます。
USERNAME
ユーザ名を基準にして、性能 DST から行データをクリアします。
<db_username>
有効なデータベース ユーザ名を指定します。このユーザ名のあ
る行データが性能 DST からクリアされます。
DATABASE
性能 DST から行データをクリアするデータベースを指定します。
カレント データベースが管理データベースの場合は、入力が必
須です。そうでない場合は、使用しません。
8-70 SQL Reference Guide
ALTER SYSTEM
<logical_db_
name>
rbw.config ファイルに設定されたデータベース論理名を指定しま
す。
使用上の注意
PERFORMANCE_MONITOR_COMMANDS_LIMIT パラメータは、パフォーマンス
モニタが DST に格納できるコマンドの最大数を指定します。このパラメータで指定
した数に達した場合、パフォーマンス モニタで新規クエリを開始することはできま
せん。このときパフォーマンス モニタからはエラー メッセージが返され、性能
DST をクリアする必要があることを示します。ALTER SYSTEM コマンドの CLEAR
PERFORMANCE STATISTICS 句を使用して、行データのサブセットまたはすべての
行データをクリアし、クエリのモニタを再開してください。
CLEAR PERFORMANCE STATISTICS 句の使用手順とその例については、『Query
Performance Guide』を参照してください。
SQL 文と RISQL 拡張機能 8-71
ALTER TABLE
ALTER TABLE
ALTER TABLE 文には、次の目的があります。
■
■
■
■
■
テーブル列の追加、修正、削除。
テーブルに使用できるセグメントの最大数と、セグメント当たりの最大行
数の変更。
テーブルまたは列を説明したコメントの割り当て。テーブルと列のコメン
トは、それぞれ RBW_TABLES テーブルと RBW_COLUMNS テーブルに
格納されます。
フォーリン キー制約の追加、削除、変更。
事前計算ビューの有効または無効の設定。
ALTER TABLE 文の実行中は、テーブルが自動的にロックされます。
ALTER TABLE 文は、テンポラリ テーブルに対してはサポートされません。
アクセス権
テーブルを変更するユーザは、次の中で少なくとも 1 つの条件を満たしている必要
があります。
■
■
■
■
DBA システム ロールのメンバーであること。
明示的に付与されるかユーザが作成したロールのメンバーであることによ
り、ALTER_ANY 権限を持っていること。
テーブルの作成者であり、RESOURCE システム ロールのメンバーである
こと。
テーブルの作成者であり、ALTER_OWN 権限と
ALTER_TABLE_INTO_ANY 権限を持っていること。ただし、IN_PLACE オ
プションを使用するには ALTER_TABLE_INTO_ANY 権限は不要です。
8-72 SQL Reference Guide
ALTER TABLE
構文
次に ALTER INDEX 文の構文ダイアグラムを示します。
,
ALTER TABLE
<table_name>
<add_column>
<drop_column>
IN_PLACE
IN
<segment_name>
,
IN
(
<segment_name>
)
<alter_column>
RESUME
RESET
NULL
CHANGE MAXSEGMENTS TO
<maxsegments>
CHANGE MAXROWS PER SEGMENT TO
NULL
<maxrows>
SET PRECOMPUTED VIEWS
VALID
INVALID
COMMENT
NULL
'<character_string>'
<add_constraint>
<drop_constraint>
<alter_constraint>
RENAME AS
<new_name>
SQL 文と RISQL 拡張機能 8-73
ALTER TABLE
<table_name>
変更するテーブルの名前を指定します。このテーブルは、す
でにユーザが定義済みのものである必要があります。
シノニム、ビュー、テンポラリ テーブル、システム テーブ
ルは変更できません。変更するテーブルのシノニムは、テー
ブルと同時に変更されますが、ビューには影響しません。基
本テーブルの変更をビューに反映させるには、ビューを削除
して、再作成する必要があります。
<add_column,
drop_column>
指定したテーブルに追加する列、またはテーブルから削除す
る列を指定します。
1 つの ALTER TABLE 文は、列の追加と削除を同時に行うこ
とができるように、複数の列を指定できます。ADD と DROP
はいくつでも指定できます。
<add_column> 指定と <drop_column> 指定の詳細は、それぞれ
8-73 ページと 8-81 ページを参照してください。
<alter_column>
既存列の変更内容を記述します。既存列の名前やデフォルト
値を変更することができます。指定列がフォーリン キー列の
場合は、alter_column を指定して参照先テーブルから行を削
除するときの動作を変更できます。
alter_column を指定して、列のフィル ファクタを変更したり、
列にコメントを割り当てたりすることもできます。コメント
は RBW_COLUMNS テーブルに格納されます。
<alter_column> 指定の詳細は、8-82 ページを参照してくださ
い。
IN_PLACE
既存セグメントで、列の追加や削除を行います。
行のサイズを大きくする ( 追加する列の合計幅が、削除する
列の合計幅より広い ) 場合は、テーブルの全行を格納できる
大きさのセグメントを使用してください。
このオプションを使用して操作が中止された場合は、テーブ
ルはリセットされません。
8-74 SQL Reference Guide
ALTER TABLE
IN <segment_name>
名前付きセグメントにテーブルを再作成します。既存セグメ
ントのすべての行が新規セグメントにコピーされ、コピーと
同時に ADD 指定または DROP 指定が適用されます。
1 つのセグメントに格納されているテーブルは、1 つのセグ
メントにコピーしてください。複数セグメントを持つテーブ
ルは、同数のセグメントにコピーする必要があります。
変更が完了すると、元のセグメントはテーブルから切り離さ
れるか、削除されます。名前付き ( ユーザが作成した ) セグ
メントは切り離され、デフォルト セグメントは削除されま
す。
新規セグメントは、テーブル全体を格納できるサイズにして
ください。
IN_PLACE と IN <segment_name> のどちらも指定しない場合
は、変更後のテーブルはデフォルト セグメントに作成されま
す。変更が完了すると、元のセグメントはテーブルから切り
離されるか、削除されます。名前付き ( ユーザが作成した )
セグメントは切り離され、デフォルト セグメントは削除され
ます。
RESUME
割り込みによって中断した ALTER TABLE ADD COLUMN 操
作や DROP COLUMN 操作を再開します。
実行に失敗した ALTER TABLE ADD CONSTRAINT 操作や
DROP CONSTRAINT 操作は再開できません。
RESET
テーブルを元の状態に復元します。RESET は、次の条件が満
たされた場合にのみ有効です。
■
■
ALTER TABLE 文が、ユーザの割り込みや、実行中
の障害によって完了できなかった場合。これには
DBA 権限の欠如のような特権違反は含まれません。
ALTER TABLE 文に、IN_PLACE オプションを指定
しなかった場合。
SQL 文と RISQL 拡張機能 8-75
ALTER TABLE
CHANGE
MAXSEGMENTS
TO...CHANGE
MAXROWS
PER SEGMENT TO
テーブルの <maxsegments> または <maxrows per segment> の値
を変更します。STAR インデックス キーのフォーリン キーが
このテーブルを参照している場合に、この値でインデックス
キーのサイズを算出し、データ量に応じた領域をインデック
スに割り当てます。
ALTER TABLE 文は上記の 2 つの値を変更できますが、両方
を 1 つのステートメントで変更することはできません。
どちらかの値に NULL を指定すると、CREATE TABLE 文で指
定を省略した場合と同様になりますので、注意してくださ
い。
STAR インデックスのサイズ変更の詳細については、
『Administrator's Guide』を参照してください。
ヒント : 参照先テーブルの MAXROWS PER SEGMENT の値を変更すると STAR イ
ンデックスの範囲指定が無効になるような場合、この値を変更できません。そのよ
うな変更を加えようとすると、その STAR インデックスを示すエラー メッセージが
表示されます。
SET PRECOMPUTED table_name を持つすべての事前計算ビューに、詳細テーブル
VIEWS
が有効または無効とマークします。このステートメントには
デフォルトはありません。ただし、すべての事前計算ビュー
は、作成時には自動的に無効とマークされます。
COMMENT
テーブルの内容を説明するコメントを割り当てます。コメン
トは、RBW_TABLES システム テーブルに格納されます。
256 バイトまで入力できます。データベースはこのコメント
テキストを無視します。
NULL を指定すると、コメント文字列が NULL に置き換えら
れます。
<add_constraint>
テーブルに追加するフォーリン キー制約を指定します。詳細
については、8-86 ページ「制約の追加」を参照してくださ
い。
<drop_constraint>
テーブルから削除するフォーリン キー制約を指定します。詳
細については、8-89 ページ「制約の削除」を参照してくださ
い。
8-76 SQL Reference Guide
ALTER TABLE
<alter_constraint>
変更するフォーリン キー制約を指定して、シノニムまたはシ
ノニムの基本テーブルを参照するようにします。詳細につい
ては、8-90 ページ「制約の変更」を参照してください。
RENAME AS
<new_name>
<table_name> で指定した基本テーブルの名前を <new_name>
に変更します。新しい名前には、既存のテンポラリ テーブ
ル、パーマネント テーブル、派生テーブルやシノニムの名前
を使用できません。
シノニム名は変更可能です。また、テーブル名を変更した後
も、シノニムは有効です。次のオブジェクトの名前は変更で
きません。
■
■
■
■
■
システム テーブル。
動的統計テーブル (DST)。
モデル テーブル。
派生テーブル ( ビューや集約テーブルなど )。
ビューで参照されるテーブル。テーブルの名前を変
更するときは、テーブルで定義されたビューをすべ
て削除する必要があります。
クエリ リビジョンが固定されている場合、バージョン管理さ
れたデータベースのテーブル名は変更できません。
ユーザは、ほかの DDL タスクを実行する権限に応じて、
テーブルの名前を変更するための権限を持つ必要がありま
す。たとえばテンポラリ テーブルを作成でき、パーマネント
テーブルを作成できないユーザは、テンポラリ テーブルの名
前を変更することはできますが、パーマネント テーブルの名
前は変更できません。
テーブル名を変更しても、プライマリ キー制約とフォーリン
キー制約は引き続き有効です。制約名とインデックス名は、
新しいテーブル名を反映するように自動的に更新されませ
ん。システムがデフォルトで生成した制約名およびプライマ
リ キー インデックス名には、元のテーブル名が含まれてい
ます。このため、RBW_RELATIONSHIPS、
RBW_CONSTRAINTS、および RBW_INDEXES テーブルに対
するクエリ出力は、紛らわしい場合があります。
テーブル名を変更しても、マクロ テキストは動的に更新され
ません。したがって、名前を変更したテーブルを参照するマ
クロは、エラーになるか、不正な結果を返します。
SQL 文と RISQL 拡張機能 8-77
ALTER TABLE
使用上の注意
VARCHAR 列を使用している場合、ALTER TABLE 文で必要となる正確な領域の容
量を事前に算出することはできません。
ヒント : 領域不足のために、ステートメントの実行に失敗する場合に備えて、
テーブルの変更前に必ずそのバックアップを作成することをお勧めします。
<add_column> は、指定したテーブルに追加する列を指定します。<add_column> を
ALTER TABLE 文で指定する方法については、8-72 ページ「ALTER TABLE」を参照
してください。
構文
次に 列の追加指定の構文ダイアグラムを示します。
ADD
<column_name>
<datatype>
NOT NULL
COLUMN
UNIQUE
WITH FILLFACTOR n
'<literal>'
DEFAULT
CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP
CURRENT_USER
NULL
ADD
新規列を作成し、指定したテーブルの最終列に追加します。
CREATE TABLE 文で最後にこの列を指定してテーブルを作成する
のと同じ結果になります。キーワード COLUMN はオプションで
す。
<col_name>
指定したテーブルに追加する列を指定します。ALTER TABLE 文
に指定する列の名前は、一意である必要があります。テーブルに
ある既存の列名とも重複できません。
8-78 SQL Reference Guide
ALTER TABLE
<data type>
列のデータ型を指定します。ALTER TABLE には、CREATE
TABLE 文で使用できるデータ型をすべて使用できます。
DEFAULT 句に指定する値はデータ型との互換性が必要です。
データ型については、2-15 ページ「データ型」および 8-139 ペー
ジ「列の定義」を参照してください。
NOT NULL
列が NULL ではないことを指定します。NOT NULL と指定した列
には、そのテーブルのすべての行に値を格納する必要があります。
値を入力しなかったり、未知の値を入力することはできません。
NOT NULL 句は SERIAL 列の指定で必要です。
UNIQUE
列が一意であることを指定します。UNIQUE と指定した列には、
重複値を格納することはできません。一意性が検証されるには、
UNIQUE と指定した各列に B-TREE インデックスを設定する必要
があります。
DEFAULT
列の DEFAULT 値を指定します。この値は、すべての既存行に適
用されます。新規列のデータ型は、デフォルト値との型互換性が
必要です。たとえば、REAL 列に 1 を割り当てるのは有効ですが、
INTEGER 列に次の文字列を割り当てるのは無効です。
'larry, moe, and curly'
DEFAULT に続けて指定できるキーワードと値は、8-143 ページを
参照してください。このようなキーワードや値には <literal>、
CURRENT_DATE、CURRENT_TIME、CURRENT_TIMESTAMP、
CURRENT_USER、および NULL があります。
シリアル (SERIAL) 型以外のすべてのデータ型にはデフォルト値が
必要です。シリアル (SERIAL) 型列には、デフォルト値はありませ
ん。
WITH
FILLFACTOR n
この句は、可変長文字 (VARCHAR) 型列にのみ適用されます。
通常の VARCHAR が取るべき列の長さの割合を指定します。この
値は、ブロックに割り当てる行サイズと行数の算出に使用されま
す。
WITH FILLFACTOR を指定しない場合、rbw.config ファイルに設定
されているデフォルトの列フィル ファクタが使用されます。
rbw.config ファイルで列フィル ファクタが設定されていない場合
は、システム デフォルトである 10% が使用されます。
VARCHAR FILLFACTOR を使用したブロックごとの行数の計算に
ついては、『Administrator's Guide』を参照してください。
SQL 文と RISQL 拡張機能 8-79
ALTER TABLE
使用上の注意
複数の ADD 指定を使用した場合は、ALTER TABLE 文に記述された順序で、テーブ
ルの最後に各列が追加されます。
テーブルに列を追加しても、ビューは変わりません。ビューの列参照名は、ビュー
の作成時にすべて展開されています。このため、ビューの基本テーブルに列を追加
しても、クエリ式として SELECT * FROM を指定したビューには、ビュー定義後に
行われた列の追加は反映されません。
例
次のステートメントは、Sales_93 という整数列を Sales テーブルに追加します。
alter table sales
add column sales_93 int default 0
in_place
次のステートメントは、Origin と Ranking という 2 列を Product テーブルに追加し
て新規セグメント seg30 に格納します。
alter table product
add column origin char(8) default 'ABC',
add column ranking int default 1
in seg30
8-80 SQL Reference Guide
列の削除
列の削除
<drop_column> は、指定したテーブルから削除する列を指定します。<drop_column>
を ALTER TABLE 文で指定する方法は、8-72 ページ「ALTER TABLE」を参照してく
ださい。
構文
次に 列の削除指定の構文ダイアグラムを示します。
DROP
<column_name>
RESTRICT
COLUMN
DROP
指定したテーブルから列を削除します。キーワード COLUMN は
オプションです。削除した列のデータはアクセスできなくなりま
す。この操作を取り消すことはできません。
<column_name> テーブルから削除する列を指定します。
RESTRICT
次の条件のいずれかが真の場合、DROP COLUMN 操作を中止しま
す。
■
■
■
■
削除する列が、ビューで直接または間接的に (SELECT *
などで ) 参照される。このようなビューは、あらかじめ
削除する必要があります。
指定した列が、テーブルのプライマリ キーである。
指定した列にインデックスが設定されている。インデッ
クスは、あらかじめ削除しておく必要があります。
指定した列に、フォーリン キー制約が設定されている。
例
次のステートメントは、Product テーブルの Body 列について、RESTRICT DELETE
を実行します。
alter table product drop body restrict in_place
SQL 文と RISQL 拡張機能 8-81
列の変更
次のステートメントは、Product テーブルに対して、複数の列の追加と削除を実行
します。
alter table product
drop body restrict,
add column origin char(8) default 'ABC',
add column rank int default 2
in seg30
列の変更
<alter_column> は、指定したテーブルで変更する列を指定します。<alter_column>
を ALTER TABLE 文で指定する方法は、8-72 ページ「ALTER TABLE」を参照してく
ださい。
構文
次に 列の変更指定の構文ダイアグラムを示します。
<col_name>
ALTER
COLUMN
RENAME AS
<new_col_name>
ON DELETE
NO ACTION
CASCADE
SET DEFAULT
<default_definition>
DROP DEFAULT
CHANGE FILLFACTOR n
SET SERIAL START
(
<value>
)
SET SERIAL STEP
(
<value>
)
COMMENT
NULL
NOT NULL
8-82 SQL Reference Guide
NULL'<character_string>'
列の変更
ALTER
既存列の変更を指定します。
<col_name>
テーブルの列名を指定します。
RENAME AS 指定した列名を変更します。新しい列名は、テーブルで一意にして
<new_col_name> ください。
ビューに指定されている列の名前は、ビューを削除しないと変更で
きません。
ON DELETE
列の参照整合性チェック モードを変更します。この動作は、フォー
リン キーで参照されたテーブルから行を削除するときに行われま
す。ON DELETE 句は、フォーリン キーとして設定された列にしか
適用できません。
NO ACTION キーワードは、参照先テーブルの行を削除すると参照
元テーブルの参照整合性が維持できなくなる場合に、行を削除しな
いことを指定します。
CASCADE キーワードは、参照先テーブルの行を削除すると参照元
テーブルの参照整合性が維持できなくなる場合に、その行を参照し
ている参照元テーブルの行も削除することを指定します。この動作
は、アウトボード テーブルとその参照元テーブルにも適用されま
す。
削除モードの動作を示す例については、8-171 ページ「DELETE」
と『Administrator's Guide』を参照してください。
ヒント : 複数の列からなるフォーリン キーの削除動作を変更する場合は、フォー
リン キー制約名を <col_name> に指定してください。1 つの列からなるフォーリン
キーの場合は、列名を <col_name> に指定できます。
SET SERIAL
START
シリアル (SERIAL) 型の <start_value> を指定値にリセットします。
その後、現在格納されている最大の SERIAL 値がリセットされ、こ
の値から次のシリアル (SERIAL) 型値が生成されます。
シリアル (SERIAL) 型値の重複を防ぐため、テーブルに現在格納さ
れている行のシリアル (SERIAL) 型列の最大値を指定します。
SERIAL 値が格納されているテーブルに行を追加するたびに、その
行の値が現行の格納値と照合されます。格納値よりも挿入した値の
方が大きい場合、格納値が挿入した値で更新されます。格納された
SERIAL 値が自動的に生成される場合、制約により新規の値はテー
ブルに格納されている値と同じになることはありません。
警告 : <start_value> を手動で設定した場合や挿入動作中にシリアル (SERIAL) 型値
を入力した場合は、シリアル (SERIAL) 型値の一意性が保証されません。
SQL 文と RISQL 拡張機能 8-83
列の変更
次の 2 つの操作は、エラーになります。
■
■
SET SERIAL
STEP
シリアル (SERIAL) 型以外の列で開始値を設定しようとし
た場合
シリアル (SERIAL) 型列で SET DEFAULT または DROP
DEFAULT のオプションを使用した場合
SERIAL 列の 2 つの値の差を示す値を変更します。
<step_value> を変更した場合、格納された SERIAL 値は現行の値の
ままとなります。
重要 : <step_value> と <start_value> の両方を変更する必要がある場合、先に
<step_value> を変更してください。<step_value> より先に <start_value> を変更する
と、誤った値が生成されます。
<value>
0 より大きく 231 未満の数値リテラルを示します。デフォルト値は 1
です。
SET DEFAULT
<default_definition>
列の新しいデフォルト値を指定します。このデフォルト値は、
列に値が格納されていない新規行に使用されます。列のデフォ
ルト値を指定しないと、デフォルトは NULL になります。NOT
NULL 列にデフォルト値が指定されていない場合は、挿入操作
時に値を入力する必要があります。値を入力しないと、データ
ベース サーバまたは TMU がエラー メッセージを返します。
<default_definition> は、CREATE TABLE 文の
<column_definitions> 句について説明したとおり、リテラル、
デフォルト関数、NULL のいずれかを指定できます。有効なデ
フォルト値については、8-143 ページを参照してください。
DROP DEFAULT
テーブルの作成時または先の ALTER TABLE 文で明示的に設定
されたデフォルトを削除します。列のデフォルト値は暗黙のデ
フォルト設定である NULL に戻ります。
CHANGE
FILLFACTOR n
ブロックに含める行数を決定する可変長文字 (VARCHAR) 型列
のフィル ファクタを変更します。このステートメントは、
テーブルにアタッチされた既存のデータやセグメントは変更し
ません。新しいフィル ファクタは、テーブルを書き換える
ALTER TABLE ADD COLUMN 文または DROP COLUMN 文で
使用されます。
フィル ファクタの詳細については、『Administrator's Guide』を
参照してください。
8-84 SQL Reference Guide
列の変更
COMMENT
列にコメント文字列を割り当てます。コメントは、
RBW_COLUMNS システム テーブルに格納されます。256 バ
イトまで入力できます。データベースはこのコメント テキス
トを無視します。
NULL を指定すると、コメント文字列が NULL に置き換えられます。
NULL、NOT NULL 指定した列を NULL から NOT NULL、またはその逆に置き換
えます。指定するテーブルは基本テーブルである必要がありま
す。列が次のいずれかに属する場合、その列を NULL または
NOT NULL に変更することはできません。
■
■
■
■
■
■
システム テーブル
DST
テンポラリ テーブル
モデル テーブル
シノニム
派生テーブル ( ビューや集約テーブルなど )
列を NULL または NOT NULL に変更するユーザは、通常の
DDL 権限を持っている必要があります。次の場合、列を
NULL または NOT NULL に変更することはできません。
■
■
データベースがバージョン管理され、クエリ リビ
ジョンが固定されている場合
事前計算ビューが変更する列を参照している場合
次のいずれかに当てはまる場合、ALTER COLUMN NULL 操作
はエラーになります。この場合、列は NOT NULL のままにな
ります。
■
■
■
■
■
■
■
UNIQUE 指定列
シリアル (SERIAL) 型列
セグメント化の基準列
プライマリ キーに属する列
フォーリン キーに属する列
複数列の B-TREE インデックスに属する列
階層構造の From 列
列がすでに NULL 値を持つ場合、これを NOT NULL に変更する
ことはできません。このため、ALTER COLUMN NOT NULL 文
を実行すると、テーブル全体がインデックス スキャンまたは
テーブル スキャンによってチェックされます。指定した列に
NULL 値が見つかると、操作はエラーとなります。このスキャン
には時間がかかります。ALTER COLUMN 文を実行する前に、ク
エリで列データの内容を確認しておくことをお勧めします。
SQL 文と RISQL 拡張機能 8-85
制約の追加
例
次のステートメントは、Distributor という列名を Distrib に変更します。
alter table product
alter column distributor rename as distrib
次のステートメントは、Market テーブルの State 列のデフォルト値 CA を指定しま
す。
alter table market
alter column state set default 'CA'
制約の追加
<add_constraint> は、参照元テーブルにフォーリン キー制約を追加します。
構文
次に 制約の追加指定の構文ダイアグラムを示します。
,
ADD
FOREIGN KEY
(
<column_name>
)
<constraint_name>
CONSTRAINT
<table_name>
REFERENCES
,
(
<primary_key_column>
INITIALLY
ON DELETE
CASCADE
)
IMMEDIATE
DEFERRED
NO ACTION
<constraint_name>
8-86 SQL Reference Guide
追加するフォーリン キー制約の名前を指定します。制約名はオ
プションです。制約名を指定する場合は、その前に
CONSTRAINT キーワードを入力し、既存の制約名以外を指定
します。制約名を指定しないと、デフォルトの制約名が割り当
てられます。制約名の詳細については、8-149 ページ「プライ
マリ キーとフォーリン キー制約名」を参照してください。
制約の追加
<column_name>
変更するテーブル内の列名を指定します。テーブルからは、少
なくとも 1 つの列を指定する必要があります。各列を NULL 値
不可と指定する必要があります。列名リストはかっこで囲み、
その前に FOREIGN KEY キーワードを入力してください。指定
した列のデータ型は、参照先テーブルのプライマリ キー列の
データ型と同じである必要があります。
SERIAL 列をフォーリン キーとして参照することはできませ
ん。
<table_name>
変更するテーブル内のフォーリン キー参照になるプライマリ
キーが含まれるテーブルを指定します。
<primary_key_
column>
参照先テーブルの列名を指定します。任意の数の列名を指定で
きますが、参照先テーブルのプライマリ キー列と一致する必要
があります。列名リストは、かっこで囲みます。
ON DELETE
制約の参照整合性チェック モードを定義します。この動作は、
フォーリン キーで参照されたテーブルから行を削除するときに
行われます。
NO ACTION キーワードは、参照先テーブルの行を削除すると
参照元テーブルの参照整合性が維持できなくなる場合に、行を
削除しないことを指定します。
CASCADE キーワードは、参照先テーブルの行を削除すると参
照元テーブルの参照整合性が維持できなくなる場合に、その行
を参照している参照元テーブルの行も削除することを指定しま
す。この動作は、アウトボード テーブルとその参照元テーブル
にも適用されます。
削除モードの動作を示す例については、8-171 ページ
「DELETE」および『Administrator's Guide』を参照してくださ
い。
INITIALLY
IMMEDIATE、
DEFERRED
新しい制約 ( フォーリン キー参照 ) の列値に対して参照整合性
チェックが実行されるかどうかを指定します。IMMEDIATE は
参照整合性を即時チェックすることを示し、DEFERRED は参
照整合性をチェックしないことを示します。デフォルトは
IMMEDIATE です。
ヒント : INITIALLY DEFERRED オプションは、参照整合性違反を検査しないた
め、参照整合性が検証されていることが確実な場合に限り使用してください。たと
えば、フォーリン キー参照のあるテーブルのシノニムを作成して、参照元テーブル
から作成したシノニムに新しいフォーリン キー制約を追加したとします。この場
合、元の基本テーブルの参照整合性が検証されていることはわかっているので、シ
ノニムの参照整合性が検証されていることは確実です。
SQL 文と RISQL 拡張機能 8-87
制約の追加
使用上の注意
1 つのテーブルには、256 までのフォーリン キーを設定できます。
すべてのフォーリン キー参照にユーザ定義制約名を付けることをお勧めします。複
数の列から成るフォーリン キーを参照するにはユーザ定義制約名を使用する必要が
あります。そうしないと、それらのフォーリン キーに STAR インデックスを作成で
きません。
ALTER TABLE ADD CONSTRAINT 文の実行が失敗した場合は、ALTER TABLE
RESET 文でリセットできますが、ALTER TABLE RESUME 文では再開できません。
ALTER TABLE ADD CONSTRAINT 文が失敗するのは、参照先テーブルのプライマ
リ キー列に、システムが生成した、またはユーザが定義した B-TREE インデックス
がない場合です。
新しい制約を追加することにより、変更されるテーブルが参照整合性に違反する
か、参照整合性がループする場合も、ALTER TABLE ADD CONSTRAINT 文は失敗
します。新しい制約を設定する列の既存の値は、参照先テーブルのプライマリ キー
にある必要があります。
すでに制約のあるテーブルから、それ自身に対する制約を追加することはできませ
ん。たとえば、table2 から table1 に対する制約がすでに存在する場合、table1 から
table2 に対する制約を追加することはできません。このようなテーブル設定を行う
と、参照整合性がループします。
フォーリン キー列の SERIAL 列を、SERIAL 値として参照することはできません。
SERIAL 列をフォーリン キーとして参照する場合は、フォーリン キー列を
INTEGER 列として指定する必要があります。シリアル (SERIAL) データ型の詳細に
ついては、2-21 ページを参照してください。
例
Orders テーブルのフォーリン キー参照を Promotion テーブルの Promokey 列に追加
するには、次の ALTER TABLE 文を実行します。
alter table orders
add foreign key(promokey) references promotion(promokey)
このステートメントを実行するには、Orders テーブルに Promokey 列が存在し、
Promokey 列が Promotion テーブルのプライマリ キーである必要があります。
Sales テーブルには、プライマリ キー列 Perkey、Promokey、Custkey があり、それ
ぞれ Period、Promotion、Customer テーブルを参照します。2 つの列からなるプラ
イマリ キーを持つ Product テーブルにフォーリン キー参照を追加するには、次の
ALTER TABLE 文を実行します。
8-88 SQL Reference Guide
制約の削除
alter table sales
add constraint product_fkc
foreign key(classkey, prodkey) references
product(classkey,
prodkey)
制約の削除
<drop_constraint> は、フォーリン キー制約の削除に使用します。
構文
次に 制約の削除指定の構文ダイアグラムを示します。
DROP CONSTRAINT
<constraint_name>
<constraint_name>
削除するフォーリン キー制約の名前を指定します。制約名の詳
細については、8-149 ページ「プライマリ キーとフォーリン
キー制約名」を参照してください。
使用上の注意
指定したフォーリン キーに STAR インデックス キーが設定されていると、ALTER
TABLE DROP CONSTRAINT 文が失敗します。インデックスは、あらかじめ削除し
ておく必要があります。変更するテーブルに STAR インデックスが設定されていて
も、削除するフォーリン キー以外のフォーリン キーで構成されている場合は正常
に実行されます。
プライマリ キー制約は削除できません。
例
次の例は、Sales テーブルから product_fkc 制約を削除します。
alter table sales drop constraint product_fkc
SQL 文と RISQL 拡張機能 8-89
制約の変更
制約の変更
<alter_constraint> は、基本テーブルのフォーリン キー参照をシノニムのフォーリン
キー参照に変更します。同様に、シノニムのフォーリン キー参照を基本テーブルの
フォーリン キー参照または基本テーブルのほかのシノニムのフォーリン キー参照
に変更します。
構文
次に 制約の変更指定の構文ダイアグラムを示します。
ALTER CONSTRAINT
REFERENCES
ON DELETE
<constraint_name>
<referenced_table_name>
CASCADE
NO ACTION
<constraint_name>
参照元テーブルの CREATE TABLE 文に指定した、変更する
フォーリン キー制約名を指定します。1 つの列からなるフォー
リン キー参照の場合は、列名も制約名の指定に使用できます。
フォーリン キー参照の制約名の詳細については、8-146 ページ
「フォーリン キー参照」を参照してください。
<referenced_table_
name>
8-90 SQL Reference Guide
CREATE TABLE 文で初期参照した基本テーブルから作成された
シノニム、または基本テーブル名自体を指定します。シノニム
を初期参照した場合は、基本テーブルまたは基本テーブルから
作成されたほかのシノニムを <referenced_table_name> に指定で
きます。
制約の変更
ON DELETE
制約の参照整合性チェックのモード、つまりフォーリン キーが
参照しているテーブルから行が削除されたときの動作を指定し
ます。
NO ACTION キーワードは、参照先テーブルの行を削除すると
参照元テーブルの参照整合性が維持できなくなる場合は、行を
削除しないことを指定します。
CASCADE キーワードは、参照先テーブルの行を削除すると参
照元テーブルの参照整合性が維持できなくなる場合に、その行
を参照している参照元テーブルの行も削除することを指定しま
す。この動作は、アウトボード テーブルとその参照元テーブル
にも適用されます。
使用上の注意
ALTER TABLE ALTER CONSTRAINT 文は、共通の参照先テーブルを持つ複数の参
照元テーブルを結合するクエリの性能を調整することができます。参照元テーブル
が基本テーブルの代わりにシノニムを参照する場合は、標準の STARjoin アルゴリ
ズムではなく、ハッシュ結合アルゴリズムまたは B-TREE 1-1 マッチ アルゴリズム
を使用することができます。
例
次の ALTER TABLE 文は、フォーリン キー参照を変更して Aroma データベースの
Sales テーブルを変更します。
alter table sales
alter constraint sales_date_fkc references period_syn1
CREATE TABLE 文で指定した Period テーブルを参照する代わりに、フォーリン
キー制約 period_fkc は、Period_Sny1 シノニムを参照するようになります。
sales_date_fkc は 1 つの列からなるフォーリン キー参照であるため、列名 Perkey も
制約名の指定に使用することができます。
alter table sales
alter constraint perkey references period_syn1
次のステートメントは、参照先テーブルを元の基本テーブルに戻します。
alter table sales
alter constraint sales_date_fkc references period
SQL 文と RISQL 拡張機能 8-91
制約の変更
次のステートメントは、参照先テーブルを Period テーブルのほかのシノニムに変更
します。
alter table sales
alter constraint sales_date_fkc references period_syn2
8-92 SQL Reference Guide
ALTER USER
ALTER USER
ALTER USER 文は、ユーザの優先順位を変更したり、ユーザにコメントを割り当て
します。
アクセス権
ユーザを変更するユーザは、次の中で少なくとも 1 つの条件を満たしている必要が
あります。
■
■
DBA システム ロールのメンバーであること
USER_MANAGEMENT タスク権限を持っていること
構文
次に ALTER USER 文の構文ダイアグラムを示します。
ALTER USER
<db_username>
SET PRIORITY
COMMENT
<integer>
'<character_string>'
NULL
<db_username> 有効なデータベース ユーザ名を指定します。
SET PRIORITY そのユーザが起動したすべてのセッションについて、優先順位を指
<integer>
定します。0 ∼ 100 の整数で指定してください。最優先の順位は 0
です。
COMMENT
ユーザ名を説明するコメントを割り当てます。コメントは、
RBW_USERAUTH システム テーブルに格納されます。256 バイト
まで入力できます。データベースはこのコメント テキストを無視し
ます。
NULL を指定すると、コメント文字列が NULL に置き換えられます。
SQL 文と RISQL 拡張機能 8-93
ALTER VIEW
使用上の注意
ユーザの優先順位は、0 ∼ 100 (0 が最優先 ) の整数で指定します。優先順位の値は、
異なるユーザが起動したセッションの相対的な重要度を示すものです。優先順位の
高いユーザの実行したクエリは、優先順位の低いユーザのクエリより優先的に CPU
を使用できます。ユーザの優先順位は、CPU 以外のシステム リソースの使用や、
テーブル ロックには影響しません。
データベース管理者は、GRANT CONNECT 文によってユーザをデータベースに追
加するときに、ユーザ優先順位を設定することができます。ユーザの優先順位を指
定していない場合、デフォルトの優先順位は 50 になります。
UNIX
ユーザ優先順位をサポートするには、UNIX の renice コマンドを
実行できるプラットフォームを使用してください。ADMIN
RENICE_COMMAND 構成パラメータに renice スクリプトのフル
パス名を指定してください。
Windows NT
ユーザ優先順位を指定する整数は、対応する優先レベル (1 ∼ 36)
にマッピングされます。
ALTER VIEW
ALTER VIEW 文は、ビューまたはビューの列にコメントを付けます。ビューのコメ
ントは、RBW_VIEWS および RBW_TABLES システム テーブルに格納されます。
ビューの列のコメントは、RBW_COLUMNS システム テーブルに格納されます。
ALTER VIEW 文を使用して、事前計算ビューの保守タイプと有効性を変更すること
もできます。
アクセス権
ビューを変更するユーザは、次の中で少なくとも 1 つの条件を満たしている必要が
あります。
■
■
■
■
DBA システム ロールのメンバーであること
明示的に付与されるかユーザが作成したロールのメンバーであることによ
り、ALTER_ANY 権限を持っていること
RESOURCE システム ロールのメンバーで、かつビューの作成者であるこ
と
ビューの作成者であり、明示的に付与されるかユーザが作成したロールの
メンバーであることにより、ALTER_OWN 権限を持っていること
8-94 SQL Reference Guide
ALTER VIEW
構文
次に ALTER VIEW 文の構文ダイアグラムを示します。
ALTER VIEW <view_name>
COMMENT
ALTER COLUMN <col_name>
SET
VALID
INVALID
SET MAINTENANCE
ON
REBUILD
OFF
<view_name>
変更するビューの名前を指定します。
ALTER COLUMN ビューの変更する列の名前を指定します。
<col_name>
SQL 文と RISQL 拡張機能 8-95
CHECK INDEX
SET VALID/
INVALID
事前計算ビューを有効または無効とマークし、RBW_VIEWS
テーブルを更新します。このステートメントにはデフォルトは
ありません。
SET
MAINTENANCE
各事前計算ビューについて集約保守を ON、OFF または
REBUILD に設定します。RBW_VIEWS テーブルの
MAINTENANCE 列には、この設定の値がビューごとに示され
ます。デフォルトの設定は ON です。
特定のビューについて MAINTENANCE を ON に設定した場合、
データベース サーバはそのビューで差分保守を実行しようとし
ますが、差分保守ではなく REBUILD の保守を実行することが
あります。設定が REBUILD の場合、REBUILD の保守だけが実
行されます。REBUILD の保守は、詳細テーブルまたはその他の
( グラニュラリティの高い ) 集約を使用して実行されます。
特定の事前計算ビューを保守するには、
PRECOMPUTED_VIEW_MAINTENANCE オプションを ON に設
定し、そのビューの MAINTENANCE を ON または REBUILD に
設定する必要があります。
COMMENT
ビューまたはビューの列を説明するコメントを割り当てます。
ビューのコメントは、RBW_VIEWS および RBW_TABLES シ
ステム テーブルに格納されます。列のコメントは、
RBW_COLUMNS システム テーブルに格納され、256 バイトま
で入力できます。コメントのテキストは、データベース サーバ
が使用するものではありません。
次にコメント文字列の構文ダイアグラムを示します。NULL を指定すると、コメン
ト文字列が NULL に置き換えられます。
COMMENT
'<character_string>'
NULL
CHECK INDEX
CHECK INDEX 文は、インデックスの破損を調べ、インデックスの構成情報および
サイズ情報を表示します。CHECK INDEX 文は、どの種類のインデックスにも使用
できます。
8-96 SQL Reference Guide
CHECK INDEX
構成情報には次の内容が含まれます。
■
■
■
■
インデックス キーのサイズと種類
インデックス ブロックごとのエントリの最大数
インデックスの格納先セグメントの数
インデックス (STAR インデックスのみ ) 内で参照されている各テーブルの
MAXROWS PER SEGMENT 値
サイズ情報には次の内容が含まれます。
■
■
インデックス エントリの数
インデックスの各セグメントで、リーフ ノードおよびインナー ノードと
して使用されているインデックス ブロックの数
アクセス権
CHECK INDEX 文を実行するユーザは、DBA システム ロールのメンバーである必要
があります。
構文
次に CHECK INDEX 文の構文ダイアグラムを示します。
CHECK INDEX
<index_name>
SEGMENT
<segment_name>
DIRECTORY '<directory_name>'
VERBOSE
VALIDATE
NORMAL
FULL
DESCRIBE
<index_name>
チェックするインデックスの名前を指定します。
SEGMENT
<segment_name>
CHECK INDEX を実行する名前付きセグメントを指定します。
指定できるセグメントは 1 つだけです。<segment_name> を指定
した場合、指定したセグメントだけがチェックされ、そのセグ
メントに関する結果だけが表示されます。
SQL 文と RISQL 拡張機能 8-97
CHECK INDEX
DIRECTORY
<directory_name>
CHECK INDEX 操作からの詳細情報ファイルの書き込み先ディ
レクトリを指定します。セグメントごとに個別のファイルが作
成されます。ファイル名にはセグメント ID、プロセス ID、タイ
ムスタンプが含まれます。
rbw.config ファイル内で CHECK_REPORT_FILE_PERMISSIONS
オプションを使って別のファイル アクセス権を設定しない限
り、これらのファイルの読み書きを実行できるのは redbrick
ユーザのみです。オプションの値は次のとおりです。
■
■
■
SERVER_OWNER : redbrick ユーザに読み書き権を与
えます。
これはデフォルトのオプションです。
SERVER_GROUP : グループに読み取り専用権を与え
ます。
この値は UNIX システムでしか使用できません。
ALL : すべてのユーザに読み取り専用許可を与えます。
指定したディレクトリのあるディスクが書き込み禁止に設定さ
れている場合、または存在しない場合は、エラーが返されます。
CHECK INDEX 出力ファイルの解釈については、
『Administrator's
Guide』を参照してください。
VERBOSE
出力情報を verbose フォーマットに指定します。このフォーマッ
トでは、CHECK INDEX が実行する各関数の簡単な説明が含ま
れます。
VALIDATE
FULL を選択すると、CHECK INDEX はインデックスをトラバー
スし、各インデックス キーに対して、インデックスが参照する
テーブルの行を取り出します。行を取り出した後、CHECK
INDEX は行内のキーとインデックス内のキーを比較し、合致し
ていることを確認します。また、各インデックス エントリが一
意の行を指し、参照先テーブルの各行がそれぞれ 1 つのイン
デックス エントリによって指し示されていることを確認しま
す。参照先テーブルの行が取り出され、インデックス全体がト
ラバースされるため、この操作には非常に時間がかかることが
あります。
セグメント名を指定した場合は、参照先テーブルの各行がそれ
ぞれ 1 つのインデックス エントリによってポイントされている
ことは確認されませんが、上記のその他の検証はすべて行われ
ます。
デフォルトの NORMAL は、行ごとの検証以外の検証を行います。
8-98 SQL Reference Guide
CHECK TABLE
DESCRIBE
構成情報をすばやく表示して、インデックスの検証やサイズ情
報の計算を行わずに終了します。CHECK INDEX で大きなイン
デックスを検証すると非常に時間がかかるため、構成情報だけ
を知りたい場合は DESCRIBE を指定してください。
例
次のステートメントは、Market テーブルに CHECK INDEX 操作を実行し、結果を
/docs/idx_results ディレクトリに格納します。
check index market_pk_idx directory '/docs/idx_results'
INFORMATION
Index: 1 Segment: 2 is ok
Index validation succeeded
この例では、より詳細な結果が /docs/idx_results ディレクトリに格納されます。
CHECK TABLE
CHECK TABLE 文は、テーブル格納データ構造およびテーブルの行カウントの破損
を調べ、オプションで修復も行います。CHECK TABLE は参照整合性をチェックし
ません。また、列が NOT NULL 句で定義されている場合は NULL 値をチェックしま
せん。
CHECK TABLE 文は、出力結果を複数の行で返します。解析対象テーブルのスキー
マに関係なく、行は単一 CHAR(1024) 列として定義されます。CHECK TABLE を実
行すると、CHECK TABLE 操作から出力された詳細情報を含む一連のテキスト ファ
イルも生成されます。これらのテキスト ファイルは、ユーザが指定したディレクト
リ内に作成されます。
アクセス権
CHECK TABLE 文を実行するユーザは、DBA システム ロールのメンバーである必要
があります。
SQL 文と RISQL 拡張機能 8-99
CHECK TABLE
構文
次に CHECK TABLE 文の構文ダイアグラムを示します。
CHECK TABLE
<table_name>
SEGMENT
<segment_name>
DIRECTORY ‘<directory_name>’
VERBOSE
<table_name>
FIX
チェックするテーブルの名前を指定します。基本テーブルを指定
してください。シノニム、ビュー、テンポラリ テーブル、システ
ム テーブルはチェックできません。
SEGMENT
CHECK TABLE を実行する名前付きセグメントを指定します。指
<segment_name> 定できるセグメントは 1 つだけです。<segment_name> を指定した
場合、テーブル内の指定されたセグメントでの検証だけが報告さ
れます。大きなテーブル内の特定のセグメントだけを検証する必
要がある場合にこのオプションを使うと、非常に時間が節約でき
ます。
DIRECTORY
CHECK TABLE 操作から出力される詳細情報ファイルを書き込む
<directory_name> ディレクトリを指定します。セグメントごとに個別のファイルが
作成されます。ファイル名には、テーブル ID、セグメント ID、
プロセス ID、タイムスタンプが含まれます。
rbw.config ファイル内で CHECK_REPORT_FILE_PERMISSIONS オ
プションを使って別のファイル アクセス権を設定しない限り、こ
れらのファイルの読み書きを実行できるのは redbrick ユーザのみ
です。オプションの値は次のとおりです。
■
■
■
SERVER_OWNER : redbrick ユーザに読み書き権を与え
ます。
これはデフォルトのオプションです。
SERVER_GROUP : グループに読み取り専用権を与えま
す。
この値は UNIX システムでしか使用できません。
ALL : すべてのユーザに読み取り専用許可を与えます。
指定したディレクトリのあるディスクが書き込み禁止に設定され
ている場合、または存在しない場合は、エラーが返されます。
8-100 SQL Reference Guide
CHECK TABLE
VERBOSE
出力情報を、ユーザが指定したディレクトリ内に作成されるテキ
スト ファイルに verbose フォーマットでレポートするよう指定し
ます。VERBOSE オプションは、CHECK TABLE が実行する各関
数の簡単な説明とセグメント統計を出力します。
これらのテキスト ファイルは、VARCHAR FILLFACTOR 値の効力
の判断や、チェック操作中のエラーのトラブルシュートに利用で
きます。これらのテキスト ファイルの解釈については、
『Administrator's Guide』を参照してください。
FIX
CHECK TABLE で見つかった問題を修復することを指定します。
修復が行われた場合、ALTER SEGMENT 文を VERIFY オプション
とともに実行し、セグメントが修復されていることを確認してか
ら次の CHECK TABLE ... FIX 文を実行する必要があります。FIX
オプションを指定すると、CHECK TABLE は逐次実行されます。
警告 : CHECK TABLE 操作を FIX モードで実行する場合は、実行する前に、デー
タベースの最新のバックアップがあることを確認し、IBM テクニカルサポートに連
絡してください。
例
このステートメントは、Market テーブルに CHECK TABLE 操作を実行し、結果を
/docs/tbl_results ディレクトリに格納します。
check table market directory '/docs/tbl_results'
INFORMATION
Table: 1 Segment: 1 is ok
No inconsistencies were detected.
この例では、より詳細な結果が /docs/tbl_results ディレクトリに格納されます。
SQL 文と RISQL 拡張機能
8-101
CREATE HIERARCHY
CREATE HIERARCHY
CREATE HIERARCHY 文は、1 つのテーブルまたは複数のテーブルにある列の間に、
1 つまたは複数の関数従属性を指定します。関数従属性は、2 つの列間に存在する
多対 1 の関係です。階層構造指定は、Vista クエリ リライト システムが集約クエリ
を書き換えるために利用する事前計算ビューの判定に使用されます。
階層構造は注意して指定してください。多対 1 の関係を満たさない値を持つ列に階
層構造を指定すると、書き換えられたクエリが警告メッセージなしに不正な結果を
返すことがあります。管理ツールを使用して階層構造を作成する場合を除き、階層
構造を指定するときに、ウェアハウス サーバによる階層構造の検証は行われませ
ん。また、データベースが変更されたために有効な階層構造が無効になったときで
もユーザに通知されません。したがって、管理者が階層構造を指定する前に階層構
造の妥当性を検証し、無効になった階層構造を削除する必要があります。
階層構造の使用の詳細については、
『IBM Red Brick Vista User’s Guide』を参照してく
ださい。
アクセス権
階層構造を作成するユーザは、次の中で少なくとも 1 つの条件を満たしている必要
があります。
■
■
DBA システム ロールか、RESOURCE システム ロールのメンバーであるこ
と
明示的に付与されるかユーザが作成したロールのメンバーであることによ
り、CREATE_ANY 権限を持っていること
8-102 SQL Reference Guide
CREATE HIERARCHY
構文
次に CREATE HIERARCHY 文の構文ダイアグラムを示します。
CREATE HIERARCHY
(
<hierarchy_name>
,
)
<from_to_definition>
ON
<constraint_name>
<hierarchy_name>
1 つまたは複数の関数従属性を参照することができる階層構
造の名称を指定します。どの階層構造名も、一意の名前で
ある必要があります。
<from_to_definition>
関数従属性が設定されているテーブルまたは列を指定しま
す。この関係は、1 つの同じテーブルの列間でも 2 つのテー
ブルの列間でもかまいません。最初の列 (from 列 ) はテーブ
ルの作成時に NOT NULL と指定されている必要があります。
そうしないと、エラーメッセージが表示されます。
次に <from_to_definition> 句の構文ダイアグラムを示します。
FROM
<table_name (column_name) >
TO
<table_name (column_name)> >
SQL 文と RISQL 拡張機能
8-103
CREATE HIERARCHY
ON <constraint_name> 従属性が指定されたフォーリン キー制約を指定します。ON
句で指定するフォーリン キー制約名は CREATE TABLE 文で
指定したフォーリン キー制約名と同じである必要がありま
す。
指定したテーブル間に 1 つのフォーリン キー / プライマリ
キー関係がある場合は、ON 句はオプションです。ただし、
フォーリン キー / プライマリ キー関係が複数存在する場合
は、ON 句は必須です。1 つのテーブルの列間にフォーリン
キー / プライマリ キー関係がある場合は、ON 句は指定でき
ません。
2 つのテーブルの列間の関係は、フォーリン キー / プライマ
リ キー関係に基づいている必要があります。この場合、階
層構造は、最初のテーブルの列と 2 番めのテーブルを参照す
る最初のテーブルのフォーリン キー列の間の関数従属性を
表します。この関数従属性から、参照先テーブルのすべて
の列のロールアップを暗黙的に指定したことになります。
1 つの階層構造名で複数の従属性を設定することができま
す。ただし、各関係には、個別の <from_to_definition> が必
要です。
ヒント : ほかの列にロールアップする複数の対の列を指定することはできません。
階層構造には、1 対 1 で列を指定する必要があります。
例
次の例は、1 つのテーブルの列間の関数従属性を指定します。
create hierarchy district_region (
from market (district) to market (region))
次の例は、2 つのテーブルの列間の関数従属性を指定します。
create hierarchy store_market (
from store (store_name) to market (district)
on store_fkc)
次の例は、1 つのテーブルまたは 2 つのテーブルの列間に複数の関数従属性を使用
した階層構造を指定します。
create hierarchy store_market_relationship (
from store (store_type) to market (district) on store_fkc,
from store (zip) to market (region) on store_fkc,
from store (store_name) to store (city))
8-104 SQL Reference Guide
CREATE INDEX
次のテーブルの対の値を比較してください。Period テーブルに 2 番めの値集合が含
まれる場合は、各年に対して第 1 四半期の値、第 2 四半期の値などが一意であるた
め、Qtr 列から Year 列までの階層構造は有効です。Period テーブルに最初の値集合
が使用される場合は、Qtr 列が 1998、1999 年に対して同じ第 1 四半期の値 (Q1) を使
用しているため、階層構造は無効です。
無効な関係
有効な関係
Qtr 列
Year 列
Qtr 列
Year 列
Q1
1998
Q1_98
1998
Q2
1998
Q2_98
1998
Q3
1998
Q3_98
1998
Q4
1998
Q4_98
1998
Q1
1999
Q1_99
1999
...
...
...
...
CREATE INDEX
各テーブルに自動的に作成されるプライマリ キー インデックス以外に、CREATE
INDEX 文で任意の数のインデックスを作成することができます。
インデックスの作成には次の制限が適用されます。
■
■
■
■
同じテーブルのインデックスであれば 1 つの CREATE INDEX 文で複数のイ
ンデックスが作成できます。
STAR、B-TREE、TARGET の各インデックスは、テーブルが空であって
も、データが格納されていても作成することができます。実行中のクエリ
が使用していないインデックスは、削除できます。
テンポラリ テーブルには、STAR インデックスを作成できません。
SERIAL 列にインデックスを作成することをお勧めします。これはシリア
ル番号が位置の番号でもテーブルの行の位置を示すものでもないためで
す。シリアル番号による行へのアクセスには、インデックス、またはテー
ブルのスキャンが必要です。
SQL 文と RISQL 拡張機能
8-105
CREATE INDEX
アクセス権
テーブルのインデックスを作成するユーザは、次の中で少なくとも 1 つの条件を満
たしている必要があります。
■
■
■
■
DBA システム ロールのメンバーであること
明示的に付与されるかユーザが作成したロールのメンバーであることによ
り、CREATE_ANY 権限を持っていること
RESOURCE システム ロールのメンバーで、かつテーブルの作成者である
か、そのテーブルに対する SELECT 特権を持っていること
CREATE_OWN 特権を持っていて、テーブルの作成者であるか、そのテー
ブルに対する SELECT 特権を持っていること
構文
次に CREATE INDEX 文の構文ダイアグラムを示します。
,
INDEX
CREATE
<index_specifier>
STAR
TARGET
ON ERROR
STAR
CONTINUE
IMMEDIATE
ABORT
DEFERRED
指定したフォーリン キーの STAR インデックスを作成します。1 つ
のテーブルに複数の STAR インデックスがある場合は、フォーリン
キーのサブセット、順序またはその両方がインデックスごとに異
なっている必要があります。
MAXROWS PER SEGMENT の値が指定されていないほかのテーブ
ルのプライマリ キーをフォーリン キーが参照している場合、
CREATE STAR INDEX 文の実行は失敗します。詳細については、
8-137 ページ「CREATE TABLE」を参照してください。
テンポラリ テーブルには、STAR インデックスを作成できません。
8-106 SQL Reference Guide
CREATE INDEX
B-TREE
インデックスとして STAR、TARGET のどちらも指定されていない
場合は、B-TREE がデフォルトです。
INDEX キーワードの前にインデックスのタイプを指定しないと、
B-TREE インデックスがテーブルに作成されます。このインデック
スを使うと、比較述部による検索の処理時間が短縮されます。BTREE インデックスは、すべてのデータ型の列で作成できます。
テーブルの作成時には、そのテーブルのプライマリ キーについて、
デフォルトの B-TREE インデックスが自動的に作成されます。
CREATE TABLE 文のセグメント指定構文では、デフォルト B-TREE
インデックスをプライマリ キー インデックスと呼んでいます。
テーブルのインデックスの選択の詳細については、『Administrator's
Guide』を参照してください。
TARGET
テーブルの指定した列について、TARGET インデックスを作成し
ます。
1 つのテーブルに複数の TARGET インデックスを作成することはで
きますが、単一の一意でない列に 1 つずつ作成してください。複数
の列から構成される TARGET インデックスは作成できません。
TARGET インデックスの順序で、テーブルをアンロードすること
はできません。UNLOAD 操作には、B-TREE インデックスか STAR
インデックスを使用してください。B-TREE インデックスについて
は、8-106 ページを参照してください。
選択性の低い複数の列を制約する検索は、TARGET インデックス
を使用すると性能が向上します。一般に、非常に大きなテーブルで
列のドメイン ( 可能値の集合 ) が小さければ、選択性が低くなりま
す。たとえば、Employees テーブルの Gender 列のドメインには、
Male と Female の 2 つの値しかありません。この列の制約は選択性
が低くなり、非常に多くの行が抽出されます。
ドメインが大きくても、選択性が低くなる場合があります。たとえ
ば、同じ Employees テーブルの Age 列は、Gender 列より大きなド
メインですが、年齢を制約した検索も選択性が低い場合がありま
す。特に、ドメイン内のデータの分布に偏りがある場合や、データ
の多くが含まれる値に制約して検索する場合にこのことがいえま
す。
TARGET インデックスは、TARGETjoin 処理を有効にすることもで
きます。TARGETjoin 操作については、『Administrator's Guide』およ
び『Query Performance Guide』を参照してください。
SQL 文と RISQL 拡張機能
8-107
CREATE INDEX
<index_specifier> インデックス名、作成するインデックスの対象となるテーブル、イ
ンデックス キーの列名、セグメントを指定します。テンポラリ
テーブルには、フォーリン キー制約とセグメント定義はできませ
ん。<index_specifier> の構文については、8-109 ページ「インデッ
クス指定」を参照してください。
ON ERROR ABORT を指定した場合は、作成できないインデックス
が 1 つでもあると、すべてのインデックス作成が中止されます。
ERROR
ON ERROR CONTINUE を指定するか ERROR 句を省略すると、作
成できないインデックスがあっても、ほかのインデックス作成は続
行されます。
この句は、1 つのステートメントで複数のインデックスを作成する
場合に意味があります。省略した場合のデフォルト動作は
CONTINUE です。
IMMEDIATE
ステートメント実行時にインデックスを作成および構成します。
DEFERRED
インデックス構造を作成し、RBW_INDEXES システム テーブルの
STATE 列に DEFERRED というエントリを作成します。この時点で
は、インデックスにデータは登録されません。TMU の REORG 操
作を使ってデータを登録しない限り、このインデックスは使用でき
ません。
CREATE INDEX...DEFERRED 操作は、データからインデックスを
作成したり、ほかのインデックスからデータを導出するという時間
のかかるフェーズをスキップします。インデックスの作成を必要と
しないすべての処理が実行されます。これには、特定のセグメント
のテーブルへの関連付けや各種の意味妥当性検査が含まれます。通
常、CREATE INDEX...DEFERRED 操作の後で、データベース サー
バより効率的にインデックスを作成できる TMU の並列再編成操作
が実行されます。
DEFERRED 状態のインデックスは空であるため、インデックスの内容を読み取っ
たり書き込んだりするどの機能からもインデックスを検索できません。次の機能が
これに該当します。
■
■
■
クエリ
挿入、更新、削除
ロード、アンロード
遅延作成されたインデックスは、コンパイラからも見ることはできません。そのた
め、遅延作成されたインデックスに対するクエリの実行プランは生成されません。
8-108 SQL Reference Guide
インデックス指定
インデックス構造に対してのみ操作を加える関数からは、遅延作成された状態にあ
るインデックスを見ることができます。通常は、これらの関数は遅延作成されたイ
ンデックスと完全に作成されたインデックスとを区別することはできません。次の
関数は遅延作成されたインデックスを見ることができます。
■
■
■
■
■
■
DROP INDEX : インデックスを削除することができます。
ALTER INDEX : すべての操作が可能です。
DROP TABLE : DEFERRED インデックスを含め、テーブル内のすべての
インデックスを削除します。
ALTER TABLE DROP COLUMN : 指定された列が遅延作成されたインデッ
クスの構成要素である場合、この操作を実行することはできません。
CREATE INDEX : 同じ名前のインデックスや同じ種類のインデックスは、
同じ列に作成することができません。
ALTER SEGMENT : 遅延作成されたインデックス以外のインデックスに実
行可能なすべての操作は、遅延作成されたインデックスにも実行可能で
す。
例
この CREATE INDEX 文は、Market テーブルを対象とした 2 つのインデックスを並
列に作成し、その 1 つをユーザが作成したセグメントに格納します。最初のイン
デックス作成中にエラーが発生すると、どちらのインデックスも作成されません。
create index mkt_city_idx
on market (city)
in mkt_idx_seg,
index mkt_district_idx
on market (district)
on error abort
次のステートメントは、Car_Model テーブルの Color 列について、デフォルト ドメ
インの TARGET インデックスを作成します。
create target index tgt_idx1
on car_model (color)
in sgmt_1
インデックス指定
<index_specifier> は、インデックス名、作成するインデックスの対象となるテーブ
ル、インデックス キーの列名、セグメント情報を指定します。
SQL 文と RISQL 拡張機能
8-109
インデックス指定
構文
次に CREATE INDEX 文の構文ダイアグラムと、インデックス指定構文の参照ポイ
ントを示します。
,
INDEX
CREATE
<index_specifier>
STAR
TARGET
ON ERROR
CONTINUE
IMMEDIATE
ABORT
DEFERRED
次にインデックス指定の構文ダイアグラムを示します。
,
<index_name>
ON
<table_name>
(
<column_name>
<fkey_constraint_name>
IN
<segment_specification>
WITH FILLFACTOR
DOMAIN
<n>
SMALL
SIZE
MEDIUM
LARGE
8-110
SQL Reference Guide
)
インデックス指定
<index_name>
インデックス名を指定します。インデックス名はデータベー
ス内で一意である必要があります。
<table_name>
作成するインデックスの対象となるテーブルの名前を指定し
ます。テンポラリ テーブル名は、TARGET インデックスま
たは B-TREE インデックスを作成するときには指定できます
が、STAR インデックスを作成するときには指定できませ
ん。
STAR インデックスのフォーリン キーの参照先テーブルに
は、CREATE TABLE 文で MAXROWS PER SEGMENT の値を
指定する必要があります。
<column_name>
TARGET インデックスと B-TREE インデックスにインデック
ス キーを指定します。
■
■
B-TREE インデックスに複数の列を指定する場合
は、すべての列を CREATE TABLE 文で NOT NULL
と指定する必要があります。
TARGET インデックスでは、重複可能な列を 1 つだ
け指定できます。
<column_name,
STAR インデックスのインデックス キーを指定します。STAR
fkey_constraint_name> インデックス キーは複数のフォーリン キーで構成され、そ
の指定方法は 2 種類あります。
■
■
列名による指定。各列名は CREATE TABLE 文で指
定した特定の単一列フォーリン キー参照を識別す
る必要があります。
フォーリン キー制約名による指定。フォーリン
キー制約名は、1 つ以上の列からなるフォーリン
キーを識別できます。制約名は CREATE TABLE 文
で指定します。詳細については、8-149 ページ「プ
ライマリ キーとフォーリン キー制約名」を参照し
てください。
<segment_specification> インデックス セグメント名と、各インデックス セグメント
に対する値の範囲を指定します。<segment_specification> の
構文については、8-118 を参照してください。
WITH FILLFACTOR
詳細については、8-124 を参照してください。
DOMAIN
詳細については、8-125 を参照してください。
インデックス キーは、列名と制約名を組み合わせて指定できますが、次の規則に
従ってフォーマットを統一することをお勧めします。
SQL 文と RISQL 拡張機能
8-111
インデックス指定
■
■
■
フォーリン キーが単一列プライマリ キーを持つテーブルを参照している
場合は、フォーリン キー列の名前だけでインデックス キー内の列を定義
できます。ただし、フォーリン キーが複数列プライマリ キーを持つテー
ブルを参照している場合は、一連の個別列名ではなく、列集合のフォーリ
ン キー制約名を指定する必要があります。
CREATE STAR INDEX 文では、ユーザ定義のフォーリン キー制約名だけを
使用できます。
CREATE STAR INDEX 文に指定した名前は、まず制約名とみなされます。
これと一致する制約名が存在する場合は、その制約名が示すフォーリン
キーがインデックス キーになります。存在しなければ、最初に指定した名
前が列名とみなされます。一致する名前がない場合は CREATE STAR
INDEX 文の実行が失敗します。
フォーリン キーとは、NOT NULL と定義された列で、CREATE TABLE 文の
FOREIGN KEY REFERENCES 句で指定された列のことです。シンプル スター ス
キーマを形成するのでなければ、フォーリン キーの任意の部分を任意の順序で
STAR インデックス キーに使用することができます。詳細は、8-177 ページを参照
してください。インデックス キーの順序は、フォーリン キーを指定した順番にな
ります。最初の名前が先頭のキー列、2 番めが次のキー列というようになります。
8-112
SQL Reference Guide
インデックス指定
例 - STAR インデックスの作成
次のような Sales テーブルを作成したとします。Perkey、Classkey、Prodkey、
Storekey、Promokey の各プライマリ キー列にデフォルトの B-TREE インデックス
が作成されます。
create table sales (
perkey integer not null,
classkey integer not null,
prodkey integer not null,
storekey integer not null,
promokey integer not null,
quantity integer,
dollars dec(7,2),
constraint sales_pkc primary key (perkey, classkey,
prodkey, storekey, promokey),
constraint sales_date_fkc foreign key (perkey) references
period (perkey),
constraint sales_product_fkc foreign key
(classkey,prodkey)
references product (classkey, prodkey),
constraint sales_store_fkc foreign key (storekey)
references store (storekey),
constraint sales_promo_fkc foreign key (promokey)
references promotion (promokey))
data in (daily_data1, daily_data2)
segment by values of (perkey)
ranges (min:415, 415:max)
maxsegments 2
maxrows per segment 50000
STAR インデックスはどのような順序でも作成可能で、またフォーリン キーのサブ
セットにも作成できます。シンプル スター スキーマを形成するには、プライマリ
キーを構成するすべてのフォーリン キー列に STAR インデックスを作成します。た
だしこの場合、デフォルトの B-TREE インデックスが STAR インデックスと重複す
ることになり、データのロードと更新により多くの格納領域と処理時間が必要にな
ります。このため、デフォルトの B-TREE インデックスを削除することをお勧めし
ます。B-TREE インデックスの削除は、STAR インデックスの作成前でも作成後で
もかまいません。
次の CREATE INDEX 文は、Perkey 列および Promokey 列に STAR インデックスを作
成し、これらの列に制約をかけて検索する頻度が最も高いクエリを効率化します。
create star index time_sales_ix
on sales (sales_date_fkc, sales_promo_fkc)
in (sales_seg_ix1, sales_seg_ix2)
...
SQL 文と RISQL 拡張機能
8-113
セグメント定義
この場合は、フォーリン キーが制約名 sales_date_fkc と sales_promo_fkc で特定され
ていますが、参照先テーブルが 1 つの列からなるプライマリ キーであるため、列名
を指定することも可能です。
create star index time_sales_ix
on sales (perkey, promokey)
in (sales_seg_ix1, sales_seg_ix2)
...
次の CREATE INDEX 文は、Classkey 列、Prodkey 列、および Promokey 列にイン
デックスを作成し、これらの列に制約をかけて検索する頻度が最も高いクエリを効
率化します。
create star index prod_per_sales_ix
on sales (sales_product_fkc, promokey)
in (sales_seg_ix3, sales_seg_ix4)
segment by references of (sales_product_fkc)
ranges (...)
この場合、フォーリン キーは、複数の列からなるプライマリ キーを持つテーブル
(Product テーブル ) を参照するため、制約名 sales_product_fkc でインデックス キー
を指定する必要があります。この場合は、インデックス セグメントも制約名で特定
されます。制約名の詳細については、8-149 ページ「プライマリ キーとフォーリン
キー制約名」を参照してください。
セグメント定義
次にセグメント指定の構文ダイアグラムを示します。
<segment_name>
IN
,
(
<segment_name>
SEGMENT LIKE DATA
)
SEGMENT LOCAL
SEGMENT LIKE REFERENCED TABLE
<segment_range_spec>
8-114
SQL Reference Guide
セグメント定義
<segment_name>
インデックスを格納するセグメントの名前を指定します。セグ
メント名を指定しないと、インデックスはデフォルト セグメン
トに格納されます。指定したセグメントを、ほかのインデック
スやテーブルで使用することはできません。
1 つのユーザ定義セグメントまたはデフォルト セグメントを指
定した後に、ALTER SEGMENT 文を使ってインデックスにセグ
メントを追加することができます。
テンポラリ テーブルには、セグメント名を 1 つしか指定できな
いため、セグメントの範囲指定は適用されません。
SEGMENT LIKE
DATA
B-TREE インデックス、STAR インデックス、または TARGET イ
ンデックスのセグメント範囲指定が、テーブル データのセグメ
ント範囲指定と同じであることを指定します。このオプション
が有効なのは、次の場合のみです。
■
■
■
■
ハッシュではなく、値によってデータがセグメント化
されている。
インデックスの先頭列が、データのセグメント化の基
準となる列と同じである。
インデックスとデータについて、同数のセグメントが
指定されている。
STAR インデックスでは、テーブルのセグメント範囲の
すべてについて、先頭の参照先テーブルに少なくとも
1 つの列が存在する必要があります。
このオプションは、インデックスの作成時に参照先テーブルの
セグメント区分を静的に反映します。セグメントの切り離しや
割り当てによってテーブルのセグメント区分が変更された場合、
その変更はインデックスのセグメント区分に自動的には反映さ
れません。参照先テーブルを変更する場合は、インデックスも
明示的に変更してください。
STAR インデックスの値は列の値ではなく、参照先テーブルの行
データ ID です。行を削除および挿入するとき、行データ ID は
再使用されます。このため、インデックスのセグメント区分は
テーブルと異なるものになる場合があります。STAR インデック
スのセグメント化については、『Administrator's Guide』を参照し
てください。
SQL 文と RISQL 拡張機能
8-115
セグメント定義
SEGMENT
LOCAL
テーブルのセグメント化基準列がインデックスの先頭列ではな
く、またはインデックス内にない場合でも、B-TREE または
TARGET インデックスのセグメント範囲がテーブル データのセ
グメント範囲と同じであることを指定します。テーブル セグメ
ントをクリアまたは削除すると、ローカル インデックス セグメ
ントは自動的にクリアされます。
このオプションは、次の条件が満たされた場合だけ有効です。
■
■
■
ハッシュではなく、値によってデータがセグメント化
されている。
インデックスとデータについて、同数のセグメントが
指定されている。
ローカル インデックスが定義されている列が一意では
ない。
このオプションは、STAR インデックスには使用できません。
ローカル インデックスは時間ごとに変化するデータの
TARGETjoin 処理を行う場合に最もよく使用されます。ローカル
インデックスを使用して TARGETjoin 処理の性能を向上させる
ことができますが、パラメータを調整しないとほかのクエリ処
理に影響する可能性があります。詳細については、『Query
Performance Guide』を参照してください。
SEGMENT LIKE
REFERENCED
TABLE
STAR インデックスのセグメント範囲指定が、参照先テーブルの
セグメント範囲指定と同じであることを指定します。このイン
デックス セグメントと参照先テーブルのインデックス セグメン
トが 1 対 1 で対応することを定義するものです。このため、参
照先テーブルのセグメント化に使用する範囲の値は、STAR イン
デックスのセグメント区分も示すことになります。
SEGMENT LIKE REFERENCED TABLE オプションを使用する場
合は、次の条件に注意してください。
■
■
■
8-116
SQL Reference Guide
このオプションが有効なのは、<index_specifier> に指定
した最初のフォーリン キーが参照しているテーブルの
すべてのセグメントを、<segment_name> に指定した場
合だけです。
このオプションは、参照先テーブルのセグメント区分
を静的に反映するものです。その範囲が変更されても、
STAR インデックスの設定には自動的に反映されませ
ん。参照先テーブルを変更する場合は、STAR インデッ
クスも明示的に変更してください。
このオプションは、B-TREE インデックスおよび
TARGET インデックスには使用できません。
セグメント定義
例 - セグメント化されたインデックスの作成
次の CREATE INDEX 文は、Market テーブルにインデックスを設定し、名前付き (
ユーザが作成した ) セグメントを指定します。
create index mkt_state_idx
on market (state)
in mkt_state_idx_seg
Sales テーブルを作成し、perkey 列の値によってセグメント化するとします。次の
CREATE INDEX 文で、この Sales テーブルのデータによってセグメント化した
STAR インデックスを定義します。
create table sales (
perkey integer not null,
classkey integer not null,
prodkey integer not null,
storekey integer not null,
promokey integer not null,
quantity integer not null,
dollars dec(7,2) not null,
constraint sales_pkc primary key
(perkey, classkey, prodkey, storekey, promokey),
constraint sales_date_fkc foreign key (perkey)
references period (perkey),
constraint sales_product_fkc foreign key (classkey,
prodkey)
references product (classkey, prodkey),
constraint sales_store_fkc foreign key (storekey)
references store (storekey),
constraint sales_promo_fkc foreign key (promokey)
references promotion (promokey))
data in (daily_data1, daily_data2)
segment by values of (perkey)
ranges (min:415, 415:max)
maxsegments 2
maxrows per segment 60000;
create star index sales_star_idx on sales
(sales_date_fkc, sales_product_fkc, sales_store_fkc,
sales_promo_fkc)
in (sales_star_seg1, sales_star_seg2) segment like data;
重要 : STAR インデックスの作成前に先頭のディメンジョン テーブル ( 上記の例で
は Period テーブル ) をロードする必要があります。
SQL 文と RISQL 拡張機能
8-117
セグメント範囲指定
Sales テーブルにローカルの TARGET インデックスを追加するとします。次の
CREATE INDEX 文で、この Sales テーブルの promokey 列のデータによってセグメ
ント化したローカル インデックスを定義します。
create target index prod_per_sales_ix on sales (promokey)
in (sales_target_ix1, sales_target_ix2) segment local;
セグメント範囲指定
セグメント範囲はセグメント化の基準となる列を指定し、各セグメントに分散して
格納する値の範囲を指定します。
TARGET インデックスと B-TREE インデックスは、インデックス キーの値に応じて
セグメント化されます。STAR インデックスは、参照先テーブルの行データ ID に基
づいてセグメント化されます。参照先テーブルのセグメント範囲を指定することに
より、参照元テーブルのセグメント化の基準列と、各セグメントに分散して格納す
る行の範囲が割り当てられます。
セグメント範囲の指定とインデックス指定との関係については、8-109 ページを参
照してください。
B-TREE インデックスと TARGET インデックス
次に、B-TREE インデックスまたは TARGET インデックスに セグメント範囲を指定
する構文ダイアグラムを示します。セグメント範囲の指定が必要なのは、インデッ
クスが複数のセグメントを使用する場合だけです。
SEGMENT BY VALUES OF
RANGES
(
MIN :<literal>
(
,
<literal>:MAX
<literal:literal>
MIN:MAX
8-118
SQL Reference Guide
)
<segmenting_column>
,
)
セグメント範囲指定
SEGMENT
BY VALUES OF
<segmenting_
column>
B-TREE インデックスおよび TARGET インデックスの セグメント
範囲を指定するときは、次の規則に従ってください。
■
■
■
RANGES
(MIN:MAX)
<segmenting_column> は、<index_specifier> に指定した最
初の列である必要があります。
範囲の指定は、各セグメントに対して行ってください。
<literal> の値は <segmenting_column> の値を識別する必要
があります。<literal> の値と <segmenting_column> の値は
同じデータ型である必要があります。
指定したインデックス キーの値に基づいて、各セグメントにイン
デックスを格納します。
範囲の指定では、次の規則に従ってください。
■
■
■
■
範囲の上限値と下限値を組にして指定し、上限と下限を
コロン (:) で区切ります。
次の組との間は、カンマ (,) で区切ります。
キーの最小値を示す MIN キーワードで始め、最大値を示
す MAX キーワードで終わります。
昇順に指定し、値の重複やすき間がないようにします。
各セグメントの上限は、次のセグメントの下限と一致す
る必要があります。各セグメントには、下限の値以上で
上限の値未満のデータが格納されます。
SQL 文と RISQL 拡張機能
8-119
セグメント範囲指定
STAR インデックス
次に、STAR インデックスにセグメント範囲を指定する構文ダイアグラムを示しま
す。この指定はオプションです。
範囲を指定しないと、STAR インデックスのセグメント数と、インデックス キーで
参照している最初のテーブルの MAXSEGMENTS の値および MAXROWS PER
SEGMENT の値に基づいて範囲が自動的に設定されます。この範囲は、各セグメン
トに均等分割されます。
(
SEGMENT BY REFERENCES OF
RANGES
(
<segmenting_column>
)
)
MIN :MAX
MIN :<rangeval>
,
<rangeval>:MAX
<rangeval:rangeval>
SEGMENT BY
REFERENCES OF
<segmenting_column>
セグメント化の基準となる列またはフォーリン キー制約名
を指定します。これにより、各セグメントにインデックス
を分散させる方法が決まります。<segmenting_column> の
指定では、次の規則に従ってください。
■
■
■
■
8-120 SQL Reference Guide
,
セグメント化の基準列 ( および範囲 ) の指定はオプ
ションです。この句を指定しないと、複数セグメ
ントの範囲が自動的に設定されます。
STAR インデックス キーの先頭フォーリン キーが
1 つの列で構成されている場合は、その列をセグ
メント化の基準列に指定する必要があります。こ
のときは列名またはフォーリン キー制約名を使用
します。
先頭のフォーリン キーフォーリン キーが複数の
列で構成されている場合は、フォーリン キー制約
名 ( CREATE TABLE 文の FOREIGN KEY
REFERENCES 句に指定したもの ) を指定して各
列を特定する必要があります。
セグメント化の基準列が参照しているテーブルに
は、MAXROWS PER SEGMENT の値が割り当てら
れている必要があります。
セグメント範囲指定
RANGES
(MIN:MAX)
インデックス キーで参照される最初のテーブルの行番号 (
またはセグメント名と行データ番号の組み合わせ ) に基づ
いて、各セグメントに格納する STAR インデックスの範囲
を指定します。先頭行の番号は 0、行データ ID の最大値は
MAXROWS PER SEGMENT の値未満にします。セグメント
化の基準列を指定する場合は、STAR インデックスのセグ
メントごとに範囲を指定してください。指定しなければ、
範囲が自動的に設定されるため範囲の指定はできません。
STAR インデックスの範囲を指定するために、参照先テー
ブルのセグメント名と行データ ID を確認するには、次の
クエリを実行します。
select <primary_key>, rbw_segname,
rbw_rownum from <table_name>
上記のクエリは、参照先テーブルの全行を返します。テー
ブルの行データが多い場合は、リザルト セットが大きくな
ります。
範囲の指定では、次の規則に従ってください。
■
■
■
■
範囲の上限値と下限値を組にして指定し、上限と
下限をコロン (:) で区切ります。
次の組との間は、カンマ (,) で区切ります。
最初の参照先テーブルの先頭セグメントの先頭行
を示す MIN キーワードで始め、最初の参照先
テーブルの最終セグメントの最終行を示す MAX
キーワードで終わります。
昇順に指定し、値の重複やすき間がないようにし
ます。各セグメントの上限は、次のセグメントの
下限と一致する必要があります。各セグメントに
は、下限の値以上で上限の値未満のデータが格納
されます。
SQL 文と RISQL 拡張機能
8-121
セグメント範囲指定
<rangeval>
STAR インデックスのセグメントでは、範囲の値を指定す
る方法が 2 種類あります。<rangeval> ( 範囲値 ) 変数は、次
のどちらかを使って表すことができます。
■
<rownum>
これは、セグメント化の基準列が参照している
テーブルが、1 つのセグメントだけを使用してい
る場合の指定です。<rownum> は、参照先テーブ
ルの行データの ID です。たとえば、上限と下限
の組を、次のように指定できます。
■
<segname rownum>
これは、セグメント化の基準列が参照している
テーブルが、複数のセグメントを使用している場
合の指定です。<segname> は、参照先テーブルの
セグメントを特定し、<rownum> は、そのセグメ
ントに格納されている参照先テーブルの行データ
の ID を特定します。たとえば、上限と下限の組
を、次のように指定できます。
100:200
seg1 100:seg1 200
範囲値の <rownum> 部分はオプションです。省略
すると、そのセグメントの最小行データ ID が想
定されます。
例 - セグメントの定義
次のステートメントは、3 つの名前付きセグメントに格納されている Sales テーブル
の STAR インデックスを作成します。このインデックスのキーは、Perkey 列と
Mktkey 列を制約するクエリを効率化します。Period テーブルは、インデックス
キーで参照される最初のテーブルであるため、Perkey 列をセグメント化の基準列に
指定する必要があります。範囲の値は、Period テーブルの行データ ID を参照しま
す。
create star index sales_mkt_prod_idx
on sales (perkey, mktkey)
in (sales_idx_seg1, sales_idx_seg2, sales_idx_seg3)
segment by references of (perkey)
ranges (min:300, 300:600, 600:max)
次のステートメントは、セグメント化の基準列を指定せずに 1 つの名前付きセグメ
ントに Orders テーブルの STAR インデックスを作成します。このインデックスに
は、ALTER SEGMENT 文を使ってセグメントを追加することができます。
create star index sales_cust_prod_idx
on orders (custkey, prodkey)
in orders_idx_seg
8-122 SQL Reference Guide
セグメント範囲指定
次に、1 つのセグメントに格納された B-TREE インデックスを指定する例を示しま
す。範囲は、(min:max) のフォーマットで指定する必要があります。
segment by values of (perkey)
ranges (min:max)
複数のセグメントに格納された B-TREE インデックスを定義する場合は、次のよう
になります。セグメント化の基準列 (Perkey) は日付時間データ型であるため、範囲
の値が日付になっています。
segment by values of (perkey)
ranges (min: '1-01-1998', '01-01-1998':'01-01-1999',
'01-01-1999':'01-01-2000', '01-01-2000': max)
先頭セグメントの上限は、2 番めのセグメントの下限と一致しています。このイン
デックスにデータを挿入するときには、1998 年より前の日付の行が先頭セグメント
に挿入され、1998 年の行が第 2 セグメント、1999 年の行が第 3 セグメント、2000 年
以降の行が最終セグメントに挿入されます。
次に、1 つのセグメントに格納されたテーブルを参照する複数セグメントの STAR
インデックスを定義する例を示します。各範囲の数値は、Perkey の値ではなく、
Perkey 列の行データ ID を表します。
segment by references of (perkey)
ranges (min:100, 100:200, 200:500, 500:max)
複数セグメントのテーブルを参照する複数セグメントの STAR インデックスを定義
する例を次に示します。
...
in (ix_seg1, ix_seg2, ix_seg3, ix_seg4)
segment by references of (mktkey)
ranges (min:tab_seg1 1000, tab_seg1 1000:tab_seg2 2000,
tab_seg2 2000:tab_seg3 3000, tab_seg3 3000:max)
最後の 2 つの例では、セグメント指定に列挙したセグメントごとに範囲を指定して
います。
SQL 文と RISQL 拡張機能
8-123
WITH FILLFACTOR n
WITH FILLFACTOR n
WITH
FILLFACTOR <n>
各インデックス ノードを充填する初期の割合を指定します。
その後、行が挿入されていくと、容量の 100% までインデッ
クス ノードが充填されます。必要なインデックス ノードが
100% を超すと、ノードの分割が生じます。フィル ファクタ
を正しく設定しておけば、ノードを分割せずに挿入や更新を
行うことができます。
<n> の有効範囲は 1 ∼ 100 ですが、フィル ファクタは一般に
50% 以上に設定します。
すでにデータが格納されているテーブルにインデックスを作
成した場合は、インデックスの作成が完了すると、フィル
ファクタの設定値に従ってインデックス ノードに充填され
ます。空のテーブルにインデックスを作成した場合は、その
テーブルにデータをロードした時にフィル ファクタの設定
値が使用されます。フィル ファクタの設定値は、データを
テーブルに再ロードする時や、REORG オプションによって
テーブルを再編成する時にも使用されます。データのロード
や再編成時にフィル ファクタの設定値を使用する場合は、
TMU の optimize オプションをオンにしておきます。
WITH FILLFACTOR オプションを指定しないと、rbw.config
ファイルに設定されているデフォルトのフィル ファクタが
使用されます。rbw.config ファイルに設定されている初期デ
フォルト フィル ファクタは、どのタイプのインデックスで
も 100% です。インデックスの作成後は、ALTER INDEX 文
でフィル ファクタの設定値を変更することができます。
ドメイン サイズが SMALL の TARGET インデックスは、
フィル ファクタを 100% ( デフォルト ) にしてください。ド
メイン サイズが MEDIUM または LARGE のインデックスは、
行の更新や削除がなければ、100% に設定してください。更
新や削除を行う場合は、100% より小さな値に変更してくだ
さい。
フィル ファクタの詳細については、『Query Performance
Guide』を参照してください。
8-124 SQL Reference Guide
DOMAIN SIZE
例
この例では、フィル ファクタが 60 と設定されていて、インデックス ノードを初め
て作成するときは、容量の 60% しか充填されません。
create index promotion_idx
on promotion (promo_type)
with fillfactor 60
DOMAIN SIZE
DOMAIN SIZE
必要に応じて、TARGET インデックスのインデックス付き
列のドメイン サイズとして SMALL、MEDIUM、LARGE の
うちから指定します。ドメイン サイズとは、その列の一意
値の数を示すものです。
DOMAIN SIZE 句は、TARGET インデックスにのみ適用しま
す。
IBM Red Brick Warehouse は、指定されたドメイン サイズに
基づいて、インデックスの格納方法、つまり 燈 \ 現形式 î を
選択します。ドメイン サイズを指定しないと、列の値を表
す適切な形式をデータベース サーバが選択し、処理速度と
格納効率が高いデフォルト ドメインの TARGET インデック
スを作成します。ドメイン内にデータが均等に分布している
か、ドメインが非常に小さな場合は、列値のほとんどまたは
すべてに適合するサイズを指定します。通常、特に列値の分
布に偏りがある場合や分布が未知の場合などは、デフォルト
のデフォルト ドメインが適しています。
SQL 文と RISQL 拡張機能
8-125
DOMAIN SIZE
図 8-11 は、実際のドメイン サイズの境界について、デフォルト ドメインの
TARGET インデックスと B-TREE インデックスとを比較したものです。B-TREE イ
ンデックスは、取り得る値の数が 10,000 を超えるドメインに適しています。実際の
ドメイン サイズに対する SMALL、MEDIUM、LARGE のドメイン指定の判断はよ
り難しいものですが、図 8-11 に一般的なガイドラインを示します。格納領域につい
ては、『Administrator's Guide』を参照してください。
図 8-11
ドメイン サイズの境界
Mixed-Domain TARGET Indexes
Domain
<size> 1 (small) 100 (medium) 1,000
(large)
B-TREE Indexes
10,000
•
ドメイン サイズ SMALL は一般に検索性能が最も高くなりますが、インデックスの
格納領域は最も大きく、取り得る値の数の増大と共に必要な容量が増加します。
TARGET インデックスは、TARGETjoin 処理を有効にすることもできます。
TARGETjoin 処理の詳細については、『Query Performance Guide』を参照してくださ
い。
例
大量のデータ行がある Demographics テーブルの Occupation 列には約 5,000 通りの値
がありますが、少数の値がテーブルの全行の半数以上を占めるという分布の偏りが
あります。この場合は、デフォルト ドメインの TARGET インデックスを選択しま
す。
create target index code_tgt_ix
on promotion(promo_code)
同テーブルの Marital_Status 列に、10 通り未満の値 (Single、Married、Divorced など )
が均等に分布していることがわかっている場合、その列の TARGET インデックスは、
次のように指定します。
create target index city_tgt_ix
on store(city)
domain size small
8-126 SQL Reference Guide
CREATE MACRO
CREATE MACRO
CREATE MACRO 文は、SQL 文の一部または全体を略記するマクロを作成します。
CREATE MACRO 文には、マクロの内容を分類するオプションのカテゴリと、マク
ロを説明するコメントを指定することができます。
アクセス権
PUBLIC マクロを作成するユーザは、次の中で少なくとも 1 つの条件を満たしてい
る必要があります。
■
■
DBA システム ロールのメンバーであること
明示的に付与されるかユーザが作成したロールのメンバーであることによ
り、CREATE_ANY 権限か PUBLIC_MACROS 権限を持っていること
プライベート マクロを作成するユーザは、次の中で少なくとも 1 つの条件を満たし
ている必要があります。
■
■
DBA システム ロールか、RESOURCE システム ロールのメンバーであるこ
と
明示的に付与されるかユーザが作成したロールのメンバーであることによ
り、CREATE_ANY 権限か CREATE_OWN 権限を持っていること
TEMPORARY マクロは、Red Brick データベースに接続しているユーザであればど
のユーザでも作成できます。
構文
次に CREATE MACRO 文の構文ダイアグラムを示します。
MACRO
CREATE
<macro_name>
TEMPORARY
PUBLIC
,
(
<parameter>
)
CATEGORY
<cat_val>
()
AS
COMMENT
<definition>
'<character_string>'
SQL 文と RISQL 拡張機能
8-127
CREATE MACRO
TEMPORARY、
PUBLIC
マクロには、テンポラリ、パブリック、プライベートの 3 種類
があります。
■
■
■
テンポラリ マクロ名は、ユーザ セッション中に作成さ
れ、そのセッションの存続中にだけ存在し、作成者だ
けがアクセスできます。クライアント ツールがデータ
ベース サーバとの接続を解除すると、テンポラリ マク
ロは削除されます。
パブリック マクロは、ユーザ セッションとは独立して
作成され、RBW_MACROS システム テーブルに格納さ
れ、DROP PUBLIC MACRO 文で削除されるまで存続し
ます。このマクロには、すべてのユーザがアクセスで
きます。
テンポラリ マクロ、パブリック マクロのどちらも指定
しないと、ユーザ セッションとは無関係にプライベー
ト マクロが作成されます。このマクロは、作成者が削
除するまで RBW_MACROS システム テーブルに格納
され、作成者だけがアクセスできます。
パブリック マクロとその格納場所の詳細については、
『Administrator's Guide』を参照してください。
<macro_name>、
<parameter>
マクロ名とパラメータ名は、データベース識別子です。キー
ワードは指定できません。同じマクロ名が、テンポラリ、パブ
リック、およびプライベート マクロのいずれにも使用できま
す。マクロ名が特定できなければ、次の規則に基づいて、セッ
ション中にデータベース サーバがマクロを読み込んだり作成す
る時に特定されます。指定した名前のテンポラリ マクロが存在
する場合は、テンポラリ マクロが使用されます。テンポラリ マ
クロが存在せず、指定した名前のプライベート マクロが存在す
る場合は、プライベート マクロが使用されます。テンポラリお
よびプライベート マクロが共に存在せず、指定した名前のパブ
リック マクロが存在する場合は、パブリック マクロが使用され
ます。
マクロは、SQL 文の一部として使用するか、別のマクロ内で使
用することができます。SQL 文の実行中は、マクロ名がマクロ
の定義内容に置き換えられます。
区切り識別子を使用したマクロ名は、二重引用符で囲まれる必
要があります。また、区切り識別子を囲むすべての二重引用符
には、二重引用符を補う必要があります。この例は、8-131 ペー
ジを参照してください。
8-128 SQL Reference Guide
CREATE MACRO
CATEGORY
マクロに対する構文 カテゴリを指定します。SQL 文でマクロを
使用する方法によってそのマクロにカテゴリを付けます。これ
はオプションのパラメータです。
カテゴリ値は、RBW_MACROS システム テーブルに格納されます。カテゴリ値は、
RBW_MACROS テーブルへのクエリで参照できますが、データベース サーバはカ
テゴリ値に対してそれ以外の検査や処理を行いません。カテゴリ値の最小値は 0、
最大値は 65,535 です。このオプション パラメータを指定しなかった場合、または以
前のリリースの IBM Red Brick Warehouse からマクロを移行した場合は、
RBW_MACROS の Category 列に NULL が格納されます。
IBM Red Brick Warehouse は、一般カテゴリの定義として 0 ∼ 255 の値を予約してい
ます。新しいカテゴリを定義するには、255 より大きい値を選択してください。
次の表に、<cat_val> に定義されている値を示します。
カテゴリ値
カテゴリの定義
1
検索項目リストの項目。クエリの検索項目リストに指定でき
る算出列を定義するマクロです。
2
検索条件。SELECT 文の WHERE 句に指定できる任意の数の
検索条件を定義するマクロです。
3
ソート基準。ORDER BY 句に指定できる項目を定義するマク
ロです。
10
値。リテラルまたはサブクエリを示すテキストを定義するマ
クロです。
11
値リスト。複数のリテラル値を示すテキストを指定するマク
ロです。
100
SQL 文。構文的に完全な SQL 文を定義するマクロです。
101
その他。ほかのカテゴリで定義されていない SQL テキストを
定義するマクロです。
SQL 文と RISQL 拡張機能
8-129
CREATE MACRO
COMMENT
< character_string>
マクロの意味や使い方を説明するコメント文字列を割り当てま
す。256 バイトまで入力できます。コメントは、
RBW_MACROS システム テーブルに格納されるオプションの
パラメータで、このテーブルへのクエリによって参照すること
ができます。
このパラメータを指定しなかった場合、または以前のリリース
の IBM Red Brick Warehouse からマクロを移行した場合は、
RBW_MACROS の COMMENT 列に NULL が格納されます。
データベース サーバはこのテキストを無視します。
ALTER MACRO 文を使用して、RBW_MACROS の
COMMENT 列の内容を更新することができます。
AS <definition>
マクロを定義します。次の規則に従って、SQL 文の一部また
は全体を定義できます。
■
■
■
■
マクロ名およびパラメータ名を使用することができま
す。これらは埋め込みマクロとして参照されます。
1024 バイト以下です。パラメータ名のサイズやマク
ロの実行時に入力する値のサイズに関係なく、指定パ
ラメータ 1 つが 3 バイトを使用します。
完全なステートメントは 1 つしか記述できません。
パラメータにカンマ ( , ) が含まれている場合は、エス
ケープ文字の円記号 (¥) をつけます。
マクロ実行時にマクロ名が展開されるときには、定義された各
パラメータ名が、対応する引数の値に置き換えられます。
EXPAND 文は、展開したマクロを返すステートメントです。
詳細については、8-188 ページ「EXPAND」を参照してくださ
い。
例
SELECT 文全体をマクロにし、構文 カテゴリを指定する例を示します。
create macro select_star_lotta
category 100
as select * from product
where product like 'Lotta'
8-130 SQL Reference Guide
CREATE ROLE
次の例は、パラメータによって条件を定義し、マクロの構文 カテゴリとコメントを
指定します。
create macro mo_sales(prod_name, mo, yr)
category 2
comment 'Search condition with parameters.'
as where product like prod_name
and month = mo
and year = yr
sales という上記のマクロ名は、SELECT 文で次のように参照することができます。
select prod_name, city, dollars
from store natural join sales
natural join product
natural join period
mo_sales('Lotta%', 'MAR', 1998)
上記のクエリは、Lotta Latte という製品について、1998 年 3 月の売上を返します。
マクロの詳しい使用例については、『SQL Self-Study Guide』を参照してください。
次の例では、展開後、区切り識別子を使用する CREATE TABLE 文になるマクロを
作成します。
create macro create_star as
"create table ""table"" (""The """"STAR"""""" int)"
RISQL プロンプトで create_star と入力すると、"STAR" という列名の列を持つ
table という名前のテーブルが作成されます。
CREATE ROLE
CREATE ROLE 文はロールを作成し、オプションで 1 人以上のユーザにロールを付
与します。作成したロールには、GRANT 文を使ってタスク権限とオブジェクト特
権を付与します。
アクセス権
ロールを作成するユーザは、次の中で少なくとも 1 つの条件を満たしている必要が
あります。
■
■
DBA システム ロールのメンバーであること
明示的に付与されるかユーザが作成したロールのメンバーであることによ
り、ROLE_MANAGEMENT 権限を持っていること
SQL 文と RISQL 拡張機能
8-131
CREATE ROLE
構文
次に CREATE ROLE 文の構文ダイアグラムを示します。
CREATE ROLE
<role_name>
,
FOR
<db_username>
<role_name>
<role_name>
作成するロールを識別する名前です。ロール名はほかのロール名、
データベース ユーザ名、タスク権限名とは異なる名前にしてくださ
い。
FOR
作成したロールをデータベース ユーザに付与します。そのユーザ
<db_username> は、新規作成されたロールのメンバーになり、そのロールのタスク
権限およびオブジェクト特権をすべて取得します。
FOR
<role_name>
作成したロールを、ユーザが作成した既存のロールに付与します。
DBA システム ロールや RESOURCE システム ロールには付与できま
せん。システム ロールは変更できません。
使用上の注意
FOR 句に指定したデータベース ユーザおよびロールは、作成したロールの直接のメ
ンバーになります。ユーザやロールが直接のメンバーになれるロールの数は 16 ま
でです。FOR 句に指定したユーザやロールが、すでに 16 個のロールのメンバーで
ある場合は、新規ロールは作成されません。
例
次のステートメントは、temp というロールを作成します。
create role temp
次のステートメントは、contractor というロールを作成し、そのロールを jerry に付
与します。
create role contractor for jerry
次のステートメントは、market_research というロールを作成し、そのロールを
alison、emily、paul に付与します。
create role market_research for alison, emily, paul
8-132 SQL Reference Guide
CREATE SEGMENT
CREATE SEGMENT
CREATE SEGMENT 文は、任意の数の物理格納ユニット (PSU) を格納する名前付き
セグメントを定義します。
テーブルやインデックスは、デフォルト セグメントか任意の数の名前付きセグメン
トを使用することができます。デフォルト セグメントは、名前付きセグメントを指
定せずにテーブルやインデックスを作成したときに、自動作成されます。名前付き
セグメントは、CREATE SEGMENT 文によって作成し、CREATE TABLE、ALTER
TABLE、CREATE INDEX、ALTER SEGMENT のいずれかのステートメントによっ
てテーブルやインデックスに割り当てます。1 つの名前付きセグメントには、1 つ
のデータベース オブジェクトしか格納できません。テーブルやインデックスは、複
数のセグメントに格納することができます。
アクセス権
セグメントを作成するユーザは、次の中で少なくとも 1 つの条件を満たしている必
要があります。
■
■
DBA システム ロールか、RESOURCE システム ロールのメンバーであるこ
と
明示的に付与されるかユーザが作成したロールのメンバーであることによ
り、CREATE_ANY 権限か CREATE_OWN 権限を持っていること
構文
次に CREATE SEGMENT 文の構文ダイアグラムを示します。
,
CREATE SEGMENT
<segment_name>
<storage_specification>
SQL 文と RISQL 拡張機能
8-133
CREATE SEGMENT
<segment_name>
作成するセグメントの名前を指定します。現在のデータベースに
存在しない名前で、有効なデータベース識別子である必要があり
ます。
<storage_
specification>
セグメントの行データまたはインデックス データを格納する各
PSU のパスとサイズを指定します。格納領域を指定する構文に
ついては、次のセクションを参照してください。
<storage_specification> には、セグメントに割り当てられる物理格
納ユニット (PSU) と呼ばれる各ファイルのパス名とサイズを指定
します。1 つのセグメントに、サイズの異なる複数の PSU を割り
当てることができます。
構文
次に格納領域の指定の構文ダイアグラムを示します。
STORAGE
INITSIZE
8-134 SQL Reference Guide
'<filename>'
<init_size>
MAXSIZE
<max_size>
EXTENDSIZE
<increment>
CREATE SEGMENT
STORAGE
< filename>
PSU のファイル名を指定します。ファイル名は、データべースの
ディレクトリに対する相対パスでも、絶対パスでもかまいません。
指定するディレクトリは、すべて存在するものにしてください。
MAXSIZE
<max_size>
PSU にロードするデータの最大量を KB 数で指定します。この量
までロードされると、シーケンス内の次の PSU に切り換わりま
す。増分は KB 単位で指定しますが、実際のサイズは 8 の倍数に切
り上げられます。MAXSIZE の許容最小値は 16KB です。
MAXSIZE の値は、RBW_STORAGE システム テーブルの
MAXSIZE 列に格納されます。このシステム テーブルには、PSU
の使用済み KB 数 (USED 列 ) も格納されます。
INITSIZE
<init_size>
PSU にあらかじめ確保される領域の初期サイズを指定します。KB
単位で指定しますが、実際のサイズは 8 KB の倍数に切り上げられ
ます。指定する値は、MAXSIZE パラメータで指定した最大サイズ
以下にしてください。デフォルトは 16KB です。
セグメントの先頭 PSU の初期サイズは、16KB 以上にします。先
頭 PSU の初期サイズを 0KB ∼ 9KB 未満の値に指定すると、エ
ラーが返されます。9KB ∼ 16KB 未満の値を指定すると、16KB に
切り上げられます。それ以降の PSU の初期サイズは、0KB ∼最大
サイズの任意の値に設定できます。
INITSIZE の値は、RBW_STORAGE システム テーブルの
INITSIZE 列に格納されます。
EXTENDSIZE
<increment>
PSU の容量が不足する場合に、初期サイズ以上に拡張するときの
増分の単位を指定します。増分は KB 単位で指定しますが、実際
のサイズは 8KB の倍数に切り上げられます。デフォルトは 8KB で
す。
例
この CREATE SEGMENT 文は、3 つの PSU から構成されるセグメントを定義しま
す。各 PSU には、最高 1MB (MAXSIZE) のデータを格納できます。
create segment sales_dataseg1
storage 'sales_area1'
maxsize 1024
initsize 100
extendsize 100,
storage 'sales_area2'
maxsize 1024,
storage 'sales_area3'
maxsize 1024
SQL 文と RISQL 拡張機能
8-135
CREATE SYNONYM
先頭の PSU の sales_area1 には、セグメントの作成時に 104KB の格納領域
(INITSIZE) が割り当てられます。sales_area1 が容量限界になると、最大サイズに達
するまで、104KB (EXTENDSIZE) ずつ拡張されていきます。sales_area1 が最大サイ
ズに達すると、sales_area2 にデータが格納されます。
sales_area2 および sales_area3 の PSU には、セグメントの作成時に 16KB の格納領域
が割り当てられます。これは、INITSIZE のデフォルトです。最初は sales_area2 が拡
張され、最大サイズに達するまで 8KB ずつ拡張されます。次に、sales_area3 が最大
サイズに達するまで 8KB ずつ拡張されます。
CREATE SYNONYM
シノニムは、既存テーブルの論理名またはエリアスです。定義したシノニムは、元
のテーブルのコピーとして使用することができます。シノニムは、データベースに
ある任意の基本テーブルに対して作成できますが、ビューおよびテンポラリ テーブ
ルには作成できません。
アクセス権
テーブルのシノニムを作成するユーザは、次の中で少なくとも 1 つの条件を満たし
ている必要があります。
■
■
■
■
DBA システム ロールのメンバーであること
明示的に付与されるかユーザが作成したロールのメンバーであることによ
り、CREATE_ANY 権限を持っていること
RESOURCE システム ロールのメンバーで、かつテーブルの作成者である
こと
CREATE_OWN 権限を持っていて、テーブルの作成者であること
構文
次に CREATE SYNONYM 文の構文ダイアグラムを示します。
CREATE SYNONYM
8-136 SQL Reference Guide
<synonym_name>
FOR
<table_name>
CREATE TABLE
<synonym_name>
作成するシノニムの名前を指定します。データベースにあるほ
かのビュー、テーブル、シノニムとは異なるデータベース識別
子を指定してください。
<table_name>
作成するシノニムの対象となる既存のテーブルを指定します。
ビューおよびテンポラリ テーブルのシノニムを作成することは
できません。
使用上の注意
シノニムは、テーブル名のエリアスを作成するだけです。1 つのファクト テーブル
に同じ 1 つのディメンジョン テーブルへの複数の参照を設定するクエリを書くに
は、シノニムを作成する必要はありません。どのテーブルもほかのテーブルに複数
のプライマリ キー参照またはフォーリン キー参照を設定することができます。
例
次の例は、Period テーブルに Shipdate というシノニムを作成します。
create synonym shipdate for period
CREATE TABLE
CREATE TABLE 文は、プライマリ キー、属性、フォーリン キー参照、セグメント
を指定した ( シノニムではない ) 基本テーブルを定義します。テーブルを作成する
と、そのテーブルのプライマリ キーについて B-TREE インデックスが自動的に作成
されます。
CREATE TEMPORARY TABLE 文の構文については、8-160 ページを参照してくださ
い。
アクセス権
テーブルを作成するユーザは、次の中で少なくとも 1 つの条件を満たしている必要
があります。
■
■
DBA システム ロールか、RESOURCE システム ロールのメンバーであるこ
と
明示的に付与されるかユーザが作成したロールのメンバーであることによ
り、CREATE_ANY 権限か CREATE_OWN 権限を持っていること
SQL 文と RISQL 拡張機能
8-137
CREATE TABLE
ほかのユーザのセグメントにテーブルを作成する場合は、次の中で少なくとも 1 つ
の条件を満たしている必要があります。
■
■
DBA システム ロールのメンバーであること
CREATE_ANY 権限を持っていること
構文
次に CREATE TABLE 文の構文ダイアグラムを示します。
CREATE TABLE
(
<table_name>
<column_definitions>
)
<segment_specification>
MAXROWS PER SEGMENT
MAXSEGMENTS
<maxrows>
<maxsegments>
<table_name>
作成する基本テーブルの名前を指定します。テーブル名
は、次の条件を満たしている必要があります。
■
■
<column_definitions>
データベースにあるほかのビュー、テーブル、シ
ノニムの名前と重複しないこと
有効なデータベース識別子であること
テーブルの列を定義します。テーブルの各列には、完全な
列定義が必要です。列定義の詳細については、8-139 ペー
ジを参照してください。
<segment_specification> テーブルのデータ、およびシステムが生成する B-TREE イ
ンデックスに、セグメントを割り当てます。CREATE
TABLE 文のセグメント定義を省略すると、データおよびイ
ンデックスはデフォルト セグメントに格納されます。
デフォルト セグメントの最大サイズは、通常 2GB です。
ただし、複数の PSU を使用すると、デフォルト セグメン
トのサイズを 2GB より大きくすることができます。
8-138 SQL Reference Guide
列の定義
CREATE TABLE 文の実行時の状況を次に示します。
■
■
■
■
指定した容量の領域に、少なくとも 1 つの PSU を
割り当てる必要があります。
各 PSU の MAXSIZE は 2GB から 8KB を引いた値
に設定されます。
各 PSU の INITSIZE は 16KB に設定されます。
作成される PSU の数は
DEFAULT_SEGMENT_SIZE を 2GB で割った値に
等しくなります。DEFAULT_SEGMENT_SIZE が
2GB で割り切れない場合、最後の PSU はその他の
PSU より小さくなります。
テーブルやインデックスを名前付きセグメントに格納する
場合は、CREATE SEGMENT 文を使って、名前付きセグメ
ントをあらかじめ作成してください。
セグメント定義の構文と説明については、8-150 ページを
参照してください。
MAXSEGMENTS
<maxsegments>、
MAXROWS PER
SEGMENT <maxrows>
MAXSEGMENTS は、テーブルが使用できるセグメントの
最大数を指定します。MAXROWS PER SEGMENT は、テー
ブルの各セグメントに格納できる行の最大数を指定しま
す。これらの値は、インデックス付きテーブルのフォーリ
ン キーによってこのテーブル参照されたとき STAR イン
デックス キーのサイズの計算に使用されます。
MAXSEGMENTS を指定しなかった場合のデフォルトは、
<segment_specification> に指定したセグメントの数になり、
<segment_specification> が指定されていない場合は 1 になり
ます。
MAXROWS PER SEGMENT を指定しなかった場合、この
テーブルのプライマリ キーを参照する別のテーブルの
フォーリン キーに STAR インデックスを定義できなくな
り、CREATE INDEX 文は失敗します。
列の定義
データベース テーブルの各列は、CREATE TABLE 文の中で完全に定義する必要が
あります。
SQL 文と RISQL 拡張機能
8-139
列の定義
構文
CREATE TABLE 文全体の構文ダイアグラムと、列の定義構文の参照ポイントを示し
ます。
CREATE TABLE
(
<table_name>
<column_definitions>
)
<segment_specification>
MAXROWS PER SEGMENT
MAXSEGMENTS
<maxrows>
<maxsegments>
次に <column_definition> の構文ダイアグラムを示します。
,
<column_name>
<datatype>
DEFAULT
NOT NULL
UNIQUE
<literal>
<function>
NULL
,
<primary_key_reference>
, <foreign_key_reference>
8-140 SQL Reference Guide
列の定義
<column_name> テーブルの列名を指定します。列名は、テーブルで一意の有効な
データベース識別子とし、修飾子は使用できません。1 つのテーブ
ルには、7,280 列まで作成することができます。
列に NULL または NOT NULL および UNIQUE を指定でき、デフォル
ト値も指定できます。
<data type>
次のいずれかのデータ型を指定します。
■
■
■
■
■
■
■
■
■
■
固定長の文字列値は、CHARACTER または CHAR
可変長の文字列値は、VARCHAR
日付時間の値は、DATE、TIME、または TIMESTAMP
符号付き 10 進数値 (NUMERIC と同等 ) には、DECIMAL ま
たは DEC
符号付き浮動小数点数値 (DOUBLE PRECISION と同等 ) に
は FLOAT
符号付き浮動小数点数値には REAL
-231 ∼ 231-1 の符号付き整数値には INTEGER または INT
1 ∼ 231-1 の符号付き整数値には、シリアル (SERIAL)
テーブルごとに SERIAL 列を 1 つだけ作成できます。
SERIAL 列を定義するときに、NULL 値の入力不可を指定
する必要があります。
-215 ∼ 215-1 の符号付きスモール整数値には SMALLINT
-27 ∼ 27-1 の符号付き整数値には TINYINT
SQL 文と RISQL 拡張機能
8-141
列の定義
文字 (CHAR または VARCHAR) データ型の列を定義した場合、列サ
イズとして指定した値は、列値の文字数ではなく、列値のバイト数
とみなされます。
7 または 8 ビットの ASCII 文字セットを使用した場合は、1 文字の
長さが常に 1 バイトになるため、列サイズがバイト数または文字数
のどちらとみなされても違いはありません。ただし、マルチバイト
の文字セットを使用する場合は、シングルバイトの文字セットと同
数の文字が列に格納できないことがあるので注意してください。
データ型の詳細については、2-15 ページを参照してください。
NOT NULL
指定した列について、テーブルのすべての行に値を格納することを
定義します。NULL や不定値は格納できません。この制約に違反す
る INSERT 文や UPDATE 文は実行されず、エラー メッセージが返
されます。
NOT NULL 句は SERIAL 列の指定で必要です。
UNIQUE
指定した列には、重複値を格納できないことを定義します。列を
UNIQUE と指定しても、その列の一意性を強制することにはなり
ません。一意性を強制するには、列に B-TREE インデックスも作成
する必要があります。複数の列の組み合わせに一意性を強制するに
は、すべての列を UNIQUE と指定し、それらの列に対して 1 つの
インデックス (B-TREE または STAR) を作成します。この列をプラ
イマリ キー列にする必要はありません。
次の CREATE TABLE 文について考えてみます。
create
c1 int
c2 int
c3 int
table tbl (
not null unique,
not null unique,
not null);
次のステートメントは一意の B-TREE インデックスを作成します。
create index idx1 on tbl(c1, c2);
次のステートメントは一意でない B-TREE インデックスを作成しま
す。
create index idx2 on tbl(c1, c3);
ヒント : 列の組み合わせだけが一意で、個々の列自体は一意でない場合、1 つの列
にインデックスを定義しないでください。そのような定義は、一意性をその列に強
制します。
8-142 SQL Reference Guide
列の定義
DEFAULT
指定した列に、デフォルト値を割り当てます。列のデフォルト値
は、ALTER TABLE 文によって新規列をテーブルに追加した時の既
存行と、その列に値がない新規行に使用されます。INSERT 文で追
加された行や、ロード中に参照整合性を維持するために自動生成さ
れた行にも使用されます。自動的な行の生成については、『Table
Management Utility Reference Guide』を参照してください。
リテラル値を指定する場合は、その列のデータ型とリテラル値を互
換性のあるものにしてください。
関数を指定する場合は、その列のデータ型と互換性のある値を返す
関数にしてください。戻り値は、行の挿入時に列に挿入されます。
デフォルトに使用できる関数は、次のいずれかです。
■
■
■
■
CURRENT_USER ( または USER)
CURRENT_USER 関数をデフォルトに使用できるのは、
CHAR(128) または VARCHAR(128) 以上のデータ型の列だ
けです。
CURRENT_DATE
CURRENT_TIME (<precision>)
CURRENT_TIMESTAMP (<precision>)
デフォルトの句は、シリアル (SERIAL) 型のデータでは使用できま
せん。
DEFAULT NULL は、行の挿入時に値が指定されなかった場合に列
のデフォルトを NULL に設定するように指定できます。
同じ列に、NOT NULL と DEFAULT NULL の両方を指定できます。
その列には、いかなる場合もデフォルト値を入力できないという意
味です。これは、そのテーブルの自動的な行の生成を無効にするこ
とになります。自動的な行の生成については、『Table Management
Utility Reference Guide』を参照してください。
この CREATE TABLE 文は、テーブル Prod_Basic を作成します。
Prodname 列には、デフォルト値 Unknown が割り当てられます。
Prod_Basic テーブルに行を挿入するときに、Prodname 列の値を指
定しないと、Unknown が挿入されます。
create table prod_basic (
prodkey integer not null,
prodname char(30) default 'Unknown',
descript character(40),
constraint prod_pkc primary key (prodkey) )
デフォルト値の用法の詳細については、8-218 ページに示す
INSERT 文の例を参照してください。
SQL 文と RISQL 拡張機能
8-143
プライマリ キー参照
プライマリ キー参照
テーブルのプライマリ キーは、任意の数の列で構成することができます。プライマ
リ キーはオプションですが、プライマリ キーを持たないテーブルはテンポラリ
テーブルに限って作成することをお勧めします。プライマリ キーを持たないテーブ
ルに対しては、次の操作はできません。
■
■
■
ほかのテーブルによるフォーリン キー参照
参照整合性チェック
Table Management Utility の UPDATE または MODIFY 構文によるロード
テーブルを作成すると、そのテーブルのプライマリ キーについて B-TREE インデッ
クスが自動的に作成されます。
構文
次に プライマリ キー参照の構文ダイアグラムを示します。PRIMARY KEY
REFERENCES 句と、CREATE TABLE 文および列定義との関係は、8-139 ページを参
照してください。
,
PRIMARY KEY
CONSTRAINT
<constraint_name>
8-144 SQL Reference Guide
(
<column_name>
)
プライマリ キー参照
CONSTRAINT
<constraint_name>
プライマリ キー制約の名前を指定します。この名前は、
RBW_RELATIONSHIPS および RBW_CONSTRAINTS シス
テム テーブルに格納されます。プライマリ キー制約名はオ
プションです。指定しないと、次のフォーマットのデフォル
ト名が自動的に割り当てられます。
<tablename>_PKEY_CONSTRAINT
制約名の詳細については、8-149 ページ「プライマリ キーと
フォーリン キー制約名」を参照してください。
PRIMARY KEY
<column_name>
テーブルのプライマリ キーを指定します。複数の列からなる
プライマリ キーを指定することができます。
プライマリ キーは、次の条件に従います。
■
■
■
1 つのテーブルには 1 つのプライマリ キーしか指定
できませんが、プライマリ キーは、複数の列で構成
することができます。
プライマリ キーとして指定する列は、すべて NOT
NULL に指定する必要があります。
プライマリ キーの値は、一意である必要がありま
す。つまり、プライマリ キーによってテーブルの行
が一意に識別できる必要があります。
SQL 文と RISQL 拡張機能
8-145
フォーリン キー参照
フォーリン キー参照
ほかのテーブルのプライマリ キー値に存在する値だけを格納する列を、フォーリン
キー参照を行う列といいます。
構文
次に フォーリン キー参照の構文ダイアグラムを示します。FOREIGN KEY
REFERENCES 句と、CREATE TABLE 文および列定義との関係は、8-139 ページを参
照してください。
,
FOREIGN KEY
CONSTRAINT
<constraint_name>
REFERENCES
<referenced_table>
<column_name>
(
)
,
(
ON DELETE
<primary_key_column>
)
CASCADE
NO ACTION
CONSTRAINT
<constraint_name>
フォーリン キー制約の名前を指定します。この名前は、
RBW_RELATIONSHIPS および RBW_CONSTRAINTS システ
ム テーブルに格納されます。フォーリン キー制約名はオプ
ションです。指定しないと、次のフォーマットのデフォルト名
が自動的に割り当てられます。
<tablename>_FKEY#_CONSTRAINT
# は、CREATE TABLE 文に指定したフォーリン キーの順番を
示す数字です。
プライマリ キーが複数の列で構成されているテーブルを参照
しているテーブルに STAR インデックスを作成する場合は、
ユーザが定義したフォーリン キー制約名を CREATE STAR
INDEX 文に指定してください。
制約名の詳細については、8-149 ページ「プライマリ キーと
フォーリン キー制約名」を参照してください。
8-146 SQL Reference Guide
フォーリン キー参照
FOREIGN KEY
作成するテーブルと、REFERENCES キーワードの後に指定し
たテーブル間の結合パスを定義します。パスは、
<column_name> と <parent_column> に指定した列について定義
します。1 つのテーブルに 256 までのフォーリン キーを設定す
ることができます。
フォーリン キーにより参照されるテーブルは、プライマリ
キーを持っている必要があります。シリアル (SERIAL) 型列は
フォーリン キーとして使用できません。シリアル (SERIAL) 型
列をフォーリン キーとして参照するときは、フォーリン キー
列を整数 (INTEGER) 型として指定する必要があります。シリ
アル (SERIAL) データ型の詳細については、2-21 ページを参照
してください。
ループするスキーマ参照は定義できません。たとえば、table2
から table1 に対する制約がすでに存在する場合、table1 から
table2 に対する制約を追加することはできません。このような
テーブル設定を行うと、参照整合性がループします。
<column_name>
作成するテーブルの列名を指定します。この列は、NOT NULL
に指定されたものとし、<parent_column> と同名でもかまいま
せん。
<referenced_table>
既存の参照先テーブルまたはシノニムの名前を指定します。
<primary_key_
column>
<referenced_table> にあるプライマリ キー列の名前を指定しま
す。指定しないと、参照先テーブルのプライマリ キーが自動
的に使用されます。指定する場合は、参照先テーブルに指定し
たプライマリ キー列と一致させてください。
SQL 文と RISQL 拡張機能
8-147
フォーリン キー参照
ON DELETE
参照先テーブルに削除操作が実行された時に、参照整合性を維
持する方法を指定します。参照元の行をすべて削除するか、参
照先の行の削除を中止するかを指定します。ON DELETE 句を
省略した場合のデフォルトは、NO ACTION です。これは、行
の削除によって参照整合性違反が発生した場合に、行の削除を
中止する指定です。
NO ACTION を指定すると、参照先テーブルの行と参照元テー
ブルの行はどちらも削除されません。このような削除は、リス
トリクト デリートと呼ばれます。
CASCADE を指定すると、参照先テーブルの行と、その行を参
照している参照元テーブルのすべての行が削除されます。削除
後は、各テーブルから削除された行数を示すメッセージが表示
されます。このような削除は、カスケード デリートと呼ばれ
ます。
リストリクト デリートとカスケード デリートの両方が関わる
削除では、NO ACTION が CASCADE に優先します。削除される
行はありません。この優先順位は、すべての参照元テーブルに
再帰的に適用されます。
シノニムには、対応する基本テーブルと同じ削除動作を指定し
てください。そうでない場合は、CREATE TABLE 文がエラー
になります。
ON DELETE 句に指定した動作は、OVERRIDE REFCHECK 句
を指定した DELETE 文で変更することができます。
OVERRIDE REFCHECK 句は、参照整合性が維持できるよう
に、注意して使用してください。
各種の削除モードの動作例については、8-171 ページ
「DELETE」および『Administrator's Guide』を参照してくださ
い。
8-148 SQL Reference Guide
プライマリ キーとフォーリン キー制約名
プライマリ キーとフォーリン キー制約名
CREATE TABLE 文では、制約名でプライマリ キー参照とフォーリン キー参照をプ
リフィックスすることができます。
プライマリ キー制約名は、作成中のテーブルの 1 つまたは複数のプライマリ キー列
を一意に指定する手段になります。フォーリン キー制約名は、作成中のテーブル
が、ほかのテーブルの 1 つまたは複数の列に対して作成するすべてのフォーリン
キー参照を一意に指定する手段になります。
次の例の Sales テーブルに対する CREATE TABLE 文は、1 つのプライマリ キー制約
と 4 つのフォーリン キー制約を指定します。
create table sales (
perkey integer not null,
classkey integer not null,
prodkey integer not null,
storekey integer not null,
promokey integer not null,
...
constraint sales_pkc primary key
(perkey, classkey, prodkey, storekey, promokey),
constraint sales_date_fkc foreign key (perkey)
references period (perkey),
constraint sales_product_fkc foreign key (classkey,
prodkey)
references product (classkey, prodkey),
constraint sales_store_fkc foreign key (storekey)
references store (storekey),
constraint sales_promo_fkc foreign key (promokey)
references promotion (promokey))
...
テーブルを作成するとき、制約名はオプションです。指定しないと、次のフォー
マットのデフォルト名が自動的に割り当てられます。
<table_name>_PKEY_CONSTRAINT
<table_name>_FKEY#_CONSTRAINT
<table_name> は作成中のテーブル名、# は、CREATE TABLE 文に指定したフォーリ
ン キーの順番を示す数字です。システム定義の場合もユーザ定義の場合も、制約名
は、RBW_RELATIONSHIPS および RBW_CONSTRAINTS システム テーブルに格
納されます。
システム テーブルは、列名ではなく制約名でプライマリ キー制約とフォーリン
キー制約を管理するため、CREATE TABLE 文にはユーザ定義の制約名を統一して使
用してください。ユーザ定義の制約名は、プライマリ キー参照およびフォーリン
キー参照に意味のある名前を割り当てる手段にもなります。
SQL 文と RISQL 拡張機能
8-149
セグメント定義
CREATE TABLE 構文では制約名はオプションですが、CREATE STAR INDEX 文では
必須となる場合があります。参照先テーブルの複数の列からなるプライマリ キーを
構成する、参照元テーブルの列に STAR インデックスを作成する場合は、ユーザ定
義のフォーリン キー制約名でインデックス キーを指定する必要があります。
たとえば、次のステートメントは Sales テーブルの Classkey 列と Prodkey 列に
STAR インデックスを作成します。
create star index prod_sales_ix on sales (classkey, prodkey);
この 2 つの列は、参照先テーブル Product に複数の列からなるプライマリ キーを構
成するため、構文エラーが返されます。STAR インデックスを作成する唯一の方法
は、2 つのフォーリン キー列を区別するフォーリン キー制約名を指定することで
す。
create star index prod_sales_ix on sales (sales_product_fkc);
sales_product_fkc 制約は、Sales テーブルに対する CREATE TABLE 文で指定されるこ
とに注意してください。詳細については、8-149 ページを参照してください。
セグメント定義
セグメント定義は、テーブル データおよびシステムが生成した B-TREE インデック
スに、名前付きセグメントとデータの格納範囲を割り当てます。データベース オブ
ジェクトに対してどのようなときにセグメントを指定するかについては、
『Administrator's Guide』を参照してください。
テーブルはすべて、複数のセグメントに分割することができます。デフォルト設定
では、プライマリ キーを持つテーブルのデータと、システムが生成した B-TREE イ
ンデックスを別のセグメントに格納します。データにもインデックスにもセグメン
ト指定をしなかった場合は、システムがデフォルト セグメントを割り当てます。
8-150 SQL Reference Guide
セグメント定義
CREATE TABLE 文全体の構文ダイアグラムと、セグメント定義構文の参照ポイント
を示します。
CREATE TABLE
(
<table_name>
<column_definitions>
)
<segment_specification>
MAXROWS PER SEGMENT
MAXSEGMENTS
<maxrows>
<maxsegments>
次にセグメント定義の構文ダイアグラムを示します。
<segment_name>
DATA IN
<segment_range_spec>
SEGMENT BY HASH
,
(
)
<segment_name>
<segment_range_spec>
SEGMENT BY HASH
PRIMARY INDEX IN
<segment_name>
<segment_range_spec>
SEGMENT LIKE DATA
,
(
<segment_name>
)
<segment_range_spec>
SEGMENT LIKE DATA
SQL 文と RISQL 拡張機能
8-151
セグメント定義
DATA IN
<segment_name(s)>
データを格納する 1 つ以上のセグメントの名前を指定しま
す。どのテーブルも、複数のセグメントに格納することが
できます。
■
■
■
PRIMARY INDEX
IN <segment_name(s)>
1 つのセグメントを指定した場合や、デフォルト
によって 1 つのセグメントが作成された場合は、
テーブル全体がそのセグメントに格納されます。
複数のセグメントを指定すると、セグメント範囲
の指定に基づいて、各セグメントにデータが格納
されます。各セグメント名をカンマで区切り、セ
グメント名リストをかっこで囲んでください。
セグメント名を指定しないと、1 つの物理格納ユ
ニット (PSU) からなるデフォルト セグメントに
テーブルが作成されます。
プライマリ キー インデックスを格納する 1 つ以上のセグメ
ントの名前を指定します。
■
■
■
1 つのセグメントを指定すると、インデックス全
体がそのセグメントに格納されます。
複数のセグメントを指定すると、セグメント範囲
の指定に基づいて、各セグメントにインデックス
が格納されます。各セグメント名をカンマで区切
り、セグメント名リストをかっこで囲んでくださ
い。
名前を指定しない場合、システムがプライマリ
キー インデックスのデフォルト セグメントを作成
します。
名前付きセグメントにインデックスを作成する方法につい
ては、8-105 ページ「CREATE INDEX」を参照してくださ
い。
8-152 SQL Reference Guide
セグメント定義
例 - デフォルト セグメントと名前付きセグメントの使い方
このステートメントで作成されるテーブルは、デフォルト セグメントに格納されま
す。
create table product(
prodkey integer not null,
classkey integer not null,
product char(30),
vendor character(40),
constraint prod_pkc primary key (prodkey, classkey)
constraint prod_fkc foreign key (classkey)
references class (classkey))
次のステートメントで作成されるテーブルは、名前付きセグメントに格納されま
す。データは dataseg セグメント、プライマリ キー インデックスは indexseg セグメ
ントに格納されます。
create table market(
mktkey integer not null,
city char(40),
state character(40),
constraint mkt_pkc primary key (mktkey) )
data in dataseg
primary index in indexseg
<segment_
range_spec>
データやインデックスのセグメント化のために行データの範囲を割
り当てます。セグメント範囲指定の構文については、8-154 ページ
を参照してください。
SEGMENT BY ハッシュ手法によるセグメント化により、各セグメントにデータを
HASH
均等に格納します。ある列の値に基づいてデータを分散するのでは
なく、各行のすべての値を使ってデータを分散します。ハッシュ手
法では、データがランダムに分散されるため、1 つのセグメントに
データが集中するようなことはありません。このオプションは、イ
ンデックスには使用できません。
ハッシュ手法によるセグメント化には、セグメント化の基準列や範
囲の指定は不要です。
ハッシュ手法で作成されたテーブルのセグメントは、ALTER
SEGMENT 文のオプション DETACH、ATTACH、CHANGE RANGE、
または SEGMENT BY で変更することはできません。
この例では、3 つのセグメントにデータが均等に格納されます。
data in (seg1, seg2, seg3)
segment by hash
SQL 文と RISQL 拡張機能
8-153
セグメント定義
SEGMENT
LIKE DATA
プライマリ キー インデックスのセグメント範囲指定が、データ
のセグメント範囲指定と同じであることを指定します。このオ
プションが有効なのは、次の場合のみです。
■
ハッシュではなく、値によってデータがセグメント化
されている。
プライマリ キーの先頭列が、データのセグメント化の
基準列と同じである。
プライマリ キー インデックスとデータに、同数のセグ
メントが指定されている。
■
■
セグメント範囲指定
次にセグメント範囲指定の構文ダイアグラムを示します。セグメント範囲指定とセ
グメント指定との関係は、8-150 ページを参照してください。
(
SEGMENT BY VALUES OF
RANGES
(
MIN :<literal>
<segmenting_column>
,
)
<literal>:MAX
<literal>:<literal>
)
,
MIN:MAX
SEGMENT BY
VALUES OF
<segmenting_
column>
8-154 SQL Reference Guide
<segmenting_column> の値に基づいて、テーブル データまたはプラ
イマリ キー インデックスをセグメントに分散して格納します。
データのセグメント化を行うには、セグメント化の基準となる列
を NOT NULL に指定する必要があります。プライマリ キー イン
デックスのセグメント化は、プライマリ キー インデックスの先頭
列を基準列に指定してください。
セグメント定義
例 - セグメント化基準列の指定
この例では、Mktkey 列が基準列です。Mktkey 列の値に基づいて、seg1_ix、
seg2_ix、seg3_ix の各セグメントにインデックスが格納されます。
primary index in (seg1_ix, seg2_ix, seg3_ix)
segment by values of (mktkey)
ranges (...)
次の例では、1 つのセグメントしか指定していませんが、セグメント化の基準列も
指定しています。セグメントが 1 つしかないテーブルやインデックスにも指定して
おくと、ALTER SEGMENT 文によってセグメントを追加する時に役立ちます。
data in (seg1)
segment by values of (prodkey)
ranges (...)
RANGES
(MIN...MAX)
各セグメントに格納するセグメント化の基準列の値の範囲を指定し
ます。
データとプライマリ キー インデックスの両方について、基準列の
値に基づいて範囲を指定します。データとプライマリ キー イン
デックスの値の範囲は、基準列のデータ型によって決まります。た
とえば、基準列が整数 (INTEGER) 型の場合は、-2,147,483,648 ∼
2,147,483,647 の範囲で指定します。基準列が文字 (CHAR) 型または
可変長文字 (VARCHAR) 型の場合は、文字値の範囲を指定してくだ
さい。
テーブル データやプライマリ キー インデックスを複数のセグメン
トに格納する場合は、セグメントごとに範囲を指定してください。
セグメントの範囲は、次のように指定します。セグメント範囲の上
限と下限をコロン (:) で区切り、各範囲指定をカンマで区切ります。
範囲指定は、MIN キーワードで始め、MAX キーワードで終わりま
す。昇順に指定し、値の重複やすき間がないようにします。各セグ
メントの上限は、次のセグメントの下限と一致する必要がありま
す。各セグメントには、下限の値以上で上限の値未満のデータが格
納されます。
SQL 文と RISQL 拡張機能
8-155
セグメント定義
例
データまたはプライマリ キー インデックスの範囲を指定する例を示します。デー
タ ( またはインデックス ) は、State 列の値に基づいて 3 つのセグメントに格納され
ます。第 1 セグメントの上限 (AZ) は、第 2 セグメントの下限と一致していることに
注意してください。テーブルやインデックスにデータを挿入すると、最小の ASCII
値から AY までの値が第 1 セグメント、AZ から MN までの値が第 2 セグメント、
MO から最大の ASCII 値までの値が第 3 セグメントに挿入されます。
segment by values of (state)
ranges (min:'AZ', 'AZ':'MO', 'MO':max)
データまたはプライマリ キー インデックスの範囲を指定する例をもう 1 つ示しま
す。データは、Mktkey 列の値に基づいて 4 つのセグメントに格納されます。
Mktkey 列の値が 1000 である行をテーブルに挿入すると、その行は第 2 セグメント
に格納されます。
segment by values of (mktkey)
ranges (min:1000, 1000:2000, 2000:3000, 3000:max)
図 8-12 に、誤った指定例を示します。第 1 セグメントの範囲が、第 2 セグメントの
範囲と重複していて、第 2 セグメントと第 3 セグメントが連続していません。
図 8-12
範囲指定のエラー
/*Error*/
segment by values of (mktkey)
ranges (min:1000, 500:2000, 3000:4000, 4000:max)
MIN、MAX
範囲の最初と最後を示す値を指定します。最初の範囲の最小値に
は、セグメント化の基準列の最小値を示す MIN キーワードを指定
し、最後の範囲の最大値には、セグメント化の基準列の最大値を示
す MAX キーワードを指定します。
4 つのセグメントにデータまたはプライマリ キー インデックスを格納する例を示し
ます。Mktkey は、INTEGER データ型のセグメント化の基準列です。MIN キーワー
ドは、Mktkey の値が 500 未満であるすべての行を第 1 セグメントに格納することを
指定します。MAX キーワードは、Mktkey の値が 4,000 ∼ 2,147,483,647 の範囲にあ
るすべての行を最終セグメントに格納することを指定します。
segment by values of (mktkey)
ranges (min:500, 500:2000, 2000:4000, 4000:max)
<literal>
8-156 SQL Reference Guide
セグメントの範囲を示す英数字の定数値を指定します。定数の詳細
については、2-9 ページを参照してください。
セグメント定義
例
次の例では、SET DEFAULT SEGMENT SIZE 文を使用して、デフォルト セグメント
に領域を割り当てます。さらに SET DEFAULT PSU EXTENDSIZE 文を使用して、
データ セグメントがいっぱいになったときに PSU を拡張するための増分サイズを
指定します。
SET DEFAULT SEGMENT SIZE 文により、作成されるデフォルト PSU の数が決まり
ます。2GB のデフォルト セグメントごとに 1 つのデフォルト PSU が作成されます。
次の 2 つのステートメントで、DEFAULT SEGMENT SIZE を 5GB、DEFAULT PSU
EXTENDSIZE を 256KB に設定できます。
SET DEFAULT SEGMENT SIZE 5G
SET DEFAULT PSU EXTENDSIZE 256K
この 2 つのステートメントで、次のように 3 つの PSU がデフォルト セグメントに割
り当てられます。
図 8-13
3 つの PSU
PSU 1
PSU 2
PSU 3
init = 16 KB
init = 16 KB
init = 16 KB
extend = 256 KB
extend = 256 KB
extend = 256 KB
max = 2 GB (-8 KB)
max = 2 GB (-8 KB)
max = 1 GB (-8 KB)
次のオプションを rbw.config ファイルに設定した場合も結果は同じです。
OPTION DEFAULT_SEGMENT_SIZE 5G
OPTION DEFAULT_PSU_EXTENDSIZE 256K
SQL 文と RISQL 拡張機能
8-157
セグメント定義
その他の CREATE TABLE 例
次のステートメントは、データとプライマリ キー インデックスにデフォルト セグ
メントを 1 つずつ使用するテーブルを作成します。
create table sales (
mktkey integer not null,
prodkey integer not null,
perkey integer not null,
punits numeric (9,2),
units integer,
dollars integer,
constraint sales_pkc primary key (mktkey, prodkey,
perkey),
constraint sales_fkc1 foreign key (mktkey) references
market (mktkey),
constraint sales_fkc2 foreign key (prodkey) references
product (prodkey),
constraint sales_fkc3 foreign key (perkey) references
period (perkey) )
次のステートメントは、名前付きセグメントに格納されるテーブルを作成します。
Prodname 列には No Name というデフォルト値が割り当てられます。Prod_Exmpl
テーブルに行を挿入するときに、Prodname 列の値を指定しないと、No Name が
Prodname 列に挿入されます。Descript 列の値を指定しないと、Descript 列は NULL
に設定されます。
create table product_exmpl (
prodkey integer not null,
prodname char(30) default 'No Name',
descript character(40),
constraint prod_pkc primary key (prodkey) )
data in dataseg
primary index in indexseg
maxsegments 2
maxrows per segment 50000
8-158 SQL Reference Guide
セグメント定義
次のステートメントは、データとプライマリ キー インデックスの両方を複数の名
前付きセグメントに格納するテーブルを作成します。
create table orders (
invoice integer not null,
line_item integer not null,
perkey date not null,
prodkey integer not null,
classkey integer not null,
custkey integer not null,
promokey integer not null,
dollars integer,
weight integer,
constraint orders_pkc primary key (invoice, line_item),
constraint orders_fkc1 foreign key (perkey) references
period (perkey),
constraint orders_fkc2 foreign key (prodkey, classkey)
references product (prodkey, classkey),
constraint orders_fkc3 foreign key (custkey) references
customer (custkey),
constraint orders_fkc4 foreign key (promokey) references
promotion (promokey) )
data in (orders_data1, orders_data2, orders_data3)
segment by values of (perkey)
ranges (min:'04-01-1999',
'04-01-1999':'07-01-1999',
'07-01-1999':max)
primary index in (orders_ix1, orders_ix2, orders_ix3)
segment by values of (invoice)
ranges (min:1000, 1000:3000, 3000:max)
maxsegments 3
maxrows per segment 50000
SQL 文と RISQL 拡張機能
8-159
CREATE TEMPORARY TABLE
CREATE TEMPORARY TABLE
CRATE TEMPORARY TABLE 文は、テーブル自身が作成されたセッションの間だけ
アクセスできるテーブルを指定します。テーブルはセッション中だけ、あるいは
DROP TABLE 文で削除するまで存在します。テーブルのプライマリ キーに B-TREE
インデックスが自動的に作成されます。
テンポラリ テーブルは、次の特性を持っています。
■
■
■
■
■
■
■
テンポラリ テーブルは、それ自身が作成された SQL セッションで排他的
に使用されます。セッションの外部からは検索できず、テンポラリ テーブ
ルのデータをほかのセッションと共有しません。
テンポラリ テーブルは、データベース内の任意のテーブルに結合できま
す。インデックスおよび列のデフォルト値をテンポラリ テーブルに対して
指定でき、テーブル存在中は存続します。
テンポラリ テーブルは、後のセッションで作成されるパーマネント テー
ブルと同名でもかまいませんが、同じセッションまたは前のセッションで
作成されたパーマネント テーブルと同名であってはなりません。
テンポラリ テーブルのユーザが実行するすべてのクエリは、自動的にその
テーブルをクエリの対象とします。同名のパーマネント テーブルが存在し
たり、後にほかのセッションで作成される場合でも同様です。テンポラリ
テーブルは常にパーマネント テーブルに優先します。
ほかのユーザはテンポラリ テーブルにアクセスできないため、更新中は
ロックする必要はありません。
システム テーブルの競合を避けるため、テンポラリ テーブルはシステム
テーブルに永続的にはカタログ化されません。テンポラリ テーブルの情報
は、ユーザ セッション中はメモリに格納され、システム テーブルに登録
されますが、セッションが終了するときに削除されます。
テンポラリ テーブルは、SQL セッションの最後に自動的に削除されます。
ただし、DROP TABLE 文でセッション中に削除することもできます。
IBM Red Brick Warehouse テンポラリ テーブルは ANSI SQL92 標準に準拠していま
す。
8-160 SQL Reference Guide
CREATE TEMPORARY TABLE
アクセス権
テンポラリ テーブルを作成するユーザは、次の中で少なくとも 1 つの条件を満たし
ている必要があります。
■
■
■
DBA ロールのメンバーであるか、RESOURCE システム ロール権限を持っ
ていること
GRANT_TEMP_RESOURCE_TO_ALL オプションにより CONNECT システ
ム ロール権限を持っていること
明示的に付与されるかユーザが作成したロールのメンバーであることによ
り、CREATE_ANY 権限、CREATE_OWN 権限、または TEMP_RESOURCE
権限を持っていること
構文
次に CREATE TEMPORARY TABLE 文の構文ダイアグラムを示します。
<table_name>
CREATE TEMPORARY TABLE
(
<table_name>
<column_definitions>
テーブル名は、次の条件を満たしている必要があります。
■
■
<column_
definitions>
)
セッションごとに一意であること。同じデータベースにア
クセスするほかのセッションで作成されるテンポラリ テー
ブルの名前と重複しない名前である必要があります。
有効なデータベース識別子であること。
テーブルの各列を定義します。CREATE TEMPORARY TABLE 文で
列を定義するとき、プライマリ キーは定義できますが、フォーリン
キー参照は定義できません。MAXSEGMENTS および MAXROWS
PER SEGMENT の指定は使用できません。列の定義の説明について
は、8-139 ページを参照してください。
SQL 文と RISQL 拡張機能
8-161
CREATE TEMPORARY TABLE
使用上の注意
パーマネント テーブルとテンポラリ テーブルの次の相違点に注意してください。
■
■
■
■
■
■
テンポラリ テーブルはプライマリ キー定義をサポートしますが、フォー
リン キー参照をサポートしません。
テンポラリ テーブルは、ほかのテーブルを参照したり、ほかのテーブルか
ら参照されたりすることができないため、STAR インデックスの作成をサ
ポートしません。
テンポラリ テーブルは、データおよびインデックスのセグメント指定をサ
ポートしません。データ、またはインデックスのセグメント指定は、それ
ぞれ別々のデフォルト セグメントに格納する必要があります。
テンポラリ テーブルには、MAXSEGMENTS および MAXROWS PER
SEGMENT の指定は使用できません。
テンポラリ テーブルは、Table Management Utility (TMU) でロードすること
ができません。
テンポラリ テーブルでは、次の操作は実行できません。
❑ ALTER TABLE
❑ ALTER INDEX
❑ ALTER SEGMENT
❑ CREATE VIEW
❑ CREATE SYNONYM
❑ CREATE STAR INDEX
❑ GRANT PRIVILEGE
❑ REVOKE PRIVILEGE
例
次の例は、テンポラリ テーブルを作成します。
create temporary table tea_list(
name char(10) not null,
type char(5) not null,
stock_no int not null,
constraint temptable_pkc primary key (name, stock_no))
8-162 SQL Reference Guide
CREATE VIEW
CREATE VIEW
CREATE VIEW 文は、既存のテーブルまたはビューからデータを抽出するクエリ式
の結果を読み取り専用テーブルにします。
CREATE VIEW 文は、クエリ式を読み込み、使用されているマクロを展開し、効率
的な内部形式で式を格納します。このため、既存のビューが参照するマクロやテー
ブルが変更されても、ビューには変更が反映されません。オリジナル テキストは表
示のためにだけ、RBW_VIEWTEXT テーブルに格納されます。
ビューの作成後にテーブルやマクロを修正した場合、変更をビューに反映させるに
は、ビューを削除し、再作成してください。
USING 句を使用した CREATE VIEW 文は事前計算ビューを作成します。事前計算
ビューは、ビューに指定したクエリの結果を格納している基本テーブルに関連付け
られたビューです。通常のビューの結果は、このように事前計算されません。事前
計算ビューの詳細については、
『IBM Red Brick Vista User’s Guide』を参照してくださ
い。
アクセス権
ビューを作成するユーザは、次の中で少なくとも 1 つの条件を満たしている必要が
あります。
■
■
DBA システム ロールか、RESOURCE システム ロールのメンバーであるこ
と
明示的に付与されるかユーザが作成したロールのメンバーであることによ
り、CREATE_ANY 権限か CREATE_OWN 権限を持っていること
構文
次に CREATE VIEW 文の構文ダイアグラムを示します。
CREATE VIEW
<view_name>
,
(
AS
)
<column_name>
<query_expression>
<precomputed_query_expression>
<using_clause>
SQL 文と RISQL 拡張機能
8-163
CREATE VIEW
<view_name>
作成するビューの名前を指定します。データベースにあるほかの
ビュー名やテーブル名と重複しないデータベース識別子を指定して
ください。ビューは、INSERT 文、UPDATE 文、DELETE 文で修正
することはできません。
<column_name> ビューの列名を指定します。基本テーブルの列名と同じでも、違っ
ていてもかまいません。列名リストを指定する場合は、SELECT 文
で表したクエリ式が返す列と同数の列を指定する必要があります。
列名リストを指定しないと、ビューの列名は基本テーブルと同じに
なります。次のようなクエリ式を使用する場合は、列名リストを指
定する必要があります。
■
■
共通の列名を持つテーブルを参照するクエリ式。共通の列
名を持つテーブルを参照しないと、列名が重複している場
合に参照があいまいになります。
たとえば、Sales テーブルと Store テーブルの両方に
Storekey という列があるとします。CREATE VIEW 文のク
エリ式が、Sales テーブルと Store テーブルの両方を参照す
る場合、列名リストを指定しないと、どちらの Storekey
列であるかが特定できません。
名前のない列を使用するクエリ式。たとえば、次に示すよ
うなエリアスのない集約関数がクエリ式に含まれる場合、
列には名前がありません。
sum(dollars)
<query_
expression>
ビューの内容を定義します。ビューが参照されるたびに、クエリ式
と同等の SELECT 文が返すようなリザルト テーブルが返されます。
クエリ式の定義と詳細は、第 7 章「クエリ式」を参照してくださ
い。
<precomputed_ 通常の CREATE VIEW 文の <query_expression> よりも範囲を限定し
query_
たクエリ式を指定します。サブクエリ、HAVING 句、WHEN 句を
expression>
使用することはできません。事前計算クエリ式の構文は次のとおり
です。
8-164 SQL Reference Guide
CREATE VIEW
,
<column_name>
SELECT
<aggregate_column>
,
<table_name>
FROM
AND
WHERE
<join_predicate>
,
GROUP BY
<column_name>
SELECT
FROM 句に指定したテーブルから選択された列です。
<column_name>
テーブルから選択された列を指定します。SELECT リストで指
定したすべての列名 ( 集約列名以外 ) は、GROUP BY 句でも指
定する必要があります。SELECT リストで列エリアスを使用で
きます。
SQL 文と RISQL 拡張機能
8-165
CREATE VIEW
<aggregate_column> 次の形式で列を指定します。
<set_function>(<expression>)
この例の <set_function> は次の集約関数の一つです。
■
■
■
■
SUM
MIN
MAX
COUNT
<expression> は、ビュー定義、定数またはその両方の FROM 句
に詳細ファクト テーブルの列名を使用した単項式または多項
式です。
次の式は、Sales テーブルがビュー定義の FROM 句で指定した
詳細ファクト テーブル名である場合の、有効な集約列の例で
す。
sum(sales.dollars)
min(sales.dollars/sales.quantity)
max((sales.quantity) * 10)
SUM (DISTINCT) 関数、COUNT (DISTINCT) 関数および
COUNT (*) 関数もサポートされます。
次の制約に注意してください。
■
■
■
■
8-166 SQL Reference Guide
COUNT 関数の引数として使用する式は、単項式であ
る必要があります。
スカラ関数、RISQL 表示関数、サブクエリを使用し
た式はサポートされません。
SUM 関数の式は数値式である必要があります。
AVG 集約関数は使用できません。ただし、適切な集
約テーブルに同じ列の SUM 値または COUNT 値があ
る場合は、AVG クエリを書き換えることができます。
CREATE VIEW
■
DISTINCT 関数は COUNT 関数および SUM 関数の引数とし
てだけ使用できます。SELECT DISTINCT クエリは使用で
きません。
集約関数の詳細については、第 4 章 「集約関数」を参照してくださ
い。式の詳細については、第 3 章「式と条件」を参照してくださ
い。
FROM
SELECT リストの列から派生したテーブルです。FROM 句の各テー
ブルは、WHERE 句の結合述部を使用して、FROM 句のほかのテー
ブルのいずれか 1 つからだけ参照できます。結合は、FROM 句では
指定できず、WHERE 句で指定する必要があります。
<table_name>
詳細テーブルを指定します。システム テーブル、ビュー、クエリ式
から派生したテーブルおよび集約テーブルは使用できません。
シノニムはディメンジョン テーブルにだけ使用できます。
テーブルの相関名は使用できます。
WHERE
ファクト テーブルをディメンジョン テーブルおよびアウトボード
テーブルに結合する結合述部を指定します。事前計算ビューのクエ
リ式では、結合述部は、フォーリン キーまたはプライマリ キー関
係に従ってテーブルを結合する必要があります。これらの述部は等
号で表現する必要があります。
外部結合述部は、事前計算ビューの定義では指定できません。
GROUP BY
SELECT 文で定義した列名です。SELECT 文のすべての非集約列を
GROUP BY 句に指定する必要があります。
<using_clause> 次に USING 句の構文ダイアグラムを示します。USING 句と
CREATE VIEW 文との関係は、8-163 ページを参照してください。
,
USING
<table_name>
(
<column_name>
)
SQL 文と RISQL 拡張機能
8-167
CREATE VIEW
USING
テーブルおよび列を識別し、ビューをテーブルにリンクします。
ビューは、LOAD DATA 操作または INSERT 文でテーブルにデータ
が挿入されるまでは、事前計算されません。
<table_name>
ビューに関連付けられたテーブルの名前を指定します。作成する
個々の事前計算ビューには、個別のテーブルを使用する必要があ
ります。
シノニムを使用して事前計算ビューを作成することはできません。
<column_name> ビューの列と 1 対 1 で対応するテーブルの列名を指定します。列
名リストは必須です。
シリアル (SERIAL) 型は、ビュー列、ビュー テーブル列、述部な
どの事前計算ビュー定義では許可されません。
事前計算ビューの使用上の注意
CREATE VIEW...USING 文は、次の制約を満たしている必要があります。
■
■
■
■
■
検索項目リストには、GROUP BY に指定した列またはグルーピング列を最
低 1 つ指定する必要があります。
検索項目リストに指定した列は、GROUP BY 句に指定される列と一致する
必要があります。
結合述部は、プライマリ キー / フォーリン キー関係と等号による制約を反
映している必要があります。
ビューの列数は、USING 句のテーブルに指定された列数と一致する必要が
あります。
テーブル内の名前付き列のデータ型は、ビュー内の列のデータ型との互換
性が必要です。非数値データ型は正確に一致している必要があります。た
とえば、CHAR(3) の列はビューの CHAR(4) の列に対応させることができ
ません。
数値データ型は、正確に一致する必要はありません。ただし、テーブルの
列がビューで定義された列値を格納できない場合は、ビュー作成時に警告
メッセージが表示されます。この例は、8-170 ページを参照してください。
重要 : デフォルトでは集約保守は新しい事前計算ビューの保守を行います。
8-168 SQL Reference Guide
CREATE VIEW
例
次のビューは、紅茶製品 ( 計り売りまたはパッケージ入り ) に分類されている製品
だけを格納する論理テーブルを定義します。
create view tea_list
as select product.classkey as c, product.prodkey as p,
prod_name as name
from product join class on product.classkey =
class.classkey
where class.classkey in (2, 5);
select * from tea_list;
C
2
2
2
2
2
2
2
2
2
2
5
5
5
5
5
5
5
5
5
5
P
0
1
10
11
12
20
21
22
30
31
0
1
10
11
12
20
21
22
30
31
NAME
Darjeeling Number 1
Darjeeling Special
Assam Grade A
Assam Gold Blend
Earl Grey
English Breakfast
Irish Breakfast
Special Tips
Gold Tips
Breakfast Blend
Darjeeling Number 1
Darjeeling Special
Assam Grade A
Assam Gold Blend
Earl Grey
English Breakfast
Irish Breakfast
Special Tips
Gold Tips
Breakfast Blend
各店舗を地域別にグループ分けし、各地域の店舗数をカウントするビューの例を示
します。
create view regions (region, store_count)
as select region, count(name)
from market join store on market.mktkey = store.mktkey
group by region;
select * from regions;
REGION
West
South
Central
North
STORE_COUNT
7
4
4
4
SQL 文と RISQL 拡張機能
8-169
CREATE VIEW
次のステートメントは、集約テーブルに関連付けられた事前計算ビューを作成しま
す。
create view company_sales (period, class_no, product_no,
units, amount) as
select perkey, classkey, prodkey, sum (quantity) as units,
sum (dollars) as amount
from sales
group by perkey, prodkey, classkey
using aggr_sales_table (perkey, classkey, prodkey, quantity,
dollars)
次のステートメントは、派生ディメンジョン テーブルに関連付けられた事前計算
ビューを作成します。このため、クエリ式には GROUP BY に指定した列だけが使用
されます。集約列は使用されません。派生ディメンジョンの詳細については、
『IBM Red Brick Vista User’s Guide』を参照してください。
create view pd_qtr_view as
select qtr, year
from period
group by qtr, year
using period_qtr (qtr, year)
次の例は、事前計算ビューとそれに関連付けられたテーブルのデータ型には互換性
が必要であることを示します。テーブルの数値列をビューの数値列に対応させる場
合、2 つのデータ型が正確に一致しない場合は警告メッセージが表示されます。
create table agg1 (perkey int, dollars dec(7,2))
create view agg1_view(perkey, dollars)
as select period.perkey, sum(dollars)
from sales, period
where period.perkey = sales.perkey
group by period.perkey
using agg1(perkey, dollars)
** WARNING ** (1931) Datatypes of related columns in the view
(AGG1_VIEW.DOLLARS, datatype DECIMAL (13,2)) and table
(AGG1.DOLLARS, datatype DECIMAL (7,2)) might cause precision
loss, overflow, or underflow.
このメッセージは、単なる警告です。テーブルおよびビューは、両方とも作成され
ています。
事前計算ビューを作成、選択する方法の詳しい例については、『SQL Self-Study
Guide』を参照してください。また、『IBM Red Brick Vista User’s Guide』にも事前計
算ビューの例があります。
8-170 SQL Reference Guide
DELETE
DELETE
DELETE 文は、指定した基本テーブルから任意の行を削除します。
アクセス権
テーブルから行を削除するユーザは、次の中で少なくとも 1 つの条件を満たしてい
る必要があります。
■
■
■
■
DBA システム ロールのメンバーであること
明示的に付与されるかユーザが作成したロールのメンバーであることによ
り、MODIFY_ANY 権限を持っていること
テーブルの作成者であること
テーブルに対する DELETE 特権を持っていること
構文
次に DELETE 文の構文ダイアグラムを示します。
DELETE FROM
<table_name>
,
USING
WHERE
<search_condition>
<table_reference>
OVERRIDE REFCHECK
SQL 文と RISQL 拡張機能
8-171
DELETE
<table_name>
行を削除するテーブル名、テンポラリ テーブル名、またはシノニ
ム名を指定します。<table_name> にビュー名は指定できません。
USING
行削除の追加基準として使用するテーブルを 1 つまたは複数指定
<table_reference> します。<table-reference> で指定された複数のテーブルは結合さ
れ、WHERE 句で指定されたとおりに <table-name> から行が削除
されます。<table-reference> は <table-name> も含んでいる必要があ
ります。このセクションの末尾にある例を参照してください。
USING <table-reference> 句は、より高い性能をもつサブクエリの
代用として使用します。
<table-reference> で指定されるテーブルは、基本テーブルまたはシ
ノニムである必要があります。
DELETE 操作の USING 句でターゲット テーブルに相関名が割り
当てられている場合は、FROM 句でもテーブル名そのものではな
く相関名でテーブルを指定します。たとえば、次のようになりま
す。
delete from sales_old
using sales as sales_old, period
where...
<table_reference> 句の詳細は、7-13 ページ「テーブル参照」を参
照してください。
WHERE
DELETE 文の操作対象を示す検索条件を指定します。WHERE 句
を指定しないと、すべての行がテーブルから削除されます。指定
した場合は、検索条件を満たす行だけが削除されます。検索条件
からは、指定したテーブルしか参照できません。検索条件の詳細
については、3-10 ページを参照してください。WHERE 句の詳細
については、7-36 ページを参照してください。
OVERRIDE
REFCHECK
DELETE 文の実行時に、参照整合性を検証しないように指示しま
す。参照整合性の検証を無効にするのは、主に、参照されていな
い行をテーブルから削除する場合です。
この句は、CREATE TABLE 文で指定したデリート モードに優先
します。参照整合性チェックを省略すると非常に高速になります
が、データベースが不整合な状態になり、再編成による参照整合
性の確認が必要になることがあります。
OVERRIDE REFCHECK を使用すると、クエリが誤った結果を返
したり、参照整合性違反が発生する場合があります。
8-172 SQL Reference Guide
DELETE
使用上の注意
削除操作中の参照整合性は、テーブルの作成時に指定したデリート モードに応じ
て、リストリクト デリート (NO ACTION) またはカスケード デリート (CASCADE)
で維持されます。複数の参照元テーブルが削除に関わり、各テーブルのデリート
モードが異なる場合は、全体の削除動作がリストリクト デリートになります。NO
ACTION は CASCADE よりも優先され、この優先順位は参照先テーブルと参照元
テーブルに再帰的に適用されます。
DELETE 文を実行すると、事前計算ビューに対して集約保守が実行されることがあ
ります。集約保守の詳細については、
『IBM Red Brick Vista User’s Guide』を参照して
ください。
重要 : カスケード デリート操作については自動保守が実行されません。
複数の DELETE 文を実行する場合は、ほかのユーザによるテーブルのアクセスを制
限する LOCK ( テーブルのロック ) 文を使用すると効率的になります。LOCK ( テー
ブルのロック ) 文については、8-221 ページ「LOCK ( テーブルのロック )」を参照
してください。データベースの再編成と再ロード、カスケード デリートとリストリ
クト デリートについては、
『Administrator's Guide』を参照してください。
SELECT 文では外部結合がサポートされる ( ただし、外部結合は使用しないことが
強く推奨される ) のに対して、DELETE 文では WHERE 句での外部結合がサポート
されません。外部結合が必要な場合は、USING 句で指定してください。
USING 句では、変更するテーブルの指定には次の制限があります。
■
■
■
右外部結合で指定される右のテーブルとしては指定できません。
左外部結合で指定される左のテーブルとしては指定できません。
フル外部結合のどの場所にも指定できません。
DELETE 文で結合操作を実行する場合は、ステートメントで設定された選択基準
が、ターゲット テーブルの同じ行を複数回指定する可能性があります。この場合
は、最初に選択されたときに行が削除され、その後の指定は無視されます。行を削
除すると参照整合性違反が発生する場合は、削除できなかった行として統計にカウ
ントされ、操作の最後に報告されます。削除されなかった行と削除された行の合計
は、テーブル内の行数を超えることがあります。その場合は、状況を説明するメッ
セージが表示されます。
DELETE 文を実行すると、事前計算ビューに対して集約保守が実行されることがあ
ります。集約保守の詳細については、
『IBM Red Brick Vista User’s Guide』を参照して
ください。
SQL 文と RISQL 拡張機能
8-173
DELETE
例 : DELETE
次の DELETE 文は、WHERE 句に指定した検索条件を満たす行を Product テーブル
から削除します。
delete from product
where prod_name like 'Allspice%'
and pkg_type like 'Sealed%'
次の例は、USING 句の使い方を示しています。この例では、1998 年 1 月 15 日より
前のプロモーションをすべて削除します。
delete from promotion
using promotion, period, sales
where period.perkey = sales.perkey
and promotion.promokey = sales.promokey
and period.date < DATE '1998-01-15'
次の例は、CREATE TABLE 文の ON DELETE オプションの指定により、削除にとも
なって参照元テーブルに対する参照整合性がどのように維持されるかを示していま
す。Fact1 テーブルと Fact2 テーブルは、どちらも Dim1 テーブルと Dim2 テーブル
を参照しますが、Dim1 テーブルの参照には同じ ON DELETE 句を使用しており、
Dim2 テーブルの参照では異なる内容の ON DELETE 句を使用しています。
create table dim1(
pkey1 int not null,
primary key (pkey1)
)
create table dim2(
pkey2 int not null,
primary key (pkey2)
)
create table fact1(
pkey1 int not null,
pkey2 int not null,
primary key (pkey1, pkey2),
foreign key (pkey1) references dim1(pkey1)
on delete cascade,
foreign key (pkey2) references dim2(pkey2)
on delete cascade
)
create table fact2(
pkey1 int not null,
pkey2 int not null,
primary key (pkey1, pkey2),
foreign key (pkey1) references dim1(pkey1)
on delete cascade,
foreign key (pkey2) references dim2(pkey2)
on delete no action
)
8-174 SQL Reference Guide
DELETE
Dim1 に対する削除動作では、指定した行が Dim1 から削除されると同時に、削除さ
れる行を参照する Fact1 と Fact2 の行も削除されます。
Dim2 に対する削除動作は、Dim2 の参照に対する ON DELETE 句を、Fact1 と Fact2
のどちらについても NO ACTION に設定した場合と同様になります。Fact1 の ON
DELETE 句には、Dim2 の参照についてカスケード デリート モードが指定されてい
ますが、Fact1 または Fact2 が参照する Dim2 の行は削除されません。
次の例は、NO ACTION が CASCADE よりも優先され、この優先順位が再帰的に適
用される場合を示しています。
create table dim1_1(
pkey1_1 int not null,
primary key(pkey1_1)
)
create table dim1(
pkey1 int not null,
primary key (pkey1),
fkey1 int not null,
foreign key (fkey1) references dim1_1(pkey1_1)
on delete cascade
)
create table dim2(
pkey2 int not null,
primary key (pkey2)
)
create table fact1(
pkey1 int not null,
pkey2 int not null,
primary key (pkey1, pkey2),
foreign key (pkey1) references
on delete cascade,
foreign key (pkey2) references
on delete no action
)
create table fact2(
pkey1 int not null,
pkey2 int not null,
primary key (pkey1, pkey2),
foreign key (pkey1) references
on delete no action,
foreign key (pkey2) references
on delete cascade
)
dim1(pkey1)
dim2(pkey2)
dim1(pkey1)
dim2(pkey2)
SQL 文と RISQL 拡張機能
8-175
DROP HIERARCHY
Dim1_1 に対する削除動作で、Dim1 にはカスケード デリートが指定されています
が、Fact2 には NO ACTION が指定されているため、すべてのテーブルについて NO
ACTION を指定した場合と同じ削除動作になります。つまり、Dim1_1 の行を参照
する Dim1 の行が、Fact2 の行によって参照される場合、Dim1_1 の行は削除されま
せん。さらに、Dim1_1 の行を参照する Dim1 の行が、Fact1 の行によって参照され
る場合も、Dim1_1 の行は削除されません。これは、1 つの DELETE 文に、リスト
リクト デリートとカスケード デリートを組み合わせて指定した場合は、すべての
削除動作がリストリクト モードで実行されるためです。
プライマリ キーとフォーリン キーの従属関係にリストリクト デリート (NO
ACTION) を指定した場合は、すべての従属関係にリストリクト デリートを暗黙的
に指定したことになります。
DROP HIERARCHY
DROP HIERARCHY 文は、階層構造名で指定された既存の階層構造および関数従属
性を削除します。
アクセス権
階層構造を削除するユーザは、次の中で少なくとも 1 つの条件を満たしている必要
があります。
■
■
■
DBA システム ロールのメンバーであること
明示的に付与されるかユーザが作成したロールのメンバーであることによ
り、DROP_ANY 権限を持っていること
RESOURCE システム ロールのメンバーで、かつ階層構造の作成者である
こと
構文
次に DROP HIERARCHY 文の構文ダイアグラムを示します。
DROP HIERARCHY
8-176 SQL Reference Guide
<hierarchy_name>
DROP INDEX
例
次の DROP HIERARCHY 文は、store_market_relationship という名称の階層構造を削
除します。この階層構造が削除されると、この階層構造内のすべての関数従属性が
削除されるので注意してください。
drop hierarchy store_market_relationship;
階層構造の定義と削除の詳細については、
『IBM Red Brick Vista User’s Guide』を参照
してください。
DROP INDEX
DROP INDEX 文は、指定したインデックスを削除します。CREATE INDEX 文で作
成したインデックスと、システムが生成した B-TREE インデックスの両方を削除す
ることができます。
アクセス権
テーブルに定義されたインデックスを削除するユーザは、次の中で少なくとも 1 つ
の条件を満たしている必要があります。
■
■
■
■
DBA システム ロールのメンバーであること
明示的に付与されるかユーザが作成したロールのメンバーであることによ
り、DROP_ANY 権限を持っていること
RESOURCE システム ロールのメンバーで、かつインデックスの作成者で
あること
DROP_OWN 権限を持っていて、インデックスの作成者であること
構文
次に DROP INDEX 文の構文ダイアグラムを示します。
DROP INDEX
<index_name>
DROPPING SEGMENTS
KEEPING SEGMENTS
SQL 文と RISQL 拡張機能
8-177
DROP INDEX
<index_name>
削除するインデックスの名前を指定します。CREATE INDEX 文で作
成したインデックス、自動作成された B-TREE インデックスのどち
らも削除できます。8-179 ページを参照してください。
DROPPING
SEGMENTS
インデックスに関連した名前付きセグメントおよびデフォルト セグ
メントを削除します。セグメントの物理格納ユニット (PSU) は、す
べて削除されます。
KEEPING
SEGMENTS
インデックスに関連付けられた名前付きセグメントをそのまま残し
ます。セグメントはインデックスから切り離され、ほかのデータ
べース オブジェクトにアタッチすることができます。デフォルト
セグメントは、必ず削除されます。
使用上の注意
DROPPING SEGMENTS、KEEPING SEGMENTS のどちらも指定されていない場合、
rbw.config ファイルの OPTION SEGMENTS パラメータで指定されているデフォルト
動作が使用されます。rbw.config ファイルで指定されている初期デフォルト動作で
は、名前付きセグメントが保持され、デフォルト セグメントが削除されます。デ
フォルト動作は、rbw.config ファイルのパラメータで変更できます。
テーブルを削除すると、テーブルのインデックスも自動的にすべて削除されます。
例
このステートメントは、distribution_ix インデックスをデータベースから削除し、名
前付きセグメントをすべて残します。名前付きセグメントは、ほかのインデックス
やテーブルにアタッチすることができます。
drop index distribution_ix
keeping segments
次のステートメントは、TARGET インデックス tgt_ix1 と、そのインデックス セグ
メントをデータベースから削除します。セグメントは再利用できません。
drop index tgt_ix1
dropping segments
8-178 SQL Reference Guide
DROP INDEX
システム生成 B-TREE インデックスの削除
DROP INDEX 文を使用して、システムが生成した B-TREE インデックスを削除する
と、次の操作が実行できなくなります。
■
■
インデックスの対象テーブルへの行の挿入
インデックスの対象テーブルのプライマリ キーを参照するほかのテーブル
への行の挿入
データの挿入に関する上記の制約は、テーブル データの一意性と参照整合性の制約
を維持することを目的としています。システムが生成したインデックスの削除後に
データを挿入できるようにするには、そのテーブルのプライマリ キー インデック
スを明示的に作成してください。
テーブルにあるすべてのフォーリン キーに STAR インデックスを作成し、これらの
フォーリン キーがそのプライマリ キーを構成するようなシンプル スター スキーマ
は、IBM Red Brick Warehouse で自動的に生成されません。シンプル スター スキーマ
の STAR インデックスを作成するには、システムが生成した B-TREE インデックス
を削除し、すべてのフォーリン キーをインデックス キーに指定する CREATE STAR
INDEX 文を実行する必要があります。
シンプル スター スキーマの STAR インデックスを作成した場合、プライマリ キー
の B-TREE インデックスがなくても、そのインデックス付きテーブルへ行を挿入で
きます。ただし、STAR インデックスが維持できるのは一意性制約だけであり、参
照整合性の維持はできません。このため、参照先テーブルのプライマリ キーに BTREE インデックスがない限り、STAR インデックスの定義されたテーブルのプライ
マリ キーを参照するほかのテーブルには、行を挿入できません。
行が挿入できないテーブルは、次のとおりです。
■
■
プライマリ キーの B-TREE インデックスが削除された参照先テーブル。た
だし、そのプライマリ キーに STAR インデックスが作成されている場合
は、行を挿入することができます。
プライマリ キーの B-TREE インデックスが削除されたテーブルを参照する
参照元テーブル。参照先テーブルのプライマリ キーに STAR インデックス
が作成されていても、行は挿入できません。
再作成されたインデックスのキー列の順序
削除されたシステム生成 B-TREE インデックスと置き換えるために、複数の列から
なるプライマリ キーに B-TREE インデックスまたは STAR インデックスを作成する
場合は、新しいインデックスのキー列の順序は、CREATE INDEX 文で指定した順序
となります。システム生成インデックスの順序は、CREATE TABLE 文で指定した順
序となります。
SQL 文と RISQL 拡張機能
8-179
DROP MACRO
再作成されたインデックス内のキー列の順序は性能に多大な影響を与えます。性能
向上を目的とするインデックス作成の詳細については、
『Administrator's Guide』を参
照してください。
インデックス作成に関する詳細については、8-105 ページ「CREATE INDEX」を参
照してください。
DROP MACRO
DROP MACRO 文は、マクロを削除します。
アクセス権
PUBLIC マクロを削除するユーザは、次の中で少なくとも 1 つの条件を満たしてい
る必要があります。
■
■
DBA システム ロールのメンバーであること
明示的に付与されるかユーザが作成したロールのメンバーであることによ
り、DROP_ANY 権限か PUBLIC_MACROS 権限を持っていること
プライベート マクロを削除するユーザはマクロの作成者であり、次の中で少なくと
も 1 つの条件を満たしている必要があります。
■
■
DBA システム ロールか、RESOURCE システム ロールのメンバーであるこ
と
明示的に付与されるかユーザが作成したロールのメンバーであることによ
り、DROP_ANY 権限か DROP_OWN 権限を持っていること
テンポラリ マクロは、現在 IBM Red Brick Warehouse データベースに接続している
ユーザであればどのユーザでも削除できます。
構文
次に DROP MACRO 文の構文ダイアグラムを示します。
MACRO
DROP
TEMPORARY
PUBLIC
8-180 SQL Reference Guide
<macro_name>
DROP ROLE
使用上の注意
ビューを作成すると、そのビューで参照しているマクロが展開され、ビューの
SELECT 文が効率的な内部形式で格納されます。このため、既存のビューが参照す
るマクロを変更しても、ビューには変更が反映されません。ビューの作成後にマク
ロを修正または削除した場合、変更をビューに反映させるには、ビューを削除し、
再作成してください。
DROP MACRO 文のキーワードは、対応する CREATE MACRO 文に使用したキー
ワードと一致させてください。たとえば、テンポラリ マクロを削除する場合は、同
名のマクロ ( パブリック マクロやプライベート マクロ ) がほかになくても、
TEMPORARY キーワードを DROP MACRO 文に指定する必要があります。
DROP ROLE
DROP ROLE 文は、指定したロールを削除します。
アクセス権
ロールを削除するユーザは、次の中で少なくとも 1 つの条件を満たしている必要が
あります。
■
■
DBA システム ロールのメンバーであること
明示的に付与されるかユーザが作成したロールのメンバーであることによ
り、ROLE_MANAGEMENT 権限を持っていること
構文
次に DROP ROLE 文の構文ダイアグラムを示します。
DROP ROLE
<role_name>
<role_name>
削除するロールの名前を指定します。システム ロールは削除できま
せん。
SQL 文と RISQL 拡張機能
8-181
DROP SEGMENT
使用上の注意
ロールを削除しても、そのロールのタスク権限やオブジェクト特権がデータベース
ユーザに残っている場合があります。同じ権限や特権がそのユーザか、そのユーザ
がメンバーであるほかのロールに明示的に付与されている場合がこれにあたりま
す。
例
次のステートメントは、temp ロールを削除します。
drop role temp
DROP SEGMENT
DROP SEGMENT 文は、指定したセグメントをデータベースから削除し、そのセグ
メントに関連したすべての物理格納ユニット (PSU) も削除します。
アクセス権
セグメントを削除するユーザは、次の中で少なくとも 1 つの条件を満たしている必
要があります。
■
■
■
■
DBA システム ロールのメンバーであること
明示的に付与されるかユーザが作成したロールのメンバーであることによ
り、DROP_ANY 権限を持っていること
RESOURCE システム ロールのメンバーで、かつセグメントの作成者であ
ること
DROP_OWN 権限を持っていて、セグメントの作成者であること
構文
次に DROP SEGMENT 文の構文ダイアグラムを示します。
DROP SEGMENT
8-182 SQL Reference Guide
<segment_name>
DROP SEGMENT
使用上の注意
セグメントを削除すると、そのセグメントのファイルがすべて削除されます。
DROP SEGMENT 文で削除するセグメントは、オフラインにし、切り離しておく必
要があります。
セグメントをオフラインにするには ALTER SEGMENT 文を使用します。セグメン
トは次の条件で切り離されます。
■
■
ALTER SEGMENT 文による切り離し
テーブルやインデックスが削除されていて、セグメントが削除されていな
い場合
例
次の各ステートメントはそれぞれ、seg_market セグメントをオフラインにして切り
離し、削除します。
alter segment seg_market of table market offline
alter segment seg_market of table market detach
drop segment seg_market
次のステートメントは、seg_market_idx セグメントを削除します。このセグメント
に格納されていたインデックスが削除されており、セグメントは削除されていない
ことが想定されています。このため、seg_market_idx セグメントはすでに切り離さ
れています。
drop segment seg_market_idx
SQL 文と RISQL 拡張機能
8-183
DROP SYNONYM
DROP SYNONYM
DROP SYNONYM 文は、基本テーブルに指定したシノニムを削除します。テーブル
自体は削除されません。
アクセス権
テーブルに定義されたシノニムを削除するユーザは、次の中で少なくとも 1 つの条
件を満たしている必要があります。
■
■
■
■
DBA システム ロールのメンバーであること
明示的に付与されるかユーザが作成したロールのメンバーであることによ
り、DROP_ANY 権限を持っていること
RESOURCE システム ロールのメンバーで、かつシノニムの作成者である
こと
DROP_OWN 権限を持っていて、シノニムの作成者であること
構文
次に DROP SYNONYM 文の構文ダイアグラムを示します。
DROP SYNONYM
<synonym_name>
<synonym_name>
削除するシノニムの名前を指定します。ビューが参照している
シノニムは削除できません。
使用上の注意
テーブルに定義されたシノニムを削除しても、基本テーブルには影響ありません。
8-184 SQL Reference Guide
DROP TABLE
DROP TABLE
DROP TABLE 文は、指定したテーブルをデータベースから削除し、そのテーブルに
定義されたインデックスと、そのテーブルを参照する特権やシノニムを削除しま
す。
アクセス権
テーブルを削除するユーザは、次の中で少なくとも 1 つの条件を満たしている必要
があります。
■
■
■
■
DBA システム ロールのメンバーであること
明示的に付与されるかユーザが作成したロールのメンバーであることによ
り、DROP_ANY 権限を持っていること
RESOURCE システム ロールのメンバーで、かつテーブルの作成者である
こと
DROP_OWN 権限を持っていて、テーブルの作成者であること
構文
次に DROP TABLE 文の構文ダイアグラムを示します。
DROP TABLE
<table_name>
DROPPING SEGMENTS
KEEPING SEGMENTS
SQL 文と RISQL 拡張機能
8-185
DROP TABLE
<table_name>
基本テーブルまたはテンポラリ テーブルの名前を指定します。シノ
ニムやビューの名前は指定できません。次の参照先となっている
テーブルは、削除できません。
■
■
ほかのテーブルのフォーリン キー
ビュー
フォーリン キーやビューの参照先テーブルを削除するには、その
テーブルを参照しているすべてのテーブルやビューを削除しておき
ます。または、8-89 ページに示すように、ALTER TABLE...DROP
CONSTRAINT 文を使ってフォーリン キー参照を削除しておきます。
DROPPING
SEGMENTS
テーブルに関連したすべてのデフォルト セグメントと名前付きセグ
メントを削除します。テーブルに関連したセグメントには、テーブ
ルにアタッチしたセグメントと、対応するインデックスが含まれま
す。セグメントの物理格納ユニット (PSU) は、すべて削除されま
す。
KEEPING
SEGMENTS
テーブルに関連した、すべての名前付きセグメントを残します。セ
グメントはテーブルから切り離され、ほかのデータべース オブジェ
クトに割り当てることができます。デフォルト セグメントは、必ず
削除されます。
使用上の注意
DROPPING SEGMENTS、KEEPING SEGMENTS のどちらも指定されていない場合、
rbw.config ファイルの OPTION SEGMENTS パラメータで指定されているデフォルト
動作が使用されます。OPTION SEGMENTS が指定されていない場合には、名前付き
セグメントは保持され、デフォルト セグメントは削除されます。デフォルト動作
は、rbw.config ファイルのパラメータで変更できます。
デフォルト セグメントはユーザが定義したセグメントとは異なり、テーブルを削除
すると削除されます。
削除するテーブルに破損したセグメントが含まれている (RBW_SEGMENTS システ
ム テーブルに情報がある ) 場合は、DROP TABLE...KEEPING SEGMENTS 文が失敗
します。テーブルを削除する前に、破損したセグメントを切り離し、削除しておい
てください。ただし、DROP TABLE...DROPPING SEGMENTS 文は、破損したセグメ
ントが含まれていても正常に実行されます。
8-186 SQL Reference Guide
DROP VIEW
例
次のステートメントは、Market_Temp テーブルとそのインデックスをテーブルから
削除しますが、名前付きセグメントはすべて残します。名前付きセグメントは、ほ
かのテーブルやインデックスにアタッチすることができます。
drop table market_temp
keeping segments
DROP VIEW
DROP VIEW 文は、指定したビューをデータベースから削除します。
アクセス権
ビューを削除するユーザは、次の中で少なくとも 1 つの条件を満たしている必要が
あります。
■
■
■
■
DBA システム ロールのメンバーであること
明示的に付与されるかユーザが作成したロールのメンバーであることによ
り、DROP_ANY 権限を持っていること
RESOURCE システム ロールのメンバーで、かつビューの作成者であるこ
と
DROP_OWN 権限を持っていて、ビューの作成者であること
構文
次に DROP VIEW 文の構文ダイアグラムを示します。
DROP VIEW
<view_name>
使用上の注意
データベースからビューを削除しても、基本テーブルには影響ありません。同様
に、集約テーブルに関連付けられた事前計算ビューを削除しても、集約テーブルに
は影響ありません。
ほかのビューが参照しているビューは、削除できません。
SQL 文と RISQL 拡張機能
8-187
EXPAND
EXPAND
EXPAND コマンドはステートメントを表示し、そのステートメントに含まれるマク
ロ名を展開して表示します。
ステートメントが展開されると、それに含まれるすべてのマクロがテキストで置き
換えられたステートメントが返されます ( マクロの展開 )。ステートメントの構文
は検査されませんが、マクロを呼び出すときには正しい数の引数を指定してくださ
い。
構文
次に EXPAND 文の構文ダイアグラムを示します。
EXPAND
<SQL_STATEMENT>
( <width> )
<width>
各リザルト行に返される最大文字数を指定します。20 ∼ 1024 の値
を指定してください。<width> を指定しなかったり、許容範囲外の
値を指定した場合は、79 が設定されます。
<sql_statement> 展開する SQL 文か、その一部を指定します。
例
まず、パラメータを 1 つ持つマクロを作成します。
create temporary macro select_star(condition)
as select *
from market
where condition
次のマクロ呼出しは、Region 列の値が South である行を Market テーブルから抽出
します。
select_star(region='South')
次の EXPAND 文は、マクロのパラメータに値を代入した後の SELECT 文を返しま
す。
expand select_star(region='South')
STATEMENT
--------SELECT * FROM MARKET WHERE REGION='South'
8-188 SQL Reference Guide
EXPLAIN
EXPLAIN
EXPLAIN コマンドは、指定したクエリについて、パフォーマンス チューニングに
使用できる内部クエリ処理情報を表示します。特に指定しない限り、この情報は標
準出力の画面に表示されます。データベース オブジェクト名以外は、出力データは
常に英語で表示されます。出力データの内容の詳細については、
『Query Performance
Guide』を参照してください。
構文
次に EXPLAIN 文の構文ダイアグラムを示します。
<SQL_statement>
EXPLAIN
<SQL_statement>
SQL 文全体のテキストを指定します。EXPLAIN は、有効な SQL
クエリを含むステートメント、INSERT、UPDATE、DELETE の
各ステートメントに使用できます。
例
次のステートメントは、テーブル結合、集約、演算を含む各種のクエリ処理情報を
返します。
explain
select prod_name, sum(dollars) as prod_sales,
rank(sum(dollars)) as prod_rank
from product join sales on sales.classkey =
product.classkey
and sales.prodkey = product.prodkey
group by prod_name
1 つのクエリについて複数の処理方法が可能な場合は、すべての処理方法について
の情報が表示されます。
SQL 文と RISQL 拡張機能
8-189
EXPORT
使用上の注意
EXPLAIN 文は、クエリ 性能の改善の方法を決定する場合に有効です。たとえば、
STAR インデックスを活用し、STARjoin 処理によってテーブルを結合するクエリは
高速になります。EXPLAIN 文を使用すると、クエリに使用される結合処理のタイ
プを判断できるため、既存インデックスを最大限に活用するようにクエリを書き換
えたり、クエリを高速化するインデックスをスキーマに追加することができます。
EXPLAIN 文の出力データを、クエリ実行時に出力される実際の統計値や情報と比
較する場合は、EXPLAIN 文を SET STATS INFO 文と併用します。SET STATS INFO
文の詳細については、9-62 ページ「SET STATS」を参照してください。
EXPLAIN の出力例については、『Query Performance Guide』を参照してください。
EXPORT
データベース管理者とアプリケーション開発者は、EXPORT 文を使って、任意のリ
ザルト セットをディスクのファイルに効率的にエクスポートできます。エクスポー
ト操作は ODBC レイヤをバイパスするため、ほかの方法と比較して、より効率的に
データベースのデータを出力ファイルに移動することができます。
ユーザはクエリを使ってリザルト セットを定義し、出力ファイルのフォーマットと
ファイル名を指定します。その後 EXPORT 文は、出力ファイル、出力ファイルを記
述するスクリプト (TMU スクリプト )、エクスポート先テーブルを記述する DDL ス
クリプトを生成します。オプションでロケールを定義することもできます。生成さ
れた DDL 文はエクスポート先テーブルを作成するために使用でき、TMU スクリプ
トはエクスポートしたデータをテーブルにロードするために使用できます。
アクセス権
EXPORT 文を実行するユーザは、次のいずれかの権限を持っている必要がありま
す。
■
■
DBA 権限
EXPORT タスク権限
8-190 SQL Reference Guide
EXPORT
構文
次に EXPORT 文の構文ダイアグラムを示します。
<output_file_specification>
EXPORT TO
DDlFILE
<file_specification>
TMUFILE
(
FORMAT
<file_specification>
<select_statement>
)
EXTERNAL
EXTERNAL VARIABLE
INTERNAL
BINARY
DELIMITED
XML
SQL 文と RISQL 拡張機能
8-191
EXPORT
<output_file_
specification>
出力ファイルの名前とパスを指定します。パス名の最大長は、
プラットフォームの許容最大長 ( 通常 1000 バイト ) から 4 文字
引いた長さです。これにより、DDL または TMU ファイル拡張
子を追加でき、最大 999 のオーバーフロー ファイルを作成でき
ます。ファイル名は一重引用符で囲んでください。
<output_file_specification> は、完全に修飾されたパスとファイル
名、相対パスとファイル名、パイプ指定のいずれでもかまいま
せん。相対パスを使用した場合は、rbw.config で指定されたパス
の相対パスか、SET EXPORT_DEFAULT_PATH 文で確立された
パスで指定されたパスの相対パスが使用されます。最初の文字
をパイプ記号 (|) にした場合は、データがパイプに書き出されま
す。
パイプ記号を使用する場合は、必ず一重引用符の直後の 1 文字
目に使用してください。パイプ記号の前に ( スペースを含む ) 別
の文字が挿入されていると、データはパイプでなくファイルに
エクスポートされます。指定されたパスが存在している必要が
あります。
指定パスが存在し、<username> がファイルへの書き込み権限を
持っている必要があります。システムが指定されたファイルを
エクスポート用に作成します。セキュリティ保護のため、この
ファイルは上書き禁止です。同名のファイルがすでに存在する
場合は、エラー メッセージが返されます。既存のファイルを削
除してから EXPORT 文を再実行してください。
EXPORT_MAX_FILE_SIZE オプションが設定されている場合、
各データ ファイルの名前に 3 桁のサフィックスが付加されます。
このようなファイルは最大 1000 個作成できます。
ヒント : デフォルトでは、出力ファイル サイズの上限は設定されていません。
EXPORT_MAX_FILE_SIZE オプションが設定されている場合に限り、オーバーフ
ロー ファイルが作成されます。このオプションの詳細については、9-21 ページ
「SET EXPORT_MAX_FILE_SIZE」を参照してください。
EXPORT 文の出力を、TMU LOAD DATA 操作にパイプを使用し
て送るには、実行可能ファイル rb_tmu に引数 -d を指定する必要
があります。
実行可能ファイル rb_tmu と rb_ptmu の完全な構文については、
Table Management Utility Reference Guide の第 2 章を参照してくだ
さい。
クエリがリザルト セットを返さなかった場合は、出力ファイル
は生成されません。
8-192 SQL Reference Guide
EXPORT
DDLFILE <file_
specification>
DDL ファイルの名前を指定します。このファイルは、
TMUUNLOAD または GENERATE 文で作成されるファイルと同
じです。
■ DDLFILE は、出力リザルト セットを定義する検索項目リスト
内の各列に一意の列名を与えます。
■ EXPORT コマンドは、列に DEFAULT 句を生成しません。
<file_specification> を指定しない場合は、出力ファイルに指定さ
れた名前、パス、サフィックス DDL で名前が生成されます。
データがパイプに出力される場合は、この指定は意味を持たず、
この指定への参照も無視されます。
ロケールを指定した場合は、エクスポート操作によって、
DDLFILE ( および TMUFILE) が同じロケールに作成されます。
必要に応じてデータの変換が行われます。
式または集約関数が指定されている場合を除き、このファイル
内のテーブルには GENERATED_TABLE という名前が付けら
れ、列にはクエリの検索項目リストで使用されている名前が付
けられます。式または集約関数が指定されている場合は、列の
名前は GENERATED_COLNAME_XX になります。XX は検索項
目リスト内の列位置を表します。
TMUFILE <file_
specification>
TMU ファイルの名前を指定します。このファイルは、TMU
UNLOAD または GENERATE 文で生成されるファイルと同じで
す。ただし出力データのすべての検索項目リストの列に一意の
列名が付けられます。
<file_specification> を指定しない場合は、出力ファイルに指定さ
れた名前、パス、サフィックス .TMU で名前が生成されます。
データがパイプに出力される場合は、この指定は意味を持たず、
この指定への参照も無視されます。
ロケールを指定した場合は、エクスポート操作によって、
TMUFILE ( および DDLFILE) が同じロケールに作成されます。
必要に応じてデータの変換が行われます。
SQL 文と RISQL 拡張機能
8-193
EXPORT
FORMAT
エクスポートされたデータのフォーマットを指定します。
EXTERNAL フォーマットは、同じプラットフォームまたは別の
プラットフォーム上で、TMU を使用して再ロードできるファイ
ルにデータをエクスポートします。再ロード中、末尾の空白は
データから削除されます。フォーマットを指定しない場合、出
力ファイルのフォーマットはデフォルトで EXTERNAL となりま
す。
EXTERNAL VARIABLE フォーマットは、同じプラットフォーム
または別のプラットフォーム上で、TMU を使用して再ロードで
きるファイルにデータをエクスポートします。再ロード中、末
尾の空白は保持され、テーブル内にロードされます。
INTERNAL
INTERNAL フォーマットは、データをバイナリ ファイルにエク
スポートします。このデータは、同じプラットフォームのシス
テム上でのみ再ロードできます。たとえば、このフォーマット
のデータを HP9000 からエクスポートし、AIX RISC System/6000
に再ロードすることはできません。また、32 ビット システムか
らデータをエクスポートして、64 ビット システムに再ロードす
ることはできません。
INTERNAL フォーマット データの再ロード中、末尾の空白は保
持され、目的のテーブルにロードされます。
INTERNAL と EXTERNAL は、TMU UNLOAD コマンドでサポー
トされるのと同じフォーマットです。これらのフォーマットの
詳細については、『Table Management Utility Reference Guide』を
参照してください。
BINARY
8-194 SQL Reference Guide
BINARY フォーマットは、整数、浮動小数点、倍精度データ型
については各プラットフォームに固有の表現形式、その他の
データ型では ASCII ( 文字 ) 表現形式を使用するファイルを生成
します。このデータは、同じプラットフォーム上の別のアプリ
ケーションにデータを移植するために使用されます。再ロード
中、末尾の空白はデータから削除されます。
EXPORT
DELIMITED
DELIMITED フォーマットは、各列値を区切り文字で区切るよう
に指定します。次の規則が適用されます。
■
区切り文字はシングルバイト文字またはマルチバイト
文字 1 つです。デフォルトの区切り記号はパイプ (|) で
す。ほかの区切り文字を指定する方法は、9-20 ページ
「SET EXPORT_DELIMITER」を参照してください。
■ 各行を復帰改行文字で区切ります。
DELIMITED フォーマットでエクスポートされた文字 (CHAR) 型
列と可変長文字 (VARCHAR) 型列には、末尾の空白文字は充填
されません。したがって、各出力行の長さが異なることがあり
ます。ただし、可変長文字 (VARCHAR) 型列に末尾の空白文字
が格納されている場合は、その空白文字列は切り捨てられずに
そのまま残されます。
XML
XML フォーマットは、XML (Extensible Markup Language) 出力
ファイルを生成します。この XML ファイルのマークアップ タ
グは次の命名規則を使用します。
■ ルート :<GENERATED_x005f_TABLE> および
</GENERATED_x005f_TABLE>
■ レコード内で繰り返し使用されるブロック構造 :<ROW> およ
び </ROW>
■ 名前付き列 :<column_name> および </column_name>
■ 名前のない列 ( 式およびエリアスのない集約関数 ) :
<GENERATED_x005f_COLNAME_x005f_xx> および
</GENERATED_x005f_COLNAME_x005f_xx>
ここで xx は選択されたリスト内で名前のない列の位置を示しま
す。これらの命名規則については、8-197 ページを参照してくだ
さい。
これらのマークアップ タグはカスタマイズできませんが、出力
ファイルの編集は可能です。
SQL 文と RISQL 拡張機能
8-195
EXPORT
XML ファイルには標準のヘッダー情報も含まれます。これは、
XML のバージョン文字列、エンコード、文書型定義 (DTD) な
ど、XML ドキュメントの内容モデルを記述する通常の情報で
す。IBM Red Brick Warehouse がサポートするコード セットから
XML のエンコードへのマッピング方法については、インストー
ル CD-ROM のリリース ノート ディレクトリ内の locales.pdf ファ
イルを参照してください。
ほかの EXPORT データ ファイルとは異なり、XML 出力には、
ファイルを生成した EXPORT コマンドを示すクエリ テキストお
よびクライアント ロケールが含まれます。クエリ テキストとク
ライアント ロケールは、DTD セクションの後に、コメントとし
て出力されます。
XML フォーマットの EXPORT 文により、DDL ファイルおよび
TMU ファイルの作成も行われます。DDL ファイルのフォーマッ
トは XML の場合もほかのフォーマットと同様です。8-193 ペー
ジを参照してください。TMU ファイルは列を定義するときに特
別の XML パス構造を使用します。『Table Management Utility
Reference Guide』を参照してください。
<select_
statement>
第 7 章で定義されているとおりに、任意の有効な SELECT 文を
指定します。ステートメントはかっこで囲んでください。クエ
リ結果は指定したフォーマットで出力ファイルにエクスポート
され、必要に応じてクライアントのロケールに変換されます。
使用上の注意
出力ファイルのフォーマットによって、エクスポート後のデータの再ロード先と再
ロード方法が限定されます。
■
■
INTERNAL フォーマットは、同じプラットフォーム上で動作している Red
Brick データベースにしか再ロードできません。エクスポート先テーブル
のデータ型は、エクスポートする列のデータ型と完全に合致している必要
があります。エクスポートするデータの Dollars フィールドが DEC(7,2) の
場合は、エクスポート先の列も DEC(7,2) である必要があり、DEC(7,4) や
DEC(10,2) であってはなりません。HP 9000 から INTERNAL フォーマット
でエクスポートした場合は、データを AIX RISC/6000 上で動作する Red
Brick データベースに再ロードすることはできません。
EXTERNAL フォーマットはより高い移植性を持ちます。別のプラット
フォームに移行する必要がある場合は、このフォーマットを使用してくだ
さい。このフォーマットは、サードパーティ製アプリケーションとともに
使用することもできます。ただしこれらのアプリケーションで NULL 情報
を使用するのは難しい場合があります。
8-196 SQL Reference Guide
EXPORT
■
BINARY フォーマットは EXTERNAL フォーマットよりコンパクトです。
このフォーマットは、同じプラットフォームで使用する場合に限り、サー
ドパーティ製アプリケーションとともに使用することができます。このエ
クスポート データにも NULL 情報が含まれます。
XML 出力ファイルでの特殊文字と区切り識別子の取り扱い
EXPORT コマンドを使用してクエリ結果を XML ファイルに出力する場合、一部の
文字は次の表に示すように置き換えられます。
クエリが返す文字
XML ファイルでの置き換え
制御文字 (ASCII コード 32 未満の文字で、
9 (Tab)、10 ( 改行 )、13 (CR) を除く )
疑問符 (?)
左山形かっこ (<)
&lt;
右山形かっこ (>)
&gt;
アンパサンド (&)
&amp;
二重引用符 ('')
&quot;
一重引用符 (')
&apos;
区切り表記の列名やテーブル名、および xml で始まる識別子は、標準的な方法で
マッピングされます。EXPORT 形式で生成された、アンダースコア (_) を含むテー
ブル名と列名が、このマッピングの対象となります。
SQL 名 ( 例 )
XML ファイルおよび TMU 制御ファイルで
の置き換え
"col name"
col_x0020_name
"emp:id"
emp_x003a_id
xmlcolumn
_xffff_xmlcolumn
ORDER_NO
ORDER_x005f_NO
GENERATED_TABLE
GENERATED_x005f_TABLE
GENERATED_COLNAME_2
GENERATED_x005f_COLNAME_x005f_2
このマッピングは XML ファイルおよび TMU 制御ファイル内の XML パスのみに影
響し、生成された DDL ファイルではクエリで指定された元の列名およびテーブル
名が保持されます。
SQL 文と RISQL 拡張機能
8-197
EXPORT
例
次の例に、EXPORT コマンドを使用して、各種のフォーマットでクエリ結果を保存
する方法を示します。
外部フォーマットのファイルへのエクスポート
次のステートメントは、クエリから /home/george/sum1 というファイルにデータを
エクスポートします。
export to '/home/george/sum1'
(select prod_name, sum(dollars),
rank(sum(dollars)) as top_ten_99
from sales natural join product
natural join period
where year = 1999
group by prod_name when top_ten_99 <=10)
生成されたファイル home/george/sum1.DDL には、次の情報が含まれます。
CREATE TABLE GENERATED_TABLE (
PROD_NAME CHARACTER(30),
GENERATED_COLNAME_2 DECIMAL(13,2),
TOP_TEN_99 INTEGER);
生成されたファイル /home/george/sum1.TMU には、次の情報が含まれます。
LOAD DATA INPUTFILE
'/home/george/sum1'
RECORDLEN 60
INSERT
NLS_LOCALE 'English_UnitedStates.US-ASCII@Binary'
INTO TABLE GENERATED_TABLE (
PROD_NAME POSITION(2) CHARACTER(30) NULLIF(1)='%',
GENERATED_COLNAME_2 POSITION(33) DECIMAL EXTERNAL(15)
NULLIF(32)='%', TOP_TEN_99 POSITION(49) INTEGER
EXTERNAL(11) NULLIF(48)='%');
TMU LOAD 操作のパイプへのエクスポート
次の EXPORT 文の出力は、Aroma データベースにテーブルをロードする TMU 操作
にパイプを使用して送られます。
export to '| /redbrick/bin/rb_tmu -d aroma
/data/test/pq_sales.TMU system manager'
format external
(select prod_name, qtr, sum(dollars) as sum_dols
from product natural join sales natural join period
group by prod_name, qtr);
8-198 SQL Reference Guide
EXPORT
区切りフォーマットでのエクスポート
次の EXPORT 文の出力は、パイプを使用して区切りフォーマットで
export_output_delimited ファイルに送られます。
export to 'export_output_delimited'
format delimited
(select dealkey, order_type, order_desc from orders
where dealkey < 2)
DEALKEY
ORDER_TYPE
ORDER_DESC
** INFORMATION ** (8755) EXPORT successfully completed; 1 data
file(s) created in /local/spill/export_output_delimited*.
次のリザルト セットは、区切りフォーマットで表示された出力ファイルを示しま
す。
00000000000|Hardware|Hardware, gifts, general merchandise|
00000000000|Hardware|Hardware, gifts, general merchandise|
00000000000|Clothing|Aroma t-shirts and baseball caps|
00000000000|Spice|Pre-packed spices, jars|
00000000000|Tea|Loose tea, bulk|
00000000000|Tea|Loose and packaged tea|
00000000001|Spice|Spices, bulk and pre-packed|
00000000001|Spice|Spices, bulk and pre-packed|
00000000001|Hardware|Hardware, gifts, general merchandise|
XML フォーマットでのエクスポート
次の例は、EXPORT 文で 4 列のテーブルから 1 列を選んだときに作成される 3 つの
XML 出力ファイルを示しています。最初にテーブルを作成し、次にエクスポート
される列を挿入する DDL は次のとおりです。
RISQL> create table orders (order_no int, order_date date,
cust_num int, dollars dec(13,2));
RISQL> insert into orders values(1,'01-01-01',1,100.00);
** INFORMATION ** (209) Rows inserted: 1.
EXPORT コマンドは次のとおりです。
RISQL> export to 'test1_orders'
> format xml
> (select * from orders);
ORDER_NO
ORDER_DATE CUST_NUM
DOLLARS
** INFORMATION ** (8755) EXPORT successfully completed; 1 data
file(s) created in test1_orders*.
RISQL>
SQL 文と RISQL 拡張機能
8-199
EXPORT
XML データ、DDL、TMU の 3 つの出力ファイルは次のとおりです。
brick % more test1_orders
<?xml version="1.0" encoding="us-ascii"?>
<!-- The Client Locale was "English_UnitedStates.USASCII@Binary" -->
<!DOCTYPE GENERATED_x005f_TABLE [
<!ELEMENT ORDER_x005f_NO (#PCDATA)>
<!ELEMENT ORDER_x005f_DATE (#PCDATA)>
<!ELEMENT CUST_x005f_NUM (#PCDATA)>
<!ELEMENT DOLLARS (#PCDATA)>
<!ELEMENT ROW
(ORDER_x005f_NO?,ORDER_x005f_DATE?,CUST_x005f_NUM?,DOLLARS?)>
<!ELEMENT GENERATED_x005f_TABLE (ROW*)>
]>
<!-- Begin Query Text
export to 'test1_orders'
format xml
(select * from orders);
**** End Query Text -->
<GENERATED_x005f_TABLE>
<ROW>
<ORDER_x005f_NO>00000000001</ORDER_x005f_NO>
<ORDER_x005f_DATE>2001-01-01</ORDER_x005f_DATE>
<CUST_x005f_NUM>00000000001</CUST_x005f_NUM>
<DOLLARS>
100.00</DOLLARS>
</ROW>
</GENERATED_x005f_TABLE>
brick % more test1_orders.DDL
CREATE TABLE GENERATED_TABLE (
ORDER_NO INTEGER,
ORDER_DATE DATE,
CUST_NUM INTEGER,
DOLLARS DECIMAL(13,2));
% more test1_orders.TMU
LOAD DATA INPUTFILE
'test1_orders'
INSERT
FORMAT XML
NLS_LOCALE 'English_UnitedStates.US-ASCII@Binary'
INTO TABLE GENERATED_TABLE (
ORDER_NO /GENERATED_x005f_TABLE/ROW/ORDER_x005f_NO/#PCDATA
INTEGER EXTERNAL(11) ,
ORDER_DATE
/GENERATED_x005f_TABLE/ROW/ORDER_x005f_DATE/#PCDATA DATE(10)
'YYYY-MM-DD' ,
CUST_NUM /GENERATED_x005f_TABLE/ROW/CUST_x005f_NUM/#PCDATA
INTEGER EXTERNAL(11) ,
DOLLARS /GENERATED_x005f_TABLE/ROW/DOLLARS/#PCDATA DECIMAL
EXTERNAL(15) );
8-200 SQL Reference Guide
GRANT ( 権限とロール )
GRANT (権限とロール)
GRANT 文は、DBA システム ロール、RESOURCE システム ロール、ユーザが作成
したロール、または個別のタスク権限をデータベース ユーザまたはロールに付与し
ます。
権限やロールが付与されるデータベース ユーザを GRANT CONNECT 文によって作
成し、パスワードを割り当てておく必要があります。
アクセス権
GRANT 文を使用するユーザは、次の中で少なくとも 1 つの条件を満たしている必
要があります。
■
■
DBA システム ロールのメンバーであること
明示的に付与されるかユーザが作成したロールのメンバーであることによ
り、ROLE_MANAGEMENT 権限を持っていること
DBA のメンバーと、ROLE_MANAGEMENT タスク権限を持っているユーザは、す
べてのタスク権限を自分およびほかのユーザに付与することができます。
構文
次に、権限とロールを付与する GRANT 文の構文ダイアグラムを示します。
,
GRANT
DBA
RESOURCE
,
TO
<db_username>
<role_name>
<authorization>
<role_name>
SQL 文と RISQL 拡張機能
8-201
GRANT ( 権限とロール )
DBA
TO 句に指定したデータベース ユーザまたはユーザが作成した
ロールに、DBA システム ロールを付与します。指定したユー
ザおよびロールは、DBA システム ロールのメンバーになり、
すべての DBA タスクを実行できるようになります。DBA シス
テム ロールの詳細については、8-203 ページ「DBA タスク権
限」を参照してください。
RESOURCE
TO 句に指定したデータベース ユーザまたはユーザが作成した
ロールに、RESOURCE システム ロールを付与します。指定し
たユーザおよびロールは、RESOURCE システム ロールのメン
バーになり、すべての RESOURCE タスクを実行できるように
なります。RESOURCE システム ロールの詳細については、
8-204 ページ「RESOURCE タスク権限」を参照してください。
<authorization>
TO 句に指定したデータベース ユーザおよびロールに、タスク
権限を付与します。タスク権限はシステムが定義し、データ
ベースに対して各操作を実行する権限を与えるものです。タス
ク権限の一覧と定義については、8-202 ページ「システム ロー
ルとタスク権限」を参照してください。
<role_name>
TO 句に指定したデータベース ユーザとロールに付与する、
ユーザが作成したロールを指定します。指定したユーザおよび
ロールには、付与するロールに定義されたすべてのタスク権限
が与えられます。
TO <db_username> 指定したタスク権限およびロールが付与される、既存のデータ
ベース ユーザを指定します。直接のメンバーになれるのは、
データベース ユーザ当たり 16 個のロールまでです。ただし、
間接的に付与されるロールの数には制限がありません。
TO<role_name>
指定したタスク権限およびロールが付与される、ユーザが作成
したロールを指定します。システム ロール (DBA または
RESOURCE) は、変更できないため指定できません。
システム ロールとタスク権限
システムには CONNECT、RESOURCE、および DBA という 3 つのシステム ロール
があります。CONNECT システム ロールは、ユーザがデータベースに接続すること
を許可し、限られた権限を与えます。RESOURCE および DBA のシステム ロール
は、システムが定義した複数のタスクをユーザが実行することを許可します。
8-202 SQL Reference Guide
GRANT ( 権限とロール )
DBA タスク権限
DBA システム ロールに定義されたタスク権限は、次のとおりです。各タスク権限
は個別に付与することができます。
タスク権限
定義
ACCESS_ANY
すべてのデータベース オブジェクトからデータを検
索し、システム テーブルのプライベート マクロなど
のプライベート ユーザ情報にアクセスできます。
ACCESS_SYSINFO
動的統計テーブル (DST) にある、データベース動作
のステータスを検索することができます。動的統計
テーブル (DST) については、『Administrator's Guide』
を参照してください。
ALTER_ANY
列、インデックス、マクロ、セグメント、シノニム、
テーブル、ビューを変更することができます。
ALTER_SYSTEM
ALTER SYSTEM 文を実行し、データベース管理操作
を実行することができます。
CREATE_ANY
別のユーザのリソースを使用するオブジェクトなど、
任意のオブジェクトを作成することができます。た
とえば、別のユーザのテーブルにインデックスを作
成したり、別のユーザのセグメントに常駐するテー
ブルを作成したりできます。
DROP_ANY
すべてのユーザが作成したオブジェクトを削除でき
ます。
EXPORT
任意のクエリの結果をデータ ファイルにエクスポー
トできます。
GRANT_TABLE
データベース ユーザおよびロールに、オブジェクト
特権を付与することができます。
LOCK_DATABASE
データベースをロックすることができます。
MODIFY_ANY
データの挿入、更新、削除、ロードができます。
OFFLINE_LOAD
作業用セグメントを使用してオフライン ロードを行
い、セグメントを同期させることができます。
PUBLIC_MACROS
PUBLIC マクロの作成と削除ができます。
REORG_ANY
テーブルとインデックスの再編成ができます。
( 1 of 2 )
SQL 文と RISQL 拡張機能
8-203
GRANT ( 権限とロール )
タスク権限
定義
ROLE_MANAGEMENT
ロールの作成、削除、付与、取消、変更ができます。
UPGRADE_DATABASE
データベースのアップグレードができます。
USER_MANAGEMENT
GRANT CONNECT を使用してデータベース ユーザ
を作成したり、パスワードを変更します。REVOKE
CONNECT によるデータベース ユーザの削除、
ALTER USER または GRANT CONNECT によるユー
ザ セッションのデフォルト優先順位の指定ができま
す。
( 2 of 2 )
RESOURCE タスク権限
RESOURCE システム ロールに定義されたタスク権限は、次のとおりです。各タス
ク権限は個別に付与することができます。
タスク権限
定義
ALTER_OWN
自分の作成したインデックス、マクロ、セグメ
ント、シノニム、テーブル、ビューを変更する
ことができます。
ALTER_TABLE_INTO_ANY
自分の作成したテーブルをほかのユーザのセグ
メントに変更できます。
CREATE_OWN
自分の作成したオブジェクト ( インデックス、
プライベート マクロ、セグメント、シノニム、
テーブル、ビュー ) を作成できます。
DROP_OWN
自分の作成したオブジェクトを削除できます。
GRANT_OWN
自分の作成したオブジェクトに対するオブジェ
クト特権を、ほかのユーザに付与することがで
きます。
8-204 SQL Reference Guide
GRANT ( 権限とロール )
使用上の注意
■
■
■
■
■
■
■
■
■
GRANT 文でシステム ロールを付与されたデータベース ユーザは、その
ロールの直接のメンバーになります。
システム ロールを、GRANT 文や REVOKE 文で変更または削除することは
できません。
GRANT 文でロールを付与されたデータベース ユーザは、そのロールの直
接のメンバーになります。
CREATE ROLE 文に指定されたデータベース ユーザは、付与されたロール
の直接のメンバーになります。
ほかのロールを付与されたロールのメンバーであるデータベース ユーザま
たはユーザが作成したロールは、付与されたロールの間接的なメンバーに
なります。
たとえば、Role1 が Role2 に付与されると、Role2 のメンバーは、Role1 の
間接的なメンバーになり、Role1 に定義されたすべてのタスク権限とオブ
ジェクト特権を取得します。
データベース ユーザおよびユーザが作成したロールが、間接的なメンバー
になれるロールの数には制限がありません。
データベース ユーザおよびユーザが作成したロールには、CREATE_ANY
などのタスク権限を個別に付与することができます。
ユーザやロールが直接のメンバーになれるロールの数は 16 までです。TO
句に指定したユーザやロールが、すでに 16 個のロールの直接メンバーに
なっている場合は、それ以上のメンバーにはなれません。
データベース ユーザは、直接または間接的にロールのメンバーになること
により、タスク権限を付与されます。
ユーザが作成したロール、システム ロール、タスク権限は、1 つの
GRANT 文で付与することができます。
SQL 文と RISQL 拡張機能
8-205
GRANT ( 権限とロール )
例
次のステートメントは、RESOURCE システム ロールを tommy に付与します。
grant resource to tommy
次のステートメントは、CREATE_OWN タスク権限と ALTER_OWN タスク権限を
cody、daisy、temp ロールに付与します。ユーザ cody、daisy、および temp ロールの
全メンバーは、自分のデータベース オブジェクトを作成したり変更できるようにな
ります。
grant create_own, alter_own to cody, daisy, temp
次のステートメントは、dba_junior ロールを sonia に付与します。
grant dba_junior to sonia
次のステートメントは、temp ロールを kathy および dba_junior ロールに付与します。
ユーザ kathy は temp ロールのメンバーになり、temp ロールに付与されているすべて
のタスク権限およびオブジェクト特権を取得します。dba_junior ロールのメンバー
(sonia) は、temp ロールの直接のメンバーではありませんが、temp ロールに付与され
ているすべてのタスク権限およびオブジェクト特権を間接的に取得します。
grant temp to kathy, dba_junior
各データベース ユーザおよびロールに付与されているロールは、次のステートメン
トによって確認することができます。
select username, rolename, indirect
from rbw_role_members
order by username, rolename
USERNAME
ROLENAME
INDI
---------------------DBA_JUNIOR
TEMP
N
KATHY
TEMP
N
SONIA
DBA_JUNIOR
N
SONIA
TEMP
Y
上記の結果から、temp ロールが dba_junior および kathy に直接に付与され、
dba_junior ロールが sonia に直接に付与されていることがわかります。temp ロール
は、sonia に間接的に付与されています。sonia は temp ロールを付与されている
dba_junior のメンバーであるため、temp ロールが sonia に間接的に付与されているこ
とになります。
次のステートメントは、RESOURCE システム ロールを management ロールに付与し
ます。management ロールのメンバーは、RESOURCE システム ロールの間接的なメ
ンバーになり、RESOURCE システム ロールのすべてのタスク権限を取得します。
grant resource to management
8-206 SQL Reference Guide
GRANT CONNECT
GRANT CONNECT
GRANT CONNECT 文は、データベース ユーザ名の作成とパスワードの割り当てま
たは変更を行い、オプションで、DBA システム ロール、RESOURCE システム ロー
ル、ユーザが作成したロール、タスク権限をユーザに付与するステートメントで
す。
アクセス権
データベース名の作成、パスワードの割り当て、ユーザ優先順位の割り当てを行う
には、次の中で少なくとも 1 つの条件を満たしている必要があります。
■
■
DBA システム ロールのメンバーであること
明示的に付与されるかユーザが作成したロールのメンバーであることによ
り、USER_MANAGEMENT 権限を持っていること
システム ロールまたはユーザが作成したロールを付与するには、次の中で少なくと
も 1 つの条件を満たしている必要があります。
■
■
DBA システム ロールのメンバーであること
明示的に付与されるかユーザが作成したロールのメンバーであることによ
り、ROLE_MANAGEMENT 権限または USER_MANAGEMENT 権限を持っ
ていること
自分のパスワードは、どのデータべース ユーザも変更することができます。
SQL 文と RISQL 拡張機能
8-207
GRANT CONNECT
構文
次に GRANT CONNECT 文の構文ダイアグラムを示します。
GRANT CONNECT
,
,
DBA
RESOURCE
<authorization>
<role_name>
TO
<db_username>
WITH
<password>
'<password>'
CONNECT
PRIORITY
<integer>
新規データベース ユーザ名の作成、パスワードの割り当て、既存
データベース ユーザのパスワードの変更を行います。新規ユーザ
は、CONNECT システム ロールのメンバーになり、次の操作を行え
るようになります。
■
■
■
■
自分のパスワードを使ったデータべースへの接続
PUBLIC に SELECT 特権が付与されたテーブルからのデー
タの抽出
自分のパスワードの変更
PUBLIC テーブルおよび PUBLIC マクロの使用
PUBLIC 以外のデータベース オブジェクトへのアクセス、データの
修正、データベース オブジェクトの作成を行うには、ユーザは対応
するオブジェクト特権、タスク権限、ロールを取得する必要があり
ます。
オブジェクト特権の付与については 211 ページ「GRANT ( 特権 )」
を、権限とロールの付与については 201 ページ「GRANT ( 権限と
ロール )」を参照してください。
8-208 SQL Reference Guide
GRANT CONNECT
DBA
指定したデータベース ユーザに、DBA システム ロールを付与する
ように指定します。指定されたデータベース ユーザは、DBA シス
テム ロールのメンバーになり、すべての DBA タスク権限を取得し
ます。DBA タスク権限の一覧については、8-202 ページ「システム
ロールとタスク権限」を参照してください。
RESOURCE
指定したデータベース ユーザに、RESOURCE システム ロールを付
与するように指定します。指定されたデータベース ユーザは、
RESOURCE システム ロールのメンバーになり、すべての
RESOURCE タスク権限を取得します。RESOURCE タスク権限の一
覧については、8-202 ページ「システム ロールとタスク権限」を参
照してください。
<authorization> 指定したデータベース ユーザに、タスク権限を個別に付与します。
タスク権限はシステムが定義し、データベースに対して各操作を実
行する権限を与えるものです。タスク権限の一覧と定義について
は、8-202 ページ「システム ロールとタスク権限」を参照してくだ
さい。
<role_name>
指定したデータベース ユーザに付与するユーザ作成のロールを指定
します。指定されたユーザは、そのロールのメンバーになり、その
ロールに付与されたすべてのタスク権限およびオブジェクト特権を
取得します。
TO
データベース ユーザを指定します。データベース ユーザ名は有効
<db_username> な識別子とし、ほかのユーザ名と重複しない名前にしてください。
SQL 文と RISQL 拡張機能
8-209
GRANT CONNECT
WITH
<password>
データベース パスワードを指定します。データべース パスワード
は、ほかのパスワードと重複しないものにしてください。有効な
SQL 識別子でないパスワードは、文字列定数を一重引用符で囲んで
指定します。
ユーザは、自分のパスワードしか変更できません。
GRANT CONNECT 文に指定したユーザ名が、ステートメントを実
行するユーザと同じ場合は、ユーザのパスワードが新規パスワード
に変更されます。DBA システム ロールのメンバーを含め、
USER_MANAGEMENT タスク権限を持っているユーザは、任意の
ユーザのパスワードを変更できます。パスワードは暗号化されて保
存され、DBA システム ロールのメンバーを含め、ユーザにはアク
セスできません。
パスワードのセキュリティ パラメータは、IBM Red Brick Warehouse
で利用できます。セキュリティ パラメータは rbw.config ファイルに
記述されており、次の項目を制限できます。
■
■
■
有効なパスワードの長さと文字タイプの組み合わせ
パスワードの変更頻度
同じパスワードを繰り返し使用することを禁止するため
の、旧パスワードの保存回数
パスワード セキュリティ パラメータの詳細については、
『Administrator's Guide』を参照してください。
ヒント : RISQL Entry Tool を使用するユーザのパスワードは 8 文字以下にすること
をお勧めします。8 文字を超えると、パスワード プロンプトに入力できなくなり、
起動時にコマンド ライン オプションとして入力することになるため、セキュリ
ティが損なわれます。
PRIORITY
<integer>
ユーザ セッションのデフォルトの優先順位を指定します。0 ∼ 100
の整数を指定できます。数字が大きくなるほど優先順位が低くなり
ます。たとえば、優先順位が 0 のユーザのセッションの CPU 時間
は、優先順位が 1 ( または 0 より大きいほかの値 ) のユーザのセッ
ションよりも優先されます。デフォルトは 50 です。
この句は、既存ユーザが実行中の現在のセッションには影響しませ
ん。実行中のセッションの優先順位を変更する場合は、ALTER
SYSTEM 文を使用してください。
ユーザが自分のパスワードを変更しているときにこの句を指定した
場合は、無視されます。
8-210 SQL Reference Guide
GRANT ( 特権 )
例
次のステートメントは、kathy というデータベース ユーザ名を作成し、dbexpert とい
うパスワードを割り当てます。
grant connect to kathy with dbexpert
次のステートメントは、kathy のパスワードを gumshoe に変更します。このステー
トメントが実行できるのは、kathy または DBA システム ロールを持っているユーザ
です。
grant connect to kathy with gumshoe
次のステートメントは、alison というデータベース ユーザ名を作成し、acrobat とい
うパスワードを割り当て、RESOURCE システム ロールを alison に付与します。
grant connect, resource to alison with acrobat
GRANT (特権)
GRANT 文は、任意の数のユーザまたはユーザが作成したロールに、特定のテーブ
ルに対するオブジェクト特権を割り当てます。
アクセス権
テーブルに対するオブジェクト特権を付与するユーザは、次の中で少なくとも 1 つ
の条件を満たしている必要があります。
■
■
■
■
DBA システム ロールのメンバーであること
RESOURCE システム ロールのメンバーで、かつテーブルの作成者である
こと
テーブルの作成者で、明示的に付与されるかユーザが作成したロールのメ
ンバーであることにより、GRANT_OWN タスク権限を持っていること
明示的に付与されるかユーザが作成したロールのメンバーであることによ
り、GRANT_TABLE タスク権限を持っていること
SQL 文と RISQL 拡張機能
8-211
GRANT ( 特権 )
構文
次に、特権を付与する GRANT 文の構文ダイアグラムを示します。
,
GRANT
ON
ALL
<table_name>
PRIVILEGES
DELETE
INSERT
SELECT
UPDATE
,
<db_username>
TO
<role_name>
PUBLIC
PRIVILEGES
指定したユーザ、ロール、すべてのユーザ (PUBLIC) に対し、オブ
ジェクト特権を付与することができます。オブジェクト特権を付与
するユーザには、その前に CONNECT システム ロールを付与し、パ
スワードを割り当てておく必要があります。オブジェクト特権が付
与されるロールは、CREATE ROLE 文で作成しておきます。
システム ロールには、オブジェクト特権を付与できません。
ユーザまたはロールに付与できるのは、指定したテーブルに対する
次のオブジェクト特権です。
8-212 SQL Reference Guide
オブジェクト特権
説明
DELETE
行の削除
INSERT
行の挿入
SELECT
行の抽出
UPDATE
行の修正
ALL PRIVILEGES
上記のすべて
GRANT ( 特権 )
テーブルに対する INSERT 特権を持っているユーザが行を挿入する
には、そのテーブルに対する SELECT 特権も必要です。
テーブルを作成したユーザは、そのテーブルに対するすべてのオブ
ジェクト特権を自動的に取得します。これらの特権は、テーブル作
成者が取り消すことはできません。DBA システム ロールのメン
バーは、システム テーブル以外のデータベース テーブルについて、
すべてのオブジェクト特権を取得します。
<table_name>
テーブル名を指定します。データベース カタログにあるテーブル
か、ビューを指定してください。テーブルのシノニムは指定できま
せん。ビューを指定した場合は、SELECT 特権しか付与されませ
ん。テンポラリ テーブルに対して特権は付与できません。
TO
指定したすべてのオブジェクト特権が付与される、データベース
<db_username> ユーザを指定します。データベース ユーザは、オブジェクト特権を
付与する前に作成しておく必要があります。
指定したすべてのオブジェクト特権が付与される、ユーザが作成し
たロールを指定します。指定したロールのメンバー全員に、指定し
たオブジェクト特権が付与されます。指定するロールは、オブジェ
クト特権を付与する前に作成しておく必要があります。システム
ロールは変更できないため、システム ロールをロール名に指定する
ことはできません。
TO PUBLIC
指定したすべてのオブジェクト特権を、すべてのデータベース ユー
ザに付与します。
例
次のステートメントは、Product テーブルに対する SELECT 特権をすべてのデータ
ベース ユーザに付与します。
grant select on product to public
次のステートメントは、Sales テーブルに対する SELECT、INSERT、DELETE、お
よび UPDATE 特権を alison に付与します。
grant all privileges on sales to alison
次のステートメントは、Market テーブルに対する SELECT、INSERT、および
DELETE 特権を market_research ロールに付与します。market_research ロールの全メ
ンバーは、Market テーブルでこれらの操作を実行できます。
grant select, insert, delete on market to market_research
SQL 文と RISQL 拡張機能
8-213
INSERT
INSERT
INSERT 文は、指定した基本テーブルに任意の数の行を挿入します。
アクセス権
テーブルに行を挿入するユーザは、次の中で少なくとも 1 つの条件を満たしている
必要があります。
■
■
■
■
DBA システム ロールのメンバーであること
明示的に付与されるかユーザが作成したロールのメンバーであることによ
り、MODIFY_ANY 権限を持っていること
テーブルの作成者であること
そのテーブルに対する SELECT 特権および INSERT 特権を持っていること
構文
次に INSERT 文の構文ダイアグラムを示します。
<table_name>
INSERT INTO
,
<column_name>
(
,
VALUES
(
<literal>
NULL
DEFAULT
<select_statement>
DEFAULT VALUES
8-214 SQL Reference Guide
)
)
INSERT
<table_name>
行を挿入するテーブルの名前またはシノニムを指定します。
<table_name> 変数にビュー名を指定することはできません。
<column_name>
テーブルの列を指定します。
■
■
■
列名は、任意の順序で指定できます。
列名は、一度しか指定できません。
指定しなかった列には、デフォルト値が割り当てられ
ます。テーブル作成時にデフォルト値を指定しなかっ
た列には NULL が代入されます。
列を指定しなかった場合は、指定したテーブルの列の順番で、
すべての列を指定したとみなされます。
NOT NULL に設定されている列には、NULL 以外の値を INSERT
文に指定する必要があります。
VALUES
VALUES 句を指定する場合は、列リストと同数の値を指定して
ください。列リストを指定しなかった場合は、指定したテーブ
ルの列数および列順に合わせて、VALUES 句の値を指定する必
要があります。
INSERT 文は、指定した最初の列に最初の値、2 番めの列に 2 番
めの値、という順に挿入していきます。
SQL 文と RISQL 拡張機能
8-215
INSERT
SERIAL 列への挿入では次の結果が想定されます。
■
■
■
■
■
シリアル (SERIAL) 型列を指定しなかった場合は、システ
ムによって値が生成されます。システムに現在格納され
ている最大のシリアル (SERIAL) 型値が増分されます。
シリアル (SERIAL) 型列にデフォルト値を指定した場合
は、値が生成されます。システムに現在格納されてい
る最大のシリアル (SERIAL) 型値が増分されます。
シリアル (SERIAL) 型列に負の実数値または 0 を挿入し
ようとした場合、行は挿入されません。挿入が失敗し、
エラー メッセージが表示されます。
シリアル (SERIAL) 型列に正の実数値を挿入する場合、
挿入する正の実数値とシステムに現在格納されている
最大のシリアル (SERIAL) 型値が比較されます。挿入す
る値のほうが大きい場合、格納値が挿入する値で置き
換えられます。格納値以下であれば、格納されている
シリアル (SERIAL) 型値は変更されません。
挿入操作中、シリアル (SERIAL) 型列の値が 0 または負
の値であった場合は、挿入操作が失敗し、エラー メッ
セージが返されます。操作が失敗すると次の 2 つのど
ちらかの結果になります。
❑ バージョニングが有効な場合、すべての未確定の
行がロール バックされます。行は挿入されませ
ん。システムに現在格納されているシリアル
(SERIAL) 型値は変更されません。
❑ バージョニングが無効の場合、INSERT 文が失敗す
る前に適切な値を持っていた行が挿入されます。
挿入された値に基づいて、システムに現在格納さ
れている最大のシリアル (SERIAL) 型値が調整され
ます。
<literal>
文字定数または数値定数を指定します。
NULL
指定した列への NULL 値の挿入を指定します。NOT NULL に設
定されている列を指定した場合は、その行の挿入がエラーにな
ります。
8-216 SQL Reference Guide
INSERT
DEFAULT
指定した列に、その列のデフォルト値を挿入します。デフォル
ト値は、テーブルの作成時か、ALTER TABLE 文でそのテーブル
に列を追加する時に指定します。
デフォルト値が設定されておらず、NULL 値が許可されている
列には、NULL が挿入されます。デフォルト値が設定されておら
ず、NOT NULL が設定されている列の場合は、その行の挿入が
エラーになります。
<select_statement> 7-54 ページに定義する標準 SQL の SELECT 文を指定します。た
だし、ORDER BY 句に BREAK BY サブ句を指定することはでき
ません。
行データの並び順に依存する一部の RISQL 表示関数を使用する
場合は、クエリの結果をソートしてからその行データをテーブ
ルに挿入すると便利です。中間クエリ結果の順序、さらに
RISQL 表示関数が返す値は、ORDER BY 句によって決まりま
す。
クエリのリザルト テーブルの行データが、指定したテーブルに
挿入されます。クエリからは、1 行だけが返される場合もあれ
ば、複数行が返されることもあります。1 行も返されないと、
次のメッセージが返されます。
** INFORMATION ** (209) Rows inserted: 0.
クエリが返す列の数は、列リストに指定した列の数と同じであ
る必要があります。列リストに指定した最初の列にクエリのリ
ザルト テーブルの先頭列の値、2 番めの列に 2 番めの値、とい
う順に挿入されます。
DEFAULT
VALUES
テーブルに挿入するすべての行が、各列のデフォルト値を使用
します。テーブルの各列にデフォルト値が挿入されます。
DEFAULT VALUES は <column_name> リストと併用することはで
きません。
デフォルトが設定されておらず、NOT NULL と設定されている
列がテーブルにある場合、DEFAULT VALUES サブ句を指定した
INSERT 文はエラーになります。
SQL 文と RISQL 拡張機能
8-217
INSERT
使用上の注意
参照整合性を維持するため、対応するプライマリ キーの値がないフォーリン キー
の値を指定した INSERT 文はエラーになります。
次のテーブルには、行は挿入できません。
■
■
プライマリ キーの B-TREE インデックスが削除された参照先テーブル。た
だし、そのプライマリ キーに STAR インデックスが作成されている場合
は、行を挿入することができます。
プライマリ キーの B-TREE インデックスが削除されたテーブルを参照する
参照元テーブル。参照先テーブルのプライマリ キーに STAR インデックス
が作成されていても、行は挿入できません。
数値定数の有効桁数が数値列のサイズを超える場合は、エラー メッセージが返され
ます。浮動小数点数値は、その精度が数値列のサイズを超える場合は、スケール
( 小数点以下の桁数 ) が切り捨てられます。
INSERT 文を実行すると、事前計算ビューに対して集約保守が実行されることがあ
ります。集約保守の詳細については、
『IBM Red Brick Vista User’s Guide』を参照して
ください。
例 : INSERT 文
この例は、クエリの結果をテーブルに挿入する方法を示します。テーブル
(Q1_00_Sales) には、2000 年の第 1 四半期に Los Gatos で販売された製品の売上を返
すクエリの結果が挿入されます。Q1_00_Sales の売上データは、Sales テーブルから
一部のデータを抽出したものです。Q1_00_Sales に対してクエリを実行すれば、
City と Period に対する制約を指定しなくてもデータを限定することができます。
クエリの結果をテーブルに挿入するには
1.
Q1_00_Sales テーブルを作成します。
create table Q1_00_Sales
(product char(30), month char(5), dollars
dec(7,2));
8-218 SQL Reference Guide
INSERT
2.
2000 年の第 1 四半期に Los Gatos で販売された製品の売上データを返すク
エリを使った INSERT 文を実行します。クエリの結果は、Q1_00_Sales
テーブルに挿入されます。
insert into Q1_00_Sales (product, month, dollars)
select prod_name, month, dollars
from sales natural join product natural join period
natural join store
where qtr = 'Q1_00'
and city like 'Los Gatos%'
** INFORMATION ** (209) Rows inserted: 390.
3.
これで、売上データの一部が Q1_00_Sales テーブルに格納されました。
テーブルに挿入されたデータは、2000 年の第 1 四半期に Los Gatos で販売
された製品の売上に限定されています。
Q1_00_Sales テーブルに対して次のクエリを実行し、Veracruzano 製品の情
報だけを表示するようにデータをさらに限定します。
select * from q1_00_sales
where product like 'Vera%'
PRODUCT
Veracruzano
Veracruzano
Veracruzano
...
MONTH
JAN
JAN
JAN
DOLLARS
330.00
285.00
262.50
『SQL Self-Study Guide』に、上記と同様の INSERT INTO...SELECT 文の例がありま
す。
次の INSERT 文は、新規のクラスを定義する 1 行を Class テーブルに挿入します。
insert into class
(classkey, class_type, class_desc)
values (13, 'Music', 'Aroma collection of compact discs and
cassettes')
CLASSKEY CLASS_TYPE CLASS_DESC
13
Music
Aroma collection of compact discs
and cassettes
列名を指定せずにこのステートメントを再書き込みできます。これは、テーブルの
各列に値が挿入され、テーブルで列を定義した順序で値が挿入されるという 2 つの
条件が満たされているためです。
insert into class
values (13, 'Music', 'Aroma collection of compact discs and
cassettes')
SQL 文と RISQL 拡張機能
8-219
INSERT
次の例では、Store テーブルの作成時に、State 列のデフォルトに CA が設定されて
いることを想定しています。次のステートメントは、State 列に CA を挿入します。
insert into store
(custkey, mktkey, store_type, name, street, city, state,
zip)
values (20, 14, 'Small', 'Coffee Haven', '324 Ashby Avenue',
'Berkeley', default, 94707)
次の INSERT 文は、Market テーブルの作成時に、Mktkey 列のデフォルトに 1000、
Hq_City 列のデフォルトに Atlanta を設定し、その他の列にはデフォルトを設定
せず、NULL 値を許可していることを想定しています。
insert into market
default values
MKTKEY
1000
HQ_CITY
Atlanta
HQ_STATE
NULL
DISTRICT
NULL
REGION
NULL
次の例では、シリアル (SERIAL) 型列を含むテーブルに行を挿入します。
create table serial_table (col1 serial not null, col_2
char(10) not null);
insert into serial_table (col_2) values ('yes');
** INFORMATION ** (209) Rows inserted: 1.
select * from serial_table;
COL1
1
8-220 SQL Reference Guide
COL_2
yes
LOCK ( テーブルのロック )
LOCK ( テーブルのロック )
LOCK 文は、ほかのユーザによるテーブルへのアクセスを禁止します。
アクセス権
テーブルをロックするユーザは、次の中で少なくとも 1 つの条件を満たしている必
要があります。
■
■
■
■
DBA システム ロールのメンバーであること
明示的に付与されるかユーザが作成したロールのメンバーであることによ
り、MODIFY_ANY 権限を持っていること
テーブルの作成者であること
そのテーブルに対する INSERT、DELETE、UPDATE 特権を持っているこ
と
構文
次に LOCK 文の構文ダイアグラムを示します。
LOCK
<table_name>
FOR DELETE
<table_name>
ロックするテーブルの名前を指定します。1 人のユーザがロック
できるテーブルは、1 度に 1 つだけです。ロックされたテーブル
には、ほかのユーザによるすべてのアクセスが禁止されます。
FOR DELETE
削除操作に対し、カスケード ロックをかけます。LOCK 文に指定
したテーブルへのフォーリン キー参照を行うテーブルがロックさ
れます。こうしたほかのテーブルへのロックのタイプ ( 読み取り
または書き込み ) は、テーブルの CREATE TABLE 文の FOREIGN
KEY...ON DELETE 句によって決まります。
1 つのテーブルをロックすると、そのテーブルを参照するほかの
テーブルにもロックがカスケードされます。
SQL 文と RISQL 拡張機能
8-221
LOCK DATABASE
使用上の注意
ロックされたテーブルには、ロックが解除されるまでほかのユーザはアクセスでき
ません。ロックは、そのロックを保持しているユーザが UNLOCK 文を実行するか、
サーバ セッションを終了すると解除されます。
1 つ以上のテーブルを変更する複数の操作をする場合は、LOCK 文でほかのユーザ
をロック アウトするとテーブルのアクセスが向上します。
テーブルをロックしたユーザがそのテーブルを変更するか、CREATE INDEX 文を実
行すると、ロックを保持した状態でインデックスが作成されます。
LOCK DATABASE
LOCK DATABASE 文は、指定されたモード ( 読み取りまたは書き込み ) でデータ
ベースをロックします。データベース内の各テーブルのロックが完了するまでは、
ユーザのアクセスが一時停止されます。システム テーブルもロックされます。
データベースのロックを解除する場合は、UNLOCK DATABASE 文を使用します。
アクセス権
データベースをロックするユーザは、次の中で少なくとも 1 つの条件を満たしてい
る必要があります。
■
■
DBA システム ロールのメンバーであること
明示的に付与されるかユーザが作成したロールのメンバーであることによ
り、LOCK_DATABASE 権限を持っていること
構文
次に LOCK DATABASE 文の構文ダイアグラムを示します。
LOCK DATABASE
READ
WRITE
8-222 SQL Reference Guide
LOCK DATABASE
READ
各テーブルに READ ロックをかけ、次にデータベースに READ ロッ
クをかけます。
データベースを READ モードでロックすると、次のようになりま
す。
■
■
データベースに WRITE ロックをかけることができなくな
ります。
データベース サーバはデータベースへのクエリを許可しま
すが、更新は許可しません。
WRITE モードでロックされているテーブルがある場合、LOCK
DATABASE READ 文の実行は失敗します。
WRITE
各テーブルに WRITE ロックをかけます。データベースに WRITE
ロックをかけ、次にテーブルにかけられている WRITE ロックを解
除します。READ、WRITE のどちらも指定されていない場合、
WRITE モードでデータベースがロックされます。
データベースを WRITE モードでロックすると、次のようになりま
す。
■
■
データベースをほかのモードでロックすることができなく
なります。
データベース サーバはデータベースへのクエリも更新も許
可しません。
LOCK TABLE 文でテーブルをロックしたユーザが LOCK
DATABASE WRITE 文を発行した場合、そのステートメントは正常
に実行されます。このユーザが LOCK DATABASE READ 文を発行し
た場合、そのステートメントの実行は失敗します。
ユーザがテーブルをロックしている場合、別のユーザが LOCK
DATABASE READ 文または LOCK DATABASE WRITE 文を発行する
と、どちらのステートメントの実行も失敗します。
使用上の注意
User1 がデータベースをロックしたとき User2 が接続中の場合、User2 はデータベー
スを終了できますが、データベースのロックが解除されない限りほかの RISQL 文を
発行できません。
ロックは、そのロックの要求者が次の操作を行うことにより解除されます。
■
■
UNLOCK DATABASE 文の実行
データベース サーバ セッションの終了
SQL 文と RISQL 拡張機能
8-223
REVOKE ( 権限とロール )
重要 : データベースをロックしたユーザがセッションを終了すると、データベー
スのロックが自動的に解除されます。
REVOKE ( 権限とロール )
REVOKE 文は、DBA システム ロール、RESOURCE システム ロール、ユーザが作成
したロール、個別のタスク権限を、データベース ユーザおよびロールから取り除き
ます。
アクセス権
REVOKE 文を使用するユーザは、次の中で少なくとも 1 つの条件を満たしている必
要があります。
■
■
DBA システム ロールのメンバーであること
明示的に付与されるかユーザが作成したロールのメンバーであることによ
り、ROLE_MANAGEMENT 権限を持っていること
構文
次に REVOKE 文の構文ダイアグラムを示します。
,
,
DBA
REVOKE
RESOURCE
FROM
<db_username>
<role_name>
<authorization>
<role_name>
DBA
指定したデータベース ユーザまたはユーザが作成したロールから、
DBA システム ロールを取り除きます。
RESOURCE
指定したデータベース ユーザまたはユーザが作成したロールから、
RESOURCE システム ロールを取り除きます。
<authorization> 指定したデータベース ユーザまたはロールから取り除く個別のタス
ク権限を指定します。
8-224 SQL Reference Guide
REVOKE ( 権限とロール )
<role_name>
指定したデータベース ユーザまたはロールから取り除くユーザが作
成したロールを指定します。
FROM
指定したタスク権限およびロールを取り消すデータベース ユーザ名
<db_username> を指定します。
FROM
<role_name>
指定したタスク権限およびロールが取り消されるロールの名前を指
定します。システム ロールは変更できないため、ロール名に指定で
きません。
使用上の注意
システム ロールからタスク権限を取り除くことはできません。
データベース ユーザの権限を取り消しても、ロールを通じてその権限がユーザに
残っている場合があります。これを取り消すには、その権限を持つすべてのロール
をデータベース ユーザから取り除いてください。
同様に、ロールから権限を取り除いても、その権限がロールのメンバーに残ってい
る場合があります。その権限を直接に付与されたか、ほかのロールを通じて付与さ
れた場合がこれにあたります。ロールの全メンバーから権限を取り除くには、その
権限を各メンバーから取り除いてください。
ユーザおよびロールに明示的に付与された権限と、ロールを通じて直接または間接
的に付与された権限を確認するには、RBW_USERAUTH システム テーブルに対し
てクエリを実行します。
例
ユーザが権限を取り消された後も、ユーザがその権限にアクセスできる例を示しま
す。
1.
temp ロールを作成します。
create role temp
2.
ユーザ tommy を作成し、パスワードを割り当て、temp ロールを付与しま
す。
grant connect, temp to tommy with mysecret
3.
CREATE_ANY タスク権限を tommy に付与します。
grant create_any to tommy
SQL 文と RISQL 拡張機能
8-225
REVOKE CONNECT
4.
CREATE_ANY タスク権限を temp ロールに付与します。
grant create_any to temp
5.
tommy には、CREATE_ANY タスク権限が明示的に付与され、temp ロール
のメンバーとして間接的にも付与されています。
tommy から CREATE_ANY タスク権限を取り消します。
revoke create_any from tommy
tommy は temp ロールのメンバーであるため、データベース オブジェクト
を作成する権限をまだ持っています。データベース オブジェクトの作成を
tommy に対して禁止するには、CREATE_ANY タスク権限を temp ロールか
ら取り除くか、temp ロールを tommy から取り除く必要があります。
revoke create_any from temp
revoke temp from tommy
REVOKE CONNECT
REVOKE CONNECT 文は、データベースからユーザ名を削除します。
アクセス権
データベース ユーザ名を削除するユーザは、次の中で少なくとも 1 つの条件を満た
している必要があります。
■
■
DBA システム ロールのメンバーであること
明示的に付与されるかユーザが作成したロールのメンバーであることによ
り、USER_MANAGEMENT 権限を持っていること
構文
次に REVOKE CONNECT 文の構文ダイアグラムを示します。
REVOKE CONNECT
8-226 SQL Reference Guide
FROM
<db_username>
REVOKE ( 特権 )
CONNECT
データベースからユーザ名を削除します。
FROM
データベース ユーザ名を指定します。指定されたユーザは、データ
<db_username> ベースに接続できなくなり、タスク権限、オブジェクト特権、ロー
ルが取り消されます。
使用上の注意
ロールを削除する場合は、DROP ROLE 文を使用してください。
REVOKE (特権)
REVOKE 文は、データベース ユーザおよびユーザが作成したロールから、指定し
たテーブルに対する指定したオブジェクト特権を取り除きます。
アクセス権
テーブルに対するオブジェクト特権を取り消すユーザは、次の中で少なくとも 1 つ
の条件を満たしている必要があります。
■
■
■
■
DBA システム ロールのメンバーであること
RESOURCE システム ロールのメンバーで、かつテーブルの作成者である
こと
テーブルの作成者で、明示的に付与されるかユーザが作成したロールのメ
ンバーであることにより、GRANT_OWN タスク権限を持っていること
明示的に付与されるかユーザが作成したロールのメンバーであることによ
り、GRANT_TABLE タスク権限を持っていること
SQL 文と RISQL 拡張機能
8-227
REVOKE ( 特権 )
構文
次に、特権を取り消す REVOKE 文の構文ダイアグラムを示します。
,
REVOKE
ON
ALL
<table_name>
PRIVILEGES
DELETE
INSERT
SELECT
UPDATE
,
<db_username>
FROM
<role_name>
PUBLIC
<table_name>
取り消すオブジェクト特権の対象となるテーブルを指定します。テ
ンポラリ テーブルに対して特権は付与できません。したがって、取
り消すこともできません。
FROM
オブジェクト特権が取り消されるデータベース ユーザを指定しま
<db_username> す。
FROM
<role_name>
オブジェクト特権が取り消される、ユーザが作成したロールを指定
します。
PUBLIC
すべてのユーザから、指定したオブジェクト特権を取り除きます。
使用上の注意
データベース ユーザのオブジェクト特権を取り消しても、ユーザが作成したロール
を通じてその特権がユーザに残っている場合があります。これを取り消すには、そ
のオブジェクト特権を持つロールもユーザから取り除く必要があります。
同様に、ロールからオブジェクト特権を取り除いても、その特権がロールのメン
バーに残っている場合があります。そのオブジェクト特権を直接に付与されたか、
ほかのロールを通じて付与された場合がこれにあたります。ロールの全メンバーか
らオブジェクト特権を取り除くには、そのオブジェクト特権を各ユーザから取り除
いてください。
8-228 SQL Reference Guide
SELECT
特定のテーブルについて、ユーザおよびロールに明示的に付与されたオブジェクト
特権と、ロールを通じて直接または間接的に付与されたオブジェクト特権を確認す
るには、RBW_TABAUTH システム テーブルに対してクエリを実行します。
例
次のステートメントは、Product テーブルに対する SELECT 特権を、すべてのデー
タベース ユーザから取り除きます。
revoke select on product from public
すべてのユーザ (PUBLIC) について SELECT 特権が取り消されましたが、Product
テーブルの所有者であるか次のいずれかを付与されたユーザは、まだ Product テー
ブルに対する SELECT 特権を持っている場合があります。
■
■
■
■
そのテーブルに対する SELECT 特権
そのテーブルに対する SELECT 特権を持つロール
ACCESS_ANY タスク権限
ACCESS_ANY タスク権限を持つロール
SELECT
SELECT 文は、データベース テーブルからデータ行を抽出します。次に SELECT 文
の構文ダイアグラムを示します。
<query_expression>
<order_by_clause>
<query_expression>
<suppress_by_clause>
7-4 ページに定義する結合クエリ式または非結合クエリ式を指
定します。
SELECT 文の詳細については、7-54 ページを参照してください。
UNLOCK ( テーブルのロック解除 )
UNLOCK 文は、LOCK ( テーブルのロック ) 文で設定されたテーブルのロックを解
除します。
SQL 文と RISQL 拡張機能
8-229
UNLOCK DATABASE
アクセス権
テーブルのロックを解除できるのは、そのロックをかけているユーザだけです。
構文
次に UNLOCK 文の構文ダイアグラムを示します。
UNLOCK
<table_name>
<table_name>
ロックを解除するテーブルの名前を指定します。
使用上の注意
テーブルをロックしたユーザが、そのテーブルを修正するか、CREATE INDEX 文を
実行すると、ロックを保持した状態でインデックスが作成されます。
例
Product テーブルのロックを解除する例を示します。
unlock product
UNLOCK DATABASE
ユーザが設定したデータベースのロックを解除します。
アクセス権
データベースのロックを解除できるのは、そのロックをかけているユーザだけで
す。
8-230 SQL Reference Guide
UPDATE
構文
次に UNLOCK DATABASE 文の構文ダイアグラムを示します。
UNLOCK DATABASE
使用上の注意
データベースがロックされると、ロックが解除されるまでは、ほかのユーザがデー
タベースのテーブルにアクセスすることはできません。データベースのロックを解
除する方法は 2 つあります。
■
■
そのユーザによる UNLOCK DATABASE 文の実行
そのユーザによるセッションの終了
UPDATE
UPDATE 文は、指定したテーブルの行を修正します。
アクセス権
テーブルの行を更新するユーザは、次の中で少なくとも 1 つの条件を満たしている
必要があります。
■
■
■
■
DBA システム ロールのメンバーであること
明示的に付与されるかユーザが作成したロールのメンバーであることによ
り、MODIFY_ANY 権限を持っていること
テーブルの作成者であること
そのテーブルに対する UPDATE 特権を持っていること
構文
次に UPDATE 文の構文ダイアグラムを示します。
SQL 文と RISQL 拡張機能
8-231
UPDATE
,
UPDATE
<table_name>
SET
<column_name>
=
<expression>
NULL
,
WHERE
<search_condition>
<table_reference>
FROM
<table_name>
テーブルの名前、テンポラリ テーブルの名前、またはシノニムを指
定します。<table_name> にはビューを指定できません。
SET
任意の数の列名および式を指定します。UPDATE 文は、指定した列
の値を <expression> または NULL に設定します。
列名は、次の規則に従います。
■
■
■
指定したテーブルに、すでに定義されている必要がありま
す。
重複して指定できません。
テーブル名または相関名で修飾できません。
UPDATE 文の SET 句には、集約関数 (COUNT、SUM など ) および
RISQL 表示関数 (RANK、NTILE など ) は指定できません。
FROM
行の更新に使用する値が含まれる 1 つまたは複数のテーブルを追加
<table_reference> 指定します。<table_reference> で指定した複数のテーブルが結合さ
れ、WHERE 句で指定したとおりに <table_name> 内の行が更新され
ます。<table-reference> は table-name も含んでいる必要があります。
このセクションの末尾にある例を参照してください。
FROM <table-reference> 句は、より高い性能をもつサブクエリの代用
として使用します。
<table-reference> で指定されるテーブルは、基本テーブルまたはシ
ノニムである必要があります。
8-232 SQL Reference Guide
UPDATE
更新するテーブルに相関名が割り当てられている場合は、実際の
テーブル名ではなく、その相関名を使用してテーブルを識別する必
要があります。
UPDATE 操作の FROM 句でターゲット テーブルに相関名が割り当て
られている場合は、テーブル名そのものではなく相関名を使用して
UPDATE 文のほかのテーブルを指定します。たとえば、次のように
なります。
update sales_old
set sales_old.quantity = 999
from sales as sales_old, period
where sales_old.perkey = period.perkey
and...
FROM 句は、更新するテーブルのセグメント化の基準となった列の
更新には使用できません。たとえば、テーブル t が列 b の値を基準
にセグメント化された場合は、次のステートメントはエラーを返し
ます。
UPDATE t
SET t.b = 7
FROM t, s
WHERE t.a = s.c
<table_reference> 句の詳細については、7-13 ページ「テーブル参照」
を参照してください。
WHERE
WHERE 句を省略すると、テーブルのすべての行が更新されます。
指定した場合は、検索条件を満たす行だけが更新されます。検索条
件には、サブクエリも使用できます。
検索条件については 3-10 ページ、WHERE 句については 7-36 ページ
を参照してください。
SQL 文と RISQL 拡張機能
8-233
UPDATE
使用上の注意
次の操作を行う UPDATE 文は、エラーになります。
■
■
■
■
■
■
参照先テーブルのプライマリ キー列を更新する。
参照先テーブルにプライマリ キー インデックス 1 がない場合に、参照元
テーブルのフォーリン キー列を更新する。
対応するプライマリ キー値を持たない値をフォーリン キーに挿入する。
この場合参照整合性は保持されます。
プライマリ キー値を既存の値に設定する。プライマリ キーは一意である
必要があります。
NOT NULL と設定されている列を NULL に設定する。
値が負または 0 であるシリアル (SERIAL) 列を更新する。8-215 ページの
INSERT 値についての説明を参照してください。
上記の操作を行うと、対応するエラー メッセージが返されます。
SELECT 文とは異なり、UPDATE 文は、WHERE 句での外部結合をサポートしてい
ません。外部結合が必要な場合は、FROM 句で指定してください。
FROM 句では、変更するテーブルの指定には次の制限があります。
■
■
■
ライト外部結合で指定される右のテーブルとしては指定できません。
レフト外部結合で指定される左のテーブルとしては指定できません。
フル外部結合のどの場所にも指定できません。
次の例では、更新される Sales テーブルが外部結合の右側で指定されているため、
UPDATE 文が構文エラーを返します。
update sales
set dollars = dollars * 1.1
from product left outer join sales
on sales.prodkey = product.prodkey
where product.prod_name = 'Veracruzano'
次の UPDATE 文は有効です。
update sales
set dollars = dollars * 1.1
from sales left outer join product
on sales.prodkey = product.prodkey
where product.prod_name = 'Veracruzano'
UPDATE 文を実行すると、事前計算ビューに対して集約保守が実行されることがあ
ります。集約保守の詳細については、
『IBM Red Brick Vista User’s Guide』を参照して
ください。
8-234 SQL Reference Guide
UPDATE
例
次の UPDATE 文は、検索条件を満たす Product_Promo テーブルの行を更新します。
update product_promo
set descript = 'Espresso NO!',
promo = 'March Wind',
subpro = NULL
where prod_id between 1020 and 1040
次の例は、FROM 句の使い方を示しています。Sales テーブルを更新し、
「Veracruzano」という製品についての収益を 10% 増加させます。
update sales
set dollars = dollars * 1.1
from sales, product
where sales.prodkey = product.prodkey
and sales.classkey = product.classkey
and product.prod_name = 'Veracruzano'
SQL 文と RISQL 拡張機能
8-235
第9章
文
この章について .
.
.
.
SET ADVISOR LOGGING
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
9-5
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
9-5
.
.
.
.
.
.
.
.
9-6
SET ADVISOR MAXIMUM CANDIDATE VIEWS
SET ADVISOR SAMPLE SIZE .
.
.
.
.
.
.
.
.
.
.
.
.
.
9-7
SET ARITHIGNORE、ARITHABORT
.
.
.
.
.
.
.
.
.
.
.
.
9-8
SET CHECK REPORT FILE PERMISSIONS
.
.
.
.
.
.
.
.
.
.
9-9
SET CHECK_TABLE_INDEX_DIRECTORY
.
.
.
.
.
.
.
.
.
.
9-10
SET COUNT RESULT .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
9-10
SET CROSS JOIN
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
9-11
SET DEFAULT DATA SEGMENT .
.
.
.
.
.
.
.
.
.
.
.
.
.
9-13
SET DEFAULT INDEX SEGMENT .
.
.
.
.
.
.
.
.
.
.
.
.
.
9-15
SET DEFAULT PSU EXTENDSIZE
.
.
.
.
.
.
.
.
.
.
.
.
.
9-16
.
.
.
SET DEFAULT SEGMENT SIZE
.
.
.
.
.
.
.
.
.
.
.
.
.
.
9-18
SET EXPORT_DEFAULT_PATH
.
.
.
.
.
.
.
.
.
.
.
.
.
.
9-19
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
9-20
SET EXPORT_MAX_FILE_SIZE
.
.
.
.
.
.
.
.
.
.
.
.
.
.
9-21
SET FIRST DAYOFWEEK
.
.
.
.
.
.
.
.
.
.
.
.
.
.
9-22
. .
. .
. .
9-23
9-25
9-25
SET EXPORT_DELIMITER .
.
.
SET FORCE TASKS . . . . . . . . . . . . . . . .
FORCE_SCAN_TASKS . . . . . . . . . . . . . .
FORCE_FETCH_TASKS と FORCE_JOIN_TASKS . . . . .
FORCE_TARGETJOIN_TASKS .
FORCE_HASHJOIN_TASKS . .
FORCE_AGGREGATION_TASKS .
SET IDLE TIMEOUT
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
9-25
9-25
9-25
.
.
.
.
.
.
.
.
.
.
.
.
.
.
9-26
SET IGNORE OPTICAL INDEXES .
.
.
.
.
.
.
.
.
.
.
.
.
.
9-27
SET IGNORE PARTIAL INDEXES .
.
.
.
.
.
.
.
.
.
.
.
.
.
9-28
.
.
.
.
.
.
9-29
SET INDEX TEMPSPACE と SET QUERY TEMPSPACE
SET INFO MESSAGE LIMIT .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
9-33
SET LOCK .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
9-34
SET OLAP APPROXIMATE NUMERIC FAST COMPUTATION
.
.
.
.
9-35
SET OPTICAL AVAILABILITY .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
9-36
SET ORDER BY .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
9-38
.
.
.
.
.
.
.
.
.
.
.
.
.
9-39
.
.
.
.
.
.
.
.
.
.
.
SET PARALLEL SET_OPERATION
SET PARALLEL_HASHJOIN
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
9-40
SET PARTIAL AVAILABILITY .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
9-41
SET PARTITIONED PARALLEL AGGREGATION .
.
.
.
.
.
.
.
.
9-43
SET PERFORMANCE MONITOR .
.
.
.
.
.
.
.
.
.
.
.
.
.
9-44
SET PRECOMPUTED VIEW MAINTENANCE .
.
.
.
.
.
.
.
.
.
9-46
.
.
.
.
.
9-47
SET PRECOMPUTED VIEW MAINTENANCE ON ERROR
SET PRECOMPUTED VIEW QUERY REWRITE .
.
.
.
.
.
.
.
.
9-48
SET QUERY MEMORY LIMIT .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
9-49
SET QUERYPROCS .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
9-50
SET REPORT_INTERVAL .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
9-51
SET RESULT BUFFER と SET RESULT BUFFER FULL ACTION
.
.
.
9-52
SET ROWCOUNT
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
9-53
SET ROWS_PER...TASK .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
9-54
9-2 SQL Reference Guide
.
.
.
ROWS_PER_SCAN_TASK . . . . . . . . . . . . . . . . 9-55
ROWS_PER_FETCH_TASK と ROWS_PER_JOIN_TASK . . . . . 9-55
ROWS_PER_TARGETJOIN_TASK . . . . . . . . . . . . . 9-56
SET SAMPLE MARGIN .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 9-57
SET SAMPLE SEED .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 9-59
SET SEGMENTS .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 9-61
SET STATS .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 9-62
SET TARGETJOIN LOCAL PREDICATES .
.
.
.
.
.
.
.
.
.
.
. 9-64
.
.
.
.
.
.
.
.
. 9-67
.
.
.
.
.
.
.
.
.
. 9-68
SET UNIFORM PROBABILITY FOR ADVISOR .
.
.
.
.
.
.
.
.
. 9-69
SET USE INVALID PRECOMPUTED VIEWS .
.
.
.
.
.
.
.
.
.
. 9-70
SET USE LATEST REVISION .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 9-71
SET VERSIONING
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 9-72
.
.
SET TEMPORARY SEGMENT STORAGE PATH
SET TRANSACTION ISOLATION LEVEL .
.
.
.
.
.
SET 文
9-3
9-4 SQL Reference Guide
この章について
この章では、現在のセッションにおけるデータベース サーバのデフォルト動作を変
更する SET 文をアルファベット順に説明します。SET 文と同等の機能を持つグロー
バル パラメータを、すべてのセッションのデフォルトとして rbw.config ファイルで
指定できます。グローバル パラメータについては、『Administrator's Guide』を参照
してください。
RISQL Entry Tool、RISQL Reporter、および Table Management Utility (TMU) の動作を
制御する SET 文については、各プログラムのマニュアルを参照してください。
SET ADVISOR LOGGING
SET ADVISOR LOGGING 文は、現在のセッションに対する Vista Advisor クエリのロ
グ記録を有効または無効にします。SET ADVISOR LOGGING 文を有効にするには、
rbw.config ファイルの ADMIN ADVISOR_LOGGING ON 設定または ALTER SYSTEM
START ADVISOR_LOGGING 文を使って、Advisor のログ記録を有効にする必要があ
ります。
このステートメントを使用して、特定のクエリが Advisor ログにログ記録されるか
されないかを制御します。
構文
次に SET ADVISOR LOGGING 文の構文ダイアグラムを示します。
SET ADVISOR LOGGING
ON
OFF
ON_WITH_CORR_SUB
SET 文
9-5
SET ADVISOR MAXIMUM CANDIDATE VIEWS
このパラメータが ON_WITH_CORR_SUB に設定された場合は、相関サブクエリがほ
かの書き換えられたクエリとともに記録されます。このパラメータが ON に設定さ
れた場合、相関サブクエリは記録されません。rbw.config ファイルの OPTION
ADVISOR_LOGGING パラメータを使用すると、すべてのセッションにこのパラ
メータを設定できます。rbw.config ファイルのパラメータのデフォルトは ON です。
Advisor の詳細については、
『IBM Red Brick Vista User’s Guide』を参照してください。
SET ADVISOR MAXIMUM CANDIDATE
VIEWS
候補ビューの解析を行うと、非常に多くの候補ビューが生成されることがありま
す。このプロセスは、各候補のサイズを評価する際のオーバーヘッドによって、時
間がかかる可能性があります。SET ADVISOR MAXIMUM CANDIDATE VIEWS コマ
ンドを使用すると、計算する候補の数を制限し、Advisor 解析にかかる時間を削減
することができます。このコマンドは、各解析で生成される候補の最大数を指定し
ます。最大数を超える候補はそれらの参照カウントに基づいて除外されます。
このコマンドが設定されていない場合、生成できる候補ビューの数は rbw.config
ファイルの OPTION ADVISOR_MAXIMUM_CANDIDATE_VIEWS パラメータによっ
て決定されます。このパラメータのデフォルト値は 20 です。
構文
次に SET ADVISOR MAXIMUM CANDIDATE VIEWS 文の構文ダイアグラムを示しま
す。
SET ADVISOR MAXIMUM CANDIDATE VIEWS
<value>
9-6 SQL Reference Guide
<value>
Vista Advisor 候補の解析で生成できる候補ビューの最大数を正の整
数で指定します。
SET ADVISOR SAMPLE SIZE
SET ADVISOR SAMPLE SIZE
SET ADVISOR SAMPLE SIZE 文は Vista Advisor 候補ビュー解析のファクト テーブル
の行のサンプルを自動的に生成します。ファクト テーブルの行のサンプルを生成す
るには、rbw.config ファイル、または現行のセッションに、候補ビュー解析のデ
フォルト サンプル サイズを指定します。
構文
次に SET ADVISOR SAMPLE 文の構文ダイアグラムを示します。
SET ADVISOR SAMPLE SIZE
<size>
<size>
ファクト テーブル行の割合です。
set advisor sample size 10
デフォルト値は 5% です。
使用上の注意
Vista Advisor 候補ビュー解析は、指定された割合のファクト テーブルの行に対して
実行されます。手動で作成したビューを、候補クエリ ( 管理ツールを使用している
場合はウィザード ) で指定する必要はありません。
重要 : サンプリングを使用すると Vista Advisor 候補ビュー解析を高速化できます。
ただし、サンプリングを使用すると結果は近似値になるため、注意してその近似値
を解釈する必要があります。
ADVISOR_SAMPLE_SIZE パラメータを 100 に設定すると、この Advisor サンプリン
グ方法は実質的に無効になります。自分で選択したサンプル ビューを候補クエリで
指定することにより、パラメータを無効にすることもできます。パラメータを 100
に設定してビューを指定しない場合、解析はファクト テーブル全体に対して実行さ
れます。
このステートメントは、rbw.config ファイルの TUNE ADVISOR_SAMPLE_SIZE
<size> パラメータとしても使用できます。
Advisor の詳細については、
『IBM Red Brick Vista User’s Guide』を参照してください。
SET 文
9-7
SET ARITHIGNORE、ARITHABORT
SET ARITHIGNORE、ARITHABORT
SET ARITHIGNORE 文は、現在のデータベース サーバ セッション中にゼロ除算エ
ラーが発生した場合の処理方法を指示します。
構文
次に SET ARITHIGNORE 文の構文ダイアグラムを示します。
SET
ARITHABORT
ARITHIGNORE
ARITHABORT
クエリの実行中にゼロ除算エラーが発生した場合、クエリの処
理を中止してエラー メッセージを返すように指示します。
ARITHIGNORE
クエリの実行中にゼロ除算エラーが発生した場合、NULL を返
すように指示します。
使用上の注意
ARITHABORT 文は、デフォルトの ARITHABORT、rbw.config ファイルの OPTION
ARITHABORT および OPTION ARITHIGNORE パラメータの設定よりも優先されま
す。
例
次のステートメントは、現在のセッションで実行中のクエリにゼロ除算エラーが発
生した場合に、NULL を返すように指示します。
set arithignore
9-8 SQL Reference Guide
SET CHECK REPORT FILE PERMISSIONS
SET CHECK REPORT FILE PERMISSIONS
SET CHECK REPORT FILE PERMISSIONS 文は、CHECK TABLE 文と CHECK INDEX
文で作成された出力ファイルへのアクセスを制御します。このステートメントは、
rbw.config ファイルの OPTION CHECK_REPORT_FILE_PERMISSIONS パラメータよ
りも優先されます。
構文
次に SET CHECK REPORT FILE PERMISSIONS 文の構文ダイアグラムを示します。
SET CHECK REPORT FILE PERMISSIONS
SERVER_OWNER
SERVER_GROUP
ALL
SERVER_OWNER
CHECK TABLE 文と CHECK INDEX 文の出力を読み取るのは、
redbrick ユーザだけであることを指定します。これはデフォル
トです。
SERVER_GROUP
指定したグループの UNIX ユーザに読み取り専用許可を与えま
す。この設定は、UNIX プラットフォームだけで有効です。
ALL
すべてのユーザに読み取り専用許可を与えます。
SET 文
9-9
SET CHECK_TABLE_INDEX_DIRECTORY
SET CHECK_TABLE_INDEX_DIRECTORY
SET CHECK_TABLE_INDEX_DIRECTORY 文は、CHECK TABLE、または CHECK
INDEX 文にディレクトリ パスを指定していない場合に、サマリ ファイルのデフォ
ルト ディレクトリを指定します。
構文
次に SET CHECK_TABLE_INDEX_DIRECTORY 文の構文ダイアグラムを示します。
SET CHECK_TABLE_INDEX_DIRECTORY
'<directory_name>'
<directory_name> サマリ ファイルが格納されるデフォルト ディレクトリの名前です。
使用上の注意
このステートメントは、rbw.config ファイルの OPTION
CHECK_TABLE_INDEX_DIRECTORY パラメータとしても使用できます。
このオプションを、rbw.config ファイル、またはセッションの設定として指定する
場合、CHECK INDEX、または CHECK TABLE 文で、ディレクトリ名を指定する必
要はありません。
CHECK INDEX または CHECK TABLE 文でディレクトリを指定する場合、その指定
は SET と OPTION の設定よりも優先されます。
SET COUNT RESULT
SET COUNT RESULT 文は、現在のセッション中に COUNT 関数が返す値のデータ
型を指定します。デフォルトは INTEGER で、格納行数が 232 行未満のテーブルに
適用します。232 行を超えるテーブルがある場合は COUNT RESULT パラメータを
DECIMAL に設定し、行数を正しくカウントできるようにしてください。
すべてのデータベース サーバ セッションのデフォルトのデータ型を指定する場合
は、rbw.config ファイルの OPTION COUNT_RESULT パラメータを使用します。
9-10 SQL Reference Guide
SET CROSS JOIN
構文
次に SET COUNT RESULT 文の構文ダイアグラムを示します。
SET COUNT RESULT
INTEGER
INT
DECIMAL
DEC
使用上の注意
COUNT RESULT パラメータを DECIMAL または DEC に設定すると、COUNT 関数の
結果が DECIMAL(15,0) データ型で表示されます。何も指定しないと、結果は
INTEGER データ型で表示されます。
例
次の SET COUNT RESULT 文は、COUNT 関数の結果データ型を DECIMAL に設定し
てから、大規模なファクト テーブルの行数をカウントするクエリを実行します。
set count result dec
select count(*) from sales_us
SET CROSS JOIN
SET CROSS JOIN 文は、2 つのテーブルのクロス積 ( 直積 ) を算出するテーブル結合
の可否を設定します。たとえば、このステートメントを ON に設定すると、Market
テーブルと Product テーブルの行の組み合わせすべてを返します。
select * from market, product
デフォルトの動作は、クロス結合を禁止するように設定されており、意図しないク
ロス結合 ( 結合指定の修飾が間違っている場合など ) の実行を防ぐことができます。
現在のセッションでクロス結合の実行を許可するには、このステートメントで ON
を設定してください。rbw.config ファイルの OPTION CROSS_JOIN パラメータを変
更すると、すべてのデータベース サーバ セッションに適用されます。
SET 文
9-11
SET CROSS JOIN
構文
次に SET CROSS JOIN 文の構文ダイアグラムを示します。
SET CROSS JOIN
OFF
ON
使用上の注意
結合する列に定義されたインデックスの有効性によっては、非等価結合 ( 不等号な
どで表した結合述部など ) を含むクエリにクロス結合が必要になる場合があります。
Aroma データベースを対象とした次のクエリには、クロス結合が必要です。これは
Date 列と Start_Date 列にインデックスが設定されていないためです。
select date
from period join promotion on date < start_date
次のクエリは上記と似ていますが、Classkey 列にインデックスが ( デフォルトでプ
ライマリ キー列として ) 設定されているため、クロス結合は不要です。
select prod_name
from product join class on product.classkey > class.classkey
クロス結合の詳細については、7-12 ページを参照してください。
9-12 SQL Reference Guide
SET DEFAULT DATA SEGMENT
SET DEFAULT DATA SEGMENT
SET DEFAULT DATA SEGMENT 文は、現在のセッションで作成されるデフォルト
データ セグメントの物理格納ユニット (PSU) について、ディレクトリを指定しま
す。
テンポラリ データ セグメントの格納先パスを設定する方法については、9-67 ペー
ジ「SET TEMPORARY SEGMENT STORAGE PATH」を参照してください。
構文
次に SET DEFAULT DATA SEGMENT 文の構文ダイアグラムを示します。
SET DEFAULT DATA SEGMENT
STORAGE PATH
'<dir_name>'
STORAGE
デフォルト データ セグメントの PSU を格納するディレクトリの絶
PATH<dir_name> 対パス (<dir_name>) を指定します。このディレクトリは SET
DEFAULT DATA SEGMENT 文の実行時に存在していなくてもかま
いませんが、デフォルト セグメントにテーブルを作成する前に作
成してください。
使用上の注意
このステートメントは、rbw.config ファイルの OPTION DEFAULT_DATA_SEGMENT
パラメータで指定されたデフォルトよりも優先されます。SET DEFAULT DATA
SEGMENT 文、または rbw.config ファイルでデフォルト ディレクトリを設定しない
と、デフォルト セグメントの PSU はデータベース ディレクトリに格納されます。
SET 文
9-13
SET DEFAULT DATA SEGMENT
複数のデータベースがあるデータベース サーバでは、データベースごとに別のデ
フォルト ディレクトリを設定してください。このステートメントを使用する場合
は、ほかのデータベースのデフォルト ディレクトリを指定しないように注意してく
ださい。次のようにすると、各データベースにそれぞれ別のディレクトリを確実に
指定できます。
■
■
OPTION DEFAULT_DATA_SEGMENT パラメータ、または SET DEFAULT
DATA SEGMENT 文ではディレクトリを指定しないようにします。PSU は、
適切なデータベース ディレクトリに自動的に作成されます。
このステートメントを、各データベースの .rbwrc ファイルに挿入します。
各 .rbwrc ファイルでデフォルト データ セグメントをそれぞれ別のディレ
クトリに指定します。
例
次のステートメントは、デフォルト データ セグメントの PSU を格納するディレク
トリを指定します。
set default data segment
storage path '/default/dataseg_dir'
UNIX
IUS
♦
set default data segment
storage path 'c:¥dsk1¥dsegs'
Windows
♦
9-14 SQL Reference Guide
SET DEFAULT INDEX SEGMENT
SET DEFAULT INDEX SEGMENT
SET DEFAULT INDEX SEGMENT 文は、現在のセッションで作成されるデフォルト
インデックス セグメントの物理格納ユニット (PSU) について、ディレクトリを指定
します。
テンポラリ インデックス セグメントの格納先のパスを設定する方法については、
9-67 ページ「SET TEMPORARY SEGMENT STORAGE PATH」を参照してください。
構文
次に SET DEFAULT INDEX SEGMENT 文の構文ダイアグラムを示します。
SET DEFAULT INDEX SEGMENT
STORAGE PATH
'<dir_name>'
STORAGE
デフォルト インデックス セグメントの PSU を格納するディレクト
PATH<dir_name> リの絶対パス (<dir_name>) を指定します。このディレクトリは
SET DEFAULT INDEX SEGMENT 文の実行時に存在していなくて
もかまいませんが、デフォルト セグメントにインデックスを作成
する前に作成してください。
使用上の注意
このステートメントは、rbw.config ファイルの
OPTION DEFAULT_INDEX_SEGMENT パラメータで指定されたデフォルトよりも優
先されます。SET DEFAULT INDEX SEGMENT 文、または rbw.config ファイルでデ
フォルト ディレクトリを設定しないと、デフォルト セグメントの PSU はデータ
ベース ディレクトリに格納されます。
SET 文
9-15
SET DEFAULT PSU EXTENDSIZE
複数のデータベースがあるウェアハウスでは、データベースごとに別のデフォルト
ディレクトリを設定してください。このステートメントを使用する場合は、ほかの
データベースのデフォルト ディレクトリを指定しないように注意してください。次
のようにすると、各データベースにそれぞれ別のディレクトリを確実に指定できま
す。
■
■
OPTION DEFAULT_INDEX_
SEGMENT パラメータ、または SET DEFAULT INDEX SEGMENT 文では
ディレクトリを指定しないようにします。PSU は、適切なデータベース
ディレクトリに自動的に作成されます。
このステートメントを、各データベースの .rbwrc ファイルに挿入します。
各 .rbwrc ファイルでデフォルト インデックス セグメントをそれぞれ別の
ディレクトリに指定します。
例
次のステートメントは、デフォルト データ セグメントの PSU を格納するディレク
トリを指定します。
Set default index segment
storage path '/default/indexseg_dir'
UNIX
IUS
♦
Set default index segment
storage path 'c:¥dsk1¥ixsegs'
Windows
♦
SET DEFAULT PSU EXTENDSIZE
SET DEFAULT PSU EXTENDSIZE 文は、データ セグメントがいっぱいになったとき
に、PSU を拡張するための増分を指定します。
構文
次に SET DEFAULT PSU EXTENDSIZE 文の構文ダイアグラムを示します。
SET DEFAULT PSU EXTENDSIZE
9-16 SQL Reference Guide
<value>
SET DEFAULT PSU EXTENDSIZE
<value>
セグメントへのデータの追加に伴って、PSU のサイズを増加すると
きの増分を指定します。
<value> には整数を指定し、その後ろに単位を指定します。単位は
K、M、G で示します。デフォルトは K です。
デフォルトは 16KB です。
使用上の注意
SET DEFAULT PSU EXTENDSIZE 文で、DEFAULT PSU EXTENDSIZE を大きな値に
設定してサイズが大きいテーブルやインデックスの性能を向上させることができま
す。
性能を向上させるために、デフォルトの PSU の拡張サイズを大きめの値 (8MB など )
に設定することをお勧めします。たとえば、2GB を超える大量のデータをセグメン
トにロードする場合、PSU のサイズを 16KB だけ拡張しても、性能は低下します。
ただし、デフォルトの PSU の拡張サイズが大きすぎると、ファイル システム領域
が無駄になります。この問題を避ける方法の 1 つとして、PSU の拡張サイズを小さ
くして (16KB など )、小さなテーブルを多く作成する方法があります。
SET DEFAULT PSU EXTENDSIZE 文の使用例については、8-158 ページを参照して
ください。
このステートメントは、rbw.config ファイルの OPTION
DEFAULT_PSU_EXTENDSIZE パラメータとしても使用できます。
SET 文
9-17
SET DEFAULT SEGMENT SIZE
SET DEFAULT SEGMENT SIZE
SET DEFAULT SEGMENT SIZE 文は、デフォルトのテーブルまたはインデックスに
割り当てる領域の容量を指定します。このステートメントを設定しない場合、デ
フォルト テーブル サイズの上限は 2GB になります。
構文
次に SET DEFAULT SEGMENT SIZE 文の構文ダイアグラムを示します。
SET DEFAULT SEGMENT SIZE
<value>
<value>
整数を指定し、その後ろに単位を指定します。単位は K、M、G で
示します。デフォルトは K です。
使用上の注意
デフォルト セグメント サイズは 2GB です。2GB のデフォルト セグメントごとに、
1 つのデフォルト PSU が作成されます。たとえば、ユーザが SET DEFAULT
SEGMENT SIZE 文を 4GB に設定すると、2 つのデフォルト PSU が作成されます。
このステートメントは、rbw.config ファイルの OPTION DEFAULT_SEGMENT_SIZE
パラメータとしても使用できます。
SET DEFAULT SEGMENT SIZE 文の使用例については、8-158 ページを参照してくだ
さい。
9-18 SQL Reference Guide
SET EXPORT_DEFAULT_PATH
SET EXPORT_DEFAULT_PATH
SET EXPORT_DEFAULT_PATH 文は、EXPORT 文で作成したファイルのデフォルト
のパスを定義します。
構文
次に SET EXPORT_DEFAULT_PATH 文の構文ダイアグラムを示します。
SET EXPORT_DEFAULT_PATH
<path_
specification>
<path_specification>
非修飾のファイル名に付加されるベース パス名を指定します。デ
フォルトは、インストール時に指定されているプラットフォーム別
スピル ディレクトリの設定と同じです。
使用上の注意
このコマンドは、rbw.config ファイルの OPTION EXPORT_DEFAULT_PATH パラ
メータとしても使用できます。
SET 文
9-19
SET EXPORT_DELIMITER
SET EXPORT_DELIMITER
SET EXPORT_DELIMITER 文は、EXPORT 内に区切り形式で出力ファイルを作成す
る EXPORT 文で使用する区切り記号を指定します。デフォルトの区切り記号はパイ
プ (|) です。
構文
次に SET EXPORT_DELIMITER 文の構文ダイアグラムを示します。
SET EXPORT_DELIMITER
<delimiter_
character>
'<delimiter_character>'
エクスポートされたファイルの列を区切って区切りフォーマットに
するシングルバイト文字またはマルチバイト文字を指定します。
使用上の注意
このコマンドは、rbw.config ファイルの OPTION EXPORT_DELIMITER パラメータと
しても使用できます。
エクスポート区切り記号の詳細については、8-190 ページ「EXPORT」を参照して
ください。
9-20 SQL Reference Guide
SET EXPORT_MAX_FILE_SIZE
SET EXPORT_MAX_FILE_SIZE
SET EXPORT_MAX_FILE_SIZE 文は、EXPORT 文が使用するエクスポート データ
ファイルの最大容量を設定します。データ量が設定値を超えた場合は、「.nnn」が
ファイル名に付加された追加出力ファイルが作成されます。nnn の開始値は 000 で
す。
構文
次に SET EXPORT_MAX_FILE_SIZE 文の構文ダイアグラムを示します。
SET EXPORT_MAX_FILE_SIZE
<value>
M
K
G
<value>
正の整数です。デフォルトは 0 で、値の上限はありません。
M、K、G
単位として KB、MB、GB のいずれかを示します。デフォルトは M
です。
使用上の注意
ファイルごとに完全なデータを含む追加ファイルは、最大 999 個まで作成できま
す。行が完全となる前にオーバーフロー状態が検出されると、新しいファイルが作
成されるため、不完全な行が書き込まれることはありません。EXPORT 文のパイプ
書き込み時に制限が適用されることはありません。
このステートメントは、rbw.config ファイルの OPTION EXPORT_MAX_FILE_SIZE
パラメータとしても使用できます。
SET 文
9-21
SET FIRST DAYOFWEEK
SET FIRST DAYOFWEEK
SET FIRST DAYOFWEEK 文は、曜日のデータベース サーバ ロケールによって定義
されているデフォルトのナンバリング システムを上書きします。このステートメン
トは、<weekday> の引数が使用されたときに EXTRACT と DATENAME 関数が返す
結果に影響を与えます。これらの関数の詳細については、第 5 章「スカラ関数」を
参照してください。
すべてのデータベース サーバ セッションに適用する週の最初の曜日を指定する場
合は、rbw.config ファイルの NLS_LOCALE FIRST_DAYOFWEEK パラメータを使用
します。
構文
次に SET FIRST DAYOFWEEK 文の構文ダイアグラムを示します。
SET FIRST DAYOFWEEK
DEFAULT
<daynum>
DEFAULT
週の最初の曜日を現在のデータベース サーバ ロケールのデフォル
ト値に再設定します。たとえば、ドイツ語のデータベースのデフォ
ルト値は 2 ( 月曜日 ) です。
<daynum>
デフォルトのロケール U.S.-English の各曜日に対応する 1 ∼ 7 までの
整数値 (1 が日曜日、2 が月曜日など ) を指定します。
使用上の注意
このステートメントは曜日の名前に影響を与えません。週の最初の曜日を別の番号
に設定しても、データベース サーバが日付に割り当てる曜日の名前は変更されませ
ん。週の最初の曜日を何曜日に設定しても、たとえば 1998 年 1 月 1 日は、英語の
データベースでは必ず Thursday、ドイツ語のデータベースでは必ず Donnerstag
です。
このパラメータの現在の値は、システム テーブル RBW_OPTIONS の中に
FIRST_DAYOFWEEK というオプション名で格納されます。
9-22 SQL Reference Guide
SET FORCE TASKS
例
次の文は週の最初の曜日を 7 ( 土曜日 ) に設定します。
set first dayofweek 7
SET FORCE TASKS
このセクションでは、関連する 6 つの SET 文について説明します。
■
■
■
■
■
■
SET FORCE_SCAN_TASKS
SET FORCE_FETCH_TASKS
SET FORCE_JOIN_TASKS
SET FORCE_TARGETJOIN_TASKS
SET FORCE_HASHJOIN_TASKS
SET FORCE_AGGREGATION_TASKS
最初の 4 つのステートメントは、ROWS_PER_TASK パラメータよりも優先され、行
数にかかわらず、クエリ処理に使用する並列タスク ( または並列プロセス ) の数を
指定します。これらのパラメータすべてにおいて、各パラメータの設定値は使用さ
れる並列プロセスの数を保証するものではありません。プロセスを割り当てる基準
の詳細については、『Query Performance Guide』を参照してください。
また、1 つの並列タスクの行数を指定することで、並列性を制御することもできま
す。詳細については、9-54 ページ「SET ROWS_PER...TASK」を参照してください。
SET 文
9-23
SET FORCE TASKS
構文
次の SET 文には、OFF ( デフォルト ) または数値を設定してください。OFF を設定
すると、並列性タスク数の明示的な制御が無効になります。
SET
FORCE_SCAN_TASKS
OFF
<value>
SET
FORCE_FETCH_TASKS
OFF
<value>
SET
FORCE_JOIN_TASKS
OFF
<value>
SET
FORCE_TARGETJOIN_TASKS
OFF
<value>
SET
FORCE_HASHJOIN_TASKS
OFF
<value>
SET
FORCE_AGGREGATION_TASKS
OFF
<value>
数値や OFF を指定せずに上記の SET 文を実行すると、各パラメータの現在の設定値
が返されます。
set force_scan_tasks
** INFORMATION ** (1433) FORCE_SCAN_TASKS is currently set
to 6.
これらの設定は rbw.config ファイルの TUNE パラメータを使用して、すべてのデー
タベース サーバ セッションに適用させることもできます。
9-24 SQL Reference Guide
FORCE_SCAN_TASKS
FORCE_SCAN_TASKS
FORCE_SCAN_TASKS は、関係スキャンの並列タスク数を制御する設定です。
FORCE_FETCH_TASKS と FORCE_JOIN_TASKS
FORCE_FETCH_TASKS と FORCE_JOIN_TASKS の設定値は、STAR インデックスを
使用するクエリにおいて、行のフェッチとテーブルの結合に使う並列タスクの数を
制御します。1 以上の値に設定した場合は、それぞれ、ROWS_PER_FETCH_TASK
および ROWS_PER_JOIN_TASK の設定値よりも優先されます。
FORCE_TARGETJOIN_TASKS
FORCE_SCAN_TASKS は、ローカル インデックスを使用する TARGETjoin の並列タ
スク数を制御する設定です。
このパラメータは、ローカル インデックスに対して TARGETjoin 操作を行う場合に
だけ適用されます。非ローカル インデックスを使用する TARGETjoin の場合は、
TARGETjoin の上にある Exchange 演算子の次数は常に 1 であり、
FORCE_TARGETJOIN_TASKS パラメータによる影響はありません。
FORCE_HASHJOIN_TASKS
FORCE_HASHJOIN_TASKS の設定値は、ハイブリッド ハッシュ結合の並列タスク
数を制御します。
FORCE_AGGREGATION_TASKS
FORCE_AGGREGATION_TASKS の設定値は 1 回のセッションで処理される集合タ
スクの数を制御します。
SET 文
9-25
SET IDLE TIMEOUT
SET IDLE TIMEOUT
SET IDLE TIMEOUT 文は、データベースと ODBC または JDBC アプリケーションの
アイドル状態の接続時間を指定します。アイドル時間が指定時間を経過すると、切
断されます。デフォルト設定は 0 で、この場合は切断されません。
構文
次に SET IDLE TIMEOUT 文の構文ダイアグラムを示します。
SET IDLE TIMEOUT
<interval>
(
<interval>
)
アイドル タイムアウト値は、分単位で指定します。この時間内はア
イドル状態で接続しておくことができますが、この時間が経過する
と切断します。
使用上の注意
クライアントが、指定時間以上アイドル状態である場合、データベース サーバはソ
ケットを閉じます。この場合、ユーザは再接続する必要があります。
アイドル タイムアウトの経過後に、何らかの操作を行おうとすると、クライアント
に、次のエラー メッセージが表示されます。
**FATAL** (10409) Could not send to server or the server timed
out.OS error: OS_error_message (erno error_number).
このステートメントは、rbw.config ファイルの OPTION IDLE_TIMEOUT パラメータ
としても使用できます。
9-26 SQL Reference Guide
SET IGNORE OPTICAL INDEXES
SET IGNORE OPTICAL INDEXES
IGNORE_OPTICAL_INDEXES オプションは、クエリに最適なインデックスを選択
するときに、光ディスクに格納されている PSU のインデックスを考慮するかを指定
します。クエリの処理中に光インデックスが使用されたというエラー メッセージま
たは警告メッセージが表示された場合、効率は低くても確実に利用できるインデッ
クスがほかにあることがわかっていれば、IGNORE_OPTICAL_INDEXES オプショ
ンを設定し、光ディスクにないインデックスの使用を強制することができます。
通常、使用頻度の高いインデックスは、光セグメントには格納しません。低速の光
ディスクにインデックスを格納すると、インデックスを使う意味がなくなります。
構文
次に、光ディスク上のセグメントに格納されたインデックスを現在のセッションに
使用するかどうかを指定する構文ダイアグラムを示します。
SET
IGNORE OPTICAL INDEXES
OFF
ON
OFF
光ディスク上のセグメントにあるインデックスを含め、すべてのイ
ンデックスを考慮して最適なインデックスを選択します。光ディス
ク上のインデックスが最適であると判断された場合は、OPTICAL
AVAILABILITY オプションの設定によって処理方法が制御されま
す。このオプションの詳細については、9-36 ページ「SET OPTICAL
AVAILABILITY」を参照してください。OFF はデフォルトです。
ON
光ディスク以外の媒体に完全に格納されているインデックスのみか
ら、最適なインデックスを選択します。この基準に合ったインデッ
クスがなければエラーになり、操作は失敗します。
例
光ディスク以外の媒体に格納されているインデックスのみの使用を指定するには、
次のように入力します。
set ignore optical indexes on
SET 文
9-27
SET IGNORE PARTIAL INDEXES
SET IGNORE PARTIAL INDEXES
SET IGNORE PARTIAL INDEXES 文は、現在のセッションでクエリを処理する最適
な実行プランをシステムが選択するときに、部分的に利用可能なインデックスを考
慮すべきかを指定します。部分的に利用可能なインデックスとは、オフライン イン
デックス セグメントが 1 つ以上あるインデックスです。
構文
次に SET IGNORE PARTIAL INDEXES 文の構文ダイアグラムを示します。
SET IGNORE PARTIAL INDEXES
OFF
ON
OFF
部分的に利用可能なインデックスを含め、すべてのインデックスを
考慮して最適なインデックスを選択します。部分的に利用可能なイ
ンデックスが最適であると判断された場合は、rbw.config ファイル
の OPTION PARTIAL_AVAILABILITY パラメータか、SET PARTIAL
AVAILABILITY 文によって処理方法が制御されます。
ON
完全に利用可能なインデックスのみから、最適なインデックスを選
択します。完全に利用可能なインデックスがなければ、エラーにな
りクエリは失敗します。
使用上の注意
このステートメントは、デフォルト設定の OFF または rbw.config ファイルの
OPTION IGNORE_PARTIAL_INDEXES パラメータで指定したデフォルトよりも優先
されます。
例
このステートメントは、現在のセッションでクエリのインデックスを選択するとき
に、完全に利用可能なインデックスだけを考慮します。
set ignore partial indexes on
9-28 SQL Reference Guide
SET INDEX TEMPSPACE と SET QUERY TEMPSPACE
SET INDEX TEMPSPACE と SET QUERY
TEMPSPACE
SET INDEX TEMPSPACE 文は、現在のセッションでインデックス作成、または
CHECK INDEX... VALIDATE FULL 操作に使用するスピル ファイルのディレクトリ、
メモリ サイズのしきい値、最大ファイル サイズを指定します。
SET QUERY TEMPSPACE 文は、現在のセッションでクエリ処理に使用するスピル
ファイルのディレクトリと最大ファイル サイズを指定します。
スピル ファイルはディスク上のファイルで、インデックスの作成中、インデックス
全体の検査中、または各クエリの処理中に中間結果を格納します。中間結果は当初
メイン メモリに格納されますが、しきい値に達するとディスクに書き出されます。
スピル ファイルの詳細については、『Administrator's Guide』を参照してください。
構文
次に、SET INDEX TEMPSPACE 文と SET QUERY TEMPSPACE 文の構文ダイアグラ
ムを示します。
,
SET
QUERY
TEMPSPACE
DIRECTORIES
'<dir_path>'
MAXSPILLSIZE
<size>
RESET
,
SET
INDEX
TEMPSPACE
DIRECTORIES
'<dir_path>'
THRESHOLD
<value>
MAXSPILLSIZE
<size>
RESET
SET
TEMPSPACE
RESET
SET 文
9-29
SET INDEX TEMPSPACE と SET QUERY TEMPSPACE
DIRECTORIES
<dir_path>
一時領域に使用するディレクトリまたはディレクトリの集合を指
定します。<dir_path> には、絶対パスを入力してください。
rbw.config ファイルのエントリに複数のディレクトリを定義する
場合は、複数行で入力します。一時領域ディレクトリを使用する
順序はランダムであり ( 内部で決定 )、ユーザー側から制御でき
ないため、ディレクトリはどの順序で指定してもかまいません。
UNIX
UNIX プラットフォームでは、一時領域ディレクトリを指定しな
い場合、デフォルト ディレクトリは /tmp になります。♦
Windows
Windows プラットフォームでは、一時領域ディレクトリを指定し
ない場合、次の一時的なファイル パスがデフォルト ディレクト
リとして指定されます。
■
■
■
9-30 SQL Reference Guide
%TMP% で指定されるパス
%TMP% が定義されていない場合は、%TEMP% で指定
されるパス
%TMP% と %TEMP% が両者とも定義されていない場合
は、Windows ディレクトリ ♦
SET INDEX TEMPSPACE と SET QUERY TEMPSPACE
THRESHOLD
<value>
インデックス作成、または CHECK INDEX... VALIDATE FULL 操
作の中間結果を書き込むメモリの最大許容量を指定します。指定
した量に達すると、中間結果はディスクに書き出されます。複数
のインデックスが関わる操作の場合は、指定したしきい値が作成
される各インデックスに均等分割されます。デフォルトは、
10MB (10M) です。
指定単位は、KB (K) でも MB (M) でもかまいません。それぞれ、
数値の後に K または M を付加してください。数値と単位識別子
(K、M) との間には、空白を入れないでください。たとえば、
1024K、500M のように記述します。
THRESHOLD オプションを使用するときには、次の条件に注意
してください。
■
■
しきい値は、必ずコンピュータの物理メモリ サイズよ
りも小さくしてください。
コンピュータの物理メモリの 4 分 の 1 から 2 分の 1 まで
の間で、操作に合わせてしきい値を設定することをお勧
めします。
■ ロードや CREATE INDEX を実行する場合は、ほか
のユーザーが同時にクエリを実行していることは少
ないため、しきい値を物理メモリの半分に設定して
もかまいません。
■ VALIDATE FULL オプションでの CHECK INDEX の
実行中に、ほかのユーザがデータベースにクエリを
実行する可能性がある場合は、しきい値を物理メモ
リの 4 分の 1 以下に設定してください。
このしきい値は、対応する MAXSPILLSIZE の前に指定してくだ
さい。つまり、rbw.config ファイルの MAXSPILLSIZE エントリ
の前に入力する必要があります。
しきい値を 0 に設定すると、インデックス エントリが 200 に達し
た時点でディスクに書き出されます。
クエリ処理については、THRESHOLD パラメータはありません。
SET 文
9-31
SET INDEX TEMPSPACE と SET QUERY TEMPSPACE
MAXSPILLSIZE
<size>
1 つの操作に使用する一時領域の最大サイズを指定します。複数
のインデックスを作成する場合は、指定したサイズが各インデッ
クスに均等に分割されます。クエリ処理について、指定したサイ
ズが各クエリおよびサブクエリ ( ある場合 ) にそれぞれ割り当て
られます。
指定単位は、KB (K)、MB (M)、GB (G) のいずれでもかまいませ
ん。それぞれ、数値の後に K、M、G を付加してください。数値
と単位識別子 (K、M) との間には、空白を入れないでください。
たとえば、1024K、500M、 8G のように記述します。
MAXSPILLSIZE のデフォルト値は 1GB です。MAXSPILLSIZE の
最大値は 2047GB です。
RESET
クエリまたはインデックス TEMPSPACE パラメータを rbw.config
ファイルで指定した値にリセットします。QUERY も INDEX も指
定しないと、すべての TEMPSPACE パラメータがリセットされま
す。
例
現在のセッションで、パラメータを変更する SET 文の使用例を示します。
set index tempspace
'/disk2/itemp',
set index tempspace
set index tempspace
UNIX
directories '/disk1/itemp',
'/disk3/itemp'
threshold 2M
maxspillsize 3G
♦
set index tempspace directories 'd:¥itemp',
'e:¥itemp', 'f:¥itemp'
set index tempspace threshold 2M
set index tempspace maxspillsize 3G
Windows
♦
9-32 SQL Reference Guide
SET INFO MESSAGE LIMIT
SET INFO MESSAGE LIMIT
INFO_MESSAGE_LIMIT パラメータは、SET STATS INFO 文の使用中、および相関
サブクエリの実行中に、膨大な数のメッセージが返されないようにします。デフォ
ルト値は 1,000 です。9-62 ページを参照してください。通知メッセージ
(STATISTICS、または INFORMATION というラベルの付いたメッセージ ) は、1 つ
のクエリで最大 1,000 まで表示されます。このとき、すべてのクエリは完全に実行
されます。警告メッセージおよびエラー メッセージは通常どおり返されます。
メッセージの最大数を変更するには、DEFAULT INFO_MESSAGE_LIMIT の値を構
成ファイル (rbw.config) に追加するか、SET 文を使用します。通知メッセージは、
クエリの実行中にメモリに格納されるため、メッセージの可能な最大数は、システ
ムで使用できるメモリの量に依存します。
構文
次に SET INFO MESSAGE LIMIT 文の構文ダイアグラムを示します。
SET INFO MESSAGE LIMIT
<value>
1000
どちらの場合も、整数を指定してください。0 に設定すると、返されるメッセージ
数に制限がなくなります。
例
メッセージの最大数を 2000 に設定し、通常は 2000 以上の通知メッセージを返す相
関サブクエリを実行したとします。このとき 2000 までの通知メッセージが表示さ
れます。
set info message limit 2000
続いて状況を説明する次のような警告メッセージが表示されます。
** WARNING ** (1443) No more informational messages will be
reported for this query due to the INFO_MESSAGE_LIMIT
constraint.Informational messages generated: 2000.
SET 文
9-33
SET LOCK
SET LOCK
SET LOCK 文は、ほかのユーザがテーブルにアクセスしている場合、またはすでに
テーブルをロックしている場合のテーブル ロック、およびデータベース ロックの
動作を指定します。
構文
次に SET LOCK 文の構文ダイアグラムを示します。
SET LOCK
WAIT
NO WAIT
WAIT
ロックが必要な場合は、既存のロックが解除されるか、新規ロック
を取得するまでデータベース サーバ セッションを中断します。
デッドロックが発生する可能性がある場合は、ロック要求が拒否さ
れ、エラー メッセージが返されます。WAIT の設定は無視されま
す。
NO WAIT
すでにテーブルがロックされているか、ほかのユーザがテーブルに
アクセスしている場合は、ロック要求を拒否し、エラー メッセージ
を返します。
使用上の注意
このステートメントは、現在のセッションでユーザーが LOCK ( テーブルのロック )
文または LOCK DATABASE 文を実行したときに有効になります。このステートメン
トの設定は、NO WAIT オプションを指定した LOCK 文または LOCK DATABASE 文
で変更することができます。
9-34 SQL Reference Guide
SET OLAP APPROXIMATE NUMERIC FAST COMPUTATION
SET OLAP APPROXIMATE NUMERIC FAST
COMPUTATION
このコマンドは、ウィンドウ フレームに関する SQL OLAP 関数を使用している特定
のクエリにのみ適用されます。これらの関数については、第 6 章「分析関数」を参
照してください。
構文
次に SET OLAP APPROXIMATE NUMERIC FAST COMPUTATION 文の構文ダイアグ
ラムを示します。
SET OLAP APPROXIMATE NUMERIC FAST COMPUTATION
ON
OFF
このステートメントは、rbw.config ファイルの OPTION
OLAP_APPROXIMATE_NUMERIC_FAST_COMPUTATION パラメータの設定よりも
優先されます。
このパラメータのデフォルトは ON です。このパラメータを OFF に設定した場合、
次の条件では OLAP クエリの性能が大きく低下する可能性があります。
■
■
OLAP SUM、AVG、RATIO_TO_REPORT 関数がおおよその数値列 (REAL、
DOUBLE PRECISION、FLOAT) に適用される場合
ウィンドウ フレームの下限が n PRECEDING、n FOLLOWING、CURRENT
ROW のいずれかである場合
性能低下の程度はウィンドウ フレームのサイズに比例します。ウィンドウ フレー
ムが大きくなるほど性能が低下します。
このコマンドが ON に設定されていれば、ウィンドウ パーティションが非常に大き
な場合でも、クエリの性能は低下しません。各行についてウィンドウ フレームを再
計算するのではなく、付加的にウィンドウ フレームを保持する分、性能が向上しま
す。ただし、この「クイック計算」の方法では、OLAP 関数について誤った結果が
返されることがあります。これは、数値列の値が大きく変化する場合は特に発生し
やすくなります。
SET 文
9-35
SET OPTICAL AVAILABILITY
つまり、OFF 設定では、性能が低下する代わりに、正確な結果が保証されます。一
方、デフォルトの ON 設定では、誤った結果を返すリスクはありますが、性能が向
上します。これに対応する RISQL MOVINGSUM クエリおよび MOVINGAVG クエリ
を使用して、OLAP 関数のデフォルトの動作 ( 正しい結果が出ない場合もあるク
イック計算 ) をエミュレートすることもできます。
SET OPTICAL AVAILABILITY
光ディスクのデータ、またはインデックスへのアクセスは、SET
OPTICAL_AVAILABILITY 文の設定、およびデータへのアクセスに使用するステー
トメントが、次の読み込み操作、および書き込み操作を必要とするかどうかに依存
します。
■
■
読み込み操作 : SELECT 文および TMU UNLOAD 文
書き込み操作 :
❑ ALTER TABLE および DROP TABLE 文
❑ CREATE INDEX および ALTER INDEX 文
❑ ALTER SEGMENT 文
❑ INSERT、UPDATE、DELETE 文
❑ TMU LOAD DATA および REORG 文
次の構文ダイアグラムで使用される設定は、上記以外の操作には適用されません。
構文
次に光ディスクに格納されたデータまたはインデックスの有効性を現在のセッショ
ンで指定する SET 文の構文を示します。
SET OPTICAL AVAILABILITY
WAIT NONE
WAIT INFO
WAIT WARN
SKIP INFO
SKIP WARN
PRECHECK
ERROR
9-36 SQL Reference Guide
SET OPTICAL AVAILABILITY
WAIT NONE
光セグメントに格納された行データまたはインデックスにアクセス
できるまで待機します。光媒体のアクセスに関するメッセージは表
示されません。WAIT_NONE はデフォルトです。
WAIT INFO
光セグメントに格納された行データまたはインデックスにアクセス
できるまで待機します。光ディスクにアクセス中であることを示す
通知メッセージが表示されます。
WAIT WARN
光セグメントに格納された行データまたはインデックスにアクセス
できるまで待機します。光ディスクにアクセス中であることを示す
警告メッセージが表示されます。
SKIP INFO
読み込み操作について、行データまたはインデックスを格納してい
る光ディスクにアクセスしないことを指定します。光ディスクを操
作対象から除外したことを示す通知メッセージが表示されます。
書き込み操作ではこのオプションは無視され、PRECHECK を指定
した場合と同様にステートメントが処理されます。
SKIP WARN
読み込み操作について、行データまたはインデックスを格納してい
る光ディスクにアクセスしないことを指定します。光ディスクを操
作対象から除外したことを示す警告メッセージが表示されます。
書き込み操作ではこのオプションは無視され、PRECHECK を指定
した場合と同様にステートメントが処理されます。
PRECHECK
どの操作についても、操作前に光ディスクの有無をチェックしま
す。光セグメントが検出された場合は、エラー メッセージを表示
し、処理を中止します。
ERROR
読み込み操作はステートメントを処理します。ただし、光ディスク
が検出された時点でエラー メッセージを表示し、処理を中断しま
す。すでに処理を開始した後に光セグメントが検出されるので注意
してください。
書き込み操作ではこのオプションは無視され、PRECHECK を指定
した場合と同様にステートメントが処理されます。
例
光媒体に格納されたデータまたはインデックスのアクセス動作を指定する例を示し
ます。
set optical availability error
SET 文
9-37
SET ORDER BY
SET ORDER BY
SET ORDER BY 文は、ソートする列でのデータベース サーバによる NULL 値の配
置を変更します。
SELECT 文の ORDER BY 句は、この設定よりも優先されます。このときの NULL の
配置については、7-55 ページを参照してください。
構文
次に SET ORDER BY 文の構文ダイアグラムを示します。
SET ORDER BY
NULL
ASC
FIRST
LAST
DESC
ASC、DESC
昇順ソートか降順ソートかを指定します。
FIRST、LAST NULL 値の位置を指定します。
使用上の注意
このステートメントは、現在のセッションで ORDER BY 句を指定した SELECT 文
をユーザが実行したときに有効になります。このステートメントで設定した内容
は、ORDER BY 句に NULL キーワードを指定したクエリで変更することができま
す。
例
次のステートメントは、降順にソートした列の最後に NULL 値を配置するように指
示します。
set order by desc null last
9-38 SQL Reference Guide
SET PARALLEL SET_OPERATION
SET PARALLEL SET_OPERATION
SET PARALLEL SET_OPERATION 文は、UNION、INTERSECT、EXCEPT の集約演
算子を使用しているクエリに対して、プラン レベルの並列処理を行なえるかどうか
を決定します。rbw.config ファイルの TUNE PARALLEL_SET_OPERATION パラメー
タを使用して、すべてのデータベース サーバ セッションに適用することもできま
す。
構文
次に SET PARALLEL SET_OPERATION 文の構文ダイアグラムを示します。
SET PARALLEL SET_OPERATION
OFF
ON
OFF、ON
並列処理を UNION、INTERSECT、EXCEPT クエリに適用するかど
うかを指定します。デフォルトは OFF です。
このパラメータの現在の設定値を確認するには、OFF と ON のどちらも指定せずに
次のステートメントを実行します。
set parallel set_operation
** INFORMATION ** (1434) PARALLEL_SET_OPERATION is currently
set to OFF.
使用上の注意
UNION、INTERSECT、EXCEPT の集約演算子を使用しているクエリには、操作レ
ベルでの並列性だけでなくクエリ プラン レベルでの並列性の利点も得られます。
この 3 つの演算子がどのような組み合わせで指定されているクエリの場合でも、潜
在的な性能は同じように向上します。
設定パラメータ TUNE PARALLEL_SET_OPERATION が ON に設定されている場合
は、UNION クエリ内の各クエリ式のクエリ プランは順次ではなく同時に実行され
ます。サーバは最初のクエリ式の実行が完了するのを待たずに、一部またはすべて
のクエリ式の処理を同時に開始します。
SET 文
9-39
SET PARALLEL_HASHJOIN
次の簡略化したクエリを例に考えてみます。
select col1, col2, col3 from...
union
select col1, col2, col3 from...
union
select col1, col2, col3 from...;
十分な並列処理が指定されれば、3 つのクエリ式 (select...) に選択されたクエリ プラ
ンは同時に実行を開始します。この種のクエリとその EXPLAIN 出力の詳しい例に
ついては、
『Query Performance Guide』を参照してください。
PARALLEL_SET_OPERATION パラメータはデフォルトで OFF に設定されています。
これは、この特別な並列処理によって UNION クエリの処理速度が高まるものと低
下するものがあるためです。集約演算子を含まないクエリは影響を受けません。ク
エリごとに次の SET コマンドを使用して、さまざまな UNION クエリをテストし、
性能を比較することをお勧めします。
set parallel set_operation on;
クエリの性能とリソース割り当てという点から考えて、構成ファイル全体で
PARALLEL_SET_OPERATION パラメータを ON にするよりも、このほうが安全で
す。
推奨されるチューニング設定の詳細については、『Query Performance Guide』を参照
してください。
SET PARALLEL_HASHJOIN
SET PARALLEL HASHJOIN 文は、現在のセッションでハイブリッド ハッシュ結合
に並列処理を許可するかどうかを指定します。rbw.config ファイルの TUNE パラ
メータを使用して、すべてのデータベース サーバ セッションに適用することもで
きます。
構文
次に SET PARALLEL HASHJOIN 文の構文ダイアグラムを示します。
SET PARALLEL_HASHJOIN
OFF
ON
9-40 SQL Reference Guide
SET PARTIAL AVAILABILITY
OFF、ON
ハイブリッド ハッシュ結合に並列処理を許可するかどうかを指定し
ます。デフォルトは OFF です。
このパラメータの現在の設定値を確認するには、OFF と ON のどちらも指定せずに
次のステートメントを実行します。
set parallel_hashjoin
** INFORMATION ** (1434) PARALLEL_HASHJOIN is currently set
to OFF.
使用上の注意
SET FORCE_HASHJOIN_TASKS を使用してハイブリッド ハッシュ結合の並列プロ
セス数を制御するには、このステートメントで ON を設定してください。
例
次のステートメントは、ハイブリッド ハッシュ結合に並列処理を許可するように指
示します。
set parallel_hashjoin on
SET PARTIAL AVAILABILITY
SET PARTIAL AVAILABILITY 文は、部分的に利用可能なテーブルに対するクエリの
現在のセッションでの動作を指定します。部分的に利用可能なテーブルとは、オフ
ラインのデータ セグメントが 1 つ以上あるか、クエリに使用するインデックスにオ
フライン インデックス セグメントが 1 つ以上あるテーブルです。
構文
次に SET PARTIAL AVAILABILITY 文の構文ダイアグラムを示します。
SET PARTIAL AVAILABILITY
INFO
WARN
ERROR
PRECHECK
SET 文
9-41
SET PARTIAL AVAILABILITY
INFO
クエリに必要なデータ セグメントまたはインデックス セグメント
の中に利用できないものがあっても、クエリを実行します。テーブ
ル全体が利用可能な場合と結果が異なるときには、結果とともに通
知メッセージが表示されます。
WARN
INFO と同じ動作をしますが、通知メッセージではなく警告メッ
セージを返します。
ERROR
クエリに必要なデータ セグメントまたはインデックス セグメント
の中に利用できないものがあっても、クエリを実行します。テーブ
ル全体が利用可能な場合と結果が異なるときには、結果を返さずに
エラー メッセージを表示します。
PRECHECK
クエリを処理する前に、クエリに必要なテーブルまたはインデック
スの有効性をチェックします。テーブルが部分的にしか利用できな
い場合は、エラー メッセージが実行され、クエリは実行されませ
ん。
使用上の注意
複数の選択式 (UNION) または部分的な SELECT 文 ( サブクエリ ) を含むクエリの場
合は、最初の選択式を事前に検証および実行してから、その他の選択式を検証およ
び実行します。
テーブルが部分的にしか利用できないために、2 番めの選択式でエラーが発生する
場合も、最初の選択式の処理が完了するまではエラー メッセージは返されません。
つまり、最初の選択式を処理してから 2 番めの選択式を検証するため、エラーを返
すまでに時間がかかることがあります。
部分的に利用可能なテーブルに対する動作設定とクエリに指定した選択式の内容に
よって返される結果とメッセージが異なります。
このステートメントは、PRECHECK のデフォルトまたは rbw.config ファイルの
OPTION PARTIAL_AVAILABILITY パラメータで指定したデフォルトよりも優先さ
れます。
9-42 SQL Reference Guide
SET PARTITIONED PARALLEL AGGREGATION
SET PARTITIONED PARALLEL
AGGREGATION
SET PARTITIONED PARALLEL AGGREGATION 文は、現在のセッションでの集約操
作の並列処理を有効または無効にします。rbw.config ファイルの TUNE パラメータ
を使用して、すべてのデータベース サーバ セッションに適用することもできます。
構文
次に SET PARTITIONED PARALLEL AGGREGATION 文の構文ダイアグラムを示しま
す。
SET PARTITIONED PARALLEL AGGREGATION
OFF
ON
OFF、ON
集約に並列処理を許可するかどうかを指定します。デフォルトは
OFF です。
このパラメータの現在の設定値を確認するには、OFF と ON のどちらも指定せずに
次のステートメントを実行します。
set partitioned parallel aggregation;
** INFORMATION ** (1434) PARTITIONED_PARALLEL_AGGREGATION is
currently set to OFF.
使用上の注意
rbw.config ファイルでは、この TUNE パラメータはデフォルトで OFF に設定されて
います。パーティション化した並列集約は、非常に大きな数のグループを処理する
集約クエリへの使用を目的としています。詳細については、『Query Performance
Guide』を参照してください。
SET 文
9-43
SET PERFORMANCE MONITOR
SET PERFORMANCE MONITOR
SET PERFORMANCE MONITOR 文は、現在のセッションにおけるクエリ パフォー
マンス モニタの ON/OFF を設定します。
構文
次に SET PERFORMANCE MONITOR 文の構文ダイアグラムを示します。
SET PERFORMANCE MONITOR
OFF
'<user_comment>'
ON
OFF、ON
後続するクエリを監視するかどうかを指定します。デフォルトは
OFF です。
<user_comment> オプションのコメントです。クエリが監視されているかどうか、ま
た、特定の条件やパラメータがそのクエリに指定されているかどう
かを識別するために使用できます。<user_comment> には 256 文字ま
でを指定できます。
使用上の注意
パフォーマンス モニタ デーモン (rbwpmond) は、セッションのパフォーマンス モニ
タをオンにする前に有効にしておく必要があります。rbwpmond デーモンを有効に
するには、次のいずれかの方法に従います。
■
■
Red Brick Warehouse Administrator で、[Manage System Wizard] の [Enable
Performance Monitor Daemon] ラジオ ボタンを選択する
ALTER SYSTEM コマンドの START PERFORMANCE MONITOR オプション
を実行する
RISQL> alter system start performance monitor;
パフォーマンス モニタの使用方法の詳細については、『Query Performance Guide』を
参照してください。
9-44 SQL Reference Guide
SET PERFORMANCE MONITOR
例
次のステートメントでは、SET PERFORMANCE MONITOR '<comments>' コマンドを
複数使用して、同じクエリを異なる ROWS_PER_TARGETJOIN_TASK の値で実行す
るときの識別を行っています。
SET ROWS_PER_TARGETJOIN_TASK 10000;
SET PERFORMANCE MONITOR ON 'target8segs,10Krow join tasks';
SELECT ...
SET ROWS_PER_TARGETJOIN_TASK 50000;
SET PERFORMANCE MONITOR 'target8segs,50Krow join tasks';
SELECT ...
SET PERFORMANCE MONITOR OFF;
最初の SET PERFORMANCE MONITOR コマンドの ON キーワードでセッションの
監視が ON に設定されます。したがって、2 番めの SET PERFORMANCE MONITOR
コマンドには ON キーワードが必要ありません。
SET 文
9-45
SET PRECOMPUTED VIEW MAINTENANCE
SET PRECOMPUTED VIEW MAINTENANCE
SET PRECOMPUTED VIEW MAINTENANCE 文は、集約保守が可能なすべての事前
計算集約に対して、集約保守を有効にします。集約保守がサポートされない場合に
ついては、『IBM Red Brick Vista User’s Guide』を参照してください。
構文
次に SET PRECOMPUTED VIEW MAINTENANCE 文の構文ダイアグラムを示しま
す。
SET PRECOMPUTED VIEW MAINTENANCE
ON
OFF
使用上の注意
このステートメントは、SET PRECOMPUTED VIEW MAINTENANCE 文が設定され
ているセッションだけに適用されます。デフォルトの設定は ON です。
重要 : 次の 2 つのことに注意してください。
■
■
ロード時に保守を実行すると、ロード処理が遅くなります。
集約を保守する既存のスクリプトがある場合、保守が重複することがあり
ます。
このステートメントは、rbw.config ファイルの OPTION PRECOMPUTED_VIEW_
MAINTENANCE パラメータとしても使用でき、データベース サーバとローダの両
方で実装されています。
9-46 SQL Reference Guide
SET PRECOMPUTED VIEW MAINTENANCE ON ERROR
SET PRECOMPUTED VIEW MAINTENANCE
ON ERROR
SET PRECOMPUTED VIEW MAINTENANCE ON ERROR 文は、保守中のエラーによ
り、保守できない集約テーブルが検出されたときに、バージョン管理されたデータ
ベースがとる処置を指定します。このステートメントはバージョン管理されたデー
タベースにだけ適用されます。
次に SET PRECOMPUTED VIEW MAINTENANCE ON ERROR 文の構文ダイアグラム
を示します。
SET PRECOMPUTED VIEW MAINTENANCE ON ERROR
ROLLBACK
INVALIDATE
使用上の注意
このステートメントでは 2 つの結果が想定されます。保守できない集約テーブルを
バージョン管理されたデータベースが検出した場合、次のようになります。
■
■
問題となっている集約は無効とマークされます。
トランザクション全体がロールバックされるので、集約テーブルを含むす
べてのテーブルが元の状態に戻ります。
この SET 文は、TMU とデータベース サーバの両方で実装されています。
このステートメントは、rbw.config ファイルの OPTION
PRECOMPUTED_VIEW_MAINTENANCE_ON_ERROR パラメータとしても使用でき
ます。
SET 文
9-47
SET PRECOMPUTED VIEW QUERY REWRITE
SET PRECOMPUTED VIEW QUERY
REWRITE
SET PRECOMPUTED VIEW QUERY REWRITE 文を使用して、集約クエリ リライト
システムを ON または OFF に設定できます。デフォルトの設定は ON です。
構文
次に SET PRECOMPUTED VIEW QUERY REWRITE 文の構文ダイアグラムを示しま
す。
SET PRECOMPUTED VIEW QUERY REWRITE
ON
OFF
このステートメントは、rbw.config ファイルの OPTION PRECOMPUTED_VIEW_
QUERY_ REWRITE パラメータでも指定できます。
9-48 SQL Reference Guide
SET QUERY MEMORY LIMIT
SET QUERY MEMORY LIMIT
SET QUERY MEMORY LIMIT 文は、現在のセッションでクエリ、INSERT、
UPDATE、DELETE 文の実行に利用できる作業用メモリの最大量を指定します。指
定した値に達すると、中間結果がディスク領域に保存されます。メモリ調整パラ
メータの詳細については、
『Administrator's Guide』および『Query Performance Guide』
を参照してください。
構文
次に SET QUERY MEMORY LIMIT 文の構文ダイアグラムを示します。
SET QUERY MEMORY LIMIT
<value>
DEFAULT
<value>
利用可能なメモリの最大量を KB (K)、MB (M)、GB (G) で指定しま
す。K、M、G のいずれかを入力し、2M ( または 2,048K) ∼ 4G の数
値を指定してください。単位を表す文字と数値との間には、空白を
入れてはいけません。
DEFAULT キーワードは、rbw.config ファイルに指定した値 ( ファイ
ルに指定しなかった場合はデフォルトの 50M) を最大値に設定しま
す。
使用上の注意
このステートメントは、rbw.config ファイルの TUNE QUERY_MEMORY_LIMIT パ
ラメータの設定よりも優先されます。
例
次のスクリプトは、sales_report99 というクエリのメモリ最大量を 100MB に設定し、
クエリを実行してから、最大値をデフォルトにリセットします。
set query memory limit 100M
run sales_report99
set query memory limit default
...
SET 文
9-49
SET QUERYPROCS
SET QUERYPROCS
SET QUERYPROCS 文は、現在のセッションの 1 つのクエリで利用できる並列プロ
セスの最大数を指定します。
構文
次に SET QUERYPROCS 文の構文ダイアグラムを示します。
<num_per_query>
SET QUERYPROCS
<num_per_query>
0 ∼ 32,767 の整数を指定します。
0 または 1 を指定すると、並列クエリ処理は行われません。
使用上の注意
0 から rbw.config ファイルの設定値まで、任意の値を指定できます。データベース
サーバは 0 から rbw.config ファイルの設定値までの値を受け入れます。rbw.config
ファイルの設定値を超える値と 0 未満の値は無視されます。
例
次のステートメントは、現在のデータベース サーバ セッションで実行する 1 つのク
エリで利用できる最大プロセス数を 5 に設定します。
set queryprocs 5
9-50 SQL Reference Guide
SET REPORT_INTERVAL
SET REPORT_INTERVAL
SET REPORT_INTERVAL 文は、rbwadmd デーモンにレポートを送る最大間隔時間
を指定します。rbwadmd デーモンは、この値に基づいて動的統計テーブル (DST) を
更新します。
指定した間隔時間が経過する前に、データベース イベントがレポートを送ることも
あります。状態を変化させるステートメント、またはロックを要求、取得、解除す
るセッションをデータベース サーバが検出すると、rbwadmd デーモン プロセスに
レポートを送ります。状態とは、接続、アイドル、実行、コンパイル、演算、結果
行の抽出、ソート、インデックスの作成、挿入などです。
構文
次に SET REPORT_INTERVAL 文の構文ダイアグラムを示します。
SET REPORT_INTERVAL
<value>
<value>
rbwadmd デーモンにレポートを送る分単位の最大間隔時間を、正
の整数で指定します。
使用上の注意
このステートメントは、デフォルトの 1 分および、rbw.config ファイルの ADMIN
REPORT_INTERVAL パラメータのデフォルト設定値よりも優先されます。
このステートメントの引数として 0 を指定すると、rbwadmd デーモン プロセスに
レポートを送る最大間隔時間が無制限になります。クエリの完了などのイベントが
発生するまで、レポートは送られません。
SET 文
9-51
SET RESULT BUFFER と SET RESULT BUFFER FULL ACTION
SET RESULT BUFFER と SET RESULT
BUFFER FULL ACTION
クエリの結果をクライアントが取得するまで格納しておくバッファのサイズを指定
するには、次の構文で SQL SET 文を実行します。
SET RESULT BUFFER
<value>
;
K
M
G
UNLIMITED
<value>
バッファのサイズを表す整数の値を指定します。指定単位は、KB、
MB、GB のいずれかで、数値の後にそれぞれ K、M、G を指定しま
す。
UNLIMITED
バッファのサイズに制限がないことを示します。バッファは、
QUERY TEMPSPACE MAXSPILLSIZE パラメータで割り当てられる
領域と同じ領域を使用するため、RESULT BUFFER パラメータを
UNLIMITED に設定しても、QUERY TEMPSPACE MAXSPILLSIZE
の値がサイズの上限となります。
RESULT BUFFER パラメータを 0 に設定すると、結果はバッファに
格納されません。
リザルト バッファのサイズが、SET RESULT BUFFER 文の設定値に達した時の動作
を指定するには、次の構文で SET 文を実行します。
SET RESULT BUFFER FULL ACTION
ABORT
;
PAUSE
ABORT は、バッファのサイズが設定値に達した時点でクエリ処理を中止すること
を指定します。PAUSE は、クライアントがデータを取得するまで、クエリの処理を
一時停止することを指定します。
9-52 SQL Reference Guide
SET ROWCOUNT
テーブルの Read ロックは、すべてのリザルト セットが Red Brick サーバから転送さ
れるか、リザルト バッファに格納されるまで保持されます。一定量以上のデータ抽
出にユーザの要求を必要とするクライアント ツールの場合は、すべての結果がクラ
イアントに送信されるか、リザルト バッファに格納されてクライアントの要求を待
機する状態になるまで、テーブルの Read ロックは解除されません。
例
次の SET 文は、現在のセッションについてリザルト バッファのサイズを 100MB に
設定し、設定値に達した時点でクエリ処理を中止することを指定します。
set result buffer 100M;
set result buffer full action abort;
SET ROWCOUNT
SET ROWCOUNT 文を利用すると、誤って実行された「暴走クエリ」を制御できま
す。このステートメントは、指定した行数が抽出されるとクエリの実行を停止しま
す。システム リソースを有効に使用し、またユーザはリザルト セットの一部を確
認することができます。リザルト セットの後には、SET ROWCOUNT が有効である
ことを示す通知メッセージが表示されます。
クエリから返された行数が、ROWCOUNT の設定値と一致した場合も、クエリ中断
メッセージが表示されます。
構文
SET 文は、現在のセッションの行カウントを設定します。すべてのデータベース
サーバ セッションの行カウントを設定する場合は、DEFAULT ROWCOUNT パラ
メータを構成ファイル (rbw.config) に追加します。
SET 文の構文は次のとおりです。
SET ROWCOUNT
<number_of_rows>
どちらの場合も、行数は正数に設定してください。デフォルトの設定値は 0 で、抽
出される行数の制限はなくなります。ROWCOUNT の設定値を確認するには、
RBW_OPTIONS システム テーブルにクエリを実行します。
SET 文
9-53
SET ROWS_PER...TASK
例
この例では、10 行だけを返してクエリの実行を停止します。
set rowcount 10
select prod_name, dollars
from sales s join product p on s.prodkey = p.prodkey
and s.classkey = p.classkey
join period d on s.perkey = d.perkey
where year = 1998
and month = 'JAN'
PROD_NAME
Veracruzano
Veracruzano
Veracruzano
Veracruzano
Veracruzano
Veracruzano
Veracruzano
Veracruzano
Veracruzano
Veracruzano
DOLLARS
96.00
17.25
31.50
40.00
51.75
69.00
337.50
69.00
36.75
135.00
** INFORMATION ** (1436) Query terminated because ROWCOUNT
number of rows have been fetched.Rows returned 10.
SET ROWS_PER...TASK
このセクションでは、関連する 4 つの SET 文について説明します。
■
■
■
■
SET ROWS_PER_SCAN_TASK
SET ROWS_PER_JOIN_TASK
SET ROWS_PER_FETCH_TASK
SET ROWS_PER_TARGETJOIN_TASK
上記のステートメントは、並列タスクあたりの行数を指定することにより、クエリ
の並列処理を制御します。SET FORCE TASK 文は、ROWS_PER_TASK パラメータ
に優先し、タスクが処理する行数に関係なく並列タスク数を指定します。詳細につ
いては、9-23 ページ「SET FORCE TASKS」を参照してください。
各パラメータの詳しい内容とタスク数を計算する式の例については、『Query
Performance Guide』を参照してください。
9-54 SQL Reference Guide
ROWS_PER_SCAN_TASK
ROWS_PER_SCAN_TASK
ROWS_PER_SCAN_TASK パラメータは、1 つのスキャン プロセスを生成するため
に必要なリザルト行の最小数を設定し、関係スキャンの並列プロセス数を制限しま
す。この値は、インデックスを使用せずテーブル全体をスキャンするクエリに影響
します。
構文
次に SET ROWS_PER_SCAN_TASK 文の構文ダイアグラムを示します。
SET
ROWS_PER_SCAN_TASK
<rows_per_process>
<rows_per_process>
1 ∼ 231 の整数を指定できます。この値を大きくするほどク
エリ先のテーブルから行が返されるときの並列度が低くな
り、値を小さくするほど並列度が高くなります。5,000 以上
に設定することを推奨します。
実際に使用されるプロセス数は、TOTALQUERYPROCS パラメータおよび
QUERYPROCS パラメータの設定値によっても制限されます。
ROWS_PER_FETCH_TASK と
ROWS_PER_JOIN_TASK
ROWS_PER_FETCH_TASK パラメータと ROWS_PER_JOIN_TASK パラメータは、
STAR インデックスを使用するクエリを処理するための並列プロセスの数を決定し
ます。インデックス スキャン処理と行データ処理の作業量はクエリによって異なる
ため、フェーズごとに最少処理行数を設定できるようになっています。たとえば、
行のフェッチ後に大量の処理を必要とするクエリ ( GROUP BY、SUM、MIN など )
の場合は、フェッチ タスクに割り当てる行数を結合操作に割り当てる行数より少な
くし、フェッチ操作に使用されるプロセス数が多くなるようにします。
SET 文
9-55
ROWS_PER_TARGETJOIN_TASK
構文
次に、SET ROWS_PER_JOIN_TASK 文と SET ROWS_PER_FETCH_TASK 文の構文ダ
イアグラムを示します。
SET
ROWS_PER_JOIN_TASK
<rows_per_process>
SET
ROWS_PER_FETCH_TASK
<rows_per_process>
<rows_per_process> 1 ∼ 231 の整数を指定できます。この値を大きくするほど並列度
が低くなり、値を小さくするほど並列度が高くなります利用可
能なプロセス数が 2 未満の場合、クエリの並列処理は行われま
せん。
並列処理を効果的にするには、ROWS_PER_JOIN_TASK と
ROWS_PER_FETCH_TASK の値を 5,000 以上に設定します。
ROWS_PER_TARGETJOIN_TASK
ROWS_PER_TARGETJOIN_TASK パラメータは ローカルでセグメント化されたイン
デックスを使用する TARGETjoin 操作の実行に、どれだけの並列プロセス数を使用
するかということを決定します。
構文
次に SET ROWS_PER_TARGETJOIN_TASK 文の構文ダイアグラムを示します。
SET
ROWS_PER_TARGETJOIN_TASK
<rows_per_process>
<rows_per_process> 1 ∼ 231 の整数を指定できます。この値を大きくするほど並列度
が低くなり、値を小さくするほど並列度が高くなります利用可
能なプロセス数が 2 未満の場合、クエリの並列処理は行われま
せん。
9-56 SQL Reference Guide
SET SAMPLE MARGIN
使用上の注意
このパラメータは、ローカル インデックスに対して TARGETjoin 操作を行う場合に
だけ適用されます。非ローカル インデックスを使用する TARGETjoin の場合は、
TARGETjoin の上にある Exchange 演算子の次数は常に 1 であり、
FORCE_TARGETJOIN_TASK パラメータによる影響はありません。
SET SAMPLE MARGIN
SET SAMPLE MARGIN 文は、ランダム サンプリングを実行しながら、行サンプル
のサイズの分散度を監視するためのマージン パラメータを設定します。
構文
次に SET SAMPLE MARGIN 文の構文ダイアグラムを示します。
SET SAMPLE MARGIN
<value>
ON
OFF
<value>
正の整数を指定します。
ON
マージン値は、rbw.config ファイルから取得されます。rbw.config
ファイルに値が指定されていない場合、デフォルト値が使用されま
す。デフォルト値は 10% です。
OFF
マージンは設定されません。
使用上の注意
行サンプリングで返されるサンプルの実際のサイズは、要求したサイズと異なるこ
とがあります。SET SAMPLE MARGIN パラメータを設定することにより、行サンプ
ルのサイズの分散度を監視できます。実際のサイズが、指定したマージンの 100 分
位数の範囲外になるたびに、警告メッセージが表示されます。
SET 文
9-57
SET SAMPLE MARGIN
たとえば、マージンを 10 に設定した場合、サンプル クエリで返される行の量が、
要求した量よりも 10% を上回る、または下回るたびに、メッセージが表示されま
す。マージン設定にかかわらず、クエリは完全に実行されます。
SET STATS INFO が実装されている場合に限り、クエリ結果の後にサンプル マージ
ン情報が表示されます。
このステートメントは、rbw.config ファイルの TUNE SAMPLE_MARGIN パラメー
タとしても使用できます。
例
set stats info;
set sample margin 1;
select quantity, dollars
from sales
sample 5
where dollars < 4;
** STATISTICS ** (500) Compilation = 00:00:00.00 cp time,
00:00:00.00 time, Logical IO count=10
QUANTITY
DOLLARS
1
3.75
1
3.75
1
3.75
1
3.75
1
2.00
1
3.75
1
3.75
1
3.75
1
3.00
1
3.50
1
3.75
1
3.75
** STATISTICS ** (1457) EXCHANGE (ID: 1) Parallelism over 1
times High: 4 Low: 4 Average: 4.
** INFORMATION ** (1466) SAMPLE SCAN (ID: 2) Sample Seed:
965929035. Sample Size specified 5.00000000 percent (3497)
rows, returned 5.00278806 percent (3499) rows.
** STATISTICS ** (500) Time = 00:00:00.18 cp time, 00:00:00.15
time, Logical IO count=323
** INFORMATION ** (256) 12 rows returned.
9-58 SQL Reference Guide
SET SAMPLE SEED
SET SAMPLE SEED
SET SAMPLE SEED 文は、特定のクエリから得たサンプルを再生するために、現行
のセッションでクエリを実行するごとにシード値 ( 生成された値の擬似乱数列の開
始値 ) を設定します。
構文
次に SET SAMPLE SEED 文の構文ダイアグラムを示します。
<value>
SET SAMPLE SEED
<value>
一意の正の整数を指定します。
使用上の注意
シード値を指定すると、同じデータに対する同じクエリ用に、再生可能なサンプル
を維持できます。指定するシード値は重要な問題とはなりませんが、一意である必
要があります。たとえば、シード値を 2 または 2000 に設定できますが、どちらに設
定しても、そのシードに基づく同一のサンプリング クエリでは同じリザルト セッ
トが返されます。
シード値は次の 2 つの場所で設定できます。
■
■
SET SAMPLE SEED 文
クエリの FROM 句
select * from sales sample 20 seed 100
重要 : このシード値は、正の整数である必要があります。シード値を 0 にするとエ
ラーが返されます。
あるセッションのサンプル シード値をリセットするには、値を含まない SET
SAMPLE SEED 文を使用します。デフォルトの動作が回復して、その後の各クエリ
には個別のランダムなシード値が割り当てられます。
EXACT 以外のモードの基本テーブルのサンプリング クエリは再生可能です。その
他のすべてのサンプリング クエリは、クエリの並列処理が無効な場合にのみ再生可
能です。
SET 文
9-59
SET SAMPLE SEED
重要 : 並列処理を無効にすると、サンプリング クエリの性能が大幅に低下するこ
とがあるので注意してください。
SET STATS INFO が実装されている場合に限り、クエリ結果の後にサンプル マージ
ン情報が表示されます。
例
set stats info;
set sample seed 356;
select quantity, dollars
from sales
sample 2
where quantity > 48;
** STATISTICS ** (500) Compilation = 00:00:00.01 cp time,
00:00:00.01 time, Logical IO count=10
QUANTITY
DOLLARS
49
392.00
49
330.75
49
392.00
49
355.25
49
392.00
** STATISTICS ** (1457) EXCHANGE (ID: 1) Parallelism over 1
times High: 4 Low: 4 Average: 4.
** INFORMATION ** (1466) SAMPLE SCAN (ID: 2) Sample Seed: 356.
Sample Margin: 10.000000 percent.Sample Size specified
2.00000000 percent (1399) rows, returned 2.00025736 percent
(1399) rows.
** STATISTICS ** (500) Time = 00:00:00.18 cp time, 00:00:00.11
time, Logical IO count=323
** INFORMATION ** (256) 5 rows returned.
9-60 SQL Reference Guide
SET SEGMENTS
SET SEGMENTS
SET SEGMENTS 文は、テーブルまたはインデックスを削除したときに、そのセグ
メントを削除するかどうかを指定します。この指定は、名前付きセグメントにのみ
適用します。デフォルト セグメントは、必ず削除されます。
構文
次に SET SEGMENTS 文の構文ダイアグラムを示します。
SET SEGMENTS
DROP
KEEP
DROP
テーブルまたはインデックスを削除した時に、そのセグメントを削
除します。この指定はデフォルトです。
KEEP
名前付きセグメントが添付されているテーブルまたはインデックス
を削除しても、その名前付きセグメントを削除せず、再使用できる
ようにします。そのセグメントに割り当てられた物理格納領域には
変化がありません。セグメントは、ALTER SEGMENT 文によってほ
かのテーブルまたはインデックスに添付するできます。
使用上の注意
このステートメントは、名前付きセグメントを削除するデフォルトまたは
rbw.config ファイルの OPTION SEGMENTS パラメータで指定したデフォルトよりも
優先されます。DROP TABLE 文または DROP INDEX 文ですべての設定を無効にで
きます。
例
このステートメントは、現在のセッションでテーブルまたはインデックスを削除す
ると、そのテーブルまたはインデックスのセグメントも削除するように設定しま
す。セグメントは、ほかのテーブルまたはインデックスには再使用できません。
set segments drop
SET 文
9-61
SET STATS
SET STATS
SET STATS 文は、現在のセッションの統計報告を切り換えます。
構文
次に SET STATS 文の構文ダイアグラムを示します。
SET STATS
ON
INFO
OFF
ON
各クエリについて、統計情報を返します。統計報告の内容は、ス
テートメントおよびプラットフォームごとに異なります。
通常、サポートされる統計情報は次のとおりです。
■
■
■
■
9-62 SQL Reference Guide
リザルト セットの行数
処理時間
CPU の使用時間
論理および物理 I/O カウント
SET STATS
INFO
INFO に設定すると、ON と同様の統計情報に加え、クエリのコン
パイル時間、クエリ実行プランの選択、使用された STAR インデッ
クス、クエリ リライトの有無、統計情報のサンプリングなど、ク
エリの実行方法に関する情報が返されます。
これらの状況メッセージに表示される ID および演算子は、
EXPLAIN 文で抽出できるクエリのコンパイルと処理に関する情報に
対応しています。このステートメントの簡単な例については、この
マニュアルの 8-189 ページを参照してください。EXPLAIN 出力の詳
細については、『Query Performance Guide』を参照してください。
SQL クエリには、任意の数のサブクエリを指定できますが、
INFO_MESSAGE_LIMIT パラメータのデフォルトは 1 つのクエリで
1,000 に設定されており、複雑なクエリの実行中に膨大な数のメッ
セージが返されることを防ぎます。このパラメータの詳細について
は、9-33 ページ「SET INFO MESSAGE LIMIT」を参照してください。
OFF
統計報告を返しません。デフォルトは OFF です。
例
現在のセッションで実行したクエリの統計情報を得るには、次のように入力しま
す。
set stats on
結果の後に、標準出力フォーマットで統計値が表示されます。
select promo_desc, sum(dollars)
from sales natural join promotion natural join period
where year = 2000
group by promo_desc
PROMO_DESC
No promotion
769209.70
Temporary price reduction
14398.75
Aroma catalog coupon
8440.00
Monthly coffee special
8420.45
Store display
6921.50
** STATISTICS ** (500) Time = 00:00:00.39 cp time, 00:00:00.39
time, Logical IO count=275, IO count=0
** INFORMATION ** (256) 5 rows returned.
SET 文
9-63
SET TARGETJOIN LOCAL PREDICATES
上記のクエリを実行する前に SET STATS INFO 文を実行すると、さらに詳細な統計
情報が表示されます。
** STATISTICS ** (1457) EXCHANGE (ID: 5) Parallelism over 1
times High: 4 Low: 4 Average: 4.
** STATISTICS ** (1457) EXCHANGE (ID: 9) Parallelism over 1
times High: 1 Low: 1 Average: 1.
** STATISTICS ** (1458) CHOOSE PLAN (ID: 1) Choice: 1 was
chosen 1 times.
** STATISTICS ** (1459) CHOOSE PLAN (ID: 1) STARjoin on 1
tables was done 1 times.
** STATISTICS ** (1460) CHOOSE PLAN (ID: 1) used Index
SALES_STAR_IDX of Table SALES 1 times for STARjoin.
** STATISTICS ** (500) Time = 00:00:00.35 cp time, 00:00:00.36
time, Logical IO count=220, IO count=0
** INFORMATION ** (256) 5 rows returned.
SET TARGETJOIN LOCAL PREDICATES
SET TARGETJOIN LOCAL PREDICATES コマンドは、TARGETjoin 操作の一部とし
て、非結合述部の処理を有効または無効にします。このコマンドは現在のセッショ
ンのみに適用されます。TARGETJOIN_LOCAL_PREDICATES を OPTION パラメー
タとして rbw.config ファイルに入力すると、設定はすべてのデータベース サーバ
セッションに適用されます。
ローカル述部とは、結合されているテーブルの非結合述部です。この述部は結合す
る列以外の列に制約を与えます。TARGETJOIN_LOCAL_PREDICATES パラメータ
が OFF に設定されている場合、すべての非結合述部は結合操作の後に処理されま
す。このパラメータが ON に設定されている場合、次の条件で、非結合述部がクエ
リ プランの結合段階にまでプッシュ ダウンされます。
■
■
クエリ プランに TARGETjoin 選択プランが含まれており、実行時にそのプ
ランが選択される。
結合されているテーブルの 1 つで、非結合述部によってインデックス付け
された列が制約を受ける。インデックスは単一列の TARGET インデックス
または複数列の B-TREE インデックスのどちらかである必要があります
が、ローカルでセグメント化されている必要はありません。
9-64 SQL Reference Guide
SET TARGETJOIN LOCAL PREDICATES
構文
次に SET TARGETJOIN LOCAL PREDICATES 文の構文ダイアグラムを示します。
SET TARGETJOIN LOCAL PREDICATES
OFF
ON
OFF、ON
TARGETjoin 操作の一部としての非結合述部の処理を有効または無
効にします。
このパラメータの現在の設定値を確認するには、OFF と ON のどちらも指定せずに
次のステートメントを実行します。
set targetjoin local predicates;
** INFORMATION ** (1434) TARGETJOIN_LOCAL_PREDICATES is
currently set to OFF.
使用上の注意
rbw.config 内で、この OPTION パラメータはデフォルトで OFF に設定されていま
す。比較的制約の厳しい非結合述部を含む特定のクエリにのみ、このパラメータを
ON に設定することをお勧めします。ローカル述部の制約が緩い ( 多くの列値が制
約の条件を満たす ) 場合は、このパラメータを ON に設定しないでください。この
ような場合、述部をプッシュ ダウンすると、TARGETjoin 操作の性能が大きく低下
する可能性があります。rbw.config ファイルでパラメータを ON に設定する場合は、
必ずクエリの性能を監視してください。
非結合述部は、前述のプランで結合段階に入る前に、すでに解決されていることも
あります。この場合、TARGETJOIN_LOCAL_PREDICATES パラメータによる影響
はありません。
例
プッシュ ダウンできる非結合述部の例としては、TARGETjoin クエリにおいて、
ファクト テーブルが ( 結合述部以外に ) インデックス付けされた列に対して追加制
約を持つ場合があげられます。次に、その例を示します。
SET 文
9-65
SET TARGETJOIN LOCAL PREDICATES
LOCAL_TARGET_PREDICATES が ON に設定されていて、TARGET インデックスが
Sales.Quantity 列にある場合、次のクエリは Quantity 述部を結合段階にプッシュ ダ
ウンして、TARGETjoin プランを生成します。
RISQL> explain select date, sum(dollars)
> from sales natural join period
> where year = 2000
> and quantity >100
> group by date
> order by date;
EXPLANATION
[
....
Choice: 3; Choose Plan [id : 2] {
HASH AVL AGGR (ID: 18) Log Advisor Info: FALSE, Grouping:
TRUE, Distinct:
FALSE;
-- EXCHANGE (ID: 19) Exchange type: Functional Join
---- HASH AVL AGGR (ID: 20) Log Advisor Info: FALSE,
Grouping: TRUE, Distinct: FALSE;
------ FUNCTIONAL JOIN (ID: 21) 1 tables: PERIOD
-------- BTREE 1-1 MATCH (ID: 22) Join type: InnerJoin;
Index(s): [Table: PERIOD, Index: PERIOD_PK_IDX]
---------- FUNCTIONAL JOIN (ID: 23) 1 tables: SALES
------------ EXCHANGE (ID: 24) Exchange type: TARGETjoin
-------------- TARGET JOIN (ID: 25) Table: SALES,
Predicate: (SALES.QUANTITY) > (100) ; Num indexes: 2
Index(s): Index: PERKEY_TGT ,Index: QTY_TGT
---------------- FUNCTIONAL JOIN (ID: 26) 1 tables: PERIOD
------------------ VIRTAB SCAN (ID: 27)
...
9-66 SQL Reference Guide
SET TEMPORARY SEGMENT STORAGE PATH
同じクエリが同じインデックスで実行されても、LOCAL_TARGET_PREDICATES が
OFF に設定されている場合は、Sales に対するファンクショナル結合によって
Quantity 列の述部が解決されます (TARGETjoin の上 )。
...
Choice: 3; Choose Plan [id : 2] {
HASH AVL AGGR (ID: 18) Log Advisor Info: FALSE, Grouping:
TRUE, Distinct: FALSE;
-- EXCHANGE (ID: 19) Exchange type: Functional Join
---- HASH AVL AGGR (ID: 20) Log Advisor Info: FALSE,
Grouping: TRUE, Distinct: FALSE;
------ FUNCTIONAL JOIN (ID: 21) 1 tables: PERIOD
-------- BTREE 1-1 MATCH (ID: 22) Join type: InnerJoin;
Index(s): [Table: PERIOD, Index: PERIOD_PK_IDX]
---------- FUNCTIONAL JOIN (ID: 23) 1 tables: SALES
------------ EXCHANGE (ID: 24) Exchange type: TARGETjoin
-------------- TARGET JOIN (ID: 25) Table: SALES,
Predicate: <none> ; Num indexes: 1 Index(s): Index:
PERKEY_TGT
---------------- FUNCTIONAL JOIN (ID: 26) 1 tables: PERIOD
------------------ VIRTAB SCAN (ID: 27)
...
EXPLAIN 出力のファンクショナル結合には、解決する述部の情報が含まれないこ
とに注意してください。ただし、この場合は TARGETjoin 操作に次のように読み込
まれます。
Predicate: <none>
SET TEMPORARY SEGMENT STORAGE
PATH
SET TEMPORARY (DATA|INDEX) SEGMENT STORAGE PATH 文は、デフォルトの
テンポラリ データおよびテンポラリ インデックス セグメントを格納する物理格納
ユニット (PSU) のディレクトリを指定します。このディレクトリが指定されない場
合は、テンポラリ セグメントの PSU はデータベース ディレクトリに格納されます。
多数のテンポラリ テーブルや複数の大きなテンポラリ テーブルが同時に作成され
た場合は、一時格納セグメントの格納領域が足りなくなることがあります。
このステートメントは、rbw.config ファイルの OPTION
TEMPORARY_DATA_SEGMENT および OPTION TEMPORARY_INDEX_SEGMENT
パラメータとしても使用できます。
SET 文
9-67
SET TRANSACTION ISOLATION LEVEL
構文
次に SET TEMPORARY (DATA|INDEX) SEGMENT STORAGE PATH 文の構文ダイア
グラムを示します。
SET TEMPORARY
DATA
SEGMENT STORAGE PATH
<dir_name>
INDEX
<dir_name>
すべてのデフォルト行データ セグメントまたはすべてのデフォル
ト インデックス セグメントを格納するディレクトリの絶対パス
(<dir_name>) を指定します。デフォルト ディレクトリを指定しない
と、すべてのデフォルト セグメントは rbw.config ファイルで指定さ
れたデータベース ディレクトリに格納されます。
SET TRANSACTION ISOLATION LEVEL
SET TRANSACTION ISOLATION LEVEL 文は、あるテーブルを読み取り、別のテー
ブルを変更する SQL 文で、2 つのテーブル間にキー関係がない場合に使用された
Read ロックのタイプを制御します。このステートメントはバージョン管理された
データベースにだけ適用されます。
構文
次に SET TRANSACTION ISOLATION LEVEL 文の構文ダイアグラムを示します。
SET TRANSACTION ISOLATION LEVEL
SERIALIZABLE
REPEATABLE READ
9-68 SQL Reference Guide
SET UNIFORM PROBABILITY FOR ADVISOR
SERIALIZABLE
あるテーブルを読み取って別のテーブルを更新するトラン
ザクションに対して、RD (read data) ロックが使用されるよ
うにします。この RD ロックは、別のバージョニング トラ
ンザクションが読み取り中のテーブルに対して、同時に
バージョニング更新を実行することを禁止します。後から
開始されたトランザクションは、先行するトランザクショ
ンが終了するまで待機してから、テーブルを読み取りま
す。このロックは、制約が最も大きなモードです。
REPEATABLE READ
RO (read only) ロックが使用されるようにします。RO ロッ
クを使用すると、読み取り操作とテーブルに対するバー
ジョニングを同時に実行できます。このロックは、トラン
ザクションが、現在更新中のテーブルの古いバージョンを
読み取り、別のテーブルを変更すること ( たとえば、
INSERT INTO...SELECT 文 ) を可能にします。このロック
は、SERIALIZABLE よりも制約が弱いモードです。
このステートメントは、rbw.config ファイルの OPTION
TRANSACTION_ISOLATION_LEVEL パラメータとしても
使用できます。このパラメータの詳細と、2 つの設定の違
いを示す例については、
『Administrator's Guide』を参照して
ください。
SET UNIFORM PROBABILITY FOR ADVISOR
SET UNIFORM PROBABILITY FOR ADVISOR 文は
RBW_PRECOMPVIEW_UTILIZATION および RBW_PRECOMPVIEW_
CANDIDATES Advisor システム テーブルを検索するときに、各ビューの参照回数を
計算するためにログ ファイルをスキャンするかどうかを指定します。このステート
メントを ON に設定すると、基本テーブルのすべてのビューが同じ回数だけ参照さ
れたとみなされます。デフォルトは OFF です。
このステートメントは、rbw.config ファイルの OPTION UNIFORM_PROBABILITY_
FOR_ADVISOR パラメータとしても使用できます。
SET 文
9-69
SET USE INVALID PRECOMPUTED VIEWS
構文
次に SET UNIFORM PROBABILITY FOR ADVISOR 文の構文ダイアグラムを示しま
す。
SET UNIFORM PROBABILITY FOR ADVISOR
OFF
ON
Advisor および事前計算ビューの詳細については、
『IBM Red Brick Vista User’s Guide』
を参照してください。
SET USE INVALID PRECOMPUTED VIEWS
SET USE INVALID PRECOMPUTED VIEWS ON 文は、事前計算ビューの妥当性にか
かわらず、すべての事前計算ビューをクエリ書き換えに使用できるようにします。
このステートメントを OFF に設定した場合、ビューがクエリ書き換えに使用される
ようにしたり、RBW_PRECOMPVIEW_UTILIZATION テーブルの Advisor クエリ
で指定されるようにするには、ビューを有効とマークする必要があります。
構文
次に SET USE INVALID PRECOMPUTED VIEWS 文の構文ダイアグラムを示します。
SET USE INVALID PRECOMPUTED VIEWS
OFF
ON
このステートメントは、OPTION USE_ INVALID_PRECOMPUTED _VIEWS パラメー
タとしても存在します。
Advisor および事前計算ビューの詳細については、
『IBM Red Brick Vista User’s Guide』
を参照してください。
9-70 SQL Reference Guide
SET USE LATEST REVISION
SET USE LATEST REVISION
SET USE LATEST REVISION 文は、クエリ リビジョンが設定された場合に、RISQL
セッションでは現在のリビジョンか、あるいはデフォルトのクエリ リビジョンのど
ちらを使用するか設定します。
ALTER DATABASE FREEZE QUERY REVISION 文の実行によるクエリ リビジョンが
設定されていない場合、あるいは ALTER DATABASE UNFREEZE QUERY REVISION
文で、無更新に設定されている場合、SET USE LATEST REVISION 文で選択された
値にかかわらず、最新のクエリが使用されます。
構文
次に SET USE LATEST REVISION 文の構文ダイアグラムを示します。
SET USE LATEST REVISION
OFF
ON
バージョン化されたデータベースの詳細については、
『Administrator's Guide』を参照
してください。
SET 文
9-71
SET VERSIONING
SET VERSIONING
SET VERSIONING 文は、データベース トランザクションをブロッキング トランザ
クションとして実行するかバージョニング トランザクションとして実行するかを指
定します。
構文
次に SET VERSIONING 文の構文ダイアグラムを示します。
SET VERSIONING
OFF
ON
OFF
ステートメントがブロッキング トランザクションとして実行される
よう指定します。
ON
ステートメントがバージョニング トランザクションとして実行され
るよう指定します。
接続中のデータベースにバージョン ログが存在しない場合に SET VERSIONING ON
文を実行すると、データベースを更新するトランザクション (INSERT、UPDATE、
DELETE 文 ) はエラーにより失敗します。
接続中のデータベースにバージョン ログが存在する場合も、(ALTER DATABASE
STOP VERSIONING を使って ) バージョニングが停止中であれば、バージョニング
トランザクションとして実行されるデータベースを更新するトランザクション
(INSERT、UPDATE、DELETE 文 ) はエラーにより失敗します。
SET VERSIONING 文は、テンポラリ テーブルに対する DML 操作に影響を与えませ
ん。これらの操作は、常にバージョン管理されない ( ブロッキング ) トランザク
ションとして実行されます。
このステートメントは、rbw.config ファイルの OPTION VERSIONING パラメータと
しても使用できます。これらのステートメントの詳細については、『Administrator's
Guide』を参照してください。
9-72 SQL Reference Guide
付録
構文一覧
付録 A では、第 8 章「SQL 文と RISQL 拡張機能」で説明した SQL コ
マンドおよび RISQL 拡張機能と各構文の一覧を示します。構文の一覧
は、クイック リファレンスとしてお使いください。
ここではコマンドを次の 4 種類に分類しています。
■
■
■
■
データベース制御コマンド
データ定義コマンド
データ操作コマンド
その他の一般コマンド
データベース制御コマンド
ここでは次の操作を行うコマンドの一覧を示します。
■
■
■
■
■
■
ログ記録とアカウンティングの制御
ユーザ操作の制御
ユーザ優先順位の制御
データベース ユーザとパスワードの作成
データベース権限の付与と取消
データベース オブジェクトに対する特権の付与と取消
ALTER DATABASE
ALTER DATABASE
<version_log_specification>
ALTER DATABASE
DROP VERSION LOG
START VERSIONING
STOP VERSIONING
START CLEANING
STOP CLEANING
CLEAN VERSION LOG
REMOVE DAMAGED SEGMENTS
FREEZE QUERY REVISION
UNFREEZE QUERY REVISION
TERMINATE
DATABASE <database_logical_name>
CREATE VERSION LOG IN <segment_name>
DROP BACKUP DATA
A-2 SQL Reference Guide
ALTER SYSTEM
ALTER SYSTEM
ALTER SYSTEM
RESET STATISTICS
DATABASE
ALL
<logical_db_name>
QUIESCE
DATABASE
ALL
<logical_db_name>
RESUME
DATABASE
START
ALL
<logical_db_name>
ADVISOR_LOGGING
STOP
SWITCH ADVISOR_LOG FILE
TERMINATE
ADMIN
DAEMON
ADMINISTRATION
<alter_user_activity>
<alter_user_priority>
<alter_logging>
<alter_accounting>
<alter_performance_monitor>
<alter_clear_performance_stats>
構文一覧
A-3
ALTER SYSTEM
alter_user_activity
<db_username>
CLOSE USER SESSION
CANCEL USER COMMAND
DATABASE
ALL
ALL
<logical_db_name>
ALL
PROCESS
<pid>
alter_user_priority
CHANGE USER
<db_username>
ALL
SET PRIORITY
<integer>
ON DATABASE
ALL
<logical_db_name>
PROCESS
ALL
<pid>
A-4 SQL Reference Guide
ALTER SYSTEM
alter_logging
START LOGGING
STOP LOGGING
SWITCH LOGGING FILE
TERMINATE LOGGING DAEMON
CHANGE LOGGING LEVEL
AUDIT
ERROR
OPERATIONAL
ROUTINE
ALERT
URGENT
SCHEMA
USAGE
alter_accounting
START ACCOUNTING
STOP ACCOUNTING
SWITCH ACCOUNTING FILE
CHANGE ACCOUNTING LEVEL
WORKLOAD
JOB
alter_performance_monitor
START
PERFORMANCE MONITOR
SESSION <session_id>
STOP
DATABASE
<logical_db_name>
構文一覧
A-5
ALTER USER
alter_clear_performance_statistics
CLEAR PERFORMANCE STATISTICS
START_TIMESTAMP <timestamp>
USERNAME <user_name>
DATABASE
<logical_db_name>
ALTER USER
ALTER USER
<db_username>
SET PRIORITY
COMMENT
<integer>
'<character_string>'
NULL
GRANT (権限とロール)
,
GRANT
DBA
RESOURCE
<authorization>
<role_name>
A-6 SQL Reference Guide
,
TO
<db_username>
<role_name>
GRANT CONNECT
GRANT CONNECT
GRANT CONNECT
,
,
DBA
RESOURCE
<authorization>
<role_name>
TO
<db_username>
WITH
<password>
'<password>'
PRIORITY
<integer>
GRANT (特権)
,
GRANT
ON
ALL
<table_name>
PRIVILEGES
DELETE
INSERT
SELECT
UPDATE
,
TO
<db_username>
<role_name>
PUBLIC
構文一覧
A-7
REVOKE ( 権限とロール )
REVOKE ( 権限とロール )
,
,
REVOKE
FROM
DBA
<db_username>
<role_name>
RESOURCE
<authorization>
<role_name>
REVOKE CONNECT
FROM
REVOKE CONNECT
<db_username>
REVOKE (特権)
,
REVOKE
ON
ALL
PRIVILEGES
DELETE
INSERT
SELECT
UPDATE
,
FROM
<db_username>
<role_name>
PUBLIC
A-8 SQL Reference Guide
<table_name>
データ定義コマンド
データ定義コマンド
次のコマンドは、インデックス、マクロ、ロール、セグメント、シノニム、テーブ
ル、ビューの変更、作成、または削除を実行します。
ALTER INDEX
ALTER INDEX
<index_name>
<integer>
CHANGE FILLFACTOR
SMALL
CHANGE DOMAIN
SIZE
MEDIUM
LARGE
COMMENT
'<character_string>'
NULL
ALTER MACRO
MACRO
ALTER
<macro_name>
TEMPORARY
PUBLIC
COMMENT
'<character_string>'
NULL
ALTER ROLE
ALTER ROLE
<role_name>
COMMENT
'<character_string>'
NULL
構文一覧
A-9
ALTER SEGMENT - ATTACH 句
ALTER SEGMENT - ATTACH 句
<segment_name>
ALTER SEGMENT
ATTACH TO
RANGE
TABLE
<table_name>
INDEX
<index_name>
( <literal:literal> )
INVALIDATE
( <rownum:rownum> )
)
: <segname>
( <segname>
<rownum>
LIKE SEGMENT
<rownum>
<referencing_table_segname>
RANGE 指定では、コロンの左側に MIN、右側に MAX と入力して、それぞれ最小
値と最大値を指定することもできます。
A-10
SQL Reference Guide
ALTER SEGMENT - その他の句
ALTER SEGMENT - その他の句
<segment_name>
ALTER SEGMENT
OF
TABLE
<table_name>
INDEX
<index_name>
<detach_clear_offline_online_specification>
VERIFY
FORCE INTACT
<segmenting _column>
SEGMENT BY
RANGE
( <rangeval:rangeval> )
MOVE
INVALIDATE
ON
OPTICAL
OFF
RENAME
<new_seg_name>
<psu_sequence_id>
CHANGE MAXSIZE
CHANGE EXTENDSIZE
MIGRATE TO
<max_size>
TO
<psu_sequence_id>
<psu_sequence_id>
CHANGE PATH
TO
TO
<increment>
'<new_filename>'
'<dir_path>'
DROPPING
PSUS
KEEPING
COMMENT
'<character_string>'
NULL
<add_storage_specification>
RELEASE STORAGE
DROP LAST STORAGE
構文一覧 A-11
ALTER SEGMENT - その他の句
detach_clear_offline_online_specification
DETACH
INVALIDATE
<override_fullindexcheck_specification>
OFFLINE
OVERRIDE REFCHECK
ONLINE
CLEAR
<override_fullindexcheck_specification>
OVERRIDE REFCHECK
override_fullindexcheck_specification
OVERRIDE FULLINDEXCHECK ON SEGMENTS
(
<index_segment>
,
add_storage specification
ADD STORAGE
INITSIZE
A-12
SQL Reference Guide
'<filename>'
<init_size>
MAXSIZE
EXTENDSIZE
<max_size>
<increment>
)
ALTER SYNONYM
ALTER SYNONYM
ALTER SYNONYM
<synonym_name>
<col_name>
ALTER
COLUMN
COMMENT
'<character_string>'
NULL
構文一覧
A-13
ALTER TABLE
ALTER TABLE
,
ALTER TABLE
<table_name>
<add_column>
<drop_column>
IN_PLACE
<segment_name>
IN
,
IN
(
<segment_name>
)
<alter_column>
RESUME
RESET
NULL
CHANGE MAXSEGMENTS TO
<maxsegments>
CHANGE MAXROWS PER SEGMENT TO
NULL
<maxrows>
SET PRECOMPUTED VIEWS
valid
invalid
COMMENT
NULL
'<character_string>'
<add_constraint>
<drop_constraint>
<alter_constraint>
RENAME AS
A-14
SQL Reference Guide
<new_name>
ALTER TABLE
add_column
ADD
<column_name>
<datatype>
NOT NULL
COLUMN
UNIQUE
<literal>
DEFAULT
CURRENT_DATE
WITH FILLFACTOR N
CURRENT_TIME
CURRENT_TIMESTAMP
CURRENT_USER
NULL
drop_column
DROP
<column_name>
RESTRICT
COLUMN
構文一覧
A-15
ALTER TABLE
alter_column
<col_name>
ALTER
COLUMN
RENAME AS
<new_col_name>
ON DELETE
NO ACTION
CASCADE
SET DEFAULT
<default_definition>
DROP DEFAULT
CHANGE FILLFACTOR n
SET SERIAL START
(
<value>
)
SET SERIAL STEP
(
<value>
)
COMMENT
NULL'<character_string>'
NULL
NOT NULL
add_constraint
,
ADD
FOREIGN KEY
CONSTRAINT
REFERENCES
(
<column_name>
<constraint_name>
<table_name>
,
(
<primary_key_column>
INITIALLY
ON DELETE
CASCADE
NO ACTION
A-16
SQL Reference Guide
IMMEDIATE
DEFERRED
)
)
ALTER VIEW
drop_constraint
<constraint_name>
DROP CONSTRAINT
alter_constraint
<constraint_name>
ALTER CONSTRAINT
REFERENCES
<referenced_table_name>
ON DELETE
CASCADE
NO ACTION
ALTER VIEW
ALTER VIEW <view_name>
COMMENT
ALTER COLUMN <col_name>
set
VALID
INVALID
SET MAINTENANCE
ON
REBUILD
OFF
構文一覧
A-17
CREATE HIERARCHY
CREATE HIERARCHY
CREATE HIERARCHY
<hierarchy_name>
(
,
<from_to_definition>
)
<constraint_name>
ON
from_to_definition 句
FROM
<table_name (column_name)>
TO
<table_name (column_name)>
CREATE INDEX
,
INDEX
CREATE
STAR
TARGET
A-18
SQL Reference Guide
<index_specifier>
ON ERROR
CONTINUE
ABORT
CREATE INDEX
index_specifier
,
<index_name>
ON
<table_name>
(
)
<column_name>
<fkey_constraint_name>
<segment_specification>
IN
<n>
WITH FILLFACTOR
DOMAIN
SMALL
SIZE
MEDIUM
LARGE
segment_specification
<segment_name>
IN
,
(
<segment_name>
SEGMENT LIKE DATA
)
SEGMENT LOCAL
SEGMENT LIKE REFERENCED TABLE
<segment_range_spec>
構文一覧
A-19
CREATE INDEX
segment_range_spec - B-TREE インデックスと TARGET イン
デックス
(
SEGMENT BY VALUES OF
(
RANGES
,
MIN :<literal>
)
<segmenting_column>
<literal> :MAX
<literal:literal>
,
MIN :MAX
segment_range_spec - STAR インデックス
(
SEGMENT BY VALUES OF
RANGES
(
<segmenting_column>
)
MIN :MAX
MIN :<rangeval>
,
<rangeval> :MAX
<rangeval:rangeval>
A-20
)
SQL Reference Guide
,
CREATE MACRO
CREATE MACRO
<macro_name>
MACRO
CREATE
TEMPORARY
PUBLIC
,
(
<parameter>
<cat_val>
CATEGORY
)
()
AS
COMMENT
<definition>
'<character_string>'
CREATE ROLE
CREATE ROLE
<role_name>
,
FOR
<db_username>
<role_name>
CREATE SEGMENT
,
CREATE SEGMENT
<segment_name>
<storage_specification>
構文一覧
A-21
CREATE SYNONYM
<storage_specification>
'<filename>'
STORAGE
INITSIZE
<init_size>
MAXSIZE
<max_size>
EXTENDSIZE
<increment>
CREATE SYNONYM
<synonym_name>
CREATE SYNONYM
FOR
<table_name>
CREATE TABLE
CREATE TABLE
(
<table_name>
<column_definitions>
)
<segment_specification>
MAXROWS PER SEGMENT
MAXSEGMENTS
A-22
SQL Reference Guide
<maxsegments>
<maxrows>
CREATE TABLE
column_definitions
,
<column_name>
<datatype>
DEFAULT
NOT NULL
UNIQUE
<literal>
<function>
NULL
,
<primary_key_reference>
, <foreign_key_reference>
primary_key_reference
,
PRIMARY KEY
CONSTRAINT
<column_name>
(
)
<constraint_name>
foreign_key_reference
,
FOREIGN KEY
CONSTRAINT
<constraint_name>
REFERENCES
<referenced_table>
(
)
<column_name>
,
(
ON DELETE
<primary_key_column>
)
CASCADE
NO ACTION
構文一覧
A-23
CREATE TABLE
segment_specification
DATA IN
<segment_name>
<segment_range_spec>
SEGMENT BY HASH
,
(
)
<segment_name>
<segment_range_spec>
SEGMENT BY HASH
<segment_name>
PRIMARY INDEX IN
<segment_range_spec>
SEGMENT LIKE DATA
,
(
<segment_name>
)
<segment_range_spec>
SEGMENT LIKE DATA
segment_range_spec
(
SEGMENT BY VALUES OF
RANGES
(
MIN :<literal>
<segmenting_column>
,
<literal> :MAX
<literal : literal>
MIN:MAX
A-24
SQL Reference Guide
)
,
)
CREATE TEMPORARY TABLE
CREATE TEMPORARY TABLE
CREATE TEMPORARY TABLE
<column_definitions>
(
<table_name>
)
CREATE VIEW
CREATE VIEW
<view_name>
,
(
AS
<column_name>
)
<query_expression>
<precomputed_query_expression>
<using_clause>
DROP HIERARCHY
DROP HIERARCHY
<hierarchy_name>
DROP INDEX
DROP INDEX
<index_name>
DROPPING SEGMENTS
KEEPING SEGMENTS
構文一覧
A-25
DROP MACRO
DROP MACRO
MACRO
DROP
<macro_name>
TEMPORARY
PUBLIC
DROP ROLE
DROP ROLE
<role_name>
DROP SEGMENT
DROP SEGMENT
<segment_name>
DROP SYNONYM
DROP SYNONYM
<synonym_name>
DROP TABLE
<table_name>
DROP TABLE
<creator>
DROPPING SEGMENTS
KEEPING SEGMENTS
A-26
SQL Reference Guide
DROP VIEW
DROP VIEW
<view_name>
DROP VIEW
データ操作コマンド
次にデータベース テーブルの行データを修正するコマンドを示します。
DELETE
DELETE FROM
<table_name>
,
USING
WHERE
<search_condition>
<table_reference>
OVERRIDE REFCHECK
構文一覧
A-27
INSERT
INSERT
<table_name>
INSERT INTO
,
<column_name>
(
,
VALUES
<literal>
(
)
NULL
DEFAULT
<select_statement>
DEFAULT VALUES
LOCK ( テーブルのロック )
LOCK
<table_name>
FOR DELETE
LOCK DATABASE
LOCK DATABASE
READ
WRITE
A-28
SQL Reference Guide
)
SELECT
SELECT
<query_expression>
<suppress_by_clause>
<order_by_clause>
UNLOCK ( テーブルのロック解除 )
UNLOCK
<table_name>
UNLOCK DATABASE
UNLOCK DATABASE
UPDATE
,
UPDATE
<table_name>
SET
<column_name>
=
<expression>
NULL
,
FROM
WHERE
<search_condition>
<table_reference>
構文一覧
A-29
その他の一般コマンド
その他の一般コマンド
EXPAND
<SQL_statement>
EXPAND
( <width> )
EXPLAIN
<SQL_statement>
EXPLAIN
EXPORT
<output_file_specification>
EXPORT TO
DDlFILE
<file_specification>
TMUFILE
(
FORMAT
EXTERNAL
EXTERNAL Variable
INTERNAL
BINARY
DELIMITED
XML
A-30
SQL Reference Guide
<file_specification>
<select_statement>
)
付録
予約語
SQL および RISQL の予約語は、データベース名や識別子としては使用
できません。この付録にリストされている語は予約語です。
次のフォーマットは、データベース オブジェクト名に使用しないでく
ださい。
rbw_object_name
dst_object_name
rbw_ プレフィクスおよび dst _ プレフィクスは、IBM Red Brick
Warehouse システムのテーブル、動的統計テーブル (DST)、およびイ
ンデックスや列などのオブジェクトの命名に使用します。
A
ADD
AS
ALL
ASC
ALTER
ATTACH
AND
AUTHORIZATION
ANY
AVG
B
BACKUP
BREAK
BETWEEN
BY
BIT
C
CASE
CONSTRAINT
CHANGE
CONSTRAINTS
CHANGEPATH
COUNT
CHAR
CREATE
CHARACTER
CROSS
CHECK
CUME
CLOSE
CURRENT
COALESCE
CURRENT_DATE
COBOL
CURRENT_TIME
COLUMN
CURRENT_TIMESTAMP
COMMIT
CURRENT_USER
CONNECT
CURSOR
D
DATA
DELETE
DATABASE
DESC
DBA
DESCRIBE
DEC
DISTINCT
DECIMAL
DISTRIBUTED
DECLARE
DOUBLE
DEFAULT
DROP
DEFERRED
B-2 SQL Reference Guide
E
ELSE
EXCLUSIVE
END
EXISTS
ESCAPE
EXPAND
EXCEPT
EXPLAIN
EXCL
EXTRACT
F
FETCH
FOREIGN
FILENAME
FORTRAN
FIRST
FROM
FLOAT
FULL
FOR
FULLINDEXCHECK
G
GRANT
GROUP
H
HAVING
予約語
B-3
I
IMMEDIATE
INNER
IN
INSERT
INCL
INT
INCLUSIVE
INTEGER
INDEX
INTERSECT
INDICATOR
INTO
INITIALLY
IS
J
JOIN
K
KEY
L
LANGUAGE
LIKE
LAST
LOCK
LEFT
M
MACRO
MODEL
MAPPING
MODULE
MAX
MOVINGAVG
MIN
MOVINGSUM
B-4 SQL Reference Guide
N
NATURAL
NULL
NO
NULLIF
NOT
NUMERIC
NTILE
O
OF
OR
OFF
ORDER
ON
OUTER
OPEN
OVERRIDE
OPTION
P
PASCAL
PREPARE
PERMANENT
PRIMARY
PL1
PRIVILEGES
POSITION
PROCEDURE
POSITIONB
PUBLIC
PRECISION
Q
QUIT
予約語
B-5
R
RANK
RESOURCE
RATIOTOREPORT
RESUME
REAL
REVOKE
RECOVER
RIGHT
REFERENCES
ROLE
RESET
ROLLBACK
S
SCHEMA
SQLCODE
SEGMENT
STAR
SELECT
SUM
SERIAL
SUMMING
SET
SUPPRESS
SMALLINT
SYNONYM
SOME
T
TABLE
THEN
TEMPORARY
TINYINT
TERTILE
TO
TEXTSIZE
TO_CHAR
B-6 SQL Reference Guide
U
UNION
UPDATE
UNIQUE
USER
UNLOCK
USING
V
VALUES
VARYING
VARCHAR
VIEW
W
WAIT
WITH
WHEN
WORK
WHERE
予約語
B-7
付録
日付時間フォーマット
IBM Red Brick Warehouse は、ANSI SQL-92 に定義されていない日付時
間フォーマットを使用するツールのために、次の非標準の日付時間
フォーマットをサポートします。
■
■
■
■
日付フォーマット : 数字で表した月と、月名の両方が使用で
きます。数字で表す場合は、DATEFORMAT 変数を使用する
必要があります。
時間フォーマット
タイムスタンプ フォーマット : 日付フォーマットと時間
フォーマットで構成します。
ANSI SQL-92 EXTRACT 関数と類似の DATEPART スカラ関数
上記のフォーマットのサポートは、SQL サーバの日付フォーマットか
ら ANSI SQL-92 標準型式への移行を目的としています。新たに開発
するデータベースやツールでは、ANSI SQL-92 に定義されたフォー
マットを使用してください。
日付時間リテラルに DATE、TIME、TIMESTAMP のいずれかのキー
ワードを指定しないと、非標準の日付時間フォーマットの使用を暗黙
的に指定したことになります。
付録 C では、次の項目について説明します。
■
■
■
■
日付リテラル
時間リテラル
タイムスタンプ リテラル
日付フィールドと DATEPART 関数
日付リテラル
日付リテラル
非標準の日付フォーマットでは、数字で表した月と月名の両方が使用でき、年は 2
桁か 4 桁で表すことができます。月を数字で表す場合は、あいまいさ ( たとえば、
7/4/99 は、1999 年 7 月 4 日なのか、1999 年 4 月 7 日なのかなど ) をなくすために、
DATEFORMAT 変数を設定して、日付エレメントの順序を定義しておく必要があり
ます。
サーバ ロケールの言語が English、テリトリが United States でない場合は、指定した
言語および地域に対応するフォーマット規則が使用され、SET DATEFORMAT 文は
無視されます。ANSI SQL-92 に準拠しないリテラルは、アメリカ英語以外のロケー
ルではサポートされません。
DATEFORMAT の設定
次に DATEFORMAT 変数の構文ダイアグラムを示します。
SET
DATEFORMAT
mdy
myd
ymd
ydm
dmy
dym
使用上の注意
■
■
■
DATEFORMAT 変数は、SQL 文または RISQL 文と同じように入力してくだ
さい。
y は年、m は月、d は日を表します。
デフォルトは mdy です。つまり、月、日、年の順になります。
DATEFORMAT を使用するのは、月が数字で表され、DATE キーワードが
指定されていない場合だけです。
SET DATEFORMAT 文を使って日付の表示を変更することはできません。SET
DATEFORMAT 文の目的は、ANSI SQL-92 に準拠しない日付フォーマットをサーバ
の型式と対応付けることです。
C-2 SQL Reference Guide
数字で表した月の使用
数字で表した月の使用
次に、月を数字で表した日付リテラルの構文ダイアグラムを示します。
Date format set to:
'
ymd
'
<month>/<day>
<year1>/
<year2>/
<year1>/
ydm
<day>/<month>
<year2>/
<month>/<day>/
mdy
<year1>/
<year2>
<month>
myd
<year1>/
<day>
<year2>/
dmy
<day>/<month>
dym
<day>/
<year1>/
<year2>/
<year1>/
<month>
<year2>/
使用上の注意
■
■
■
日付フォーマットは、DATEFORMAT 変数によって決定されます。
日付エレメントの区切り記号には、上図に示すスラッシュ (/)、ハイフン ()、ピリオド (.) を使用できます。日付エレメントと区切り記号との間には、
空白を入れてはいけません。
<year1>、<year2>、<month>、<day> は、次を有効範囲とする符号なし整数
です。
<year1>
1 ∼ 9999
<year2>
1 ∼ 99
00 ∼ 49 は 2000 ∼ 2049 年を表す
50 ∼ 99 は 1950 ∼ 1999 年を表す
<month>
1 ∼ 12
<day>
1 ∼ 31
日付時間フォーマット
C-3
月名の使用
例
次に月を数字で表した有効な日付リテラルの例を示します。いずれの場合も、ス
ラッシュ (/)、ハイフン (-) またはピリオド (.) を区切り記号として使用できます。
DATEFORMAT の値
年が 4 桁の場合
年が 2 桁の場合
ymd
ydm
mdy
myd
dmy
dym
'1999/4/15'
'1999/15/4'
'4/15/1999'
'4/1999/15'
'15/4/1999'
'15/1999/4'
'99/4/15'
'99/15/4'
'4/15/99'
'4/99/15'
'15/4/99'
'15/99/4'
次のクエリは、DATE 列の制約に日付リテラルを使用していますが、DATEFORMAT
を ymd に設定しないと失敗します。
select * from period where date_col = '1999-12-25'
DATEFORMAT を dmy に設定すれば、次のクエリは有効です。
select * from period where date_col = '25-12-1999'
DATEFORMAT のデフォルト値は mdy なので、DATEFORMAT を明示的に設定しな
くても次のクエリは有効になります。
select * from period where date_col = '12-25-1999'
月名の使用
次に、月名を使った日付リテラルの構文ダイアグラムを示します。
C-4 SQL Reference Guide
月名の使用
'
<year1>
'
<month>
<day>
<year1>
<month>
<day>
<year1>
<month>
<day>,
<month>
<year1>
<month>
<day>
<day>
<year2>
<day>,
<month>
<day>
<month>,
<day>
<month>
<year1>
<year2>
<month>,
<year1>
<month>
<year2>
<month>
<day>
<day>
日付時間フォーマット
C-5
月名の使用
使用上の注意
■
■
■
■
各エレメント (year1、year2、month、day) と後続のエレメントは、1 つ以上
の空白で区切ります。
カンマを使用する場合は、エレメントとカンマの間に空白を入れてはいけ
ません。カンマの後には、1 つ以上の空白を挿入してください。
<year1>、<year2>、<day> は、次を有効範囲とする符号なし整数です。
<year1>
1 ∼ 9999
<year2>
0 ∼ 99
00 ∼ 49 は 2000 ∼ 2049 年を表す
50 ∼ 99 は 1950 ∼ 1999 年を表す
<day>
1 ∼ 31 ( デフォルトは 1)
month は、月名のつづりをすべて指定するか、先頭の 3 文字を指定してく
ださい。たとえば、January または Jan と表します。大文字と小文字の区別
はありません。
例
次に月名を使用した有効な日付の例を示します。April は Apr に置き換えることがで
きます。
日あり、
年が 4 桁の場合
日あり、
年が 2 桁の場合
日なし、
年が 4 桁の場合
'1988 April 15'
'1988 15 April'
'April 15 1988'
'April 15, 1988'
'April 1988 15'
'15 April 1988'
'15 April, 1988
'April 15 1988'
'April 15, 88'
'15 April 88'
'15 April, 88'
'15 88 April'
'1988 April'
'April, 1988'
'April 1988'
C-6 SQL Reference Guide
時間リテラル
時間リテラル
次に時間の値の構文ダイアグラムを示します。
'
'
<hour>
AM
PM
:<minute>
:<second>
.
:
<fraction>
<all_numeric>
使用上の注意
■
■
■
■
AM/PM 指定子の前を除き、時間エレメントの間に空白を入れることはで
きません。
<hour>、<minute>、<second>、<fraction> は、次を有効範囲とする符号なし
整数です。
<hour>
0 ∼ 23; AM/PM 指定子を使用する場合は 0 ∼ 12
<minute>
0 ∼ 59
<second>
0 ∼ 59
<fraction>
0 ∼ 999999
AM/PM 指定子は、大文字と小文字を区別しません。
秒未満の数値の前に小数点 (.) を入力した場合は、秒を単位とする 10 進小
数と見なされます。コロン (:) を入力した場合は、ミリ秒と見なされます。
例
次に有効な時間の値の例を示します。
'13:45:10:33 '
'13:45:10.33 '
'3AM '
'3PM '
'03pm '
(33 ミリ秒 )
(33/100 秒 )
日付時間フォーマット
C-7
タイムスタンプ リテラル
タイムスタンプ リテラル
次にタイムスタンプ値の構文ダイアグラムを示します。
'
<date _value>
‘‘
<time _value>
<time _value>
‘‘
<date _value>
'
<all_numeric>
使用上の注意
■
■
■
■
<date_value> と <time_value> には、それぞれ日付フォーマットと時間
フォーマットに定義された任意の文字列を使用できます。
<date_value> と <time_value> の間には空白を 1 つ挿入します。
日付の値は、4 桁、6 桁、または 8 桁の数値フォーマットすべてで指定でき
ますが、タイムスタンプ エレメントはサポートされません。
4 桁 : 1 月 1 日。4 桁は年と解釈されます。
6 桁 : 19YYMMDD、6 桁は YYMMDD と解釈されます。
8 桁 : YYYYMMDD。
日付と時間を指定しないと、デフォルトが使用されます。<date _value> の
デフォルトは 1900 年 1 月 1 日、<time_value> のデフォルトは午前 0 時です。
例
次に有効なタイムスタンプの例を示します。
'1988 April 15 3:45am'
'4/15/88 13:45:10:33'
'13:45:10:33 4-15-88'
'13:45:10 April 1988'
'April 15, 1988 3AM'
次に数字だけを使用した有効なタイムスタンプの例を示します。
'1234'(Jan 1, 1234)
'780123'(Jan 23, 1978)
'12340506'(May 6, 1234)
C-8 SQL Reference Guide
日付フィールドと DATEPART 関数
日付フィールドと DATEPART 関数
スカラ関数の中には、日付時間データ型 (dateparts) を構成する個別のエレメントに
対して動作するものがあります。各エレメントの定義は、5-58 ページ「日付時間ス
カラ関数」で説明されています。
DATEPART 関数は、ANSI SQL-92 の EXTRACT 関数と類似のスカラ関数であり、指
定された datepart エレメントを datetime の値から抽出します。次に DATEPART 関数
を使った日付時間式の構文ダイアグラムを示します。
DATEPART
(
<datepart>,
<datetime_expression>
)
<datepart>
<datepart> 引数は、日付エレメントの抽出元となる日付
フィールドを指定します。
<datetime_expression>
DATE、TIME、TIMESTAMP のいずれかのデータ型である
必要があります。
結果
日付フィールドが <datetime_expression> に指定されていなければ、時間と日付には
それぞれのデフォルトである午前 0 時と、1900 Jan 1 が入ります。各デフォル
トは、文字列としても返されます。
<datepart> が週の場合は、指定した年の 1 月 1 日が何曜日かを考慮して関数が実行さ
れます。たとえば、1 月 1 日が土曜の場合、1 月 2 日は第 2 週になります。
例
select datepart (year, date_col) from table_1
日付時間フォーマット
C-9
日付フィールドと DATEPART 関数
datepart 関数は、表示する日付をデフォルトの YYYY/MM/DD フォーマット以外に
変更するのに使用することができます。
select date,
concat (substr (string (datepart(month,date_col)), 10, 2),
`/’,
substr (string (datepart (day,date_col)), 10, 2),
`/’,
substr (string (datepart (year,date_col)), 10, 2)) as new_date
from period;
DATE
NEW_DATE
1998-01-01
1/1/98
1998-01-02
1/2/98
1998-01-03
1/3/98
"/" は、必要に応じて省略することも、"-" に変更することもできます。
C-10 SQL Reference Guide
特記事項
特記事項
本書に記載されている製品、サービス、または機能は、国によっては
提供されない場合があります。各地域で現在利用可能な IBM 製品およ
びサービスについては、該当地域の担当者にお問い合わせください。
IBM 製品、プログラム、またはサービスのすべての記述箇所は、対象
の IBM 製品、プログラム、またはサービスのみが使用されることを明
示的または暗示的に示すものではありません。IBM の知的所有権を侵
害しない、同等の機能を有する製品、プログラム、またはサービスを
使用できる場合があります。ただし、IBM 以外の製品、プログラム、
またはサービスの操作に関する評価および確認は、お客様の責任の元
に行ってください。
本書に記載の各事項は、特許または特許出願により保護されている場
合があります。本書の提供は、これらの特許の使用許諾をお客様に付
与するものではありません。使用許諾に関する質問は、下記に書面に
てお問い合わせください。
IBM Director of Licensing
IBM Corporation
North Castle Drive
Armonk, NY 10504-1785
U.S.A.
ダブル バイト (DBCS) に関する使用許諾については、各国 IBM の知的
財産部門にお問い合わせいただくか、下記まで書面にてお問い合わせ
をご送付ください。
IBM World Trade Asia Corporation
Licensing
〒 106 - 0032 東京都港区六本木 3 丁目 2 - 31
以下の段落の記述は、英国、または記述の内容が地域法に合致しない国には適用さ
れません。International Business Machines Corporation は、本書を「現状のまま」提供
し、明示的または黙示的を問わずいかなる保証の責任も負わないものとし、第三者
の権利侵害のないことへの保証、商品性の保証、または特定目的への適合性の保証
などを含み、かつこれらに限定されない、いかなる黙示的な保証の責任も負わない
ものとします。特定の取引における明示的または黙示的な保証の制限が国または地
域によって禁じられる場合、この記述は適用されないものとします。
この情報には、技術上不正確な点や誤植が含まれている可能性があります。本書の
情報は定期的に見直され、必要な変更は本書の改訂版に反映されます。IBM は本書
に記載されている製品またはプログラムに対して、随時、予告なしに変更または改
良を加えることがあります。
本書において参照されている IBM 以外の Web サイトは、単に便宜上の理由で記載
されているだけであり、それらのサイトに対する IBM の保証または支持を示すもの
ではありません。それらの Web サイトで提供される内容は、本 IBM 製品には関係
ありません。これらの利用は、お客様の責任の元で行ってください。
お客様により提供された情報は、IBM が適切と判断するすべての方法で、使用また
は頒布される場合があります。これにより、お客様に責任が発生することはありま
せん。
本プログラムのライセンス保持者で、次の事項を可能にするための情報を希望する
方は、下記にお問い合わせください。(i) 独自に作成されたプログラムと、他のプロ
グラム ( 本製品を含む ) との間の情報交換、(ii) 交換された情報の共用
IBM Corporation
J46A/G4
555 Bailey Avenue
San Jose, CA 95141-1003
U.S.A.
上記の情報は、適切な使用条件の元で利用可能ですが、有償の場合もあります。
本書で説明されるライセンス プログラムおよびこれに関して利用できるライセンス
資料は、IBM Customer Agreement、IBM International Program License Agreement、また
はそれと同等の合意の各条項に基づいて、IBM より提供されます。
2 SQL Reference Guide
この文書に含まれるすべての実行データは、管理環境下で決定されたものです。こ
のため、操作環境によって実行結果が大きく変化する場合があります。開発レベル
のシステムで測定が行われた可能性がありますが、その測定値が一般に利用可能な
システムのものと同じである保証はありません。さらに、一部の測定値には推定値
が含まれている場合があります。このため、実際の結果とは異なる可能性がありま
す。本書を利用されるお客様は、それぞれの特定の環境に適したデータを検証する
必要があります。
IBM 以外の製品に関する情報は、各製品の供給者、出版物、または公的に入手可能
な情報源から取得されたものです。IBM ではこれらの製品をテストしておらず、
IBM 以外の製品のパフォーマンス、互換性、またはその他の要件については確認し
ていません。IBM 以外の製品の機能に関する質問については、各製品の供給者にお
問い合わせください。
特記事項 3
商標
AIX、DB2、DB2 Universal Database、Distributed Relational Database
Architecture、NUMA-Q、OS/2、OS/390、および OS/400、IBM Informix、Χ ΙΣΑΜ、
Foundation.2000TM、IBM Informix 4GL、IBM Informix
DataBlade Module、Client SDKTM、CloudscapeTM、CloudsyncTM、
IBM Informix Connect、IBM Informix Driver for JDBC、Dynamic
ConnectTM、IBM Informix Dynamic Scalable ArchitectureTM (DSA)、
IBM Informix Dynamic ServerTM、IBM Informix Enterprise Gateway
Manager (Enterprise Gateway Manager)、IBM Informix Extended Parallel
ServerTM、i.Financial ServicesTM、J/FoundationTM、MaxConnectTM、Object
TranslatorTM、Red BrickTM、IBM Informix SE、IBM Informix SQL、InformiXMLTM、RedBack、SystemBuilderTM、U2TM、UniData、UniVerse、
wintegrate は、International Business Machines Corporation の商標または登録商標で
す。
Java および Java ベースの商標およびロゴは、米国およびその他の国における Sun
Microsystems, Inc の商標または登録商標です。
Windows、Windows NT、および Excel は、米国およびその他の国における Microsoft
Corporation の商標または登録商標です。
UNIX は、米国およびその他の国における、X/Open Company Limited が独占的にラ
イセンスしている登録商標です。
本書におけるその他の会社、製品およびサービスの名称は、それぞれ各社の商標ま
たはサービス マークです。
4 SQL Reference Guide
記号
数字
A
B C
あ行
か行
さ行
D
た行
E
F
な行
G
H
は行
I
J
ま行
K
L
や行
M
N O
ら行
P
Q
R
S
T
U
V W
X
Y
Z
わ行
索引
索引
記号
%、SQL ワイルドカード文字 3-16
*、検索項目リストでの省略 7-18
_、SQL ワイルドカード文字 3-16
数字
10 進数定数 2-13
3 値論理 2-25
A
ABS 関数 5-16
ADD COLUMN 句、ALTER TABLE
コマンド 8-78
ADD CONSTRAINT 指定、ALTER
TABLE コマンド 8-86
ADD STORAGE 句、ALTER
SEGMENT コマンド 8-52
ADVISOR_MAXIMUM_CANDIDA
TE_VIEWS パラメータ 9-6
Advisor 候補ビュー 9-6
ALL PRIVILEGES、付与 8-212
ALL キーワード
AVG 関数 4-5
検索項目リスト 7-17
ALL 比較述部 3-11
ALTER COLUMN 指定、ALTER
TABLE コマンド 8-83
ALTER CONSTRAINT 指定、
ALTER TABLE コマンド 8-90
ALTER DATABASE コマンド
構文一覧 A-2
構文説明 8-7
説明 8-6
ALTER INDEX コマンド
TARGET インデックス 8-17
構文一覧 A-9
構文説明 8-14
使用方法 8-16
例 8-17
ALTER MACRO コマンド
構文一覧 A-9
構文説明 8-17
ALTER ROLE コマンド
構文一覧 A-9
構文説明 8-19
ALTER SEGMENT コマンド
ATTACH 句 8-21 ∼ 8-27
DETACH OVERRIDE
FULLINDEXCHECK オプショ
ン 8-37
DETACH 句 8-33
MIGRATE TO 句 8-51
SEGMENT BY、セグメント化の
基準列 8-44
SEGMENT BY 句 8-44
完全インデックス チェックの省
略 8-35, 8-42
構文一覧 A-10
構文説明 8-21 ∼ 8-53
参照整合性チェックの省略 8-40,
8-42
修正句 8-31 ∼ 8-53
例 8-39 ∼ 8-41
ALTER SEGMENT コマンド、
RANGE 句 8-45
ALTER SYNONYM コマンド
構文一覧 A-13
構文説明 8-55
ALTER SYSTEM コマンド
構文一覧 A-3
記号
数字
A
B C
あ行
か行
さ行
D
た行
E
な行
構文説明 8-58 ∼ 8-67
性能統計のクリア設定の変
更 8-70 ∼ 8-71
説明 8-57
パフォーマンス モニタの変
更 8-68
ユーザ操作の制御 8-60,
8-61 ∼ 8-63, 8-63 ∼ 8-64
ログ記録設定の変更 8-66
ALTER SYSTEM コマンド、アカウ
ンティング設定の変更 8-67
ALTER TABLE コマンド 8-72,
8-142
ADD COLUMN 指定 8-78 ∼ 8-79
ADD CONSTRAINT 指定 8-86
ALTER COLUMN 指
定 8-82 ∼ 8-84
ALTER CONSTRAINT 指定 8-90
参照の変更 8-90
DROP COLUMN 指
定 8-81 ∼ 8-82
DROP CONSTRAINT 指定 8-89
MAXROWS PER SEGMENT
値 8-76
MAXSEGMENTS 値 8-76
RENAME AS 指定 8-77
構文説明 8-73 ∼ 8-84
参照整合性チェックの延期 8-87
ALTER USER コマンド
構文一覧 A-6
構文説明 8-93
使用上の注意 8-94
ALTER VIEW SET MAINTENANCE
コマンド 8-96
ALTER VIEW コマンド 8-94
AND 接続詞 3-17
ANY 比較述部 3-11
ARITHIGNORE、ARITHABORT コ
マンド 9-8
Aroma データベース 1-14
ASC キーワード
GROUP BY 句 7-56
OLAP ORDER BY 句 6-17
AS キーワード、列エリアス 2-6,
7-19
AVG 関数 4-5, 8-166
OLAP 6-24
2 SQL Reference Guide
F
G
H
は行
I
J
ま行
K
L
や行
M
N O
ら行
P
Q
R
S
T
U
V W
X
Y
わ行
B
BETWEEN 述部 3-12
BREAK BY サブ句
INSERT 文では使用不可 7-55,
7-64
ORDER BY 句 7-63
構文説明 7-59
B-TREE インデックス、インデック
ス、「B-TREE」を参照
C
CASCADE キーワード
ALTER TABLE コマンド 8-83,
8-87, 8-91
CREATE TABLE コマンド 8-148
CASE 式
NTILE 関数 6-60
構文説明 5-4
CATEGORY 句、CREATE MACRO
コマンド 8-129
CEIL 関数 5-17
CHANGE
ACCOUNTING LEVEL、ALTER
SYSTEM コマンド 8-67
DOMAIN 句、ALTER INDEX コマ
ンド 8-16
EXTENDSIZE 句、ALTER
SEGMENT コマンド 8-50
FILLFACTOR 句、ALTER INDEX
コマンド 8-15
LOGGING LEVEL 句、ALTER
SYSTEM コマンド 8-66
MAXROWS 句、ALTER TABLE
コマンド 8-76
MAXSIZE 句、ALTER SEGMENT
コマンド 8-49
PATH 句、ALTER SEGMENT コ
マンド 8-50
USER 句、ALTER SEGMENT コ
マンド 8-64
CHECK INDEX コマンド
説明 8-96
SET CHECK REPORT FILE
PERMISSIONS 9-9
構文一覧 8-96
構文説明 8-96
CHECK TABLE コマンド 8-99
SET CHECK REPORT FILE
PERMISSIONS 9-9
構文一覧 8-99
構文説明 8-99
CLEAN VERSION LOG 指定、
ALTER DATABASE コマン
ド 8-11
CLEAR PERFORMANCE
STATISTICS 句、ALTER
SYSTEM コマンド 8-70
CLEAR キーワード、ALTER
SEGMENT コマンド 8-42
CLOSE USER COMMAND 句、
ALTER SYSTEM コマンド 8-62
CLOSE USER SESSION 句、ALTER
SYSTEM コマンド 8-62
COALESCE 関数 5-8
COMMENT 句 8-76
インデックス 8-16
シノニム 8-56
セグメント 8-51
ビュー 8-96
マクロ 8-18, 8-130
ユーザ 8-93
列 8-85
ロール 8-19
CONCAT 関数 5-35, 5-36, 5-38
CONNECT システム ロール
付与 8-208
ユーザの削除 8-227
COUNT 関数 4-7, 6-48
OLAP 6-24
結果のデータ型 9-10
COUNT(*) 関数 4-7
CREATE HIERARCHY コマンド
説明 8-102
CREATE HIERARCHY コマンド
構文一覧 A-18
構文説明 8-103
CREATE INDEX コマンド
B-TREE インデックス 8-107
B-TREE の例 8-117
STAR インデックス 8-106
STAR インデックスの例 8-117
TARGET インデックス 8-107
インデックス指定 8-110
構文一覧 A-18
構文説明 8-106
Z
記号
数字
A
B C
あ行
か行
さ行
D
た行
E
F
な行
セグメント指定の例 8-122
セグメント定義 8-114
セグメント範囲指定 8-118
セグメント範囲の指定 8-121
説明 8-107
ドメイン サイズ 8-125
ローカル インデックスの
例 8-118
CREATE MACRO コマンド
構文一覧 A-21
構文説明 8-127 ∼ 8-130
例 8-130
CREATE ROLE コマンド
構文一覧 A-21
構文説明 8-132
使用方法 8-132
例 8-132
CREATE SEGMENT コマンド
格納領域の指定 8-134
構文一覧 A-21
構文説明 8-133 ∼ 8-135
例 8-135
CREATE SYNONYM コマンド
構文一覧 A-22
構文説明 8-136
例 8-137
CREATE TABLE コマンド
FOREIGN KEY REFERENCES
句 8-146 ∼ 8-148
MAXROWS PER SEGMENT
値 8-139
MAXSEGMENTS 値 8-139
PRIMARY KEY REFERENCE
句 8-144
SEGMENT LIKE DATA 句 8-154
構文一覧 A-22
構文説明 8-138, 8-153
セグメント定義 8-150 ∼ 8-153
説明 8-142
プライマリ キー参照 8-144
例 8-153, 8-158
CREATE TEMPORARY TABLE コ
マンド
構文一覧 A-25
構文説明 8-161
説明 8-160
CREATE VIEW コマンド
クエリ式 8-164
構文一覧 A-25
G
H
は行
I
J
ま行
K
L
や行
M
N O
ら行
P
Q
R
S
T
U
V W
X
Y
Z
わ行
構文説明 8-163
事前計算ビュー 8-168
例 8-169
CURRENT_DATE 関数 5-60
CURRENT_TIMESTAMP 関数 5-60
CURRENT_TIME 関数 5-60
CURRENT_USER 関数 5-73
D
DATABASE キーワード、ALTER
SEGMENT コマンド 8-59
DATEADD 関数 5-62
DATEDIFF 関数 5-63
DATEFORMAT 変数 C-2
DATENAME 関数 5-64, 9-22
DATE 関数 5-61
DATE データ型 2-19
DBA システム ロール
タスク権限のリスト 8-202
取消 8-224
付与 8-202
DEC、DECIMAL データ型 2-23
DECODE 関数 5-9
DEC 関数 5-19, 5-21
DEFAULT 句、CREATE TABLE コ
マンド 8-143
DEFAULT VALUES サブ句、
INSERT コマンド 8-217
DELETE ( 特権 ) 8-212
DELETE コマンド
構文一覧 A-26, A-27, A-29
構文説明 8-171 ∼ 8-172
使用方法 8-173
例 8-174 ∼ 8-176
DENSE_RANK 関数 6-16
DESC キーワード
OLAP ORDER BY 句 6-17
ORDER BY 句 7-56
DETACH 句、ALTER SEGMENT コ
マンド 8-33
DISTINCT 関数 8-167
DISTINCT キーワード
AVG 関数 4-5
COUNT 関数 4-8
OLAP 集約 6-24
検索項目リスト 7-18
DROP COLUMN 指定、ALTER
TABLE コマンド 8-81
DROP CONSTRAINT 指定、ALTER
TABLE コマンド 8-89
DROP DEFAULT 句、ALTER
TABLE コマンド 8-84
DROP HIERARCHY コマンド
構文一覧 A-25
構文説明 8-176
説明 8-176
DROP INDEX コマンド
構文一覧 A-25
構文説明 8-177
挿入時の制約 8-179
例 8-178
DROP LAST STORAGE オプショ
ン、ALTER SEGMENT コマン
ド 8-54
DROP MACRO コマンド
構文一覧 A-26
構文説明 8-180
DROP ROLE コマンド
構文一覧 A-26
構文説明 8-181
例 8-182
DROP SEGMENT コマンド 8-12
構文一覧 A-26
構文説明 8-182
例 8-183
DROP SYNONYM コマンド
構文一覧 A-26
構文説明 8-184
DROP TABLE コマンド
構文一覧 A-26
構文説明 8-185 ∼ 8-186
例 8-187
DROP VERSION LOG 指定、
ALTER DATABASE コマン
ド 8-9
DROP VIEW コマンド
構文一覧 A-27
構文説明 8-187
DROPPING SEGMENTS キーワード
DROP INDEX コマンド 8-178
DROP TABLE コマンド 8-186
DST ( 動的統計テーブル ) 9-51
索引 3
記号
数字
A
B C
あ行
か行
さ行
D
た行
E
G
な行
E
EXCEPT 演算子 7-45
EXISTS 述部 3-13
EXPAND コマンド
構文一覧 A-30
構文説明 8-188
EXPLAIN コマンド
構文一覧 A-30
構文説明 8-189
EXPORT コマンド
構文説明 8-191
説明 8-190
EXTENDSIZE 句、ALTER
SEGMENT コマンド 8-53, 8-135
EXTRACT 関数 5-66, 9-22
F
FLOAT 関数 5-22
FLOAT データ型 2-24
FLOOR 関数 5-23
FOR DELETE オプション、LOCK
コマンド 8-221
FORCE INTACT 句、ALTER
SEGMENT コマンド 8-43
FORCE_AGGREGATION_TASKS
パラメータ 9-23
FORCE_FETCH_TASKS パラメー
タ 9-23
FORCE_HASHJOIN_TASKS パラ
メータ 9-23
FORCE_JOIN_TASKS パラメー
タ 9-23
FORCE_SCAN_TASKS パラメー
タ 9-23
FORCE_TARGETJOIN_TASKS パラ
メータ 9-23
FOREIGN KEY 句、CREATE
TABLE コマンド 8-147
<frame_between> 句 6-27
<frame_end> 句 6-27
<frame_start> 句 6-26
FROM 句 7-22
NATURAL JOIN 構文 7-24
ON サブ句 7-24
USING サブ句 7-24
外部結合 7-23
4 SQL Reference Guide
F
H
は行
I
J
ま行
K
L
や行
M
N O
ら行
P
Q
R
S
T
U
V W
X
Y
わ行
クエリ式 7-15
クロス結合 7-24
結合指定 7-24
サブクエリ 7-15
サブクエリの性能 7-71
テーブル参照 7-23
内部結合および外部結合 7-23
FULLINDEXCHECK キーワード、
ALTER SEGMENT コマン
ド 8-35, 8-42
G
GRANT ( 権限とロール ) コマンド
構文一覧 A-6
構文説明 8-201 ∼ 8-206
使用方法 8-205
例 8-206
GRANT ( 特権 ) コマンド
構文一覧 A-7
構文説明 8-212 ∼ 8-213
例 8-213
GRANT CONNECT コマンド
構文一覧 A-7
構文説明 8-208 ∼ 8-210
例 8-211
GROUP BY 句 7-39, 7-55
H
HAVING 句 7-41
I
IFNULL 関数 2-25, 5-12
IGNORE_OPTICAL_INDEXES パラ
メータ、構文 9-27
IN_PLACE キーワード、ALTER
TABLE コマンド 8-74
INFO_MESSAGE_LIMIT パラメー
タ、rbw.config ファイル 9-33
INITIALLY DEFERRED オプショ
ン、ALTER TABLE ADD
CONSTRAINT コマンド 8-87
INITSIZE 句、ALTER SEGMENT コ
マンド 8-53, 8-135
INSERT ( 特権 ) 8-212
INSERT コマンド
値の代入 2-26
構文一覧 A-28
構文説明 8-214 ∼ 8-217
使用方法 8-218
挿入時の制約 8-179
例 8-218 ∼ 8-220
INTERSECT 演算子 7-45
INT 関数 5-25, 5-27, 5-30
INT データ型 2-20
IN 述部 3-14
IS NOT NULL 述部 2-25
IS NULL 述部 2-25, 3-15
K
KEEPING SEGMENTS キーワード
DROP INDEX コマンド 8-178
DROP TABLE コマンド 8-186
L
LIKE 述部 3-16
LOCK ( テーブルのロック ) コマン
ド
構文一覧 A-28
構文説明 8-221
LOCK DATABASE コマンド
構文説明 8-222
使用方法 8-223
説明 8-222
LOWER 関数 5-39
LTRIM 関数 5-40
M
MAX、MIN キーワード、範
囲 8-119, 8-156
MAXROWS PER SEGMENT 値
CREATE TABLE コマンド 8-139
ALTER TABLE コマンド 8-76
MAXSEGMENTS 値
ALTER TABLE コマンド 8-76
CREATE TABLE コマンド 8-139
MAXSIZE パラメータ
ALTER SEGMENT コマンド 8-52
Z
記号
数字
A
B C
あ行
か行
さ行
D
た行
E
F
な行
CREATE SEGMENT コマン
ド 8-135
MAXSPILLSIZE 値、SET INDEX/
QUERY TEMPSPACE コマン
ド 9-32
MAX 関数 4-9
OLAP 6-24
MIGRATE TO 句、ALTER
SEGMENT コマンド 8-51
MIN、MAX キーワード、範
囲 8-119, 8-156
MIN 関数 4-10
OLAP 6-24
MOVINGAVG 関数 6-52
MOVINGSUM 関数 6-55
N
NO ACTION キーワード
ALTER TABLE コマンド 8-83,
8-87, 8-91
CREATE TABLE コマンド 8-148
NO WAIT キーワード
LOCK コマンド 8-221
SET LOCK コマンド 9-34
NOT NULL キーワード
ALTER TABLE コマンド 8-79,
8-82
CREATE TABLE コマンド 8-142
NTILE 関数 6-58
OLAP 6-16
NULL
SET ORDER BY コマンド 9-38
SUPPRESS BY 句による値の除
外 7-66
値の欠落 2-25
外部結合で表示される値 7-9
検索条件の評価 3-18
算術演算子 3-9
テーブル列の変更 8-82
配置 9-38
文字列 2-9
NULLIF 関数 5-13
NULLS FIRST、OLAP 結果 6-37
G
H
は行
I
J
ま行
K
L
や行
M
N O
ら行
P
Q
R
S
T
U
V W
X
Y
Z
わ行
O
OFFLINE モード、ALTER
SEGMENT コマンド 8-40
OLAP 関数 6-4 ∼ 6-46
AVG 6-24
COUNT 6-24
DENSE_RANK 6-16
MAX 6-24
MIN 6-24
NTILE 6-16
ORDER BY 句 6-7
OVER 句 6-7
RANK 6-16
RATIO_TO_REPORT 6-44
ROW_NUMBER 6-22
SUM 6-24
WHEN 句 6-19
<window_frame> 句 6-25
<window_order> 句 6-17
<window_partition> 句 6-17
一般的な使用方法 6-15
ウィンドウ パーティション 6-7
ウィンドウ フレーム 6-10
ウィンドウ フレームの
例 6-30 ∼ 6-37
式 6-15
集約関数 6-24
集約の例 6-40
順位付けの例 6-18
リード機能とラグ機能 6-36
ON DELETE 句
ALTER TABLE コマンド 8-83,
8-87, 8-91
CREATE TABLE コマンド 8-148
ON ERROR ABORT/CONTINUE 句、
CREATE INDEX コマンド 8-108
ONLINE モード、ALTER
SEGMENT コマンド 8-41
ON サブ句、FROM 句中 7-24
OPTICAL_AVAILABILITY パラ
メータ、構文 9-36
OPTICAL 指定、ALTER SEGMENT
コマンド 8-49
Oracle 式の構文、外部結合 7-37
ORDER BY 句
BREAK BY サブ句 7-63
OLAP 6-7, 6-13, 6-17
RESET BY サブ句 7-59
UNION、EXCEPT、INTERSECT
式の制限 7-57
OR 接続詞 3-17
OVERRIDE REFCHECK 句
ALTER SEGMENT コマンド 8-40,
8-42
CREATE TABLE コマンド 8-148
DELETE コマンド 8-172
OVER 句、OLAP 関数 6-7
P
PARALLEL_SET_OPERATION パラ
メータ 9-39
POSITION 関数 5-42
POSITIONB 関数 5-44
PROCESS 句、ALTER SEGMENT
コマンド 8-62
PROCESS 句、ALTER SYSTEM コ
マンド 8-64
PSU、「物理格納ユニット」を参照
PSU シーケンス ID 8-49
PUBLIC
アクセス 8-212
オブジェクト特権 8-213
Q
QUIESCE 句、ALTER SYSTEM コ
マンド 8-59
R
RANGE 句、ALTER SEGMENT コ
マンド 8-45
RANGE LIKE SEGMENT 句
ALTER SEGMENT コマンド 8-28
RANGE LIKE SEGMENT 句、
ALTER SEGMENT
ATTACH 8-22
RANK 関数
NTILE と比較 6-58
OLAP 6-16
RISQL 6-62
上位 10 行 6-62
RATIOTOREPORT 関数
OLAP 6-44
索引 5
記号
数字
A
B C
あ行
か行
さ行
D
た行
E
な行
RISQL 6-66
rbwadmd デーモン 9-51
REAL 関数 5-28
RELEASE STORAGE 句、ALTER
SEGMENT コマンド 8-54
RENAME 句、ALTER SEGMENT コ
マンド 8-49
RENAME AS 句、ALTER TABLE コ
マンド 8-83
replacement 値、DECODE 関数 5-9
RESET 句、ALTER TABLE コマン
ド 8-75
RESET BY サブ句
WHEN 句 7-62
RESET STATISTICS 句、ALTER
SEGMENT コマンド 8-59
RESOURCE システム ロール
タスク権限のリスト 8-202
取消 8-224
付与 8-202
RESTRICT キーワード、ALTER
TABLE コマンド 8-81
RESUME 句
ALTER SYSTEM コマンド 8-59
ALTER TABLE コマンド 8-75
REVOKE ( 権限とロール ) コマンド
構文一覧 A-8
構文説明 8-224
使用方法 8-225
例 8-225
REVOKE ( 特権 ) コマンド
構文一覧 A-8
構文説明 8-228
使用方法 8-228
例 8-229
REVOKE CONNECT コマンド
構文一覧 A-8
構文説明 8-226
RISQL 表示関数
入れ子 3-6
スカラ関数内での入れ子 5-26
CUME 6-48
MOVINGAVG 6-52
MOVINGSUM 6-55
NTILE 6-58
RANK 6-62
RATIOTOREPORT 6-66
TERTILE 6-58, 6-68
WHEN 句 7-62
6 SQL Reference Guide
F
G
H
は行
I
J
ま行
K
L
や行
M
N O
ら行
P
SEGMENT BY HASH 句、CREATE
TABLE コマンド 8-153
SEGMENT BY VALUES OF 句
CREATE INDEX コマンド 8-119
CREATE TABLE コマンド 8-154
SEGMENT BY 句、ALTER
SEGMENT コマンド 8-44
SEGMENT LIKE DATA 句
CREATE INDEX コマンド 8-115
CREATE TABLE コマンド 8-154
SEGMENT LIKE REFERENCED
TABLE 句 8-116
SEGMENT LOCAL 句、CREATE
INDEX コマンド 8-116
SELECT ( 特権 ) 8-212
SELECT 文
構文一覧 A-29
BREAK BY サブ句 7-59, 7-63
EXCEPT 演算子 7-45
FROM 句 7-22
GROUP BY 句 7-39, 7-55
HAVING 句 7-41
INTERSECT 演算子 7-45
SUPPRESS BY 句 7-66
UNION 演算子 7-45 ∼ 7-53
WHEN 句 7-43
WHERE 句 7-36
検索項目リスト 7-17
構文説明 7-54, 8-229
サブクエリ 7-69
処理シーケンス 7-68
R
S
T
U
V W
X
Y
わ行
式 3-5, 6-47
リザルト セットの並び順 6-50
ROW_NUMBER 関数 6-22
ROWS_PER_FETCH_TASK パラ
メータ 9-55
ROWS_PER_JOIN_TASK パラメー
タ 9-55
ROWS_PER_SCAN_TASK パラメー
タ 9-55
ROWS_PER_TARGETJOIN_TASK
パラメータ 9-56
ROWS_PER_TASK パラメー
タ 9-23, 9-54
RTRIM 関数 5-45
S
Q
テーブル結合 7-23
SERIAL データ型 2-21
値の生成 2-22
値の挿入 8-216
SET ADVISOR LOGGING コマン
ド 9-5
SET ADVISOR MAXIMUM
CANDIDATE VIEWS コマン
ド 9-6
SET ADVISOR SAMPLE コマン
ド 9-7
SET ARITHIGNORE、
ARITHABORT コマンド 9-8
構文説明 9-8
SET CHECK REPORT FILE
PERMISSIONS コマンド 9-9
SET CHECK_TABLE_INDEX_
DIRECTORY コマンド 9-10
SET COUNT RESULT コマン
ド 9-10
SET CROSS JOIN コマンド 9-11
SET DATEFORMAT コマンド C-2
SET DEFAULT 句、ALTER TABLE
コマンド 8-84
SET DEFAULT DATA SEGMENT コ
マンド 9-13
SET DEFAULT INDEX SEGMENT
コマンド 9-15
SET DEFAULT PSU EXTENDSIZE
コマンド 9-16
SET DEFAULT SEGMENT SIZE コ
マンド 9-18
SET EXPORT_DEFAULT_PATH コ
マンド 9-19
SET EXPORT_DELIMITER コマン
ド 9-20
SET EXPORT_MAX_FILE_SIZE コ
マンド 9-21
SET FIRST DAYOFWEEK コマン
ド 9-22
SET FORCE_AGGREGATION_
TASKS コマンド 9-23
SET FORCE_FETCH_TASKS コマン
ド 9-23
SET FORCE_HASHJOIN_ TASKS コ
マンド 9-23
SET FORCE_JOIN_TASKS コマン
ド 9-23
Z
記号
数字
A
B C
あ行
か行
さ行
D
た行
E
F
な行
SET FORCE_SCAN_TASKS コマン
ド 9-23
SET FORCE_TARGETJOIN_TASKS
コマンド 9-23
SET IDLE TIMEOUT コマンド 9-26
SET IGNORE OPTICAL INDEXES
コマンド 9-27, 9-28
SET INDEX TEMPSPACE コマン
ド 9-29
SET INFO MESSAGE LIMIT コマン
ド 9-33
SET LOCAL TARGET PREDICATES
コマンド 9-65
SET LOCK コマンド 9-34
SET OLAP APPROXIMATE
NUMERIC コマンド 9-35
SET OPTICAL AVAILABILITY コマ
ンド 9-36
SET ORDER BY コマンド
NULL 評価 7-56
構文説明 9-38
SET PARALLEL SET_OPERATION
コマンド 9-39
SET PARALLEL_HASHJOIN コマン
ド 9-40
SET PARTIAL AVAILABILITY コマ
ンド 9-41
SET PARTITIONED PARALLEL
AGGREGATION コマンド 9-43
SET PERFORMANCE MONITOR コ
マンド 9-44
SET PRECOMPUTED VIEW
MAINTENANCE ON ERROR コ
マンド 9-47
SET PRECOMPUTED VIEW
MAINTENANCE コマンド 9-46
SET PRECOMPUTED VIEW QUERY
REWRITE コマンド 9-48
SET PRIORITY 句、ALTER
SYSTEM コマンド 8-64
SET QUERY MEMORY LIMIT コマ
ンド 9-49
SET QUERY TEMPSPACE コマン
ド 9-29
SET QUERYPROCS コマンド 9-50
SET REPORT_INTERVAL コマン
ド 9-51
SET RESULT BUFFER FULL
ACTION コマンド 9-52
G
H
は行
I
J
ま行
K
L
や行
M
N O
ら行
P
Q
R
S
T
U
V W
X
Y
Z
わ行
SET RESULT BUFFER コマン
ド 9-52
SET ROWCOUNT コマンド 9-53
SET ROWS_PER_FETCH_TASK コ
マンド 9-56
SET ROWS_PER_JOIN_TASK コマ
ンド 9-56
SET ROWS_PER_SCAN_TASK コマ
ンド 9-55
SET ROWS_PER_TARGETJOIN_
TASK コマンド 9-56
SET SAMPLE MARGIN コマン
ド 9-57
SET SAMPLE SEED コマンド 9-59
SET SEGMENTS コマンド 9-61
SET SERIAL START 指定、ALTER
COLUMN コマンド 8-83
SET SERIAL STEP 指定、ALTER
COLUMN コマンド 8-84
SET STATS コマンド
構文説明 9-62
例 9-63
SET TARGETJOIN LOCAL
PREDICATES コマンド 9-64
SET TEMPORARY SEGMENT
STORAGE PATH コマンド 9-67
SET TRANSACTION ISOLATION
LEVEL コマンド 9-68
SET UNIFORM PROBABILITY FOR
ADVISOR コマンド 9-70
SET USE INVALID PRECOMPUTED
VIEWS コマンド 9-70
SET VERSIONING コマンド 9-72
SET 句、UPDATE コマンド 8-231
SIGN 関数 5-29
SMALLINT データ型 2-22
SOME 数量述部 3-11
SQL OLAP 関数、「OLAP 関数」を
参照
SQL サーバの日付フォーマッ
ト C-1
SQL コマンド
ALTER DATABASE 8-6
ALTER INDEX 8-14
ALTER MACRO 8-17
ALTER ROLE 8-19
ALTER SEGMENT 8-20
ALTER SYNONYM 8-55
ALTER SYSTEM 8-57
ALTER TABLE 8-72, 8-142
ALTER USER 8-93
ALTER VIEW 8-94
CHECK INDEX 8-96
CHECK TABLE 8-99
CREATE HIERARCHY 8-102
CREATE INDEX 8-105
CREATE MACRO 8-127
CREATE ROLE 8-131
CREATE SEGMENT 8-133
CREATE SYNONYM 8-136
CREATE TABLE 8-137, 8-142
CREATE TEMPORARY
TABLE 8-160
CREATE VIEW 8-163
DELETE 8-171
DROP HIERARCHY 8-176
DROP INDEX 8-177
DROP MACRO 8-180
DROP ROLE 8-181
DROP SEGMENT 8-182
DROP SYNONYM 8-184
DROP TABLE 8-185
DROP VIEW 8-187
EXPAND 8-188
EXPLAIN 8-189
EXPORT 8-190
GRANT ( 権限とロール ) 8-201
GRANT ( 特権 ) 8-211
GRANT CONNECT 8-207
INSERT 8-214
LOCK ( テーブルのロック ) 8-221
REVOKE ( 権限とロール ) 8-224
REVOKE ( 特権 ) 8-227
REVOKE CONNECT 8-226
SELECT 7-54, 8-229
UNLOCK ( テーブルのロック解除
) 8-229
UNLOCK DATABASE 8-230
UPDATE 8-231
START、STOP ADVISOR
LOGGING 句、ALTER SYSTEM
コマンド 8-59
START、STOP PERFORMANCE
MONITOR 句、ALTER SYSTEM
コマンド 8-68
START ACCOUNTING 句、ALTER
SYSTEM コマンド 8-67
索引 7
記号
数字
A
B C
あ行
か行
さ行
D
E
た行
な行
START LOGGING 句、ALTER
SYSTEM コマンド 8-65
STAR インデックス
SEGMENT LIKE DATA 8-117
作成例 8-113
セグメント化 8-118
セグメントのアタッチ 8-22
セグメントの変更 8-24
セグメント範囲指定 8-120
STOP ACCOUNTING 句、ALTER
SYSTEM コマンド 8-67
STOP LOGGING 句、ALTER
SYSTEM コマンド 8-65
STRING 関数 5-47
SUBSTR 関数 5-50, 5-52, 5-53
SUMMING 句、BREAK BY 7-63
SUM 関数 4-11
OLAP 6-24
SUPPRESS BY 句 7-66
SWITCH ACCOUNTING FILE 句、
ALTER SYSTEM コマンド 8-67
SWITCH ADVISOR LOG FILE 句、
ALTER SYSTEM コマンド 8-60
SWITCH LOGGING 句、ALTER
SYSTEM コマンド 8-65
Sybase 式の構文、外部結合 7-37
T
TARGET インデックス
CREATE INDEX コマンド 8-107
UNLOAD 操作 8-107
作成 8-107
セグメント範囲指定 8-118
デフォルト ドメイン 8-125
ドメイン、定義 8-107
ドメイン サイズ 8-125
変更 8-17
target 値、DECODE 関数 5-9
TEMPSPACE パラメータのリセッ
ト 9-32
TERMINATE LOGGING DAEMON
句、ALTER SYSTEM コマン
ド 8-66
TERTILE 関数 6-58, 6-68
THRESHOLD 値
構文 9-31
TIMESTAMP 関数 5-69
8 SQL Reference Guide
F
G
H
は行
I
J
ま行
K
L
や行
M
N O
ら行
P
Q
R
S
T
U
V W
X
Y
わ行
TIMESTAMP データ型 2-19
TIME 関数 5-68
TIME データ型 2-19
TINYINT データ型 2-22
TO_CHAR 関数 5-70
TRIM 関数 5-54
U
UNION、INTERSECT、EXCEPT
式 7-45 ∼ 7-53, 7-57
UNIQUE キーワード 8-142
ALTER TABLE コマンド 8-79
UNLOAD 操作、TARGET インデッ
クス 8-107
UNLOCK ( テーブルのロック解除 )
コマンド
構文一覧 A-29
構文説明 8-230
UNLOCK DATABASE コマンド
構文一覧 A-29
構文説明 8-231
UPDATE ( 特権 ) 8-212
UPDATE コマンド 8-231
値の代入 2-26
構文一覧 A-29
構文説明 8-231
使用方法 8-234
例 8-235
UPPER 関数 5-56
USER 関数 5-73
USING サブ句、FROM 句中 7-24
V
VALUES 句、INSERT コマン
ド 8-215
VARCHAR、「文字データ型」を参
照
VERIFY 句、ALTER SEGMENT コ
マンド 8-43
W
WAIT キーワード、SET LOCK コマ
ンド 9-34
WHEN 句
OLAP の例 6-19
RISQL 表示関数 7-62
説明 7-43
WHERE 句 7-36
条件 3-10
内部結合 7-37
<window_order> 句、OLAP 6-17
WITH FILLFACTOR 句、CREATE
INDEX コマンド 8-124
X
XML フォーマット、エクスポー
ト 8-195
あ
アスタリスク、検索項目リス
ト 7-18
値の欠落 3-9
NULL 2-25
評価 2-25
文字列 2-9
値の範囲
ALTER SEGMENT 8-23, 8-28, 8-45
CREATE INDEX 8-119, 8-121
CREATE TABLE コマンド 8-155
移動 8-46
セグメント化の基準列 8-45
値ベースのウィンドウ フレー
ム 6-11
い
一重引用符、文字列定数 2-9
移動関数、OLAP 6-40
入れ子にされた集合 4-4
入れ子になった式 3-6
インデックス
B-TREE 8-107
SEGMENT LOCAL 8-116
作成例 8-117
システム生成インデックスの削
除 8-179
SEGMENT LIKE DATA 8-115
SEGMENT LOCAL 8-118
STAR 8-179
Z
記号
数字
A
B C
あ行
か行
さ行
D
た行
E
な行
TARGET
SEGMENT LOCAL 8-116
作成 8-107
デフォルト ドメイン 8-125
キー列の順序 8-179
コメント 8-16
削除 8-177
作成 8-106
作成、名前付きセグメン
ト 8-114 ∼ 8-123
システム生成の名前 8-15
セグメントのアタッチ 8-22
タイプ 1-7
チェック 8-96, 9-9
ドメイン サイズ 8-125
名前 8-15, 8-111
光セグメントでの選択 9-27
フィル ファクタ 8-14, 8-124
部分的に利用可能 9-28
変更 8-14
命名 2-3
ユーザ作成 8-111
う
ウィンドウ パーティション 6-7,
6-17
ウィンドウ フレーム
OLAP 6-10
<window_frame> 句 6-25
値ベース 6-33
行ベース 6-30
リード機能とラグ機能 6-36
埋め込みマクロ 8-130
え
エスケープ文字
LIKE 述部 3-16
マクロ名 8-130
エラー、ゼロ除算 9-8
エリアス
定義 2-6
列 7-19
演算子
NULL 値 3-9
算術演算子 3-7
エンティティの整合性 1-8
F
G
H
は行
I
J
ま行
K
L
や行
M
N O
ら行
P
大文字と小文字 2-5, 2-9
大文字と小文字の区別
名称と識別子 2-5
文字列定数 2-9
オブジェクト、データベース 2-3
オブジェクト特権
取消 8-227
付与 8-211
主なテーブル、「参照元テーブル」
を参照
オンライン マニュアル 13
か
階層構造
削除 8-176
作成 8-102
外部結合
FROM 句 7-11
WHERE 句 7-37
定義 7-8
格納領域の指定、セグメン
ト 8-134
下線記号のワイルドカード 3-16
かっこ、優先順位 3-7
間隔、日付時間 2-19
関係スキャン 9-25
関数、SQL
OLAP 6-4 ∼ 6-46
RISQL 表示関数 6-47 ∼ 6-69
集約関数 4-4 ∼ 4-12
スカラ 5-3 ∼ 5-73
関数従属性、
「階層構造」を参照
完全インデックス チェック、
ALTER SEGMENT コマンドで
の省略 8-35, 8-42
キー
フォーリン キー 1-7
フォーリン キー参照 8-146
プライマリ キー 1-7, 8-145
キーワード
構文ダイアグラム 9
予約済み B-1
R
S
T
U
V W
X
Y
Z
わ行
お
き
Q
行
SET ROWCOUNT での表示制
限 9-53
テーブルから検索指定 7-36
行 ID、セグメントの変更 8-24
行サブクエリ 7-69
行ベースのウィンドウ フレー
ム 6-10
く
クエリ
SET ROWCOUNT での実行停
止 9-53
記述 7-3 ∼ 7-75
並列プロセス 9-24
クエリ式 7-3 ∼ 7-75
UNION、INTERSECT、EXCEPT
式 7-6, 7-45
概要 7-4
クエリ指定 7-5, 7-16
構文 7-5
サブクエリ 7-69
事前計算 8-164
相関サブクエリ 7-72
単純なテーブル 7-6
テーブル結合 7-5, 7-7
ビュー 8-164
明示的なテーブル 7-6
例 7-26
クエリ指定 7-16
クエリ処理、操作順序 7-68
クエリの記述 7-3 ∼ 7-75
クエリ プロセス、クエリあたりの
数 9-50
区切り識別子 2-4
マクロ名 8-128
グループ関数、「集約関数」を参照
クロス結合
SET CROSS JOIN コマンド 9-11
構文 7-12
使用上の注意 7-24
け
結合クエリ式 7-4
権限と特権
索引 9
記号
数字
A
B C
あ行
か行
さ行
D
た行
E
な行
SQL の実行に必要な権限と特
権 1-9
検索条件
FROM 句 7-11
HAVING 句 7-41
WHEN 句 7-43
WHERE 句 7-36
定義 3-17
限定結合 7-24
使用上の注意 7-24
説明 7-7
こ
降順 6-62, 7-56
値ベースのウィンドウ フレー
ム 6-13
構文ダイアグラム
キーワード 9
表記規則 7
変数 9
候補ビュー 9-6
小文字と大文字
変換 2-5
リテラル 2-9
さ
作業用メモリの制限 9-49
削除トリガ動作 8-83, 8-87, 8-91,
8-148
サブクエリ
FROM 句 7-15, 7-71
検索項目リスト 7-19
スカラ サブクエリとテーブル サ
ブクエリ 7-69
相関サブクエリと GROUP BY サ
ブクエリ 7-74
派生テーブル 7-23
部分 SELECT 文 7-69
例 7-26
列名の解決 7-73
算術演算子、優先順位 3-7
参照
テーブル 7-22
フォーリン キー 8-147
列エリアス 7-19
参照先テーブル 1-5
10 SQL Reference Guide
F
G
H
は行
I
J
ま行
K
L
や行
M
N O
ら行
参照先テーブル、インデックスを
同様にセグメント化 8-116
参照整合性 8-148, 8-172
ALTER SEGMENT でのチェック
の省略 8-40, 8-42
チェックの延期 8-87
参照整合性サイクル
ALTER TABLE ADD
CONSTRAINT コマンド 8-88
無効 8-147
参照の整合性
定義 1-8
サンプリング 7-28
SET ADVISOR SAMPLE 9-7
行サンプル 7-30
シード 7-31
ブロック サンプル 7-31
マージン 7-32
サンプル データベース 1-14
サンプル データベース、インス
トール スクリプト 4
し
シード、サンプリング 7-31
時間リテラル
ANSI SQL-92 標準 2-10
非標準 C-7
式
OLAP 関数 6-15
RISQL 表示関数 6-47
入れ子 3-6
クエリ 7-3 ∼ 7-75
結合の検索条件 7-11
算術式 3-7
多項式 3-5
単項式 3-4
評価 3-7
識別子
区切り識別子 2-4, 8-128
標準 2-4
システム カタログ 1-9
システム テーブル、結合 7-23,
7-27
システム ロール
タスク権限のリスト 8-202
取消 8-224
付与 8-201, 8-208
P
Q
R
S
T
U
V W
X
Y
わ行
事前計算クエリ式 8-164
事前計算ビュー 8-170, 9-48
SET コマンド 9-70
作成 8-163
説明 8-163
自然結合 7-10, 7-24
シノニム 8-90
コメントの割り当て 8-55
削除 8-184
作成 8-136
フォーリン キー参照 8-90
命名 2-3, 8-137
集合関数
集約関数 4-4
修飾列名 2-7, 7-24
ORDER BY 句 7-57
重複行 7-18
集約関数 8-166
ALL キーワード 4-5
AVG 4-5
COUNT 4-7
COUNT(*) 4-7
DISTINCT キーワード 4-5
MAX 4-9
MIN 4-10
OLAP 6-24
OLAP 集約とは異なる関数 6-24
SUM 4-11
入れ子 3-6, 4-4
検索項目リスト 7-20
事前計算ビュー定義 8-166
説明 4-3, 4-4
集約操作、並列 9-39
集約テーブル 8-167, 8-170, 8-187
集約列 8-166
述部
ALL 3-11
BETWEEN 3-12
EXISTS 3-13
IN 3-14
IS NULL 3-15
LIKE 3-16
SOME または ANY 3-11
構成 3-10
数量 3-11
比較 3-11
ローカル 9-64
上位 10 行 6-62
小計、BREAK BY 7-63
Z
記号
数字
A
B C
あ行
か行
さ行
D
た行
E
F
な行
条件
3 値論理 2-25
HAVING 句 7-41
WHEN 句 7-43
検索 3-17
相関 2-6
相関サブクエリ 7-72
定義 3-10
条件付きスカラ関数
CASE 5-4
COALESCE 5-8
DECODE 5-9
IFNULL 5-12
NULLIF 5-13
照合シーケンス 7-57
昇順 7-56
値ベースのウィンドウ フレー
ム 6-13
処理、SELECT 文 7-68
シンプル スター スキーマ 8-113
す
数値スカラ関数
ABS 5-16
CEIL 5-17
DEC 5-19, 5-21
FLOAT 5-22
FLOOR 5-23
INT 5-25, 5-27, 5-30
REAL 5-28
SIGN 5-29
数値定数 2-9
数量述部 3-10
スカラ関数 5-3
ABS 5-16
CASE 5-4
CEIL 5-17
COALESCE 5-8
CONCAT 5-35, 5-36, 5-38
CURRENT_DATE 5-60
CURRENT_TIME 5-60
CURRENT_TIMESTAMP 5-60
CURRENT_USER 5-73
DATE 5-61
DATEADD 5-62
DATEDIFF 5-63
DATENAME 5-64
G
H
は行
I
J
ま行
K
L
や行
M
N O
ら行
P
整数
INT 2-20
R
S
T
U
V W
X
Y
Z
わ行
DEC 5-19, 5-21
DECODE 5-9
EXTRACT 5-66
FLOAT 5-22
FLOOR 5-23
IFNULL 5-12
INT 5-25, 5-27, 5-30
LOWER 5-39
LTRIM 5-40
NULLIF 5-13
POSITION 5-42
POSITIONB 5-44
REAL 5-28
RTRIM 5-45
SIGN 5-29
STRING 5-47
SUBSTR 5-50, 5-52, 5-53
TIME 5-68
TIMESTAMP 5-69
TO_CHAR 5-70
TRIM 5-54
UPPER 5-56
入れ子 3-6, 5-3
テリトリによる指定の結果 5-59
分析関数内での入れ子 5-26
スカラ関数の入れ子 5-3
スカラ関数の出力のローカライ
ズ 5-58
スカラ サブクエリ 7-69
スキーマ
スター スキーマ 1-10
設計の柔軟性 1-10
スキーマ参照のループ、無効 8-88,
8-147
スケール
10 進数定数 2-13
10 進数データ型と数値データ
型 2-23
数値データ型 2-9
整数定数 2-12
倍精度 2-24
スター スキーマ 1-10
スピル ファイル 9-29
せ
Q
SMALLINT 2-22
TINYINT 2-22
定数 2-12
精度
10 進数値データ型 2-23
10 進数定数 2-13
数値データ型 2-9
整数定数 2-12
倍精度 2-24
制約、テーブルの変更 8-90
制約名
テーブルから削除 8-89
テーブルへの追加 8-86
フォーリン キー 8-146
フォーリン キー参照 8-111
フォーリン キー制約の変更 8-90
プライマリ キー 8-145
セキュリティ 1-9
セグメント
SET SEGMENTS コマンド 9-61
値の範囲の変更 8-44, 8-45
オフライン モード 8-40
オンライン モード 8-41
クリア 8-42
検証 8-43
コメント 8-51
最大数の変更 8-76
削除 8-33, 8-182, 9-61
作成 8-133
修正 8-30 ∼ 8-53
正常化 8-43
セグメント化の基準列 8-154
セグメント範囲指定 8-118
セグメント範囲の指定 8-154
全移動 8-51
テーブルごとの最大数 8-139
デフォルト ディレクトリの設
定 9-15, 9-13
名前の変更 8-49
破損 8-186
ハッシュ 8-153
範囲 8-23, 8-28, 8-45, 8-119, 8-121
範囲の指定 8-155
物理格納ユニット 8-49, 8-134
部分的に利用可能なインデック
ス 9-28
部分的に利用可能なテーブ
ル 9-41
変更 8-20
索引
11
記号
数字
A
B C
あ行
か行
さ行
D
た行
E
な行
保持 9-61
命名 2-3, 8-115, 8-134
ローカル インデックス 8-116
セグメント ID、セグメントの変
更 8-24
セグメント化の基準列
ALTER SEGMENT コマンド 8-44
CREATE TABLE コマンド 8-154
セグメント定義、CREATE INDEX
コマンド 8-114
セグメントの最大数、テーブ
ル 8-139
セグメント範囲指定
B-TREE インデックスと TARGET
インデックス 8-118
STAR インデックス 8-120
セグメント範囲の変更、STAR イン
デックス 8-24
接続詞、論理 3-17
セルフ結合
説明 7-23
相関名 7-14
ゼロ除算 9-8
そ
相関サブクエリ 7-72
相関条件 2-6
相関名 7-73
セルフ結合 7-14
テーブル 2-6
相互参照、相関条件 7-72
ソフトウェア要件 4
た
代替テーブル名 7-14
代入
数値 2-27
日付時間 2-26
文字 2-26
タイムスタンプ リテラル
非標準 C-8
ANSI SQL-92 標準 2-10
多項式 3-5
タスク権限
SQL の実行に必要なタスク権
限 1-9
12 SQL Reference Guide
F
G
H
は行
I
J
ま行
K
L
や行
M
N O
ら行
P
Q
R
S
T
U
V W
X
Y
わ行
定義 8-203
取消 8-224
付与 8-201
単項演算子 3-7
単項式 3-4
単純なテーブル 7-18
ち
直積
演算の防止 9-11
クロス結合による演算 7-12
つ
通知メッセージ、表示制限 9-33
て
定数
10 進数 2-13
数値 2-9
整数 2-12
浮動小数点値 2-14
文字 2-9
ディメンジョン テーブル、「参照先
テーブル」を参照
データ型
10 進数 2-23
CHARACTER 2-16
CREATE TABLE コマンド 8-141
一覧 2-15
互換性 2-26
数値 2-23
日付時間 2-19
浮動小数点 2-24
データ キューブ、シンプル スター
スキーマを参照
データベース
Aroma 1-14
オブジェクト名 2-3
パスワードの変更 8-207
ユーザの削除 8-226
ユーザの追加 8-207
データベース オブジェクトの命
名 2-3
テーブル
結合 7-7, 7-23
コメント 8-76
削除 8-185
作成 8-137
作成、名前付きセグメン
ト 8-150 ∼ 8-153
参照先テーブル 1-5
参照元テーブル 1-5
システム 1-9
集約 8-167, 8-170, 8-187
代替テーブル名 7-14
チェック 8-99, 9-9
テンポラリ 8-160, 9-67
名前の変更 8-77
派生 7-23
変更 8-72 ∼ 8-84
命名 2-3
リレーショナル データベー
ス 1-5
テーブル結合 7-7, 7-23
FROM 句指定 7-24
WHERE 句指定 7-37
外部結合 7-8
クロス結合 7-12
結合指定 7-7
構文 7-24
セルフ結合 7-14
直積 9-11
定義 7-23
テーブル参照 7-23
内部結合 7-7
テーブル サブクエリ、定義 7-69
テーブル参照
FROM 句 7-23
構文 7-13, 7-22
派生テーブル 7-23
テーブル式、クエリ式を参照
テーブルの行のソート 7-55
テーブル結合
システム テーブル 7-27
デフォルト ドメイン TARGET イン
デックス 8-125
テリトリ、スカラ関数の結果 5-59
テンポラリ テーブル、作成 8-160
と
等価結合 7-7
Z
記号
数字
A
B C
あ行
か行
さ行
D
た行
E
F
な行
動的統計テーブル (DST) 9-51
読者
対象読者 3
特権、「オブジェクト特権」を参照
ドメイン、定義 8-107
ドメイン サイズ、TARGET イン
デックス 8-125
な
内部結合 7-7
長さ、文字列定数 2-9
は
バージョン ログ
CLEAN VERSION LOG 8-11
CREATE VERSION LOG 8-8
DROP VERSION LOG 8-9
パーセントのワイルドカード文
字 3-16
パーティション、OLAP 6-7
パーティション化した並列集
約 9-43
ハイブリッド ターゲット インデッ
クス、「TARGET インデックス、
デフォルト ドメイン」を参照
ハイブリッド ハッシュ結合、並
列 9-40
パスワード
新規ユーザの追加 8-210
シングルバイト文字に制限 2-3
変更 8-210
派生ディメンジョン、事前計算
ビュー 8-170
派生テーブル 7-15
構文 7-23
例 7-26
破損したセグメント 8-186
ハッシュ結合、並列 9-40
パフォーマンス モニタ
ON または OFF に設定 9-44
デーモンの開始と停止 8-68
統計のクリア 8-70
パラメータ、マクロ 8-128
範囲指定、「列参照の解決」を参照
G
H
は行
I
J
ま行
K
L
や行
M
N O
ら行
P
Q
R
S
T
U
V W
X
Y
Z
わ行
ひ
比較
述部 3-10, 3-11
数値 2-28
日付時間 2-27
文字 2-27
光ディスク
アクセス 9-36
インデックスの選択 9-27
セグメントの移動 8-51
非結合クエリ式 7-4
左外部結合、構文 7-11
日付時間スカラ関数
CURRENT_DATE 5-60
CURRENT_TIME 5-60
CURRENT_TIMESTAMP 5-60
DATE 5-61
DATEADD 5-62
DATEDIFF 5-63
DATENAME 5-64
EXTRACT 5-66
TIME 5-68
TIMESTAMP 5-69
TO_CHAR 5-70
日付時間定数
ANSI SQL-92 標準 2-10
日付時間データ型 2-19
DATEPART 関数 C-9
日付時間リテラル
非標準 C-1
日付フィールド
EXTRACT 5-66
定義 5-58
日付フィールドの抽出
(EXTRACT) 5-58
日付リテラル
ANSI SQL-92 標準 2-10
非標準 C-2
非等価結合、クロス結合として実
行 9-12
ビュー 1-6
コメントの割り当て 8-94
削除 8-187
作成 8-163
事前計算 8-163, 8-168, 8-170, 9-70
命名 2-3
表記規則
構文ダイアグラム 7
構文の規則 6
マニュアル 5
表示関数、「RISQL 表示関数」を参
照
表領域、「セグメント」を参照
ふ
ファイル名、シングルバイト文字
に制限 2-3
ファクト テーブル、「参照元テーブ
ル」を参照
フィル ファクタ、CREATE INDEX
コマンド 8-124
フォーリン キー 1-7
更新時の制約 8-234
制約名 8-111, 8-146
定義 8-147
物理格納ユニット
拡張サイズ 8-50, 8-135
最大サイズ 8-49, 8-135
シーケンス ID 8-49
初期サイズ 8-53, 8-135
名前 8-135
パス名 8-50
不定の値、評価 2-25
浮動小数点定数 2-14
プライベート マクロ 8-128
プライマリ キー 1-7, 8-144
REFERENCE 句、CREATE
TABLE コマンド 8-144
更新時の制約 8-234
制約名 8-145
列の指定 8-145
フル外部結合、構文 7-11
プロセス
クエリあたりのプロセス数 9-50
並列クエリへの割り当て 9-24
分析関数 6-3 ∼ 6-69
へ
平均、移動 6-52
並列クエリ、タスクの割り当
て 9-24
並列集約 9-43
並列集約操作 9-39
並列ハッシュ結合 9-40
索引
13
記号
数字
A
B C
あ行
か行
さ行
D
た行
変数、構文ダイアグラム 9
ま
マージン、サンプリング 7-32
マクロ
PUBLIC 8-128
埋め込みマクロ 8-130
カテゴリ 8-129
コメント 8-17, 8-130
削除 8-128, 8-180
作成 8-127
定義 1-11
パラメータ 8-128
プライべート 8-128
命名 2-3
マニュアル
IBM Red Brick Warehouse のリス
ト 11
オンライン 13
み
右外部結合、構文 7-11
ミラー テーブル、「参照先テーブ
ル」を参照
め
E
F
な行
G
H
は行
I
J
ま行
K
L
や行
M
N O
ら行
POSITION 5-42
POSITIONB 5-44
RTRIM 5-45
STRING 5-47
SUBSTR 5-50, 5-52, 5-53
TRIM 5-54
UPPER 5-56
文字列定数
一重引用符 2-9
大文字と小文字の区別 2-9
長さ 2-9
ゆ
ユーザ
コメントの割り当て 8-93
セッション優先順位の割り当
て 8-93
データベースから削除 8-226
データベースへの追加 8-207
パスワードの変更 8-207
ユーザ作成ロール
削除 8-181
作成 8-131
取消 8-224
付与 8-201
ユーザ名、命名 2-3
優先順位 3-7
算術演算子 3-7
論理接続詞 3-18
よ
文字データ
ESCAPE 3-16
空の文字列 2-9
シングルバイトとマルチバイ
ト 2-3
長さ 2-16, 8-142
日付時間の変換 5-64
ワイルドカード 3-16
文字データ型 2-16, 2-26
文字列スカラ関数
CONCAT 5-35, 5-36, 5-38
LOWER 5-39
LTRIM 5-40
14 SQL Reference Guide
Q
R
S
T
U
V W
X
Y
わ行
文字の長さ 2-9
リレーショナル データベースの
テーブル 1-5
る
累積合計
OLAP の例 6-41
RISQL 6-48
れ
明示的なテーブル 7-18
メモリ調整パラメータ 9-49
も
P
予想されるドメイン サイズ 8-107
予約語 B-1
ら
ラグ機能、OLAP 6-36
り
リテラル
10 進数 2-13
整数 2-12
日付時間 2-9, 2-10
文字 2-9
列
REFCHECK モードの変更 8-83,
8-87, 8-91
SET 値 8-231
エリアス 2-6, 7-19
既存列の変更 8-82
コメント 8-85
削除 8-74, 8-81
修飾名 2-7, 7-24
追加 8-74, 8-78
定義 8-138
テーブルから検索指定 7-17
名前 8-138
名前の変更 8-83
変更 8-82
列関数 4-4
列参照の解決 7-73
列指定による結合 7-12, 7-24
ろ
ローカル インデックス
RANGE LIKE SEGMENT 句 8-28
作成 8-116
セグメントのアタッチ 8-22
ローカル述部 9-64
ロール
コメントの割り当て 8-19
削除 8-181
作成 8-131
取消 8-224
付与 8-201, 8-208
命名 2-3
ロール ベースのセキュリティ 1-9
論理、3 値 2-25
Z
記号
数字
A
B C
あ行
か行
さ行
D
た行
E
F
な行
G
H
は行
I
J
ま行
K
L
や行
M
N O
ら行
P
Q
R
S
T
U
V W
X
Y
Z
わ行
論理接続詞 3-17
わ
ワイルドカード文字 3-16
索引
15
Fly UP