...

SQL リファレンスガイド バージョン6.3 (日本語版) (PDF:2.3MB)

by user

on
Category: Documents
88

views

Report

Comments

Transcript

SQL リファレンスガイド バージョン6.3 (日本語版) (PDF:2.3MB)
IBM Red Brick Warehouse
򔻐򗗠򙳰
SQL リファレンス ガイド
バージョン 6.3
SC88-9942-00
(英文原典:SC18-7396-00)
IBM Red Brick Warehouse
򔻐򗗠򙳰
SQL リファレンス ガイド
バージョン 6.3
SC88-9942-00
(英文原典:SC18-7396-00)
注
本書および本書で紹介する製品をご使用になる前に、557 ページの『特記事項』に記載されている情報をお読み
ください。
本書には、IBM の専有情報が含まれています。その情報は、使用許諾条件に基づき提供され、著作権により保護されて
います。本書に記載される情報には、いかなる製品の保証も含まれていません。また、本書で提供されるいかなる記述
も、製品保証として解釈すべきではありません。
IBM は、お客様が提供するいかなる情報も、お客様に対してなんら義務も負うことのない、自ら適切と信ずる方法で、
使用もしくは配布することができるものとします。
本マニュアルに関するご意見やご感想は、次の URL からお送りください。今後の参考にさせていただきます。
http://www.ibm.com/jp/manuals/main/mail.html
なお、日本 IBM 発行のマニュアルはインターネット経由でもご購入いただけます。詳しくは
http://www.ibm.com/jp/manuals/
の「ご注文について」をご覧ください。
(URL は、変更になる場合があります)
お客様の環境によっては、資料中の円記号がバックスラッシュと表示されたり、バックスラッシュが円記号と表示され
たりする場合があります。
原 典:
SC18-7396-00
IBM Red Brick Warehouse
SQL Reference Guide
Version 6.3
発 行:
日本アイ・ビー・エム株式会社
担 当:
ナショナル・ランゲージ・サポート
第1刷 2004.3
この文書では、平成明朝体™W3、平成明朝体™W9、平成角ゴシック体™W3、平成角ゴシック体™W5、および平成角ゴ
シック体™W7を使用しています。この(書体*)は、
(財)日本規格協会と使用契約を締結し使用しているものです。フォ
ントとして無断複製することは禁止されています。
注* 平成明朝体™W3、平成明朝体™W9、平成角ゴシック体™W3、
平成角ゴシック体™W5、平成角ゴシック体™W7
© Copyright International Business Machines Corporation 1996, 2004. All rights reserved.
© Copyright IBM Japan 2004
目次
本書について . . . . .
本書の対象読者 . . . . .
ソフトウェアの要件 . . .
本書の表記規則. . . . .
文字の表記規則. . . .
構文ダイアグラム . . .
キーワードと区切り文字
識別子と名前 . . . .
コメント . . . . . .
プラットフォーム記号 .
関連文献 . . . . . . .
その他のマニュアル . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. xi
. xi
. xi
. xii
. xii
. xii
. xiv
. xv
. xv
. xvi
. xvi
. xviii
第 1 章 IBM Red Brick Warehouse の概要 . . . . . . . . . . . . . . . . . . . . 1
リレーショナル データベースのテーブル . . . . . . . . . . . . . . . . . . . . . 2
複数ユーザとテーブル ロック . . . . . . . . . . . . . . . . . . . . . . . . 2
テーブルのビュー . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
インデックス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
プライマリ キーとフォーリン キー . . . . . . . . . . . . . . . . . . . . . . 4
データベースの整合性 . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
許可と特権 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
システム カタログ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
IBM Red Brick Warehouse . . . . . . . . . . . . . . . . . . . . . . . . . . 6
スキーマ設計 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
意思支援決向け関数および OLAP 関数 . . . . . . . . . . . . . . . . . . . . . 7
サブクエリによる比較 . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
マクロ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
セグメント化されたストレージ . . . . . . . . . . . . . . . . . . . . . . . . 8
ローカライゼーション . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Aroma データベース . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
第 2 章 SQL 言語の要素
名称と識別子 . . . .
標準識別子 . . . .
区切り識別子 . . .
大文字と小文字 . . .
エイリアスと相関名 .
リテラル . . . . . .
文字列定数 . . . .
日時定数 . . . . .
整数定数 . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . 11
. . . . . . . . . . . . . . . . . . . . . . . . . . 11
. . . . . . . . . . . . . . . . . . . . . . . . . . 11
. . . . . . . . . . . . . . . . . . . . . . . . . . 12
. . . . . . . . . . . . . . . . . . . . . . . . . . 13
. . . . . . . . . . . . . . . . . . . . . . . . . . 14
. . . . . . . . . . . . . . . . . . . . . . . . . . 17
. . . . . . . . . . . . . . . . . . . . . . . . . . 17
. . . . . . . . . . . . . . . . . . . . . . . . . . 18
. . . . . . . . . . . . . . . . . . . . . . . . . . 19
© Copyright IBM Corp. 1996, 2004
iii
10 進定数 . . . . . . . . . . . . . . . . . . . . . . . . . . . .
浮動小数点定数 . . . . . . . . . . . . . . . . . . . . . . . . . . .
データ型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
文字 (CHARACTER) 型 . . . . . . . . . . . . . . . . . . . . . . . .
日時 (DATETIME) 型: 日付 (DATE) 型、時刻 (TIME) 型、タイムスタンプ (TIMESTAMP) 型
整数 (INTEGER) 型 . . . . . . . . . . . . . . . . . . . . . . . . .
シリアル (SERIAL) 型 . . . . . . . . . . . . . . . . . . . . . . . .
小桁整数 (SMALLINT) 型 . . . . . . . . . . . . . . . . . . . . . . .
小桁整数 (TINYINT) 型 . . . . . . . . . . . . . . . . . . . . . . . .
10 進数 (DECIMAL) 型と 10 進数 (NUMERIC) 型 . . . . . . . . . . . . . . .
小桁実数 (REAL) 型 . . . . . . . . . . . . . . . . . . . . . . . . .
実数 (DOUBLE PRECISION) 型と実数 (FLOAT) 型 . . . . . . . . . . . . . .
値の欠落と NULL 値 . . . . . . . . . . . . . . . . . . . . . . . . . .
列データの代入と比較 . . . . . . . . . . . . . . . . . . . . . . . . .
列データの代入 . . . . . . . . . . . . . . . . . . . . . . . . . . .
比較 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
20
21
22
23
25
27
27
29
29
29
29
30
30
31
31
32
第 3 章 式と条件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
単項式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
多項式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
多項式の評価 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
条件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
比較述部 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
BETWEEN 述部 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
EXISTS 述部 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
IN 述部 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
IS NULL 述部 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
LIKE 述部 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
検索条件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
第 4 章 集約関数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
一般的な使用方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
AVG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
COUNT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
MAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
MIN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
SUM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
第 5 章 スカラ関数
条件付きスカラ関数
CASE . . . .
COALESCE . .
DECODE . . .
IFNULL . . .
NULLIF . . .
iv
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
IBM Red Brick Warehouse: SQL リファレンス ガイド
数値スカラ関数 . . . . . . . . . . . . . . . . . .
ABS . . . . . . . . . . . . . . . . . . . .
CEIL . . . . . . . . . . . . . . . . . . . .
DEC . . . . . . . . . . . . . . . . . . . .
EXP . . . . . . . . . . . . . . . . . . . .
FLOAT . . . . . . . . . . . . . . . . . . .
FLOOR . . . . . . . . . . . . . . . . . . .
INT . . . . . . . . . . . . . . . . . . . . .
LN . . . . . . . . . . . . . . . . . . . . .
REAL . . . . . . . . . . . . . . . . . . . .
ROUND . . . . . . . . . . . . . . . . . . .
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 関数 . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 68
. 69
. 70
. 72
. 73
. 74
. 75
. 76
. 78
. 79
. 80
. 82
. 83
. 84
. 86
. 88
. 90
. 92
. 93
. 94
. 95
. 97
. 98
. 99
. 102
. 104
. 106
. 107
. 108
. 108
. 110
. 111
. 112
. 113
. 114
. 116
. 118
. 119
. 120
. 123
第 6 章 分析関数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
SQL OLAP 関数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
OLAP 関数の種類 . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
OVER 句 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
OLAP 関数の使用に関する基本規則 . . . . . . . . . . . . . . . . . . . . . 133
目次
v
順位付け関数の構文 . . . . . . . . . . . .
ROW_NUMBER と ROWNUMBER の構文 . . . .
PERCENTILE_CONT と PERCENTILE_DISC の構文 .
AVG、COUNT、MIN、MAX、SUM の構文 . . . .
RATIO_TO_REPORT および RATIOTOREPORT の構文
RISQL 表示関数 . . . . . . . . . . . . . .
CUME . . . . . . . . . . . . . . . .
MOVINGAVG . . . . . . . . . . . . . .
MOVINGSUM . . . . . . . . . . . . . .
NTILE . . . . . . . . . . . . . . . .
RANK . . . . . . . . . . . . . . . .
RATIOTOREPORT . . . . . . . . . . . .
TERTILE . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
134
140
142
145
159
161
162
165
167
169
172
175
177
第 7 章 クエリ式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
ジョイン クエリ式および非ジョイン クエリ式 . . . . . . . . . . . . . . . . . . . 179
テーブル ジョイン . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
構文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
限定ジョイン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
クロス ジョイン . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
テーブル参照 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
クエリ指定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
検索項目リスト . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
FROM 句 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
サンプリング . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
WHERE 句 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
GROUP BY 句 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
HAVING 句 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
WHEN 句 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
UNION、EXCEPT、INTERSECT 式. . . . . . . . . . . . . . . . . . . . . . . 207
SELECT 文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
ORDER BY 句 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
SUPPRESS BY 句 . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
SELECT 文の処理方法 . . . . . . . . . . . . . . . . . . . . . . . . . . 223
サブクエリ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
スカラ サブクエリとテーブル サブクエリ . . . . . . . . . . . . . . . . . . . 225
相関サブクエリ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
第 8 章 SQL 文と RISQL 拡張機能
ALTER DATABASE . . . . . .
ALTER INDEX . . . . . . .
ALTER MACRO . . . . . . .
ALTER ROLE . . . . . . . .
ALTER SEGMENT . . . . . .
ALTER SEGMENT — ATTACH 句
ALTER SEGMENT — その他の句 .
vi
. . . . . . . . . . . . . . . . . . . . . . 231
. . . . . . . . . . . . . . . . . . . . . . 232
. . . . . . . . . . . . . . . . . . . . . . 238
. . . . . . . . . . . . . . . . . . . . . . 241
. . . . . . . . . . . . . . . . . . . . . . 242
. . . . . . . . . . . . . . . . . . . . . . 243
. . . . . . . . . . . . . . . . . . . . . . 245
. . . . . . . . . . . . . . . . . . . . . . 253
IBM Red Brick Warehouse: SQL リファレンス ガイド
ALTER SYNONYM . . . . .
ALTER SYSTEM . . . . . .
ALTER TABLE . . . . . .
ALTER USER . . . . . . .
ALTER VIEW . . . . . . .
CHECK INDEX . . . . . .
CHECK TABLE . . . . . .
CREATE HIERARCHY . . . .
CREATE INDEX . . . . . .
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 . . . . . . .
EXPAND . . . . . . . .
EXPLAIN . . . . . . . .
EXPORT. . . . . . . . .
GRANT (許可とロール). . . .
GRANT CONNECT . . . . .
GRANT (特権). . . . . . .
INSERT . . . . . . . . .
LOCK (テーブルのロック). . .
LOCK DATABASE . . . . .
REVOKE (許可とロール) . . .
REVOKE CONNECT. . . . .
REVOKE (特権) . . . . . .
SELECT . . . . . . . . .
UNLOCK (テーブルのロック解除)
UNLOCK DATABASE . . . .
UPDATE. . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
272
273
284
304
306
308
311
313
316
335
340
342
345
347
369
372
379
384
385
388
389
390
391
392
394
395
396
397
407
412
416
419
424
425
427
429
430
432
433
434
435
第 9 章 SET 文 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439
SET ADVISOR LOGGING . . . . . . . . . . . . . . . . . . . . . . . . . . 440
SET ADVISOR MAXIMUM CANDIDATE VIEWS . . . . . . . . . . . . . . . . . . 441
SET ADVISOR SAMPLE SIZE . . . . . . . . . . . . . . . . . . . . . . . . 442
目次
vii
SET ALLOW SINGLE COLUMN BTREE IN TARGETJOIN. . .
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 . . . . . . . . . . . . . . . .
SET IDLE TIMEOUT . . . . . . . . . . . . . . .
SET IGNORE OPTICAL INDEXES . . . . . . . . . . .
SET IGNORE PARTIAL INDEXES . . . . . . . . . . .
SET INDEX TEMPSPACE and 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 PREPLANS_HAVE_ONLY_PKFK_JOINS . . . . . . .
SET QUERY MEMORY LIMIT . . . . . . . . . . . .
SET QUERY MMAP ON/OFF . . . . . . . . . . . .
SET QUERY MMAP 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. . . . . . . . . . . . . . . .
viii
IBM Red Brick Warehouse: SQL リファレンス ガイド
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
443
444
445
446
447
448
449
451
453
454
455
456
457
458
459
461
462
463
464
467
468
469
470
472
473
475
476
477
478
480
481
482
483
486
487
489
491
492
493
494
495
496
497
498
499
501
SET
SET
SET
SET
SET
SET
SET
SET
SET
SET
SET
SET
SEGMENTS . . . . . . . . . . .
STAR INDEX AVAILABILITY . . . .
STARJOIN THRESHOLD . . . . . .
STATS . . . . . . . . . . . .
TARGETJOIN LOCAL PREDICATES . .
TARGETJOIN THRESHOLD . . . . .
TEMPORARY SEGMENT STORAGE PATH
TRANSACTION ISOLATION LEVEL . .
UNIFORM PROBABILITY FOR ADVISOR
USE INVALID PRECOMPUTED VIEWS .
USE LATEST REVISION . . . . . .
VERSIONING . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
503
504
507
511
513
516
520
521
522
523
524
525
付録 A. 構文一覧
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 527
付録 B. 予約語 .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 545
付録 C. 日付時間フォーマット .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 549
特記事項 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 557
商標 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 560
索引 .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 561
目次
ix
x
IBM Red Brick Warehouse: SQL リファレンス ガイド
本書について
この章では、本書の概要と表記法について説明します。
このマニュアルは、IBM® Red Brick™ Warehouse SQL の実装、およびウェアハウス デ
ータベース向けの RISQL 拡張機能に関する詳細な言語リファレンスです。
本書の対象読者
本書の対象読者を次に示します。
v データベース ユーザ
v データベース管理者
v データベース サーバ管理者
v データベース アプリケーション プログラマ
v データベース設計者
v データベース デザイナー
v データベース開発者
v パフォーマンス エンジニア
読者に以下の知識や経験があることを前提としています。
v 使用しているコンピュータ、オペレーティング システム、およびオペレーティング
システムが提供するユーティリティに対する実務知識
v リレーショナル データベースの使用経験、またはデータベースの概念に関する知識
v コンピュータ プログラミングの経験
v データベース サーバ管理、オペレーティング システム管理、またはネットワーク管
理の経験
ソフトウェアの要件
データベース サーバとして IBM Red Brick Warehouse バージョン 6.3 を使用する必要
があります。
IBM Red Brick Warehouse には、コーヒーと紅茶を取り扱う架空の会社の販売データを
収めた Aroma というデータベースが添付されています。このデータベースでは、Aroma
Coffee and Tea Company が所有する店舗の毎日の販売業務を管理しています。このデー
タベースのディメンジョン モデルは、1 つのファクト テーブルと、それに付属する複
数のディメンジョン テーブルで構成されています。
© Copyright IBM Corp. 1996, 2004
xi
デモンストレーション データベースの構築方法の詳細については、「管理者ガイド」を
参照してください。データベースとそのデータ内容の詳細については、「SQL 自習ガイ
ド」を参照してください。
デモンストレーション データベースのインストール スクリプトは
redbrick_dir/sample_input ディレクトリにあります。 redbrick_dir は、使用してい
るシステムの IBM Red Brick Warehouse ディレクトリを指します。
本書の表記規則
このマニュアルで使用されている表記規則と書体の規則を覚えておけば、このマニュア
ル、およびこのマニュアル セット内の他のマニュアルが読みやすくなります。
文字の表記規則
新しい用語、画面表示、コマンド構文などの表記には以下の規則を使用します。
規則
意味
KEYWORD (キー
ワード)
プログラミング言語の文中では、要素 (キーワード) はすべて大
文字のセリフ フォントで表記されます。
イタリック
文章中において、新出用語および強調する用語はイタリックで表
記されます。
イタリック
構文およびコード例では、ユーザが指定する変数値はイタリック
で表記されます。
太字
インタフェース要素 (アイコン、メニュー項目、ボタンなど) と
コマンドは太字で表記されます。
monospace (モノス プログラム エンティティ (クラスやイベントなど)、ファイル
ペース)
名、およびパス名はモノスペースで表記されます。
>
この記号は、メニュー項目を表します。たとえば、「[ツール] >
[オプション] を選択します。」は、[ツール] メニューの [オプシ
ョン] を選択することを意味します。
ヒント: 文字の入力またはコマンドの実行が指定された場合は、入力後に Enter キーを
押してください。その他のキーを押すように指定された場合は、Enter キーを押
す必要はありません。
構文ダイアグラム
本書では、システム レベルのコマンドを除くすべてのコマンドと文の構文を説明するた
め、次の構成要素を使用したダイアグラムを記載しています。
本書では、構文の説明に以下のような構造を使用します。
xii
IBM Red Brick Warehouse: SQL リファレンス ガイド
構文ダイアグラムでは、線の流れを左から右、上から下の順に参照します。
─── 記号は、構文ダイアグラムの開始を示します。
─── 記号は構文が次の行に続くことを示します。
─── 記号は、構文が前の行から続いていることを示します。
── 記号は、構文ダイアグラムの終わりを示します。
構文の各部分は |─── 記号で始まり ───| 記号で終わります。
必須項目は水平な線 (メインパス) の上に示されます。
必須項目
オプション項目は、メインパスの下に示されます。
required_item
optional_item
オプション項目がメインパス上に示されていることがありますが、これは読みやすくす
る目的でのみこのように表記されており、実行には影響しません。
optional_item
required_item
複数の項目から選択できる場合には、これらの項目が積み重なって示されます。
いずれか 1 つの項目を選択する必要がある 場合には、1 つの項目がメインパス上に示
されます。
required_item
required_choice1
required_choice2
項目の選択を省略できる場合には、選択可能な項目がすべてがメインパスの下に示され
ます。
required_item
optional_choice1
optional_choice2
複数の項目の 1 つがデフォルトの場合、このデフォルト項目がメインパス上に示され、
その他の項目はメインパスの下に示されます。
default_choice
required_item
optional_choice
optional_choice
本書について
xiii
メインパスの上で左に戻る矢印は、項目が繰り返し指定できることを示します。この場
合、繰返し項目を指定するときには項目を 1 つ以上のブランクで区切る必要がありま
す。
required_item repeatable_item
繰返しを示す矢印にカンマが示されている場合には、繰返し項目をカンマで区切る必要
があります。
,
required_item repeatable_item
項目のグループの上に繰返しを示す矢印が示されている場合には、複数の項目を選択す
るか、または 1 つの項目を繰り返し指定できます。
キーワードは大文字で示されます (FROM など)。記述されているとおりに入力します。
変数は小文字で示されます (column-name など)。構文内でユーザが指定する名前や値を
表します。
句読記号、括弧、算術計算子、またはその他の記号が示されている場合には、これらを
構文の一部として入力します。
1 つの変数が構文を構成する大きい部分を表すことがあります。たとえば、次のダイア
グラムで、変数 parameter-block は parameter-block という構文フラグメント全体を
表します。
required_item
parameter-block
parameter-block:
parameter1
parameter2
parameter3
parameter4
キーワードと区切り文字
キーワードとは、文およびコマンド (システム レベルのコマンドを除く) で使用するた
めに予約された単語のことです。構文ダイアグラムでは、キーワードが大文字で表記さ
れます。ユーザが実際にキーワードを記述する場合は、大文字と小文字のどちらを使用
しても構いません。ただし、スペルは構文ダイアグラムに表記されるとおりでなければ
なりません。
構文ダイアグラム内の区切り文字も、ダイアグラムに示されているとおりに文とコマン
ドの中に挿入する必要があります。
xiv
IBM Red Brick Warehouse: SQL リファレンス ガイド
識別子と名前
構文ダイアグラムおよび例の中の変数は、識別子および名前のプレースホルダです。変
数は、文脈に応じて任意の名前、識別子、またはリテラルに置き換えることができま
す。変数は、追加の構文ダイアグラムで展開される複雑な構文要素を表すためにも使用
されます。変数は、構文ダイアグラム、例、テキストでは、小文字のイタリック で表記
されます。
以下に示す構文ダイアグラムは、変数を使用した簡単な SELECT 文の一般的なフォー
ムを示しています。
SELECT column_name FROM table_name
このフォームの SELECT 文を記述するときには、変数の column_name と table_name
を特定の列とテーブルに置き換えます。
コメント
コメントでは、次のテーブルに示す 3 種類の情報が示されます。これらの情報は常に太
字で表記されます。
ラベル
説明
警告:
重要な手順、注意事項、または重要な情報を表します。
重要:
現在説明されている機能または操作に関する重要な情報を表しま
す。
ヒント:
現在説明されている機能に関する詳細またはショートカットなど
の追加情報を表します。
本書について
xv
プラットフォーム記号
機能記号、製品記号、およびプラットフォーム記号は、特定のプラットフォームに関す
る情報を示します。以下に例を挙げます。
UNIX のみ
UNIX および Linux オペレーティング システムに固有の情報を表します。
UNIX のみ の終り
Windows のみ
Windows® プラットフォームに固有の情報を表します。
Windows のみ の終り
関連文献
IBM Red Brick Warehouse のマニュアル セットには、以下のマニュアルが含まれてい
ます。
マニュアル
説明
管理者ガイド
ウェアハウスのアーキテクチャやサポートされるスキ
ーマなど、データベースに関連した基本概念のマニュ
アルです。グラフィカルなデータベース管理機能を提
供する Administrator ツールについて説明します。デ
ータベースの実装や保守の手順についても説明しま
す。システム テーブルと構成ファイルの説明も含まれ
ています。
クライアント システムへの ODBC、Red Brick JDBC
Driver、RISQL エントリ ツール、および RISQL レポ
ーターのインストール手順についても説明します。C
および C++ アプリケーション用 ODBC 製品と
Java™ アプリケーション用 JDBC 製品を使用して、
IBM Red Brick Warehouse にアクセスする方法を説明
しています。
クライアント インストールお
よび接続ガイド
xvi
IBM Red Brick Warehouse: SQL リファレンス ガイド
マニュアル
説明
IBM Red Brick Vista ユーザー
ズ ガイド
IBM Red Brick Vista の集約計算と管理システムにつ
いて説明しています。集約を使用するようにクエリを
自動的にリライトすることによって Vista クエリ パ
フォーマンスを向上させる方法、毎日収集されるデー
タに基づいて Advisor が最適な集約セットを推奨する
方法、詳細テーブルの更新時の集約テーブルの保守方
法を説明しています。
IBM Red Brick Warehouse のインストールと構成に関
する情報、およびプラットフォーム固有の情報につい
て説明しています。UNIX および Linux ベースのシス
テム用と、Windows ベースのシステム用があります。
IBM Red Brick Warehouse の各製品でサポートされて
いるロケール要素 (言語、テリトリ、コード セット、
ソート順) を定義しています¡
IBM Red Brick Warehouse 製品によって出力される通
知メッセージ、警告メッセージ、およびエラー メッセ
ージの一覧を記載しています。また、各メッセージの
原因と対処方法も示しています。さらに、ログ ファイ
ルに書き込まれるイベント ログ メッセージについて
も説明しています。
クエリ パフォーマンスの決定要素と、最適なクエリ
パフォーマンスを得るためのデータベースのチューニ
ング方法について説明しています。 Red Brick ツール
(SET STATS、 Dynamic Statistic Tables: 動的統計テー
ブル、 EXPLAIN、および Query Performance Monitor)
を使用してクエリ パフォーマンスを評価する方法につ
いても、例を挙げて説明しています。
マニュアルの印刷後に判明した現リリースに関する情
報が含まれます。
SQL 文の入力に使用するコマンド行ツールである
RISQL エントリ ツールと、RISQL エントリ ツール
にレポート フォーマット設定機能を付加した RISQL
レポーターの詳細なガイドです。
Red Brick SQL の実装と RISQL (IBM Red Brick
Warehouse データベースのための拡張機能) に関する
詳細な言語リファレンスです。
例題に基づいて SQL を復習し、RISQL 拡張機能、マ
クロ関数、Aroma サンプル データベースを紹介しま
す。
インストールおよび構成ガイド
ロケール サポート
メッセージおよびコード リフ
ァレンス ガイド
クエリ パフォーマンス ガイド
リリース ノート
RISQL エントリ ツールおよび
RISQL レポーター ユーザーズ
ガイド
SQL リファレンス ガイド
SQL 自習ガイド
本書について
xvii
マニュアル
説明
テーブル マネジメント ユーテ
ィリティ リファレンス ガイド
Table Management Utility を使用したデータのロー
ド、保守、およびバックアップ作業について説明して
います。データのコピーと rb_cm コピー管理ユーテ
ィリティについても説明しています。
また、以下の参考資料も必要に応じて参照してください。
v SQL に関する入門書
v リレーショナル データベースの入門書
v ご使用のハードウェア プラットフォームとオペレーティング システムのマニュアル
その他のマニュアル
上記以外の情報は、以下のマニュアルを参照してください。
マニュアル
説明
オンライン マニュアル
Red Brick 製品には、各種の IBM Red Brick Warehouse マ
ニュアルを電子フォーマットで収録した CD が同梱されて
います。収録されているマニュアルは、システムにインスト
ールして使用することも、CD から直接アクセスすることも
可能です。
印刷マニュアル
オンライン ヘルプ
xviii
オンラインでマニュアルを参照できます。オンラインで参照
するには、次のアドレスにアクセスしてください。
www-3.ibm.com/software/data/informix/pubs/
印刷マニュアルを注文する場合は、担当販売員までご連絡く
ださい。
IBM はグラフィカル ユーザ インタフェース (GUI) を用い
たオンライン ヘルプを提供します。これにより、各インタ
フェースや実行する関数についての情報を参照できます。オ
ンライン ヘルプを表示するには、GUI のヘルプ機能を利用
してください。
IBM Red Brick Warehouse: SQL リファレンス ガイド
第 1 章 IBM Red Brick Warehouse の概要
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 インデックス、
TARGETjoin、TARGET インデックスの各技術は、多彩なスキーマ設計の超大型データ
ベースに対する特別なクエリや分析について、優れたパフォーマンスを提供します。分
析的なクエリを数多く実行し、必要な情報をすぐに得られるため、ビジネス上の決定を
迅速かつ的確に下すことができます。
この章では IBM Red Brick Warehouse の概要を示します。この章は次のセクションで
構成されています。
v リレーショナル データベースのテーブル
– 複数ユーザとテーブル ロック
– テーブルのビュー
– インデックス
– プライマリ キーとフォーリン キー
– データベースの整合性
– 許可と特権
– システム カタログ
v IBM Red Brick Warehouse
– スキーマ設計
– 意思支援決向け関数および OLAP 関数
– サブクエリによる比較
– マクロ
– セグメント化されたストレージ
– ローカライゼーション
© Copyright IBM Corp. 1996, 2004
1
– Aroma データベース
リレーショナル データベースのテーブル
リレーショナル データベースは、次の特性を持つテーブルの集合です。
v テーブルは、列と行で構成されます。
v 列は、データ型が同じである値の集合です。たとえば、文字型の列は文字列を格納
し、整数型の列は整数を格納します。
v 行は、行の n 番目の値が、テーブルの n 番目の列に対応するように配列された値の
シーケンスです。
v 通常、各行はプライマリ キーと呼ばれる固有値によって識別されます (通常は使用さ
れませんが、プライマリ キー列を持たないテーブルの作成も可能です)。
v 基本テーブルは、CREATE TABLE 文を使用して作成したテーブルです。基本テーブ
ルは、DROP TABLE 文で削除するまでデータベースに存在します。
v リザルト テーブルは、SELECT 文から結果として戻されるテーブルです。
v テンポラリ テーブルは、それ自身が作成されたセッションの間のみアクセスできる
テーブルです。テンポラリ テーブルは、セッション中のみ、または DROP TABLE
文で削除するまでデータベースに存在します。
意思決定支援データベースの分野ではデータベースのテーブルをファクト テーブル ま
たはディメンジョン テーブル と呼ぶこともあります。ファクト テーブルは、売上、販
売個数、比率などの加算可能な数値データを格納し、ディメンジョン テーブルは都市
名、製品名、商標、ブランド、期間などの記述的なデータを格納します。
ファクト テーブルとディメンジョン テーブルの内容が異なるのは、スキーマ設計上の
問題であり、テーブルの作成やクエリの処理には影響がありません。 IBM Red Brick
Warehouse ソフトウェアを使用してテーブルを作成する場合、構文で想定されるテーブ
ルのタイプは 1 つであり、ファクト テーブルとディメンジョン テーブルのデータに対
する制約はありません。本書ではほとんどの場合、ファクト テーブル の代わりに参照
元テーブル、ディメンジョン テーブル の代わりに参照先テーブルという用語を使用し
ます。これによって、プライマリ キー/フォーリン キー関係でジョインできるテーブル
の間の論理関係において、テーブル タイプの参照関係を明確に区別できます。
スキーマ設計の詳細は、「管理者ガイド」を参照してください。
複数ユーザとテーブル ロック
複数ユーザ向けシステムでは、複数のユーザが 1 つのテーブルに同時にアクセスできま
す。テーブルの更新を同時に行うことが許可されると、テーブルが破損することがあり
ます。テーブルが破損するのを防ぎ、データの整合性を維持するため、更新されるテー
ブルへのアクセスはデータベース サーバが自動的に制御します。
2
IBM Red Brick Warehouse: SQL リファレンス ガイド
データベース サーバによるアクセスの制御は、テーブルのロック によって行われま
す。テーブルの更新後は、ロックが自動的に解除されます。テーブルを更新する操作を
行うと、他のユーザを待たせることになり、検索の所要時間が予想より長くなる場合が
あります。
テーブルを更改するときに、データベース サーバは更新と読取りの並行アクセスを許可
します。
適切なアクセス権を持つユーザは、テーブルを明示的にロックし、他のユーザのアクセ
スを制御することもできます。
テーブルのビュー
ビュー とは、CREATE VIEW 文を使用して任意の数の基本テーブルに設定する仮想テ
ーブルです。テーブルと同様に、ビューも列と行で構成されます。 FROM 句で参照し
たり、相関名を与えたり、特定のアクセス権を割り当てることができます。ただし、基
本テーブルと無関係に、単独で存在することはできません。
一般に、ビューは次の目的で使用します。
v テーブルの一部アクセス制限。たとえば、東部地域の売上のみに限定したビューと、
西部地域の売上のみに限定したビューを定義できます。
v データの簡略化。たとえば、ニューヨークで販売した製品について、1992 年第 1 四
半期と第 2 四半期の売上を抽出する場合は、複数のテーブルを参照する複雑なクエ
リが必要になります。ビューを設定することで、必要なデータを 1 つのテーブルに
まとめることができます。
v 異なる視点からのデータ分析。たとえば、特定の地区、地域とさまざまな計算結果を
表す列をビューとして定義できます。
事前計算ビュー は、事前計算テーブル という物理データベース テーブルにリンクする
特別なタイプのビューです。このビューはクエリを定義し、テーブルにはそのクエリの
事前計算結果が格納されます。事前計算ビューは、集約クエリをリライトしてクエリ パ
フォーマンスを最適化します。クエリ リライトの詳細は、「IBM Red Brick Vista ユー
ザーズ ガイド」を参照してください。
インデックス
CREATE TABLE 文を使用して新規に基本テーブルを作成すると、テーブルのプライマ
リ キー列に B-TREE インデックスが自動的に作成されます。
CREATE INDEX 文を使用してインデックスを列や列のグループに追加すると、テーブ
ル全体のデータに高速にアクセスできるようになります。使用できるインデックスのタ
イプは、次のとおりです。
v B-TREE。デフォルトです。
第 1 章 IBM Red Brick Warehouse の概要
3
v STAR。テーブル ジョインを高速化します。 STAR インデックスは、フォーリン キ
ーが設定されている任意の基本テーブルに作成できます。
v TARGET。選択性の低い制約を扱うクエリを高速に処理するためのビット ベクトル
インデックスです。 TARGET インデックスは、1 つの非固有列に設定できます。
TARGET インデックスは、TARGETjoin 処理を有効にすることもできます。
プライマリ キーとフォーリン キー
通常、データベース テーブルには、各行を一意に識別するプライマリ キーが設定され
ています。プライマリ キーは、1 つの列の値でも、複数列の値を組み合わせたものでも
構いません。
IBM Red Brick Warehouse データベースの基本テーブルには、複数列のプライマリ キ
ーを設定できます。テーブルの作成時にプライマリ キーとして指定する 1 つ以上の列
は、次の条件を満たしている必要があります。
v テーブルの各行に対応する値を格納していること。つまり、NOT NULL と指定する必
要があります。
v 各行について、キーの値 (または値の組み合わせ) が一意であること。
固有の意味を持つ値で構成されるプライマリ キーの例としては、車体番号、従業員 ID
番号、社会保障番号などがあります。このような識別値で構成せず、単に一意の数字列
や文字列で指定されたプライマリ キーも多くあります。
フォーリン キー列は、他のテーブルのプライマリ キー列の値を格納します。フォーリ
ン キー列の値は、2 つのテーブルの関係を確立するものです。他のテーブルの 1 つま
たは複数の行を参照します。
プライマリ キー列と異なり、フォーリン キー列には次の例に示すように重複値を格納
できます。
例
右のテーブルには、左のテーブルを参照するフォーリン キーが含まれています。
4
IBM Red Brick Warehouse: SQL リファレンス ガイド
図 1. フォーリン キー参照
IBM Red Brick Warehouse は、多様なスキーマ作成のデータベースを管理できるように
設計されているため、テーブル間の関係を柔軟に設定できます。どのテーブルも他のテ
ーブルのフォーリン キーで参照でき、複数の列から成るプライマリ キーを設定するこ
ともできます。ジョインがクエリに明示され、ジョインする列が比較可能なデータ型で
あれば、各テーブルを結ぶジョイン パスが複数あっても問題ありません。
データベースの整合性
リレーショナル データベースは、次の 2 種類の整合性規則に従う必要があります。
v エンティティの整合性。各テーブルのプライマリ キー列の値は、一意である必要が
あります。
v 参照整合性。フォーリン キー列の値は、参照先テーブルのプライマリ キーに存在す
るものである必要があります。
Table Management Utility (TMU) は、データベースをロードする際に、これらの整合性
を確認します。さらに、INSERT、UPDATE、DELETE 文でデータベースを更新する際
にはカスケード ロックと削除動作によって整合性を保証します。
パラレル TMU を使用する場合は、データのロードと並行して参照の整合性が確認さ
れ、ロード全体の効率が向上します。
データベースのロードは、「テーブル マネジメント ユーティリティ リファレンス ガ
イド」を参照してください。
許可と特権
SQL (構造化問い合わせ言語) 文を実行するユーザは、必要な権限を持っている必要があ
ります。権限は、システム ロール、タスク権限、オブジェクト特権によって制御されま
す。
第 1 章 IBM Red Brick Warehouse の概要
5
v データベース ユーザには、特定のシステム ロール (CONNECT、RESOURCE、DBA)
が割り当てられます。システム ロールを与えられたメンバーは、そのロールに設定
された作業を実行できます。データベース ユーザに個別のタスク権限を割り当てる
こともできます。
v テーブルは、特定のデータベース ユーザに許可または禁止されるオブジェクト特権
(SELECT、INSERT、UPDATE、DELETE) によって保護されます。
前述のシステム ロールとオブジェクト特権の付与と取消しは、それぞれ GRANT 文と
REVOKE 文によって行います。
システム カタログ
データベース サーバは、システム カタログと呼ばれるシステム テーブルの集合を管理
しています。システム カタログには、データベースに存在する全データと、データベー
スの管理および保護に必要なコントロール情報が設定されています。このシステム テー
ブルは、必要な特権を持ったユーザが SELECT 文を用いて参照できます。詳細につい
ては、「管理者ガイド」を参照してください。
IBM Red Brick Warehouse
IBM Red Brick Warehouse は、意思決定支援アプリケーションの質とパフォーマンスを
向上させるための情報システム (IS) 向けクライアント/サーバ型 RDBMS です。 IBM
Red Brick Warehouse は、次の基本技術に基づいて優れたパフォーマンスを実現してい
ます。
v データベース情報の検索を高速化するインデックス技法とジョイン技法
v 順次演算と OLAP 分析を効率化する意思決定支援向け関数
v 複数の値を効率的に比較できるスカラ サブクエリ
v 複雑なクエリを汎用化し、簡略化するマクロ コマンド
v 大型テーブルを可能にし、データの可用性を高めるセグメント単位の格納
v 管理とアクセスが容易な分かりやすいデータベース構造
v 集約クエリのパフォーマンスを高速化するクエリ リライト技術
スキーマ設計
スキーマとは、データベースの構造の定義です。つまり、テーブル、テーブルの列、プ
ライマリ キー、フォーリン キーの関係を定義するものです。更新処理に注目したスキ
ーマの設計と最適化を行うと、検索の効率が低下します。逆に、検索に注目してスキー
マを最適化すると、更新の効率が損なわれます。データ ウェアハウスのスキーマは、検
索に注目して設計され、最適化されます。
たとえば、スター スキーマは、エンド ユーザによるデータのディメンジョン分析を目
的として設計されています。スター スキーマのテーブルには、ビジネスの各ディメンジ
ョンを反映する記述的データであるディメンジョン データを格納するか、ビジネスの進
6
IBM Red Brick Warehouse: SQL リファレンス ガイド
行状況を記録する数値データを中心としたファクトを格納するのが一般的です。データ
抽出の高速化には、プライマリ キーおよびフォーリン キーに設定したインデックスも
役立ちます。
IBM Red Brick Warehouse データベースは、スター スキーマの多様な発展形態に対応
する柔軟性を持ち、一般的なスター スキーマの形態では表現できない変則的なスキーマ
へのクエリも処理できます。スター スキーマに基づく設計はクエリ処理のパフォーマン
スを最適化する効果がありますが、設計できるスキーマの種類に制限はありません。
意思支援決向け関数および 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 構文または
独自の形式で表すことができます。
たとえば、これらの関数では次の計算を行うことができます。
v 累積合計
v 移動平均
v 移動合計
v 中央値
v 順位付け
v 4 分位や 100 分位など、値の範囲を任意の数のグループに等分したレベル分け
v 比率
サブクエリによる比較
クエリの検索項目リストにサブクエリまたは CASE 式を使用するか、FROM 句でサブ
クエリを使用すると、データを比較するクエリを簡略化できます。たとえば、次のよう
な比較を行うことができます。
v 今月の売上と過去 6 か月間の売上
v 今年の売上と昨年および一昨年の売上
v 西部を東部、南部、中西部と比較した売上
比較の結果は、見やすいスプレッドシート形式で表示できます。このような表示関数を
サポートしない SQL では、こうした日常的な比較を行うことが非常に難しく、結果も
読みにくいものになります。
第 1 章 IBM Red Brick Warehouse の概要
7
マクロ
CREATE MACRO 文を使用すると、指定した文字列を略記するマクロを定義できます。
SQL 文の中にマクロ名があると、データベース サーバはそのマクロ名を対応する文字
列に置き換えます。
不定な文字列を使用したマクロも作成できます。その場合は、複数のパラメータを含む
文字列として指定します。たとえば、次のマクロを作成し、複雑な条件を略記できま
す。
sales(mon, day, yr)
このマクロをクエリに使用する場合は、次のように特定の月、日、年に置き換えます。
sales(12, 25, 2000)
この文字列がマクロ定義に置き換えられると、月、日、年にそれぞれ 12、25、2000 が
代入されます。このようなパラメータ型マクロは、ユーザにも使いやすく、再利用可能
な汎用クエリになります。
セグメント化されたストレージ
データベースのテーブルおよびインデックスは、デフォルト セグメントに格納するか、
またはデータベース管理者が明示的に設定した任意の数のセグメントに格納できます。
セグメント とは、CREATE SEGMENT 文で定義したファイルの集合です。作成したセ
グメントには、1 つのテーブルのデータまたは 1 つのテーブルのインデックスを格納で
きます。
セグメントを利用すると、大規模データベースの管理が容易になります。データベース
のパフォーマンスが向上し、1 つのファイルに格納しきれない大容量のテーブルをサポ
ートできるようになります。複数のセグメントに 1 つのテーブルやインデックスを格納
し、セグメント レベルでテーブルやインデックスを管理できるようになります。データ
行とインデックス エントリは同じようにセグメント化でき、定期的なデータベースのメ
ンテナンスを効率よく行うことができます。
ローカライゼーション
IBM Red Brick Warehouse は、ロケールにかかわらず、すべての機能を提供します。デ
ータベース サーバのロケールを設定した後は、次を行うことができます。
v シングルバイトまたはマルチバイトの文字セットのロード、格納、インデックス付
け、クエリの実行
v サポートされている言語のエラー メッセージ、警告メッセージ、通知メッセージの
表示
v テーブル、列、インデックス、セグメント、ロール、ユーザなどのデータベース オ
ブジェクトに対し、シングルバイトまたはマルチバイトの名称を付ける
8
IBM Red Brick Warehouse: SQL リファレンス ガイド
v SQL の制約および分析関数がロケールに設定された照合シーケンスでソートし、設定
されたロケールに基づく結果を戻す
v ローカライズ フォーマットによる数値、日付、時間のデータのロード
v ローカライズ データに日付時間と文字列のスカラ関数を実行する
データベース サーバ ロケールの設定の詳細については、「インストールおよび構成ガ
イド」を参照してください。
Aroma データベース
本書の例では、Aroma 基本データベースのデータを主に使用しています。このデータベ
ースは、Aroma Coffee and Tea Company という企業の毎日の販売業務を管理していま
す。販売スキーマは、4 つの主要ディメンジョン テーブル (Period: 会計期間、Product:
製品、Store: 店舗、Promotion: 販売促進活動)、ファクト テーブル (Sales)、2 つのアウ
ト ボード テーブル (Class、Market) で構成されます。図 2 は、この基本スキーマを示
したものです。
図 2. Aroma データベース スキーマ
本書の例には、Aroma Company から仕入先への注文情報を格納した仕入れスキーマを
使用するものもあります。 Aroma データベースの詳細は、「SQL 自習ガイド」を参照
してください。
第 1 章 IBM Red Brick Warehouse の概要
9
10
IBM Red Brick Warehouse: SQL リファレンス ガイド
第 2 章 SQL 言語の要素
SQL 文は、精巧に設計された SQL 言語の各要素を組み合わせ、基本的な文法に従って
作成されます。この章では、SQL 言語の各要素と文法について説明します。
v 名称と識別子
v リテラル
v データ型
v 値の欠落と NULL 値
v 列データの代入と比較
名称と識別子
名称とは、データベース オブジェクト、データベース ユーザ、パスワードを識別する
ものです。名称 と識別子 は同義です。
データベース オブジェクト名は、シングルバイトあるいはマルチバイト文字のどちらで
も指定できます。この柔軟性により、次のオブジェクトについて、自国語で分かりやす
い名称を設定できます。
v テーブル、テーブル列、ビュー、シノニム
v インデックス
v セグメント
v マクロ
v ロール
v データベース ユーザ名
データベース ユーザ名を除き、オペレーティング システムからも使用される名称に
は、マルチバイト文字は使用できません。したがって、パスワードおよびファイル名に
は、サーバ ロケールにかかわらず、シングルバイト文字の使用に限定されます。
データベース ロケールに指定されたコード セットのサブセットとして、シングルバイ
ト文字が含まれている場合は、シングルバイト文字とマルチバイト文字の両方を含むオ
ブジェクト名を作成できます。
標準識別子
SQL 文で使用する名前は、次の規則に従って指定する必要があります。
© Copyright IBM Corp. 1996, 2004
11
v 文字 (英語では A から Z と a から z)、数字 (0 から 9)、あるいは半角の ASCII
アンダースコア (_) のみで構成されていること。マルチバイトの下線記号文字は、構
文エラーとなる
v アルファベット文字で始まること
v 1 バイト以上、128 バイト以下であること
v 引用符およびスペースを含まないこと
v 予約語 ( 545 ページの『付録 B. 予約語』参照) でないこと
これらの規則に従わない識別子の使用の詳細は、12 ページの『区切り識別子』を参照し
てください。
次にデータベース識別子の例を示します。
識別子
データベース オブジェクト
product
テーブル名
dollars
列名
top_25_brands
列名
区切り識別子
IBM Red Brick Warehouse は、ANSI SQL-92 に準拠した区切り識別子として、文字列
を囲む二重引用符 (″) をサポートします。これにより、どのような文字列を含む識別子
の作成も可能になります。二重引用符は、11 ページの『標準識別子』 で説明した規則
に従わない識別子を定義する場合に必要です。二重引用符 (″) を含む識別子を作成する
には、その二重引用符の前にさらに二重引用符を付けます。
リテラルの最初と最後をマークするのに二重引用符を用いるアプリケーションを使用す
る場合は、二重引用符を一重引用符で置き換える必要があります。
例
次の表は、区切り識別子の構文、区切り識別子の出力結果、および二重引用符が必要な
理由の簡単な説明を例示します。
12
IBM Red Brick Warehouse: SQL リファレンス ガイド
SQL 構文
結果
説明
"table"
table
"""SELECT"""
"SELECT"
"Column Name"
Column Name
"The ""STAR"""
The "STAR"
TABLE は予約語であるため、その名前の識別子は二
重引用符で囲まれる必要があります。
SELECT は予約語であるため、その名前の識別子は
二重引用符で囲まれる必要があります。出力結果に二
重引用符の文字を含めるには、それぞれの二重引用符
の文字は二重引用符で囲まれる必要があります。
識別子にスペースが入っており、大文字と小文字が混
在しているため二重引用符は必須です。
最初の引用符は識別子の開始を示し、第 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
名称の値が未設定の場合、その文は「不明」と評価されます。
漢字などのように、大文字と小文字の区別がない文字は、入力したとおりに格納されま
す。
例
次のクエリは、fred が作成したすべてのテーブルの名前を戻します。 fred は大文字に
変換されるため、検索条件には FRED を使用する必要があります。
select name
from rbw_tables
where creator = ’FRED’
第 2 章 SQL 言語の要素
13
エイリアスと相関名
列およびテーブルには作成時に名称を付けますが、クエリの中では列のエイリアスおよ
びテーブル相関名で置き換えることができます。この一時的な名称は、文の処理中のみ
有効です。
列のエイリアス
列のエイリアスは、オプションの 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 つの相関条件でクエリやサブクエリが同じテーブルを参照
する場合や、テーブルをそれ自身とジョインする場合に参照のあいまいさを除くために
用いられます。また、サブクエリや他の選択式から派生するテーブルに名前を付ける手
段にもなります。
テーブルのエイリアスは、シノニムとは異なります。シノニムの詳細については、345
ページの『CREATE SYNONYM』を参照してください。
FROM 句のテーブル参照に相関名を使用する場合は、相関名の後に列名リストを指定で
きます。単純なテーブル参照の場合は、テーブルの列名を列リストに指定された名前に
一時的に置き換えます。クエリ式の場合は、派生テーブルの列に一意な名前を与える手
段となります。どちらの場合も、列リストはクエリの中でのみ有効です。
列リストを指定する場合は、テーブルのすべての列の名前を指定してください。列リス
トを使用する場合は、列リストに指定した列名に基づいて列がジョインされるため、ナ
チュラル ジョインと列を指定したジョイン (USING サブ句を指定したジョイン) の指
定に注意が必要です。
ナチュラル ジョインと列を指定したジョインでは、列名が一致する 2 列を 1 列 にジ
ョインしたテーブルが派生しますが、ON で指定したジョインでは、ジョインする 2 列
がそのまま派生テーブルに残されます。
列のエイリアスの構文は 189 ページ、相関名と列リストは 185 ページ、各種ジョイン
は 181 ページを参照してください。
14
IBM Red Brick Warehouse: SQL リファレンス ガイド
修飾列名
修飾列名とは、テーブル名、ビュー名、テーブルやビューのシノニムのいずれかによっ
て修飾された列名のことです。テーブル名は、CREATE 文で定義した名前か、FROM
句で指定した相関名です。
列名とテーブル名は、ピリオドで区切ります。
sales.dollars
s.dollars
period.perkey
t1.perkey
view_sales99.quantity
v99.quantity
テーブル参照の詳細は、185 ページを参照してください。
例
次に列のエイリアスと相関名の使用方法の例を示します。ここに示す 2 つの例の詳細
は、「SQL 自習ガイド」の第 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
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)
第 2 章 SQL 言語の要素
15
という式から得られる列に名前を付けています。このエイリアスは、後で 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 つの列があります。
テーブル、シノニム、ビューの creator 修飾子: テーブル、シノニム、ビューを作成す
るときにオプションの creator 修飾子を使用できます。作成者は所有者とも呼ばれま
す。
次の CREATE 文は、creator 修飾子を使用可能にします。
v CREATE TABLE creator.table_name
v CREATE TEMPORARY TABLE creator.table_name
v CREATE VIEW creator.view_name
v CREATE SYNONYM creator.synonym_name
creator 修飾子の値は、現在のユーザ名と一致している必要があります。たとえば、user1
が次の CREATE 文を実行すると正常に完了します。
create table user1.tab1 (...;
create view user1.view1 as select... from user1.tab1...;
次の CREATE 文を user1 が実行すると失敗します。
create table user2.tab2 (...;
create view user2.view1 (...) as select... from user1.tab1...;
CREATE 文で オブジェクトの creator 修飾子を定義すると、次の SQL 文でユーザがこ
の creator 修飾子を参照できます。
v ALTER SEGMENT
v ALTER SYNONYM
v ALTER TABLE
v ALTER VIEW
v CHECK TABLE
16
IBM Red Brick Warehouse: SQL リファレンス ガイド
v CREATE HIERARCHY
v CREATE INDEX
v CREATE SYNONYM
v CREATE TABLE
v CREATE VIEW
v DELETE
v DROP SYNONYM
v DROP TABLE
v DROP VIEW
v GRANT (特権)
v LOCK
v REVOKE (特権)
v SELECT
v UNLOCK
v UPDATE
リテラル
リテラルとは、文字列定数または数値定数のことです。文字列定数は、文字列定数、文
字列、ストリングとも呼ばれます。日時定数は、日付と時間の一方または両方を表す特
別な文字列定数です。
数値定数は、整数、10 進数値、浮動小数点のいずれかで、符号、精度、スケールが設定
されます。数値定数の精度は定数全体の桁数、スケールは小数点以下の桁数のことで
す。
文字列定数
文字列定数の始まりと終わりは、一重引用符 (’) で示します。文字列定数の長さは、リ
テラルの文字数になります。次に文字列定数の構文ダイアグラムを示します。
文字列定数:
’
’
character
''
サーバが使用するコード セットは、インストールの際にロケール設定の一部として定義
されます。ロケールの詳細については、「管理者ガイド」を参照してください。
第 2 章 SQL 言語の要素
17
使用上の注意
v 文字とは、アルファベット、数値、特殊文字のいずれかです。
v 文字列定数の長さは、0 から 1024 文字の範囲である必要があります。
v 2 つの一重引用符で囲んだ長さが 0 の文字列 (’ ’) は、「空の文字列」と呼ばれま
す。これは NULL とは異なります。
v 文字列で一重引用符 (’) を使用する場合は、2 つの一重引用符 (’ ’) を使用してくだ
さい。
v 文字列定数には、大文字と小文字の区別があります。Chicago と chicago は同じでは
ありません。
例
次に文字列定数の例を示します。
’IBM Software’
’Scarlet O’’hara’
日時定数
DATE、TIME、TIMESTAMP の各キーワードは、その後に続くリテラルが ANSI
SQL-92 標準の日時 (DATETIME) 型に準拠した指定であることを示します。
次に日時定数の構文ダイアグラムを示します。
日時定数:
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 日時定数を使用する必要があります。代替日付時間フォーマットの詳細について
は、 549 ページの『付録 C. 日付時間フォーマット』を参照してください。
使用上の注意
v 日時定数の始まりと終わりは、一重引用符 (’) で示します。
v 日付と時間を構成する要素は、符号なしの整数とし、次に示す範囲である必要があり
ます。
18
IBM Red Brick Warehouse: SQL リファレンス ガイド
要素
意味
最小値
最大値
YYYY
MM
DD
HH
MM
SS
fraction
年
月
日
時間
分
秒
秒未満の端数
0001
01
01
00
00
00
0
9999
12
31
23
59
59
999999
v 日付の要素間はハイフン (-) で区切ります (YYYY-MM-DD)。日付の要素間に空白を
使用することはできません。
v 時間の要素は、次のようにコロン (:) またはピリオド (.) で区切ります。
HH:MM:SS
HH:MM:SS.fraction
時間の要素間に空白を使用することはできません。
v fraction は秒未満の端数を表す 0 から 6 桁の数字です。
v タイムスタンプの日付フィールドと時間フィールドの間には空白が使用できますが、
必須ではありません。
例
次に日時定数の例を示します。
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’
ANSI SQL-92 標準型式以外の日時定数を使用する場合は、 549 ページの『付録 C. 日付
時間フォーマット』に示すように、DATEFORMAT 変数に使用するフォーマットを指定
します。
整数定数
整数定数は、0 から 9 桁の数字列です。数字の前には、正符号 (+) または負符号 (-)
を付けることができます。次に整数定数の構文ダイアグラムを示します。
整数定数:
第 2 章 SQL 言語の要素
19
digit
+
-
使用上の注意
v 整数定数は、9 桁以下である必要があります。コンパイラは、10 桁から 38 桁まで
の整数定数を 10 進数定数と解釈します。 38 桁を超える場合は、浮動小数点定数を
使用します。
v 整数定数の精度は、桁数で表す長さです。スケールは 0 です。
v 整数定数にはカンマを含めることはできません。たとえば、1,000 とは記述できませ
ん。
v 有効な数値文字として認識されるのは、数値を表すシングルバイトの文字のみです。
例
次に整数定数の例を示します。
234
-5280333
+2274
+999990001
10 進定数
10 進定数は、小数点を含んだ数字列です。 10 進定数の前には、正符号 (+) または負
符号 (-) を付けることができます。次に 10 進定数の構文ダイアグラムを示します。
10 進定数:
digit
+
-
.
.
digit
digit
使用上の注意
v 10 進定数は、符号および小数点を除いて 38 桁以下である必要があります。 38 桁
を超えると、浮動小数点定数と解釈されます。
v 10 進定数の精度は、桁数で表す長さです。スケールは、小数点以下の桁数になりま
す。
v 10 進定数の小数点は、必須ではありません。小数点を使用しないと、スケールは 0
と解釈されます。
20
IBM Red Brick Warehouse: SQL リファレンス ガイド
v 10 進定数にはカンマを含めることはできません (1,100.10 など)。
v サーバ ロケールにかかわらず、小数点文字はピリオド (.) である必要があります。
v 有効な数値文字として認識されるのは、数値を表すシングルバイトの文字のみです。
例
次に 10 進定数の例を示します。
234
精度 3、スケール 0
+234.78
精度 5、スケール 2
+.007
精度 3、スケール 3
-2.1414
精度 5、スケール 4
1234567890.123456789
精度 19、スケール 9
浮動小数点定数
浮動小数点定数は、39 桁以上の数字列か、指数表記 による数字列です。指数表記は、
10 進数値と指数部を 1 文字 (E または e) で区切って表します。指数表現の値は、指
数部で指定する 10 の累乗と 10 進数値の積になります。この表記は浮動小数表記 とも
呼ばれています。
次に浮動小数点数値の構文ダイアグラムを示します。前半は 10 進数値の部分、後半は
指数部です。
浮動小数点数値の 10 進数値部:
digit
+
-
.
digit
. digit
浮動小数点数値の指数部:
E
e
digit
+
-
例
次に浮動小数点定数の例を示します。
第 2 章 SQL 言語の要素
21
1.73e+5
-2.93E+9
145.06e-5
.003E+4
+1234.56789e105
使用上の注意
v サーバ ロケールにかかわらず、浮動小数点定数の小数点文字はピリオド (.) である必
要があります。
v 有効な数値文字として認識されるのは、数値を表すシングルバイトの文字のみです。
データ型
サーバが格納、検索、削除、挿入、更新する値は、各値の特性を示すデータ型を持って
います。データ型は、CREATE TABLE 文でテーブルを作成する時に指定します。デー
タ型は、演算の処理中に変換できます。たとえば、整数を 10 進数値に加算する場合
は、整数が 10 進数値に変換されます。
Red Brick の構造化問い合わせ言語 (SQL) 実装では、ANSI SQL-89 標準データ型およ
び TINY 整数データ型と、ANSI SQL-92 の日付データ型の一部をサポートします。
次の表は、サポートされるデータ型の一覧です。この表は、Informix Red Brick ODBC
Driver が実行する、CREATE TABLE 文で指定したサーバのデータ型と ODBC データ
型との間のデータ型マッピングも示します。
22
サーバ データ型
ODBC SQL データ型
デフォルトの ODBC C
データ型
文字 (CHAR) 型
可変長文字 (VARCHAR) 型
小桁整数 (TINYINT) 型
小桁整数 (SMALLINT) 型
整数 (INTEGER) 型
シリアル (SERIAL) 型
10 進数 (NUMERIC) 型、10
進数 (DECIMAL) 型
小桁実数 (REAL) 型
実数 (DOUBLE) 型、実数
(FLOAT) 型
日付 (DATE) 型
時刻 (TIME) 型
タイムスタンプ
(TIMESTAMP) 型
SQL_CHAR
SQL_CHAR
SQL_TINYINT
SQL_SMALLINT
SQL_INTEGER
SQL_INTEGER
SQL_DECIMAL
SQL_C_CHAR
SQL_C_CHAR
SQL_C_STINYINT
SQL_C_SSHORT
SQL_C_SLONG
SQL_C_SLONG
SQL_C_CHAR
SQL_REAL
SQL_DOUBLE
SQL_C_FLOAT
SQL_C_DOUBLE
SQL_DATE
SQL_TIME
SQL_TIMESTAMP
SQL_C_DATE
SQL_C_TIME
SQL_C_TIMESTAMP
IBM Red Brick Warehouse: SQL リファレンス ガイド
3 番目の列は、Informix Red Brick のデータ型が論理的にマッピングされる ODBC の
データ型を示します。
エンドユーザ ODBC アプリケーションの詳細は、「クライアント インストールおよび
接続ガイド」を参照してください。
浮動小数点データ型の最大値と最小値は、ホストのプラットフォームによって異なりま
す。
文字 (CHARACTER) 型
文字列は固定長または可変長の値として格納できます。文字 (CHAR) 型は固定長とし
て、可変長文字 (VARCHAR) 型は可変長として文字列を格納します。
7 または 8 ビットの ASCII コード セットを使用した場合は、1 文字の長さが常に 1
バイトになるため、引数の長さがバイト数と文字数のいずれで解釈されても違いはあり
ません。ただし、マルチバイトのコード セットを使用する場合は、シングルバイトのコ
ード セットを使用した場合と同数の文字をデータベース テーブルの列に格納できない
ことがあります。
文字 (CHARACTER) 型:
CHARACTER
CHAR
VARCHAR
CHARACTER VARYING
CHAR VARYING
(
length
)
WITH FILLFACTOR n
(
length
)
WITH FILLFACTOR n
この句は、可変長文字 (VARCHAR) 型列にのみ適用
されます。
通常の VARCHAR が取るべき列の長さの割合を指
定します。この値は、ブロックに割り当てる行サイ
ズと行数の算出に使用されます。
WITH FILLFACTOR を指定しない場合、rbw.config
ファイルに設定されているデフォルトの列フィル フ
ァクタが使用されます。rbw.config ファイルで列フ
ィル ファクタが設定されていない場合は、システム
デフォルトである 10% が使用されます。
この句の有効範囲は 5 から 100 です。100 より大
きい値を指定すると、RBW_COLUMNS システム
テーブルには値 100 が格納されます。
第 2 章 SQL 言語の要素
23
フィル ファクタの詳細は、「管理者ガイド」を参照
してください。
使用上の注意
v CHARACTER キーワードは、CHAR と同義です。
v CHARACTER VARYING キーワードと CHAR VARYING キーワードは VARCHAR
と同義です。
v length の値は最大列幅を指定し、1,024 以下である必要があります。デフォルトは 1
です。
v 文字 (CHAR) 型列に格納された文字列は左寄せされ、残りのスペースに空白が追加さ
れます。文字 (CHAR) 型列に格納された文字列の長さはすべて同じです。クエリ結果
には末尾の空白文字も含まれます。
v 可変長文字 (VARCHAR) 型列に格納された文字列の長さは、ソース文字列または、
その文字列 (追加された空白を含む) を生成した式の長さと同じです。可変長文字
(VARCHAR) 型列に格納された文字列は可変長です。
v 可変長文字 (VARCHAR) 型列に格納された文字列には 2 バイトのオーバーヘッドが
生じます。このデータ型は、列幅が 6 バイト未満、または同等の長さの文字列を格
納する列には使用できません。文字 (CHAR) 型を使用してください。
v 文字列を比較する場合、シングルバイトの ASCII 空白文字ではなく、(東アジア言語
でサポートされている) ダブルバイトの空白文字を含むデータをロードすると、予測
できない結果になることがあります。可能な場合には、ダブルバイトの空白をシング
ルバイトの空白に置き換えて、データのロード前に入力ファイルからダブルバイトの
後ろの空白を取り除きます。
可変長文字 (VARCHAR) 型と文字 (CHAR) 型の使用方法
可変長文字 (VARCHAR) 型は、ソース文字列の長さが大きく異なる場合など、主に格納
スペースを効率的に利用するときに使用します。 CHAR(20) 型列に 5 文字の文字列を
格納すると、格納された文字列の長さは 20 文字に増加します (15 文字分は末尾の空
白)。同じ文字列を varCHAR(20) 型列に格納すると、5 文字分しか必要としません。
次の場合には、可変長文字 (VARCHAR) 型ではなく文字 (CHAR) 型を使用します。
v 6 バイト未満の列幅
v 文字列の長さが、大幅に異ならない ソース文字列
v 頻繁に更新され、格納された行が長くなる列。この場合は、最適に行が格納されない
ことがあるため、データへのアクセスに時間がかかる可能性があります。
重要: 可変長文字 (VARCHAR) 型列の末尾に空白が存在すると、予想外の、または不定
な結果に結びつくことがあります。末尾に空白を含むデータは可変長文字
(VARCHAR) 型列には保存しないことを推奨します。
24
IBM Red Brick Warehouse: SQL リファレンス ガイド
文字 (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 つ追加します。論理上、最小列幅を
指定しなければならない場合は、最小列幅より少ない値の末尾に空白を追加し、最小列
幅が満たされるようにします。それ以外の値からは末尾の空白をすべて取り除きます。
日時 (DATETIME) 型: 日付 (DATE) 型、時刻 (TIME) 型、タイムスタンプ
(TIMESTAMP) 型
日付、時間、タイムスタンプのデータ型 (日時 (DATETIME) 型 と総称) は、スカラ関
数、比較関数、集約関数を使用できる形式で日付と時間の情報を格納します。日付
(DATE) 型、時刻 (TIME) 型、タイムスタンプ (TIMESTAMP) 型は、次の例外を除き、
ANSI SQL-92 の日時 (DATETIME) 型の定義に準拠します。
v 時間帯はサポートされません。
v 時間間隔は直接にはサポートされませんが、スカラ関数により間接的にサポートされ
ます。
前述のデータ型は、DATE、TIME、TIMESTAMP の各キーワードで指定します。
第 2 章 SQL 言語の要素
25
日付 (DATE) 型:
DATE
時刻 (TIME) 型:
TIME
(
scale
)
タイムスタンプ (TIMESTAMP) 型:
TIMESTAMP
( scale
)
使用上の注意
v スケールの値は、0 から 6 の整数である必要があります。この値は、表示および計
算に使用する秒未満の桁数を指定します。 scale に 0 より大きい値を指定すると、
内部には 6 桁が格納されますが、scale で指定した桁数のみが有効になります。
scale = 0 の場合は、秒未満の桁は格納されません。
スケールの値を指定しないと、scale のデフォルト値は次のようになります。
TIME
TIMESTAMP
v 日時 (DATETIME) 型の範囲は、次のとおりです。
DATE
TIME
TIMESTAMP
January 1, 1 to December 31, 9999
0:0:0 to 23:59:59.999999
January 1, 1 0:0:0.000000 to
December 31, 9999 23:59:59.999999
v 精度が異なる値を比較する場合は、精度の低い方の値に 0 を追加し、精度の高い値
と同じ桁数にします。
v 日時 (DATETIME) 型をソートまたは比較するときは、日付時間の古いものから順に
なります。
v 日時 (DATETIME) 型の文字列を処理する場合、シングルバイトの ASCII 空白文字で
はなく、(東アジア言語でサポートされている) ダブルバイトの空白文字を含むデータ
をロードすると、予測できない結果になることがあります。可能な場合には、ダブル
バイトの空白をシングルバイトの空白に置き換えて、データのロード前に入力ファイ
ルからダブルバイトの後ろの空白を取り除きます。
例
次に日時 (DATETIME) 型の指定の例を示します。
DATE
26
IBM Red Brick Warehouse: SQL リファレンス ガイド
TIME
秒未満の端数なし
TIME(6)
秒未満の有効桁数は 6
TIMESTAMP(0)
秒未満の端数なし
TIMESTAMP
秒未満の有効桁数は 6
TIMESTAMP(2)
秒未満の有効桁数は 2
整数 (INTEGER) 型
整数 (INTEGER) 型は、-231 から 231-1 (231 = 2,147,483,648) の符号付き整数です。こ
のデータ型は、INTEGER または INT キーワードで指定します。
シリアル (SERIAL) 型
シリアル (SERIAL) 型は、1 から 231-1 (231=2,147,483,648) の符号付き整数です。この
データ型は、SERIAL キーワードで指定します。
シリアル (SERIAL) 型:
SERIAL
(
start_value
)
,
,
step_value
step_value
start_value
シリアル (SERIAL) 型列値の開始値。 0 より大きく 231 未満の数値
リテラルである必要があります。デフォルト値は 1 です。
step_value
シリアル (SERIAL) 型列の 2 つの値の差。 0 より大きく 231 未満の
数値リテラルである必要があります。デフォルト値は 1 です。
使用上の注意
シリアル (SERIAL) 型は特殊な整数 (INTEGER) 型です。シリアル (SERIAL) 型の使用
上の制限を次に示します。
v シリアル (SERIAL) 型は、整数 (INTEGER) 型が使用できるほとんどの場合に使用で
きます。
v どのテーブルもシリアル (SERIAL) 型列を 1 列のみ使用できます。この列は NOT
NULL として定義してください。
v シリアル (SERIAL) 型列は、テーブルのプライマリ キーとして使用できますが、フ
ォーリン キーの一部として使用することはできません。シリアル (SERIAL) 型列を
フォーリン キーとして参照する場合は、フォーリン キー列を整数 (INTEGER) 型列
として指定する必要があります。
v 他の列と同様にシリアル (SERIAL) 型列にも一意性インデックスを定義できますが、
このインデックスは別に作成する必要があります。一意性インデックスは、2 つの同
第 2 章 SQL 言語の要素
27
じシリアル番号が同時にテーブルに存在しないようにします。ただし、一意性インデ
ックスでは、シリアル番号を使用している行のインデックス管理でオーバーヘッドが
発生します。
v シリアル (SERIAL) 型は、ビュー列、ビュー テーブル列、述部などの事前計算ビュ
ー定義では使用できません。
シリアル (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) 型値はリセットされません。次のシリアル番号は、最後
に割り当てられたシリアル番号に基づきます。
28
IBM Red Brick Warehouse: SQL リファレンス ガイド
小桁整数 (SMALLINT) 型
小桁整数 (SMALLINT) 型は、-215 から 215-1 (215 = 32,768) の符号付き整数です。こ
のデータ型は、SMALLINT キーワードで指定します。
小桁整数 (TINYINT) 型
小桁整数 (TINYINT) 型は、-27 から 27-1 (27 = 128) の符号付き整数です。このデータ
型は、TINYINT キーワードで指定します。
10 進数 (DECIMAL) 型と 10 進数 (NUMERIC) 型
10 進数 (DECIMAL) 型と 10 進数 (NUMERIC) 型は、精度とスケールを正確に表した
数値データ型です。 10 進数 (DECIMAL) 型と 10 進数 (NUMERIC) 型は同義です。こ
のデータ型は、DECIMAL、DEC、NUMERIC、NUM のいずれかのキーワードで指定し
ます。
10 進数 (DECIMAL) 型と10 進数 (NUMERIC) 型:
DECIMAL
DEC
NUMERIC
NUM
(
precision
)
,
scale
使用上の注意
v 10 進数 (DECIMAL) 型の最大精度は 38 桁です。
v 10 進数 (DECIMAL) 型のスケールは正数で表し、その精度の桁数以下とします。
v デフォルトは、精度が 9、スケールが 0 です。
v 10 進数 (DECIMAL) 型は、10 進数 (NUMERIC) 型と同義です。
例
次に 10 進数 (DECIMAL) 型の型指定の例を示します。
DECIMAL
精度 9、スケール 0
DEC
精度 9、スケール 0
DECIMAL(9)
精度 9、スケール 0
DECIMAL(38,38)
精度 38、スケール 38
NUMERIC
精度 9、スケール 0
NUMERIC(9)
精度 9、スケール 0
小桁実数 (REAL) 型
小桁実数 (REAL) 型は、符号付き浮動小数点数値を単精度で表した概数です。このデー
タ型は、REAL キーワードで指定します。
第 2 章 SQL 言語の要素
29
使用上の注意
小桁実数 (REAL) 型は、
おおよそ 1.17549435E-38F から 1.E37 の単精度数です (最小範囲と最大範囲はホスト
プラットフォームに依存します)。
実数 (DOUBLE PRECISION) 型と実数 (FLOAT) 型
実数 (DOUBLE PRECISION) 型と実数 (FLOAT) 型は、符号付き浮動小数点数値を倍精
度で表した概数です。このデータ型は、DOUBLE PRECISION または FLOAT キーワー
ドで指定します。
使用上の注意
v このデータ型は、2.3E-308 から 1.E307 の倍精度数です (これは最小範囲で、最大範
囲はホスト プラットフォームに依存します)。
v 実数 (DOUBLE PRECISION) 型と実数 (FLOAT) 型は、同義です。
値の欠落と NULL 値
IBM Red Brick Warehouse は、値の欠落を次のように処理します。
v 値の欠落は、空白とは異なります。たとえば、次の文は、Market 列に空白が格納され
ていれば偽、入力データが欠落していれば真になります。
(market is null)
v 値の欠落は、0 とは異なります。たとえば、次の文は、Dollars 列に 0 が格納されて
いれば真ですが、値が欠落していれば真でも偽でもありません。
(dollars = 0)
値が欠落していれば真でも偽でもなく、不明と判定されます。
v 条件が参照する値が欠落している場合は、3 値 (真、偽、不明) 論理によって評価さ
れます。たとえば、次の文の真理値は、Dollars 列の値が欠落していれば不明になりま
す。
(dollars > 100)
v 算術式が参照する値が欠落している場合は、NULL と評価されます。たとえば、次の
文で Dollars 列の値が欠落していれば NULL が戻されます。
(dollars+5)
v 列の値が欠落している場合、IS NULL 述部は真、IS NOT NULL 述部は偽になりま
す。たとえば、次の文は、Dollars 列の値が欠落している場合に真になります。
(dollars is null)
v ほとんどの表示関数と集約関数は、値の欠落を無視します。たとえば、次の文は、既
存値の順位のみを戻します。
rank(dollars)
30
IBM Red Brick Warehouse: SQL リファレンス ガイド
v ほとんどのスカラ関数式は値が欠落していると、NULL を戻します。たとえば、次の
文で Dollars 列の値が欠落していれば NULL が戻されます。
(float(dollars))
v IFNULL スカラ関数は、値の欠落を検出し、指定された値に置き換えます。たとえ
ば、次の文で Market 列の値が欠落していれば No Name という値が戻されます。
(ifnull(market, ’No Name’))
列データの代入と比較
INSERT 文や UPDATE 文は列に値を代入し、各種の演算子や関数は値を比較します。
代入または比較の対象となる値は、互換性のあるデータ型である必要があります。
数値データ型と文字データ型は互換性がありません。たとえば、数値データ型に定義さ
れた列に文字列を格納することはできず、文字列と数値を比較することもできません。
列データの代入
CHARACTER と指定された列には、文字列しか格納できません。 DATETIME と指定
された列には日付時間の値、NUMERIC と指定された列には数値しか格納できません。
さらに次の規則が適用されます。
文字列
文字列を列に挿入したり、文字列で列を更新する場合は、次の規則が適用されます。
v 文字列の長さが文字 (CHAR) 型列の指定長より短ければ、必要な数の空白が文字列の
右に追加されます。
v 文字列の長さが可変長文字 (VARCHAR) 型列の指定長より短ければ、その文字列の
VARCHAR 属性は、代入された文字列の長さとなります。
v 文字列の長さが列の指定長より長ければ、INSERT 文や UPDATE 文が失敗し、エラ
ー メッセージが戻されます。
日付時間の値
日時定数を列に挿入したり、日時定数で列を更新する場合は、次の規則が適用されま
す。
v DATE、TIME、TIMESTAMP のプレフィクスを持つリテラルは、日付時間の値と解釈
されます。
v タイムスタンプの値に時間の部分が欠落していれば、午前 0 時が使用されます。
v タイムスタンプの値に日付の部分が欠落していれば、1900 年 1 月 1 日 (1900-01-01)
が使用されます。
v DATE、TIME、TIMESTAMP のプレフィクスを持たないリテラルは、その内容が日付
時間の値であると推定される場合のみ、文字定数ではなく日時定数であると解釈され
ます。その場合、定数は日付時間の値に変換されます。
第 2 章 SQL 言語の要素
31
INSERT 文で、日時 (DATETIME) 型列に挿入されるリテラルは、適切な日時
(DATETIME) 型に変換されます。
insert into table1 (date_col) values (’1999-07-04’)
UPDATE 文で、DATETIME 列に代入されるリテラルは、適切な日時 (DATETIME)
型に変換されます。
update table1 set date_col = current_date
変換が失敗すると、文の実行が中止され、エラーになります。
数値
数値を列に挿入したり、数値で列を更新する場合は、次の規則が適用されます。
整数や 10 進数値の整数部は、切り捨てられません。端数部は、必要に応じて切り捨て
られます。
比較
文字は他の文字と比較でき、日付時間は他の日付時間、数値は他の数値と比較できま
す。さらに次の規則が適用されます。
文字列
文字列を比較する場合は、比較する文字列の長さが同等であることが必要です。文字列
長が異なる場合は、長い方の文字列と同じ長さになるまで、短い方の文字列の右端に空
白スペースが追加されます。その上で、各文字列の対応する文字ごとに、左から右へ比
較されます。次の規則が適用されます。
v 2 つの文字列の長さと対応する文字が同じ場合は、等しいと見なされます。
v 文字列の文字が同じでない場合、最初の等しくない文字によって、文字列の大小関係
が決まります。つまり、システムの相関シーケンスにおいて最も大きい値の文字を持
つ文字列の方が大きいと判断されます。
日付時間の値
日付時間の値は、次のように比較されます。
v 日付の値は、日付の値と比較されます。
v 時間の値は、時間の値と比較されます。精度が異なる値を比較する場合は、精度の低
い値に 0 を追加し、精度の高い値と同じ桁数にします。
v タイムスタンプの値は、タイムスタンプの値と比較されます。精度が異なる値を比較
する場合は、精度の低い値に 0 を追加し、精度の高い値と同じ桁数にします。
v 日付の値は、タイムスタンプの値と比較されます。日付の値には、比較のために深夜
の時間の値が埋め込まれます。
v 時間の値は、タイムスタンプの値と比較されます。その時間の値には比較のために日
付値 1900-01-01 が埋め込まれます。
32
IBM Red Brick Warehouse: SQL リファレンス ガイド
v DATE、TIME、TIMESTAMP のプレフィクスを持たないリテラルは、その内容が日付
時間の値であると推定される場合のみ、文字定数ではなく日時定数であると解釈され
ます。その場合、リテラルは日付時間の値に変換されます。詳しくは、 549 ページの
『付録 C. 日付時間フォーマット』を参照してください。
例
WHERE、HAVING、WHEN の各句で日付時間列と比較するリテラルは、適切な日時
(DATETIME) 型に変換されます。
select *
from table1
where date_col <> ’7-4-1999’
検索項目リスト中の式で、日時 (DATETIME) 型が期待される位置にリテラルが指定さ
れている場合は、適切な日時 (DATETIME) 型に変換されます。
select datediff (dy, date_col, ’7-4-1999’)
from table1
変換が失敗すると、文の実行が中止され、エラーになります。
数値
数値は、符号と大きさに基づいて比較されます。たとえば、5 は 1 より量的には大きい
値ですが、+1 は‐5 より大きいと評価されます。
異なる型の数値が混在する場合は、次のように比較されます。
v 整数と 10 進数値を比較する場合は、整数が一時的に 10 進数値に変換されます。
v スケールの異なる 10 進数値どうしを比較する場合は、小数点以下の桁数が少ない方
の末尾にゼロを追加し、一時的に拡張します。
v 浮動小数点数値を 10 進数値または整数と比較する場合は、10 進数値または整数が
一時的に浮動小数点数値に変換されます。
v 単精度の浮動小数点数値 (REAL) と倍精度の浮動小数点数値 (DOUBLE または
FLOAT) を比較する場合は、単精度の数値が一時的に倍精度の数値に変換されます。
第 2 章 SQL 言語の要素
33
34
IBM Red Brick Warehouse: SQL リファレンス ガイド
第 3 章 式と条件
IBM Red Brick Warehouse の SQL インプリメンテーションには、各種の算術演算子、
論理演算子、論理述部が組み込まれています。
この章では、次の事項について説明します。
v 式
– 単項式
– 多項式
– 多項式の評価
v 条件
– 比較述部
– BETWEEN 述部
– EXISTS 述部
– IN 述部
– IS NULL 述部
– LIKE 述部
– 検索条件
式
式は、一意の値を表します。たとえば、5+12 という式は 17 となります。次の式は
1,000 ドル単位の値を戻します。
(sales.dollars/1000)
次に示す列名の値はコンテキストによって決まります。
sales.dollars
という名の列は指定した行に対する値になります。
単項式
単項式は、次のいずれかになります。
v リテラル
v スカラ関数
v 列名
v 集約関数
© Copyright IBM Corp. 1996, 2004
35
v RISQL 表示関数
v OLAP 関数
v スカラサブクエリ
スカラ サブクエリの詳細については、225 ページの『スカラ サブクエリとテーブル サ
ブクエリ』を参照してください。
例
次の式は、いずれも単項式です。
’Lotta Latte’
2.1416
sum(dollars)
rank(sales)
rank(sum(dollars))
integer(dollar_cents)
dollars
(select max(bonus) from employee)
多項式
多項式は、算術演算子でジョインした単項数値式のシーケンスです。多項式では、括弧
を使用して評価順を指定できます。次に多項式の構文ダイアグラムを示します。
多項式
/, *, +, +
-
simple_expression
( compound_expression
)
多項式に使用する単項式は、数値を戻すものである必要があります。
分析関数
次の RANK を使用した例に示すように、1 つの多項式には任意の数の OLAP 関数また
は RISQL 表示関数を使用できます。ただし、同じ式または同じ問い合わせで OLAP と
RISQL 表現関数を混在させることはできません。
詳細については、 125 ページの『第 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
36
IBM Red Brick Warehouse: SQL リファレンス ガイド
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
入れ子になった式
他の関数に入れ子にできる関数もあります。たとえば、次の式は、数値を切り捨てる場
合に使用できます。
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))
多項式の評価
多項式の値は、式の構成要素をデータベース サーバがどのように評価するかで決まりま
す。評価基準は、次のとおりです。
v 演算子のタイプと演算子の優先順位
v オペランドのデータ型
v 値の欠落 (NULL) があるかどうか
演算子のタイプ
多項算術式は、次の演算子を使用して作成できます。
演算子
説明
( )
評価順を指定する括弧
+, -
正と負の単項演算子
*, /
乗算と除算
+, -
加算と減算
第 3 章 式と条件
37
上の表では、演算子は優先度の高いものから順に (上から下、同一レベル内では左から
右に) 記されています。
括弧はオプションですが、計算順序の制御が必要な場合には便利です。データベース サ
ーバは、括弧の中にある式を最初に評価します。括弧が入れ子にされていれば、データ
ベース サーバは最も内側の括弧から順に評価していきます。
単項演算子のプラス (+) を使用した場合、オペランドの符号は変わりません。単項演算
子のマイナス (-) は、オペランドの符号を逆にします。符号のないゼロの数字リテラル
(0、.0、0.0) は、正の値です。
例
次に括弧の用例を示します。
10*5+7 = 57
10*(5+7) = 120
演算結果のデータ型
乗算、加算、減算のオペランドがいずれも整数の場合は、結果を表現できる最小の整数
型が演算結果になります。結果値が整数として保管するには大きすぎる場合は、10 進数
値に変換されます。
ただし、この規則は除算演算子には適用されません。整数を整数で除算した場合の戻り
値は、整数ではなく数値になります。整数の除算には、10 進数値の除算と同じ規則が適
用されます。
一方のオペランドが整数で他方が 10 進数値の場合は、整数がスケール (小数点以下の
桁数) を 0 とする 10 進数値に一時的に変換されます。演算結果は、10 進数値になり
ます。
オペランドが両方とも 10 進数値の場合、演算結果の精度 (p) とスケール (s) は次の表
に示す規則に従います。
式
d1
d1
d1
d1
+ d2
- d2
* d2
/ d2
結果の精度
結果のスケール
max(p1- s1, p2-s2) + max(s1, s2) + 1
max(p1- s1, p2-s2) + max(s1, s2) + 1
p1 + p 2
max(6,s1+p2-s2+1) + p1-s1+s2
max(s1, s2)
max(s1, s2)
s1 + s 2
max(6,s1+p2-s2+1)
オペランドのいずれかが浮動小数点数である場合は、オペランドはどちらも一時的に浮
動小数点数に変換され、結果は浮動小数点数になります。
38
IBM Red Brick Warehouse: SQL リファレンス ガイド
除算の結果、精度が 38 桁を超えた場合は、精度が 38 桁になるようにスケールが減ら
されます。スケールは、6 桁まで減らすことができます。スケールを 6 に減らしても精
度が 38 桁を超える場合は、実行時オーバーフロー エラーが発生します。
値の欠落
算術演算のオペランドが NULL の場合は、NULL が戻されます。次の表は、各算術演算
の結果を定義したものです。x は NULL を表し、y は数値を表します。
演算
結果
-x
NULL
+x
NULL
x + y
NULL
x - y
NULL
x * y
NULL
x / y
NULL
条件
条件 は、1 つまたは複数の行に対し、真、偽、不明のいずれかを評価する文のことで
す。条件は、SQL の比較述部と数量述部を使用して表現します。次に各述部を使用した
条件の構文ダイアグラムを示します。
expression
=
<>
<
>
<=
>=
expression
expression
SOME
table_subquery
ANY
ALL
BETWEEN expression AND
expression
NOT
expression IS
NULL
NOT
LIKE string_expression
expression
NOT
EXISTS table_subquery
NOT
expression
IN
NOT
ESCAPE string_expression
table_subquery
,
( constant
)
ヒント: 式 (expression) には、文字、日付時間、数値のいずれも使用できますが、複数
の式を 1 つの条件に指定する場合は、互換データ型である必要があります。
第 3 章 式と条件
39
比較述部
比較述部は 2 つの値の論理的関係を表しており、比較結果は、指定した行に対して真、
偽、または不明のいずれかになります。次に比較述部を使用した条件の構文ダイアグラ
ムを示します。
比較述部:
expression
expression
=
<>
<
>
<=
>=
expression
SOME
table_subquery
ANY
ALL
式には、文字、日付時間、数値が使用できますが、互換データ型であ
る必要があります。式の値が NULL の場合やサブクエリの戻り値が
NULL の場合、その条件は不明と評価されます。
スカラ サブクエリは式に使用できますが、行サブクエリとテーブル
サブクエリは使用できません。
SOME、ANY、ALL
table_subquery
数量述部は、テーブル サブクエリの戻り値と式を比較します。サブク
エリは複数の行を選択できますが、検索項目リストの列数は 1 つに制
限されます。
SOME 数量述部と ANY 数量述部は、シノニムです。 SOME または
ANY で表した比較は、サブクエリが戻した値の中に指定条件を満た
す値が 1 つ以上あれば真と評価されます。 ALL で表した比較は、サ
ブクエリが戻したすべての値について、比較条件が真の場合に真と評
価されます。
戻り値がなければ、SOME や ANY を使用した比較は偽と評価され、
ALL を使用した比較は真と評価されます。
例
次の条件は、Dollars 列の値が 100 以上の場合は真になります。
dollars >= 100
次の条件は、Hot_Products テーブルの製品に、同じ Brand のものが 1 つでもあれば真
になります。
brand = any
(select product from hot_products)
次の条件は、Dollars 列の各値が San Jose におけるどの売上よりも大きければ真になり
ます。サブクエリの戻り値がない、つまり San Francisco の売上がない場合も、真にな
ります。これは Dollars 列の値がいずれも 0 以上であるためです。
40
IBM Red Brick Warehouse: SQL リファレンス ガイド
dollars >= all
(select dollars from store join sales
on store.storekey = sales.storekey
where city = ’San Jose’)
SOME および ALL 述部の詳細については、「SQL 自習ガイド」を参照してください。
BETWEEN 述部
BETWEEN 述部は、ある値が指定した範囲にあるかどうかを評価します。次に
BETWEEN 述部を使用した条件の構文ダイアグラムを示します。
BEWTEEN 述部:
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 BETWEEN x not between y and z この条件は、次と同義です。
(x<y) or (x>z)
例
次の条件は、Dollars 列の値の中で、200 以上 500 以下の値について真になります。
dollars between 200 and 500
次の条件は、Dollars 列の値の中で、200 未満か、500 より大きい値について真になりま
す。
(dollars not between 200 and 500)
EXISTS 述部
EXISTS 述部は、サブクエリの戻り値が 1 行以上あれば真と評価されます。 NOT を指
定すると、サブクエリの戻り値が 1 行もない場合に真と評価されます。次に EXISTS
述部を使用した条件の構文ダイアグラムを示します。
EXISTS 述部:
第 3 章 式と条件
41
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 自習ガイド」を参照してください。
IN 述部
IN 述部は、列の値を複数の値と比較します。次に IN 述部を使用した条件の構文ダイ
アグラムを示します。
IN 述部:
expression
IN
NOT
table_subquery
,
( constant
)
expression
文字、日付時間、数値が使用できますが、constant または
row_subquery の戻り値と互換性のあるデータ型である必要がありま
す。
table_subquery
結果が 1 つ以上の行を持つテーブルとなるサブクエリ。ただし、この
クエリの検索項目リストには、1 つの列しか指定できません。
例
v 次の条件は、1000、10000、100000 のいずれか 1 つと等しい値について真になりま
す。
42
IBM Red Brick Warehouse: SQL リファレンス ガイド
quantity in (1000, 10000, 100000)
v 次の条件は、1000、10000、100000 のいずれとも等しくない値について真になりま
す。
quantity not in (1000, 10000, 100000)
v 次の条件は、JAN、FEB、MAR のいずれか 1 つと等しい月について真になります。
month in (’JAN’, ’FEB’, ’MAR’)
v 次の条件は、Hot_Products テーブルの Product の値と等しい製品について真になりま
す。
product in (select product from hot_products)
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
LIKE 述部
LIKE 述部は、列の値を、指定した文字列定数、式、またはパーセント (%) と下線記号
(_) のワイルドカード文字を使用した文字パターンと比較します。次に LIKE 述部を使
用した条件の構文ダイアグラムを示します。
LIKE 述部:
expression
LIKE string_expression
NOT
expression
ESCAPE string_expression
LIKE 述部を使用した式に指定する列は、文字データ型である必要が
あります。数値や日付時間のデータ型を格納する列は指定できませ
ん。
string_expression expression の値と比較する文字列定数または文字列式を指定します。
第 3 章 式と条件
43
ESCAPE
1 文字の string_expression をエスケープ文字として指定し、ワイルド
カードを制御文字ではなく文字列定数または式として扱えるようにし
ます。 ESCAPE キーワードは、照合する文字パターン自体にパーセ
ントや下線記号が含まれている場合 (44 ページの最後の例参照) に使
用します。
ESCAPE string_expression の評価結果は、シングルバイトまたはマル
チバイトの 1 文字から成る文字列である必要があります。
ワイルドカード文字
パーセント (%) のワイルドカード文字は、任意の文字列を意味します。下線記号 (_)
のワイルドカード文字は、固定位置にある任意の 1 文字を意味します。これらのワイル
ドカードは、シングルバイトの ASCII 文字で指定します。マルチバイトの下線文字や
パーセント文字を使用すると、リテラル値とみなされます。
例
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 % で終わる文字列は、すべて真になります。
検索条件
検索条件は、真、偽、不明のいずれかを評価する論理条件を指定するものです。論理接
続詞を使用すると、基本条件を組み合わせた複合検索条件を指定できます。条件は、括
弧を使用してグループ分けできます。次に検索条件の構文ダイアグラムを示します。
44
IBM Red Brick Warehouse: SQL リファレンス ガイド
検索条件
AND、OR
condition
NOT
評価
複合検索条件の値は、条件を構成する要素の値で決まります。複合検索条件の評価結果
は次のようになります。
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 章 式と条件
45
46
IBM Red Brick Warehouse: SQL リファレンス ガイド
第 4 章 集約関数
集約関数は、1 つまたは複数の値を 1 つの値に集約した結果を戻します。たとえば次の
式は、Dollars 列の行の集合値を合計します。
sum(dollars)
IBM Red Brick Warehouse は、次の集約関数をサポートします。この章では、各関数を
アルファベット順に説明します。
機能
説明
AVG
平均値
COUNT
該当する行数
MAX
最大値
MIN
最小値
SUM
合計値
サーバでは、データの一部のパーティションに対して 集約値を計算する OLAP 集約関
数もサポートされています。これらの関数の構文は、 125 ページの『第 6 章 分析関
数』を参照してください。
一般的な使用方法
集約関数は、ANSI SQL-92 標準に定義されています。値の集合に対する演算を行うため
集約関数 と呼ばれたり、値のグループを対象とするためグループ関数 と呼ばれたり、
列の値を処理するため列関数 と呼ばれることもあります。
集約関数は、検索項目リストまたは HAVING 句で使用できます。 1 つの式には、1 つ
の集約関数しか使用できません。集約 関数を入れ子にする、つまり集約 関数の中で集
約 関数を使用することはできません。たとえば、次の検索項目リストはエラーになりま
す。
select max(avg(salary))
集約関数は、WHERE 句の検索条件では使用できません。
OLAP 関数と RISQL 表示関数は、集約関数の引数としては使用できません。たとえ
ば、次の式はエラーになります。
sum(rank() over(order by dollars)
sum(rank(dollars))
© Copyright IBM Corp. 1996, 2004
47
ただし、RISQL 表示関数の引数として集約関数を使用することは可能です。次の式は有
効です。
rank() over(order by sum(dollars))
rank(sum(dollars))
クエリに集約関数を使用する場合に必要なグループ分けの条件は、203 ページの
『GROUP BY 句』を参照してください。
IBM Red Brick Vista を使用して、集約関数を使用したクエリのパフォーマンスを高速
化する方法の詳細は、「IBM Red Brick Vista ユーザーズ ガイド」を参照してくださ
い。
48
IBM Red Brick Warehouse: SQL リファレンス ガイド
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) 型、 10 進数 (DECIMAL) 型) の場合は、AVG の
戻り値も指数表現を用いないデータ型になります。結果のデータ型の精度とスケール
は、小数点より左の桁数はそのままで、小数点より右の桁数が 6 桁増分されます。これ
は、AVG 関数の戻り値が非常に小さくなっても、結果のデータ型の有効桁数に納まる
ようにするためです。
次の表は、n_expression のデータ型に応じて AVG 関数が戻すデータ型の一覧です。
n_expression のデータ型
結果のデータ型
小桁整数 (TINYINT) 型
小桁整数 (SMALLINT) 型
整数 (INTEGER) 型
シリアル (SERIAL) 型
10 進数 (DECIMAL) 型
10 進数 (NUMERIC) 型
DECIMAL(9,6) 型
DECIMAL(11,6) 型
DECIMAL(16,6) 型
DECIMAL(16,6) 型
DECIMAL(p,s) 型
p = min(38、n_expression の精度 +6)
s = min(6, 38 - n_expression の精度)
小桁実数 (REAL) 型
実数 (FLOAT) 型
実数 (DOUBLE PRECISION) 型
小桁実数 (REAL) 型
実数 (FLOAT) 型
実数 (DOUBLE PRECISION) 型
第 4 章 集約関数
49
AVG
例
次のクエリは、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
50
IBM Red Brick Warehouse: SQL リファレンス ガイド
COUNT
COUNT 関数は、検索した行の行数を戻します。
構文
次に COUNT 関数を使用した式の構文ダイアグラムを示します。
COUNT 関数:
COUNT
(
expression
)
ALL
DISTINCT
*
ALL
列名を expression に指定し、列名の前に ALL キーワードを指定する
(またはキーワードを何も指定しない) と、指定した列に値を持つ行の
数が戻されます。列内の値が欠落している (NULL 値) 行は、カウン
トされません。
DISTINCT
列名を expression に指定し、列名の前に DISTINCT キーワードを指
定すると、指定した列に重複値を持つ行を除外してカウントが行われ
ます。列内の値が欠落している (NULL 値) 行は、カウントされませ
ん。
expression
expression が列名の場合、指定した列に値が存在する行の数が戻され
ます。列内の値が欠落している (NULL 値) 行は、カウントされませ
ん。
expression で、集約関数や表示関数を参照することはできません。
*
引数がアスタリスク (*) の場合、行集合の行数 (空集合の場合は 0)
が戻されます。この関数は、「カウント スター」関数とも呼ばれま
す。NULL 値を含む行もカウントされます。
結果
COUNT 関数は、負でない整数を戻します。NULL が戻されることはありません。
例
次のクエリは、Product テーブルの製品数をカウントします。
select count(prod_name) as prod_count
from product
PROD_COUNT
59
次のクエリは、Product テーブルの一意な製品名をカウントします。
第 4 章 集約関数
51
COUNT
select count(distinct prod_name) as prod_count
from product
PROD_COUNT
38
ヒント: 2 番目の例は、製品数ではなく、固有の製品名 をカウントします。 Aroma デ
ータベースのコーヒーと紅茶製品は、計り売りとパッケージ入りの製品名が同
じため、一意な製品数の方が少なくなります。
52
IBM Red Brick Warehouse: SQL リファレンス ガイド
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 章 集約関数
53
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_DOLMIN_QTY
3.751
54
IBM Red Brick Warehouse: SQL リファレンス ガイド
SUM
SUM 関数は、指定した値集合の合計値を計算します。
構文
次に SUM 関数を使用した式の構文ダイアグラムを示します。
SUM 関数:
SUM
(
n_expression
)
ALL
DISTINCT
n_expression
数値です。集約関数や表示関数を参照することはできません。
ALL
重複値を使用して、合計値を計算します。 ALL がデフォルトです。
DISTINCT
DISTINCT キーワードは、指定した式から重複値を削除してから、合
計値を計算します。
結果
指定した値集合が空でなければ、SUM は合計値を戻します。空の場合は NULL を戻し
ます。
n_expression が指数表現を用いないデータ型 (小桁整数 (TINYINT) 型、小桁整数
(SMALLINT) 型、整数 (INTEGER) 型、 10 進数 (DECIMAL) 型) の場合は、SUM の
戻り値も指数表現を用いないデータ型になります。結果のデータ型の精度は 6 桁増分さ
れます。これは割り当てられたストレージに納めるためです。
次の表は、n_expression のデータ型に応じて SUM 関数が戻すデータ型の一覧です。
n_expression のデータ型
結果のデータ型
小桁整数 (TINYINT) 型
小桁整数 (SMALLINT) 型
整数 (INTEGER) 型
シリアル (SERIAL) 型
10 進数 (DECIMAL) 型
10 進数 (NUMERIC) 型
DECIMAL(9,0) 型
DECIMAL(11,0) 型
DECIMAL(16,0) 型
DECIMAL(16,0) 型
DECIMAL(p,s) 型
p = min(38、n_expression の精度 +6)
s = n_expression のスケール
小桁実数 (REAL) 型
実数 (FLOAT) 型
実数 (DOUBLE PRECISION) 型
小桁実数 (REAL) 型
実数 (FLOAT) 型
実数 (DOUBLE PRECISION) 型
第 4 章 集約関数
55
SUM
例
次のクエリは、パッケージ入り紅茶製品の売上を合計した値を戻します。
select sum(dollars) as tea_dollars
from class natural join product
natural join sales
where class_type = ’Pkg_tea’;
TEA_DOLLARS
510507.25
56
IBM Red Brick Warehouse: SQL リファレンス ガイド
第 5 章 スカラ関数
RISQL 拡張機能には、1 行ずつ式を処理するスカラ関数が組み込まれています。スカラ
関数は、多項式に使用したり、他のスカラ関数で入れ子にすることができます。第 6 章
で説明する OLAP 関数および RISQL 表示関数も、スカラ関数の引数として使用できま
す。
スカラ関数は、次のカテゴリに分類されます。この章では、各カテゴリについて説明し
ます。
v 条件付きスカラ関数
CASE、COALESCE、DECODE、IFNULL、NULLIF
CASE、COALESCE、NULLIF は ANSI SQL-92 標準に定義されています。
v 数値スカラ関数
ABS、CEIL、DEC、EXP、FLOAT、FLOOR、INT、LN、SIGN、SQRT
v 文字列スカラ関数
CONCAT、LENGTH、LENGTHB、LOWER、LTRIM、POSITION、POSITIONB、
RTRIM、STRING、SUBSTR、SUBSTRB、TRIM、UPPER
v 日付時間スカラ関数
CURRENT_DATE、CURRENT_TIME、CURRENT_TIMESTAMP、DATE、
DATEADD、DATEDIFF、DATENAME、EXTRACT、TIME、TIMESTAMP、TO_CHAR
v CURRENT_USER 関数: 情報スカラ関数
ヒント: クエリで 0 を除数に使用した場合、エラーと NULL のどちらが戻されるかは、
ARITHIGNORE オプションの設定で決まります。 ARITHIGNORE は、
rbw.config ファイルの OPTION ARITHIGNORE を使用してサーバ レベルで
設定するか、SET ARITHIGNORE 文を使用してセッションごとに設定できます
(444 ページを参照してください)。
条件付きスカラ関数
条件付きスカラ関数は次のとおりです。各関数の戻り値は、関数の引数が条件を満たす
かどうかによって決まります。
© Copyright IBM Corp. 1996, 2004
57
58
条件付きスカラ関数
説明
CASE
指定した条件のどれに合致しているかに応じて値を
戻します。
COALESCE
指定した値のうち、NULL でない最初の値を戻しま
す。
DECODE
対象の値に応じて、値を置き換えます。
IFNULL
NULL が存在するかどうかを判定し、値を戻します。
NULLIF
2 つの値を比較し、等しい場合は NULL を戻しま
す。
IBM Red Brick Warehouse: SQL リファレンス ガイド
CASE
CASE
CASE 式は、指定した条件のどれに合致しているかに応じて値を戻します。
構文
CASE 式にはシンプル 形式とサーチ 形式の 2 つがあります。
シンプル形式の CASE 式では、WHEN 句の前に最初の expression を指定します。
WHEN 句には、任意の数の expression と、それに対応する result を指定します。
サーチ形式の CASE 式では、WHEN 句に任意の数の search_conditions と、各
search_conditions に対応する result を指定します。
次に両タイプの CASE 式の構文ダイアグラムを示します。上の WHEN 句はシンプル形
式の CASE 式で、下の WHEN 句はサーチ形式の CASE 式です。
CASE 式:
CASE
expression WHEN expression THEN result
END
ELSE result
WHEN search_condition THEN result
expression
データ型の異なる expression を比較する場合は、正しい暗黙的な変換
が行える必要があります。 expression のデータ型を変換する規則は、
207 ページの「UNION、INTERSECT、EXCEPT 演算子」に示す規則
と同じです。
result
任意の式。データ型の異なる result がある場合は、正しい暗黙的な変
換が行える必要があります。データ型を変換する規則は、207 ページ
の「UNION、INTERSECT、EXCEPT 演算子」に示す規則と同じで
す。result のデータ型は expression のデータ型と同じでなくても構い
ません。 result には、NULL を指定することもできます。ただし、
THEN 句または ELSE 句に NULL でない result を最低 1 つ指定
し、CASE 式の戻り値が不定にならないようにしてください。
search_condition
真、偽、または不明を評価する論理条件を指定します。検索条件の構
文は 44 ページの『検索条件』を参照してください。
結果
シンプル形式の CASE 式は、WHEN 句に指定した各 expression の値を最初の
expression の値と比較します。WHEN 句の expression は、指定した順に評価されます。
比較した結果が等しい場合、CASE 関数はそれに応じた result の値を戻し、処理が終了
します。
サーチ形式の CASE 式は、search_condition を指定した順に評価します。検索条件が真
と評価された場合、CASE 関数はそれに応じた result を戻し、処理が終了します。
第 5 章 スカラ関数
59
CASE
シンプル形式、サーチ形式のどちらも、WHEN 句の条件が 1 つも満たされなければ、
ELSE 句に指定された result の値が戻されます。 ELSE 句を指定しなかった場合のデフ
ォルトの戻り値は NULL です。
使用上の注意
シンプル形式の CASE 式は、DECODE 関数と機能的には同じですが、ANSI SQL-92
標準に準拠している CASE を使用することをお勧めします。
シンプル形式の CASE 式はサーチ形式でも表現できますが、シンプル形式の CASE 式
では最初の expression を一度しか評価しないという最適化が図られます。シンプル形式
の 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
RESULTS
723532.35
756282.05
778795.20
782359.05
次のクエリは、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
60
IBM Red Brick Warehouse: SQL リファレンス ガイド
CASE
YEAR
1998
1999
2000
WEST_REGION
1164414.20
1195795.10
296379.45
OTHER_REGIONS
1876554.45
2084195.95
511010.95
CASE 式の例は、「SQL 自習ガイド」を参照してください。
第 5 章 スカラ関数
61
COALESCE
COALESCE
COALESCE 関数は、NULL でない最初の引数の値を戻します。
COALESCE 関数は、CASE 関数の特殊な用法の省略形として ANSI で定義されたもの
であるため、COALESCE 関数はCASE 関数で表すことができます。
構文
次に COALESCE 関数を使用した式の構文ダイアグラムを示します。
COALESCE 関数:
,
COALESCE (
expression
expression
,
expression
)
2 つの式のデータ型が異なる場合は、正しい暗黙的な変換が行える必
要があります。 expression のデータ型を変換する規則は、207 ページ
に示す UNION 演算の規則と同じです。 2 つ以上の式を指定する必
要があります。
結果
COALESCE 関数は各引数の値を指定した順に評価し、NULL でない最初の引数の値を戻
します。すべての引数が NULL の場合は、COALESCE 関数は NULL を戻します。
例
次の COALESCE 式は、1 つの Date 列をリザルト セットに戻します。
coalesce(orders.close_date, line_items.receive_date) as date
62
IBM Red Brick Warehouse: SQL リファレンス ガイド
DECODE
DECODE
DECODE 関数は、式を比較して他の値に変換します。
ヒント: シンプル形式の CASE 式は、DECODE 関数と機能的には同じですが、ANSI
SQL-92 標準に準拠している CASE を使用することをお勧めします。
構文
次に DECODE 関数を使用した式の構文ダイアグラムを示します。
DECODE 関数:
,
DECODE
(
expression ,
target ,
NULL ,
replacement
)
, 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 も指定してください。
例
次のクエリは、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
第 5 章 スカラ関数
63
DECODE
and sl.prodkey = pr.prodkey
and sl.perkey = pd.perkey
and year = 1998
group by prod_name
PROD_NAME
LA
Aroma Roma
1989
Aroma Sheffield Steel Teapot 51
Aroma Sounds CD
177
Aroma Sounds Cassette
180
Aroma baseball cap
440
Aroma t-shirt
529
Assam Gold Blend
791
Assam Grade A
898
Breakfast Blend
832
Cafe Au Lait
1339
Christmas Sampler
4
Coffee Mug
39
...
city の値が Los Angeles であれば、対応する dollar の値が戻されます。そうでない場
合は、0.0 が戻されます。この DECODE 関数の例における構文の各要素の指定は、次
のとおりです。
v city = expression
v ’Los Angeles’ = target
v dollars = replacement
v 0.0 = default
次のクエリは、クエリから戻される 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
64
RESULTS
723532.35
756282.05
778795.20
782359.05
IBM Red Brick Warehouse: SQL リファレンス ガイド
IFNULL
IFNULL
IFNULL 関数は、式を評価して値の欠落の有無をチェックし、指定した値に置き換えま
す。
IFNULL 関数は、COALESCE 関数の特殊な用法ですが、ANSI SQL-92 標準に準拠して
いる COALESCE を使用することをお勧めします。
構文
次に IFNULL 関数を使用した式の構文ダイアグラムを示します。
IFNULL 関数:
IFNULL
(
expression , substitute
)
expression
expression は、任意のデータ型です。
substitute
expression データ型と互換性のあるデータ型である必要があります。
expression 引数と substitute 引数のデータ型が異なる場合は、正しい
暗黙的な変換が行える必要があります。 expression のデータ型を変換
する規則は 210 ページの『データ型の変換』に示す規則と同じです。
結果
expression が NULL の場合は、substitute が戻されます。 NULL でない場合は、
expression の値が戻されます。
expression と substitute のデータ型が同じ場合は、結果も同じデータ型になります。
expression と substitute のデータ型が異なる場合、結果は暗黙的な変換のデータ型にな
ります。
例
v ifnull(market, ’New City’) - NULL を New City に置き換えます。
v ifnull(dollars, 0.0) - Dollars 列の NULL を 0.0 に置き換えます。
第 5 章 スカラ関数
65
NULLIF
NULLIF
NULLIF 関数は 2 つの式を比較し、値が等しい場合は NULL を戻します。等しくない場
合は、最初の式の値が戻されます。
構文
次に NULLIF 関数を使用した式の構文ダイアグラムを示します。
NULLIF 関数:
NULLIF
(
expression , expression
expression, expression
)
2 つの式のデータ型が異なる場合は、正しい暗黙的
な変換が行える必要があります。 expression のデー
タ型を変換する規則は、207 ページに示す UNION
演算の規則と同じです。
結果
NULLIF 関数は、2 つの式の値が等しければ NULL を戻します。等しくなければ、最初
の式の値を戻します。
使用上の注意
NULLIF 関数を用いて除算を行うクエリで 0 を NULL に置き換えることで、0 で除算が
行われるのを回避できます。これは、SET ARITHIGNORE 文を使用して行うこともで
きます。詳細については、444 ページの『SET ARITHIGNORE、ARITHABORT』を参照
してください。
例
次のクエリは、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
Aroma Sounds
Aroma Sounds
Aroma Sounds
Aroma Sounds
Aroma Sounds
66
CD
CD
CD
CD
Cassette
Cassette
NOT_SJ
Miami
NULL
Atlanta
Los Angeles
Los Angeles
NULL
IBM Red Brick Warehouse: SQL リファレンス ガイド
TOTALS
2883.00
4480.00
4329.00
4087.00
2786.50
2795.50
NULLIF
Aroma Sounds Cassette
Aroma Sounds Cassette
Christmas Sampler
Christmas Sampler
Christmas Sampler
Christmas Sampler
...
Atlanta
Miami
Atlanta
Los Angeles
NULL
Miami
2640.00
3420.50
210.00
270.00
1140.00
300.00
第 5 章 スカラ関数
67
数値スカラ関数
数値スカラ関数は、数値表現式か、数値を表す文字式を処理します。数値スカラ関数は
次のとおりです。
68
数値スカラ関数
説明
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) 型に変換します。
ROUND
指定されている丸め桁位置に基づいて丸められた数
値を戻します。
SIGN
数値表現式の符号を戻します。
SQRT
関数引数の平方根を戻します。
IBM Red Brick Warehouse: SQL リファレンス ガイド
ABS
ABS
ABS 関数は、数値表現式の絶対値を戻します。
構文
次に ABS 関数を使用した式の構文ダイアグラムを示します。
ABS 関数:
ABS
(
expression
expression
)
数値データ型または文字データ型を使用できます。文字列式の場合
は、数値を表す式である必要があります。
’19.2’ - 有効
’RAJ’- 無効
結果
引数のデータ型が、小桁実数 (REAL) 型、実数 (FLOAT) 型、実数 (DOUBLE
PRECISION) 型、10 進数 (DECIMAL) 型、10 進数 (NUMERIC) 型のいずれかである場
合は、入力したデータ型で絶対値を計算して戻します。
引数のデータ型が、小桁整数 (TINYINT) 型、小桁整数 (SMALLINT) 型、小桁整数
(TINYINT) 型の場合は、絶対値を計算して整数で戻します。
引数が数値を表す文字列である場合は、その値を倍精度の浮動小数点数値に変換して絶
対値を計算し、倍精度の浮動小数点数値で戻します。数値を表さない文字列の場合は、
エラーになります。引数が NULL の場合は、NULL が戻されます。
例
次のクエリは、10 進数 (DECIMAL) 型列 (numvalue) の絶対値を抽出し、文字
(CHARACTER) 型列 (stringnum) の絶対値に加算します。
select numvalue, stringnum, (abs(numvalue) + abs(stringnum))
as total from table_1
numvalue
-9.45
-2.05
stringnum
8.30
-8.05
total
17.75
10.10
第 5 章 スカラ関数
69
CEIL
CEIL
CEIL 関数は、引数の値を下回らない最小の整数値を戻します。
構文
次に CEIL 関数を使用した式の構文ダイアグラムを示します。
CEIL 関数:
CEIL
( expression
expression
)
数値データ型または文字データ型の引数を使用できます。文字列式の
場合は、数値を表す式である必要があります。
’19.2’ - 有効
’RAJ’- 無効
結果
引数のデータ型が、小桁実数 (REAL) 型、実数 (FLOAT) 型、実数 (DOUBLE
PRECISION) 型、10 進数 (DECIMAL) 型、10 進数 (NUMERIC) 型の場合は、入力した
データ型で CEIL を計算して戻します。
引数のデータ型が整数 (INTEGER) 型、小桁整数 (SMALLINT) 型、小桁整数
(TINYINT) 型の場合は、入力したデータ型を変えずに引数の値をそのまま戻します。
引数が数値を表す文字列の場合は、その値を倍精度の浮動小数点数値に変換して CEIL
を計算し、倍精度の浮動小数点数値で戻します。数値を表さない文字列の場合は、エラ
ーになります。
引数が NULL の場合は、NULL が戻されます。
例
次のクエリは、品目別価格を算出し、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%’
PROD_NAME
Xalapa Lapa
Xalapa Lapa
Xalapa Lapa
Xalapa Lapa
Xalapa Lapa
70
STORE_NAME
Beaches Brew
Beans of Boston
Coffee Brewers
Coffee Connection
Cupertino Coffee Supply
IBM Red Brick Warehouse: SQL リファレンス ガイド
PRICE
9
9
9
9
9
CEIL
Xalapa
Xalapa
Xalapa
Xalapa
Xalapa
Xalapa
Xalapa
Xalapa
Xalapa
Xalapa
Xalapa
Xalapa
Xalapa
Xalapa
Xalapa
Xalapa
Lapa
Lapa
Lapa
Lapa
Lapa
Lapa
Lapa
Lapa
Lapa
Lapa
Lapa
Lapa
Lapa
Lapa
Lapa
Lapa
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
7
8
9
9
9
8
9
9
9
9
9
9
9
9
9
第 5 章 スカラ関数
71
DEC
DEC
DEC 関数は、指定した値を 10 進数 (DECIMAL) 型の値に変換します。
構文
次に DEC 関数を使用した式の構文ダイアグラムを示します。
DEC 関数:
DEC
DECIMAL
(
expression
)
, precision
, scale
expression
数値データ型または文字データ型の式を使用できますが、数値を表す
式である必要があります。
’19.2’ - 有効
’RAJ’- 無効
precision
変換後の DECIMAL 値の精度を指定します。指定できる範囲は 1 か
ら 38 です。デフォルトは 9 です。
scale
変換後の DECIMAL 値のスケールを指定します。指定できる範囲は、
0 から precision に指定した値までです。デフォルト値は 0 です。
結果
この関数は 10 進数 (DECIMAL) 型 (precision、scale) で指定した値を戻します。引数
が NULL の場合は、NULL が戻されます。数値を表す文字 (CHARACTER) 型または可
変長文字 (VARCHAR) 型の式を引数として指定した場合は、 10 進数 (DECIMAL) 型
に変換されます。数値を表さない式の場合は、エラーになります。
expression に指定した値が大きすぎるために、有効桁 (小数点より左の桁) を切り捨てな
いと 10 進数 (DECIMAL) 型 (precision, scale) で表現できない場合は、「out of range
(有効範囲外)」エラーになります。小数点より右の桁を切り捨てないと、指定した 10
進数 (DECIMAL) 型 (precision、scale) で表現できない場合は、エラーになりません。
例
次の式は、10 進数値 40000.00 を戻します。
DEC(’40E3’,7,2)
SELECT 文での DEC 関数の例は、「SQL 自習ガイド」を参照してください。
72
IBM Red Brick Warehouse: SQL リファレンス ガイド
EXP
EXP
EXP 関数は、関数引数の指数値を戻します。つまり、EXP(x) は ex=y となる y の値を
戻します (e = 2.71828183)。
構文
次に EXP 関数を使用した式の構文ダイアグラムを示します。
EXP 関数:
EXP
(
expression
expression
)
expression のデータ型は数値を表すものである必要があります。
’19.2’ - 有効
-8.634E2 - 有効
’RAJ’- 無効
結果
この関数は 実数 (DOUBLE PRECISION) 型の値を戻します。
expression のデータ型が小桁整数 (TINYINT) 型、小桁整数 (SMALLINT) 型、整数
(INTEGER) 型、小桁実数 (REAL) 型、実数 (FLOAT) 型、10 進数 (DECIMAL) 型、10
進数 (NUMERIC) 型のいずれかである場合は実数 (DOUBLE PRECISION) 型に変換さ
れます。
expression のデータ型が、数値を表す CHARACTER または VARCHAR 式の場合は、
EXP 関数は、この値を倍精度の浮動小数点数値に変換し、指数値を計算し、倍精度の指
数値として戻します。文字列が数値を表していない場合はサーバがエラー メッセージを
戻します。引数が NULL の場合は、NULL が戻されます。
結果がオーバーフローして、実数 (DOUBLE PRECISION) 型で表現できない場合は、エ
ラーになります。
例
次の式は、e の 2 乗である 7.389056 を戻します (e = 2.71828183)。
EXP(2.0)
第 5 章 スカラ関数
73
FLOAT
FLOAT
FLOAT 関数は、指定した値を倍精度の浮動小数点数値に変換します。
構文
次に FLOAT 関数を使用した式の構文ダイアグラムを示します。
FLOAT 関数:
FLOAT
expression
(
expression
)
数値データ型または文字データ型の式を使用できますが、数値を表す
式である必要があります。
’19.2’ - 有効
’RAJ’- 無効
結果
この関数は実数 (DOUBLE PRECISION) 型の値を戻します。引数が NULL の場合は、
NULL が戻されます。
数値を表す文字 (CHARACTER) 型または可変長文字 (VARCHAR) 型の式を引数として
指定した場合は、浮動小数点数値に変換されます。または数値を表さない式の場合は、
エラーになります。
引数のデータ型が 小桁整数 (TINYINT) 型、整数 (INTEGER) 型、小桁実数 (REAL)
型、実数 (FLOAT) 型、10 進数 (DECIMAL) 型、10 進数 (NUMERIC) 型のいずれかの
場合には、実数 (DOUBLE PRECISION) 型の値に変換されます。
結果がオーバーフローして、実数 (DOUBLE PRECISION) 型で表現できない場合は、エ
ラーになります。
ヒント: 浮動小数点数値のリザルト セット内での表示方法は、クライアント ツールの
フォーマット設定機能によって異なります。たとえば、RISQL レポーター の
ユーザは SET COLUMN column_name FORMAT 文を使用して、表示フォーマ
ットを EXPONENTIAL に設定できます。
例
次の例は、指数表記が指定された場合、浮動小数点値 -1.969893967E+07 を戻します。
float(’-19698939.67’)
74
IBM Red Brick Warehouse: SQL リファレンス ガイド
FLOOR
FLOOR
FLOOR 関数は、引数の値を上回らない最大の整数値を戻します。
構文
次に FLOOR 関数を使用した式の構文ダイアグラムを示します。
FLOOR 関数:
FLOOR
(
expression
expression
)
数値データ型または文字データ型の式を使用できますが、数値を表す
式である必要があります。
’19.2’ - 有効
’RAJ’- 無効
結果
引数のデータ型が、小桁実数 (REAL) 型、実数 (FLOAT) 型、実数 (DOUBLE
PRECISION) 型、10 進数 (DECIMAL) 型、10 進数 (NUMERIC) 型の場合は、入力した
データ型で FLOOR を計算して戻します。
引数のデータ型が、整数 (INTEGER) 型、小桁整数 (SMALLINT) 型、小桁整数
(TINYINT) 型の場合は、入力したデータ型を変えずに引数の値をそのまま戻します。
引数が数値を表す文字列の場合は、その値を倍精度の浮動小数点数値に変換して
FLOOR を計算し、倍精度の浮動小数点数値で戻します。数値を表さない文字列の場合
は、エラーになります。
引数が NULL の場合は、NULL が戻されます。
例
次のクエリは、品目別価格を算出し、それを上回らない最大の整数値に切り捨てます。
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
STORE_NAME
Instant Coffee
Moroccan Moods
PRICE
8
9
第 5 章 スカラ関数
75
INT
INT
INT 関数は、指定した数値列を整数値に変換します。
構文
次に INT 関数を使用した式の構文ダイアグラムを示します。
INT 関数:
INT
INTEGER
expression
(
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’)
次のクエリは、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
76
IBM Red Brick Warehouse: SQL リファレンス ガイド
INT
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 章 スカラ関数
77
LN
LN
LN 関数は、関数引数の自然対数を戻します。つまり、LN(y) は ex=y となる the value
of x の値を戻します (e=2.71828183)。
構文
次に LN 関数を使用した式の構文ダイアグラムを示します。
LN 関数:
LN
( expression
expression
)
データ型は数値を表すものである必要があります。
’19.2’ - 有効
’RAJ’- 無効
結果
この関数は実数 (DOUBLE PRECISION) 型の値を戻します。引数が NULL の場合は、
NULL が戻されます。算出値の長さが実数 (DOUBLE PRECISION) 型の長さを超える場
合は、「out of range (有効範囲外)」エラーになります。
引数の値のデータ型が小桁整数 (TINYINT) 型、小桁整数 (SMALLINT) 型、整数
(INTEGER) 型、小桁実数 (REAL) 型、実数 (FLOAT) 型、10 進数 (DECIMAL) 型、10
進数 (NUMERIC) 型のいずれかである場合は実数 (DOUBLE PRECISION) 型に変換さ
れます。
引数が 0 または負のときの動作は、ゼロ除算処理と同様、ARITHIGNORE または
ARITHABORT の設定に従います。 ARITHIGNORE が on (または ARITHABORT が
off) の場合、負の引数の LN を算出した結果として、サーバは NULL を戻します。
ARITHIGNORE が off (または ARITHABORT が on) の場合、サーバはエラー メッセ
ージを生成します。 ARITHIGNORE および ARITHABORT の設定の詳細は、444 ペー
ジを参照してください。
引数が正の数を表す文字式のときは、それを倍精度の浮動小数点数に変換します。それ
以外の場合は、サーバがエラー メッセージを戻します。
例
次の式は、3.22 を戻します (e3.22 = 25; e = 2.71828183)。
ln(25.0)
78
IBM Red Brick Warehouse: SQL リファレンス ガイド
REAL
REAL
REAL 関数は、指定した値を小桁実数 (REAL) 型の値に変換します。
構文
次に REAL 関数を使用した式の構文ダイアグラムを示します。
REAL 関数:
REAL
(
expression
expression
)
数値データ型または文字データ型の式を使用できますが、数値を表す
式である必要があります。
’19.2’ - 有効
’RAJ’- 無効
結果
この関数は小桁実数 (REAL) 型の値を戻します。引数が NULL の場合は、NULL が戻さ
れます。
数値を表す文字 (CHARACTER) 型または可変長文字 (VARCHAR) 型の式を引数として
指定した場合は、小桁実数 (REAL) 型に変換されます。または数値を表さない式の場合
は、エラーになります。
引数のデータ型が小桁整数 (TINYINT) 型、小桁整数 (SMALLINT) 型、整数
(INTEGER) 型、実数 (FLOAT) 型、小桁実数 (REAL) 型、10 進数 (DECIMAL) 型、10
進数 (NUMERIC) 型のいずれかである場合は小桁実数 (REAL) 型に変換されます。
結果がオーバーフローして、小桁実数 (REAL) 型で表現できない場合は、エラーになり
ます。
例
次の式は、74 ページで述べたように指数表記を指定した場合、浮動小数点数値の 1.9698940E+07 を戻します。
real(’-19698939.67’)
第 5 章 スカラ関数
79
ROUND
ROUND
ROUND 関数は、数値または式を受け入れ、指定された丸め桁位置に基づいて丸めた値
を戻します。
構文
次に ROUND 関数を使用した式の構文ダイアグラムを示します。
ROUND 関数:
ROUND
(
expression1, expression2
)
expression1
関数の処理対象となる列、値、または式を定義します。データ型は数
値データ型でなければなりません。
expression2
丸め桁位置を定義します。正の整数または負の整数のいずれかを指定
してください。正の整数 (1、2 ...) は、小数点以下の桁の位置を表し
ます。ゼロは小数点自体を表します。負の整数 (-1、-2 ...) は、整数
部の桁の位置を表します。
結果
ROUND 関数は 10 進数 (DECIMAL) 型の値を戻します。expression1 が NULL の場合
は、NULL が戻されます。expression1 が 数値でない場合は、エラーが戻されます。
expression2 が 整数でない場合は、エラーが戻されます。
ほとんどの場合、結果の長さおよびデータ型は、1 番目の引数の長さおよびデータ型と
同じです。ただし、この規則には次の 2 つの例外があります。
v expression1 が10 進数 (DECIMAL) 型であり、精度が 38 未満の場合には、10 進数
(DECIMAL) 型の精度が 1 増加します。たとえば expression1 の精度が 5 の
ROUND (123.43, -2) では、データ型 DEC(6,2) の値 100.00 が戻されます。ただし、
expression1 のデータ型が DEC(38,2) の場合には、戻されるデータ型も DEC(38,2) で
す。
v expression1 のデータ型が整数 (INTEGER) 型の場合には、結果のデータ型はシリアル
(SERIAL) 型になります。
例
テーブル round2 には 1 つの 10 進数 (DECIMAL) 型列 col1 があり、この列には次の
2 つの値が格納されています。
123456.78900
1500.50000
次に示す一連のクエリは、expression1 に col1 を指定した ROUND 関数の動作を示しま
す。 2 番目の引数には、3 から -5 の 9 つの値が使用されています。
80
IBM Red Brick Warehouse: SQL リファレンス ガイド
ROUND
RISQL> select col1, round(col1, 3) from round2;
COL1
123456.78900
123456.78900
1500.50000
1500.50000
RISQL> select col1, round(col1, 2) from round2;
COL1
123456.78900
123456.79000
1500.50000
1500.50000
RISQL> select col1, round(col1, 1) from round2;
COL1
123456.78900
123456.80000
1500.50000
1500.50000
RISQL> select col1, round(col1, 0) from round2;
COL1
123456.78900
123457.00000
1500.50000
1501.00000
RISQL> select col1, round(col1, -1) from round2;
COL1
123456.78900
123460.00000
1500.50000
1500.00000
RISQL> select col1, round(col1, -2) from round2;
COL1
123456.78900
123500.00000
1500.50000
1500.00000
RISQL> select col1, round(col1, -3) from round2;
COL1
123456.78900
123000.00000
1500.50000
2000.00000
RISQL> select col1, round(col1, -4) from round2;
COL1
123456.78900
120000.00000
1500.50000
0.00000
RISQL> select col1, round(col1, -5) from round2;
COL1
123456.78900
100000.00000
1500.50000
0.00000
次の例では、expression1 に算術式を指定した場合の ROUND 関数の動作を示します。
RISQL> select round(col1/10, 0) from round2;
12346.000000000
150.000000000
第 5 章 スカラ関数
81
SIGN
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
82
sign(numvalue)
1
-1
0
IBM Red Brick Warehouse: SQL リファレンス ガイド
SQRT
SQRT
SQRT 関数は、関数引数の平方根を戻します。
構文
次に SQRT 関数を使用した式の構文ダイアグラムを示します。
SQRT 関数:
SQRT
(
expression
expression
)
データ型は数値を表すものである必要があります。
’19.2’ - 有効
’RAJ’- 無効
結果
この関数は実数 (DOUBLE PRECISION) 型の値を戻します。引数が NULL の場合は、
NULL が戻されます。算出値の長さが実数 (DOUBLE PRECISION) 型の長さを超える場
合は、「out of range (有効範囲外)」エラーになります。
引数の値のデータ型が小桁整数 (TINYINT) 型、小桁整数 (SMALLINT) 型、整数
(INTEGER) 型、小桁実数 (REAL) 型、実数 (FLOAT) 型、10 進数 (DECIMAL) 型、10
進数 (NUMERIC) 型のいずれかである場合は実数 (DOUBLE PRECISION) 型に変換さ
れます。
引数が負のときの動作は、ゼロ除算処理と同様、ARITHIGNORE または ARITHABORT
の設定に従います。 ARITHIGNORE が on (または ARITHABORT が off) の場合、負
の引数の平方根を算出した結果として、サーバは NULL を戻します。 ARITHIGNORE
が off (または ARITHABORT が on) の場合、サーバはエラー メッセージを生成しま
す。 ARITHIGNORE および ARITHABORT の設定の詳細は、 439 ページの『第 9 章
SET 文』を参照してください。
引数が数値を表す文字式の場合、SQRT 関数は引数を倍精度の浮動小数点数に変換後、
平方根の値を計算し、結果を倍精度の値として戻します。文字列が数値を表していない
場合はサーバがエラー メッセージを戻します。
例
次の式は、5.000 を戻します。
sqrt(25.0)
第 5 章 スカラ関数
83
統計関数マクロ
次のマクロは統計上使用される関数です。ほとんどが EXP、LN、SQRT スカラ関数を
使用して作成されています。
v 累乗
v 対数 (log)
v 常用対数 (log 10)
v 常用対数 (log 10)
– 祖集団値
– 標準偏差推定サンプル
v 分散
– 祖集団値
– 推定祖集団分散の不偏サンプル
これらのマクロについて説明します。
Power
次のマクロは 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)) );
Log10
次のマクロは 10 を底とする数値 x の対数を計算します。
create macro log10(x) as
( ln((x)) / ln(10) );
祖集団の標準偏差
祖集団値の標準偏差は次のように計算されます。
σ = [Â(xi-m)2/N]1/2
m は祖集団の中間値を、N は祖集団の規模を表します。
次のマクロは、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))) );
84
IBM Red Brick Warehouse: SQL リファレンス ガイド
祖集団の標準偏差推定サンプル
祖集団の標準偏差推定サンプルは次のように計算されます。
σ = [Â(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 はサンプルの規模を表します。
次のマクロは、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″ の平均売上の標準偏差を計算します。
第 5 章 スカラ関数
85
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
Beaches Brew
Cupertino Coffee Supply
Instant Coffee
Java Judy’s
Roasters, Los Gatos
San Jose Roasting Company
SALES
1159.50
628.50
717.50
595.50
911.00
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
文字列スカラ関数
数値データ型の値を文字列に変換する STRING 関数を除き、文字列スカラ関数は文字
列を処理します。シングルバイトおよびマルチバイトの文字処理をサポートします。
文字列スカラ関数は次のとおりです。
86
文字列スカラ関数
説明
CONCAT
文字列を連結します。
LENGTH
文字列内の文字数を計算します。
LENGTHB
文字列のバイト数を計算します。
LOWER
文字列を小文字に変換します。
LTRIM
先頭の空白を削除します。
POSITION
検索文字列での文字の論理位置を判断します。
POSITIONB
検索文字列での文字のバイト位置を判断します。
RTRIM
末尾の空白を削除します。
STRING
数値データ型を文字 (CHARACTER) 型に変換しま
す。
SUBSTR
部分文字列を抽出します。
SUBSTRB
文字列から部分文字列をバイト数で抽出します。
TRIM
先頭と末尾の空白を削除します。
IBM Red Brick Warehouse: SQL リファレンス ガイド
UPPER
文字列を大文字に変換します。
注: 次の文字列関数の実行結果のデータ型は文字 (VARCHAR) 型になります。
v CONCAT
v LTRIM
v RIGHT
v RTRIM
v SUBSTR
v SUBSTRB
v TRIM
第 5 章 スカラ関数
87
CONCAT
CONCAT
CONCAT 関数は、文字列を連結します。
構文
次に CONCAT 関数を使用した式の構文ダイアグラムを示します。
CONCAT 関数:
,
CONCAT
( c_expression
c_expressions
,
c_expression
)
文字データ型の式です。この引数は、シングルバイトとマルチバイト
のどちらでも、任意の数を指定できます。
結果
すべての引数が NULL でない文字式の場合は、各引数を連結した文字列が戻されま
す。引数に NULL がある場合は、NULL が戻されます。
戻される文字列の最大長は、各引数の最大バイト数の合計になります。ただし、コンパ
イル時に計算される時点でこの長さが 1,024 バイトを超えることはできません。コンパ
イル時の引数の長さは、CREATE TABLE 文で定義されている列の長さに対応します。
たとえば、列を CHAR(1024) または VARCHAR(1024) として定義している場合、評価
結果として 1 つ以上の文字を生成する別の式にこの列を連結しようとすると、エラーが
戻されます。これは、コンパイル時の結果の最大長が 1,025 文字であるためです。この
問題を回避するには、SUBSTR 関数を使用して文字列長を減らします。
RISQL> create table t1(col1 char(1024));
RISQL> insert into t1 values(’b’);
**INFORMATION** (209) 1 行を挿入しました。
RISQL> select concat(’a’,col1) from t1;
**ERROR** (1626) CONCAT 関数から最大長 1024 を超える 1025 桁の文字列が戻されました。
RISQL> select concat(’a’, substr(col1,1,1)) as col1 from t1;
COL1
ab
TRIM、LTRIM、および RTRIM 関数を使用しても SUBSTR と同じ結果を得ることはで
きません。これらの TRIM 関数では空白文字の位置が変更されますが、空白文字は削除
されません。
例
次のクエリは、4 つの異なる列の文字列を連結します。
select concat(hq_city, ’ ’, hq_state, ’ ’, district, ’ ’,
region)
from market
where region = ’West’ or region = ’North’
88
IBM Red Brick Warehouse: SQL リファレンス ガイド
CONCAT
New York
Philadelphia
Boston
Hartford
San Jose
San Francisco
...
NY
PA
MA
CT
CA
CA
New York
North
New York
North
Boston
North
Boston
North
San Francisco West
San Francisco West
第 5 章 スカラ関数
89
LENGTH
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
CHAR_LEN
20
20
20
20
20
20
20
20
次のクエリは、Market テーブル内で最も長い地区名を戻します。 TRIM 関数を使用し
ているため、文字列の最大の長さではなく、それぞれの地区名を形成する実際の文字数
が考慮されます。
90
IBM Red Brick Warehouse: SQL リファレンス ガイド
LENGTH
select distinct district from market
where length(trim(district)) =
(select max(length(trim(district))) from market)
DISTRICT
San Francisco
第 5 章 スカラ関数
91
LENGTHB
LENGTHB
LENGTHB 関数は文字列内のバイト数を計算します。
構文
次に LENGTH 関数を使用した式の構文ダイアグラムを示します。
LENGTHB 関数:
LENGTHB
c_expression
(
c_expression
)
文字を表すデータ型である必要があります。
結果
引数が NULL でない場合、c_expression のバイト数を指定する整数を戻します。引数が
NULL の場合、結果は NULL になります。
LENGTHB 関数が戻すのは文字列内のバイト数であり、文字数ではありません。文字列
内の文字数に戻る場合は、LENGTH 関数を使用します。
例
可変バイト長のマルチバイト コード セットを使用して次のクエリを実行すると、文字
列中のバイト数が戻されます。この文字列で、0 から 9 の数字は 1 バイト長、Xx およ
び Yy 文字は 2 バイト長、Zzz 文字は 3 バイト長です。
select lengthb (’12XxYyZzz3’) as ’length in bytes’ from test
10
LENGTH 関数は、文字列中の文字数である 6 を戻します。
92
IBM Red Brick Warehouse: SQL リファレンス ガイド
LOWER
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 章 スカラ関数
93
LTRIM
LTRIM
LTRIM 関数は、文字列の先頭の空白の位置を移動します。マルチバイトの空白は、シ
ングルバイトの空白と同じ方法で処理されます。
構文
次に LTRIM 関数を使用した式の構文ダイアグラムを示します。
LTRIM 関数:
LTRIM
(
c_expression
c_expression
)
文字を表すデータ型である必要があります。
結果
引数が NULL でない場合は、文字列から先頭の空白が削除されます。 NULL の場合
は、NULL が戻されます。
結果の最大長は、引数の最大長になります。
使用上の注意
CHAR 列と出力データは常に固定長であるため、指定の長さを満たすために空白が追加
されます。 CHAR 列または出力列幅の短縮に LTRIM は使用できません。
例
次の式は、Market 列から先頭の空白を削除します。
ltrim(market)
次のクエリは、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
94
Atlanta
Atlanta
New Orleans
New Orleans
New York
New York
Boston
Boston
IBM Red Brick Warehouse: SQL リファレンス ガイド
POSITION
POSITION
POSITION 関数はソース文字列を処理し、検索文字列内の文字の開始位置を示す数値を
戻します。たとえば、ソース文字列が ‘David Banner’ で検索文字列が ‘Banner’ の場
合、POSITION 関数は、‘David Banner’ 内の ‘Banner’ の開始位置を示す 7 を戻しま
す。
構文
次に POSITION 関数を使用した式の構文ダイアグラムを示します。
POSITION 関数:
POSITION (
c_expression
c_expression , c_expression
)
最初の c_expression は検索文字列を指定します。 2 番目の
c_expression はソース文字列を指定します。c_expression には、1,024
文字以下のシングルバイト文字またはマルチバイト文字で構成される
文字データ型を使用できます。
結果
POSITION 関数には、次の 5 つの結果があります。
v 最初の c_expression を見つけた場合、この関数は 2 番目の c_expression 内での最初
の c_expression の開始位置を示す整数を戻します。
v 最初の c_expression が見つからない場合、結果は 0 です。
v 最初の c_expression の長さが 0 の場合、結果は 1 です。
v 最初の c_expression が NULL の場合、エラー メッセージが戻されます。
v 2 番目の c_expression が NULL の場合、結果は 0 です。
例
次の 2 つの例では、検索文字列内での文字の開始位置を示す数値が戻されます。
次の例で、クエリは「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 を戻します。
第 5 章 スカラ関数
95
POSITION
select NAME, position(’Express’, name) as NAME_POS
from supplier
where NAME like ’E%’;
NAME
Espresso Express
96
NAME_POS
10
IBM Red Brick Warehouse: SQL リファレンス ガイド
POSITIONB
POSITIONB
POSITIONB 関数はソース文字列を処理し、検索文字列内の文字の開始バイト位置を示
す数値を戻します。
構文
次に POSITIONB 関数を使用した式の構文ダイアグラムを示します。
POSITIONB 関数:
POSITIONB (
c_expression
c_expression , c_expression
)
最初の c_expression は検索文字列を指定します。 2 番目の
c_expression はソース文字列を指定します。c_expression には、1,024
文字以下のシングルバイト文字またはマルチバイト文字で構成される
文字データ型を使用できます。
結果
POSITIONB 関数には、次の 5 つの結果があります。
v 最初の c_expression を見つけた場合、この関数は 2 番目の c_expression 内での最初
の c_expression の開始バイト位置を示す整数を戻します。
v 最初の c_expression が見つからない場合、結果は 0 です。
v 最初の c_expression の長さが 0 の場合、結果は 1 です。
v 最初の c_expression が NULL の場合、エラー メッセージが戻されます。
v 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 章 スカラ関数
97
RTRIM
RTRIM
RTRIM 関数は、文字列の末尾の空白の位置を移動します。マルチバイトの空白は、シ
ングルバイトの空白と同じ方法で処理されます。
構文
次に RTRIM 関数を使用した式の構文ダイアグラムを示します。
RTRIM 関数:
RTRIM
(
c_expression
c_expression
)
文字を表すデータ型である必要があります。
結果
引数が NULL でない場合は、文字列から末尾の空白が削除されます。 NULL の場合
は、NULL が戻されます。
結果の最大長は、引数の最大長になります。
使用上の注意
文字 (CHAR) 型列と出力データは常に固定長であるため、指定の長さを満たすために空
白が追加されます。 CHAR 列または出力列幅の短縮に RTRIM は使用できません。
例
次の式は、Market 列から末尾の空白を削除します。
rtrim(market)
次のクエリは、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
98
IBM Red Brick Warehouse: SQL リファレンス ガイド
STRING
STRING
STRING 関数は、10 進数 (NUMERIC) 型または日時 (DATETIME) 型の値を文字列に
変換します。
構文
次に STRING 関数を使用した式の構文ダイアグラムを示します。
STRING 関数:
STRING
(
expression
)
, length
, scale
expression
10 進数 (NUMERIC) 型または日時 (DATETIME) 型です。 expression
が NULL でない場合は、文字列が戻されます。NULL の場合は、
NULL が戻されます。
length
戻り値の最大文字数を指定します。 NULL は使用できません。整数
定数または整数式を指定するか、指定を省略できます。この引数を省
略した場合は、次の表に示すように、expression のデータ型によって
戻り値の文字数が決まります。
データ型
戻り値のデフォルト文字数
TINYINT
SMALLINT
INTEGER
SERIAL
DECIMAL、NUMERIC
4 文字
6 文字
11 文字
11 文字
(精度 + 2) 文字
または
(精度 + 3) 文字
戻り値が < 0 でスケール = 精度の場合
23 文字
REAL、FLOAT、
DOUBLE PRECISION
DATE
TIME
TIMESTAMP
10 文字 (8 桁、区切り記号 2 桁)
15 文字 (12 桁、区切り記号 3 桁)
26 文字 (20 桁、区切り記号 5 桁、空白 1 桁)
データ型戻り値の値を表すのに必要な桁数が、STRING 関数が戻す文
字数を超える場合は、結果が切り捨てられます。たとえば、指定した
データ型に対し、戻り値のデフォルト文字数が不足している場合や、
指定した length 引数の値が小さい場合です。
特に、実数 (FLOAT) 型の式には注意が必要です。 STRING 関数は指
数表記を使用しないため、length 引数を指定しないと、1E35 のよう
第 5 章 スカラ関数
99
STRING
な値は切り捨てられます。これは、実数 (FLOAT) 型の式に対する戻
り値のデフォルトが、23 文字のためです。
複数の列を使用した数値表現式を指定した場合は、結果が浮動小数点
数値に変換されます。 length 引数が式の場合は、行ごとに式の値を切
り捨てた整数を使用して第 1 引数のフォーマットを設定します。
length が短すぎても、エラー メッセージや警告メッセージを表示せず
に結果が切り捨てられます。
ヒント: STRING 関数は、数値表現式のすぐ左にあるマイナス符号
(-)、プラス符号 (+)、空白などの桁を文字数にカウントしま
す。このため、次の式は、1234 ではなく 123 と評価されま
す。
string(1234, 4)
scale
10 進数 (NUMERIC) 型の場合は小数点以下の桁数、時刻 (TIME) 型
およびタイムスタンプ (TIMESTAMP) 型の場合は秒未満の桁数を指定
します。 scale の値は (length - 3) 以下とし、NULL は使用できませ
ん。日付 (DATE) 型の式は、スケールが無視されます。
例
v 次の式は、小数点以下の桁数が 2 で、10 文字以内の文字列を戻します。
string(dollars/quantity, 10,2)
v 次の式は、1999-11-07 のように、現在の日付を表す文字列を戻します。
string (current_date)
v 次の式は、2000 のように、現在の日付から年の部分のみを戻します。
string (current_date, 4)
v 次の式は、現在のタイムスタンプを表す文字列を戻します。
string (current_timestamp)
たとえば、次のようになります。
’2000-11-07 14:50:40.710474’
v 次の式は、秒未満を 4 桁とする現在のタイムスタンプを表す文字列を戻します。
string (current_timestamp, 26, 4)
たとえば、次のようになります。
’2000-11-07 14:50:40.7104’
v 次のクエリは、STRING 関数を使用して、Price 列の値を小数第 2 位まで算出しま
す。 STRING 関数を使用しないと、Price 列の値は桁数の多い数値データ型で戻され
ます。
100
IBM Red Brick Warehouse: SQL リファレンス ガイド
STRING
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 自習ガイド」を参照し
てください。
第 5 章 スカラ関数
101
SUBSTR
SUBSTR
SUBSTR 関数は、文字列から部分文字列を抽出します。
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 関数:
SUBSTR
(
c_expression , start
)
, length
c_expression
文字を表すデータ型である必要があります。
start
第 1 引数の部分文字列の開始文字の位置を指定する整数式です。先頭
位置は 1 です。
length
抽出する文字数を指定します。 length を指定する場合は、NULL で
ない整数式か、整数定数を使用できます。 length が整数定数の場合
は、第 1 引数の長さより大きい値は指定できません。
結果
与えられた条件に応じて、次のいずれかの結果が substr 関数に戻されます。
v 第 1 引数が NULL でなければ、start で指定した位置で始まり、length で指定した
長さの部分文字列が戻されます。 length を指定しなかった場合は、start から
c_expression の終わりまでの部分文字列が戻されます。
v 1 番目の引数が NULL の場合は、NULL が戻されます。
v start 引数が 1 未満か NULL であれば、エラーになります。 start が第 1 引数の長
さより大きい場合は、長さ 0 の文字列が戻されます。
v length が (c_expression の長さ - start) +1 より長ければ、(c_expression の長さ start) +1 文字のみが戻されます。
102
IBM Red Brick Warehouse: SQL リファレンス ガイド
SUBSTR
末尾の空白文字の処理
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 章 スカラ関数
103
SUBSTRB
SUBSTRB
SUBSTRB 関数は、文字列からバイト単位で部分文字列を抽出します。
構文
次に SUBSTRB 関数を使用した式の構文ダイアグラムを示します。
SUBSTRB 関数:
SUBSTRB
(
c_expression , start
)
, length
c_expression
文字を表すデータ型である必要があります。
start
第 1 引数の部分文字列の開始文字の位置を指定する整数式です。先頭
位置は 1 です。
length
抽出するバイト数を指定します。 length を指定する場合は、NULL
でない整数式か、整数定数を使用できます。 length が整数定数の場合
は、c_expression の長さより大きい値は指定できません。
結果
与えられた条件に応じて、次のいずれかの結果が substrb 関数に戻されます。
v 第 1 引数が NULL でなければ、start で指定した位置で始まり、length で指定した
バイト数の部分文字列が戻されます。 length を指定しなかった場合は、start から
c_expression の終わりまでの部分文字列が戻されます。
警告: SUBSTRB は文字ではなく、バイトを戻すため、マルチバイト文字の途中の位
置を指定する start や lentgh 引数を指定できます。この場合は、シングルバイ
トを含む結果が戻されます。
v 1 番目の引数が NULL の場合は、NULL が戻されます。
v start 引数が 1 未満か NULL であれば、エラーになります。 start が第 1 引数の長
さより大きい場合は、長さ 0 の文字列が戻されます。
v length が (c_expression の長さ - start) +1 より長ければ、(c_expression の長さ start) +1 バイトのみが戻されます。
例
可変バイト長のマルチバイト コード セットを使用して次のクエリを実行すると、文字
列中のバイト数が戻されます。この文字列で、0 から 9 の数字は 1 バイト長、Xx およ
び Yy 文字は 2 バイト長、Zzz 文字は 3 バイト長です。
select substrb (’12XxYyZzz3’,3,4) from test;
XxYy
SUBSTR 関数では、次の結果が戻されます。
select substr (’12XxYyZzz3’,3,4) from test;
XxYyZzz3
104
IBM Red Brick Warehouse: SQL リファレンス ガイド
SUBSTRB
次のクエリは、マルチバイト文字の途中の位置を指定する length 引数を含む SUBSTRB
です。
select substrb (’12XxYyZzz3’,3,3) from test;
Xx<blank>
マルチバイト文字の最初のバイト Yy ではなく、シングルバイトの空白が戻されます。
第 5 章 スカラ関数
105
TRIM
TRIM
TRIM 関数は、文字列の先頭と末尾の空白の位置を移動します。マルチバイトの空白
は、シングルバイトの空白と同じ方法で処理されます。
構文
次に TRIM 関数を使用した式の構文ダイアグラムを示します。
TRIM 関数:
TRIM
( c_expression
)
, ’Both’
, ’Right’
, ’Left’
c_expression
文字を表すデータ型である必要があります。
Both, Right, Left
Both、Right、Left は、リテラルです。大文字、小文
字、大文字と小文字の混在のいずれでも構いませ
ん。一重引用符 (’) を必ず指定してください。Both
は、先頭の空白と末尾の空白の両方を削除します。
Right は、末尾の空白を削除します。 Left は、先頭
の空白を削除します。デフォルトは、Both です。
結果
第 1 引数が NULL でなければ、文字列から先頭の空白と末尾の空白が削除されます。
第 1 引数が NULL であれば、NULL が戻されます。結果の最大長は、第 1 引数の最大
長です。
使用上の注意
CHAR 列と出力データは常に固定長であるため、指定の長さを満たすために空白が追加
されます。 CHAR 列または出力列幅の短縮に TRIM は使用できません。
TRIM 関数の処理では、シングルバイトの ASCII 空白文字ではなく、東アジア言語で
サポートされているダブルバイトの文字を使用すると、予測できない結果になることが
あります。文字列内のダブルバイトの空白はシングルバイトの空白に置き換え、データ
のロード前に入力ファイルからダブルバイトの後ろの空白を取り除いておきます。
例
次の式は、Market 列の文字列の後ろの空白の位置を移動します。 right 引数を指定した
TRIM は、RTRIM 関数と同じです。
trim(market, ’right’)
次のクエリは、City 列の値の先頭と末尾の空白の位置を移動します。
select trim(hq_city) as city
from market
106
IBM Red Brick Warehouse: SQL リファレンス ガイド
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
次のクエリは、UPPER 関数を使用して都市名を大文字で表示します。
select upper(hq_city) as city
from market
where hq_city like ’M%’
UPPER_CITY
----------MIAMI
MINNEAPOLIS
MILWAUKEE
第 5 章 スカラ関数
107
日付時間スカラ関数
このセクションでは、日付時間式を処理するスカラ関数について説明します。日付時間
スカラ関数は次のとおりです。
日付時間関数
説明
CURRENT_DATE
現在の日付を戻します。
CURRENT_TIME
現在の時間を戻します。
CURRENT_TIMESTAMP
現在の日付時間を戻します。
DATE
TIMESTAMP または文字列を DATE に変換しま
す。
DATEADD
日付時間の値に一定期間を加算する。
DATEDIFF
2 つの日付時間の差異を算出します。
DATENAME
日付時間の値から、datepart の部分を文字列として
抽出する。
EXTRACT
日付時間の日付フィールドを、INTEGER 型として
抽出します。
TIME
TIMESTAMP または文字列を TIME に変換しま
す。
TIMESTAMP
DATE、TIME、または文字列を TIMESTAMP に変
換します。
TO_CHAR
日付、時刻、タイムスタンプをユーザ指定の形式で
戻します。
DATEADD、DATEDIFF、EXTRACT の各関数の例は、「SQL 自習ガイド」を参照して
ください。
日付時間スカラ関数の日付フィールド
スカラ関数の中には、日時 (DATETIME) 型を構成する特定のサブフィールド、つまり
日付フィールド を処理するものがあります。EXTRACT 関数を使用すると、日付時間
の値から該当する日付フィールドを抽出できます。
datepart 引数はローカライズされません。これらの datepart 引数は、どのロケールでも
同じフォーマットです。ただし、DATENAME 関数と EXTRACT 関数の出力データは
ローカライズされます。
108
IBM Red Brick Warehouse: SQL リファレンス ガイド
各日付フィールドの定義は次のとおりです。
日付フィールド
略記
戻り値の範囲
YEAR
QUARTER
MONTH
yy
qq
mm
DAYOFYEAR
DAY
WEEK
dy
dd
wk
WEEKDAY
dw
HOUR
MINUTE
SECOND
MILLISECOND
MICROSECOND
hh
mi
ss
ms
us
1 から 9999
1 から 4 (月の値から判定)
1 から 12 (DATENAME 関数で指定した場合
は、ローカライズされた月)
1 から 366
1 から 31
1 から 53。最初の週を除き、週は 1 週間が始
まる曜日から始まります (サーバ ロケールが
指定するテリトリのフォーマット規則により指
定)。最初および最後の週は、1 月 1 日の曜日
に応じて、1 週間未満になる場合があります。
1 から 7。 1 は 1 週間が始まる曜日です (サ
ーバ ロケールが指定するテリトリのフォーマ
ット規則により指定)。 DATENAME 関数で指
定した場合は、この引数はローカライズされた
曜日名を戻します。
0 から 23
0 から 59
0 から 59
0 から 999
0 から 999999
ヒント: ANSI SQL-92 EXTRACT 関数を使用しないクライアント ツールのために、非
標準の DATEPART スカラ関数がサポートされています。 DATEPART の詳細
については、 549 ページの『付録 C. 日付時間フォーマット』を参照してくだ
さい。
第 5 章 スカラ関数
109
CURRENT_DATE、CURRENT_TIME、CURRENT_TIMESTAMP
CURRENT_DATE、CURRENT_TIME、CURRENT_TIMESTAMP
CURRENT_DATE、CURRENT_TIME、CURRENT_TIMESTAMP 関数は、それぞれ現在
の日付、時間、タイムスタンプの値を戻します。
構文
次に上記の関数を使用した日付時間式の構文ダイアグラムを示します。
CURRENT_DATE 関数:
CURRENT_DATE
CURRENT_TIME 関数:
CURRENT_TIME
(
n
)
CURRENT_TIMESTAMP 関数:
CURRENT_TIMESTAMP
(
n
n
)
TIME および TIMESTAMP の値を構成する秒未満の精度を指定する
整数です。
n を指定しなかった場合、デフォルトの精度は次のようになります。
v CURRENT_TIME(0)
v CURRENT_TIMESTAMP(6)
結果
CURRENT_DATE、CURRENT_TIME、CURRENT_TIMESTAMP 関数の結果は、クエリ
の処理中は同じ値です。
例
次に現在の日付を Date_Col 列に挿入する例を示します。
insert into table_1 (date_col)
values (CURRENT_DATE)
110
IBM Red Brick Warehouse: SQL リファレンス ガイド
DATE
DATE
DATE 関数は、文字列式またはタイムスタンプ式から DATE を算出します。
構文
次に DATE 関数を使用した日付時間式の構文ダイアグラムを示します。
DATE 関数:
DATE
(
c_expression
timestamp_expression
c_expression, timestamp_expression
)
引数には文字列式またはタイムスタンプ式を指定し
ます。日付式も指定できますが、その場合は変換は
行われません。文字列式は、18 ページの『日時定
数』 に示す有効な日付の値である必要があります。
非標準の日付フォーマットやタイムスタンプ フォー
マットは指定できません。
結果
結果は日付 (DATE) 型です。
例
次に DATE 関数を使用してテーブルの文字型の列の値を変換し、別のテーブルの
Date_Col 列に挿入する例を示します。
insert into table_1 (date_col)
select date (char_col) from table_2
次に DATE 関数を使用してタイムスタンプ値を日付値に変換する例を示します。
insert into table_1 (date_col)
select date (timestamp_col) from table_2
DATE フォーマットのデフォルトは yyyy-mm-dd です。日付を異なるフォーマットで表
示するには、EXTRACT 関数を使用します。特定の例については、 116 ページの
『EXTRACT』を参照してください。
第 5 章 スカラ関数
111
DATEADD
DATEADD
DATEADD 関数は、日付時間の値に経過時間を加算します。
構文
次に DATEADD 関数を使用した日付時間式の構文ダイアグラムを示します。
DATEADD 関数:
DATEADD
(
datepart , interval , datetime_expression
)
datepart
経過時間を加算する日付フィールド名を指定しま
す。108 ページの『日付時間スカラ関数の日付フィ
ールド』に示すフィールド名または略記を指定する
必要があります。
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
112
IBM Red Brick Warehouse: SQL リファレンス ガイド
DATEDIFF
DATEDIFF
DATEDIFF 関数は、2 つの日付時間式の時間差を算出します。
構文
次に DATEDIFF 関数を使用した日付時間式の構文ダイアグラムを示します。
DATEDIFF 関数:
DATEDIFF (
datepart , datetime_expression , datetime_expression
)
datepart
時間差の計算の対象となる日付フィールド名を指定
します。108 ページの『日付時間スカラ関数の日付
フィールド』に示すフィールド名または略記を指定
する必要があります。
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 章 スカラ関数
113
DATENAME
DATENAME
DATENAME 関数は、指定した日付フィールドを抽出し、文字列として値を戻します。
構文
次に DATENAME 関数を使用した日付時間式の構文ダイアグラムを示します。
DATENAME 関数:
DATENAME (
datepart , datetime_expression
)
datepart
日付時間式から抽出する日付フィールド名を指定し
ます。108 ページの『日付時間スカラ関数の日付フ
ィールド』 に示すフィールド名または略記を指定す
る必要があります。
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
ドイツ語のデータベースでは、DATENAME 関数は、ドイツ語の月と曜日を戻します。
select distinct datename(mm, date)
from period
where qtr like ’Q4%’
Dezember
November
Oktober
select datename(dw, date)
from period
order by perkey
114
IBM Red Brick Warehouse: SQL リファレンス ガイド
DATENAME
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 章 スカラ関数
115
EXTRACT
EXTRACT
EXTRACT 関数は、日付時間の値から、指定された日付フィールドを整数値として抽出
します。
構文
次に EXTRACT 関数を使用した日付時間式の構文ダイアグラムを示します。
EXTRACT 関数:
EXTRACT
(
datepart
FROM
datetime_expression
)
datepart
日付時間式から抽出する日付フィールド名を指定し
ます。108 ページの『日付時間スカラ関数の日付フ
ィールド』 に示すフィールド名または略記を指定す
る必要があります。
datetime_expression
日付 (DATE) 型、時刻 (TIME) 型、またはタイムス
タンプ (TIMESTAMP) 型である必要があります。
結果
指定した日付フィールドが日付時間式に含まれていなければ、時間には午前 0 時、日付
にはデフォルトの日付 1900-01-01 が使用されます。これらのデフォルト値も、整数と
して戻されます。
EXTRACT 関数の出力データは、サーバ ロケールが指定するテリトリのフォーマット
規則に従ってローカライズされます。たとえば、日付から曜日 (1 から 7 までの数字)
を抽出する場合、1 週間が何曜日から始まるかによって結果が異なります。
datepart が週の場合、指定した年の最初の日の曜日を考慮して抽出が行われます。たと
えば、1 月の最初の日が土曜で、1 週間が日曜から始まる場合は、2 番目の日は週 2
(第 2 週) になります。 1 週間が月曜から始まる場合は、2 番目の日は週 1 (第 1 週)
となります。
例
この 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),
116
IBM Red Brick Warehouse: SQL リファレンス ガイド
EXTRACT
’/’,
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 の詳細
については、 549 ページの『付録 C. 日付時間フォーマット』を参照してくだ
さい。
第 5 章 スカラ関数
117
TIME
TIME
TIME 関数は、文字列またはタイムスタンプ (TIMESTAMP) 型の式から TIME を算出
します。
構文
次に TIME 関数を使用した日付時間式の構文ダイアグラムを示します。
TIME 関数:
TIME
(
c_expression
timestamp_expression
c_expression, timestamp_expression
)
文字列式またはタイムスタンプ式を指定します。時
間式も指定できますが、その場合は変換は行われま
せん。文字列式は、18 ページの『日時定数』に示す
有効な時間の値である必要があります。非標準の時
間フォーマットやタイムスタンプ フォーマットは指
定できません。
結果
結果は時刻 (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
118
IBM Red Brick Warehouse: SQL リファレンス ガイド
TIMESTAMP
TIMESTAMP
TIMESTAMP 関数は、文字列または日付時間の値から TIMESTAMP を算出します。
構文
次に TIMESTAMP 関数を使用した日付時間式の構文ダイアグラムを示します。
TIMESTAMP 関数:
TIMESTAMP (
c_expression
date_expression
)
,
time_expression
c_expression, date_expression, time_expression
引数を 1 つ指定する場合は、文字列式である必要が
あります。文字列式は、18 ページの『日時定数』に
示す有効なタイムスタンプの値である必要がありま
す。非標準のタイムスタンプ フォーマットは指定で
きません。
引数を 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 章 スカラ関数
119
TO_CHAR
TO_CHAR
TO_CHAR 関数は、日付 (DATE) 型、時刻 (TIME) 型、タイムスタンプ
(TIMESTAMP)型を処理し、指定されたフォーマットの文字列を戻す日付時間スカラ関
数です。日時定数は ANSI SQL-92 datetime データ型標準に準拠しています。
構文
次に TO_CHAR 関数を使用した式の構文ダイアグラムを示します。
TO_CHAR 関数:
TO_CHAR
(
source_date
)
, format_str
source_date
日付 (DATE) 型、時刻 (TIME) 型、タイムスタンプ (TIMESTAMP)
型のいずれかである必要があります。列名、式、リテラル文字列のい
ずれかを指定できます。
format_str
リテラル文字列を指定する必要があります。
この関数のオプションの format_str 引数では、次の要素がサポートされています。
要素
意味
最小値
最大値
YYYY
YY
MONTH
MON
MM
DAY
DY
DD
DDD
CC
HH
HH12
HH24
MI
SS
A.M./P.M.
4 桁の年
2 桁の年
ロケール定義に基づく月のフルネーム
ロケール定義に基づく月の省略名
2 桁の月
ロケール定義に基づく日のフルネーム
ロケール定義に基づく日の省略名
日
年ごとの日付
週の数値日
時間
日の中の時
日の中の時
分
秒
ロケール定義に基づく 12 時間制表示
0000
00
9999
99
01
12
01
001
0
01
01
00
00
00
31
366
6
12
12
23
59
59
TO_CHAR 関数の要素を指定する場合には次の要因を考慮します。
v format_str 要素間の区切り記号として、数字、文字、句読点の任意の組合せを使用で
きます。ただし、区切り記号は必須ではありません。たとえば、次の形式文字列はい
ずれも有効です。
– MM/DD/YY
120
IBM Red Brick Warehouse: SQL リファレンス ガイド
TO_CHAR
– 日付は MONTH、DAY、YEAR で時刻は HH:MI
– 日付 MM-DD-YY
v 週の中の数値日は 0 から 6 の数値を戻します。 0 は日曜日を表します。
v タイムスタンプの日付要素と時刻要素の間に空白を使用できますが、
必須ではありません。
結果
TO_CHAR 関数には、次の 3 つの結果があります。
v TO_CHAR 関数は、指定された format_str フォーマットの source_date に指定された
日付を含む文字列を戻します。 source_date は、日付 (DATE) 型、時刻 (TIME) 型、
タイムスタンプ (TIMESTAMP) 型のいずれかである必要があります。
v format_str を指定しない場合、そのデータ型に対応する適切なロケール表現が使用さ
れます。
v ource_date が NULL の場合、結果は NULL になります。
例
次の 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
第 5 章 スカラ関数
121
TO_CHAR
次の例では、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
122
CLOSING
07 Jan 2000
07 Jan 2000
07 Jan 2000
21 Jan 2000
IBM Red Brick Warehouse: SQL リファレンス ガイド
CURRENT_USER 関数
CURRENT_USER 関数
CURRENT_USER 関数は、情報の提供や管理を目的としたスカラ関数です。この関数
は、データベースを現在使用しているユーザのデータベース ユーザ名 (使用権 ID) を
戻します。データベース ユーザ名は、412 ページに説明する GRANT CONNECT 文を
使用して作成します。
構文
次に USER 関数を使用した式の構文ダイアグラムを示します。
CURRENT_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 章 スカラ関数
123
124
IBM Red Brick Warehouse: SQL リファレンス ガイド
第 6 章 分析関数
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 構
文または独自の形式で表すことができます。
推奨事項: 新しいアプリケーションでは、すべてのクエリで OLAP 関数を使用します。
既存のアプリケーションでは、OLAP 関数を使用するようにクエリを更新す
ることを検討してください。OLAP 関数が含まれているクエリでは、対応す
る RISQL 関数には実装されていない自動パフォーマンス最適化機能を利用
できます。
一般に、分析関数は次の点で有用です。
v 複雑かつ頻出するビジネス上の問合わせを SQL 文で表すことが簡単になる
v 効率が良い
v 他の計算実行方法より高速である
この章では、OLAP 関数と RISQL 関数の使用方法を 2 つのセクションに分けて説明し
ます。
v SQL OLAP 関数
v RISQL 表示関数
SQL OLAP 関数
SQL OLAP 関数は、単一のクエリ式内でパーティション分割された リザルト セットに
対して適用されます。ウィンドウ パーティション とは、クエリで戻される行のサブセ
ットであり、特別な OVER() 句で 1 つ以上の列によって定義されます。
olap_function() over (partition by col1, col2...)
クエリ内の各 OLAP 関数は、それぞれのウィンドウ パーティションの内容に対して適
用されます。一方、分析関数でない関数は、リザルト セットの各行に対して計算を実行
します。たとえば、次のクエリの OLAP RANK 関数を例に考えてみます。
© Copyright IBM Corp. 1996, 2004
125
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 を使用することなく、単一のクエリ式で計算され
ます。
実際、OLAP 関数を使用することによって、アプリケーション開発者は分析的なビジネ
ス クエリを簡単かつ効率的に作成できます。たとえば、さまざまな間隔に対して移動平
均や移動合計を計算したり、選択した列の値の変化に応じて集約と順位付けをリセット
したり、複雑な比率を単純な用語で表現できます。また、単一のクエリ式内で、複数の
異なる OLAP 関数を各関数固有のパーティション分割規則で定義できます。 RISQL 表
示関数は OLAP の機能の一部をエミュレートしていますが、標準的な方法ではなく、
柔軟性に欠けています。
OLAP 関数の種類
IBM Red Brick Warehouse でサポートされている OLAP 関数をカテゴリ別にまとめた
リストを次に示します。
v 順位付け:
– RANK
– DENSE_RANK および DENSERANK (シノニム)
– NTILE
– CUME_DIST
– PERCENT_RANK
126
IBM Red Brick Warehouse: SQL リファレンス ガイド
v 番号付け:
– ROW_NUMBER および ROWNUMBER (シノニム)
v 逆分布:
– PERCENTILE_CONT
– PERCENTILE_DISC
v 集約:
– AVG
– COUNT
– MIN
– MAX
– SUM
COUNT(DISTINCT) などの集約関数での DISTINCT の指定もサポートされていま
す。
v 比率レポート:
– RATIO_TO_REPORT および RATIOTOREPORT (シノニム)
次の表は、サポートされている OLAP 関数と RISQL 表示関数の対応を示します。
SQL OLAP 関数
同等の RISQL 表示関数
RANK
RANK
NTILE
NTILE、TERTILE
RATIO_TO_REPORT、RATIOTOREPORT
RATIOTOREPORT
ROW_NUMBER、ROWNUMBER
CUME(1)
AVG
MOVINGAVG
SUM
CUME、MOVINGSUM
OVER 句がない場合、5 つの集約関数は 47 ページの『第 4 章 集約関数』に説明する
ように機能します。 RISQL CUME、MOVINGAVG、および MOVINGSUM 関数をエミ
ュレートするには、AVG およびSUM 関数で OLAP OVER 句を使用します。
OVER 句
OLAP 関数は RISQL 表示関数などの他の分析関数やレポート関数とは異なり、OLAP
OVER 句を使用できます。 OVER 句では主に、次の 3 つの操作を実行できます。
v ウィンドウ パーティションの定義 (PARTITION BY 句)
v パーティション内の行のソート (ORDER BY 句)
v ウィンドウ フレームの定義 (ROWS/RANGE 指定)
第 6 章 分析関数
127
OVER 句の使用規則は、この句が使用される OLAP 関数の種類 (順位付けや集約など)
によって異なります。使用規則は、この章で後述する個々の構文の解説を参照してくだ
さい。次に、ウィンドウ パーティション、パーティション分割した行のソート、および
ウィンドウ フレームについて、その概念を簡単に説明します。すでにこれらの概念を理
解している場合は、134 ページからの構文説明と例に進んでください。
OLAP ウィンドウ パーティション
ウィンドウ パーティションとは、OLAP 関数を適用するためにグループ分けされた列
の集合のことです。 OLAP 関数は各行に適用されますが、計算はパーティション内の
行全体に対して行われます。パーティションが指定されていない場合、OLAP 関数は完
全な中間リザルト セットに対して計算を行います。
パーティション内の行のソート
OLAP ORDER BY 句は、任意のクエリ式に追加できる ORDER BY 句とは区別されま
す。215 ページを参照してください。 OLAP 関数の ORDER BY 句は通常、ウィンド
ウ パーティション内で行をソートするための式を定義しますが、先行する PARTITION
BY 句なしでも ORDER BY 句を使用できます。つまり、中間リザルト セットをソー
トするために、意図的に OLAP 関数を使用できます。
この指定は OLAP 関数の順位付けファミリでは必須となります。順位値は関数自体の
引数ではなく、ORDER BY 句によって決定されます。 OLAP 集約関数では通常
ORDER BY 句は必須ではありませんが、ウィンドウ フレームを定義する場合には必須
となります (129 ページを参照)。パーティション分割された行は、各フレームに適切な
集約値を計算する前にソートされている必要があります。
ORDER BY 句には NULL の取り扱い規則と同様、昇順および降順のソートを定義する
ためのセマンティクスが含まれます。デフォルトでは、OLAP 関数は昇順ソートを行
い、最低値 が 1 に順位付けされます。この動作は SELECT 文の末尾に ORDER BY
句を使用する場合のデフォルトの動作と一致していますが、ほとんどの順序計算には非
直観的なものとなっています。OLAP 計算ではしばしば降順によるソートが必要となり
ます。このとき、最高値 が 1 に順位付けされますが、これは ORDER BY 句で DESC
キーワードを使用して明示的に指定する必要があります (136 ページを参照)。
次の例では、ウィンドウ パーティションは「Dimension」列で定義されています。ここ
では値 A を持つ 5 つの行が 1 つのウィンドウを構成しています。B および C の場
合も同様です。Measure 列は OLAP RANK 関数の入力データで、各パーティションの
行は Measure 列の値によってソートできます。RANK 関数が適用される場合は、各パ
ーティションに対して 計算が行なわれます。Measure 列の値には、各パーティション内
で 1 から 5 の順位が付けられます。デフォルトの昇順では最低値 に 1 が割り当てら
れます。
この例では OLAP ROW_NUMBER 関数の計算も行われます。ここでは PARTITION
BY 句を使用せずに、リザルト セット全体で連続した行番号が生成されます。
128
IBM Red Brick Warehouse: SQL リファレンス ガイド
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...;
この例のように、ウィンドウ パーティションは単一のディメンジョンの値で定義できま
す。また、複数のディメンジョンを指定することもできます。たとえば、市と州、月と
四半期と年の値に基づいて、行をパーティションに分割できます。
ウィンドウ フレーム
集約など、順位付けを行わない OLAP 関数に対しては、ウィンドウ フレーム を定義
できます。ウィンドウ フレームはウィンドウ パーティション内の行の集合を定義しま
す。ウィンドウ フレームが定義されると、OLAP 関数はパーティション全体の固定内
容ではなく、この移動フレームの内容に対して計算を行います。
ウィンドウ フレームの定義は行ベース (ROWS 指定) または値ベース (RANGE 指定)
で行うことができます。
第 6 章 分析関数
129
行ベースのウィンドウ フレーム: どのウィンドウ フレームの場合も、参照ポイン
トは現在の行 になります。 SQL OLAP 構文は、行ベースのウィンドウ フレーム を定
義するためのメカニズムを提供します。この構文では、現在の行の前後の行数を任意に
指定できます。
次のダイアグラムでは、行 1 から 5 はパーティションを表します。OLAP ウィンドウ
フレームが前方にスライドするにつれ、各行が現在の行となります。ここでフレームは
現在の行から次の 2 行目 までと定義されており、各フレームには最大で 3 行、最小で
1 行が含まれます。フレームがパーティションの末尾に達すると、現在の行のみが含ま
れることになります。グレー部分は各ステップでフレームから除外される行を示しま
す。
1
現行行
2
3
4
5
現行行 +1
現行行 +2
現行行
現行行 +1
現行行 +2
現行行
現行行 +1
現行行 +2
現行行
現行行 +1
現行行
つまり、ここではウィンドウ フレームによって次の規則が課されます。
v 行 1 が現在の行の場合、行 4 と行 5 が除外される
v 行 2 が現在の行の場合、行 5 と行 1 が除外される
v 行 3 が現在の行の場合、行 1 と行 2 が除外される
v 行 4 が現在の行の場合、行 1、2、3 が除外される
v 行 5 が現在の行の場合、行 1、2、3、4 が除外される次の図では、これらの規則を
具体的な値の集合に適用し、各行に対して計算される OLAP AVG 関数を示します。
ここではスライドしながら計算を行い、現在の行の位置によって 3 つまたはそれ以
下となる行の間隔に対して、移動平均を算出しています。
このクエリの SQL 文は次のようになります。
130
IBM Red Brick Warehouse: 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...
平均値は次のように計算されます。
v Row 1 = (10 + 50 + 100)/3
v Row 2 = (50+ 100 + 120)/3
v Row 3 = (100 + 120 + 500)/3
v Row 4 = (120 + 500)/2
v Row 5 = (500)/1
リザルト セットの残りのすべてのパーティション (B、C、...) に対しても、同様の計算
が行われます。
値ベースのウィンドウ フレーム: 行ベース のウィンドウ フレームの定義は数多
くありますが、前の例ではその中の 1 つを紹介しました。SQL OLAP 構文では、特定
の連続する行ではなく値ベース、つまり範囲ベース の行の集合に対して制限範囲を定義
するウィンドウ フレームもサポートしています。
値ベースのウィンドウ フレームは、特定の範囲の数値を含むウィンドウ パーティショ
ン内に行を定義します。 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 章 分析関数
131
v 現在の行と同じ年を持つ行
v 現在の行から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 文は次のようになります。
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...
平均値は次のように計算されます。
v Row 1 = 1999、Row 2 から 5 は除外、AVG = 10,000/1
v Row 2 = 2001、Row 1、4、5 は除外、AVG = 6,000/2
v Row 3 = 2001、Row 1、4、5 は除外、AVG = 6,000/2
v Row 4 = 2002、Row 1 は除外、AVG = 21,000/4
v Row 5 = 2002、Row 1 は除外、AVG = 21,000/4
ウィンドウ フレームの例については、149 ページを参照してください。
値ベースのフレームの昇順および降順: OLAP 関数の ORDER BY 句で値ベース
のウィンドウ フレームを指定する場合、RANGE 指定の対象となる数値列を識別するだ
けでなく、ORDER BY 値のソート順も指定することになります。たとえば、次のよう
な指定があるとします。
range between current row and n following
この指定は、先に行われるソート順 (ASC または DESC) の影響を受けます。 n
following という指定は、次の意味を持ちます。
v パーティションがデフォルトの昇順 (ASC) でソートされる場合、n を加算
v パーティションが降順 (DESC) でソートされる場合、n を減算
132
IBM Red Brick Warehouse: SQL リファレンス ガイド
たとえば、Year 列に 1999 から 2002 の 4 つの異なる値がある場合を例に考えてみま
す。次の表では、左にデフォルトである昇順、右に降順を示しています。
ORDER BY year ASC
ORDER BY year DESC
1999
2000
2001
2002
2002
2001
2000
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 値のソート順は、値ベースのフレームで行
を指定する場合に決定的な項目となります。数値のみで除外するか含めるかは決定され
ません。
OLAP 関数の使用に関する基本規則
次の規則はサポートされているすべての OLAP 関数に適用されます。
v OLAP 関数は、SQL クエリの次の部分で使用できる。
– 検索項目リストの中。
– 式の中。
– スカラ関数の引数。
– WHEN 句の中。
– 最後の ORDER BY 句の中 (エイリアス、またはそのクエリ内の別の場所にある
OLAP 関数への位置参照を使用)。
– BREAK BY...SUMMING 句を含むクエリの中。
– サブクエリの中。
v OLAP 関数は、次の部分では使用できない。
– RISQL 表示関数と同じクエリの中。
– WHERE 句の検索条件の中。
– SET (集約) 関数の引数。たとえば、次の式は無効です。
sum(rank() over(order by dollars))
第 6 章 分析関数
133
– 同じクエリ ブロック内にある他の OLAP 関数 の引数。ただし、サブクエリ ブ
ロック内の OLAP 関数の結果は、外部のクエリ ブロック内の他の OLAP 関数か
ら参照できます。
– 事前計算ビュー定義の中。ただし、OLAP 関数 を含むクエリは、Vista クエリ リ
ライト システムでリライトできます。また、これらのリライトに基づいて、候補
ビューを生成できます。
v OLAP 関数が参照する列は、グループ分けされた列か、OLAP 関数と GROUP BY
句がある同じクエリ ブロックからの集約関数である必要があります。 OLAP 処理は
グループ分け処理および集約処理の後 で、最後の ORDER BY 句が適用される前に
行われます。したがって、それらの処理の中間結果を使用して OLAP 式を記述する
必要があります。
GROUP BY 句がクエリ ブロックにない場合、OLAP 関数は検索項目リスト内の他の
列を参照できます。
v 相関参照は OLAP 関数 内で許可されていますが、相関列のエイリアスは許可されて
いません。
個々の OLAP 関数 の使用方法の注意点は、この章で後述する各構文の説明を参照して
ください。
順位付け関数の構文
RANK、DENSE_RANK、NTILE、PERCENT_RANK、および CUME_DIST は、IBM
Red Brick Warehouse でサポートされる OLAP の順位付け関数です。これらの関数は、
順位値の計算に使用する列または式を定義している OVER 句内の ORDER BY 句に依
存します。 PARTITION BY 句はオプションです。
順位付け関数:
RANK()
DENSE_RANK()
DENSERANK()
NTILE (unsigned_constant)
PERCENT_RANK()
CUME_DIST()
RANK()
OVER (
window_order )
window_partition
OVER 句で必須の ORDER BY 式に基づいて、各行の順位値を決定し
ます。オプションの PARTITION BY 句も指定した場合は、順位は行
グループごとにリセットされます。同順位の行が 2 つ以上ある場合、
次の順位値までは間があきます。たとえば、2 つの行が 1 に順位付け
されると、次の順位は 3 になります。
空の括弧を指定する必要があります。
DENSE_RANK(), DENSERANK()
OVER 句で必須の ORDER BY 式に基づいて、各行の順位値を決定し
134
IBM Red Brick Warehouse: SQL リファレンス ガイド
ます。オプションの PARTITION BY 句も指定した場合は、順位は行
グループごとにリセットされます。
DENSE_RANK 関数は、2 つ以上の行の順位が等値であっても、順位
付けの連続番号に切れ目が生じない点が RANK と異なります。たと
えば、2 つの行が 1 に順位付けされても、次の順位は 2 のままで
す。
DENSE_RANK と DENSERANK は同じ関数のシノニムでです。空の
括弧を指定する必要があります。
NTILE
3 分位、4 分位、100 分位など、順位値をレベル分けして計算しま
す。計算は、関数の引数 (符号なし定数) および OVER 句で必須の
ORDER BY 式に基づいて行われます。たとえば、関数 ntile(100)
over(order by dollars) は Dollar 列の値に対して 100 分位での順位
を計算します。
(unsigned_constant)
NTILE 関数で必須です。 11 ページの『第 2 章 SQL 言語の要素』
で定義したように、符号なし整数定数を指定します。
注: OLAP NTILE 関数と RISQL NTILE 関数は完全に同等ではあり
ません。指定した整数で集合の行数が割り切れない場合、OLAP
NTILE では剰余になる行は上位グループに含められます。RISQL
NTILE 関数 (169 ページを参照) では剰余になる行はグループ間
で分散されます。
PERCENT_RANK()
各行の順位値を決定し、0 から 1 の範囲に正規化します。各
PERCENT_RANK 値は、行の順位から 1 を引いた値を、パーティシ
ョン行数から 1 を引いた数で割った値として算出されます。この関数
の ORDER BY 句で昇順 (ASC、デフォルト) が設定されている場合
には、値が 1 に近づくほど順位が高くなり、値が 0 に近づくほど順
位が低くなります。パーティションの行数が 1 の場合には、その
PERCENT_RANK 値は 0 になります。
空の括弧を指定する必要があります。
CUME_DIST()
累積分布関数は、各行の百分位での順位を判別し、0 から 1 の範囲の
10 進小数として表現します。行のソート順序としてデフォルトの昇順
が指定されている場合、CUME_DIST は、現在の行の順位以下の順位
を持つ行の数 (現在の行を含む) を、パーティションの総行数で割っ
た値を算出します。window_order 句で降順が指定されていると、
CUME_DIST は現在の行の順位以上の順位を持つ行の数を、パーティ
ションの総行数で割った値を算出します。
たとえばパーティションに 10 行あり、現在の行の順位がこのうちの
6 行よりも低い場合には、デフォルトのソート順では CUME_DIST
第 6 章 分析関数
135
の実行結果は 0.7 になります (6 行と現在の行の合計=7/10)デフォル
トの昇順を使用する場合、パーティションで順位が最も低い行の
CUME_DIST 値は 1.0 になります。パーティションの行数が 1 の場
合にも、その CUME_DIST 値は 1.0 になります。
空の括弧を指定する必要があります。
順位付け関数の window 句 (window_partition および window_order)
を指定します。 OLAP 順位付け関数は RISQL 順位付け関数とは異な
り、OVER 句を使用できます。
OVER
window_partition 順位付け関数ではオプションです。136 ページを参照してください。
順位付け関数では必須です。この句は順位値の基準となる列または式
を定義します。 136 ページを参照してください。
window_order
OLAP window_partition 句
次に OLAP 関数の window_partition 句の構文ダイアグラムを示します。
window_partition 句:
,
PARTITION BY expression
PARTITION BY OLAP 関数のウィンドウを 1 つ以上の式で定義します。
35 ページの『第 3 章 式と条件』の定義に従って、有効な式を指定し
ます。
expression
OLAP window_order 句
次に OLAP 関数の window_order 句の構文ダイアグラムを示します。
window_order 句:
,
ORDER BY expression
ASC
DESC
ORDER BY
NULLS LAST
NULLS FIRST
各パーティション内の行をソートします。パーティションが指定され
ていない場合、この句は完全な中間リザルト セットをソートします。
ORDER BY 句は OLAP 関数の順位付けファミリでは必須で、順位値
の基準となる列を定義します。この句は window_frame 句を含む、順
位付けを行わない OLAP 関数で必須です。
この句は COUNT(DISTINCT) などの DISTINCT キーワードを含む
OLAP 集約関数には使用できません。集約関数は、145 ページを参照
してください。
136
IBM Red Brick Warehouse: SQL リファレンス ガイド
expression
ソート操作を行う 1 つ以上の列または式を定義します。 35 ページの
『第 3 章 式と条件』で定義したように、OLAP ORDER BY 句に
は、有効であればどのような式でも記述できます。ただし、SELECT
文に追加できる通常の ORDER BY 句の定数とは異なり、数値定数は
位置を表す数値としては解釈されません。
値ベースのウィンドウ フレーム (RANGE 指定) を使用する OLAP
関数には 1 つの式のみを記述でき、この式は数値式である必要があり
ます。145 ページを参照してください。
PERCENTILE_CONT 関数と PERCENTILE_DISC 関数では指定できる
式は 1 つのみです。142 ページを参照してください。
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 順位付け関数がどのように機能するかを示します。これに対応する
RISQL 順位付け関数の例は、この章で後述します。
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 つの主要な機能を実行しています。
v 順位値が割り当てられる列の値を示します。この場合は Prod_Sales 列です。
第 6 章 分析関数
137
v 降順のソート順 (DESC キーワード) を指定します。ここでは Prod_Sales の最高値に
順位 1 が割り当てられます。
SQL 標準の OLAP 関数のデフォルト ソート順は昇順 (ASC キーワード) です。デ
フォルトの順位付けでは順位 1 が最低売上額に割り当てられるため、DESC キーワ
ードは重要です。
RISQL の順位付け関数では、より直観的な降順 がデフォルトとなっています。
この例に対応する RISQL クエリは、172 ページに記載しています。
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
138
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_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
IBM Red Brick Warehouse: SQL リファレンス ガイド
2000-03-03
2000-02-02
2000-03-06
2000-01-22
...
Aroma
Aroma
Aroma
Aroma
Roma
Roma
Roma
Roma
848.25
841.00
833.75
813.75
27
28
29
30
25
26
27
28
DENSE_RANK に対応する RISQL 関数はありません。 RISQL RANK 関数は OLAP
RANK 関数と同じように同順位の行を扱います。
PERCENT_RANK と CUME_DIST の例: 次のクエリは、売上額の集約値と、各
集約合計の RANK 値、PERCENT_RANK 値、CUME_DIST 値を戻します。すべての関
数とクエリの最後の ORDER BY 句に、デフォルトの昇順が使用されます。
select date, prod_name, sum(dollars) as aroma_sales,
rank() over(order by sum(dollars)) as aroma_rank,
percent_rank() over(order by sum(dollars)) as aroma_pct,
cume_dist() over(order by sum(dollars)) as aroma_dist
from sales natural join period natural join product
where qtr = ’Q1_99’ and prod_name = ’Coffee Sampler’
group by date, prod_name
order by aroma_sales;
DATE
1999-02-17
1999-02-02
1999-01-06
1999-03-26
1999-03-29
1999-02-04
1999-02-08
1999-01-18
PROD_NAME
Coffee Sampler
Coffee Sampler
Coffee Sampler
Coffee Sampler
Coffee Sampler
Coffee Sampler
Coffee Sampler
Coffee Sampler
AROMA_SALES AROMA_RANK AROMA_PCT AROMA_DIST
120.00
1
0.00
0.12
150.00
2
0.14
0.25
180.00
3
0.29
0.38
300.00
4
0.43
0.50
390.00
5
0.57
0.62
420.00
6
0.71
0.75
450.00
7
0.86
0.88
540.00
8
1.00
1.00
CUME_DIST による上位 n% または下位 n%: このクエリは集約された売上額
の CUME_DIST 値を算出しますが、最終リザルト セットを中間結果の上位 20% に制
限します (when cd <= 0.2)。CUME_DIST の ORDER BY 句に降順が設定されているた
め、CUME_DIST が 0.2 以下の行が上位 20% になります。昇順を設定し、cd >=0.8
という制約を適用した場合にも同様の結果が戻されます。
select prod_name, sum(dollars) as sales,
cume_dist() over(order by sales desc) as cumedist
from sales natural join product
group by prod_name
when cumedist <= 0.2;
PROD_NAME
SALES
CUMEDIST
Demitasse Ms
656401.50
0.03
Xalapa Lapa
577450.00
0.05
NA Lite
557655.00
0.08
Lotta Latte
533454.50
0.11
Cafe Au Lait
526793.50
0.13
Expresso XO
514094.50
0.16
Aroma Roma
479330.25
0.18
第 6 章 分析関数
139
NTILE の例:
次のクエリでは OLAP NTILE(5) 関数が CASE 式内に使用されていま
す。 CASE 式は NTILE 順位 (1 から 5) を 3 つの名前付きグループに再分類しま
す。 WHEN 句は中間リザルト セットから「top_20」の行のみを保持します (前述の例
では CUME_DIST を使用して同様の結果を得ました)。
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
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
このセクションで前述した OLAP RANK の例と同様に、ORDER BY 句は決定的な項
目です。高から低へ順位付けを行うには DESC キーワードを使用する必要があります。
この例に対応する RISQL クエリは、169 ページの NTILE 関数の説明に記載していま
す。
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 指
定により行番号の割当てが決まります。
140
IBM Red Brick Warehouse: SQL リファレンス ガイド
次にこの関数の完全な構文ダイアグラムを示します。
ROW_NUMBER 関数および ROWNUMBER 関数:
ROW_NUMBER()
ROWNUMBER()
OVER(
)
window_partition
window_order
ROW_NUMBER(), ROWNUMBER()
現在のパーティション内の各行に一意の行番号を割
り当てます。行番号は 1 から開始されます。
ROW_NUMBER および ROWNUMBER は同じ関数
のシノニムです。空の括弧は必須です。
OVER()
window_partition および window_order 句を指定しま
す。空の OVER() 句も有効です。
window_partition
136 ページを参照してください。 ROW_NUMBER
関数のオプションです。
window_order
136 ページを参照してください。 ROW_NUMBER
関数のオプションです。
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 PKG_TYPE
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
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
第 6 章 分析関数
141
window_order 句は Prod_Name 列を指定しているため、行番号は製品名のアルファベッ
ト順に基づいて付けられます。たとえば、「No pkg」パーティション内の 3 つの
「Aroma」製品には、1、2、3 の番号が付けられています。大文字は小文字より先にソ
ートされることに注意してください。
使用上の注意
ROW_NUMBER 関数は簡略化した RANK 関数のようなもので、ORDER BY 句を必要
とせず、同順位を検出しません。 ROW_NUMBER 関数は常に、各ウィンドウ パーテ
ィション内の各列について、一意の値を戻します。
この関数は各基本テーブルに存在する rbw_rownum 擬似列には関係しません。
PERCENTILE_CONT と PERCENTILE_DISC の構文
次に、PERCENTILE_CONT 関数と PERCENTILE_DISC 関数の構文ダイアグラムを示し
ます。
PERCENTILE_CONT と PERCENTILE_DISC:
PERCENTILE_CONT
PERCENTILE_DISC
( expression ) WITHIN GROUP ( window_order ) OVER (
)
window_partition
PERCENTILE_CONT, PERCENTILE_DISC
逆分布関数は 100 分位数値を引数としてとり、この 100 分位数値に
等しい値をパーティション データ セットに戻します。たとえば、引
数が 0.5 の場合には、この関数の実行結果はデータ セットの中央値
(50 番目の100 分位数) になります。PERCENTILE_CONT (連続) では
データ セットに適切な値があるかないかに関わらず、この適切な値が
補間されますが、PERCENTILE_DISC (不連続) ではデータ セットに
実際に存在する値が戻されます。
(expression)
0 から 1 (0 と 1 を含む) の数値を設定する (または数値を求める)
必要があります。列参照が含まれている式の場合、PARTITION BY
句にこれらの列が指定されている必要があります。
WITHIN GROUP
PERCENTILE_CONT と PERCENTILE_DISC で必須です。この 2 つ
の関数に固有の句であり、window_order 句と 1 つの expression を指
定する必要があります。
WITHIN GROUP 句は、関数が適用される列値 (および値のソート順)
を指定するための句です。
window_order
142
136 ページを参照してください。 PERCENTILE_CONT と
PERCENTILE_DISC で必須です。window_order 句には、1 つの
IBM Red Brick Warehouse: SQL リファレンス ガイド
expression のみを指定してください。 PERCENTILE_CONT で指定で
きる式は数値式のみですが、PERCENTILE_DISC では任意のデータ型
の式を指定できます。
PERCENTILE_CONT 関数と PERCENTILE_DISC 関数の実行時には、
ソート列の NULL は無視されます。
OVER()
PERCENTILE_CONT と PERCENTILE_DISC で必須です。
window_partition PERCENTILE_CONT と PERCENTILE_DISC でオプションです。136
ページを参照してください。パーティションを指定すると、各パーテ
ィションのすべての行に対して同一値が戻されます。
逆分布関数の例
逆分布関数は、複数の値の中央値を計算するときによく使用されます。次に示す値が格
納されている Median というテーブルがあるとします。
COL1 COL2
A
10
B
10
C
12
D
13
E
20
F
25
G
27
H
36
次のクエリは、Col2 の値の中央値を戻します。 OLAP パーティションが定義されてい
ない場合には、行ごとに同一値が戻されます。PERCENTILE_CONT 関数は、集合に値
16.50 を補間 します。PERCENTILE_DISC は、集合から値 13 を選択 します。
select col1, col2,
percentile_cont(0.5) within group(order by col2) over() as pct_c,
percentile_disc(0.5) within group(order by col2) over() as pct_d
from median;
COL1 COL2 PCT_C PCT_D
A
10 16.50
13
B
10 16.50
13
C
12 16.50
13
D
13 16.50
13
E
20 16.50
13
F
25 16.50
13
G
27 16.50
13
H
36 16.50
13
次のクエリは、1999 年の各四半期の製品平均売上額を、同期の中央値にあたる売上額と
比較します。3 つの OLAP 関数の実行結果は、Qtr 列によりパーティション分割されま
す。SELECT DISTINCT により、リザルト セットが 4 列 (1 つの列が 1 つの四半期に
対応する) に分割されます。INT 関数により、平均と中央値が同じ数値形式で表示され
ます。
第 6 章 分析関数
143
以下の例では平均値と中央値が大きく異なっていますが、これはデータが均等に分散し
ていないことを意味しています。 Q2_99 と Q4_99 では、PERCENTILE_CONT 関数が
補間する値がリザルト セットで不連続値として存在しているため、MEDIAN_CONT 値
と MEDIAN_DISC 値が同一です。
select distinct qtr,
int(avg(sum(dollars))
over (partition by qtr)) as avg_sales,
int(percentile_cont(0.5) within group (order by sum(dollars))
over (partition by qtr)) as median_cont,
int(percentile_disc(0.5) within group (order by sum(dollars))
over (partition by qtr)) as median_disc
from sales natural join period natural join product
where year = 1999
group by qtr, prod_name;
QTR
AVERAGE MEDIAN_CONT MEDIAN_DISC
Q1_99
22146
10074
9992
Q2_99
22640
9956
9956
Q3_99
22840
10044
9903
Q4_99
22236
9647
9647
次の例では、2000 年 1 月第 2 週における全店舗の日次売上の 90 番目の 100 分位数
を算出し、この 100 分位数値よりも高い売上を記録した店舗と日付の組合せを求めま
す。このクエリは、サブクエリを使用して PERCENTILE_CONT で 90 番目の 100 分
位数を計算し、アウター クエリでこの計算結果に対して制約を適用します。
select date, store_name, pctcont from
(select date, store_name, sum(dollars) as daily_store_sales,
percentile_cont (0.9) within group(order by daily_store_sales)
over(partition by date) as pctcont
from sales natural join store natural join period
where year=2000 and week=2
group by date, store_name) t1
where daily_store_sales > pctcont
order by store_name, pctcont;
DATE
2000-01-03
2000-01-04
2000-01-08
2000-01-07
2000-01-06
2000-01-02
2000-01-08
2000-01-05
2000-01-06
2000-01-07
2000-01-04
2000-01-05
2000-01-03
2000-01-02
144
STORE_NAME
Beaches Brew
Beans of Boston
Coffee Brewers
Cupertino Coffee Supply
East Coast Roast
Miami Espresso
Moulin Rouge Roasting
Olympic Coffee Company
Olympic Coffee Company
Olympic Coffee Company
San Jose Roasting Company
Texas Teahouse
Texas Teahouse
Texas Teahouse
IBM Red Brick Warehouse: SQL リファレンス ガイド
PCTCONT
785.15
851.90
798.92
877.85
877.08
1005.85
798.92
696.46
877.08
877.85
851.90
696.46
785.15
1005.85
AVG、COUNT、MIN、MAX、SUM の構文
これらの OLAP 集約関数は、 47 ページの『第 4 章 集約関数』で説明した SQL 関数
と同じ名前を持ち、部分的に同じ構文を使用しますが、SQL 関数とは別のクラスに属し
ます。次に、集約関数を含む式をもとに OLAP 集約関数を使用した式の構文ダイアグ
ラムを示します。
set_function OVER(
)
window_partition
window_order
window_frame
set_function
47 ページの『第 4 章 集約関数』で説明した AVG、COUNT、
MIN、MAX、または SUM を含む式を指定します。
COUNT(DISTINCT) など、集約での DISTINCT の指定もサポートさ
れます。ただし、window_order 句はこれらの DISTINCT 関数で使用
できません。
OVER()
window_partition、window_order、window_frame など、OLAP 関数の
window 句を指定します。 SQL OLAP 集約関数は標準の SQL 集約
関数とは異なり、OVER 句を使用できます。
window_partition 136 ページを参照してください。 AVG、COUNT、MIN、MAX、SUM
のオプションです。
window_order
136 ページを参照してください。 AVG、COUNT、MIN、MAX、SUM
のオプションです。window_frame 句を指定する場合は必須です。
window_frame
145 ページを参照してください。 AVG、COUNT、MIN、MAX、SUM
のオプションです。
OLAP window_frame 句
window_order 句はウィンドウ フレームを定義する場合に必須です。 ORDER BY 句は
パーティションごとに各行の順序を決定し、ウィンドウ フレームはその順序に対して適
用されます。 OLAP ウィンドウ フレームの概念的な説明は、129 ページを参照してく
ださい。
次に OLAP window_frame 句の構文ダイアグラムを示します。
window_frame 句:
ROWS
RANGE
frame_start
frame_end
frame_between
ROWS, RANGE ウィンドウ フレームの種類を行ベース (ROWS) または値ベース
(RANGE) で定義します。 window_frame 句の前には window_order 句
が必要です。136 ページを参照してください。
第 6 章 分析関数
145
行ベースのウィンドウ フレームは、frame_start、frame_end、または
frame_between の指定の基準となる参照ポイントとして現在の行を使
用することで、パーティション内での正確な行数を定義します。
値ベースのウィンドウ フレームは、window_order 句、および
frame_start、frame_end、frame_between のいずれかで指定する基準を満
たす行の集合を定義します。現在の行は参照ポイントとして機能しま
す。値ベースのウィンドウ フレームの場合、window_order 句に含め
る式は 1 つのみにする必要があり、また、その式は数値式である必要
があります。
ウィンドウ フレームの一般的な説明は、129 ページを参照してくださ
い。構文の例は、149 ページを参照してください。
frame_start
現在の行を基準として、ウィンドウ フレームの開始行 (下端の行) を
定義します。この場合、終了行 (上端の行) が現在の行となります。
146 ページを参照してください。
frame_end
現在の行を基準として、ウィンドウ フレームの終了行 (上端の行) を
定義します。この場合、開始行 (下端の行) が現在の行となります。
146 ページを参照してください。
frame_between
現在の行を基準として、ウィンドウ フレームの開始行と終了行を定義
します。 147 ページを参照してください。
frame_start 句:
次に 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 句のみを指定した場合、ウィンドウ フレームの上端の行が現在の行となり
ます。
frame_end 句:
146
次に frame_end 句の構文ダイアグラムを示します。
IBM Red Brick Warehouse: SQL リファレンス ガイド
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 句の構文ダイアグラムを示します。
frame_between 句:
BETWEEN
frame_bound1
AND
frame_bound2
frame_bound1、frame_bound2
BETWEEN...AND キーワードで指定されたウィンドウ フレームの開
始行 (下端の行) と終了行 (上端の行) を指定します。
frame_bound1:
次に 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) によって、加算または減算が決まります。
第 6 章 分析関数
147
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 句の構文ダイアグラムを示します。
frame_bound2 句:
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 は指定できませ
ん。
148
IBM Red Brick Warehouse: SQL リファレンス ガイド
行ベースのウィンドウ フレームの例
行ベースのウィンドウ フレームは現在の行とその前の数行で構成されます。フレーム内
の前後の行数は、定数 (1、2、3 など) または無制限 として指定できます。無制限の場
合、パーティション内での現在の行の前または後のすべての行が対象となります。
次の例は、各種ウィンドウ フレームを指定するメカニズムと、そのメカニズムがどのよ
うに OLAP AVG 関数の計算に影響を与えるかを示しています。ウィンドウ フレーム
を使用したビジネス クエリの例は、156 ページの『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
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);
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
第 6 章 分析関数
149
C
D
D
Chun
Tran
Kwan
13 13.00000000000
16 16.00000000000
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
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
150
IBM Red Brick Warehouse: SQL リファレンス ガイド
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 の計算が適用されることになります。
値ベースのウィンドウ フレームの例
次の例は、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
into
into
into
into
into
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);
第 6 章 分析関数
151
insert into points_age values(’Baxter’, 27, ’B’,18);
insert into points_age values(’Kwan’, 22, ’D’,9);
insert into points_age values(’Tran’, 31, ’D’,16);
この例では、ORDER BY 列にデフォルトの昇順を使用します。 Age 値は各パーティシ
ョン内で低から高の順に並びます。 DESC キーワードを追加する場合は次のようになり
ます。
order by age desc...
OLAP 関数の結果は、昇順と降順のどちらを指定するかによって異なります。
次の例では、現在の行の年齢に 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
152
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
IBM Red Brick Warehouse: SQL リファレンス ガイド
パーティション A の Smith の平均値は前の行の Singh の得点を考慮したものであるこ
とに注意してください。両者の年齢は指定の範囲内にあります。この例にある他のすべ
ての行については、現在の行以外は平均値の計算から除外されます。
次の例では、現在の行の年齢から 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 歳下)。この例にある他のすべ
ての行については、現在の行以外は平均値の計算から除外されます。
リードおよびラグ ウィンドウ フレーム
次の形式でウィンドウ フレームを指定することで、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
第 6 章 分析関数
153
パーティション B では、Ricci の平均値は Baxter および Osaka の Points 合計から計
算しています ((18 + 8 = 26)/2 = 13)。現在の行に前の行が存在せず、計算に使用でき
ない場合、OLAP 関数は NULL を戻します。
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 の平均値計算結果が各パーテ
ィション内でどのように変化するかに注意してください。
154
IBM Red Brick Warehouse: SQL リファレンス ガイド
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
たとえば、次のようになります。
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
第 6 章 分析関数
155
この動作により累積合計が計算されますが、同一の ORDER BY 値を持つ行には同じ累
積合計が割り当てられます。
OLAP 集約の例
次の例で、累積合計と移動平均などのさまざまな OLAP 集約がどのように計算される
かを示します。
累積合計: 次のクエリは与えられた期間における製品売上の累積合計を計算します。
OLAP SUM 関数は累積合計を計算するために使用されます。この例に対応する RISQL
クエリは、162 ページ以降の 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
累積合計のリセット: 次の例は、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
156
IBM Red Brick Warehouse: SQL リファレンス ガイド
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
この例は、218 ページの RESET BY 句の説明で使用している RISQL の例に対応して
います。
移動平均: 次の例は、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
第 6 章 分析関数
157
APR
APR
APR
DEC
DEC
DEC
APR
APR
...
18
4
17
4
12
7
1
8
12.66
11.66
13.00
8.33
11.00
7.66
6.66
5.33
移動平均の行範囲は 3 行で、ここでは次のように表現されています。
rows 2 following
同じウィンドウ フレームを次のように表現することもできます。
rows between current row and 2 following
この例に対応する RISQL クエリは、165 ページ以降の MOVINGAVG 関数の説明で記
載しています。
値ベースのウィンドウ フレームを使用した 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
158
PROD_NAME
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
IBM Red Brick Warehouse: SQL リファレンス ガイド
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
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
...
Earl
Earl
Earl
Earl
Earl
Earl
Earl
Earl
Earl
Earl
Earl
Earl
Earl
Earl
Earl
Earl
Earl
Earl
Earl
Grey
Grey
Grey
Grey
Grey
Grey
Grey
Grey
Grey
Grey
Grey
Grey
Grey
Grey
Grey
Grey
Grey
Grey
Grey
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
56.00
20.00
7.50
44.00
52.00
56.00
28.00
32.00
21.00
66.50
35.00
42.00
40.00
52.00
44.00
17.50
3.00
28.00
32.00
108.50
71.50
123.50
123.50
103.50
56.00
60.00
60.00
21.00
143.50
183.50
235.50
169.00
134.00
64.50
64.50
64.50
119.50
119.50
RATIO_TO_REPORT および RATIOTOREPORT の構文
RATIO_TO_REPORT と RATIOTOREPORT は同じ関数のシノニムです。値グループの
合計値に対する値の比率を計算します。値グループとして扱うのは、完全なリザルト セ
ットまたは OVER 句で指定したパーティションです。 OVER 句はオプションで、次の
クエリは有効となります。
select ratio_to_report(expression) over() from table;
RATIO_TO_REPORT 関数と RATIOTOREPORT 関数:
RATIO_TO_REPORT(expression)
RATIOTOREPORT(expression)
OVER(
window_partition
window_order
)
window_frame
RATIOTOREPORT、RATIO_TO_REPORT
関数の引数に基づいて、パーティション内の残りの行に対する各行の
比率を計算し、小数で表します。 window_partition、window_order、お
よび window_frame 句はオプションであり、パーティション分割後の
行、または完全なリザルト セットに対して比率の計算を行うことがで
きます。
RATIO_TO_REPORT と RATIOTOREPORT は同じ関数のシノニムで
す。
expression
35 ページの『第 3 章 式と条件』 で定義したように、有効な数値式
を指定します。この式は必須です。ここから RISQL 表示関数および
OLAP 関数は参照できません。
第 6 章 分析関数
159
OVER()
window_partition、window_order、window_frame 句を指定します。
OLAP RATIOTOREPORT 関数は RISQL RATIOTOREPORT 関数とは
異なり、OVER 句を使用できます。空の OVER() 句は許可されます
が、OVER キーワードと括弧は指定する必要があります。
window_partition 136 ページを参照してください。 RATIOTOREPORT のオプションで
す。
window_order
136 ページを参照してください。 RATIOTOREPORT のオプションで
す。
window_frame
145 ページを参照してください。 RATIOTOREPORT のオプションで
す。
使用上の注意
SUM や MAX などの OLAP 集約関数の OVER 句が空の場合、または OVER 句に
window_partition のみが指定されている場合、OLAP 関数の結果はパーティション内の
各行に対して同じになります。これは RATIOTOREPORT の場合には当てはまりませ
ん。RATIOTOREPORT の場合はパーティション内の各行に異なる比率が割り当てら
れ、パーティション全体で約 1 となります。百分率で比率を出すには、次の例のように
関数に 100 を掛けます。
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
160
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
IBM Red Brick Warehouse: SQL リファレンス ガイド
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 クエリは、175 ページ以降の RATIOTOREPORT 関数の説明
で記載しています。
RISQL 表示関数
RISQL 表示関数は、ビジネス関連のクエリでよく使用されるような順次計算を、行の集
合に対して実行します。たとえば、次の関数は、行の集合の各行について累積合計を戻
します。
CUME(dollars)
次の表は、各 RISQL 表示関数の一覧です。
機能
説明
CUME
累積合計 (総額) を計算します。
MOVINGAVG
移動平均 (n 行ごとの平均) を計算します。
MOVINGSUM
移動合計 (n 行ごとの合計) を計算します。
NTILE
n レベルに値をグループ分けします。
RANK
順位を決定します。
RATIOTOREPORT
合計に対する部分の比率を計算します。
TERTILE
3 レベル (上位、中位、下位) に値をグループ分けします。
RISQL 表示関数を使用したクエリの詳しい例は、「SQL 自習ガイド」を参照してくだ
さい。
SQL クエリでは、RISQL 表示関数を次の場所で使用できます。
v 検索項目リストの中。
v 式の中。
v スカラ関数の引数。
v WHEN 句の条件の中。
v サブクエリの中。
表示関数は、次の場所では使用できません。
v OLAP 関数と同じクエリの中。
v WHERE 句の検索条件の中。
v SET 関数 (集約関数) や、他の表示関数の引数。たとえば、次の式は無効です。
cume(rank(sales))
sum(rank(sales))
ただし、表示関数の引数としては SET 関数を使用できます。
第 6 章 分析関数
161
CUME
CUME
CUME 関数は、行集合の (現在の行を含む) 各行について累積合計を計算します。
ORDER BY 句に RESET BY サブ句を指定すると、累積合計を 0 にリセットできま
す。
構文
次に CUME 関数を使用した式の構文ダイアグラムを示します。
CUME 関数:
CUME
( n_expression
n_expression
)
数値である必要があります。また、他の表示関数を参照することはで
きません。
結果
現在の行とそれ以前の行について、指定した引数の累積合計を計算します。不明値と
NULL は無視されます。戻り値は、行の順序に依存するため注意が必要です。 163 ページ
の『リザルト セットの並び順』を参照してください。
n_expression が指数表現を用いないデータ型 (小桁整数 (TINYINT) 型、小桁整数
(SMALLINT) 型、整数 (INTEGER) 型、シリアル (SERIAL) 型、10 進数 (DECIMAL)
型) の場合は、CUME の戻り値も指数表現を用いないデータ型になります。結果のデー
タ型の精度は 6 桁増分されます。これは割り当てられたストレージに納めるためです。
次の表は、n_expression のデータ型に応じて CUME 関数が戻すデータ型の一覧です。
n_expression のデータ型
結果のデータ型
小桁整数 (TINYINT) 型
小桁整数 (SMALLINT) 型
整数 (INTEGER) 型
シリアル (SERIAL) 型
10 進数 (DECIMAL) 型
10 進数 (NUMERIC) 型
DECIMAL(9,0) 型
DECIMAL(11,0) 型
DECIMAL(16,0) 型
DECIMAL(16,0) 型
DECIMAL(p,s) 型
p = min(38、n_expression の精度 +6)
s = n_expression のスケール
小桁実数 (REAL) 型
小桁実数 (REAL) 型
実数 (FLOAT) 型
実数 (FLOAT) 型
実数 (DOUBLE PRECISION) 型 実数 (DOUBLE PRECISION) 型
リセット基準
215 ページに示すように、ORDER BY 句に RESET BY サブ句を指定すると、指定し
た列値が変わるときに累積合計を 0 にリセットできます。
162
IBM Red Brick Warehouse: SQL リファレンス ガイド
CUME
例
次の式は、現在の行とそれ以前の行の Dollars 列の値を合計して 1000 ドル単位で戻し
ます。
cume(dollars/1000)
次のクエリは、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 句が使用されなけれ
ば、正確に、または整合性を持って計算されないことがあります。
v CUME
v MOVINGAVG
v MOVINGSUM
ORDER BY 句を使用すると、表示関数による値の計算は、表示関数の引数である数値
式の値の集合が一貫してソートされた結果に基づいて行われることになります。
CUME、MOVINGSUM、MOVINGAVG 関数を使用するクエリ式の結果が (UNION クエ
リの場合のように) 他のクエリ式の結果と統合される場合、ORDER BY 句はクエリ全
体の結果に適用されます。したがって、最初のクエリ式の中の表示関数により計算され
る値は、ソートされた行集合にはなりません。このとき、ORDER BY 句は 2 つのクエ
リ式が統合されてから 初めて適用されます。このため、複数のクエリ式を含むクエリに
CUME、MOVINGSUM、MOVINGAVG 関数を使用することは、実用的ではありませ
ん。
第 6 章 分析関数
163
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 関数を使用するのは、実用的ではありません。ビューの
詳細については、372 ページの『CREATE VIEW』を参照してください。
164
IBM Red Brick Warehouse: SQL リファレンス ガイド
MOVINGAVG
MOVINGAVG
MOVINGAVG 関数は、指定した値集合に対して、指定した行数の移動平均を計算しま
す。
構文
次に MOVINGAVG 関数を使用した式の構文ダイアグラムを示します。
MOVINGAVG 関数:
MOVINGAVG (
n_expression ,
n_expression, integer
integer
)
第 1 引数は数値、第 2 引数は正の整数である必要
があります。n_expression は、他の表示関数を参照
することはできません。
結果
行ごとに、現在の行とその前にある integer-1 行の n_expression の平均として移動平均
を戻します。
integer で指定した行数だけ NULL が連続すると、NULL が戻されます。最初の移動平均
を計算するための十分な行が処理されるまで、先頭の integer-1 行には、NULL が表示さ
れます。戻り値は、行の順序に依存するため注意が必要です。 163 ページの『リザルト
セットの並び順』を参照してください。
n_expression が指数表現を用いないデータ型 (小桁整数 (TINYINT) 型、小桁整数
(SMALLINT) 型、整数 (INTEGER) 型、10 進数 (DECIMAL) 型) の場合は、
MOVINGAVG の戻り値も指数表現を用いないデータ型になります。結果のデータ型の
精度とスケールは、小数点より左の桁数はそのままで、小数点より右の桁数が 6 桁増分
されます。これは、MOVINGAVG 関数の戻り値が非常に小さくなっても、結果のデー
タ型の有効桁数に納まるようにするためです。
次の表は、n_expression のデータ型に応じて MOVINGAVG 関数が戻すデータ型の一覧
です。
第 6 章 分析関数
165
MOVINGAVG
n_expression のデータ型
結果のデータ型
小桁整数 (TINYINT) 型
小桁整数 (SMALLINT) 型
整数 (INTEGER) 型
シリアル (SERIAL) 型
10 進数 (DECIMAL) 型
10 進数 (NUMERIC) 型
DECIMAL(9,6) 型
DECIMAL(11,6) 型
DECIMAL(16,6) 型
Decimal (16,0) 型
DECIMAL(p,s) 型
p = min(38、n_expression の精度 +6)
s = min(6, 38 - n_expression の精度)
小桁実数 (REAL) 型
小桁実数 (REAL) 型
実数 (FLOAT) 型
実数 (FLOAT) 型
実数 (DOUBLE PRECISION) 型 実数 (DOUBLE PRECISION) 型
リセット基準
215 ページに示すように、ORDER BY 句に RESET BY サブ句を指定すると、値のグ
ループが変わるときに移動平均を 0 にリセットできます。
例
次の式は、現在の行とその前にある 5 行の Dollars 列の値の平均値を計算し、Dollars
列の移動平均として戻します。
movingavg(dollars,6)
次のクエリは、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
...
166
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
IBM Red Brick Warehouse: SQL リファレンス ガイド
MOVINGSUM
MOVINGSUM 関数は、指定した値集合に対して、指定した行数の移動合計を計算しま
す。
構文
次に MOVINGSUM 関数を使用した式の構文ダイアグラムを示します。
MOVINGSUM 関数:
MOVINGSUM (
n_expression ,
integer
)
n_expression, integer
第 1 引数は数値、第 2 引数は整数である必要があります。
n_expression は、他の表示関数を参照することはできません。
結果
行ごとに、現在の行とその前にある integer -1 行の n_expression の合計として移動合計
を戻します。integer で指定した行数だけ NULL が連続すると、NULL が戻されます。戻
り値は、行の順序に依存するため注意が必要です。 163 ページの『リザルト セットの並
び順』を参照してください。
n_expression が指数表現を用いないデータ型 (小桁整数 (TINYINT) 型、小桁整数
(SMALLINT) 型、整数 (INTEGER) 型、シリアル (SERIAL) 型、10 進数 (DECIMAL)
型) の場合は、MOVINGSUM の戻り値も指数表現を用いないデータ型になります。結
果のデータ型の精度は 6 桁増分されます。これは割り当てられたストレージに納めるた
めです。
次の表は、n_expression のデータ型に応じて MOVINGSUM 関数が戻すデータ型の一覧
です。
n_expression のデータ型
結果のデータ型
小桁整数 (TINYINT) 型
小桁整数 (SMALLINT) 型
整数 (INTEGER) 型
10 進数 (DECIMAL) 型
10 進数 (NUMERIC) 型
DECIMAL(9,0) 型
DECIMAL(11,0) 型
DECIMAL(16,0) 型
DECIMAL(p,s) 型
p = min(38、n_expression の精度 +6)
s = n_expression のスケール
小桁実数 (REAL) 型
小桁実数 (REAL) 型
実数 (FLOAT) 型
実数 (FLOAT) 型
実数 (DOUBLE PRECISION) 型 実数 (DOUBLE PRECISION) 型
第 6 章 分析関数
167
MOVINGSUM
リセット基準
215 ページに示すように、ORDER BY 句に RESET BY サブ句を指定すると、値のグ
ループが変わるときに移動合計を 0 にリセットできます。
例
次の式は、現在の行とその前にある 5 行の Dollars 列の値の合計値を計算し、Dollars
列の移動合計として戻します。
movingsum(dollars,6)
次のクエリは、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
...
168
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
IBM Red Brick Warehouse: SQL リファレンス ガイド
MVG_SUM
NULL
NULL
24
32
29
24
41
51
60
46
39
24
49
59
67
52
60
NTILE
NTILE
NTILE 関数は、指定した範囲に値をレベル分けします。値の範囲を 3 つに限定し、レ
ベルを表す文字 (H = 上位、M = 中位、L = 下位) を戻す TERTILE 関数とは異な
り、NTILE 関数には任意の数の範囲を指定でき、結果は 1 (最大) から 100 (最小) の
ように該当する範囲を表す整数で戻されます。
NTILE と RANK の違いは、NTILE が指定した整数に応じてリザルト セットを 5 等
分、10 等分、100 等分などに分割するのに対し、RANK は、値に応じてリザルト セッ
ト全体を単純にソートする点です。
構文
次に NTILE 関数を使用した式の構文ダイアグラムを示します。
NTILE 関数:
NTILE
(
n_expression ,
integer
)
n_expression, integer
引数 n_expression は数値、integer は 0 でない正の整数である必要が
あります。 n_expression は、他の表示関数を参照することはできませ
ん。
結果
n_expression 引数が NULL でない場合は、指定した範囲のレベルを表す整数が戻されま
す。たとえば、integer 引数を 5 と指定した場合、最大レベルに相当する値には 1 が戻
され、最小レベルに相当する値には 5 が戻されます。
リセット基準
215 ページに示すように、ORDER BY 句に RESET BY サブ句を指定すると、指定し
たグループが変わるときにレベル値を 0 にリセットできます。
使用上の注意
指定した整数で集合の行数が割り切れない場合、NTILE 関数は剰余になる行を均等にグ
ループ間で分散します。に含められます。次に示す例の 1 番目の例は、この動作を示し
ます。4 つの行に 1 から 4 の順位が付けられ、3 つの行に 2、3、5、6 の順位が付け
られている点に注意してください。OLAP NTILE 関数は、剰余になる行を上位のグルー
プに含めます。135 ページを参照してください。ランクの境界に複数の等値がある場合
は、隣接するグループに分配されます。この場合、結果はクエリごとに異なります。
NTILE 関数は、TERTILE 関数の出力データのローカライズに使用できます。詳細は、
177 ページを参照してください。
第 6 章 分析関数
169
NTILE
例
このクエリは、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
次の例は、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
170
DATE
2000-03-23
2000-02-17
IBM Red Brick Warehouse: SQL リファレンス ガイド
DOLLARS
N_RANK
166.75 mid_60
224.75 mid_60
NTILE
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
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
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
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
前ページのクエリに 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 章 分析関数
171
RANK
RANK 関数は、指定した値について、集合における相対的な順位を決定します。
構文
次に RANK 関数を使用した式の構文ダイアグラムを示します。
RANK 関数:
RANK
( expression
expression
)
任意のデータ型ですが、他の表示関数を参照することはできません。
expression の前にマイナス (-) 符号を指定すると、降順 (小さいもの
から順) に順位付けされます。数値以外のデータ型の場合は、データ
ベース サーバ ロケール設定で指定された照合シーケンスに応じてレ
ベル分けされます。
結果
引数が NULL でない場合は、値集合における相対的な順位を表す整数が戻されます。
NULL の場合は NULL が戻されます。昇順か、降順 (デフォルト) のどちらにも順位付
けできます。
順位付けする値が等しければ、同一順位になります。たとえば、3 位の行が 2 行ある場
合は、4 位は飛ばされます。
上位 10
WHEN 句を使用すると、最終的なリザルト テーブルの上位 5 行、上位 10 行というよ
うに、戻す結果を任意の数の順位に限定できます。この句の詳細については、206 ペー
ジの『WHEN 句』を参照してください。
リセット基準
215 ページに示すように、ORDER BY 句に RESET BY サブ句を指定すると、値のグ
ループが変わるときに順位付けを 0 にリセットできます。
例
次の式は、グループの各行の Dollars 列の値に基づいて、行の順位を表す整数を戻しま
す。
rank(-dollars)
この順位付けは、降順 (小さいものから順) になります。
次のクエリは、データベースの使用期間 (27 か月) にわたる売上合計に基づいて各製品
を順位付けします。
172
IBM Red Brick Warehouse: SQL リファレンス ガイド
RANK
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
French Press, 2-Cup
Easter Sampler Basket
Travel Mug
Coffee Mug
Christmas Sampler
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
7060.25
5280.00
3312.80
2793.00
1920.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
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
第 6 章 分析関数
173
RANK
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
1
2
2
4
4
6
6
8
8
10
順位付けされた行が表示される順序は、クエリの指定に応じて異なりますが、各値の順
位は変わりません。
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
174
10
8
8
6
6
4
4
2
2
1
IBM Red Brick Warehouse: SQL リファレンス ガイド
RATIOTOREPORT
RATIOTOREPORT
RATIOTOREPORT 関数は、合計値に対する値の比率を計算します。
構文
次に RATIOTOREPORT 関数を使用した式の構文ダイアグラムを示します。
RATIOTOREPORT 関数:
RATIOTOREPORT (
n_expression
n_expression
)
数値である必要があります。また、他の表示関数を参照することはで
きません。
結果
引数が NULL でない場合は、合計値に対する値の比率が戻されます。 NULL の場合
は、NULL が戻されます。
リセット基準
215 ページに示すように、ORDER BY 句に RESET BY サブ句を指定すると、値のグ
ループが変わるごとに RATIOTOREPORT 関数をリセットできます。
例
次の式は、値の集合のすべての数量の合計値に対する各行の Quantity 列の値の比率を戻
します。
ratiotoreport(quantity)
次のクエリは、合計売上に対する売上の比率を (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
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
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
第 6 章 分析関数
175
RATIOTOREPORT
Detroit
Chicago
Hartford
Minneapolis
176
305859.75
294982.75
236772.75
165330.75
IBM Red Brick Warehouse: SQL リファレンス ガイド
4.29
4.14
3.32
2.32
TERTILE
TERTILE
TERTILE 関数は、数値グループの各値を上位、中位、下位のレベルに分けます。
構文
次に TERTILE 関数を使用した式の構文ダイアグラムを示します。
TERTILE 関数:
TERTILE
(
n_expression
n_expression
)
数値である必要があります。また、他の表示関数を参照することはで
きません。
結果
引数が NULL でない場合は、上位、中位、下位を表す文字 H、M、L が戻されます。
NULL の場合は NULL が戻されます。
リセット基準
215 ページに示すように、ORDER BY 句に RESET BY サブ句を指定すると、指定し
たグループが変わるときにレベル値を 0 にリセットできます。
使用上の注意
集合の行数が 3 で割り切れない場合、TERTILE 関数は剰余になる行を上位レベルに含
めます。ランクの境界に複数の等値がある場合は、隣接するグループに分配されます。
この場合、結果はクエリごとに異なります。 NTILE 関数の説明にある例を参照してく
ださい。
NTILE 関数は、TERTILE 関数の出力データをローカライズしながら、TERTILE 関数の
動作を再現できます。つまり、値 H、M、L をデータベースの言語にとって意味のある
3 つの文字列に変更できます。NTILE 関数の詳細は、169 ページを参照してください。
例
次の式は、グループの各行について、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
第 6 章 分析関数
177
TERTILE
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;
178
IBM Red Brick Warehouse: SQL リファレンス ガイド
第 7 章 クエリ式
この章では、SQL でクエリを記述する場合の規則を説明します。まずクエリ式の概要を
説明し、次にクエリ式の構成要素と例を示します。章の最後では、SELECT 文と各種の
サブクエリについて説明します。
この章では、次の事項について説明します。
v ジョイン クエリ式および非ジョイン クエリ式
v テーブル ジョイン
v クエリ指定
v UNION、EXCEPT、INTERSECT 式
v SELECT 文
v サブクエリ
「SQL 自習ガイド」にも、各種クエリ式の詳細な例が紹介されています。
ジョイン クエリ式および非ジョイン クエリ式
クエリ式 は、選択したデータを評価した結果をテーブルにします。単純なクエリの場合
は、このテーブルが最終的なリザルト セットとしてユーザに戻されます。複雑なクエリ
の場合は、このテーブルは中間テーブルとなり、他のクエリ式の結果と統合されて最終
的なリザルト セットになります。
SQL のクエリ記述のことをクエリ式といいます。テーブル式 と呼ばれることもありま
すが、このマニュアルでは、ANSI SQL-92 標準に従ってクエリ式 という用語を使用し
ます。
各クエリ式は、ジョインまたは非ジョインのどちらかの形式をとります。非ジョイン ク
エリ式は、クエリ指定 (選択式 とも呼ぶ)、明示的テーブル、または UNION、
INTERSECT、EXCEPT などの演算子を含む複雑な式から結果を導き出します。
ジョイン クエリ式、つまりテーブル ジョインは、2 つ以上のテーブル参照を明示的に
ジョインします。テーブル参照は、単純なテーブル名、別のジョインされたテーブル、
または別のクエリ式にすることができます。
次に、各種のクエリ式と簡単な例を示します。
© Copyright IBM Corp. 1996, 2004
179
図 3. クエリ式
クエリ式で最も単純な形式は、シングル クエリ指定という形式です。複雑な形式のクエ
リ式は、サブクエリから得られた複数の中間テーブル、テーブル ジョイン、および
UNION、INTERSECT、EXCEPT 演算子を含む式から結果を導き出します。いろいろな
クエリ式を組み合わせて 1 つのクエリに結合したり、SELECT キーワードが不要なク
エリを作成できます。前述の例はセミコロン (または他のエントリ ツールの終端記号)
を式に追加すれば、SQL の SELECT 文として実行できます。
構文
次にクエリ式の構文ダイアグラムを示します。
joined_table
query_specification
union_expression
TABLE table_name
joined_table
2 つのテーブル参照を明示的にジョインするクエリ式を指定します。
詳細な構文ダイアグラムと説明については、181 ページの『テーブル
ジョイン』を参照してください。
query_specification
SELECT キーワードと FROM 句で始まるクエリ式を指定します。オ
プションの句も指定できますが、それらには指定順序があります。
詳細な構文ダイアグラムと説明については、187 ページの『クエリ指
定』を参照してください。
180
IBM Red Brick Warehouse: SQL リファレンス ガイド
union_expression UNION、INTERSECT、EXCEPT 演算子でジョインされた 2 つ以上の
クエリ式からなります。 union_expression という用語は、各演算子に
よる集合演算式を表します。
詳細な構文ダイアグラムと説明については、207 ページの
『UNION、EXCEPT、INTERSECT 式』を参照してください。
TABLE table_name
指定したテーブルの全行を意味する明示的なテーブル指定です。たと
えば、次の 2 つのクエリは同じです。
table store
select * from store
テーブル ジョイン
テーブル ジョインは、2 つのテーブル参照を明示的にジョインするクエリ式です。テー
ブル ジョインには、次の 3 種類があります。
v 限定ジョイン: ジョインするテーブル、ジョインの基準となる列を指定するインナー
ジョインまたはアウター ジョイン
v クロス ジョインまたは直積ジョイン
v 括弧で囲んだテーブル ジョイン
ジョインの基準となる列が比較可能なデータ型で、その列がクエリに明示されていれ
ば、任意の 2 つのテーブルをジョインできます。
構文
次に joined_table の構文ダイアグラムを示します。
qualified_join
cross_join
(joined_table)
限定ジョイン
限定ジョインには、インナー ジョインとアウター ジョインがあり、3 種類の指定方法
があります。同じ名前を持つ列を基準とするジョイン (ナチュラル ジョイン)、指定し
た列に基づくジョイン、述部に基づくジョインです。ここでは、インナー ジョイン と
アウター ジョイン という用語の定義と、3 種類の指定方法の構文を説明します。
インナー ジョイン
インナー ジョインは、2 つ以上のテーブルから、列の値が一致している行をジョインし
ます。ジョインするテーブルの行の列値が一致していると、その行をデータベース サー
バがジョインし、中間リザルト テーブルに格納します。
第 7 章 クエリ式
181
ジョイン方法を明示しないジョインがクエリにある (標準の限定ジョイン構文を使用す
る) 場合は、それらのテーブルの直積 (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
REGION.CITY
Jacksonville Jacksonville
Miami
Miami
Atlanta
Atlanta
AREA
South
South
South
City 列を対象としたインナー ジョインの条件は、次のとおりです。
state.city = region.city
アウター ジョイン
アウター ジョインには、レフト、ライト、フルの 3 種類があります。
この 3 種類のアウター ジョインは、それぞれ異なる中間リザルト セットを生成しま
す。レフト アウター ジョイン は、インナー ジョインが戻すすべての行とレフト テー
ブル (最初に指定したテーブル) の行のうち、ライト テーブルの行と一致しないすべて
の行を戻します。
これに対しライト アウター ジョイン は、インナー ジョインが戻すすべての行とライ
ト テーブル (2 番目に指定したテーブル) の行のうち、レフト テーブルの行と一致し
ないすべての行を戻します。
フル アウター ジョイン は、両方のテーブルにあるすべての行を戻します。
3 種類のアウター ジョインはいずれも、一致しない行の列を NULL で表します。
たとえば、State テーブルと Region テーブルを対象としたレフト アウター ジョイン
は、State テーブルのすべての行を戻します。 Region テーブルと一致しない行の列には
NULL が表示されます。
182
IBM Red Brick Warehouse: SQL リファレンス ガイド
STATE
FL
FL
GA
TN
STATE.CITY
REGION.CITY
Jacksonville Jacksonville
Miami
Miami
Atlanta
Atlanta
Nashville
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
限定ジョインの構文
次に限定ジョインの構文ダイアグラムを示します。
table_reference
JOIN table_reference
NATURAL
INNER
LEFT
OUTER
RIGHT
OUTER
FULL
OUTER
ON
search_condition
,
USING
( column_name
)
table_reference
テーブルとして評価されるテーブル、ビュー、シノニム、クエリ式を
指定します。 table_reference の詳細な構文については、185 ページの
『テーブル参照』を参照してください。
NATURAL
ナチュラル ジョインは、同じ名前をもつ列を基準にしてテーブルをジ
ョインします。列名は、明示的に指定しません。ナチュラル ジョイン
は、同じ列名を持つ列が複数ある場合はそのすべての列をもとに 2 つ
のテーブルをジョインします。
次の例は、Classkey 列と Prodkey 列という共通の列名を基準にして
Sales テーブルと Product テーブルをジョインします。
第 7 章 クエリ式
183
sales natural join product
NATURAL キーワードを指定する場合は、ON 句と USING 句は使用
できません。
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 句は指定でき
ません。
184
IBM Red Brick Warehouse: SQL リファレンス ガイド
使用上の注意
NATURAL JOIN または USING の構文を使用してテーブルをジョインすると、最初の
テーブルからすべての共通列が検出順に格納され、その後、最初のテーブルにあるジョ
インの基準列でないすべての列、2 番目のテーブルにあるジョインの基準列でないすべ
ての列を格納したリザルト テーブルが戻されます。ジョインから得られる列のデータ型
は、ジョインした 2 つのテーブルのどちらの列とも異なる場合がありますが、どちらの
列値も格納できるデータ型になります。
ON を使用してテーブルをジョインすると、ジョインする両方の列 (およびそのデータ
型) が、結果に残されます。たとえば、Perkey 列に基づいて Sales テーブルと Period
テーブルをジョインすると、2 つの Perkey 列が中間リザルト セットに格納されます。
クロス ジョイン
クロス ジョイン は、ジョインするテーブルのすべての行の直積を生成します。ジョイ
ンするテーブルのすべての行をジョインし、各行のすべての可能な組み合わせをリザル
ト セットに戻します。
データベース サーバはデフォルトでは、クロス ジョインを指定したクエリが実行され
るとエラー メッセージを戻します。クロス ジョインを指定したクエリを有効にするに
は、SET CROSS JOIN ON 文を実行するか rbw.config ファイルの OPTION
CROSS_JOIN パラメータを編集します。このパラメータの詳細については、448 ページ
を参照してください。
構文
次にクロス ジョインの構文ダイアグラムを示します。
table_reference
CROSS JOIN
table_reference
table_reference
テーブルとして評価されるテーブル、ビュー、シノニム、クエリ式を
指定します。 table_reference の詳細な構文については、185 ページの
『テーブル参照』を参照してください。
CROSS JOIN
ジョインするテーブルのすべての行をジョインし、各行のすべての可
能な組み合わせをリザルト セットに戻します。
テーブル参照
次にテーブル参照の構文ダイアグラムを示します。
creator.
table_name
view_name
synonym
joined_table
(query_expression)
correlation_name
(column_list)
AS
correlation_name
AS
(column_list)
table_name, view_name, synonym
相関名で修飾できるテーブル名、ビュー名、シノニム名のいずれかを
第 7 章 クエリ式
185
指定します。テーブル、ビュー、またはシノニムを指定する場合に
は、それらを作成したユーザのユーザ名を creator に指定してくださ
い。
AS correlation_name
基本テーブル、またはクエリの処理中にクエリ式から派生したテーブ
ルに名前を割り当てます。テーブルに相関名を定義した場合、クエリ
中でそのテーブルを参照するときは相関名を用いる必要があります。
AS キーワードはオプションです。
相関名は、テーブル参照の直後に指定します。たとえば、次のテーブ
ル参照リストは、Store、Product、Period、Sales の各テーブルに、それ
ぞれsr、pr、pd、sl という相関名を割り当てます。
store sr, product pr, period pd, sales sl
相関名を割り当てるのは、クエリとサブクエリの両方が同じテーブル
を参照する場合に、参照先が特定できなくなるのを防ぐためです。サ
ブクエリの詳細については、224 ページを参照してください。
テーブルに相関名を割り当てると、テーブル名ではなく、相関名を使
用して修飾列名を表すことができます。たとえば、Period テーブルに
pd という相関名を割り当てた場合、Period テーブルの Month 列は、
month または pd.month で指定できます。ただし、列参照の範囲内に
他の Month 列がない場合に限ります。 Month 列が他にもあると、参
照先が特定できなくなってしまいます。この列を period.month と指
定すると、エラーになります。
通常、相関名を割り当てるのは、サブクエリの参照先を親 (メイン)
クエリの参照先と関連付ける場合です。たとえば、次の条件は、
Month を参照先とするサブクエリと親クエリの参照を関連付けます。
pp.month = pd.month
上記の条件式により、サブクエリの参照 (pp.month) は、親クエリの
参照 (pd.month) と同じになります。
相関名のもう 1 つの使用方法は、それ自身とジョイン (セルフ ジョ
イン) する場合に、そのテーブルに別の名前を付けることです。セル
フ ジョインの詳細については、「SQL 自習ガイド」を参照してくだ
さい。
column_list
参照テーブルの列に、クエリの処理中に使用する名前を割り当てま
す。テーブルの各列に固有の名前を指定してください。
テーブル参照がナチュラル ジョインや列名に基づくジョインに用いら
れるクエリ式の場合、その列名は一意である必要があります。
joined_table
186
181 ページの『テーブル ジョイン』 の定義に従って、任意の有効な
ジョイン クエリ式を指定します。
IBM Red Brick Warehouse: SQL リファレンス ガイド
(query_expression)
179 ページで説明した非ジョイン クエリ式またはテーブル ジョイン
を指定します。テーブル参照として使用するクエリ式は括弧で囲み、
相関名を割り当てると、他のテーブルや、他のクエリ式の結果とジョ
インできるようになります。たとえば、次のクエリは FROM 句の中
にクエリ式を含む例です。
select *
from (class natural join product)
as cp(col1, col2, col3, col4, col5, col6)
列リストはオプションです。
クエリ指定
クエリ指定 (選択式) には、SELECT、FROM、WHERE、GROUP BY、HAVING、
WHEN の SQL 句を指定します。これらの句には、指定順序があります。
構文
次にクエリ指定の構文ダイアグラムを示します。
SELECT
select_list from_clause
where_clause
group_by_clause
having_clause
when_clause
クエリ指定には、次のものを指定してください。
v SELECT キーワード
v 検索項目リスト
v FROM 句
他の句はオプションです。オプションの句を指定する場合は、構文ダイアグラムに示す
順序で指定します。
ユーザには、クエリ指定で参照する基本テーブルとビューに対する SELECT 特権が必
要です。そうでない場合、クエリはエラーになります。
例
次のクエリは、Class テーブルから各クラス タイプの名前を戻します。
select class_type
from class
CLASS_TYPE
Bulk_beans
Bulk_tea
第 7 章 クエリ式
187
Bulk_spice
Pkg_coffee
Pkg_tea
Pkg_spice
Hardware
Gifts
Clothing
検索項目リスト
検索項目リストには、最終的なリザルト テーブルに戻す列を指定し、重複行を除外する
かを指定します。リザルト テーブルの列の代替名 (エイリアス) を、検索項目リストに
指定することもできます。
構文
ここではクエリ指定を繰り返して、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
リザルト テーブルのすべての行を戻すように指定します。
DISTINCT
重複行をリザルト テーブルから除外するように指定します。
リザルト テーブルの重複行とは、ある行の各列の値が、別の行の各列
の値と等しいものです。 NULL は等しいとみなされます。リザルト
テーブルには、検索項目リストに指定した列のみが格納されます。
*(asterisk)
アスタリスク (*) は、FROM 句に指定されたすべてのテーブル参照の
列名を表します。
ヒント: IBM Red Brick Warehouse では、明示的なテーブル もサポートされていま
す。たとえば、次の 2 つのクエリは同じです。
select * from market
table market
expression
188
リザルト テーブルの特定の列を指定します。通常は、列名、修飾列
IBM Red Brick Warehouse: SQL リファレンス ガイド
名、列名に関連づけた関数 (集約関数、スカラ関数、日付時間関数、
RISQL、OLAP) を expression に指定します。
expression には、スカラ サブクエリ、つまり、1 つのスカラ値 (文
字、日付時間、数値、NULL のいずれか) を戻すサブクエリを指定す
ることもできます。サブクエリの詳細については、224 ページを参照
してください。
190 ページの例に示すように、複数の 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
列のエイリアスは、データベース識別子です。11 ページで説明した名
称と識別子の規則に従っている必要があります。
table_name.*
指定したテーブルのすべての列を指定します。
product.*
集約関数
クエリ指定に GROUP BY 句を指定しない場合、検索項目リストに指定できるのは集約
関数、リテラル値、非相関サブクエリとなります。検索項目リストに集約関数のみを指
定した場合、リザルト テーブルに戻されるのは 1 行です。それ以外は、WHERE 句に
指定した検索条件に応じて複数の行が戻されます。
クエリ指定に GROUP BY 句を指定した場合、検索項目リストに指定する式は次のいず
れかである必要があります。
第 7 章 クエリ式
189
v 文字定数、日時定数、数値定数
v GROUP BY 句に指定した列名、または GROUP BY 句に指定した列名で構成される
式
v FROM 句に指定したテーブルの列のみを参照する定数または式を引数とする集約関数
v 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
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
190
PROMO
4
4
4
1
4
4
4
4
4
VALUE
3
3
3
1
3
3
3
3
3
IBM Red Brick Warehouse: SQL リファレンス ガイド
1998-09-01
1998-10-01
1998-11-01
1998-12-01
4
4
4
5
3
3
3
4
FROM 句
FROM 句は、クエリ指定で取得され評価されたデータのソースをリスト表示することも
できます。各ソースはテーブル参照です。
構文
クエリ指定の構文ダイアグラムと FROM 句の構文の参照ポイント ダイアグラムを示し
ます。
SELECT select_list
from_clause
where_clause
group_by_clause
having_clause
when_clause
次に FROM 句の構文ダイアグラムを示します。
FROM 句:
,
FROM table_reference
sample_clause
table_reference
テーブル名 (基本テーブル、システム テーブル、ビュー、シノニ
ム)、テーブル ジョイン (2 つ以上のテーブルをジョインしたクエリ
式)、サブクエリのいずれかを指定します。詳細な構文ダイアグラムと
説明については、185 ページの『テーブル参照』を参照してくださ
い。
FROM 句のテーブル参照にサブクエリを指定する場合は、テーブル参
照に相関名を付けてください。相関名はテーブルやビューにも使用で
き、テーブルに略記用のエイリアスを与えたり、クエリとサブクエリ
が同じテーブルを参照する場合にテーブルを区別します。
1 つのテーブルを参照する場合は、そのテーブルがクエリ指定の唯一
のデータ ソースになります。複数のテーブルを参照する場合は、クエ
リ指定の論理的結果は直積 (またはクロス ジョイン) になります。直
積を生成しないようにするには、FROM 句か WHERE 句にジョイン
指定を明示してください。
次のテーブル参照は、暗黙的なクロス ジョインを示します。
product, sales
次のテーブル ジョインは、明示的なクロス ジョインを示します。
第 7 章 クエリ式
191
product cross join sales
sample_clause
テーブルの行のサンプルを指定します。195 ページを参照してくださ
い。
FROM 句でのジョイン
1 つのジョイン動作により、2 つのテーブル参照から行が抽出、ジョインされます。ジ
ョインには、次の規則と制約があります。
v ジョイン動作は、インナー ジョインまたはアウター ジョイン (LEFT、RIGHT、
FULL) を指定できますが、どちらの場合もジョインする列を明示的に指定する必要が
あります。
v ジョインするテーブルは、FROM 句に指定します。ジョインする列は、ジョインのタ
イプ (INNER または OUTER) にかかわらず、FROM 句か WHERE 句に指定しま
す。
v ジョインする列は比較可能なデータ型である必要があります。
v 1 つのテーブルを、それ自身とジョインする (FROM 句に同じテーブルを重複して指
定する) ことができます。ただし、少なくとも 1 つのテーブルに相関名を割り当て
て、テーブル参照を区別する必要があります。セルフ ジョイン クエリの例について
は、「SQL 自習ガイド」を参照してください。
v クロス ジョイン (または直積ジョイン) が生成されるのは、rbw.config ファイルの
OPTION CROSS_JOIN パラメータが ON に設定されている場合か、ユーザが SET
CROSS JOIN ON 文を実行した場合のみです。この制約の目的は、誤った限定ジョイ
ン指定などにより、無駄なクロス ジョイン クエリが実行されないようにすることで
す。
v ユニオン ジョインはサポートされません。
v FROM 句でインナー ジョインまたはアウター ジョインを指定する方法には、次の 3
種類があります。
– ON サブ句 (述部に基づくジョイン)
– USING サブ句 (指定した列に基づくジョイン)
– NATURAL JOIN 構文 (同じ名前の列の組み合わせを基準とするジョイン)
v FROM 句にアウター ジョイン条件を指定する場合、最初のテーブルが左のテーブ
ル、2 番目のテーブルが右のテーブルとみなされます。このジョインを WHERE 句
に指定する場合、202 ページの構文ダイアグラムに示すように、指定された演算子か
らアウター ジョインが取られます。
各種ジョインの詳細な構文については、181 ページの『限定ジョイン』を参照してくだ
さい。
192
IBM Red Brick Warehouse: SQL リファレンス ガイド
修飾列名
FROM 句で参照するテーブルに同じ名前の列がある場合は、列が特定できるように、所
属先テーブルの名前で各列の参照を修飾してください。たとえば、Store テーブルの
Storekey 列は、次のどちらかの方法で指定できます。
v storekey
v store.storekey
しかし、 Store テーブルと Sales テーブルの両方が FROM 句で参照される場合は、
Storekey 列への参照を次のように修飾する必要があります。
v store.storekey
v sales.storekey
クエリ式から派生するテーブルには、複数の同じ名前の列が生成される場合がありま
す。このような列をクエリの他の部分で参照する場合は、適切なクエリ指定で列のエイ
リアスを指定するか、相関名の後に派生テーブルの列名リストを指定して、一意な名前
を割り当ててください。
列名の修飾の詳細については、15 ページを参照してください。
例
このクエリは、すべての注文品と品目をそれぞれのテーブルから抽出し、平均価格を算
出します。検索項目リストと 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
Promotion テーブルには、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 章 クエリ式
193
次のクエリでは、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
DOLLARS
1920.00
5280.00
システム テーブルも、基本テーブルやビューと同じ方法でジョインできます。次の例
は、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
194
PSU_LOCATION
IBM Red Brick Warehouse: SQL リファレンス ガイド
TABLE_NAME
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
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
NULL
NULL
NULL
NULL
NULL
MARKET
MARKET
STORE
CLASS
PRODUCT
サンプリング
サンプリング機能は、データ セット全体ではなく行の「無作為」サンプルを処理するク
エリを実行する方法を提供します。サンプリングを使用するクエリのリザルト セット
は、リザルト セット全体から分散的にサンプリングしたものです。たとえば、Sales テ
ーブルの 10% の行から算出した平均日別売上は、テーブル全体から算出したした実際
の平均値に近い値になります。
サンプル要求のメカニズムは、SELECT 文の FROM 句の拡張機能です。 FROM 句は
オプションの SAMPLE 句をサポートし、SAMPLE 句は次の 2 種類のサンプル要求を
サポートします。
v リザルト セット全体から均一に分散してサンプリングした行のサブセット
v データ行が格納された 8KB ブロックのサブセット
構文
次にクエリ指定の FROM 句におけるオプションの sample_clause の構文ダイアグラム
を示します。
SAMPLE 句:
SAMPLE
size
ROW
COUNT
SEED
value
EXACT
BLOCK
SAMPLE
直前の table_reference のサンプリングを指定します。
ROW
基本テーブルから指定の数またはパーセントの行をサンプリングす
る、行サンプリングを指定します。 ROW がデフォルトです。
EXACT
指定されたサイズと一致するサンプル サイズを、行のサンプリングに
よって生成することを保証します。指定された数またはパーセントの
ブロックでサンプルを生成することを常に保証するブロック サンプリ
ングでは、このキーワードを使用できません。パーセントでサイズを
指定する行サンプリングでは、サンプル サイズは小数点以下を切り捨
第 7 章 クエリ式
195
てた正確な数になります。たとえば、35,967 行の 10% は 3,596 で
す。EXACT モード (またはサブクエリ) サンプリングの最大誤差は±
2 行です。
BLOCK
ブロック サンプリングを指定します。指定の数またはパーセントの 8
KB データ ブロックがサンプリングされます。
size
サンプル サイズを、基本テーブル内の行数またはブロック数、あるい
は行またはブロックのパーセントで指定します。この値は必須です。
この値は実数 (FLOAT) 型である必要があります。PERCENT を指定
する場合、100 より小さい値を指定します。
COUNT
サンプル サイズを、行数またはブロック数で指定します。 COUNT
を指定しない場合、パーセントの値が戻されます。サンプル サイズ
を、行またはブロックのパーセントで指定します。
SEED value
乱数発生プログラム用の開始数を指定し、サンプルを再現可能にしま
す。この数値は、正の整数である必要があります。
使用上の注意
サンプリング クエリの結果は、テスト データベースの「トレーニング セット」や、デ
ータ マイニング プログラムに渡すデータなど、他のアプリケーションの入力として使
用できます。この場合、サンプリング機能は、パフォーマンスの最適化よりもアプリケ
ーションの強化に利用されています。クエリまたはサブクエリが完全なリザルト セット
を戻すためにテーブル スキャンを必要とする場合を除き、サンプリングでクエリまたは
サブクエリのパフォーマンスが最適化されることはありません。テーブル スキャンを必
要としないクエリの場合、サンプリング機能を使用するとパフォーマンスが低下するこ
とがあります。
Vista Advisor で候補ビュー分析を行う場合、ファクト テーブルの行のサンプルを制約
すれば、パフォーマンスの最適化が保証されます。 rbw.config ファイルの
ADVISOR_SAMPLE_SIZE パラメータは 5% に設定されているため、デフォルトで候補
分析が最適化されます。 Advisor のサンプリングの詳細については、「IBM Red Brick
Vista ユーザーズ ガイド」を参照してください。
サンプル要求の対象として、次のいずれかの種類のテーブルを table_reference で指定し
ます。
v 基本テーブル
v テンポラリ テーブル
v ビュー
v サブクエリから抽出したテーブル
システム テーブルのサンプリングはできません。
196
IBM Red Brick Warehouse: SQL リファレンス ガイド
EXPORT 文、INSERT INTO...SELECT 文、および CREATE VIEW 文の中でも、通常
のビュー (事前計算ビュー以外のビュー) に対するサンプリング機能を使用できます。
UPDATE 文および DELETE 文の中ではサンプリング機能を使用できません。
デフォルトではサンプル サイズを行またはブロックのパーセントで指定しますが、行数
またはブロック数で指定することもできます。サンプル要求の対象が基本テーブルまた
はテンポラリ テーブルである場合、行とブロックのどちらのサンプリングも使用できま
す。しかし、サブクエリから抽出されたテーブルを対象とする場合、行サンプリングし
か使用できません。この制約の理由は、ブロックの概念がデータベース テーブルに格納
されたデータにしか適用できないためです。ブロックの概念は中間クエリ結果には適用
できません。
テーブル データをセグメント化してもサンプリングを分散させる効果はありません。サ
ンプリング対象のテーブルが 2 つのセグメントで構成されていて、サンプルのパーセン
ト値を 10 に指定した場合、各セグメントから 10% の行またはブロックがサンプリン
グされます。
WHERE 句の制約は、サンプルの選択前ではなく選択後に適用されます。
重要: いずれかのクエリで sample_clause が指定された場合、SuperScan アルゴリズムは
無効になります。それ以外の場合、このアルゴリズムは、クエリによる行の読取
りシーケンスを変更して、サンプルが生成されるのを防ぎます。 SuperScan の技
術については、「管理者ガイド」を参照してください。
行サンプル
サンプルを要求するとき、結果全体の中の一定のパーセントの行をサンプリングする
か、または特定の行数をサンプリングするかを指定できます。デフォルトのサンプル要
求は、テーブル内の指定のパーセントの行を選択する行サンプルであり、これが最も簡
単な方法です。次の例は、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 章 クエリ式
197
ブロック サンプル
基本テーブルのサンプルでは、テーブル データが格納されたデータ ブロックのサブセ
ットを読み取るサンプルを要求できます。無作為に選択されたブロックのリストに格納
されたすべての行がサンプル データ セットを構成します。 Red Brick のデータ行は 8
KB のブロック単位で格納され、行がブロックをまたがって分割されることはありませ
ん。 10% の行サンプルを行うと、これらの行を生成するためにデータ ブロックのほと
んどすべてがアクセスされます。しかし、10% のブロック サンプルを行うと、ソース
データの 10% のみが正確にアクセスされます。デフォルトは、パーセント サンプルで
す。
select * from sales sample block 10
ブロック サンプリングによって、本当に無作為な行サンプリングとは異なる、「クラス
タ化サンプリング」ができます。この方法を使用するとパフォーマンスは向上します
が、技巧が複雑であり分析能力は落ちます。 DBA は隣接するデータ行を意図的に選択
します。この場合、行が論理的にグループ化されたデータ配置になっていることを前提
とします。そのためパフォーマンス向上の代償として、本当に分散されたサンプリング
ができないことがあります。
ヒント: 分散されたサンプルがパフォーマンスの向上よりも重要でなければ、ブロック
サンプリングを選択してください。
ブロック サンプリングの場合、ブロック数指定の方がパーセント指定よりも有効です。
たとえば、テーブル内のブロック数が分からない場合でも、CHECK TABLE...VERBOSE
コマンドを使用すれば、テーブル内の行数を簡単に知ることができます。ブロック当た
りの行数を判定すれば、それらの統計情報に基づいてブロック数を指定できます。
シード
クエリでサンプリングが使用された場合、サンプルの再生成が必要になる場合がありま
す。シード値、すなわち生成番号の疑似乱数シーケンスの開始番号を指定することで、
同じデータには同じクエリを実行できるように再生成可能サンプルを管理できます。重
要なことは、どのシード番号を指定するかではなく、その番号に一意性があることで
す。たとえば、シード値を 2、または 2000 に設定できますが、どちらに設定しても、
そのシードに基づくサンプリング クエリでは同じリザルト セットが戻されます。
シードの詳細については、501 ページの『SET SAMPLE SEED』を参照してください。
マージン
行サンプリングで戻されるサンプルの実際のサイズは、要求したサイズと異なることが
あります。マージン パラメータを設定することにより、行サンプルのサイズの分散度を
監視できます。実際のサイズが、指定したマージン百分位数の範囲外になるたびに、警
告メッセージが表示されます。たとえば、マージンを 10 に設定した場合、サンプル ク
エリで戻される行の量が、要求した量よりも 10% を上回る、または下回るたびに、メ
ッセージが表示されます。マージン設定にかかわらず、クエリは完全に実行されます。
198
IBM Red Brick Warehouse: SQL リファレンス ガイド
マージンの詳細については、499 ページの『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 テーブルをブロック単位 でサンプリングします。
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
ブロック サンプルの結果は、実際の結果にも、行サンプルの結果にも近い値になりま
す。
サンプルへのジョイン: 次のサンプル クエリは、サブクエリを使用して、Period デ
ィメンジョン テーブルから分散的にサンプリングした行のサブセットを生成します。テ
ーブルの約 3% を戻し、それを Sales ファクト テーブルと Store ディメンジョン テー
ブルにジョインすることにより、サンプルした日付について店舗ごとのドルの合計を算
出します。 SET STATS INFO は、サンプリング動作に関する情報を戻すために使用さ
れます。
第 7 章 クエリ式
199
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) の並行性が 1 回以上です。
High: 4、Low: 4、Average: 4
** STATISTICS ** (1457) EXCHANGE (ID: 11) の並行性が 1 回以上です。
High: 1、Low: 1、Average: 1
** STATISTICS ** (1458) CHOOSE PLAN (ID: 2) Choice: 1 を 1 回選択しました。
** STATISTICS ** (1459) CHOOSE PLAN (ID: 2) は 1 テーブルの STAR ジョインを
1 回実行しました。
** STATISTICS ** (1460) CHOOSE PLAN (ID: 2) は STAR ジョインにテーブル SALES の
インデックス SALES_STAR_IDX を 1 回使用しました。
** INFORMATION ** (1466) サンプル スキャン (ID: 4)。サンプル シード : 963616913。
Sample Margin: 10 percent. サンプル サイズの指定
3.00000000 パーセント (25) rows、結果 3.16686967 パーセント (26) rows。
** STATISTICS ** (500) Time = 00:00:00.32 cp time, 00:00:00.39 time,
Logical IO count=296
** INFORMATION ** (256) 229 行が戻されました。
サブクエリでサンプリングを使用すると、アウター クエリへの入力が減少し、それによ
り STARjoin クエリの処理速度が上がります。
サンプルされた 26 行 (メッセージ 1466 を参照) は、Sales テーブルと Store テーブル
へのジョインに対する入力として使用されました。これらのジョインの結果として、229
行 (メッセージ 256 を参照) から成る最終的なリザルト セットが作成されました。前
に示したこのリザルト セットでは、最初と最後の 3 行を除くすべての行が省略されて
います。
再生成可能なサンプル: 上記のクエリで Period テーブルのサンプルを再生成する場
合は、メッセージ 1466 に示されたシード値を指定して、クエリを再実行できます。
200
IBM Red Brick Warehouse: SQL リファレンス ガイド
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)
...
WHERE 句
WHERE 句には、FROM 句から得られた中間リザルト テーブルの各行に適用する検索
条件を指定します。
構文
ここではクエリ指定を繰り返して、where_clause の構文の参照のポイントを与えていま
す。
SELECT select_list from_clause
where_clause
group_by_clause
having_clause
when_clause
次に WHERE 句の構文ダイアグラムを示します。
WHERE 句:
WHERE
search_condition
search_condition
FROM 句から得られた中間リザルト テーブルの各行について真、
偽、不明を判定する条件です。条件が真と判定された行はリザルト テ
第 7 章 クエリ式
201
ーブルに残され、それ以外は除外されます。 WHERE 句を省略する
と、中間リザルト テーブルのすべての行が残されます。
検索条件は、次の条件を満たしている必要があります。
v 39 ページの『条件』 で説明した規則に従って記述されていること
v 検索条件で参照する列は、中間リザルト テーブルの列を一意に指定するものか、サ
ブクエリでのみ可能な相関列の参照であること
ジョインの記述
ジョインするテーブルを FROM 句に指定した場合は、WHERE 句にジョインを指定で
きます。ジョインの記述は、184 ページで説明した規則に従っている必要があります。
たとえば、次のクエリは、City 列に基づく State テーブルと Region テーブルのインナ
ー同一レベル ジョインです。
select *
from state, region
where state.city = region.city
標準とは異なるアウター ジョインの構文
アウター ジョインの構文は、183 ページに示す FROM 句の構文にすることをお勧めし
ます。この構文は ANSI SQL-92 規格に準拠しています。
警告: IBM Red Brick Warehouse は、次のダイアグラムに示す構文を、移行のためにの
みサポートしています。この構文は、WHERE 句におけるレフト、ライト、フル
のアウター ジョイン指定を記述できます。
Sybase 式の構文:
table_1.col
table_1.col
table_1.col
*= table_2.col
=* table_2.col
*=* table_2.col
Oracle 式の構文:
table_1.col =
table_1.col(+)
table_1.col(+)
table_1.col,
table_2.col
table_2.col(+)
= table_2.col
= table_2.col(+)
2 つのテーブルから、比較可能なデータ型の 2 列を指定しま
す。たとえば、Sales テーブルと Orders テーブルのレフト ア
ウター ジョインは、次のように指定します。
where sales.perkey *= orders.perkey
Perkey 列を基準としたインナー同一レベル ジョインから戻さ
れるすべての行と、Sales テーブルのうち、ジョインした列につ
いて Orders テーブルの行と一致しない行が戻されます。
202
IBM Red Brick Warehouse: SQL リファレンス ガイド
上記と同じレフト アウター ジョインは、次のように指定する
こともできます。
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
TOP_PRODS
699.65
570.00
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 句:
,
GROUP BY expression
expression
リザルト テーブルのグループ化列を一意に指定します。通常は、列
名、列のエイリアス、または 1 つ以上の列名に関連付けられた複合式
を expression に指定します。列のエイリアスは、検索項目リストの
第 7 章 クエリ式
203
AS 句で定義してください。188 ページを参照してください。式の詳
細については、35 ページの『第 3 章 式と条件』を参照してくださ
い。
GROUP BY 句は、グルーピング列で定義された行のグループにリザルト テーブルを分
割します。 1 つのグループは、1 行以上から構成されます。複数の行から成るグループ
では、どの行も GROUP BY に指定した列の値が同じです。 NULL は列内の固有値と
して扱われます。リザルト テーブルには、各グループを集約した行が戻されます。
GROUP BY に指定するグループ分けの基準となる列は、リザルト テーブルに表示でき
ます。ただし、検索項目リストになければ、リザルト テーブルには表示されません。
クエリに GROUP BY 句を指定し、そのクエリの FROM 句に指定した列を検索項目リ
ストに指定する場合は、検索項目リストで参照している列は、集約関数の引数か、
GROUP BY 句に指定されている必要があります。つまり検索項目リストの式は、次の
いずれかである必要があります。
v 文字定数、日時定数、数値定数
v GROUP BY 句に指定した列名または列のエイリアス、または GROUP BY 句に指定
した列名または式で構成される式
v FROM 句に指定したテーブルの列のみを参照する定数または式を引数とする集約関数
v 定数、グループ化列 (GROUP BY 句に指定した列名または式)、またはこのクエリで
有効な集約関数を引数としてとるスカラ関数、RISQL 表示関数、OLAP 関数
GROUP BY に指定する列は、HAVING 句の検索条件に指定できます。
検索項目リストにサブクエリを指定したクエリで GROUP BY 句を指定する場合で相関
列がある場合、アウター クエリの GROUP BY 句で相関列を指定してください。相関
サブクエリの詳細については、このマニュアルの 227 ページおよび「SQL 自習ガイ
ド」を参照してください。
例
次のクエリは、2000 年 1 月の各曜日ごとに売上をグループ化します。
select extract(weekday from date) as weekday, sum(dollars) as jan2000_sale
from period natural join sales
where year = 2000 and month = ’JAN’
group by extract(weekday from date)
WEEKDAY
JAN2000_SALE
1
49443.60
2
44292.00
3
31556.00
4
32734.90
5
37303.90
6
33025.55
7
34555.60
204
IBM Red Brick Warehouse: SQL リファレンス ガイド
次の例では、検索項目リストに GROUP GY 句の式を指定する必要はありません。
select sum(dollars) as jan2000_sale
from period natural join sales
where year = 2000 and month = ’JAN’
group by extract(weekday from date)
JAN2000_SALE
49443.60
44292.00
31556.00
32734.90
37303.90
33025.55
34555.60
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 句:
HAVING
search_condition
search_condition
リザルト テーブルの各グループについて真、偽、不明を判定する条件
です。条件が真と判定されたグループはリザルト テーブルに残され、
それ以外は除外されます。 HAVING 句を省略すると、リザルト テー
ブルのすべてのグループが残されます。
検索条件は、次の条件を満たしている必要があります。
v 39 ページの『条件』 で説明した規則に従って記述されていること
v 条件で参照される列が、グルーピング列、相関列の参照、集約関数に指定された列の
いずれかであること
条件に相関サブクエリが指定された場合、その相関サブクエリはリザルト テーブルの各
グループについて評価されます。
第 7 章 クエリ式
205
例
次のクエリは、売上が 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
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 句
集約関数 (AVG、MIN、MAX、SUM、COUNT) の演算、HAVING 句の評価、RISQL 表
示関数または OLAP 関数の処理の結果得られたリザルト テーブルに対する条件を指定
します。条件を満たす行は最終的なリザルト テーブルに残され、それ以外は除外されま
す。
構文
ここではクエリ指定を繰り返して、when_clause の構文の参照のポイントを与えていま
す。
SELECT select_list from_clause
where_clause
group_by_clause
having_clause
when_clause
次に WHEN 句の構文ダイアグラムを示します。
WHEN 句:
WHEN
condition
206
condition
集約関数の演算、HAVING 句の評価、RISQL 表示関数または OLAP
IBM Red Brick Warehouse: SQL リファレンス ガイド
関数の処理の結果得られたリザルト テーブルに対する条件を指定しま
す。 AND、OR、NOT の各論理接続詞を使用した複合条件を指定す
ることもできます。
条件の詳細については、 35 ページの『第 3 章 式と条件』を参照してください。
使用上の注意
WHEN 句の RISQL 表示関数に影響を与えるのは、単純な RESET BY 句のみです。複
雑な RESET BY 指定によって行を選別するには、検索項目で列のエイリアスを指定
し、そのエイリアスを WHEN 句で参照する必要があります。この例は、220 ページを
参照してください。
例
次のクエリは、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
UNION、EXCEPT、INTERSECT 式
UNION、EXCEPT、INTERSECT の演算子はいずれも、複数のリザルト セットを処理
し、1 つのリザルト セットを戻します。
v UNION 演算子は、2 つのクエリ式の結果を 1 つのリザルト セットに結合します。
クエリ式は個別に実行され、各結果が 1 つのリザルト セットに統合されます。
v EXCEPT 演算子は、2 つのクエリ式の結果を評価し、差異を戻します。最初のクエリ
式から戻されるすべての行から、2 番目のクエリ式から戻される行を除外した結果が
リザルト セットに戻されます。
v INTERSECT 演算子は、2 つのクエリ式の結果を評価し、各結果に共通の行のみを戻
します。
次の図は上記の概念をベン図で表したものです。陰影の部分がリザルト セットを示して
います。
第 7 章 クエリ式
207
図 4. リザルト セット
構文
次に UNION 式の構文ダイアグラムを示します。
UNION 式:
(
(
query_expression UNION
EXCEPT
INTERSECT
query_expression
ALL
)
query_expression 180 ページで説明したジョイン クエリ式または非ジョイン クエリ式
を指定します。
文中の各クエリ式では、それぞれの検索項目リストの列数が一致する
必要があります。各リストの対応する列は、同じ順序で指定する必要
がありますが、列名は一致しなくても構いません。リザルト テーブル
の列名は、最初のクエリ式のものが使用されます。括弧を使用しても
変わりません。
リザルト テーブルの列見出しを変更するには、最初のクエリ式の検索
項目リストに AS 句を使用します。union_expression を FROM 句で
使用する場合は、相関名と列リストを使用して見出しを指定します。
185 ページを参照してください。
各クエリ式の対応する列は、同じデータ型か、データ型間で暗黙の変
換が行われるものにしてください。短いデータ型は長いデータ型に変
換され、精度の低いデータ型は精度の高いデータ型に変換されます。
たとえば、一方の列が小桁実数 (REAL) 型で、対応する列が実数
(FLOAT) 型の場合は、リザルト テーブルの列は実数 (FLOAT) 型に
なります。これは小桁実数 (REAL) 型より実数 (FLOAT) 型の方が精
度が高いためです。
対応する列のデータ型間の変換は、210 ページのデータ型変換表に示
します。
208
IBM Red Brick Warehouse: SQL リファレンス ガイド
UNION, EXCEPT, INTERSECT
UNION は、2 つ以上のリザルト セットの行を 1 つのリザルト セッ
トに結合します。
EXCEPT は、2 つのリザルト セットを評価し、最初のリザルト セッ
トから、2 番目のリザルト セットにない行をすべて戻します。
INTERSECT は、2 つのリザルト セットに共通の行をリザルト セッ
トに戻します。
UNION、INTERSECT、EXCEPT の各演算子は、1 つの UNION 式に
まとめることができます。
複数の演算子を使用した文のデフォルト評価順 (優先順位) は、左か
ら右になります。ただし、INTERSECT 演算子は、UNION および
EXCEPT の前に評価されます。評価順は、括弧を使用して変更できま
す。
ALL
ALL を指定すると、union_expression の結果から重複行が除外されま
せん。 2 つのクエリ式から同じ行が戻された場合、2 行とも最終結果
に戻されます。 ALL を指定しないと、重複行はリザルト セットから
除外されます。
複数の UNION、EXCEPT、 INTERSECT 演算子と ALL キーワード
を指定した文では、評価順によって結果が変わります。重複行が除外
されるかどうかは、クエリの評価順と ALL キーワードの位置関係に
よって決まります。最後に実行される演算に ALL キーワードを指定
しないと、直前の評価で残された重複行は除外されてしまいます。
使用上の注意
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)
括弧を使用してデフォルトの優先順位を変更すると、処理順が変わり、重複行が除外さ
れるかどうかも変わります。
第 7 章 クエリ式
209
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 自
習ガイド」の第 5 章を参照してください。
データ型の変換
UNION、INTERSECT、EXCEPT 演算で対応する列のデータ型が異なる場合、データ型
の変換結果は次の表のようになります。
データベース サーバが、サポートするデータ型のいずれかと 文字 (CHAR) 型、可変長
文字 (VARCHAR) 型、10 進数 (DEC) 型、小桁整数 (TINYINT) 型、小桁整数
(SMALLINT) 型のいずれかを比較する場合、変換結果は次の表のようになります。
CHAR(m)
VARCHAR(m)
DEC(p1,s1)
TINYINT
SMALLINT
INTEGER
SERIAL
REAL§
FLOAT*
DATE
TIME(m)
TIMESTAMP(m)
CHAR(n)
VARCHAR(n)
DEC(p2, s2)
TINYINT
SMALLINT
CHAR
(MAX(m,n))
VARCHAR
(MAX(m,n))
error
error
error
error
error
error
error
error
error
error
VARCHAR
(MAX(m,n))
VARCHAR
(MAX(m,n))
error
error
error
error
error
error
error
error
error
error
error
error
error
error
error
error
†
†
†
†
†
FLOAT
FLOAT
error
error
error
†
TINYINT
SMALLINT
INTEGER
INTEGER
REAL
FLOAT
error
error
error
†
SMALLINT
SMALLINT
INTEGER
INTEGER
REAL
FLOAT
error
error
error
†
変換結果は、データ型の精度とスケールによって異なります。値を格納できる最小許容
データ型が使用されます。
§
REAL は、FLOAT(4) と同じです。
*
FLOAT は、DOUBLE PRECISION と同じです。
210
IBM Red Brick Warehouse: SQL リファレンス ガイド
データベース サーバが、サポートするデータ型のいずれかと整数 (INTEGER) 型、小桁
実数 (REAL) 型、実数 (FLOAT) 型、日付 (DATE) 型、時刻 (TIME) 型、タイムスタ
ンプ (TIMESTAMP) 型のいずれかを比較する場合、変換結果は次の表のようになりま
す。
INTEGER
REAL
FLOAT*
DATE
TIME(n)
TIMESTAMP(n)
CHAR(m)
VARCHAR(m)
DEC(p1,s1)
TINYINT
SMALLINT
INTEGER
SERIAL
REAL§
FLOAT*
DATE
TIME(m)
error
error
†
INTEGER
INTEGER
INTEGER
INTEGER
FLOAT
FLOAT
error
error
error
error
FLOAT
REAL
REAL
FLOAT
FLOAT
REAL
FLOAT
error
error
error
error
FLOAT
FLOAT
FLOAT
FLOAT
FLOAT
FLOAT
FLOAT
error
error
error
error
error
error
error
error
error
error
error
DATE
error
error
error
error
error
error
error
error
error
error
error
error
TIMESTAMP(m)
error
error
error
error
error
error
error
error
error
error
error
error
error
error
TIME
(MAX(m,n))
error
TIMESTAMP
(MAX(m,n))
†
変換結果は、データ型の精度とスケールによって異なります。値を格納できる最小許容
データ型が使用されます。
§
REAL は、FLOAT(4) と同じです。
*
FLOAT は、DOUBLE PRECISION と同じです。
例
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
第 7 章 クエリ式
211
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
次の例では、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%’
212
IBM Red Brick Warehouse: SQL リファレンス ガイド
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
次に、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 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
第 7 章 クエリ式
213
次のクエリでは、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 自習ガ
イド」を参照してください。
SELECT 文
SELECT 文は、データベースから複数のデータ行を抽出します。任意のクエリ式と、そ
の後に指定するオプションの SUPPRESS BY 句や ORDER BY 句から構成されます。
クエリ式を、データベース サーバが実行できる SELECT 文に変えるには、セミコロン
(または使用しているエントリ ツールに応じた終端記号) を付加します。
単純な例をいくつか示します。
v テーブル ジョイン:
sales_east natural join sales_west;
v クエリ指定:
select * from sales_east natural join sales_west;
v UNION 式:
select * from sales_east union select * from sales_west;
v 明示的テーブル:
table sales_east;
SELECT 文は、SELECT キーワードを必要とするとは限りません。クエリ式により、検
索項目リストや FROM 句が暗黙的に指定される場合もあります。
構文
次に SELECT 文の構文ダイアグラムを示します。
query_expression
order_by_clause
suppress_by_clause
query_expression 180 ページで説明したジョイン クエリ式または非ジョイン クエリ式
を指定します。
214
IBM Red Brick Warehouse: SQL リファレンス ガイド
リザルト テーブルの行をソートします。詳細については、215 ページ
の『ORDER BY 句』を参照してください。 ORDER BY 句には、
RESET BY と BREAK BY の 2 つの RISQL サブ句を指定すること
もできます。これらのサブ句については、それぞれ 218 ページと 221
ページでそれぞれ定義されています。
order_by_clause
BREAK BY 句を指定した SELECT 文は、INSERT 文では使用できま
せん。
suppress_by_clause
指定した列に NULL、空白、または 0 が格納されていた場合に、最
終的なリザルト セットからその行を除外します。詳細については、
223 ページの『SUPPRESS BY 句』を参照してください。
ORDER BY 句
ORDER BY 句は、指定した列の値に応じて、リザルト テーブルの行を昇順または降順
にソートします。
構文
次に ORDER BY 句の構文ダイアグラムを示します。
ORDER BY 句:
,
ORDER BY column_name
integer
ASC
DESC
NULL
FIRST
LAST
RESET BY
column_name
subclause
BREAK BY
subclause
リザルト テーブルの行をソートする基準となる列を指定します。
結果のソートに使用する列は、リザルト テーブルに表示しなくても構
いません。検索項目リストにない列を基準にソートする場合は、ソー
トの基準列は表示されません。 ORDER BY 句の前にあるクエリ式が
クエリ指定の場合は、検索項目リストに指定するすべての列を
GROUP BY 句に指定しないと、列に基づくソートはできません。
重複を除外する DISTINCT キーワードを SELECT 句に使用する場合
は、ORDER BY 句に指定するすべての列を検索項目リストに指定し
てください。
ORDER BY 句に複数の列名を指定した場合は、各列を組み合わせた
ソート順になり、優先順位は左から右になります。
第 7 章 クエリ式
215
integer
検索項目リストの列の相対列番号を指定します。 0 より大きく、リザ
ルト テーブルの列数以下の整数を指定してください。この整数は、検
索項目リストの k 番目の列を指定します。
ASC
昇順に値をソートします。 ASC がデフォルトです。
DESC
降順に値をソートします。
NULL
デフォルトのソートでは、NULL は、ホストのオペレーティング シ
ステムの照合シーケンスの最大値より大きいと評価されます。このた
め、昇順ソートの場合はシーケンスの最後、降順ソートの場合はシー
ケンスの最初になります。デフォルトは、次の時点で変更できます。
v データベース サーバ初期化ファイルからデータベース サーバを初
期化したとき
v SET ORDER BY 文を使用してクエリを実行する前
v NULL サブ句を使用したクエリの実行中
データベース サーバ初期化ファイル (.rbwrc ファイル) で NULL の
初期デフォルト位置を決める方法は、「管理者ガイド」で説明されて
います。デフォルトの位置をクエリごとに変更する SET ORDER BY
文は、472 ページで説明します。
ソート シーケンス
行は、特定の列のデータ型に応じた順にソートされます。数値データ型の場合は値の大
きさの順、文字データ型の場合はアルファベット順、日付時間データ型の場合は時系列
にソートされます。ソート シーケンスのどこで NULL が表示されるかは、前の説明を
参照してください。
データベース サーバは、サーバ ロケールが指定する照合シーケンスおよびソート方法
に従ってデータを比較、ソートします。異なるソート方法をクライアントに指定して
も、影響はありません。データベース サーバ ロケールの設定の詳細については、「管
理者ガイド」を参照してください。
使用上の注意
UNION 式の後に指定された ORDER BY 句は、最初のクエリ式から得られたテーブル
で指定された列を基準に、最終的なリザルト セットをソートする必要があります。つま
り、最初のクエリ式でエイリアスを割り当てられた列名はそのエイリアスで参照される
必要があり、その限定列を UNION 式の ORDER BY 句に指定することはできません。
UNION 式の後に指定される ORDER BY 句には、BREAK BY サブ句は使用できます
が、RESET BY 句は使用できません。
ORDER BY 句では、OLAP 関数のエイリアス、またはクエリの他の場所で使用されて
いる OLAP 関数の定位置参照のどちらかを使用できます。 RISQL 表示関数を ORDER
BY 句で参照することはできません。
216
IBM Red Brick Warehouse: SQL リファレンス ガイド
例
次の 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 KG_TYPE
Aroma Sounds CD
Aroma Sounds CD
Easter Sampler
Coffee Sampler
Christmas Sampler
Spice Sampler
Tea Sampler
Aroma designer box
Aroma designer box
Gift box
Gift box
Gift box
Gift box
Gift box
次の 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 列は
表示されないことに注意してください。
第 7 章 クエリ式
217
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
DOLLARS
Colombiano
330.75
Aroma Roma
355.25
Colombiano
330.75
Colombiano
317.25
Aroma Roma
333.50
La Antigua
333.50
Veracruzano 337.50
次のクエリは、各都市で販売した 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 に再初期化します。
218
IBM Red Brick Warehouse: SQL リファレンス ガイド
RESET BY の機能は OLAP 関数には必要ありません。OLAP パーティションが、
OVER 句で指定される場合と同様に RESET BY の動作をエミュレートします。
構文
次に、単純な RESET BY サブ句の構文ダイアグラムを示します。
RESET BY サブ句:
RESET BY
order_reference
次に、検索項目リストの表示関数を対象とした複雑な RESET BY サブ句の構文ダイア
グラムを示します。
複雑な RESET BY サブ句:
AND
,
RESET RISQL_reference
BY
order_reference
RESET BY
ORDER BY 句の直後に指定するサブ句です。
order_reference
ORDER BY 句の列の中から、初期化の基準となる列を指定します。
order_reference の値、または ORDER BY 句で指定したそれ以前の列
の値が変化するたびに、コントロール ブレークが発生します。
参照できるのは、次のどちらかです。
v ORDER BY 句の列名。
v ORDER BY 句の k 番目の列を指定する整数値。1 は ORDER BY
句の最初の列、2 は ORDER BY 句の 2 番目の列を示します。
RISQL_reference
クエリの検索項目リストに指定した、最低 1 つの表示関数を参照しま
す。参照できるのは、次のどちらかです。
v 0 より大きく、中間リザルト テーブルの列数以下の整数値。この
整数はクエリの k 番目の列を指定し、その列には、RISQL 表示関
数が含まれている必要があります。
v 最低 1 つの RISQL 表示関数を含む検索項目リストに指定された式
を参照する列のエイリアス。
例
次のクエリは、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
第 7 章 クエリ式
219
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
同一製品グループ内の行の順番は不定です。
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
SALES_00
Coffee Mug
55.00
Aroma Sounds Cassette 136.00
Special Tips
538.25
Earl Grey
556.00
Earl Grey
436.00
Special Tips
714.50
RANK_00
1
2
1
2
1
2
rank(sum(-dollars))
上記の式では、エイリアス rank_00 の代わりに次の式を WHEN 句に指定すると、すべ
ての都市について、2000 年の売上の下位 2 製品のみを戻し、その都市における製品の
順位付けが示されます。
220
IBM Red Brick Warehouse: SQL リファレンス ガイド
CITY
Atlanta
Atlanta
PROD_NAME
SALES_00
Coffee Mug
55.00
Aroma Sounds Cassette 136.00
RANK_00
1
2
BREAK BY サブ句
BREAK BY サブ句に指定した列の値が変わるたびに、SUMMING 句に指定した列の小
計を算出します。
構文
次に BREAK BY サブ句の構文ダイアグラムを示します。
BREAK BY サブ句:
,
BREAK BY
order_reference
SUMMING select_reference
order_reference または、 ORDER BY 句で指定したそれ以前の列の値が変化するたびに
(コントロール ブレーク)、BREAK BY サブ句は小計行をリザルト テーブルに挿入しま
す。この小計は、列値が変わるまで値を合計した値です。 BREAK BY サブ句は、リザ
ルト テーブルの最終行に総計行も挿入します。
order_reference
ORDER BY 句で参照する列を指定します。参照できるのは、次のど
ちらかです。
v 列名または列のエイリアス
v 0 より大きく、リザルト テーブルの列数以下の整数。この整数
は、検索項目リストの k 番目の列を指定します。
SUMMING select_reference
検索項目リストの数値表現式を指定します。参照できるのは、次のど
ちらかです。
v 列名または列のエイリアス
v 0 より大きく、リザルト テーブルの列数より小さい整数。この整
数は、検索項目リストの k 番目の列を指定します。
v select_reference は、小計が算出できる数値データ型である必要があ
ります。
使用上の注意
BREAK BY サブ句を指定した SELECT 文は、INSERT 文では使用できません。
BREAK BY サブ句は、OLAP 関数を使用したクエリで使用できます。
BREAK BY サブ句をデータベース サーバが処理する手順は、次のようになります。
v order_reference の値、または ORDER BY 句で指定したそれ以前の列値が変化するた
びに、小計行を戻します。
第 7 章 クエリ式
221
v リザルト テーブルの最終行に、総計行を戻します。
小計行のフォーマットは、リザルト テーブルの他の行と同じですが、行の値は次のよう
になります。
v BREAK BY の基準の列には、現在の小計値
v 他の列には NULL
小計行を示す識別子はありません。リザルト テーブル中の小計行を見分けるには、
order_reference の値、または ORDER BY 句で指定したそれ以前の列値が変化する行を
検索します。
このように、小計行を識別するものがないため、小計行とデータ行が混同される恐れが
あります。混乱を避けるために、通信ゲートウェイを通じてデータベースにアクセスす
るクライアント アプリケーションは小計行を検出、識別できる必要があります。リザル
ト テーブルは表示できても、フォーマットを設定できない SQL ツールの場合は、小計
行の識別ができないことがあります。
例
次のクエリは、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
222
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
IBM Red Brick Warehouse: SQL リファレンス ガイド
SUPPRESS BY 句
SUPPRESS BY 句は、指定したすべての列が、NULL、空白、または 0 のいずれかであ
る行をリザルト テーブルから除外します。行の除外は、クエリに指定した RISQL 表示
関数または OLAP 関数を実行する直前に行われます。
構文
次に SUPPRESS BY 句の構文ダイアグラムを示します。
SUPPRESS BY 句:
,
SUPPRESS BY column_reference
column_reference リザルト テーブルを評価するときに、NULL、空白、0 の有無をチェ
ックする列を指定します。 SUPPRESS BY 句に指定できるのは、検
索項目リストに指定した列名のみです。参照できるものは、次のどち
らかです。
v 相対列番号 (整数)
v 列名または列のエイリアス
SUPPRESS BY サブ句では、RISQL 表示関数や OLAP 関数は参照できません。
例
次のクエリは、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
SELECT 文の処理方法
SELECT 文を実行すると、データベース サーバは次の処理を実行します。
第 7 章 クエリ式
223
1. FROM 句に指定されたテーブルからデータ行を抽出し、各テーブルの行をジョイン
し、中間リザルト テーブルを生成します。
2. WHERE 句に指定された検索条件を満たす行を、中間リザルト テーブルから抽出し
ます。 WHERE 句を指定しなければ、中間リザルト テーブル全体が残されます。
WHERE 句の制約は、サンプルの選択前ではなく選択後に適用されます。たとえ
ば、次のクエリは、ディメンジョン全体の 10% をサンプリングした後で制約を適
用します。
(select * from product sample 10 where prod_name = ’Aroma
Roma’)
つまり、この例ではサンプル スキャンの前に他の演算は実行されません。
3. リザルト テーブルを、GROUP BY 句で指定したグループに分割します。
4. 指定したグループ (グループ分けを指定しなければリザルト テーブル全体) に対
し、集約関数を処理します。
5. HAVING 条件を指定した場合は、条件を満たすグループのみを残します。
6. SUPPRESS BY 句を指定した場合は、該当する行を除外します。
7. すべての OLAP 関数を処理します。
8. ORDER BY 句を指定した場合は、リザルト テーブルの行を最後の ORDER BY 句
の指定順序に並べ替えます。
9. すべての RISQL 表示関数を処理し、RESET BY サブ句に従って値を算出します。
10. WHEN 句に指定した条件を満たす行のみを、リザルト テーブルに残します。
11. 検索項目リストに DISTINCT キーワードを指定した場合は、重複行を除外します。
12. BREAK BY 行を作成します。 BREAK BY サブ句は ORDER BY 句の一部です。
上記の動作が完了すると、最終的なリザルト テーブルがユーザに戻されます。ただし、
上記の手順はクエリによっては行われない部分もあります。たとえば、クエリ式 が
UNION 式 である場合、RESET BY 句は使用できません。
SELECT 文は、最終結果または中間結果の行のサイズが行の最大幅より大きいと異常終
了します。行の最大幅については、「管理者ガイド」を参照してください。
サブクエリ
サブクエリは、括弧で囲んだクエリ式のことです。サブクエリは、INSERT、DELETE、
UPDATE、SELECT 文、または他のクエリ式に任意の深さで入れ子にすることができま
す。サブクエリを含む文や式を、サブクエリの親 といいます。通常サブクエリは、親ク
エリのリザルト セットと相関させてリザルト セットを取得するのに使用します。
「SQL 自習ガイド」には、検索項目リスト、FROM 句、WHERE 句の中で使用するサ
ブクエリの詳しい例が示されています。
224
IBM Red Brick Warehouse: SQL リファレンス ガイド
スカラ サブクエリとテーブル サブクエリ
ANSI 標準に従って、サブクエリは スカラ クエリ、行 クエリ、テーブル クエリの 3
つに分類されます。IBM Red Brick Warehouse では、スカラ サブクエリとテーブル サ
ブクエリがサポートされています。
v スカラ サブクエリは、1 つのスカラ値 (1 つの列、行) を戻し、検索項目リスト、ま
たは比較演算子の引数として条件 に指定します。
v テーブルサブクエリは、0 以上の行で構成されるリザルト テーブルを戻し、FROM
句、または EXISTS、IN、SOME、ANY、ALL 述部の引数として条件に指定します。
FROM 句のサブクエリと、EXISTS 述部の引数として使用するサブクエリは、複数の
列と複数の行を戻すことができます。ただし、IN、SOME、ANY、ALL 述部の引数と
して使用するサブクエリの検索項目リストは、1 列に限定されます。
条件と述部の構文については、『第 3 章 式と条件』を参照してください。
構文
次にサブクエリの構文ダイアグラムを示します。
(query_expression)
query_expression 180 ページで説明したジョイン クエリ式または非ジョイン クエリ式
を指定します。列名リストは、括弧で囲んでください。
他のクエリ式と同様に、サブクエリでは ORDER BY 句や SUPPRESS BY 句は指定で
きません。
次のどちらかのサブクエリの場合、サブクエリの検索項目リストには 1 つの式しか指定
できません。
v スカラ サブクエリ
v SOME、ANY、ALL、IN 述部の引数として条件に指定されるテーブル サブクエリ
クエリとサブクエリとの相関関係は、227 ページの「相関サブクエリ」で説明します。
例
通常、サブクエリは、親クエリへの入力データとなる値集合を戻します。次の文では、
サブクエリがギフト製品の全製品名を抽出し、親クエリが 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
第 7 章 クエリ式
225
from product
where pkg_type like ’Gift%’)
group by prod_name
PROD_NAME
Spice Sampler
Tea Sampler
Coffee Sampler
Christmas Sampler
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 自習ガイド」に、FROM 句のサブクエリのさらなる詳細例が記載されて
います。通常は、FROM 句のサブクエリの方が項目リストの等価相関サブクエ
リよりも速く実行されます。
226
IBM Red Brick Warehouse: SQL リファレンス ガイド
相関サブクエリ
前述の例はいずれも、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
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 年の対応する売上を抽出します。このクエリが行う動作は次の
とおりです。
第 7 章 クエリ式
227
1. 親クエリは、Date 列の値が 1999 年 1 月である行を抽出します。この行には、製
品、製品分類名、日付、店舗名のデータが格納されています。
2. サブクエリは、1998 年 1 月について、対応する行を抽出します。
3. 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 句に指定されたテーブルを検索することで、修飾さ
れていない 列参照名を解決します。
v 列名が検索項目リストで見つかった場合は、検索は正常に終了します。
v 1 つのテーブルで列名が見つかった場合は、検索は正常に終了します。
v 列名が複数のテーブルで見つかった場合は、データベース サーバはエラーを戻しま
す。
v 列名が見つからない場合は、データベース サーバは親クエリの検索項目リストに指
定された列のエイリアスを検索してから、親クエリの FROM 句を検索します。 1 つ
のテーブルで列名が見つかった場合は、検索は正常に終了します。列名が見つから
ず、親クエリが他の親クエリの子クエリである場合は、参照先列名が見つかるまで検
索が続けられます。
入れ子にされたサブクエリで列名が明示的に修飾されていない場合は、この列名の解決
手順が原因で、クエリが予期しない結果を戻すことがあります。
データベース サーバは、FROM 句に指定されたテーブルを検索して、修飾されている
列名の参照を解決します。この場合、最も似た 修飾子を使用したクエリ指定が使用され
ます。
228
IBM Red Brick Warehouse: SQL リファレンス ガイド
この列名の解決規則は、あらゆるサブクエリに適用されます。
例
列名を解決する例を示します。この例では、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 と table_2 の両方に存在する場合は、上記のサブクエリ
は、col_a の列参照名が次のように修飾されていない限り、table_2 から col_a を取得
します。
(select table_1.col_a from table_2)
重要: 前出の例は、名前の解決方法を示すために紹介しましたが、このような列名とテ
ーブル名の付け方はお勧めできません。
行グループ: 検索項目リストに集約関数を使用した親クエリが相関サブクエリも使用
する場合は、親クエリの GROUP BY 句に相関列を指定してください。これは、次の例
に示すように、親クエリの GROUP BY 句が、親クエリの検索項目リストの列名とサブ
クエリの相関列名を使用することを意味します。
この規則は、親クエリの WHERE 句で使用する相関サブクエリには適用されません。
例
次のクエリは、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’
第 7 章 クエリ式
229
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
230
IBM Red Brick Warehouse: SQL リファレンス ガイド
第 8 章 SQL 文と RISQL 拡張機能
構造化問い合わせ言語 (SQL) には、データを制御、定義、操作する文があります。この
章は、各 SQL 文と、SQL を拡張した RISQL 拡張機能をアルファベット順に説明した
リファレンスです。
この章では、次の操作を行う文について説明します。
v テーブル、インデックス、セグメントの変更
v データベース オブジェクトの作成と削除
v データベース行の変更
v データベース権限とテーブル特権の付与と取消
v テーブルとデータベースのロックと解除
v データベースとユーザ操作の制御
SET 文は、 439 ページの『第 9 章 SET 文』を参照してください。
SELECT 文の詳細については、 179 ページの『第 7 章 クエリ式』を参照してくださ
い。
© Copyright IBM Corp. 1996, 2004
231
ALTER DATABASE
ALTER DATABASE 文には、次の目的があります。
v セグメント内にバージョン ログを作成します。
v バージョン ログを削除します。
v バージョニング トランザクションを開始、終了します。
v データベースのバキューム クリーナ デーモン/スレッドを開始、終了します。
v バージョン ログを整理します。
v 後続のクエリで読み込むリビジョンの番号を固定します。
v クエリが最新リビジョンを読み込めるように、リビジョン番号を解除します。
v データベース セッションを終了します。
v セグメントをバックアップ セグメントとしてマークします。
バージョン ログとして指定できるのは、1 つのデータベースにつき 1 つのセグメント
のみです。バージョン ログが定義されていない場合は、バージョニング トランザクシ
ョンは実行できません。
バックアップ セグメントとして定義できるセグメントは、 1 つのデータベースにつき
1 つのみです。バックアップ セグメントが存在しない場合、TMU バックアップ操作お
よび復元操作は実行できません。
許可
ALTER DATABASE 文を実行するユーザは、次の中で少なくとも 1 つの条件を満たし
ている必要があります。
v DBA システム ロールのメンバーであること
v 明示的に付与されるかユーザが作成したロールのメンバーであることにより、
ALTER_SYSTEM 権限を持っていること (バージョン ログを実行する場合)
v 明示的に付与されるかユーザが作成したロールのメンバーであることにより、
BACKUP_DATABASE および RESTORE_DATABASE 権限を持っていること
構文
次に ALTER DATABASE 文の構文ダイアグラムを示します。
232
IBM Red Brick Warehouse: SQL リファレンス ガイド
ALTER DATABASE
ALTER DATABASE
version_log_specification
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
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 章 SQL 文と RISQL 拡張機能
233
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
データベースで新しいバージョニング トランザクションを処理可能に
します。バージョニングが明示的に停止された場合、またはデータベ
ースにバージョン ログを作成した直後のみ、バージョニングを起動す
る必要があります。この文を実行するには、バージョン ログが存在し
ている必要があります。
STOP VERSIONING
データベースが新しいバージョニング トランザクションを受け入れる
のを停止します。 ALTER DATABASE STOP VERSIONING 操作を
実行すると、データベースのバージョン情報を変更する新しいトラン
ザクションは、自動的にブロッキング トランザクションにはならず、
エラーが発生して失敗します。
IBM Red Brick Warehouse の再起動後も、データベースのバージョニ
ング状態は保持されます。したがって、データベースのバージョニン
グが動作中に rbwapid デーモン (UNIX システムの場合) または IBM
Red Brick Warehouse サービス (Windows システムの場合) が停止さ
れた場合、デーモンまたはサービスを再起動すると同時にバージョニ
ングは再起動されます。同様に、rbwapid デーモンまたは IBM Red
Brick Warehouse サービスが停止中にデータベースのバージョニング
が停止された場合、デーモンまたはサービスを再起動してもそのデー
タベースのバージョニングは停止されたままとなります。
234
IBM Red Brick Warehouse: SQL リファレンス ガイド
ALTER DATABASE
START CLEANING
データベースに対するバキューム クリーナ デーモンまたはスレッド
が停止している場合に、これを開始します。
STOP CLEANING
データベースに対するバキューム クリーナ デーモンまたはスレッド
が動作している場合に、これを停止します。バキューム クリーナが停
止中に rbwapid デーモン (UNIX システムの場合) または IBM Red
Brick Warehouse サービス (Windows システムの場合) が停止された
場合、そのデーモンまたはサービスを再起動するとバキューム クリー
ナは自動的に再起動されます。
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 文の実行時に
クエリ リビジョンが凍結されている場合、クエリ リビジョンの凍結
第 8 章 SQL 文と RISQL 拡張機能
235
ALTER DATABASE
が解除され、バキューム クリーナによってデータベースのバージョン
ログが完全にフラッシュされてから、セッションの制御がユーザに戻
されます。
重要: バージョン ログをチェックしてログが削除されているかどうかを確認するため、
DST_DATABASES テーブルの CURRENT_REVISION 列と
LATEST_MERGED_REVISION 列に対するクエリを実行します。この 2 つの列が
一致している場合は、バージョン ログが削除されています。
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 バックアップ操作および復元操作については、「テーブル
マネジメント ユーティリティ リファレンス ガイド」を参照してくだ
さい。バックアップ セグメントは通常 CREATE SEGMENT 文によ
って作成され、複数の PSU を使用できます。
DROP BACKUP DATA
データベースからバックアップ データを削除し、バックアップ セグ
メントを通常のセグメントに変更します。セグメント自身は削除され
ません。このコマンドが実行された後、TMU バックアップ操作およ
び復元操作は実行できなくなります。 ALTER DATABASE コマンド
を有効にするために、バックアップ セグメントを「オフライン」にす
236
IBM Red Brick Warehouse: SQL リファレンス ガイド
ALTER DATABASE
る必要はありません。データベースからバックアップ セグメントを削
除するために DROP SEGMENT 文を使用することはできません。
使用上の注意
バージョン ログが作成されたセグメント内の PSU の展開には、時間がかかることがあ
ります。このセグメントの PSU に対する MAXSIZE パラメータは、バージョン ログ
に直接割り当てられるディスク領域の量を指定するため、このパラメータの設定には注
意してください。
バージョン ログのロケーションが、パフォーマンスに影響を与えることがあります。バ
ージョン ログの使用量が多い場合、たとえば、LOAD 操作によってデータベース内の
多数のブロックを変更する場合などは、バージョン ログへのアクセスによってシステム
パフォーマンスが低下することがあります。したがって、バージョン ログは RAID レ
ベル 0 やレベル 1 に設定されたストレージなどの高パフォーマンス ストレージに配置
するのが最適です。最大限のパフォーマンスを確保するには、データベース ファイルが
格納されているデバイスから独立したデバイスにバージョン ログを配置することをお勧
めします。高パフォーマンスな Write 操作が必要とされるため、RAID レベルが大きい
デバイスには配置しないことをお勧めします。
バージョン ログにはデータベース内の複数のセグメントからデータが格納されるため、
バージョン ログを損失した場合は、データベース全体をバックアップから復元する必要
が生じる可能性があります。この問題を防止するため、バージョン ログは、RAID レベ
ル 0 などの信頼性の高い格納装置上に格納する必要があります。
例
次にセグメントを作成し、バージョン ログとして指定する SQL 文を示します。
1. セグメントを作成します。
create segment versionlog_seg
storage ’/test/vl1’ maxsize
storage ’/test/vl2’ maxsize
storage ’/test/vl3’ maxsize
storage ’/test/vl4’ maxsize
1024,
1024,
1024,
1024;
2. 作成したセグメントをバージョン ログとして指定します。
alter database create version log in versionlog_seg;
この文はすべての物理領域をバージョン ログとして割り当てるため、時間がかかる
ことがあります。
3. データベースのバージョニングを開始します。
alter database start versioning;
第 8 章 SQL 文と RISQL 拡張機能
237
ALTER INDEX
ALTER INDEX 文には、3 つの目的があります。
v インデックスのフィル ファクタの変更。フィル ファクタの設定値は、データのロー
ド時のインデックス ノードの使用率を指定します。
v TARGET インデックスのオプションであるドメイン サイズの変更。 TARGET イン
デックスの格納方法、つまり「表現形式」は、ドメイン サイズに基づいて選択され
ます。ドメイン サイズを指定しないと、適切な表現形式をサーバが自動的に選択し
ます。
v インデックスの内容を説明したコメントの付加。コメントは、 RBW_INDEXES シス
テム テーブルに格納されます。
許可
インデックスを変更するユーザは、次の中で少なくとも 1 つの条件を満たしている必要
があります。
v DBA システム ロールのメンバーであること
v 明示的に付与されるかユーザが作成したロールのメンバーであることにより、
ALTER_ANY 権限を持っていること
v RESOURCE システム ロールのメンバーで、かつインデックスの作成者であること
v インデックスの作成者であり、明示的に付与されるかユーザが作成したロールのメン
バーであることにより、ALTER_OWN 権限を持っていること
構文
次に ALTER INDEX 文の構文ダイアグラムを示します。
ALTER INDEX
index_name
CHANGE FILLFACTOR
CHANGE DOMAIN
COMMENT
index_name
integer
SMALL
SIZE
MEDIUM
LARGE
’ character_string ’
NULL
変更するインデックスの名前を指定します。フィル ファクタとコメン
トは、ユーザが作成したインデックスとシステムが生成したインデッ
クスの両方を変更できます。ドメイン サイズは、ユーザが作成した
TARGET インデックスのみに適用されます。
ユーザが作成したインデックスのフィル ファクタ、ドメイン サイ
ズ、およびコメントを変更する場合は、CREATE INDEX 文に指定し
たインデックス名を指定してください。システムが生成したインデッ
クスのフィル ファクタやコメントを変更する場合は、システムが生成
したインデックス名を指定します。
238
IBM Red Brick Warehouse: SQL リファレンス ガイド
ALTER INDEX
システムが生成したインデックス名は、RBW_INDEXES テーブルを確
認するか、次の命名規則に従って指定します。
v プライマリ キー インデックスの名前は、インデックスの対象とな
るテーブル名に文字列 _PK_IDX を付加したものになります。たと
えば、Market テーブルのプライマリ キー インデックスの名前は、
次のようになります。
MARKET_PK_IDX
v インデックス名は 128 文字以下です。テーブル名と文字列を組み
合わせたインデックス名が 128 文字を超える場合は、テーブル名
が切り捨てられます。
インデックス名は一意である必要があります。テーブル名と文字列を
組み合わせたインデックス名が一意でない場合は、001 から 999 の数
字がインデックス名の末尾に追加され、重複しない名前が付けられま
す。
CHANGE FILLFACTOR integer
データを初めてテーブルにロードするときや、REORG 操作でインデ
ックスを再作成するときに、新規インデックス ノードを充填する割合
を指定します。その後、行が挿入されていくと、容量の 100 %までイ
ンデックス ノードが充填され、インデックス ノードが 100% を超す
と、ノードの分割が生じます。
integer の有効範囲は 1 から 100 ですが、フィル ファクタは一般に
50% 以上に設定します。
データのロード、データの再編成、最適化オプションの設定、フィル
ファクタの設定については、「管理者ガイド」を参照してください。
CHANGE DOMAIN SIZE SMALL、MEDIUM、LARGE
ユーザ定義の TARGET インデックスの DOMAIN を指定します。他
の種類のインデックスのドメイン サイズを設定、変更することはでき
ません。ドメイン サイズの選択 (オプション) の詳細については、
316 ページの『CREATE INDEX』を参照してください。
TARGET インデックスのドメイン サイズは変更できますが、ドメイ
ン サイズの指定を削除、つまりドメイン混在 TARGET インデックス
に変更することはできません。
SIZE キーワードはオプションです。
COMMENT
インデックスの内容を説明したコメント文字列を割り当てます。コメ
ントは、RBW_INDEXES システム テーブルに格納されます。 256 バ
イトまで入力できます。データベース サーバはこのコメント テキス
トを無視します。
NULL を指定すると、コメント文字列が NULL に置き換えられます。
第 8 章 SQL 文と RISQL 拡張機能
239
ALTER INDEX
使用上の注意
フィル ファクタ
インデックスの初期フィル ファクタは、インデックスの作成時に設定されます。ユーザ
が作成したインデックスのフィル ファクタについては、CREATE INDEX...WITH
FILLFACTOR 文で設定します。
システムが自動的に生成するプライマリ キー インデックスのフィル ファクタは、
rbw.config ファイルの FILLFACTOR PI パラメータに指定したデフォルト値に自動的
に設定されます。初期デフォルトは 100% です。
システムが生成したインデックスのフィル ファクタを指定する方法は、2 種類です。
v テーブルを作成する前に、rbw.config ファイルのデフォルトを必要に応じて変更し
ます。
v テーブルを作成した後に、システムが生成したインデックス名を使用して ALTER
INDEX 文でインデックスを変更します。
ドメイン サイズが SMALL の TARGET インデックスは、フィル ファクタを 100%
(デフォルト) にしてください。ドメイン サイズが MEDIUM または LARGE のインデ
ックスは、行の更新や削除の予定がない場合は 100% に設定してください。更新や削除
を行う場合は、100% より小さい値に変更してください。
ドメイン サイズ
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;
240
IBM Red Brick Warehouse: SQL リファレンス ガイド
ALTER MACRO
ALTER MACRO 文は、マクロにその内容を説明したコメントを付けます。コメント
は、RBW_MACROS システム テーブルに格納されます。
許可
マクロを変更するユーザは、次の中で少なくとも 1 つの条件を満たしている必要があり
ます。
v DBA システム ロールのメンバーであること
v 明示的に付与されるかユーザが作成したロールのメンバーであることにより、
ALTER_ANY 権限を持っていること
v RESOURCE システム ロールのメンバーで、かつマクロの作成者であること
v マクロの作成者であり、明示的に付与されるかユーザが作成したロールのメンバーで
あることにより、ALTER_OWN 権限を持っていること
構文
次に ALTER MACRO 文の構文ダイアグラムを示します。
ALTER
MACRO
TEMPORARY
PUBLIC
macro_name COMMENT
’ character_string ’
NULL
TEMPORARY、PUBLIC
変更するマクロのタイプを指定します。 TEMPORARY と PUBLIC
のどちらも指定しないと、プライベート マクロが変更されます。
macro_name
変更するマクロの名前を指定します。
COMMENT
マクロの内容を説明したコメント文字列を割り当てます。コメント
は、RBW_MACROS システム テーブルに格納されます。 256 バイト
まで入力できます。コメントのテキストは、データベース サーバが使
用するものではありません。
NULL を指定すると、コメント文字列が NULL に置き換えられます。
第 8 章 SQL 文と RISQL 拡張機能
241
ALTER ROLE
ALTER ROLE 文は、ユーザが作成したロールにコメントを付けます。コメントは、
RBW_ROLES システム テーブルおよび RBW_USERAUTH システム テーブルに格納さ
れます。
許可
ALTER ROLE 文を実行するユーザは、次の中で少なくとも 1 つの条件を満たしている
必要があります。
v DBA システム ロールのメンバーであること
v ROLE_MANAGEMENT タスク権限を持っていること
構文
次に ALTER ROLE 文の構文ダイアグラムを示します。
ALTER ROLE
role_name
COMMENT
’ character_string ’
NULL
role_name
変更するロールの名前を指定します。
COMMENT
ロールの内容を説明したコメント文字列を割り当てます。コメント
は、RBW_ROLES システム テーブルおよび RBW_USERAUTH シス
テム テーブルに格納されます。256 バイトまで入力できます。データ
ベース サーバはこのコメント テキストを無視します。
NULL を指定すると、コメント文字列が NULL に置き換えられます。
242
IBM Red Brick Warehouse: SQL リファレンス ガイド
ALTER SEGMENT
ALTER SEGMENT 文はセグメントを変更するものです。次の目的に使用できます。
v テーブルやインデックスへのセグメントのアタッチ
v テーブルやインデックスからのセグメントの切離し
v セグメントの検証と、物理的な検査 (セグメントの PSU に不良がなければ、正常と
マーク)
v セグメントの修正
– セグメント化の基準となる列 (セグメント化の基準列) の指定
– セグメントの範囲指定の変更
– セグメントの指定範囲の変更と移動
– セグメントのオフライン化
– セグメントのオンライン化
– セグメントのすべてのデータのクリア
– セグメント名の変更
– セグメントにおける PSU の最大サイズの変更
– セグメントにおける PSU の拡張サイズの変更
– セグメントにおける PSU のロケーション、パスまたはその両方の変更
– セグメント全体のロケーションの移行
– RBW_SEGMENTS システム テーブルへのセグメントのコメントの格納
– セグメントへの新規 PSU の追加
– セグメント末尾の未使用領域の解放
– セグメント末尾からの空の PSU の削除
バージョン ログ セグメントの詳細については、232 ページの『ALTER DATABASE』
を参照してください。
セグメントのアタッチについては、245 ページの『ALTER SEGMENT — ATTACH
句』を参照してください。セグメントの切離し、検証、その他の変更については、253
ページの『ALTER SEGMENT — その他の句』を参照してください。
許可
ALTER SEGMENT 文を実行するユーザは、次の中で少なくとも 1 つの条件を満たして
いる必要があります。
v DBA システム ロールのメンバーであること
v 明示的に付与されるかユーザが作成したロールのメンバーであることにより、
ALTER_ANY 権限を持っていること
第 8 章 SQL 文と RISQL 拡張機能
243
ALTER SEGMENT
v RESOURCE システム ロールのメンバーで、かつセグメントおよび関連テーブルの作
成者であること
v 明示的に付与されるかユーザが作成したロールのメンバーであることにより、
ALTER_OWN 権限を持っていること、かつセグメントおよび関連テーブルの作成者
であること
244
IBM Red Brick Warehouse: SQL リファレンス ガイド
ALTER SEGMENT — ATTACH 句
ここでは、テーブルやインデックスにセグメントをアタッチする方法を説明します。セ
グメントの切離し、検証、その他の変更は、253 ページを参照してください。
構文
次に、テーブルやインデックスにセグメントをアタッチする ALTER SEGMENT 文の構
文ダイアグラムを示します。
ALTER SEGMENT segment_name ATTACH TO
TABLE
table_name
creator.
INDEX index_name
RANGE
( literal:literal )
( rownum:rownum )
( segname
: segname
rownum
rownum
LIKE SEGMENT referencing_table_segname
segment_name
INVALIDATE
)
テーブルやインデックスにアタッチする既存セグメントの名前を指定
します。アタッチするセグメントは、CREATE SEGMENT 文で作成
します。
ATTACH TO TABLE, INDEX
テーブルとインデックスのどちらにセグメントをアタッチするかを指
定します。セグメントをアタッチするには、セグメント化の基準とな
る列の値の範囲を指定してください。この列は、CREATE TABLE
文、CREATE INDEX 文、ALTER SEGMENT 文で指定します。
STAR インデックス、ローカルの B-TREE インデックス、TARGET
インデックスでは、参照されるテーブル セグメントの指定に従って同
一範囲にセグメントをアタッチできます。 RANGE LIKE SEGMENT
句については、250 ページを参照してください。ローカル インデック
スについては、325 ページを参照してください。
重要: ローカル インデックスを持つテーブルにデータ セグメントをアタッチした後、
テーブルを更新する前に各ローカル インデックスに対応するセグメントをアタッ
チするか、ローカル インデックスを選択するクエリ プランを実行する必要があ
ります。または各ローカル インデックスに CHECK INDEX を実行する必要があ
ります。
ATTACH 操作が完了したセグメントは、自動的にオンラインになります。必要に応じ
て、アタッチした状態でオフラインにすることもできます。
v テーブルにセグメントをアタッチする場合は、次の制限に注意してください。
v テーブルの MAXSEGMENTS に設定された値を超える数のセグメントをアタッチす
ることはできません。
第 8 章 SQL 文と RISQL 拡張機能
245
ALTER SEGMENT — ATTACH 句
v テーブルにセグメントをアタッチする前に、セグメント化の基準列を 1 つ指定する
必要があります。
v ハッシュ値によって複数セグメントに分散されているデータが格納されているテーブ
ルには、セグメントをアタッチすることはできません。ハッシュによる格納について
は、362 ページを参照してください。
creator
テーブル作成者のユーザ名を指定します。
RANGE
新たにアタッチしたセグメントに格納する、セグメント化の基準列の
値の範囲を指定します。
このオプションを使用する場合は、次の制限に注意してください。
v セグメントは、テーブルやインデックスの既存セグメントの範囲内
にアタッチする必要があります。このため、新規セグメントの範囲
は、一方を既存セグメントの境界と一致させ、他方をそのセグメン
トの境界を超えない値に指定する必要があります。
v テーブルにアタッチする場合、ATTACH 操作では新しいセグメン
トにデータを移動させることができないため、テーブルにすでに格
納されているデータ値を含む範囲を指定することはできません。
v セグメントをインデックスにアタッチする場合、セグメントの範囲
がインデックス内の既存値と重複するときは、INVALIDATE キー
ワードが指定されているかどうかによって動作が異なります。
INVALIDATE が指定されている場合は操作が続行され、インデッ
クスは無効になります。指定されていない場合は操作が拒否され、
インデックスは変更されません。 INVALIDATE キーワードの詳細
については、247 ページを参照してください。
テーブルやインデックスにアタッチするセグメントが 1 つの場合、そ
のセグメントの範囲は (min:max) になります。 2 つ目のセグメント
をアタッチする場合は、ALTER SEGMENT 文の RANGE 指定の一方
に min か max を設定してください。
literal:literal
リテラルの範囲は、テーブル、B-TREE インデックス、TARGET イン
デックスのセグメントに使用する必要があります。セグメント範囲を
指定しない場合は、エラー メッセージが戻されます。
範囲の値は、セグメント化の基準列のデータ型に準じます。たとえ
ば、この列が整数 (INTEGER) 型 の場合は、-2,147,483,648 から
2,147,483,647 の値で範囲を指定します。文字 (CHARACTER) 型の場
合は、文字で範囲を指定してください。
指定した範囲が既存の行、または範囲と重なっていない場合、セグメ
ントが追加されます。
246
IBM Red Brick Warehouse: SQL リファレンス ガイド
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インデックスの範囲を明示的に指定する場合は、次のクエ
リを実行し、セグメント化の基準列を格納しているテーブルの行番号
とセグメント名を確認してください。
select primary_key, rbw_segname, rbw_rownum
from table_name
上記のクエリは、テーブルの全行を戻します。テーブルの行データが
多い場合は、リザルト セットが非常に大きくなります。
STAR インデックスのセグメントでは、RANGE 指定はオプションで
す。このオプションを省略すると、STAR インデックスの総セグメン
ト数と、参照先テーブルに設定された MAXSEGMENTS の値および
MAXROWS PER SEGMENT の値に基づいて範囲が自動的に設定され
ます。この場合、REORG 文によって STAR インデックスを再編成す
る必要があります。 REORG 操作については、「テーブル マネジメ
ント ユーティリティ リファレンス ガイド」を参照してください。
STAR インデックスのセグメント化の詳細については、「管理者ガイ
ド」を参照してください。
INVALIDATE
指定された範囲がインデックス内の既存の値と重なっている場合、そ
のインデックスが無効とマークされるように指定します。
セグメントをテーブルまたはローカル インデックスにアタッチする場
合、INVALIDATE キーワードは使用できません。
指定したインデックス セグメントの範囲が他のインデックス セグメ
ントの既存値と重複する場合、新しい境界を作成して値を別のセグメ
ントへ移動する必要があります。 ATTACH 操作でデータを移動する
ことはできないため、動作は INVALIDATE キーワードを指定したか
どうかによって異なります。
第 8 章 SQL 文と RISQL 拡張機能
247
ALTER SEGMENT — ATTACH 句
v INVALIDATE キーワードを指定した場合、セグメントが追加され
てインデックスが無効になり、インデックスの再作成が必要になり
ます。インデックスを再作成するには TMU REORG 文を使用しま
す。
v INVALIDATE キーワードを指定しなかった場合、動作が失敗し、
セグメントは追加されず、インデックスは無効になりません。
STAR インデックスにアタッチするときに範囲を指定しなかった場
合、動作は INVALIDATE キーワードを指定したかどうかによって異
なります。
v INVALIDATE キーワードを指定した場合、インデックス セグメン
トが既存のセグメントのリストの末尾にアタッチされてインデック
スが無効となり、再作成が必要となります。 ATTACH 操作はすべ
てのセグメントの範囲を再計算し、それぞれのセグメントに対して
均等に範囲を割り当てます。
v INVALIDATE キーワードを指定しなかった場合、動作が失敗し、
セグメントは追加されず、インデックスは無効になりません。
重要: INVALIDATE キーワードを指定しない限り、ALTER
SEGMENT 文によってインデックスが無効になることはありま
せん。
ヒント: RANGE 指定では、コロンの左側に MIN、右側に MAX と入力して、それぞ
れ最小値と最大値を指定することもできます。たとえば、次のように範囲を指
定できます。
(min:literal)
(literal:max)
(min:rownum)
(segname rownum:max)
例
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)
248
IBM Red Brick Warehouse: SQL リファレンス ガイド
ALTER SEGMENT — ATTACH 句
上記の文は、次の条件が満たされるため有効です。
v 新しい範囲の最小値 (1000) は、data2 セグメントと data3 セグメントの既存境界で
ある
v 新しい範囲の最大値 (1500) は、上限を 3000 とする data3 セグメントの範囲内であ
る
v Sales テーブルには、Mktkey 列の値が 1000 から 1499 となっている行がない
Sales テーブルの新しいセグメント範囲は、次のようになります。
data1
data2
data
data3
data4
min:500 500:1000 1000:1500 1500:3000 3000:max
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)
上記の文は、次の条件が満たされるため有効です。
v 複数セグメントのテーブルを参照する STAR インデックスに必要な segname rownum
フォーマットが範囲指定で使用されている
v 新しい範囲の最小値 (tab_seg2 1000) は、ix_seg2 セグメントと ix_seg3 セグメン
トの既存境界である
v 新しい範囲の最大値 (tab_seg3 1500) は、上限を 3000 とする ix_seg3 セグメント
の範囲内である
古いセグメントから新しいセグメントに移動する必要があるデータが存在する場合で
も、この文は有効です。このようなデータが存在する場合、インデックスは無効とマー
クされ、TMU の REORG 文で再編成する必要があります。
セグメント化の基準列を指定し、名前付きセグメント (seg_sales1) が 1 つのみ Sales
テーブルにアタッチされているとします。セグメントの範囲は、(min:max) です。
seg_sales2 セグメントを Sales テーブルにアタッチする場合は、次のどちらかの
ALTER SEGMENT 文を使用します。
第 8 章 SQL 文と RISQL 拡張機能
249
ALTER SEGMENT — ATTACH 句
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)
Sales テーブルのセグメント範囲は、次のようになります。
seg_sales1
min:500
seg_sales2
500:max
RANGE LIKE SEGMENT 句
RANGE LIKE SEGMENT
STAR インデックス、ローカルの B-TREE、TARGET インデックス
セグメントを、指定したテーブル セグメントと同じ範囲にアタッチし
ます。
この句を使用する場合は、次の制限に注意してください。
v セグメントを B-TREE または TARGET インデックスにアタッチす
る場合、そのインデックスはローカル インデックスである必要が
あります。ローカル インデックスでは、インデックスとなる列が
ファクト テーブルのセグメント化の基準列でなくても構いませ
ん。
v セグメントを STAR インデックスにアタッチする場合は次のよう
になります。
250
IBM Red Brick Warehouse: SQL リファレンス ガイド
ALTER SEGMENT — ATTACH 句
– 参照元 (ファクト) テーブルのセグメント範囲では、先頭のディ
メンジョン テーブルに少なくとも 1 つの列が存在する必要があ
ります。
– ファクト テーブルのセグメント化の基準列はインデックス キー
内の先頭列である必要があります。
– 範囲がインデックス内の既存値と重複する場合は、ATTACH 操
作の実行時に INVALIDATE キーワードを指定してインデックス
を無効にしない限り、操作は拒否されます。 INVALIDATE オプ
ションの詳細については、247 ページを参照してください。
RANGE LIKE SEGMENT 句を使用した時間ごとのデータ保守につい
ては、「管理者ガイド」を参照してください。
table_segname
インデックスのテーブル内の既存のセグメント名を指定します。
RANGE LIKE SEGMENT 句を使用してインデックス セグメントをア
タッチする場合は、このセグメントと同じ範囲になります。
例
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
maxrows per segment 1000
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 テーブル) が新しい範囲の値であらかじめロードさ
れていることを想定します。この例の詳細については、「管理者ガイド」のデータ ウェ
アハウスの保守に関する章を参照してください。
第 8 章 SQL 文と RISQL 拡張機能
251
ALTER SEGMENT — ATTACH 句
データと同じ範囲でセグメントを 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;
上記の文は、次の条件が満たされるため有効です。
v 新しい範囲の最小値 (830) は sales_data2 セグメントの範囲内にある。
v 新しい範囲の最大値 (max) は sales_data2 セグメントの既存境界である。
v Sales テーブルには、Perkey 列の値が 830 から max となっている行がない。
v STAR インデックスの先頭のディメンジョン テーブル (Period テーブル) に少なくと
も 1 つの列がある。
v STAR インデックスのセグメント化の基準列 (sales_date_fkc) はインデックス キーの
先頭列 (Perkey) である。
v TARGET インデックスはローカル インデックスである。したがって、インデックス
付き列は Sales テーブルのセグメント化の基準列である必要はありません。
252
IBM Red Brick Warehouse: SQL リファレンス ガイド
ALTER SEGMENT — その他の句
このセクションでは、アタッチされたセグメントまたはテーブルやインデックスにアタ
ッチされていないセグメントを修正する方法を説明します。セグメントのアタッチにつ
いては、245 ページの『ALTER SEGMENT — ATTACH 句』を参照してください。
バージョン ログ セグメントに、次の句は使用できません。
v DETACH
v SEGMENT BY
v RANGE
v OFFLINE
v ONLINE
v CLEAR
v DROP LAST STORAGE
v RELEASE STORAGE
ALTER SEGMENT CLEAR 文を実行すると、事前計算ビューに対して集約処理が実行
されることがあります。集約処理の詳細については、「IBM Red Brick Vista ユーザーズ
ガイド」を参照してください。
バージョン ログ セグメントの詳細については、232 ページの『ALTER DATABASE』
を参照してください。
構文
次に、セグメントを修正する ALTER SEGMENT 文の構文ダイアグラムを示します。
ALTER SEGMENT
segment_name
OF
TABLE
INDEX
table_name
creator.
index_name
第 8 章 SQL 文と RISQL 拡張機能
253
ALTER SEGMENT — その他の句
detach_offline_online_clear_specification
VERIFY
FORCE INTACT
SEGMENT BY segmenting_column
RANGE ( rangeval:rangeval )
MOVE
INVALIDATE
OPTICAL
ON
OFF
RENAME new_seg_name
CHANGE MAXSIZE psu_sequence_id TO max_size
CHANGE EXTENDSIZE psu_sequence_id TO increment
CHANGE PATH psu_sequence_id TO ’new_filename’
MIGRATE TO ’dir_path ’
DROPPING
KEEPING
PSUS
COMMENT
’ character_string ’
NULL
add_storage_specification
RELEASE STORAGE
DROP LAST STORAGE
segment_name
修正するセグメントの名前を指定します。
creator
テーブル作成者のユーザ名を指定します。
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
DETACH
指定したテーブルまたはインデックスからセグメントを削除します。
空でないテーブル セグメントを削除する場合、列データと対応するイ
ンデックス データが最初に削除されます。その後、テーブル セグメ
ントが削除されます。
254
IBM Red Brick Warehouse: SQL リファレンス ガイド
ALTER SEGMENT — その他の句
テーブルにローカル インデックスがある場合、テーブル セグメント
が削除されるときには Red Brick サーバにより対応するローカル イ
ンデックス セグメントがすぐにクリアされます。ローカル インデッ
クスがない場合は、OVERRIDE FULLINDEXCHECK 句を使用してイ
ンデックス データを削除する処理速度を高めることができます。
OVERRIDE FULLINDEXCHECK 句の詳細については、256 ページを
参照してください。
テーブルとローカル インデックス セグメントは同じである必要があ
ります。 1 つ以上のローカル インデックスを持つテーブルからセグ
メントを削除する場合、対応するローカル インデックス セグメント
を削除してから次の操作を行います。
v DELETE、INSERT、 UPDATE 文を使用したテーブルの修正
v ローカル インデックスを使用したクエリ プランによるテーブルへ
のクエリの実行
v ローカル インデックスでの CHECK INDEX の実行
対応するテーブル セグメントを削除しない限り、ローカル インデッ
クスを切り離すことはできません。
空でないインデックス セグメントを切り離す場合、DETACH 操作の
実行時に INVALIDATE キーワードを指定してインデックスを無効に
しない限り、操作は失敗します。 INVALIDATE キーワードの詳細に
ついては、257 ページを参照してください。
デフォルト セグメントを切り離した場合は、セグメントのデータとセ
グメント自体の両方が削除されます。名前付きセグメントを切り離し
た場合は、セグメントのデータは削除されますが、セグメント自体は
削除されません。名前付きセグメントは個別に ALTER SEGMENT 文
を使用して、テーブルまたはインデックスに再アタッチできます。
切り離したセグメントの範囲は、テーブルやインデックスの他のセグ
メントの範囲に併合されます。切り離したセグメントの下限に隣接す
るセグメント範囲が、切り離したセグメントの領域まで拡張されま
す。
セグメントを切り離す場合は、次の制限に注意してください。
v 切り離すセグメントは、オフライン モードに設定しておく必要が
あります。
v テーブルまたはインデックスがセグメント化されていない場合は、
エラーになります。
第 8 章 SQL 文と RISQL 拡張機能
255
ALTER SEGMENT — その他の句
v ローカル インデックスが存在する場合は、テーブル セグメントを
切り離してから対応するローカル インデックス セグメントを切り
離す必要があります。
v テーブル セグメントと対応するインデックス セグメントを切り離
すには、ALTER SEGMENT DETACH 文をそれぞれ実行する必要
があります。
v DETACH 句で切り離せるのは、複数のセグメントを持つテーブル
やインデックスにアタッチされているセグメントのみです。テーブ
ルやインデックスにアタッチされていないセグメントや、1 つのセ
グメントから成るテーブルやインデックスのセグメントを切り離す
ことはできません。 DETACH 句では、複数のセグメントを持つテ
ーブルやインデックスのデフォルト セグメントを切り離すことが
できます。
v STAR インデックスの範囲指定で指定されているセグメントは、参
照先テーブルから切り離すことはできません。これは、そのセグメ
ントを切り離すと、範囲指定が無効になってしまうためです。この
場合、無効になる STAR インデックスを示すエラー メッセージが
表示されます。
override_fullindexcheck_specification
テーブルからデータ セグメントを切り離したりクリアするとき、テー
ブル セグメントのインデックス エントリを削除します。これによっ
て実行時間が短縮されます。インデックス セグメントがテーブル セ
グメントとまったく同じようにセグメント化されている場合、この句
を使用して対応するインデックス セグメントに名前を付け、インデッ
クスをスキャンせずにインデックス セグメントをクリアしてインデッ
クス エントリを削除できます。このオプションを使用すると、10 億
行を超えるような大きいファクト テーブルから、データ セグメント
を切り離すような場合に時間が節約できます。
Red Brick サーバは、インデックス セグメントとデータ セグメント
の対応を完全にチェックし、対応していない場合はエラー メッセージ
を戻します。
この省略オプションは、ローカル インデックス セグメントでは無効
です。切離しやクリア操作では、対応するローカル インデックス セ
グメントのみを自動的にクリアし、インデックス内の他のセグメント
はスキャンしません。ローカル インデックスの詳細については、325
ページを参照してください。
次に OVERRIDE FULLINDEXCHECK 文の構文ダイアグラムを示しま
す。
256
IBM Red Brick Warehouse: SQL リファレンス ガイド
ALTER SEGMENT — その他の句
OVERRIDE FULLINDEXCHECK の構文:
,
OVERRIDE FULLINDEXCHECK ON SEGMENTS (
index_segment
index_segment
)
データ セグメントと同じ列を基準として、セグメント化されているイ
ンデックス セグメントを指定します。この句はすべての種類の非ロー
カル インデックスに使用できます。
データとインデックス セグメントの対応を検証した後、DETACH ま
たは CLEAR 操作によって次のことが行われます。
v 指定したデータ セグメントのクリア
v このオプションで指定したインデックス セグメントのクリア
検証プロセスが失敗すると、操作が無効であることを警告するメッセ
ージが表示されます。正しいインデックス セグメント名を指定し、文
を再実行してください。
index_segment で参照されるセグメントを持たないインデックスについ
ては、インデックス全体がスキャンされます。
INVALIDATE
切り離すセグメントが空でない場合、そのインデックスが無効とマー
クされるように指定します。
空でないインデックス セグメントを切り離すと、テーブル内の列と対
応するエントリがインデックス内に存在しない可能性があります。対
応するエントリがない場合、インデックスとテーブルの整合性が維持
できなくなるため、インデックスを再作成する必要があります。この
ため、インデックスは無効とマークされます。
v INVALIDATE キーワードを指定した場合、セグメントが切り離さ
れ、インデックスが無効になります。無効となったインデックス
は、TMU REORG 文を使用して再編成する必要があります。
v INVALIDATE キーワードを指定せず、インデックス セグメントが
空でない場合、DETACH 操作は失敗し、インデックスは無効にな
りません。
インデックス セグメントが DETACH 操作以前に INVALID であっ
た場合、INVALIDATE キーワードは無視され、セグメントは切り離
されてインデックスは INVALID のままとなります。
セグメントの切離し例: テーブルの範囲が次のように指定されているとします。
seg1
min:100
seg2
100:200
seg3
200:400
seg4
400:max
seg3 を切り離すと、新しい範囲は次のようになります。
第 8 章 SQL 文と RISQL 拡張機能
257
ALTER SEGMENT — その他の句
seg1
min:100
seg2
100:400
seg4
400:max
切り離したセグメントが範囲の下限のセグメントであった場合、下限から 2 番目のセグ
メントがその領域まで拡張されます。前ページの範囲から seg1 を切り離すと、seg2 が
拡張され、新しい範囲が次のようになります。
seg2
min:200
seg3
200:400
seg4
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);
重要: 切り離すセグメントは、オフライン モードに設定しておく必要があります。
この OVERRIDE FULLINDEXCHECK オプションを使用して、次のように DETACH
操作を高速化します。
v sales_star_seg1 インデックスと sales_pk1 インデックスは daily_data1 と同じ列を基準
としてセグメント化されているため、完全インデックス スキャンを省略する。
v sales_star インデックスと sales_pk インデックス内の他のセグメントを検索しない。
Sales テーブルにローカル インデックスがある場合、それらは daily_data1 セグメント
と同じ基準でセグメント化されているため、DETACH 操作でそのローカル インデック
スの完全スキャンは自動的に省略されます。ローカル インデックスについては、325 ペ
ージを参照してください。
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 キーワー
ドを使用して切り離す必要があります。インデックス セグメントが切り離されている場
合、テーブル内の列と対応するエントリがインデックス内にない可能性があります。対
応するエントリがない場合、インデックスとテーブルの整合性が維持できなくなるた
め、インデックスを再作成する必要があります。
258
IBM Red Brick Warehouse: SQL リファレンス ガイド
ALTER SEGMENT — その他の句
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 が無効
にされたという警告メッセージが戻されます。
ATTACH および DETACH でセグメント範囲を変更する例: この例では、
Budget テーブルが 2 つのセグメントに分割され、Mktkey 列がセグメント化の基準列で
あるとします。 セグメントの範囲は次のようになります。
seg1
min:750
seg2
750:max
次の ALTER SEGMENT 文は、Budget テーブルに第 3 のセグメントをアタッチしま
す。この文が有効なのは、Mktkey 列の値が 1500 から最大許容値の範囲内にある行が
Budget テーブルに存在しない場合のみです。
alter segment seg3
attach to table budget
range (1500:max)
seg2 の上限が 1500 になり、Budget テーブルの新しいセグメント範囲は次のようにな
ります。
seg1
min:750
seg2
750:1500
seg3
1500:max
seg2 がオフラインモードに設定され、Budget テーブルから切り離されます。 seg2 に格
納されているすべての行がデータベースから削除されます。
alter segment seg2 of table budget
offline
alter segment seg2 of table budget
detach
Budget テーブルのセグメント範囲は、次のようになります。
seg1
seg3
min:1500 1500:max
OFFLINE 句
OFFLINE
指定したセグメントをオフライン モードに設定し、データベースがそ
のセグメントを一時的に使用できないようにします。管理者はオフラ
インのセグメントに対し新規データのロード、記憶媒体の障害やデー
タ消失によるデータの復元、DETACH によるテーブルやインデックス
からの切離しができます。
テーブルに関連した行データやインデックス データを格納するセグメ
ントがオフライン モードになった場合、そのテーブルは部分的にしか
第 8 章 SQL 文と RISQL 拡張機能
259
ALTER SEGMENT — その他の句
利用できません。ユーザは、部分的に利用可能と設定されたテーブル
のオンライン セグメントにアクセスできます。部分的に利用可能なテ
ーブルに対するクエリの動作は、rbw.config ファイルの OPTION
PARTIAL_AVAILABILITY パラメータか、SET PARTIAL
AVAILABILITY 文で設定します。 rbw.config ファイルについて
は、「管理者ガイド」を参照してください。SET PARTIAL
AVAILABILITY 文については、476 ページを参照してください。
OFFLINE 句は、複数の名前付きセグメントから成るテーブルやイン
デックスにアタッチされたセグメントにしか使用できません。次のセ
グメントはオフラインにできません。
v テーブルやインデックスにアタッチされていないセグメント
v テーブルまたはインデックスに単独で存在するセグメント
v テーブルやインデックスの最後のオンライン セグメント
OVERRIDE REFCHECK
他のテーブルが参照するテーブルにアタッチされているセグメントを
オフラインにするかクリアする ALTER SEGMENT 文を実行すると
き、参照整合性チェックを省略します。
セグメントと参照元テーブルの両方にデータが格納されていても、セ
グメントのクリアやオフライン化によって参照整合性違反が発生しな
い場合は、このオプションを使用して動作を強制的に続行させること
ができます。
警告: OVERRIDE REFCHECK オプションの動作を正しく理解し、注
意して使用してください。参照先テーブルのセグメントをクリ
アするとき、参照元テーブルの値のいずれかがクリアするセグ
メントの値に対応している場合は、参照整合性が維持できなく
なります。
セグメントと参照元テーブルの両方にデータが格納されている場合、このオプションを
使用しないと参照整合性違反が発生することがあります。その結果、ALTER SEGMENT
文が中止され、エラー メッセージが表示されます。セグメントまたは参照元テーブルが
空の場合は、参照整合性違反は発生しないため文は正常に終了します。
例:
1998 から 2000 年の売上データを格納している Sales ファクト テーブルが、
period_seg1 と period_seg2 という 2 つのセグメントにデータを格納している Period
テーブルを参照する場合、どちらかのセグメントをオフラインにするとエラー メッセー
ジが表示されます。 period_seg2 セグメントに格納されているデータが 1997 から
1999 年のデータのみであれば、参照整合性チェックを省略してセグメントをオフライン
にしても構いません。
260
IBM Red Brick Warehouse: SQL リファレンス ガイド
ALTER SEGMENT — その他の句
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 コマンドについては、
「テーブル マネジメント ユーティリティ リファレンス ガイド」を
参照してください。
CLEAR
データ セグメントの全行と、それらの行を参照するインデックス エ
ントリを削除します。セグメントのクリアは、効率的にセグメントの
データを大量に削除します。データの大量削除は、オフライン セグメ
ントへのロードを取り消す場合にも使用できます。
データ セグメントからすべての行を削除する操作は、比較的短時間で
済みますが、対応するインデックス エントリの削除は非常に時間がか
かります。特に、インデックス エントリの総数に比べて関連するエン
トリの数が少ない場合にこのことがいえます。このため CLEAR は、
行数および対応するインデックス エントリ数が多いセグメントを空に
する場合に使用してください。行数の少ないセグメントを空にする場
合は、適切な制約を指定した DELETE 文を使用してください。
CLEAR 句は、複数の名前付きセグメントに格納されたテーブルにア
タッチしているオンライン セグメントとオフライン セグメントのク
リアに使用できます。インデックス セグメント、アタッチされていな
いセグメント、1 つのセグメントから成るテーブルのセグメントはク
リアできません。
第 8 章 SQL 文と RISQL 拡張機能
261
ALTER SEGMENT — その他の句
ALTER SEGMENT CLEAR 文を実行すると、関連する事前計算ビュ
ーに対して集約処理が実行されることがあります。集約処理の詳細に
ついては、「IBM Red Brick Vista ユーザーズ ガイド」を参照してく
ださい。
override_fullindexcheck_specification
インデックス全体の参照整合性チェックを省略し、指定したテーブル
からデータ セグメントをクリアします。詳細については、256 ページ
を参照してください。
OVERRIDE REFCHECK
他のテーブルが参照するテーブルに所属するセグメントをクリアする
ALTER SEGMENT 文を実行する場合に、参照整合性チェックを省略
します。詳細については、260 ページを参照してください。
VERIFY 句と FORCE 句
VERIFY
指定したセグメントの PSU を検証し、セグメントが物理的に完全で
あるかを確認します。
セグメントが破損している理由が不明な場合は、VERIFY 句を使用し
て原因を調べてください。破損の修復後 VERIFY を再実行し、セグ
メントの PSU が完全であれば、セグメントは正常とマークされま
す。 VERIFY を実行すると、RBW_SEGMENTS テーブルの INTACT
列が更新され、セグメントが正常とマークされます。
セグメントの PSU を 1 つずつ検証するプロセスは、時間がかかるこ
とがあります。
ONLINE 句を使用すると、VERIFY を実行した場合と同じ検証タスク
が実行され、同じ情報が戻され、セグメントがオンラインになりま
す。 ONLINE 句はオフラインのセグメントのみに使用できます。オ
ンラインのセグメントの検証には、VERIFY 句を使用してください。
破損したセグメントの修復については、「管理者ガイド」を参照して
ください。
FORCE INTACT 物理的損傷の有無をチェックする PSU の検証を省略し、
RBW_SEGMENTS テーブルの INTACT 列を更新して、利用できない
セグメントを正常とマークします。 FORCE INTACT 句と VERIFY
句のどちらを使用してもセグメントをマークしないでおくことができ
ますが、FORCE INTACT は PSU の検証を行わないため、VERIFY
の場合よりも比較的処理時間が短くなります。
PSU が損傷している可能性がある場合は、VERIFY を実行してくださ
い。 FORCE INTACT は、データの整合性に影響のない軽度のエラー
のためにセグメントが利用不能になった場合に限り使用してくださ
い。
262
IBM Red Brick Warehouse: SQL リファレンス ガイド
ALTER SEGMENT — その他の句
SEGMENT BY 句
SEGMENT BY segmenting_column
1 つのセグメントに格納され、セグメント化の基準列が設定されてい
ないテーブルやインデックスに基準列を指定します。テーブルのセグ
メントの列には、NULL は使用できません。インデックスでは、イン
デックス キーに指定された最初の列をセグメント化の基準となる列に
指定します。
STAR インデックス キーの最初の列が複数列のフォーリン キーの場
合は、SEGMENT BY 指定におけるインデックス キーの最初の構成
要素を識別するために、フォーリン キー制約名を指定する必要があり
ます。
セグメント化の基準列をテーブルやインデックスに指定すると、この
列の値または行データ ID に基づいて、セグメントの範囲 (min:max)
が暗黙的に設定されます。そのテーブルやインデックスには、他のセ
グメントをアタッチしたり、その範囲を暗黙的にマージできます。
この句は、すでにセグメント化基準列が割り当てられているテーブル
またはインデックスのセグメント化基準列を変更したり、ハッシュ値
によってセグメント化されているテーブルにセグメント化基準列を割
り当てるのには使用できません。
RANGE 句
RANGE rangeval: rangeval
セグメントの値または行データ ID の範囲を指定します。
v テーブル、B-TREE インデックス、TARGET インデックスにアタッ
チするセグメントの範囲は、この列の値に基づいて指定されます。
その場合、rangeval はリテラル値である必要があります。
v STAR インデックスのセグメントの範囲は、この列が参照するテー
ブルの行データ ID (セグメント名、行データ ID) に基づいて指定
されます。先頭の行データ ID は 0 です。STAR インデックスの
範囲指定には、247 ページで説明したフォーマットのいずれかを使
用してください。
セグメント範囲の値については、CREATE TABLE 文と CREATE
INDEX 文の説明を参照してください。
テーブルやインデックスのセグメント範囲に不連続や重複を生じさせ
たり、既存の行データやインデックス データを他のセグメントに移動
させる必要があるような範囲の修正はできません。
たとえば、既存セグメントの範囲が (1000:2000) の場合、(1000:2500)
に変更すると、そのセグメントの上位にあるセグメントの下限が 2500
第 8 章 SQL 文と RISQL 拡張機能
263
ALTER SEGMENT — その他の句
に自動的に調整されますが、2000 から 2500 の範囲に既存データがあ
る場合は、ALTER SEGMENT 文はエラーになります。
OFFLINE 句は、複数の名前付きセグメントから成るテーブルやイン
デックスにアタッチされたセグメントにしか使用できません。次の目
的には使用できません。
v テーブルやインデックスにアタッチされていないセグメントの範囲
の変更
v 1 つのセグメントから成るテーブルやインデックスのセグメント範
囲の変更
v ハッシュによってセグメント化されているテーブルへの範囲の追加
MOVE
セグメントをテーブルやインデックスから切り離したり再アタッチし
たりせずに、範囲を移動します。
指定した範囲が既存の行、または範囲と重なっていない場合、セグメ
ントは切り離され、指定した範囲に再アタッチされます。
RANGE MOVE 句を使用する場合は、次の制限に注意してください。
v テーブル セグメントの範囲を移動するには、セグメントを空にす
る必要があります。
v セグメント範囲を指定しなかった場合、インデックスがセグメント
化されていないときは、エラー メッセージが戻されます。
v 新しい範囲の値の境界は、既存の別セグメントの境界と重なる必要
があります。既存のセグメントの範囲を拡張する場合は、RANGE
句を使用します。
v RANGE MOVE 操作によって範囲の値にすき間ができないようにす
る必要があります。 RANGE MOVE 句を使用すると、次の操作を
実行できます。
– (セグメントのクリア後の) 指定のセグメントの切離し
– 隣接するセグメント範囲の調整
– 切り離したセグメントの新しい範囲位置への再アタッチ
– 隣接するセグメント範囲の調整
RANGE MOVE 操作の例については、265 ページを参照してくださ
い。
v あるインデックスについて、RANGE MOVE 操作によってセグメン
ト範囲が重複したり、インデックス データを別のセグメントに移
動する必要が生じた場合は、INVALIDATE キーワードを指定しな
い限り、操作は拒否されます。詳細については、下記の
INVALIDATE を参照してください。
264
IBM Red Brick Warehouse: SQL リファレンス ガイド
ALTER SEGMENT — その他の句
v RANGE MOVE 操作による変更を行ったために、既存の行データを
別のセグメントに移動する必要が発生しないようにしてください。
v RANGE MOVE 句はローカル インデックスでは無効です。
INVALIDATE
空でないセグメントに RANGE MOVE 操作を行う場合や、範囲がイ
ンデックスの既存の値に重複する場合、そのインデックスが無効とマ
ークされるように指定します。
v 移動したインデックス セグメントの範囲が他のインデックス セグ
メントの既存の値と重複する場合、新しい境界を作成してそのイン
デックス キーの値を別のセグメントへ移動する必要があります。
RANGE MOVE 操作でインデックス キーを移動することはできま
せん。インデックスを再作成して無効とマークする必要がありま
す。
v 空でないインデックス セグメントを移動する場合、そのインデッ
クス キーは別の範囲にある可能性があります。 RANGE MOVE 操
作はインデックス キーを別のセグメントに移動しないため、イン
デックスを再作成する必要があります。
INVALIDATE キーワードを指定した場合、セグメントが追加され、
インデックスが無効になります。
INVALIDATE キーワードを指定しなかった場合、動作が失敗し、セ
グメントは追加されず、インデックスは無効になりません。
RANGE MOVE 句の例:
Sales テーブルのセグメント範囲が次のようになっている
とします。
daily_data1
min:200
daily_data2
200:400
daily_data3
400:600
daily_data4
600:max
セグメント daily_data2 のデータを移動する必要がないが、このデータをテーブル末尾
の新しい範囲へ移動するとします。現在の最大値が 799 の場合、セグメントを空にして
その範囲を移動するには、次の SQL 文を使用します。
alter segment daily_data2 of table sales clear;
alter segment daily_data2 of table sales range (800:max) move;
Sales テーブルに事前計算ビューがある場合には、CLEAR 操作を実行すると事前計算ビ
ューが再作成されます。
この ALTER SEGMENT RANGE MOVE 文によって、以前セグメント daily_data2 で定
義されていた範囲が、下位に隣接するセグメント daily_data1 に含まれるように調整さ
れます。この調整の結果、範囲は次のようになります。
daily_data1
min:400
daily_data3
400:600
daily_data4
600:800
daily_data2
800:max
第 8 章 SQL 文と RISQL 拡張機能
265
ALTER SEGMENT — その他の句
最下位のセグメント daily_data1 の範囲を移動するには、次の SQL 文を使用します。
alter segment daily_data1 of table sales clear;
alter segment daily_data1 of table sales range (800:max) move;
RANGE MOVE 操作によって、下から 2 番目のセグメント daily_data2 の範囲が該当す
る部分まで拡張されます。265 ページの 1 番目の例の範囲を使用すると、新しい範囲は
次のようになります。
daily_data2
min:400
daily_data3
400:600
daily_data4
600:800
daily_data1
800:max
RANGE MOVE で同じ境界を使用できない理由の例:
移動するセグメントの既
存の境界と同じ範囲にある値を指定する場合、RANGE MOVE 句を使用することはでき
ません。たとえば、セグメント daily_data2 が 265 ページの 1 番目の例に示す範囲の
ときに、次の値の範囲を指定すると、この範囲を移動しなければならなくなり、エラー
になります。
alter segment daily_data2 of table sales range (300:400) move;
** ERROR ** (6415) 範囲リスト内でセグメントの位置を移動せずにセグメントの
範囲を変更するには、MOVE 句を用いずに ALTER SEGMENT RANGE コマンドを
使用してください。
また、次の例のように、境界と一致しない値の範囲を指定した場合もエラーになりま
す。
alter segment daily_data2 of table sales range (300:500) move;
** ERROR ** (6414) セグメントの移動時に新しい範囲が境界に一致しないので、
セグメント DAILY_DATA2 の範囲を変更できません。
OPTICAL 句と RENAME 句
OPTICAL
ALTER SEGMENT...OPTICAL 文は、既存セグメントをニアライン、
または光学式のディスクに格納されているセグメントとしてマークし
ます。
セグメントを OPTICAL ON に設定すると、RBW_SEGMENTS シス
テム テーブルの OPTICAL 列が Y に設定され、470 ページで説明さ
れている SET OPTICAL AVAILABILITY の各文を使用してセグメン
トへのアクセスを制御できるようになります。セグメントを OFF に
設定すると、セグメントは光ディスクに格納されているとは認識され
なくなるため、利用効率の文を実行しても効果がありません。
RENAME new_seg_name
指定したセグメントの名前を変更します。テーブルやインデックスに
アタッチしたり、切り離したりする時に、デフォルト セグメントや名
前付きセグメントの名前を変更できます。
psu_sequence_id
266
セグメントの各 PSU にサーバが割り当てるシーケンス番号を指定し
ます。たとえば、セグメントの先頭 PSU にはシーケンス ID 1 が割
IBM Red Brick Warehouse: SQL リファレンス ガイド
ALTER SEGMENT — その他の句
り当てられ、次の 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 にデータが格納されていない
場合は、最大サイズを増加させることができます。
例:
図 5 では psu2 にデータが割り当てられています。このため、psu1 の最大サイズを変更
することはできません。 psu3 にはデータが割り当てられていないため、psu2 の最大サ
イズを増加することは可能です。
図 5. PSU データ割当て
例:
次の 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 列が更新される
だけです。ファイルを物理的に移動したりコピーする場合には、オペ
レーティング システムの該当するコマンドを使用してください。
第 8 章 SQL 文と RISQL 拡張機能
267
ALTER SEGMENT — その他の句
データベース サーバは次の事項を検証します。
v ディレクトリ パスにファイルが存在すること。存在しなければ、
警告メッセージが表示されます。
v redbrick ユーザによるアクセスが許可されているファイルであるこ
と。そうでない場合は、エラーになります。
v ファイルのサイズが、8KB の倍数であること。そうでない場合は、
エラーになります。
v ディレクトリ、キャラクタ デバイス、ブロック デバイス、名前付
きパイプ、ハードリンク、シンボリック リンク、ソケットのいず
れでもない、通常のファイルであること。シンボリック リンク以
外の場合は、エラーになります。シンボリック リンクの場合は、
通知メッセージが表示されます。
MIGRATE TO ’dir_path’
dir_path で指定したロケーションに、セグメントをコピーします。
dir_path は、絶対パスまたはデータベース ディレクトリに対する相対
パスです。
MIGRATE TO 句を使用してセグメント全体を移動できます。たとえ
ば、ディスクから光ディスクに移動したり、光ディスクからディスク
に移動したり、ディスクから別のディスクに移動できます。
領域が不足していたりファイル名が重複しているために移行が完了で
きない場合は、それらを修正して再実行すれば、残りの PSU が引き
続きコピーされます。
複数のディレクトリ上の PSU を 1 つのディレクトリに移動したため
にファイル名が重複した場合は、次の手順で問題を解決してくださ
い。
1. オペレーティング システムのコマンドで、PSU を格納しているフ
ァイルを一意の名前に変更します。
2. ALTER SEGMENT...CHANGE PATH 文で、データベースのシステ
ム テーブルの PSU 名を変更します。
ALTER SEGMENT...MIGRATE TO 文で PSU を移動します。
DROPPING, KEEPING
コピー完了後、元の PSU を削除するかどうかを指定します。デフォ
ルトは DROPPING です。
COMMENT
セグメントの内容を説明したコメント文字列を割り当てます。コメン
トは、RBW_SEGMENTS システム テーブルに格納されます。256 バ
イトまで入力できます。データベース サーバはこのコメント テキス
トを無視します。
NULL を指定すると、コメント文字列が NULL に置き換えられます。
268
IBM Red Brick Warehouse: SQL リファレンス ガイド
ALTER SEGMENT — その他の句
ADD STORAGE 指定
ADD STORAGE 指定は、新しい PSU をセグメントに追加します。 1 つのセグメント
に、サイズの異なる複数の PSU を割り当てることができます。
次に ADD STORAGE 文の構文ダイアグラムを示します。格納方法の指定と ALTER
SEGMENT 文との関係は、253 ページを参照してください。
ADD STORAGE
’filename’
MAXSIZE
max_size
INITSIZE
init_size
EXTENDSIZE
increment
ADD STORAGE filename
新しい PSU は、指定セグメント内の既存の PSU の最後に追加され
ます。
新しい PSU のパス名は、データベース ディレクトリとの相対パス
名、絶対パス名のどちらでも構いません。指定するディレクトリは、
すべて存在するものにしてください。
MAXSIZE max_size
PSU にロードするデータの最大量を KB 数で指定します。この量ま
でロードされると、シーケンス内の次の PSU に切り換わります。
max_size は KB 単位で指定しますが、実際のサイズは、8KB の倍数
に切り上げられます。許容最小値は 16KB です。
MAXSIZE パラメータは、RBW_STORAGE システム テーブルの
MAXSIZE 列に格納されます。このシステム テーブルには、PSU の
使用済み KB 数 (USED 列) も格納されます。
INITSIZE init_size
PSU にあらかじめ確保される領域の初期サイズを指定します。KB 単
位で指定しますが、実際のサイズは 8KB の倍数に切り上げられま
す。指定する値は、MAXSIZE パラメータで指定した最大サイズ以下
にしてください。
INITSIZE パラメータは、RBW_STORAGE システム テーブルの
INITSIZE 列に格納されます。
セグメントの先頭 PSU の初期サイズは、16KB 以上にします。最初
の PSU に 9KB 未満の初期サイズを指定した場合は、エラーが戻さ
れます。 9KB から 16KB 未満の値を指定すると、16KB に切り上げ
られます。それ以降の PSU の初期サイズは、0KB から最大サイズの
任意の値に設定できます。
デフォルトは 16KB です。
第 8 章 SQL 文と RISQL 拡張機能
269
ALTER SEGMENT — その他の句
EXTENDSIZE increment
PSU の容量が不足する場合に、初期サイズ以上に拡張するときの増分
の単位を指定します。増分は KB 単位で指定しますが、実際のサイズ
は 8KB の倍数に切り上げられます。デフォルトは 8KB です。
DROP STORAGE 句と RELEASE STORAGE 句
DROP LAST STORAGE
指定したテーブルまたはインデックス セグメントの末尾から、最後の
PSU を削除します。最後の PSU は完全に空にしてから削除する必要
があります。この PSU はファイルシステムから物理的に削除されま
す。
重要: 最後の PSU から行データを削除した後も領域が論理的に使用
されている場合、最初に ALTER SEGMENT RELEASE
STORAGE オプションを使用して領域を解放してから PSU を
削除する必要があります。 RBW_SEGMENTS システム テーブ
ルの Used 列に対してクエリを実行し、領域が使用中であるか
どうかを確認してください。ストレージの解放と削除の詳細な
手順については、「管理者ガイド」を参照してください。
複数の 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 オプションはインデックス セグメントや名前の
ないセグメントには無効です。
270
IBM Red Brick Warehouse: SQL リファレンス ガイド
ALTER SEGMENT — その他の句
ALTER SEGMENT RELEASE STORAGE コマンドが完了すると、オ
ペレーティング システムに戻されたブロックの割合を示すメッセージ
が表示されます。
セグメントのストレージを解放/削除する例: 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;
第 8 章 SQL 文と RISQL 拡張機能
271
ALTER SYNONYM
ALTER SYNONYM 文は、シノニムまたはシノニムの列にコメントを付けます。シノニ
ムのコメントは、RBW_SYNONYMS および RBW_TABLES システム テーブルに格納
されます。列のコメントは、RBW_COLUMNS システム テーブルに格納されます。
許可
シノニムを変更するユーザは、次の中で少なくとも 1 つの条件を満たしている必要があ
ります。
v DBA システム ロールのメンバーであること
v 明示的に付与されるかユーザが作成したロールのメンバーであることにより、
ALTER_ANY 権限を持っていること
v RESOURCE システム ロールのメンバーで、かつシノニムの作成者であること
v シノニムの作成者であり、明示的に付与されるかユーザが作成したロールのメンバー
であることにより、ALTER_OWN 権限を持っていること
構文
次に ALTER SYNONYM 文の構文ダイアグラムを示します。
ALTER SYNONYM
synonym_name
creator.
ALTER
col_name
COLUMN
COMMENT
’ character_string ’
NULL
synonym_name
変更するシノニムの名前を指定します。シノニム名を指定する場合に
は、そのシノニムを作成したユーザのユーザ名を creator に指定して
ください。
ALTER COLUMN col_name
指定したシノニムの中で、変更する列の名前を指定します。
COLUMN キーワードはオプションです。
COMMENT
シノニムまたはシノニムの列を説明するコメント文字列を割り当てま
す。シノニムのコメントは、RBW_SYNONYMS および
RBW_TABLES システム テーブルに格納されます。列のコメントは、
RBW_COLUMNS システム テーブルに格納されます。 256 バイトま
で入力できます。データベース サーバはこのコメント テキストを無
視します。
NULL を指定すると、コメント文字列が NULL インジケータに置き換え
られます。
272
IBM Red Brick Warehouse: SQL リファレンス ガイド
ALTER SYSTEM
ALTER SYSTEM 文は、データベース管理者や、必要なアクセス権を持ったユーザが、
データベースの制御や各種の管理を行うときに使用します。
許可
データベースに対して ALTER SYSTEM 文を実行するユーザは、次の中で少なくとも
1 つの条件を満たしている必要があります。
v DBA システム ロールのメンバーであること
v 明示的に付与されるかユーザが作成したロールのメンバーであることにより、
ALTER_SYSTEM 権限を持っていること
管理データベースの DBA システム ロールのメンバーであるか、ALTER_SYSTEM 権
限を持っているユーザは、すべてのウェアハウス データベースを対象とした ALTER
SYSTEM 文を実行できます。
構文
次に ALTER SYSTEM 文の構文ダイアグラムを示します。
ALTER SYSTEM
RESET STATISTICS
DATABASE
ALL
logical_db_name
QUIESCE
DATABASE
ALL
logical_db_name
RESUME
DATABASE
ALL
logical_db_name
ADVISOR_LOGGING
START
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
RESET STATISTICS
現在のデータベースまたは指定されたデータベースの動的統計テーブ
ルの統計情報をすべて 0 にリセットします。
QUIESCE
カレント データベースまたは指定したデータベースを、静止した状態
にします。静止状態のデータベースに対しては、新しくコマンドを実
行したり、新しく接続することはできません。DBA システム ロール
第 8 章 SQL 文と RISQL 拡張機能
273
ALTER SYSTEM
のメンバーまたは IGNORE_QUIESCE タスク権限を持つユーザが開始
する場合は、コマンドや接続は実行可能です。現在実行中のコマンド
は、完了させることができます。
RESUME
静止状態のデータベースをアクティブ状態に変更します。静止データ
ベースでは新規にセッションが起動できないため、このコマンドは既
存セッションで実行するか、管理データベースに接続していて、その
管理データベースに対する ALTER_SYSTEM 権限を持っているユー
ザが実行する必要があります。
DATABASE
1 つまたはすべてのデータベースを指定します。 ALTER SYSTEM
コマンドの実行時に管理データベースに接続している場合には、この
句を指定してください。他のデータベースに接続している場合は、カ
レント データベースにコマンドが適用されます。DATABASE 句は使
用できません。
ALL
ALTER SYSTEM 文が、すべてのウェアハウス データベースに適用
することを指定します。
logical_db_name
rbw.config ファイルに設定されたデータベース論理名を指定します。
START、STOP ADVISOR_LOGGING
Vista Advisor ログ ファイルへの情報の記録を開始または停止しま
す。この文には、デフォルト設定はありません。この文は rbw.config
ファイルの ADMIN ADVISOR_LOGGING パラメータよりも優先され
ます。
SWITCH ADVISOR_LOG FILE
デフォルト名で新規のアクティブ ログ ファイルを作成し、次の情報
をログに記録します。
タイムスタンプ
メッセージがログ記録された日付と時刻を示します。
データベース名
使用中のデータベースの名前を示します。
基本テーブル識別番号
事前計算ビューの作成に使用された基本テーブルを識別しま
す。
ビュー識別番号
クエリへの応答に使用された事前計算ビューを識別します。
ロールアップ情報
ビューのグループ化列のサブセットまたはグラニュラリティ
の低いディメンジョンの属性を問い合わせるクエリに応答す
るためにビューが参照された回数を示します。
274
IBM Red Brick Warehouse: SQL リファレンス ガイド
ALTER SYSTEM
経過時間
クエリおよびクエリ内の各集約ブロックの実行に要した時
間。クエリの集約部分の実行に要した合計時間を示します。
SQL テキスト
集約ブロックの SQL テキスト。ビューの定義を表します。
TERMINATE ADMIN DAEMON
管理デーモン (rbwadmd) を終了します。 rbwadmd を終了すると、動
的統計テーブル (DST) に格納されていた情報はすべて削除されます。
管理者は /redbrick/bin ディレクトリから rbwadmd スクリプトを実
行して管理デーモンを再起動できます。
alter_user_activity
ALTER SYSTEM の 2 つのオプション、CLOSE USER SESSION と
CANCEL USER COMMAND を含みます。どちらのオプションも、現
在実行中のユーザ コマンドを取り消すものです。異なる点は、
CLOSE USER SESSION オプションが、コマンドを実行しているセッ
ションも終了させる点です。 alter_user_activity 句の詳しい定義は、
276 ページを参照してください。
alter_user_priority
現在のユーザ セッションの優先順位を変更します。そのユーザが新規
セッションを次に起動した時は、変更前の優先順位に戻ります。
ユーザ優先順位を永続的に変更するには、ALTER USER 文を使用し
ます。ユーザ優先順位をサポートするには、UNIX の renice コマン
ドを実行できるプラットフォームを使用してください。 ADMIN
RENICE_COMMAND 構成パラメータに renice スクリプトのフルパ
ス名を指定してください。フル パス名にはディレクリ名が含まれてい
ますが、実行可能ファイル名は含まれていません。alter_user_priority
句の詳しい定義は、277 ページを参照してください。
alter_logging
ログ動作を制御するオプションが含まれます。 alter_logging 句の詳し
い定義は、278 ページを参照してください。
alter_accounting
アカウント動作を制御するオプションが含まれます。 alter_accounting
句の詳しい定義は、279 ページを参照してください。
alter_performance_monitor
パフォーマンス モニタを制御するオプションが含まれます。
alter_performance_monitor 句の詳しい定義は、280 ページを参照して
ください。
alter_clear_performance_statistics
パフォーマンス DST をクリアするオプションが含まれます。
alter_clear_performance_statistics 句の詳しい定義は、282 ページを参照
してください。
第 8 章 SQL 文と RISQL 拡張機能
275
ALTER SYSTEM
ユーザ操作の制御
次に alter_user_activity 句の構文ダイアグラムを示します。 alter_user_activity 句と
ALTER SYSTEM 文との関係は、273 ページを参照してください。
CLOSE USER SESSION
CANCEL USER COMMAND
db_username
ALL
DATABASE
ALL
logical_db_name
PROCESS
ALL
pid
CLOSE USER SESSION
カレント データベースの 1 つまたはすべてのユーザ セッションにつ
いて、現在実行中のコマンドを取り消し、終了します。
CANCEL USER COMMAND
カレント データベースのそれぞれ、またはすべてのユーザ セッショ
ンについて、現在実行中のコマンドを取り消します。
db_username
有効なデータベース ユーザ名を指定します。
ALL
文に指定したデータベースの全ユーザに適用することを指定します。
DATABASE
1 つまたはすべてのデータベースを指定します。 ALTER SYSTEM
コマンドの実行時に管理データベースに接続している場合には、この
句を指定してください。他のデータベースに接続している場合は、カ
レント データベースにコマンドが適用されます。DATABASE 句は使
用できません。
ALL
文が、すべてのウェアハウス データベースに適用されることを指定し
ます。
logical_db_name
rbw.config ファイルに設定されたデータベース論理名を指定します。
PROCESS
セッションのプロセス ID により、特定のセッションを指定します。
管理データベースに (ADMIN) 接続している場合は、DATABASE 句
の後にこの句を指定してください。たとえば、管理データベースに接
続中にデータベース DB1 上の特定のユーザのすべての処理を終了さ
せる場合は、DATABASE DB1 句の後にこの句を指定する必要があり
ます。
ALL
すべてのセッションを指定します。 PROCESS オプションが指定され
ていない場合には、ALL がデフォルトです。
pid
特定のユーザ セッションのプロセス ID を指定します。
例:
次の文は、カレント データベースでユーザ diaz が実行している特定のセッションにつ
いて、現在実行中の文を取り消します。
276
IBM Red Brick Warehouse: SQL リファレンス ガイド
ALTER SYSTEM
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
文との関係は、273 ページを参照してください。
CHANGE USER
db_username
ALL
SET PRIORITY
integer
ON DATABASE
ALL
logical_db_name
PROCESS
ALL
pid
CHANGE USER 1 つまたは複数のユーザ セッションの優先順位を変更します。この句
を使用するには、ADMIN RENICE_COMMAND パラメータを設定し
てください。
db_username
有効なデータベース ユーザ名を指定します。
ALL
文に指定したデータベースの全ユーザに適用することを指定します。
SET PRIORITY integer
セッションの優先順位を integer に指定した値に設定します。 0 から
100 の値を指定できます。最優先の順位は 0 です。
ON DATABASE 1 つまたはすべてのデータベースを指定します。 ALTER SYSTEM
コマンドの実行時に管理データベースに接続している場合には、この
句を指定してください。他のデータベースに接続している場合は、カ
レント データベースにコマンドが適用されます。DATABASE 句は使
用できません。
ALL
文が、すべてのウェアハウス データベースに適用されることを指定し
ます。
第 8 章 SQL 文と RISQL 拡張機能
277
ALTER SYSTEM
logical_db_name
rbw.config ファイルに設定されたデータベース論理名を指定します。
PROCESS
セッションのプロセス ID により、特定のセッションを指定します。
管理データベースに接続している場合は、DATABASE 句の後にこの
句を指定してください。たとえば、管理データベースに接続中にデー
タベース DB1 上の特定のユーザの優先順位を変更する場合は、
DATABASE DB1 句の後にこの句を指定する必要があります。
ALL
すべてのセッションを指定します。 PROCESS オプションを指定しな
ければ、ALL がデフォルトになります。
pid
特定のユーザ セッションのプロセス ID を指定します。
ログ記録設定の変更
次に alter_logging 句の構文ダイアグラムを示します。この句と ALTER SYSTEM 文と
の関係は、273 ページを参照してください。
alter_logging 句:
START LOGGING
STOP LOGGING
SWITCH LOGGING FILE
TERMINATE LOGGING LEVEL
CHANGE LOGGING LEVEL
AUDIT
ERROR
OPERATIONAL
SCHEMA
USAGE
ROUTINE
ALERT
URGENT
ヒント: 次に示す操作を実行するには、ログ デーモンが起動している必要があります。
START LOGGING
イベントのログ記録を開始します。ログ デーモンが、ウェアハウス
プロセスからのログ要求メッセージの受信を開始し、対応するログ レ
コードを新規ログ ファイルに書き込みます。
STOP LOGGING
イベントのログ記録を停止します。ログ デーモンは、ログ記録を停止
し、アクティブ状態のログ ファイルを閉じます。ログ デーモンは停
止されないため、いつでもログ記録を再開できます。
SWITCH LOGGING FILE
アクティブ状態のログ ファイルを閉じ、その後のレコードを書き込む
新規のアクティブ ログ ファイルを作成します。閉じたファイルは名
前が rbwlog.<daemon_name>.active から
rbwlog.<daemon_name>.<datetime_stamp> に変更されます。ログ記録が
停止していると、この文は無視されます。
278
IBM Red Brick Warehouse: SQL リファレンス ガイド
ALTER SYSTEM
TERMINATE LOGGING DAEMON
ログ記録タスクとアカウンティング タスクの両方を実行しているログ
デーモン プロセス (rbwlogd) を終了します。
CHANGE LOGGING LEVEL
選択したログ イベント カテゴリについて、ログの重要度を変更しま
す。変更は、即時に有効になります。イベント カテゴリは、次のとお
りです。
v AUDIT (セキュリティおよびアクセス コントロールに関連したイベ
ント)
v ERROR (エラー イベント)
v OPERATIONAL (管理操作)
v SCHEMA (データベースの物理的および論理的構造の変更)
v USAGE (ロード操作、アンロード操作、DML 操作)
ROUTINE、ALERT、URGENT
そのイベント カテゴリについて、指定したレベル以上の重要度を持つ
ログ イベントのみが記録されます。最低レベルは ROUTINE、最高レ
ベルは URGENT です。 ALERT の重要度レベルは、ROUTINE と
URGENT の中間です。
アカウンティング設定の変更
次に alter_accounting 指定の構文ダイアグラムを示します。この句と ALTER SYSTEM
文との関係は、273 ページを参照してください。
alter_accounting specification:
START ACCOUNTING
STOP ACCOUNTING
SWITCH ACCOUNTING FILE
CHANGE ACCOUNTING LEVEL
WORKLOAD
JOB
START ACCOUNTING
アカウンティング動作を開始します。ログ デーモンが、アカウンティ
ング要求メッセージの受信を開始し、対応するアカウント レコードを
新規アカウント ファイルに書き込みます。すでにアカウンティングが
開始していると、このオプションは無視されます。
STOP ACCOUNTING
アカウンティング動作を停止します。ログ デーモンは、アクティブ状
態のアカウント ファイルを閉じます。ログ デーモンは停止されない
ため、いつでもアカウンティングを再開できます。
SWITCH ACCOUNTING FILE
アクティブ状態のアカウント ファイルを閉じ、その後のアカウント
第 8 章 SQL 文と RISQL 拡張機能
279
ALTER SYSTEM
レコードを書き込む新規のアクティブ ファイルを作成します。閉じた
ファイルの名前が rbwacct.<daemon_name>.active から
rbwacct.<daemon_name>.<datetime_stamp> に変更されます。アカウン
ティングが実行中でなければ、この文は無視されます。
CHANGE ACCOUNTING LEVEL
記録するアカウント レベルの詳細レベルを、JOB アカウンティング
または WORKLOAD アカウンティングに変更します。変更は、即時
に有効になります。
WORKLOAD、 JOB
JOB アカウンティングまたは WORKLOAD アカウンティングを指定
します。 JOB は、基本的なリソース使用率情報に限定されます。
WORKLOAD アカウンティングには詳細な情報が含まれます。主に
IBM サポート スタッフがこのアカウンティングを使用します。
パフォーマンス モニタの変更
次に alter_performance_monitor 句の構文ダイアグラムを示します。この句と ALTER
SYSTEM 文との関係は、273 ページを参照してください。
START
STOP
PERFORMANCE MONITOR
SESSION
session_id
DATABASE
logical_db_name
START、STOP PERFORMANCE MONITOR
クエリの実行結果を収集および格納する場合に、パフォーマンス モニ
タ デーモン (rbwpmond) を開始または停止します。この文では、
QUERYPROCS、PERFORMANCE_MONITOR_MAXSESSIONS、およ
び PERFORMANCE_MAXOPERATORS パラメータの現在の値を使用
してメモリを割り当てて、クエリ統計を収集および格納します。メモ
リ要件とパフォーマンス モニタの使用の詳細については、「クエリ
パフォーマンス ガイド」を参照してください。
重要: パフォーマンスの検証中はパフォーマンス デーモンを常に有効
にしておき、クエリごとに起動および終了しないようにしてく
ださい。セッション中にクエリのモニタを制御するには、SET
PERFORMANCE MONITOR ON/OFF 文を使用してください。
詳しくは、478 ページの『SET PERFORMANCE MONITOR』
を参照してください。
パフォーマンスの検証は数日から 1 週間かかる場合もあります。割り
当てられたメモリにクエリのすべてのモニタ結果を保存できる場合
は、検証中はパフォーマンス モニタを常に有効にしておくことができ
ます。メモリが不足した場合、ALTER SYSTEM コマンドの CLEAR
280
IBM Red Brick Warehouse: SQL リファレンス ガイド
ALTER SYSTEM
PERFORMANCE MONITOR オプションを使用して、パフォーマンス
DST の行データをクリアできます。このオプションの詳細について
は、282 ページを参照してください。
SESSION
指定したセッションのパフォーマンス モニタを開始または停止しま
す。 DBA はこのキーワードを使用して、パフォーマンス モニタを
個別のセッションに制限できます。
session_pid
現在アクティブなセッションを指定します。
DATABASE
パフォーマンス モニタを開始または停止するデータベースを指定しま
す。 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;
詳しくは、478 ページの『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) このセッションのパフォーマンス監視が無効にされました。
ユーザが SET PERFORMANCE MONITOR コマンドでモニタを開始していた場合、こ
の ALTER SYSTEM STOP コマンドを SESSION 句とともに使用して、セッションの
モニタを停止できます。
第 8 章 SQL 文と RISQL 拡張機能
281
ALTER SYSTEM
セッションのパフォーマンス モニタを手動で停止した後、DBA は ALTER SYSTEM
START PERFORMANCE MONITOR コマンドの SESSION 句を使用してモニタを再開
できます 。
RISQL> alter system start performance monitor session 6042;
STOP PERFORMANCE MONITOR コマンドを SESSION キーワードを使用せずに実行
すると、パフォーマンス モニタ デーモン rbwpmond が停止され、システム全体のパフ
ォーマンスをモニタするためのリソースが解放されます。
RISQL> alter system stop performance monitor;
パフォーマンス モニタの使用方法については、「クエリ パフォーマンス ガイド」を参
照してください。
パフォーマンス モニタのクリア設定の変更
次に alter_clear_performance_monitor 句の構文ダイアグラムを示します。この句と
ALTER SYSTEM 文との関係は、273 ページを参照してください。
CLEAR PERFORMANCE MONITOR
START_TIMESTAMP timestamp
USERNAME user_name
DATABASE
logical_db_name
CLEAR PERFORMANCE MONITOR
START_TIMESTAMP および USERNAME オプションを使用して、パ
フォーマンス DST に格納された行データをクリアします。
START_TIMESTAMP と USERNAME のどちらも指定しない場合は、
すべての行がクリアされます。
この句を使用する前に、パフォーマンス モニタ デーモン (rbwpmond)
を有効にしておく必要があります。
START_TIMESTAMP
コマンドの開始時間を基準にして、パフォーマンス DST から行デー
タをクリアします。
282
timestamp
コマンドの開始時間を指定します。この前に、パフォーマンス DST
からすべての行がクリアされます。
USERNAME
ユーザ名を基準にして、パフォーマンス DST から行データをクリア
します。
db_username
有効なデータベース ユーザ名を指定します。このユーザ名のある行デ
ータがパフォーマンス DST からクリアされます。
DATABASE
パフォーマンス DST から行データをクリアするデータベースを指定
します。 ALTER SYSTEM コマンドの実行時に管理データベースに
IBM Red Brick Warehouse: SQL リファレンス ガイド
ALTER SYSTEM
接続している場合には、この句を指定してください。他のデータベー
スに接続している場合は、カレント データベースにコマンドが適用さ
れます。DATABASE 句は使用できません。
logical_db_name
rbw.config ファイルに設定されたデータベース論理名を指定します。
使用上の注意
PERFORMANCE_MONITOR_COMMANDS_LIMIT パラメータは、パフォーマンス モニ
タが DST に格納できるコマンドの最大数を指定します。このパラメータで指定した数
に達した場合、パフォーマンス モニタで新規クエリを開始することはできません。この
ときパフォーマンス モニタからはエラー メッセージが戻され、パフォーマンス DST
をクリアする必要があることを示します。 ALTER SYSTEM コマンドの CLEAR
PERFORMANCE MONITOR 句を使用して、行データのサブセットまたはすべての行デ
ータをクリアし、クエリのモニタを再開してください。
CLEAR PERFORMANCE MONITOR 句の使用手順とその例については、「クエリ パフ
ォーマンス ガイド」を参照してください。
第 8 章 SQL 文と RISQL 拡張機能
283
ALTER TABLE
ALTER TABLE 文には、次の目的があります。
v テーブル列の追加、修正、削除。
v テーブルに使用できるセグメントの最大数と、セグメント当たりの最大行数の変更。
v テーブルまたは列を説明したコメントの割当て。テーブルと列のコメントは、それぞ
れ RBW_TABLES テーブルと RBW_COLUMNS テーブルに格納されます。
v フォーリン キー制約の追加、削除、変更。
v 事前計算ビューの有効または無効の設定。
ALTER TABLE 文の実行中は、テーブルが自動的にロックされます。
ALTER TABLE 文は、テンポラリ テーブルに対してはサポートされません。
許可
テーブルを変更するユーザは、次の中で少なくとも 1 つの条件を満たしている必要があ
ります。
v DBA システム ロールのメンバーであること
v 明示的に付与されるかユーザが作成したロールのメンバーであることにより、
ALTER_ANY 権限を持っていること
v テーブルの作成者であり、RESOURCE システム ロールのメンバーであること
v テーブルの作成者であり、ALTER_OWN 権限と ALTER_TABLE_INTO_ANY 権限を
持っていること。ただし、IN_PLACE オプションを使用するには
ALTER_TABLE_INTO_ANY 権限は不要です。
構文
次に ALTER TABLE 文の構文ダイアグラムを示します。
ALTER TABLE
table_name
creator.
284
IBM Red Brick Warehouse: SQL リファレンス ガイド
ALTER TABLE
,
add_column
drop_column
IN_PLACE
IN
USING
segment_name
,
working_segment_name
IN
( segment_name
)
alter_column
RESUME
RESET
CHANGE MAXSEGMENTS TO
NULL
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
creator.
table_name
変更するテーブルの名前を指定します。このテーブルは、すでにユー
ザが定義済みのものである必要があります。テーブル名を指定する場
合には、そのテーブルを作成したユーザのユーザ名を creator に指定
してください。
シノニム、ビュー、テンポラリ テーブル、システム テーブルは変更
できません。変更するテーブルのシノニムは、テーブルと同時に変更
されますが、ビューには影響しません。基本テーブルの変更をビュー
に反映させるには、ビューを削除して、再作成する必要があります。
add_column、drop_column
指定したテーブルに追加する列、またはテーブルから削除する列を指
定します。
1 つの ALTER TABLE 文は、列の追加と削除を同時に行うことがで
きるように、複数の列を指定できます。 ADD と DROP はいくつで
も指定できます。
add_column 指定と drop_column 指定の詳細は、それぞれ 284 ページ
と 293 ページを参照してください。
alter_column
既存列の変更内容を記述します。既存列の名前やデフォルト値を変更
できます。指定列がフォーリン キー列の場合は、alter_column を指定
して参照先テーブルから行を削除するときの動作を変更できます。
第 8 章 SQL 文と RISQL 拡張機能
285
ALTER TABLE
alter_column を指定して、列のフィル ファクタを変更したり、列にコ
メントを割り当てたりすることもできます。コメントは
RBW_COLUMNS テーブルに格納されます。
alter_column 指定の詳しい定義は、294 ページを参照してください。
IN_PLACE
既存セグメントで、列の追加や削除を行います。
行のサイズを大きくする (追加する列の合計幅が、削除する列の合計
幅より広い) 場合は、テーブルの全行を格納できる大きさのセグメン
トを使用してください。
このオプションを使用して操作が中止された場合は、テーブルはリセ
ットされません。
IN_PLACE USING working_segment_name
作業セグメントを使用して列を追加または削除します。作業セグメン
ト とは、ALTER TABLE 操作時に変更済みデータを一時的に保持す
るための事前定義セグメントです。
ALTER TABLE 操作を実行する前に作業セグメントを作成しておく必
要があります。
このオプションでは、テーブル セグメントが作業セグメントにコピー
され、メモリ内のデータが変更され、変更されたテーブルが元のセグ
メントに格納されます。テーブル内のすべてのセグメントに対して、
同じ作業セグメントが再利用されます。変更操作を実行する前に作業
セグメントをテーブルにアタッチし、変更操作の完了後にテーブルか
ら切り離します。
行のサイズを大きくする (追加する列の合計幅が、削除する列の合計
幅より広い) 場合は、テーブルの全行を格納できる大きさのセグメン
トを使用してください。このオプションを指定すると、ALTER
TABLE 操作が失敗した場合に回復できる可能性が高いため、このオ
プションを使用することをお勧めします。
詳しくは、「管理者ガイド」を参照してください。
IN segment_name
名前付きセグメントにテーブルを再作成します。既存セグメントのす
べての行が新規セグメントにコピーされ、コピーと同時に ADD 指定
または DROP 指定が適用されます。
1 つのセグメントに格納されているテーブルは、1 つのセグメントに
コピーしてください。複数セグメントを持つテーブルは、同数のセグ
メントにコピーする必要があります。
変更が完了すると、元のセグメントはテーブルから切り離されるか、
削除されます。名前付き (ユーザが作成した) セグメントは切り離さ
れ、デフォルト セグメントは削除されます。
286
IBM Red Brick Warehouse: SQL リファレンス ガイド
ALTER TABLE
新規セグメントは、テーブル全体を格納できるサイズにしてくださ
い。
IN_PLACE と IN segment_name のどちらも指定しない場合は、変更
後のテーブルはデフォルト セグメントに作成されます。変更が完了す
ると、元のセグメントはテーブルから切り離されるか、削除されま
す。名前付き (ユーザが作成した) セグメントは切り離され、デフォ
ルト セグメントは削除されます。
RESUME
割り込みによって中断した ALTER TABLE ADD COLUMN 操作や
DROP COLUMN 操作を再開します。
実行に失敗した ALTER TABLE ADD CONSTRAINT 操作や DROP
CONSTRAINT 操作は再開できません。
RESET
テーブルを元の状態に復元します。 RESET は、次の条件が満たされ
た場合にのみ有効です。
v ALTER TABLE 文が、ユーザの割り込みや、実行中の障害によって
完了できなかった場合。これには DBA 権限の欠如のような特権違
反は含まれません。
v ALTER TABLE 文に、IN_PLACE オプションを指定しなかった場
合。
CHANGE MAXSEGMENTS TO...
CHANGE MAXROWS PER SEGMENT TO
テーブルの maxsegments または maxrows per segment の値を変更しま
す。 STAR インデックスキーのフォーリン キーがこのテーブルを参
照している場合に、この値でインデックス キーのサイズを算出し、デ
ータ量に応じた領域をインデックスに割り当てます。
ALTER TABLE 文は上記の 2 つの値を変更できますが、両方を 1 つ
の文で変更することはできません。
どちらかの値に NULL を指定すると、CREATE TABLE 文で指定を省
略した場合と同様になりますので、注意してください。
STAR インデックスのサイズ変更については、「管理者ガイド」を参
照してください。
ヒント: 参照先テーブルの MAXROWS PER SEGMENT の値を変更
すると STAR インデックスの範囲指定が無効になるような場
合、この値を変更できません。そのような変更を加えようと
すると、その STAR インデックスを示すエラー メッセージ
が表示されます。
SET PRECOMPUTED VIEWS
table_name を持つすべての事前計算ビューに、詳細テーブルが有効ま
第 8 章 SQL 文と RISQL 拡張機能
287
ALTER TABLE
たは無効とマークします。この文にはデフォルトはありません。ただ
し、すべての事前計算ビューは、作成時には自動的に無効とマークさ
れます。
COMMENT
テーブルの内容を説明したコメント文字列を割り当てます。コメント
は、RBW_TABLES システム テーブルに格納されます。256 バイトま
で入力できます。データベース サーバはこのコメント テキストを無
視します。
NULL を指定すると、コメント文字列が NULL に置き換えられます。
add_constraint
テーブルに追加するフォーリン キー制約を指定します。詳細について
は、298 ページの『ADD CONSTRAINT 指定』を参照してください。
drop_constraint
テーブルから削除するフォーリン キー制約を指定します。詳細につい
ては、301 ページの『DROP CONSTRAINT 指定』を参照してくださ
い。
alter_constraint
変更するフォーリン キー制約を指定して、シノニムまたはシノニムの
基本テーブルを参照するようにします。詳細については、302 ページ
の『ALTER CONSTRAINT 指定』を参照してください。
RENAME AS new_name
table_name で指定した基本テーブルの名前を new_name に変更しま
す。新しい名前には、既存のテンポラリ テーブル、パーマネント テ
ーブル、派生テーブルやシノニムの名前を使用できません。テーブル
名を指定する場合には、そのテーブルを作成したユーザのユーザ名を
creator に指定してください。
シノニム名は変更可能です。また、テーブル名を変更した後も、シノ
ニムは有効です。次のオブジェクトの名前は変更できません。
v システム テーブル。
v 動的統計テーブル (DST)。
v モデル テーブル。
v 派生テーブル (ビューや集約テーブルなど)。
v ビューで参照されるテーブル。テーブルの名前を変更するときは、
テーブルで定義されたビューをすべて削除する必要があります。
クエリ リビジョンが固定されている場合、バージョン管理されたデー
タベースのテーブル名は変更できません。
ユーザは、他の DDL タスクを実行する権限に応じて、テーブルの名
前を変更するための権限を持つ必要があります。たとえばテンポラリ
テーブルを作成でき、パーマネント テーブルを作成できないユーザ
は、テンポラリ テーブルの名前を変更することはできますが、パーマ
ネント テーブルの名前は変更できません。
288
IBM Red Brick Warehouse: SQL リファレンス ガイド
ALTER TABLE
テーブル名を変更しても、プライマリ キー制約とフォーリン キー制
約は引き続き有効です。制約名とインデックス名は、新しいテーブル
名を反映するように自動的に更新されません。システムがデフォルト
で生成した制約名およびプライマリ キー インデックス名には、元の
テーブル名が含まれています。このため、RBW_RELATIONSHIPS、
RBW_CONSTRAINTS、および RBW_INDEXES テーブルに対するク
エリ出力は、紛らわしい場合があります。
テーブル名を変更しても、マクロ テキストは動的に更新されません。
したがって、名前を変更したテーブルを参照するマクロは、エラーに
なるか、不正な結果を戻します。
使用上の注意
VARCHAR 列を使用している場合、ALTER TABLE 文で必要となる正確な領域の容量
を事前に算出することはできません。
ヒント: 領域不足のために、文の実行に失敗する場合に備えて、テーブルの変更前に必
ずそのバックアップを作成することをお勧めします。
第 8 章 SQL 文と RISQL 拡張機能
289
ADD COLUMN 指定
ADD COLUMN 指定
add_column は、指定したテーブルに追加する列を指定します。 add_column を ALTER
TABLE 文で指定する方法は、284 ページの『ALTER TABLE』を参照してください。
構文:
次に add_column 指定の構文ダイアグラムを示します。
ADD COLUMN 指定:
ADD
column_name datatype
COLUMN
NOT NULL
DEFAULT
UNIQUE
’literal’
CURRENT_DATE
CURRENT_TIME
CURRENT_TEIMESTAMP
CURRENT_USER
NULL
WITH FILLFACTOR
n
ADD
新規列を作成し、指定したテーブルの最終列に追加します。CREATE
TABLE 文で最後にこの列を指定してテーブルを作成するのと同じ結
果になります。 COLUMN キーワードはオプションです。
col_name
指定したテーブルに追加する列を指定します。 ALTER TABLE 文に
指定する列の名前は、一意である必要があります。テーブルにある既
存の列名とも重複できません。
data type
列のデータ型を指定します。 ALTER TABLE には、CREATE TABLE
文で使用できるデータ型をすべて使用できます。 DEFAULT 句に指定
する値はデータ型との互換性が必要です。
データ型については、22 ページの『データ型』と 350 ページの『列
の定義』を参照してください。
NOT NULL
列が NULL ではないことを指定します。 NOT NULL と指定した列
には、そのテーブルのすべての行に値を格納する必要があります。値
を入力しなかったり、未知の値を入力することはできません。
NOT NULL 句はシリアル (SERIAL) 型列の指定で必要です。
290
UNIQUE
列が一意であることを指定します。 UNIQUE と指定した列には、重
複値を格納することはできません。一意性が検証されるには、
UNIQUE と指定した各列に B-TREE インデックスを設定する必要が
あります。
DEFAULT
列の DEFAULT 値を指定します。この値は、すべての既存行に適用さ
れます。新規列のデータ型は、デフォルト値との型互換性が必要で
IBM Red Brick Warehouse: SQL リファレンス ガイド
ADD COLUMN 指定
す。たとえば、REAL 列に 1 を割り当てるのは有効ですが、
INTEGER 列に次の文字列を割り当てるのは無効です。
’larry, moe, and curly’
DEFAULT キーワードの後に指定できるキーワードと値 (’literal’、
CURRENT_DATE、 CURRENT_TIME、 CURRENT_TIMESTAMP、
CURRENT_USER、および NULL) については、352 ページを参照し
てください。
シリアル (SERIAL) 型以外のすべてのデータ型にはデフォルト値が必
要です。シリアル (SERIAL) 型列には、デフォルト値はありません。
WITH FILLFACTOR n
この句は、可変長文字 (VARCHAR) 型列にのみ適用されます。
通常の VARCHAR が取るべき列の長さの割合を指定します。この値
は、ブロックに割り当てる行サイズと行数の算出に使用されます。
WITH FILLFACTOR を指定しない場合、rbw.config ファイルに設定さ
れているデフォルトの列フィル ファクタが使用されます。rbw.config
ファイルで列フィル ファクタが設定されていない場合は、システム
デフォルトである 10% が使用されます。
この句の有効範囲は 5 から 100 です。100 より大きい値を指定する
と、RBW_COLUMNS システム テーブルには値 100 が格納されま
す。
VARCHAR FILLFACTOR を使用したブロックごとの行数の計算につ
いては、「管理者ガイド」を参照してください。
使用上の注意:
複数の ADD 指定を使用した場合は、ALTER TABLE 文に記述された順序で、テーブ
ルの最後に各列が追加されます。
テーブルに列を追加しても、ビューは変わりません。ビューの列参照名は、ビューの作
成時にすべて展開されています。このため、ビューの基本テーブルに列を追加しても、
クエリ式として SELECT * FROM を指定したビューには、ビュー定義後に行われた列
の追加は反映されません。
例: 次の文は、Sales というテーブルに 可変長文字 (VARCHAR) 型列 webid を追加
します。
alter table sales add column webid varchar(75) default ’New Sales
web site identifier’ with fillfactor 50 in_place using sales_workseg1;
次の文は、Sales_93 という整数列を Sales テーブルに追加します。
第 8 章 SQL 文と RISQL 拡張機能
291
ADD COLUMN 指定
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
292
IBM Red Brick Warehouse: SQL リファレンス ガイド
DROP COLUMN 指定
DROP COLUMN 指定
drop_column は、指定したテーブルから削除する列を指定します。 drop_column を
ALTER TABLE 文で指定する方法は、284 ページの『ALTER TABLE』を参照してくだ
さい。
構文:
次に drop_column 指定の構文ダイアグラムを示します。
DROP COLUMN 指定:
DROP
column_name
RESTRICT
COLUMN
DROP
指定したテーブルから列を削除します。 COLUMN キーワードはオプ
ションです。削除した列のデータはアクセスできなくなります。この
操作を取り消すことはできません。
column_name
テーブルから削除する列を指定します。
RESTRICT
次の条件のいずれかが真の場合、DROP COLUMN 操作を中止しま
す。
v 削除する列が、ビューで直接または間接的に (SELECT * などで)
参照される。このようなビューは、あらかじめ削除する必要があり
ます。
v 指定した列が、テーブルのプライマリ キーである。
v 指定した列にインデックスが設定されている。インデックスは、あ
らかじめ削除しておく必要があります。
v 指定した列に、フォーリン キー制約が設定されている。
例:
次の文は、Product テーブルの Body 列について、RESTRICT DELETE を実行します。
alter table product drop body restrict in_place
次の文は、Product テーブルに対して、複数の列の追加と削除を実行します。
alter table product
drop body restrict,
add column origin char(8) default ’ABC’,
add column rank int default 2
in seg30
第 8 章 SQL 文と RISQL 拡張機能
293
ALTER COLUMN 指定
ALTER COLUMN 指定
alter_column は、指定したテーブルで変更する列を指定します。 alter_column を
ALTER TABLE 文で指定する方法は、284 ページの『ALTER TABLE』を参照してくだ
さい。
構文:
次に alter_column 指定の構文ダイアグラムを示します。
ALTER
col_name
COLUMN
RENAME AS
ON DELETE
new_col_name
NO ACTION
CASCADE
SET DEFAULT default_definition
DROP DEFAULT
CHANGE FILLFACTOR n
SET SERIAL START ( value )
SET SERIAL STEP ( value )
COMMENT
‘character_string’
NULL
NULL
NOT NULL
ALTER
既存列の変更を指定します。
col_name
指定テーブル内の既存列名を指定します。
RENAME AS new_col_name
指定した列名を変更します。新しい列名は、テーブルで一意にしてく
ださい。
ビューに指定されている列の名前は、ビューを削除しないと変更でき
ません。
ON DELETE
列の参照整合性チェック モードを変更します。この動作は、フォーリ
ン キーで参照されたテーブルから行を削除するときに行われます。
ON DELETE 句は、フォーリン キーとして設定された列にしか適用
できません。
NO ACTION キーワードは、参照先テーブルの行を削除すると参照元
テーブルの参照整合性が維持できなくなる場合には行を削除しないこ
とを指定します。
CASCADE キーワードは、参照先テーブルの行を削除すると参照元テ
ーブルの参照整合性が維持できなくなる場合には、その行を参照して
いる参照元テーブルの行も削除することを指定します。この動作は、
アウトボード テーブルとその参照元テーブルにも適用されます。
各種の削除モードの動作例については、379 ページの『DELETE』お
よび「管理者ガイド」を参照してください。
294
IBM Red Brick Warehouse: SQL リファレンス ガイド
ALTER COLUMN 指定
ヒント: 複数の列から成るフォーリン キーの削除動作を変更する場合
は、フォーリン キー制約名を col_name に指定してくださ
い。 1 つの列から成るフォーリン キーの場合は、列名を
col_name に指定できます。
SET SERIAL START
シリアル (SERIAL) 型の start_value を指定値にリセットします。現
在格納されている最大の SERIAL 値がリセットされ、この値から次の
シリアル (SERIAL) 型値が生成されます。
シリアル (SERIAL) 型値の重複を防ぐため、テーブルに現在格納され
ている行のシリアル (SERIAL) 型列の最大値を指定します。
シリアル (SERIAL) 型値が格納されているテーブルに行を追加するた
びに、その行の値が現在の格納値と照合されます。格納値よりも挿入
した値の方が大きい場合、格納値が挿入した値で更新されます。格納
されたシリアル (SERIAL) 型値が自動的に生成される場合、制約によ
り新規の値はテーブルに格納されている値と同じになることはありま
せん。
重要: start_value を手動で設定した場合や挿入操作中にシリアル
(SERIAL) 型値を入力した場合は、シリアル (SERIAL) 型値の
一意性が保証されません。
次の 2 つの操作は、エラーになります。
v シリアル (SERIAL) 型以外の列で開始値を設定しようとした場合
v シリアル (SERIAL) 型列で SET DEFAULT または DROP
DEFAULT オプションを使用した場合
SET SERIAL STEP
シリアル (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 列のデフォ
第 8 章 SQL 文と RISQL 拡張機能
295
ALTER COLUMN 指定
ルト値が指定されていない場合は、挿入操作時に値を入力する必要が
あります。値を入力しないと、データベース サーバまたは TMU が
エラー メッセージを戻します。
default_definition は、CREATE TABLE 文の column_definitions 句につ
いて説明したとおり、リテラル、デフォルト関数、NULL のいずれかを
指定できます。有効なデフォルト値については、352 ページを参照し
てください。
DROP DEFAULT
テーブルの作成時または先の ALTER TABLE 文で明示的に設定され
たデフォルトを削除します。列のデフォルト値は暗黙のデフォルト設
定である NULL に戻ります。
CHANGE FILLFACTOR n
ブロックに含める行数を決定する可変長文字 (VARCHAR) 型列のフィ
ル ファクタを変更します。この文は、テーブルにアタッチされた既存
のデータやセグメントは変更しません。新しいフィル ファクタは、テ
ーブルをリライトする ALTER TABLE ADD COLUMN 文または
DROP COLUMN 文で使用されます。
この句の有効範囲は 5 から 100 です。100 より大きい値を指定する
と、RBW_COLUMNS システム テーブルには値 100 が格納されま
す。
フィル ファクタの詳細は、「管理者ガイド」を参照してください。
COMMENT
列の内容を説明したコメント文字列を割り当てます。コメントは、
RBW_COLUMNS システム テーブルに格納されます。 256 バイトま
で入力できます。データベース サーバはこのコメント テキストを無
視します。
NULL を指定すると、コメント文字列が NULL に置き換えられます。
NULL、NOT NULL
指定した列を「NULL」から「NOT NULL」、またはその逆に置き換
えます。指定するテーブルは基本テーブルである必要があります。列
が次のいずれかに属する場合、その列を NULL または NOT NULL
に変更することはできません。
v システム テーブル
v DST
v テンポラリ テーブル
v モデル テーブル
v シノニム
v 派生テーブル (ビューや集約テーブルなど)
296
IBM Red Brick Warehouse: SQL リファレンス ガイド
ALTER COLUMN 指定
列を NULL または NOT NULL に変更するユーザは、通常の DDL
権限を持っている必要があります。次の場合、列を NULL または
NOT NULL に変更することはできません。
v データベースがバージョン管理され、クエリ リビジョンが固定さ
れている場合
v 事前計算ビューが変更する列を参照している場合
次のいずれかに当てはまる場合、ALTER COLUMN NULL 操作はエ
ラーになります。この場合、列は NOT NULL のままになります。
v UNIQUE 指定列
v シリアル (SERIAL) 型列
v セグメント化の基準列
v プライマリ キーに属する列
v フォーリン キーに属する列
v 複数列の B-TREE インデックスに属する列
v 階層構造の「From」列
列がすでに NULL 値を持つ場合、これを NOT NULL に変更するこ
とはできません。このため、ALTER COLUMN NOT NULL 文を実行
すると、テーブル全体がインデックス スキャンまたはテーブル スキ
ャンによってチェックされます。指定した列に NULL 値が見つかる
と、操作はエラーとなります。このスキャンには時間がかかります。
ALTER COLUMN 文を実行する前に、クエリで列データの内容を確認
しておくことをお勧めします。
例:
次の文は、Distributor という列名を Distrib に変更します。
alter table product
alter column distributor rename as distrib
次の文は、Market テーブルの State 列のデフォルト値 CA を指定します。
alter table market
alter column state set default ’CA’
第 8 章 SQL 文と RISQL 拡張機能
297
ADD CONSTRAINT 指定
ADD CONSTRAINT 指定
add_constraint は、参照元テーブルにフォーリン キー制約を追加します。
構文:
次に add_constraint 指定の構文ダイアグラムを示します。
ADD CONSTRAINT 指定:
,
ADD
FOREIGN KEY (
CONSTRAINT
column_name
)
constraint_name
REFERENCES
table_name
,
creator.
(
primary_key_column
)
ON DELETE
CASCADE
NO ACTION
INITIALLY
IMMEDIATE
DEFERRED
constraint_name
追加するフォーリン キー制約の名前を指定します。制約名はオプショ
ンです。制約名を指定する場合は、その前に CONSTRAINT キーワー
ドを入力し、既存の制約名以外を指定します。制約名を指定しない
と、デフォルトの制約名が割り当てられます。制約名の詳細について
は、358 ページの『プライマリ キーとフォーリン キーの制約名』を
参照してください。
column_name
変更するテーブル内の列名を指定します。テーブルからは、少なくと
も 1 つの列を指定する必要があります。各列を NULL 値不可と指定
する必要があります。列名リストは括弧で囲み、その前に FOREIGN
KEY キーワードを入力してください。指定した列のデータ型は、参照
先テーブルのプライマリ キー列のデータ型と同じである必要がありま
す。
シリアル (SERIAL) 型列をフォーリン キーとして参照することはで
きません。
table_name
298
変更するテーブル内のフォーリン キー参照になるプライマリ キーが
含まれるテーブルを指定します。テーブル名を指定する場合には、そ
のテーブルを作成したユーザのユーザ名を creator に指定してくださ
い。
IBM Red Brick Warehouse: SQL リファレンス ガイド
ADD CONSTRAINT 指定
primary_key_column
参照先テーブルの列名を指定します。任意の数の列名を指定できます
が、参照先テーブルのプライマリ キー列と一致する必要があります。
列名リストは、括弧で囲みます。
ON DELETE
制約の参照整合性チェック モードを定義します。この動作は、フォー
リン キーで参照されたテーブルから行を削除するときに行われます。
NO ACTION キーワードは、参照先テーブルの行を削除すると参照元
テーブルの参照整合性が維持できなくなる場合は、行を削除しないこ
とを指定します。
CASCADE キーワードは、参照先テーブルの行を削除すると参照元テ
ーブルの参照整合性が維持できなくなる場合には、その行を参照して
いる参照元テーブルの行も削除することを指定します。この動作は、
アウトボード テーブルとその参照元テーブルにも適用されます。
各種の削除モードの動作例については、このマニュアルの 379 ページ
の『DELETE』および「管理者ガイド」を参照してください。
INITIALLY IMMEDIATE、DEFERRED
新しい制約 (フォーリン キー参照) の列値に対して参照整合性チェッ
クが実行されるかどうかを指定します。 IMMEDIATE は参照整合性
を即時チェックすることを示し、DEFERRED は参照整合性をチェッ
クしないことを示します。デフォルトは IMMEDIATE です。
ヒント: INITIALLY DEFERRED オプションは、参照整合性違反を検
査しないため、参照整合性が検証されていることが確実な場
合に限り使用してください。たとえば、フォーリン キー参照
のあるテーブルのシノニムを作成して、参照元テーブルから
作成したシノニムに新しいフォーリン キー制約を追加したと
します。この場合、元の基本テーブルの参照整合性が検証さ
れていることは分かっているため、シノニムの参照整合性が
検証されていることは確実です。
使用上の注意:
1 つのテーブルに設定できるフォーリン キーの最大数は 256 です。
すべてのフォーリン キー参照にユーザ定義制約名を付けることをお勧めします。複数の
列から成るフォーリン キーを参照するにはユーザ定義制約名を使用する必要がありま
す。そうしないと、それらのフォーリン キーに STAR インデックスを作成できませ
ん。
ALTER TABLE ADD CONSTRAINT 文の実行が失敗した場合は、ALTER TABLE
RESET 文でリセットできますが、ALTER TABLE RESUME 文では再開できません。
第 8 章 SQL 文と RISQL 拡張機能
299
ADD CONSTRAINT 指定
ALTER TABLE ADD CONSTRAINT 文が失敗するのは、参照先テーブルのプライマリ
キー列に、システムが生成した、またはユーザが定義した B-TREE インデックスがない
場合です。
新しい制約を追加することにより、変更されるテーブルの行が参照整合性に違反する
か、参照整合性がループする場合も、ALTER TABLE ADD CONSTRAINT 文は失敗し
ます。新しい制約を設定する列の既存の行の値は、参照先テーブルのプライマリ キーに
ある必要があります。
すでに制約のあるテーブルから、それ自身に対する制約を追加することはできません。
たとえば、table2 から table1 に対する制約がすでに存在する場合、table1 から table2
に対する制約を追加することはできません。このようなテーブル設定を行うと、参照整
合性がループします。
フォーリン キー列のシリアル (SERIAL) 型列を、シリアル (SERIAL) 型値として参照
することはできません。シリアル (SERIAL) 型列をフォーリン キーとして参照する場
合は、フォーリン キー列を整数 (INTEGER) 型列として指定する必要があります。シリ
アル (SERIAL) 型の詳細については、27 ページを参照してください。
例:
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 文を実行します。
alter table sales
add constraint product_fkc
foreign key(classkey, prodkey) references product(classkey,
prodkey)
300
IBM Red Brick Warehouse: SQL リファレンス ガイド
DROP CONSTRAINT 指定
DROP CONSTRAINT 指定
drop_constraint は、フォーリン キー制約の削除に使用します。
構文: 次に drop_constraint 指定の構文ダイアグラムを示します。
DROP CONSTRAINT 指定:
DROP CONSTRAINT
constraint_name
constraint_name
削除するフォーリン キー制約の名前を指定します。制約名の詳細につ
いては、358 ページの『プライマリ キーとフォーリン キーの制約
名』を参照してください。
使用上の注意: 指定したフォーリン キーに STAR インデックス キーが設定されて
いると、ALTER TABLE DROP CONSTRAINT 文が失敗します。インデックスは、あら
かじめ削除しておく必要があります。変更するテーブルに STAR インデックスが設定さ
れていても、削除するフォーリン キー以外のフォーリン キーで構成されている場合は
正常に実行されます。
プライマリ キー制約は削除できません。
例: 次の例は、Sales テーブルから product_fkc 制約を削除します。
alter table sales drop constraint product_fkc
第 8 章 SQL 文と RISQL 拡張機能
301
ALTER CONSTRAINT 指定
ALTER CONSTRAINT 指定
alter_constraint は、基本テーブルのフォーリン キー参照をシノニムのフォーリン キー
参照に変更します。同様に、シノニムのフォーリン キー参照を基本テーブルのフォーリ
ン キー参照または基本テーブルの他のシノニムのフォーリン キー参照に変更します。
構文: 次に alter_constraint 指定の構文ダイアグラムを示します。
ALTER CONSTRAINT 指定:
ALTER CONSTRAINT
constraint_name
REFERENCES
ON DELETE
constraint_name
referenced_table_name
creator.
CASCADE
NO ACTION
参照元テーブルの CREATE TABLE 文に指定した、変更するフォー
リン キー制約名を指定します。 1 つの列から成るフォーリン キー参
照の場合は、列名も制約名の指定に使用できます。
フォーリン キー参照の制約名の詳細については、356 ページの『フォ
ーリン キー参照』を参照してください。
referenced_table_name
CREATE TABLE 文で初期参照した基本テーブルから作成されたシノ
ニム、または基本テーブル名自体を指定します。シノニムを初期参照
した場合は、基本テーブルまたは基本テーブルから作成された他のシ
ノニムを referenced_table_name に指定できます。テーブルまたはシノ
ニムを指定する場合には、そのテーブルまたはシノニムを作成したユ
ーザのユーザ名を creator に指定してください。
ON DELETE
制約の参照整合性チェックのモード、つまりフォーリン キーが参照し
ているテーブルから行が削除されたときの動作を指定します。
NO ACTION キーワードは、参照先テーブルの行を削除すると参照元
テーブルの参照整合性が維持できなくなる場合は、行を削除しないこ
とを指定します。
CASCADE キーワードは、参照先テーブルの行を削除すると参照元テ
ーブルの参照整合性が維持できなくなる場合には、その行を参照して
いる参照元テーブルの行も削除することを指定します。この動作は、
アウトボード テーブルとその参照元テーブルにも適用されます。
使用上の注意: ALTER TABLE ALTER CONSTRAINT 文は、共通の参照先テーブル
を持つ複数の参照元テーブルをジョインするクエリのパフォーマンスをチューニングで
きます。参照元テーブルが基本テーブルの代わりにシノニムを参照する場合は、標準の
STARjoin アルゴリズムではなく、ハッシュ ジョイン アルゴリズムまたは B-TREE 1-1
マッチ アルゴリズムを使用できます。
302
IBM Red Brick Warehouse: SQL リファレンス ガイド
ALTER CONSTRAINT 指定
例: 次の 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
次の文は、参照先テーブルを Period テーブルの他のシノニムに変更します。
alter table sales
alter constraint sales_date_fkc references period_syn2
第 8 章 SQL 文と RISQL 拡張機能
303
ALTER USER
ALTER USER 文は、ユーザの優先順位を変更したり、ユーザにコメントを割り当てし
ます。
許可
ALTER USER 文を実行するユーザは、次の中で少なくとも 1 つの条件を満たしている
必要があります。
v DBA システム ロールのメンバーであること
v USER_MANAGEMENT タスク権限を持っていること
構文
次に ALTER USER 文の構文ダイアグラムを示します。
ALTER USER
db_username
db_username
SET PRIORITY integer
COMMENT
’ character_string ’
NULL
有効なデータベース ユーザ名を指定します。
SET PRIORITY integer
そのユーザが起動したすべてのセッションについて、優先順位を指定
します。 0 から 100 の整数で指定してください。最優先の順位は 0
です。
COMMENT
ユーザ名を説明するコメントを割り当てます。コメントは、
RBW_USERAUTH システム テーブルに格納されます。 256 バイト
まで入力できます。データベース サーバはこのコメント テキストを
無視します。
NULL を指定すると、コメント文字列が NULL に置き換えられます。
使用上の注意
ユーザの優先順位は、0 から 100 (0 が最優先) の整数で指定します。優先順位の値
は、異なるユーザが起動したセッションの相対的な重要度を示すものです。優先順位の
高いユーザの実行したクエリは、優先順位の低いユーザのクエリより優先的に CPU を
使用できます。ユーザの優先順位は、CPU 以外のシステム リソースの使用や、テーブ
ル ロックには影響しません。
データベース管理者は、GRANT CONNECT 文によってユーザをデータベースに追加す
るときに、ユーザ優先順位を設定できます。ユーザの優先順位を指定していない場合、
デフォルトの優先順位は 50 になります。
UNIX
304
ユーザ優先順位をサポートするには、UNIX の renice コマンドを実
行できるプラットフォームを使用してください。ADMIN
RENICE_COMMAND 構成パラメータに renice スクリプトのフルパ
IBM Red Brick Warehouse: SQL リファレンス ガイド
ALTER USER
ス名を指定してください。フル パス名にはディレクリ名が含まれてい
ますが、実行可能ファイル名は含まれていません。
Windows
ユーザ優先順位を指定する整数は、対応する優先レベル (1 から 36)
にマッピングされます。
第 8 章 SQL 文と RISQL 拡張機能
305
ALTER VIEW
ALTER VIEW 文は、ビューまたはビューの列にコメントを付けます。ビューのコメン
トは、RBW_VIEWS および RBW_TABLES システム テーブルに格納されます。ビュー
の列のコメントは、RBW_COLUMNS システム テーブルに格納されます。 ALTER
VIEW 文を使用して、事前計算ビューの保守タイプと有効性を変更することもできま
す。
許可
ビューを変更するユーザは、次の中で少なくとも 1 つの条件を満たしている必要があり
ます。
v DBA システム ロールのメンバーであること
v 明示的に付与されるかユーザが作成したロールのメンバーであることにより、
ALTER_ANY 権限を持っていること
v RESOURCE システム ロールのメンバーで、かつビューの作成者であること
v ビューの作成者であり、ユーザが作成したロールのメンバーであることにより
ALTER_OWN 権限を持っているか、またはこの権限が明示的に付与されていること
構文
次に ALTER VIEW 文の構文ダイアグラムを示します。
ALTER VIEW
view_name
creator.
COMMENT
ALTER COLUMN col_name
SET
VALID
INVALID
SET MAINTENANCE
ON
REBUILD
OFF
view_name
’ character_string ’
NULL
変更するビューの名前を指定します。ビュー名を指定する場合には、
そのビューを作成したユーザのユーザ名を creator に指定してくださ
い。
ALTER COLUMN col_name
ビューの変更する列の名前を指定します。
SET VALID/INVALID
事前計算ビューを有効または無効とマークし、RBW_VIEWS テーブル
を更新します。この文にはデフォルトはありません。
SET MAINTENANCE
各事前計算ビューについて集約処理を ON、OFF または REBUILD に設
306
IBM Red Brick Warehouse: SQL リファレンス ガイド
ALTER VIEW
定します。 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 に置き換えられま
す。
第 8 章 SQL 文と RISQL 拡張機能
307
CHECK INDEX
CHECK INDEX 文は、インデックスの破損を調べ、インデックスの構成情報およびサイ
ズ情報を表示します。 CHECK INDEX 文は、どの種類のインデックスにも使用できま
す。
構成情報には次の内容が含まれます。
v インデックス キーのサイズと種類
v インデックス ブロックごとのエントリの最大数
v インデックスの格納先セグメントの数
v インデックス (STAR インデックスのみ) 内で参照されている各テーブルの
MAXROWS PER SEGMENT 値
サイズ情報には次の内容が含まれます。
v インデックス エントリの数
v インデックスの各セグメントで、リーフ ノードおよびインナー ノードとして使用さ
れているインデックス ブロックの数
許可
CHECK INDEX 文を実行するユーザは、DBA システム ロールのメンバーである必要
があります。
構文
次に CHECK INDEX 文の構文ダイアグラムを示します。
CHECK INDEX
index_name
DIRECTORY
SEGMENT
‘directory_name’
segment_name
VERBOSE
VALIDATE
NORMAL
FULL
DESCRIBE
index_name
チェックするインデックスの名前を指定します。
SEGMENT segment_name
CHECK INDEX を実行する名前付きセグメントを指定します。指定で
きるセグメントは 1 つのみです。 segment_name を指定した場合、
CHECK INDEX は指定したセグメントのみをチェックし、そのセグメ
ントに関する結果のみを表示します。
DIRECTORY directory_name
CHECK INDEX 操作からの詳細情報ファイルの書込み先ディレクトリ
308
IBM Red Brick Warehouse: SQL リファレンス ガイド
CHECK INDEX
を指定します。セグメントごとに個別のファイルが作成されます。フ
ァイル名にはセグメント ID、プロセス ID、タイムスタンプが含まれ
ます。
rbw.config ファイル内で CHECK_REPORT_FILE_PERMISSIONS オ
プションを使用して別のファイル アクセス権を設定しない限り、これ
らのファイルの読込み/書込みを実行できるのは redbrick ユーザのみ
です。オプションの値は次のとおりです。
SERVER_OWNER
redbrick ユーザに読込み/書込み許可を与えます。
これはデフォルト オプションです。
SERVER_GROUP
グループに読取り専用権を与えます。
この値は UNIX システムでしか使用できません。
ALL
すべてのユーザに読取り専用許可を与えます。
指定したディレクトリのあるディスクが書込み禁止に設定されている
場合、または存在しない場合は、エラーが戻されます。
CHECK INDEX 出力ファイルの解釈については、「管理者ガイド」を
参照してください。
VERBOSE
出力情報を verbose フォーマットに指定します。このフォーマットで
は、CHECK INDEX が実行する各関数の簡単な説明が含まれます。
VALIDATE
FULL を選択すると、CHECK INDEX はインデックスをトラバース
し、各インデックス キーに対して、インデックスが参照するテーブル
の行を取り出します。行を取り出した後、CHECK INDEX は行内のキ
ーとインデックス内のキーを比較し、合致していることを確認しま
す。また、各インデックス エントリが一意の行を指し、参照先テーブ
ルの各行がそれぞれ 1 つのインデックス エントリによって指し示さ
れていることを確認します。参照先テーブルの行が取り出され、イン
デックス全体がトラバースされるため、この操作には非常に時間がか
かることがあります。
セグメント名を指定した場合は、参照先テーブルの各行がそれぞれ 1
つのインデックス エントリによってポイントされていることは確認さ
れませんが、上記のその他の検証はすべて行われます。
デフォルトの NORMAL は、行ごとの検証以外の検証を行います。
DESCRIBE
構成情報をすばやく表示して、インデックスの検証やサイズ情報の計
算を行わずに終了します。 CHECK INDEX で大きいインデックスを
検証すると非常に時間がかかるため、構成情報のみを知りたい場合は
DESCRIBE を指定してください。
第 8 章 SQL 文と RISQL 拡張機能
309
CHECK INDEX
例
次の文は、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 ディレクトリに格納されます。
310
IBM Red Brick Warehouse: SQL リファレンス ガイド
CHECK TABLE
CHECK TABLE 文は、テーブル格納データ構造およびテーブルの行カウントの破損を
調べ、オプションで修復も行います。 CHECK TABLE は参照整合性をチェックしませ
ん。また、列が NOT NULL 句で定義されている場合は NULL 値をチェックしませ
ん。
CHECK TABLE 文は、出力結果を複数の行で戻します。分析対象テーブルのスキーマ
に関係なく、行は単一 CHAR(1024) 型列として定義されます。 CHECK TABLE を実行
すると、CHECK TABLE 操作から出力された詳細情報を含む一連のテキスト ファイル
も生成されます。これらのテキスト ファイルは、ユーザが指定したディレクトリ内に作
成されます。
許可
CHECK TABLE 文を実行するユーザは、DBA システム ロールのメンバーである必要
があります。
構文
次に CHECK TABLE 文の構文ダイアグラムを示します。
CHECK TABLE
table_name
DIRECTORY
segment_name
‘directory_name’
VERBOSE
table_name
SEGMENT
creator.
FIX
チェックするテーブルの名前を指定します。基本テーブルを指定して
ください。シノニム、ビュー、テンポラリ テーブル、システム テー
ブルはチェックできません。テーブル名を指定する場合には、そのテ
ーブルを作成したユーザのユーザ名を creator に指定してください。
SEGMENT segment_name
CHECK TABLE を実行する名前付きセグメントを指定します。指定
できるセグメントは 1 つのみです。 segment_name を指定した場合、
テーブル内の指定されたセグメントでの検証のみが報告されます。大
きいテーブル内の特定のセグメントのみを検証する必要がある場合に
このオプションを使用すると、非常に時間が節約できます。
DIRECTORY directory_name
CHECK TABLE 操作から出力される詳細情報ファイルを書き込むデ
ィレクトリを指定します。セグメントごとに個別のファイルが作成さ
れます。ファイル名には、テーブル ID、セグメント ID、プロセス
ID、タイムスタンプが含まれます。
rbw.config ファイル内で CHECK_REPORT_FILE_PERMISSIONS オ
プションを使用して別のファイル アクセス権を設定しない限り、これ
第 8 章 SQL 文と RISQL 拡張機能
311
CHECK TABLE
らのファイルの読込み/書込みを実行できるのは redbrick ユーザのみ
です。オプションの値は次のとおりです。
SERVER_OWNER
redbrick ユーザに読み書き権を与えます。
これはデフォルト オプションです。
SERVER_GROUP
グループに読取り専用権を与えます。
この値は UNIX システムでしか使用できません。
ALL
すべてのユーザに読取り専用許可を与えます。
指定したディレクトリのあるディスクが書込み禁止に設定されている
場合、または存在しない場合は、エラーが戻されます。
VERBOSE
出力情報を、ユーザが指定したディレクトリ内に作成されるテキスト
ファイルに verbose フォーマットでレポートするよう指定します。
VERBOSE オプションは、CHECK TABLE が実行する各関数の簡単
な説明とセグメント統計を出力します。
これらのテキスト ファイルは、VARCHAR FILLFACTOR 値の効力の
判断や、チェック操作中のエラーのトラブルシューティングに利用で
きます。これらのテキスト ファイルの解釈については、「管理者ガイ
ド」を参照してください。
FIX
CHECK TABLE で見つかった問題を修復することを指定します。修
復が行われた場合、VERIFY オプションを指定した ALTER
SEGMENT 文を実行し、セグメントが修復されていることを確認して
から次の 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 ディレクトリに格納されます。
312
IBM Red Brick Warehouse: SQL リファレンス ガイド
CREATE HIERARCHY
CREATE HIERARCHY 文は、1 つのテーブルまたは複数のテーブルにある列の間に、1
つまたは複数の関数従属性を指定します。関数従属性は、2 つの列間に存在する多対 1
の関係です。階層構造指定は、Vista クエリ リライト システムが集約クエリをリライ
トするために利用する事前計算ビューの判定に使用されます。
階層構造は注意して指定してください。多対 1 の関係を満たさない値を持つ列に階層構
造を指定すると、リライト済みクエリが警告メッセージなしに不正な結果を戻すことが
あります。 Administrator ツールを使用して階層構造を作成する場合を除き、階層構造
を指定するときに、ウェアハウス サーバによる階層構造の検証は行われません。また、
データベースが変更されたために有効な階層構造が無効になったときでもユーザに通知
されません。したがって、管理者が階層構造を指定する前に階層構造の妥当性を検証
し、無効になった階層構造を削除する必要があります。
階層構造の使用の詳細については、「IBM Red Brick Vista ユーザーズ ガイド」を参照
してください。
許可
階層構造を作成するユーザは、次の中で少なくとも 1 つの条件を満たしている必要があ
ります。
v DBA システム ロールか、RESOURCE システム ロールのメンバーであること
v 明示的に付与されるかユーザが作成したロールのメンバーであることにより、
CREATE_ANY 権限を持っていること
構文
次に CREATE HIERARCHY 文の構文ダイアグラムを示します。
CREATE HIERARCHY
hierarchy_name
,
( from_to_definition
)
ON
hierarchy_name
constraint_name
1 つまたは複数の関数従属性を参照することができる階層構造の名称
を指定します。どの階層構造名も、一意の名前である必要がありま
す。
from_to_definition
関数従属性が設定されているテーブルまたは列を指定します。この関
係は、1 つの同じテーブルの列間でも 2 つのテーブルの列間でも構い
第 8 章 SQL 文と RISQL 拡張機能
313
CREATE HIERARCHY
ません。最初の列 (from 列) はテーブルの作成時に NOT NULL と指
定されている必要があります。そうしないと、エラー メッセージが表
示されます。
次に from_to_definition 句の構文ダイアグラムを示します。
FROM
table_name (column_name)
creator.
TO
table_name (column_name)
creator.
creator
テーブル名を指定する場合には、そのテーブルを作成したユーザのユ
ーザ名を creator に指定してください。
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)
314
IBM Red Brick Warehouse: SQL リファレンス ガイド
CREATE HIERARCHY
次の例は、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))
次のテーブルの対の値を比較してください。 Period テーブルに 2 番目の値集合が含ま
れる場合は、各年に対して第 1 四半期の値、第 2 四半期の値などが一意であるため、
Qtr 列から Year 列までの階層構造は有効です。 Period テーブルに最初の値集合が使用
される場合は、Qtr 列が 1998、1999 年に対して同じ第 1 四半期の値 (Q1) を使用して
いるため、階層構造は無効です。
無効な関係
有効な関係
Qtr 列
Year 列
Qtr 列
Year 列
Q1
Q2
Q3
Q4
Q1
...
1998
1998
1998
1998
1999
...
Q1_98
Q2_98
Q3_98
Q4_98
Q1_99
...
1998
1998
1998
1998
1999
...
第 8 章 SQL 文と RISQL 拡張機能
315
CREATE INDEX
各テーブルに自動的に作成されるプライマリ キー インデックス以外に、CREATE
INDEX 文で任意の数のインデックスを作成できます。
インデックスの作成には次の制限が適用されます。
v 同じテーブルのインデックスであれば 1 つの CREATE INDEX 文で複数のインデッ
クスが作成できます。
v STAR、B-TREE、TARGET の各インデックスは、テーブルが空であっても、データ
が格納されていても作成できます。実行中のクエリが使用していないインデックス
は、削除できます。
v テンポラリ テーブルには、STAR インデックスを作成できません。
v SERIAL 列にインデックスを作成することをお勧めします。これはシリアル番号が位
置の番号でもテーブルの行の位置を示すものでもないためです。シリアル番号による
行へのアクセスには、インデックス、またはテーブルのスキャンが必要です。
許可
テーブルのインデックスを作成するユーザは、次の中で少なくとも 1 つの条件を満たし
ている必要があります。
v DBA システム ロールのメンバーであること
v 明示的に付与されるかユーザが作成したロールのメンバーであることにより、
CREATE_ANY 権限を持っていること
v RESOURCE システム ロールのメンバーで、かつテーブルの作成者であるか、そのテ
ーブルに対する SELECT 特権を持っていること
v CREATE_OWN 特権を持っていて、テーブルの作成者であるか、そのテーブルに対す
る SELECT 特権を持っていること
構文
次に CREATE INDEX 文の構文ダイアグラムを示します。
,
CREATE INDEX
index_specifier
STAR
TARGET
ON ERROR
CONTINUE
ABORT
IMMEDIATE
DEFERRED
STAR
316
指定したフォーリン キーの STAR インデックスを作成します。 1 つ
IBM Red Brick Warehouse: SQL リファレンス ガイド
CREATE INDEX
のテーブルに複数の STAR インデックスがある場合は、フォーリン
キーのサブセット、順序またはその両方がインデックスごとに異なっ
ている必要があります。
MAXROWS PER SEGMENT の値が指定されていない他のテーブルの
プライマリ キーをフォーリン キーが参照している場合、CREATE
STAR INDEX 文の実行は失敗します。詳細については、347 ページ
の『CREATE TABLE』を参照してください。
テンポラリ テーブルには、STAR インデックスを作成できません。
B-TREE
インデックスとして STAR、TARGET のどちらも指定されていない場
合は、B-TREE がデフォルトです。
INDEX キーワードの前にインデックスのタイプを指定しないと、
B-TREE インデックスがテーブルに作成されます。このインデックス
を使用すると、比較述部で指定された条件内の固定または特定値の検
索処理時間が短縮されます。 B-TREE インデックスは、すべてのデー
タ型の列で作成できます。
テーブルの作成時には、そのテーブルのプライマリ キーについて、デ
フォルトの B-TREE インデックスが自動的に作成されます。
CREATE TABLE 文のセグメント指定構文では、デフォルト B-TREE
インデックスをプライマリ キー インデックス と呼んでいます。
テーブルのインデックスの選択の詳細については、「管理者ガイド」
を参照してください。
TARGET
テーブルの指定した列について、TARGET インデックスを作成しま
す。
1 つのテーブルに複数の TARGET インデックスを作成することはで
きますが、単一の非固有列に 1 つずつ作成してください。複数の列か
ら構成される TARGET インデックスは作成できません。
TARGET インデックスの順序で、テーブルをアンロードすることはで
きません。UNLOAD 操作には、B-TREE インデックスか STAR イン
デックスを使用してください。 B-TREE インデックスについては、
316 ページを参照してください。
選択性の低い複数の列を制約する検索は、TARGET インデックスを使
用するとパフォーマンスが向上します。一般に、非常に大きいテーブ
ルで列のドメイン (可能値の集合) が小さければ、選択性が低くなり
ます。たとえば、Employees テーブルの Gender 列のドメインには、
Male と Female の 2 つの値しかありません。この列の制約は選択性
が低くなり、非常に多くの行が抽出されます。
ドメインが大きくても、選択性が低くなる場合があります。たとえ
ば、同じ Employees テーブルの Age 列は、Gender 列より大きいドメ
第 8 章 SQL 文と RISQL 拡張機能
317
CREATE INDEX
インですが、年齢を制約した検索も選択性が低い場合があります。特
に、ドメイン内のデータの分布に偏りがある場合や、データの多くが
含まれる値に制約して検索する場合にこのことがいえます。
TARGET インデックスは、TARGETjoin 処理を有効にすることもでき
ます。 TARGETjoin 処理の詳細については、「管理者ガイド」と「ク
エリ パフォーマンス ガイド」を参照してください。
index_specifier
インデックス名、作成するインデックスの対象となるテーブル、イン
デックス キーの列名、セグメントを指定します。テンポラリ テーブ
ルには、フォーリン キー制約とセグメント定義はできません。
index_specifier の構文については、320 ページの『インデックス指
定』を参照してください。
ERROR
ON ERROR ABORT を指定した場合は、作成できないインデックス
が 1 つでもあると、すべてのインデックス作成が中止されます。
ON ERROR CONTINUE を指定するか ERROR 句を省略すると、作
成できないインデックスがあっても、他のインデックス作成は続行さ
れます。
この句は、1 つの文で複数のインデックスを作成する場合に意味があ
ります。省略した場合のデフォルト動作は CONTINUE です。
IMMEDIATE
文実行時にインデックスを作成および構成します。
DEFERRED
インデックス構造を作成し、RBW_INDEXES システム テーブルの
STATE 列に DEFERRED というエントリを作成します。この時点で
は、インデックスにデータは登録されません。 TMU の REORG 操
作を使用してデータを登録しない限り、このインデックスは使用でき
ません。
CREATE INDEX...DEFERRED 操作は、データからインデックスを作
成したり、他のインデックスからデータを派生させるという時間のか
かるフェーズをスキップします。インデックスの作成を必要としない
すべての処理が実行されます。これには、特定のセグメントのテーブ
ルへの関連付けや各種の意味妥当性検査が含まれます。通常、
CREATE INDEX...DEFERRED 操作の後で、データベース サーバより
効率的にインデックスを作成できる TMU の並列再編成操作が実行さ
れます。
DEFERRED 状態のインデックスは空であるため、インデックスの内容を読み取ったり
書き込んだりするどの機能からもインデックスを検索できません。次の機能がこれに該
当します。
v クエリ
v 挿入、更新、削除
v ロード、アンロード
318
IBM Red Brick Warehouse: SQL リファレンス ガイド
CREATE INDEX
遅延作成されたインデックスは、コンパイラからも見ることはできません。そのため、
遅延作成されたインデックスに対するクエリの実行プランは生成されません。
インデックス構造に対してのみ操作を加える関数からは、遅延作成された状態にあるイ
ンデックスを見ることができます。通常は、これらの関数は遅延作成されたインデック
スと完全に作成されたインデックスとを区別することはできません。次の関数は遅延作
成されたインデックスを見ることができます。
v DROP INDEX: インデックスを削除できます。
v ALTER INDEX: すべての操作が可能です。
v DROP TABLE: DEFERRED インデックスを含め、テーブル内のすべてのインデック
スを削除します。
v ALTER TABLE DROP COLUMN: 指定された列が遅延作成されたインデックスの構
成要素である場合、この操作を実行することはできません。
v CREATE INDEX: 同じ名前のインデックスや同じ種類のインデックスは、同じ列に作
成することができません。
v 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
第 8 章 SQL 文と RISQL 拡張機能
319
インデックス指定
インデックス指定
index_specifier は、インデックス名、作成するインデックスの対象となるテーブル、イ
ンデックス キーの列名、セグメント情報を指定します。
構文: 次に CREATE INDEX 文の構文ダイアグラムと、index_specifier の構文の参照
ポイントを示します。
,
CREATE INDEX
index_specifier
ON ERROR
STAR
TARGET
CONTINUE
ABORT
IMMEDIATE
DEFERRED
次に index_specifier の構文ダイアグラムを示します。
Index Specifier:
,
index_name
ON
table_name (
creator.
column_name
fkey_constraint_name
)
IN
segment_specification
WITH FILLFACTOR
n
DOMAIN
SIZE
SMALL
MEDIUM
LARGE
index_name
インデックス名を指定します。インデックス名はデータベース内で一
意である必要があります。
table_name
作成するインデックスの対象となるテーブルの名前を指定します。テ
ンポラリ テーブル名は、TARGET インデックスまたは B-TREE イン
デックスを作成するときには指定できますが、STAR インデックスを
作成するときには指定できません。
STAR インデックスのフォーリン キーの参照先テーブルには、
CREATE TABLE 文で MAXROWS PER SEGMENT の値を指定する
必要があります。
320
IBM Red Brick Warehouse: SQL リファレンス ガイド
インデックス指定
テーブル名を指定する場合には、そのテーブルを作成したユーザのユ
ーザ名を creator に指定してください。
column_name
TARGET インデックスと B-TREE インデックスにインデックス キー
を指定します。
v B-TREE インデックスに複数の列を指定する場合は、すべての列を
CREATE TABLE 文で NOT NULL と指定する必要があります。
v TARGET インデックスでは、非一意列を 1 つのみ指定できます。
column_name、fkey_constraint_name
STAR インデックスのインデックス キーを指定します。 STAR イン
デックス キーは複数のフォーリン キーで構成され、その指定方法は
2 種類あります。
v 列名による指定。各列名は CREATE TABLE 文で指定した特定の
単一列 フォーリン キー参照を識別する必要があります。
v フォーリン キー制約名による指定。フォーリン キー制約名は、1
つ以上の列から成るフォーリン キーを識別できます。制約名は
CREATE TABLE 文で指定します。詳細については、358 ページの
『プライマリ キーとフォーリン キーの制約名』を参照してくださ
い。
segment_specification
インデックス セグメント名と、各インデックス セグメントに対する
値の範囲を指定します。 segment_specification の構文については、327
ページを参照してください。
WITH FILLFACTOR
詳細については、332 ページを参照してください。
DOMAIN
詳細については、333 ページを参照してください。
インデックス キーは、列名と制約名を組み合わせて指定できますが、次の規則に従って
フォーマットを統一することをお勧めします。
v フォーリン キーが単一列プライマリ キーを持つテーブルを参照している場合は、フ
ォーリン キー列の名前のみでインデックス キー内の列を定義できます。ただし、フ
ォーリン キーが複数列プライマリ キーを持つテーブルを参照している場合は、一連
の個別列名ではなく、列集合のフォーリン キー制約名を指定する必要があります。
v CREATE STAR INDEX 文では、ユーザ定義 のフォーリン キー制約名のみを使用で
きます。
v CREATE STAR INDEX 文に指定した名前は、まず制約名とみなされます。これと一
致する制約名が存在する場合は、その制約名が示すフォーリン キーがインデックス
キーになります。存在しなければ、最初に指定した名前が列名とみなされます。一致
する名前がない場合は CREATE STAR INDEX 文の実行が失敗します。
第 8 章 SQL 文と RISQL 拡張機能
321
インデックス指定
フォーリン キーとは、NOT NULL と定義された列で、CREATE TABLE 文の
FOREIGN KEY REFERENCES 句で指定された列のことです。シンプル スター スキー
マを形成するのでなければ、フォーリン キーの任意の部分を任意の順序で STAR イン
デックス キーに使用できます。詳細は、385 ページを参照してください。インデックス
キーの順序は、フォーリン キーを指定した順番になります。最初の名前が先頭のキー
列、2 番目が次のキー列というようになります。
例: 次のような 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)
...
322
IBM Red Brick Warehouse: SQL リファレンス ガイド
インデックス指定
この場合は、フォーリン キーが制約名 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 でインデックス キーを指
定する必要があります。この場合は、インデックス セグメントも制約名で特定されま
す。制約名の詳細については、358 ページの『プライマリ キーとフォーリン キーの制
約名』を参照してください。
第 8 章 SQL 文と RISQL 拡張機能
323
セグメント定義
セグメント定義
次にセグメント指定の構文ダイアグラムを示します。
セグメント定義:
IN
segment_name
,
( segment_name
segment_name
)
SEGMENT LIKE DATA
SEGMENT LOCAL
SEGMENT LIKE REFERENCED TABLE
segment_range_spec
インデックスを格納するセグメントの名前を指定します。セグメント
名を指定しないと、インデックスはデフォルト セグメントに格納され
ます。指定したセグメントを、他のインデックスやテーブルで使用す
ることはできません。
1 つのユーザ定義セグメントまたはデフォルト セグメントを指定した
後に、ALTER SEGMENT 文を使用してインデックスにセグメントを
追加できます。
テンポラリ テーブルには、セグメント名を 1 つしか指定できないた
め、セグメントの範囲指定は適用されません。
SEGMENT LIKE DATA
B-TREE インデックス、STAR インデックス、または TARGET イン
デックスのセグメント範囲が、テーブル データのセグメント範囲と同
じであることを指定します。このオプションが有効なのは、次の場合
のみです。
v ハッシュではなく、値によってデータがセグメント化されている。
v インデックスの先頭列が、データのセグメント化の基準となる列と
同じである。
v インデックスとデータについて、同数のセグメントが指定されてい
る。
v STAR インデックスでは、テーブルのセグメント範囲のすべてにつ
いて、先頭の参照先テーブルに少なくとも 1 つの列が存在する必
要があります。
このオプションは、インデックスの作成時に参照先テーブルのセグメ
ント区分を静的 に反映します。セグメントの切離しや割当てによって
テーブルのセグメント区分が変更された場合、その変更はインデック
スのセグメント区分に自動的には反映されません。参照先テーブルを
変更する場合は、インデックスも明示的に変更してください。
STAR インデックスの値は列の値ではなく、参照先テーブルの行デー
タ ID です。行を削除および挿入するとき、行データ ID は再使用さ
324
IBM Red Brick Warehouse: SQL リファレンス ガイド
セグメント定義
れます。このため、インデックスのセグメント区分はテーブルと異な
るものになる場合があります。 STAR インデックスのセグメント化の
詳細については、「管理者ガイド」を参照してください。
SEGMENT LOCAL
テーブルのセグメント化基準列がインデックスの先頭列ではなく、ま
たはインデックス内にない場合でも、B-TREE または TARGET イン
デックスのセグメント範囲がテーブル データのセグメント範囲と同じ
であることを指定します。テーブル セグメントをクリアまたは削除す
ると、ローカル インデックス セグメントは自動的にクリアされま
す。
このオプションは、次の条件が満たされた場合のみ有効です。
v ハッシュではなく、値によってデータがセグメント化されている。
v インデックスとデータについて、同数のセグメントが指定されてい
る。
v ローカル インデックスが定義されている列が一意ではない。
このオプションは、STAR インデックスには使用できません。
ローカル インデックスは時間ごとに変化するデータの TARGETjoin
処理を行う場合に最もよく使用されます。ローカル インデックスを使
用すると、TARGETjoin の処理パフォーマンスは向上しますが、パラ
メータをチューニングしないと、他のクエリ処理のパフォーマンスが
低下することがあります。詳細については、「クエリ パフォーマンス
ガイド」を参照してください。
SEGMENT LIKE REFERENCED TABLE
STAR インデックスのセグメント範囲指定が、参照先テーブルのセグ
メント範囲指定と同じであることを指定します。このインデックス セ
グメントと参照先テーブルのインデックス セグメントが 1 対 1 で対
応することを定義するものです。このため、参照先テーブルのセグメ
ント化に使用する範囲の値は、STAR インデックスのセグメント区分
も示すことになります。
SEGMENT LIKE REFERENCED TABLE オプションを使用する場合
は、次の条件に注意してください。
v このオプションが有効なのは、index_specifier に指定した最初のフ
ォーリン キーが参照しているテーブルのすべてのセグメントを、
segment_name に指定した場合のみです。
v このオプションは、参照先テーブルのセグメント区分を静的 に反
映するものです。その範囲が変更されても、STAR インデックスの
設定には自動的に反映されません。参照先テーブルを変更する場合
は、STAR インデックスも明示的に変更してください。
第 8 章 SQL 文と RISQL 拡張機能
325
セグメント定義
v このオプションは、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 テーブル) をロードする必要があります。
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;
326
IBM Red Brick Warehouse: SQL リファレンス ガイド
セグメント範囲の指定
セグメント範囲はセグメント化の基準となる列を指定し、各セグメントに分散して格納
する値の範囲を指定します。
TARGET インデックスと B-TREE インデックスは、インデックス キーの値に応じてセ
グメント化されます。 STAR インデックスは、参照先テーブルの行データ ID に基づ
いてセグメント化されます。参照先テーブルのセグメント範囲を指定することにより、
参照元テーブルのセグメント化の基準列と、各セグメントに分散して格納する行の範囲
が割り当てられます。
セグメント範囲の指定と index_specifier との関係については、320 ページを参照してく
ださい。
構文:
B-TREE インデックスと TARGET インデックス: 次に、B-TREE インデックス
または TARGET インデックスの segment_range_spec の構文ダイアグラムを示します。
セグメント範囲の指定が必要なのは、インデックスが複数のセグメントを使用する場合
のみです。
SEGMENT BY VALUES OF (
RANGES
(
MIN:literal
segmenting_column
)
, literal:MAX
literal:literal
)
,
MIN:MAX
SEGMENT BY VALUES OF segmenting_column
B-TREE インデックスおよび TARGET インデックスの
segment_range_spec を指定するときは、次の規則に従ってください。
v segmenting_column は、index_specifier の最初の列である必要があり
ます。
v 範囲の指定は、各セグメントに対して行ってください。
v literal の値は segmenting_column の値を識別する必要があります。
literal の値と segmenting_column の値は同じデータ型である必要が
あります。
RANGES (MIN:MAX)
指定したインデックス キーの値に基づいて、各セグメントにインデッ
クスを格納します。
範囲の指定では、次の規則に従ってください。
第 8 章 SQL 文と RISQL 拡張機能
327
セグメント範囲の指定
v 範囲の上限値と下限値を組にして指定し、上限と下限をコロン (:)
で区切ります。
v 次の組との間は、カンマ (,) で区切ります。
v キーの最小値を示す MIN キーワードで始め、最大値を示す MAX
キーワードで終わります。
v 昇順に指定し、値の重複やすき間がないようにします。各セグメン
トの上限は、次のセグメントの下限と一致する必要があります。各
セグメントには、下限の値以上で上限の値未満のデータが格納され
ます。
STAR インデックス: 次に、STAR インデックスの segment_range_spec の構文ダイ
アグラムを示します。この指定はオプションです。
範囲を指定しないと、STAR インデックスのセグメント数と、インデックス キーで参照
している最初のテーブルの MAXSEGMENTS の値および MAXROWS PER SEGMENT
の値に基づいて範囲が自動的に設定されます。この範囲は、各セグメントに均等分割さ
れます。
SEGMENT BY REFERENCES OF ( segmenting_column )
RANGES (
MIN:MAX
)
MIN: rangeval , rangeval:MAX
rangeval:rangeval ,
SEGMENT BY REFERENCES OF segmenting_column
セグメント化の基準となる列またはフォーリン キー制約名を指定しま
す。これにより、各セグメントにインデックスを分散させる方法が決
まります。 segmenting_column の指定では、次の規則に従ってくださ
い。
v セグメント化の基準列 (および範囲) の指定はオプションです。こ
の句を指定しないと、複数セグメントの範囲が自動的に設定されま
す。
v STAR インデックス キーの先頭フォーリン キーが 1 つの列で構
成されている場合は、その列をセグメント化の基準列に指定する必
要があります。このときは列名またはフォーリン キー制約名を使
用します。
v 先頭のフォーリン キーが複数の列で構成されている場合は、フォ
ーリン キー制約名 (CREATE TABLE 文の FOREIGN KEY
REFERENCES 句に指定したもの) を指定して各列を特定する必要
があります。
v セグメント化の基準列が参照しているテーブルには、MAXROWS
PER SEGMENT の値が割り当てられている必要があります。
328
IBM Red Brick Warehouse: SQL リファレンス ガイド
セグメント範囲の指定
RANGES (MIN:MAX)
インデックス キーで参照される最初のテーブルの行番号 (またはセグ
メント名と行データ番号の組み合わせ) に基づいて、各セグメントに
格納する STAR インデックスの範囲を指定します。先頭行の番号は
0、行データ ID の最大値は MAXROWS PER SEGMENT の値未満に
します。セグメント化の基準列を指定する場合は、STAR インデック
スのセグメントごとに範囲を指定してください。指定しなければ、範
囲が自動的に設定されるため範囲の指定はできません。
STAR インデックスの範囲を指定するために、参照先テーブルのセグ
メント名と行データ ID を確認するには、次のクエリを実行します。
select primary_key, rbw_segname, rbw_rownum
from table_name;
上記のクエリは、参照先テーブルの全行を戻します。テーブルの行デ
ータが多い場合は、リザルト セットが大きくなります。
範囲の指定では、次の規則に従ってください。
v 範囲の上限値と下限値を組にして指定し、上限と下限をコロン (:)
で区切ります。
v 次の組との間は、カンマ (,) で区切ります。
v 最初の参照先テーブルの先頭セグメントの先頭行を示す MIN キー
ワードで始め、最初の参照先テーブルの最終セグメントの最終行を
示す MAX キーワードで終わります。
v 昇順に指定し、値の重複やすき間がないようにします。各セグメン
トの上限は、次のセグメントの下限と一致する必要があります。各
セグメントには、下限の値以上で上限の値未満のデータが格納され
ます。
rangeval
STAR インデックスのセグメントでは、範囲の値を指定する方法が 2
種類あります。 rangeval (範囲値) 変数は、次のどちらかを使用して
表すことができます。
v rownum
これは、セグメント化の基準列が参照しているテーブルが、1 つの
セグメントのみを使用している場合の指定です。 rownum は、参照
先テーブルの行データの ID です。たとえば、上限と下限の組を、
次のように指定できます。
100:200
v segname rownum
これは、セグメント化の基準列が参照しているテーブルが、複数の
セグメントを使用している場合の指定です。 segname は、参照先
第 8 章 SQL 文と RISQL 拡張機能
329
セグメント範囲の指定
テーブルのセグメントを特定し、rownum は、そのセグメントに格
納されている参照先テーブルの行データの ID を特定します。たと
えば、上限と下限の組を、次のように指定できます。
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
次に、1 つのセグメントに格納された B-TREE インデックスを指定する例を示します。
範囲は、(min:max) のフォーマットで指定する必要があります。
segment by values of (perkey)
ranges (min:max)
複数のセグメントに格納された B-TREE インデックスを定義する場合は、次のようにな
ります。セグメント化の基準列 (Perkey) は日時 (DATETIME) 型であるため、範囲の値
が日付になっています。
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 年以降の行
が最終セグメントに挿入されます。
330
IBM Red Brick Warehouse: SQL リファレンス ガイド
セグメント範囲の指定
次に、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 つの例では、セグメント指定に列挙したセグメントごとに範囲を指定していま
す。
第 8 章 SQL 文と RISQL 拡張機能
331
WITH FILLFACTORn
WITH FILLFACTORn
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% より小さい値に変更してください。
フィル ファクタの詳細は、「クエリ パフォーマンス ガイド」を参照
してください。
例: この例ではフィル ファクタが 60 と設定されているため、インデックス ノード
を初めて作成するときは、容量の 60% しか充填されません。
create index promotion_idx
on promotion (promo_type)
with fillfactor 60
332
IBM Red Brick Warehouse: SQL リファレンス ガイド
DOMAIN SIZE
DOMAIN SIZE
DOMAIN SIZE
必要に応じて、TARGET インデックスのインデックス付き列のドメイ
ン サイズとして SMALL、MEDIUM、LARGE のうちから指定しま
す。ドメイン サイズとは、その列の一意値の数を示すものです。
DOMAIN SIZE 句は、TARGET インデックスにのみ適用します。
IBM Red Brick Warehouse は、指定されたドメイン サイズに基づい
て、インデックスの格納方法、つまり「表現形式」を選択します。ド
メイン サイズを指定しないと、列の値を表す適切な形式をデータベー
ス サーバが選択し、処理速度と格納効率が高いドメイン混在
TARGET インデックスを作成します。ドメイン内にデータが均等に分
布しているか、ドメインが非常に小さい場合は、列値のほとんどまた
はすべてに適合するサイズを指定します。通常、特に列値の分布に偏
りがある場合や分布が未知の場合などは、デフォルトのドメイン混在
方式が適しています。
図 6 は、実際のドメイン サイズの境界について、ドメイン混在の TARGET インデッ
クスと B-TREE インデックスとを比較したものです。 B-TREE インデックスは、取り
得る値の数が 10,000 を超えるドメインに適しています。実際のドメイン サイズに対す
る SMALL、MEDIUM、LARGE のドメイン指定の判断はより難しいものですが、図 6
に一般的なガイドラインを示します。ストレージについては、「管理者ガイド」を参照
してください。
図 6. ドメイン サイズの境界
ドメイン サイズ SMALL は一般に検索パフォーマンスが最も高くなりますが、インデ
ックスのストレージは最も大きく、取り得る値の数の増大と共に必要な容量が増加しま
す。
TARGET インデックスは、TARGETjoin 処理を有効にすることもできます。
TARGETjoin 処理については、「クエリ パフォーマンス ガイド」を参照してくださ
い。
例: 大量のデータ行がある Demographics テーブルの Occupation 列には約 5,000 通り
の値がありますが、少数の値がテーブルの全行の半数以上を占めるという分布の偏りが
あります。この場合は、ドメイン混在 TARGET インデックスを選択します。
第 8 章 SQL 文と RISQL 拡張機能
333
DOMAIN SIZE
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
334
IBM Red Brick Warehouse: SQL リファレンス ガイド
CREATE MACRO
CREATE MACRO 文は、SQL 文の一部または全体を略記するマクロを作成します。
CREATE MACRO 文には、SQL 文全体でのマクロの内容を分類するオプションのカテ
ゴリと、マクロを説明するコメントを指定できます。
許可
PUBLIC マクロを作成するユーザは、次の中で少なくとも 1 つの条件を満たしている必
要があります。
v DBA システム ロールのメンバーであること
v 明示的に付与されるかユーザが作成したロールのメンバーであることにより、
CREATE_ANY 権限か PUBLIC_MACROS 権限を持っていること
プライベート マクロを作成するユーザは、次の中で少なくとも 1 つの条件を満たして
いる必要があります。
v DBA システム ロールか、RESOURCE システム ロールのメンバーであること
v 明示的に付与されるかユーザが作成したロールのメンバーであることにより、
CREATE_ANY 権限か CREATE_OWN 権限を持っていること
TEMPORARY マクロは、Red Brick データベースに接続しているユーザであればどのユ
ーザでも作成できます。
構文
次に CREATE MACRO 文の構文ダイアグラムを示します。
CREATE
MACRO
TEMPORARY
PUBLIC
macro_name
,
( parameter
()
AS
CATEGORY
cat_val
COMMENT
)
definition
’ character_string ’
TEMPORARY、PUBLIC
マクロには、テンポラリ、パブリック、プライベートの 3 種類があり
ます。
v テンポラリ マクロ名は、ユーザ セッション中に作成され、そのセ
ッションの存続中にのみ存在し、作成者のみがアクセスできます。
クライアント ツールが対話中にデータベース サーバとの接続を解
除すると、テンポラリ マクロは削除されます。
第 8 章 SQL 文と RISQL 拡張機能
335
CREATE MACRO
v パブリック マクロは、ユーザ セッションとは独立して作成され、
RBW_MACROS システム テーブルに格納され、DROP PUBLIC
MACRO 文で削除されるまで存続します。このマクロには、すべて
のユーザがアクセスできます。
v テンポラリ マクロ、パブリック マクロのどちらも指定しないと、
ユーザ セッションとは無関係にプライベート マクロが作成されま
す。このマクロは、作成者が削除するまで RBW_MACROS システ
ム テーブルに格納され、作成者のみがアクセスできます。
パブリック マクロとその格納場所の詳細については、「管理者ガイ
ド」を参照してください。
macro_name, parameter
マクロ名とパラメータ名は、データベース識別子です。SQL 文で使用
する TARGET、PSUS、STORAGE などのキーワードは指定できませ
ん。
重要: キーワード名を使用するマクロの場合、マクロを削除してから
新しい名前を使用してマクロを再作成することをお勧めしま
す。
同じマクロ名が、テンポラリ、パブリック、およびプライベート マク
ロの省略名として使用できます。マクロ名が特定できなければ、次の
規則に基づいて、セッション中にデータベース サーバがマクロを読み
込んだり作成する時に特定されます。指定した名前のテンポラリ マク
ロが存在する場合は、テンポラリ マクロが使用されます。テンポラリ
マクロが存在せず、指定した名前のプライベート マクロが存在する場
合は、プライベート マクロが使用されます。テンポラリ マクロおよ
びプライベート マクロが共に存在せず、指定した名前のパブリック
マクロが存在する場合は、パブリック マクロが使用されます。
マクロは、SQL 文の一部として使用するか、別のマクロ内で使用でき
ます。 SQL 文の実行時には、マクロ名がマクロの定義内容 に置き換
えられます。
区切り識別子を使用したマクロ名は、二重引用符で囲む必要がありま
す。また、区切り識別子を囲む各二重引用符は、二重引用符でエスケ
ープする必要があります。この例は、338 ページを参照してくださ
い。
CATEGORY
336
マクロの構文カテゴリを指定します。SQL 文でマクロを使用する方法
によってそのマクロにカテゴリを付けます。これはオプションのパラ
メータです。
IBM Red Brick Warehouse: SQL リファレンス ガイド
CREATE MACRO
カテゴリ値は、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 テキストを定義する
マクロです。
COMMENT character_string
マクロの意味や使用方法を説明するコメント文字列を割り当てます。
256 バイトまで入力できます。コメントは、RBW_MACROS システム
テーブルに格納されるオプションのパラメータで、このテーブルへの
クエリによって参照できます。
このパラメータを指定しなかった場合、または以前のリリースの IBM
Red Brick Warehouse からマクロを更新した場合には、
RBW_MACROS の COMMENT 列に NULL が格納されます。データ
ベース サーバはこのテキストを無視します。
ALTER MACRO 文を使用して、RBW_MACROS の COMMENT 列の
内容を更新できます。
AS definition
マクロを定義します。次の規則に従って、SQL 文の一部または全体を
定義できます。
第 8 章 SQL 文と RISQL 拡張機能
337
CREATE MACRO
v マクロ名およびパラメータ名を使用できます。これらは埋込みマク
ロとして参照されます。
v 1024 バイト以下です。パラメータ名のサイズやマクロの実行時に
入力する値のサイズに関係なく、指定パラメータ 1 つが 3 バイト
を使用します。
v 完全な文は 1 つしか記述できません。
v パラメータにカンマ (,) が含まれている場合は、エスケープ文字の
円記号 (¥) をつけます。
マクロ実行時にマクロ名が展開されるときには、定義された各パラメ
ータ名が、対応する引数の値に置き換えられます。 EXPAND 文は、
展開したマクロを戻す文です。詳しくは、395 ページの『EXPAND』
を参照してください。
例
SELECT 文全体をマクロにし、構文カテゴリを指定する例を示します。
create macro select_star_lotta
category 100
as select * from product
where product like ’Lotta%’
次の例は、パラメータによって条件を定義し、マクロの構文カテゴリとコメントを指定
します。
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 自習ガイド」を参照してください。
次の例では、展開後、区切り識別子を使用する CREATE TABLE 文になるマクロを作
成します。
create macro create_star as
"create table ""table"" (""The """"STAR"""""" int)"
338
IBM Red Brick Warehouse: SQL リファレンス ガイド
CREATE MACRO
RISQL プロンプトで create_star と入力すると、″STAR″ という列名の列を持つ table
という名前のテーブルが作成されます。
第 8 章 SQL 文と RISQL 拡張機能
339
CREATE ROLE
CREATE ROLE 文はロールを作成し、オプションで 1 人以上のユーザにロールを付与
します。作成したロールには、GRANT 文を使用してタスク権限とオブジェクト特権を
付与します。
許可
ロールを作成するユーザは、次の中で少なくとも 1 つの条件を満たしている必要があり
ます。
v DBA システム ロールのメンバーであること
v 明示的に付与されるかユーザが作成したロールのメンバーであることにより、
ROLE_MANAGEMENT 権限を持っていること
構文
次に CREATE ROLE 文の構文ダイアグラムを示します。
CREATE ROLE
role_name
,
FOR
db_username
role_name
role_name
作成するロールを識別する名前です。ロール名は他のロール名、デー
タベース ユーザ名、タスク権限名とは異なる名前にしてください。
db_username
作成したロールをデータベース ユーザに付与します。そのユーザは、
新規作成されたロールのメンバーになり、そのロールのタスク権限お
よびオブジェクト特権をすべて取得します。
role_name
作成したロールを、ユーザが作成した既存のロールに付与します。
DBA システム ロールや RESOURCE システム ロールには付与でき
ません。システム ロールは変更できません。
使用上の注意
FOR 句に指定したデータベース ユーザおよびロールは、作成したロールの直接のメン
バーになります。ユーザやロールが直接のメンバーになれるロールの数は 16 までで
す。 FOR 句に指定したユーザやロールが、すでに 16 個のロールのメンバーである場
合は、新規ロールは作成されません。
例
次の文は、temp というロールを作成します。
create role temp
次の文は、contractor というロールを作成し、そのロールを jerry に付与します。
340
IBM Red Brick Warehouse: SQL リファレンス ガイド
CREATE ROLE
create role contractor for jerry
次の文は、market_research というロールを作成し、そのロールを alison、emily、paul
に付与します。
create role market_research for alison, emily, paul
第 8 章 SQL 文と RISQL 拡張機能
341
CREATE SEGMENT
CREATE SEGMENT 文は、任意の数の物理格納ユニット (PSU) を格納する名前付きセ
グメントを定義します。
テーブルやインデックスは、デフォルト セグメントか任意の数の名前付きセグメントを
使用できます。デフォルト セグメントは、名前付きセグメントを指定せずにテーブルや
インデックスを作成したときに、自動作成されます。名前付きセグメントは、CREATE
SEGMENT 文によって作成し、CREATE TABLE、ALTER TABLE、CREATE
INDEX、ALTER SEGMENT のいずれかの文によってテーブルやインデックスに割り当
てます。 1 つの名前付きセグメントには、1 つのデータベース オブジェクトしか格納
できません。テーブルやインデックスは、複数のセグメントに格納できます。
許可
セグメントを作成するユーザは、次の中で少なくとも 1 つの条件を満たしている必要が
あります。
v DBA システム ロールか、RESOURCE システム ロールのメンバーであること
v 明示的に付与されるかユーザが作成したロールのメンバーであることにより、
CREATE_ANY 権限か CREATE_OWN 権限を持っていること
構文
次に CREATE SEGMENT 文の構文ダイアグラムを示します。
,
CREATE SEGMENT
segment_name
segment_name storage_specification
作成するセグメントの名前を指定します。現在のデータベースに存在
しない名前で、有効なデータベース識別子である必要があります。
storage_specification
セグメントの行データまたはインデックス データを格納する各 PSU
のパスとサイズを指定します。ストレージを指定する構文について
は、次のセクションを参照してください。
storage_specification には、セグメントに割り当てられる物理格納ユニ
ット (PSU) と呼ばれる各ファイルのパス名とサイズを指定します。 1
つのセグメントに、サイズの異なる複数の PSU を割り当てることが
できます。
構文
次に torage_specification の構文ダイアグラムを示します。
342
IBM Red Brick Warehouse: SQL リファレンス ガイド
CREATE SEGMENT
STORAGE
’filename’
MAXSIZE
max_size
INITSIZE
init_size
EXTENDSIZE
increment
STORAGE filename
PSU のファイル名を指定します。ファイル名は、データベースのディ
レクトリに対する相対パスでも、絶対パスでも構いません。指定する
ディレクトリは、すべて存在するものにしてください。
MAXSIZE max_size
PSU にロードするデータの最大量を KB 数で指定します。この量ま
でロードされると、シーケンス内の次の PSU に切り換わります。増
分は KB 単位で指定しますが、実際のサイズは 8KB の倍数に切り上
げられます。 MAXSIZE の許容最小値は 16KB です。
MAXSIZE の値は、RBW_STORAGE システム テーブルの MAXSIZE
列に格納されます。このシステム テーブルには、PSU の使用済み
KB 数 (USED 列) も格納されます。
INITSIZE init_size
PSU にあらかじめ確保される領域の初期サイズを指定します。KB 単
位で指定しますが、実際のサイズは 8KB の倍数に切り上げられま
す。指定する値は、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
第 8 章 SQL 文と RISQL 拡張機能
343
CREATE SEGMENT
initsize 100
extendsize 100,
storage ’sales_area2’
maxsize 1024,
storage ’sales_area3’
maxsize 1024
先頭の 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 ずつ拡張されます。
344
IBM Red Brick Warehouse: SQL リファレンス ガイド
CREATE SYNONYM
シノニムは、既存テーブルの論理名またはエイリアスです。定義したシノニムは、元の
テーブルのコピーとして使用できます。シノニムは、データベースにある任意の基本テ
ーブルに対して作成できますが、ビューおよびテンポラリ テーブルには作成できませ
ん。
許可
テーブルのシノニムを作成するユーザは、次の中で少なくとも 1 つの条件を満たしてい
る必要があります。
v DBA システム ロールのメンバーであること
v 明示的に付与されるかユーザが作成したロールのメンバーであることにより、
CREATE_ANY 権限を持っていること
v RESOURCE システム ロールのメンバーで、かつテーブルの作成者であること
v CREATE_OWN 権限を持っていて、テーブルの作成者であること
構文
次に CREATE SYNONYM 文の構文ダイアグラムを示します。
CREATE SYNONYM
synonym_name FOR
creator.
synonym_name
table_name
creator.
作成するシノニムの名前を指定します。データベースにある他のビュ
ー、テーブル、シノニムとは異なるデータベース識別子を指定してく
ださい。
シノニム名を指定する場合は、オプションの creator 修飾子 (creator)
の値が、現行ユーザのデータベース ユーザ名と一致する必要がありま
す。たとえば、次の CREATE SYNONYM 文を user1 が実行すると
正常に完了します。
create synonym user1.syn1...
ただし、user1 が次の文を実行すると失敗します。
create synonym user2.syn2...
オブジェクトの作成者は 所有者 とも呼ばれます。
table_name
作成するシノニムの対象となる既存のテーブルを指定します。ビュー
およびテンポラリ テーブルのシノニムを作成することはできません。
シノニム名を指定する場合は、オプションの creator 修飾子 (creator)
の値が、テーブル作成者のデータベース ユーザ名と一致する必要があ
ります。
第 8 章 SQL 文と RISQL 拡張機能
345
CREATE SYNONYM
使用上の注意
シノニムは、テーブル名の永続的エイリアスを作成するのみです。 1 つのファクト テ
ーブルに同じ 1 つのディメンジョン テーブルへの複数の参照を設定するクエリを書く
には、シノニムを作成する必要はありません。どのテーブルも他のテーブルに複数のプ
ライマリ キー参照またはフォーリン キー参照を設定できます。
例
次の例は、Period テーブルに shipdate というシノニムを作成します。
create synonym shipdate for period
次の文は、Store テーブルのシノニムを作成します。シノニムはユーザ system により作
成、所有されますが、Store テーブルはユーザ newdba により作成されています。
create synonym system.syn_store for newdba.store
346
IBM Red Brick Warehouse: SQL リファレンス ガイド
CREATE TABLE
CREATE TABLE 文は、プライマリ キー、属性、フォーリン キー参照、セグメントを
指定した (シノニムではない) 基本テーブルを定義します。テーブルを作成すると、そ
のテーブルのプライマリ キーについて B-TREE インデックスが自動的に作成されま
す。
CREATE TEMPORARY TABLE 文の構文については、369 ページを参照してくださ
い。
許可
テーブルを作成するユーザは、次の中で少なくとも 1 つの条件を満たしている必要があ
ります。
v DBA システム ロールか、RESOURCE システム ロールのメンバーであること
v 明示的に付与されるかユーザが作成したロールのメンバーであることにより、
CREATE_ANY 権限か CREATE_OWN 権限を持っていること
他のユーザのセグメントにテーブルを作成する場合は、次の中で少なくとも 1 つの条件
を満たしている必要があります。
v DBA システム ロールのメンバーであること
v CREATE_ANY 権限を持っていること
構文
次に CREATE TABLE 文の構文ダイアグラムを示します。
CREATE TABLE
table_name
creator.
( column_definitions
)
segment_specification
MAXROWS PER SEGMENT
MAXSEGMENTS
table_name
maxrows
maxsegments
作成する基本テーブルの名前を指定します。テーブル名は、次の条件
を満たしている必要があります。
v データベースにある他のビュー、テーブル、シノニムの名前と重複
しないこと
v 有効なデータベース識別子であること
第 8 章 SQL 文と RISQL 拡張機能
347
CREATE TABLE
シノニム名を指定する場合は、オプションの creator 修飾子 (creator)
の値が、現行ユーザのデータベース ユーザ名と一致する必要がありま
す。たとえば、次の CREATE TABLE 文を user1 が実行すると正常
に完了します。
create table user1.tab1...
ただし、user1 が次の文を実行すると失敗します。
create table user2.tab2...
オブジェクトの作成者は 所有者 とも呼ばれます。
column_definitions
テーブルの列を定義します。テーブルの各列には、完全な列定義が必
要です。列定義の詳細については、350 ページを参照してください。
segment_specification
テーブルのデータ、およびシステムが生成する B-TREE インデックス
に、セグメントを割り当てます。 CREATE TABLE 文のセグメント
定義を省略すると、データおよびインデックスはデフォルト セグメン
トに格納されます。
デフォルト セグメントの最大サイズは、通常 2GB です。ただし、複
数の PSU を使用すると、デフォルト セグメントのサイズを 2GB よ
り大きくすることができます。
CREATE TABLE 文の実行時の状況を次に示します。
v 指定した容量の領域に、少なくとも 1 つの PSU を割り当てる必要
があります。
v 各 PSU の MAXSIZE は 2GB から 8KB を引いた値に設定されま
す。
v 各 PSU の INITSIZE は 16KB に設定されます。
v 作成される PSU の数は DEFAULT_SEGMENT_SIZE を 2GB で割
った値に等しくなります。 DEFAULT_SEGMENT_SIZE が 2GB で
割り切れない場合、最後の PSU はその他の PSU より小さくなり
ます。
テーブルやインデックスを名前付きセグメントに格納する場合は、
CREATE SEGMENT 文を使用して、名前付きセグメントをあらかじ
め作成してください。
セグメント定義の構文と説明については、360 ページを参照してくだ
さい。
MAXSEGMENTS maxsegments,
MAXROWS PER SEGMENT maxrows
348
IBM Red Brick Warehouse: SQL リファレンス ガイド
CREATE TABLE
MAXSEGMENTS は、テーブルが使用できるセグメントの最大数を指
定します。 MAXROWS PER SEGMENT は、テーブルの各セグメン
トに格納できる行の最大数を指定します。これらの値は、インデック
ス付きテーブルのフォーリン キーによってこのテーブル参照されたと
き STAR インデックス キーのサイズの計算に使用されます。
MAXSEGMENTS を指定しなかった場合のデフォルトは、
segment_specification に指定したセグメントの数になり、
segment_specification が指定されていない場合は 1 になります。
MAXROWS PER SEGMENT を指定しなかった場合、このテーブルの
プライマリ キーを参照する別のテーブルのフォーリン キーに STAR
インデックスを定義できなくなり、CREATE INDEX 文は失敗しま
す。
第 8 章 SQL 文と RISQL 拡張機能
349
列の定義
列の定義
データベース テーブルの各列は、CREATE TABLE 文の中で完全に定義する必要があ
ります。
構文: CREATE TABLE 文全体の構文ダイアグラムと、column_definitions の構文の参
照ポイントを示します。
CREATE TABLE
table_name
(column_definitions)
segment_specification
MAXROWS PER SEGMENT
MAXSEGMENTS
maxrows
maxsegments
次に column_definition の構文ダイアグラムを示します。
列の定義:
,
column_name datatype
NOT NULL
DEFAULT
UNIQUE
literal
function
NULL
, primary_key_reference
, foreign_key_reference
column_name
テーブルの列名を指定します。列名は、テーブルで一意の有効なデー
タベース識別子とし、修飾子は使用できません。 1 つのテーブルに
は、7,280 列まで作成できます。
列に NULL または NOT NULL および UNIQUE を指定でき、デフォルト
値も指定できます。
data type
次のいずれかのデータ型を指定します。
v 固定長の文字列値には、文字 (CHARACTER) 型または文字
(CHAR) 型
v 可変長の文字列値には、可変長文字 (VARCHAR) 型
v 日付時間値は、日付 (DATE) 型、時刻 (TIME) 型、またはタイムス
タンプ (TIMESTAMP) 型
v 符号付き 10 進数値 (10 進数 (NUMERIC) 型 と同等) には、10 進
数 (DECIMAL) 型 または 10 進数 (DEC) 型
v 符号付き浮動小数点数値 (実数 (DOUBLE PRECISION) 型 と同等)
には実数 (FLOAT) 型
v 符号付き浮動小数点数値には小桁実数 (REAL) 型
350
IBM Red Brick Warehouse: SQL リファレンス ガイド
列の定義
v -2 31 から 2 31 -1 の符号付き整数値には整数 (INTEGER) 型また
は整数 (INT) 型
v 1 から 231-1 の符号付き整数値には、シリアル (SERIAL) 型
v テーブルごとにシリアル (SERIAL) 型列を 1 つのみ作成できま
す。シリアル (SERIAL) 型列を定義するときに、NOT NULL として
指定する必要があります。
v -215 から 215-1 の符号付き小桁整数値には小桁整数 (SMALLINT)
型
v -27 から 27-1 の符号付き整数値には小桁整数 (TINYINT) 型
文字 (CHAR) 型または可変長文字 (VARCHAR)型列を定義した場合、
列サイズとして指定した値は、列値の文字数ではなく、列値のバイト
数 とみなされます。
7 または 8 ビットの ASCII 文字セットを使用した場合は、1 文字の
長さが常に 1 バイトになるため、列サイズがバイト数または文字数の
どちらとみなされても違いはありません。ただし、マルチバイトの文
字セットを使用する場合は、シングルバイトの文字セットと同数の文
字が列に格納できないことがあるので注意してください。
データ型の詳細については、22 ページを参照してください。
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);
第 8 章 SQL 文と RISQL 拡張機能
351
列の定義
次の文は非固有 B-TREE インデックスを作成します。
create index idx2 on tbl(c1, c3);
ヒント: 列の組合せのみが一意で、個々の列自体は一意でない場合、1 つの列にインデ
ックスを定義しないでください。そのような定義は、一意性をその列に強制し
ます。
DEFAULT
指定した列に、デフォルト値を割り当てます。列のデフォルト値は、
ALTER TABLE 文によって新規列をテーブルに追加した時の既存行
と、その列に値がない新規行に使用されます。 INSERT 文で追加され
た行や、ロード中に参照整合性を維持するために自動生成された行に
も使用されます。行の自動生成については、「テーブル マネジメント
ユーティリティ リファレンス ガイド」を参照してください。
リテラル値を指定する場合は、その列のデータ型とリテラル値を互換
性のあるものにしてください。
関数を指定する場合は、その列のデータ型と互換性のある値を戻す関
数にしてください。戻り値は、行の挿入時に列に挿入されます。デフ
ォルトに使用できる関数は、次のいずれかです。
v CURRENT_USER (または USER)
v CURRENT_USER 関数をデフォルトに使用できるのは、CHAR(128)
または VARCHAR(128) 以上のデータ型列のみです。
v CURRENT_DATE
v CURRENT_TIME (precision)
v CURRENT_TIMESTAMP (precision)
デフォルトの句は、シリアル (SERIAL) 型のデータでは使用できませ
ん。
DEFAULT NULL は、行の挿入時に値が指定されなかった場合に列のデフ
ォルトを NULL に設定するように指定できます。
同じ列に、NOT NULL と DEFAULT NULL の両方を指定できます。その列
には、いかなる場合もデフォルト値を入力できないという意味です。
これは、そのテーブルの自動的な行の生成を無効にすることになりま
す。行の自動生成については、「テーブル マネジメント ユーティリ
ティ リファレンス ガイド」を参照してください。
この CREATE TABLE 文は、テーブル Prod_Basic を作成します。
Prodname 列には、デフォルト値 Unknown が割り当てられます。
Prod_Basic テーブルに行を挿入するときに、Prodname 列の値を指定
しないと、Unknown が挿入されます。
352
IBM Red Brick Warehouse: SQL リファレンス ガイド
列の定義
create table prod_basic (
prodkey integer not null,
prodname char(30) default ’Unknown’,
descript character(40),
constraint prod_pkc primary key (prodkey) )
デフォルト値の用法の詳細については、422 ページに示す INSERT 文
の例を参照してください。
第 8 章 SQL 文と RISQL 拡張機能
353
プライマリ キー参照
プライマリ キー参照
テーブルのプライマリ キーは、任意の数の列で構成できます。プライマリ キーはオプ
ションですが、プライマリ キーを持たないテーブルはテンポラリ テーブルに限って作
成することをお勧めします。プライマリ キーを持たないテーブルに対しては、次の操作
はできません。
v 他のテーブルによるフォーリン キー参照
v 参照整合性チェック
v Table Management Utility の UPDATE または MODIFY 構文によるロード
テーブルを作成すると、そのテーブルのプライマリ キーについて B-TREE インデック
スが自動的に作成されます。
構文: 次に primary_key_reference の構文ダイアグラムを示します。 PRIMARY KEY
REFERENCES 句と、CREATE TABLE 文および列定義との関係は、350 ページを参照
してください。
プライマリ キー参照:
,
PRIMARY KEY (
CONSTRAINT
column_name
)
constraint_name
CONSTRAINT constraint_name
プライマリ キー制約の名前を指定します。この名前は、
RBW_RELATIONSHIPS および RBW_CONSTRAINTS システム テー
ブルに格納されます。プライマリ キー制約名はオプションです。指定
しないと、次のフォーマットのデフォルト名が自動的に割り当てられ
ます。
tablename_PKEY_CONSTRAINT
制約名の詳細については、358 ページの『プライマリ キーとフォーリ
ン キーの制約名』を参照してください。
PRIMARY KEY column_name
テーブルのプライマリ キーを指定します。複数の列から成るプライマ
リ キーを指定できます。
プライマリ キーは、次の条件に従います。
v 1 つのテーブルには 1 つのプライマリ キーしか指定できません
が、プライマリ キーは、複数の列で構成できます。
v プライマリ キーとして指定する列は、すべて NOT NULL を指定す
る必要があります。
354
IBM Red Brick Warehouse: SQL リファレンス ガイド
プライマリ キー参照
v プライマリ キーの値は、一意である必要があります。つまり、プ
ライマリ キーによってテーブルの行が一意に識別できる必要があ
ります。
第 8 章 SQL 文と RISQL 拡張機能
355
フォーリン キー参照
フォーリン キー参照
他のテーブルのプライマリ キー値に存在する値のみを格納する列を、フォーリン キー
参照 を行う列といいます。
構文: 次に foreign_key_referenceの構文ダイアグラムを示します。 FOREIGN KEY
REFERENCES 句と、CREATE TABLE 文および列定義との関係は、350 ページを参照
してください。
フォーリン キー参照:
,
FOREIGN KEY (
CONSTRAINT
column_name
)
constraint_name
REFERENCES
referenced_table
creator.
,
(
primary_key_column
)
ON DELETE
CASCADE
NO ACTION
CONSTRAINT constraint_name
フォーリン キー制約の名前を指定します。この名前は、
RBW_RELATIONSHIPS および RBW_CONSTRAINTS システム テー
ブルに格納されます。フォーリン キー制約名はオプションです。指定
しないと、次のフォーマットのデフォルト名が自動的に割り当てられ
ます。
tablename_FKEY#_CONSTRAINT
# は、CREATE TABLE 文に指定したフォーリン キーの順番を示す
数字です。
プライマリ キーが複数の列で構成されているテーブルを参照している
テーブルに STAR インデックスを作成する場合は、ユーザが定義した
フォーリン キー制約名を CREATE STAR INDEX 文に指定してくだ
さい。
制約名の詳細については、358 ページの『プライマリ キーとフォーリ
ン キーの制約名』を参照してください。
FOREIGN KEY
356
作成するテーブルと、REFERENCES キーワードの後に指定したテー
ブル間のジョイン パスを定義します。パスは、column_name と
IBM Red Brick Warehouse: SQL リファレンス ガイド
フォーリン キー参照
parent_column に指定した列について定義します。 1 つのテーブルに
設定できるフォーリン キーの最大数は 256 です。
フォーリン キーにより参照されるテーブルは、プライマリ キーを持
っている必要があります。シリアル (SERIAL) 型列はフォーリン キ
ーとして使用できません。シリアル (SERIAL) 型列をフォーリン キ
ーとして参照するときは、フォーリン キー列を整数 (INTEGER) 型と
して指定する必要があります。シリアル (SERIAL) 型の詳細について
は、27 ページを参照してください。
ループするスキーマ参照は定義できません。たとえば、table2 から
table1 に対する制約がすでに存在する場合、table1 から table2 に対す
る制約を追加することはできません。このようなテーブル設定を行う
と、参照整合性がループします。
column_name
作成するテーブルの列名を指定します。この列は、NOT NULL に指
定されたものとし、parent_column と同名でも構いません。
referenced_table
既存の参照先テーブルまたはシノニムの名前を指定します。テーブル
名を指定する場合には、そのテーブルを作成したユーザのユーザ名を
creator に指定してください。
primary_key_column
referenced_table にあるプライマリ キー列の名前を指定します。指定
しないと、参照先テーブルのプライマリ キーが自動的に使用されま
す。指定する場合は、参照先テーブルに指定したプライマリ キー列と
一致させてください。
ON DELETE
参照先テーブルに削除操作が実行された時に、参照整合性を維持する
方法、つまり参照元の行をすべて削除するか、参照先の行の削除を中
止するかを指定します。ON DELETE 句を省略した場合のデフォルト
は、NO ACTION です。これは、行の削除によって参照整合性違反が発
生した場合に、行の削除を中止する指定です。
NO ACTION を指定すると、参照先テーブルの行と参照元テーブルの行
はどちらも削除されません。このような削除は、リストリクト デリー
ト と呼ばれます。
CASCADE を指定すると、参照先テーブルの行と、その行を参照してい
る参照元テーブルのすべての行が削除されます。削除後は、各テーブ
ルから削除された行数を示すメッセージが表示されます。このような
削除は、カスケード デリート と呼ばれます。
リストリクト デリートとカスケード デリートの両方が関わる削除で
は、NO ACTION が CASCADE に優先します。このため、行は削除されま
せん。この優先順位は、すべての参照元テーブルに再帰的に適用され
ます。
第 8 章 SQL 文と RISQL 拡張機能
357
フォーリン キー参照
シノニムには、対応する基本テーブルと同じ削除動作を指定してくだ
さい。そうでない場合は、CREATE TABLE 文がエラーになります。
ON DELETE 句に指定した動作は、OVERRIDE REFCHECK 句を指定
した DELETE 文で変更できます。
OVERRIDE REFCHECK 句を使用するときは、参照整合性を維持でき
るように注意して使用してください。
各種の削除モードの動作例については、379 ページの『DELETE』お
よび「管理者ガイド」を参照してください。
プライマリ キーとフォーリン キーの制約名: 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
358
IBM Red Brick Warehouse: SQL リファレンス ガイド
フォーリン キー参照
table_name は作成中のテーブル名、# は、CREATE TABLE 文に指定したフォーリン
キーの順番を示す数字です。システム定義の場合もユーザ定義の場合も、制約名は、
RBW_RELATIONSHIPS および RBW_CONSTRAINTS システム テーブルに格納されま
す。
システム テーブルは、列名ではなく制約名でプライマリ キー制約とフォーリン キー制
約を管理するため、CREATE TABLE 文にはユーザ定義の制約名を統一して使用してく
ださい。ユーザ定義の制約名は、プライマリ キー参照およびフォーリン キー参照に意
味のある名前を割り当てる手段にもなります。
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 文で指定されるこ
とに注意してください。詳細については、358 ページを参照してください。
第 8 章 SQL 文と RISQL 拡張機能
359
セグメント定義
セグメント定義
セグメント定義は、テーブル データおよびシステムが生成した B-TREE インデックス
に、名前付きセグメントとデータの格納範囲を割り当てます。データベース オブジェク
トに対してどのようなときにセグメントを指定するかについては、「管理者ガイド」を
参照してください。
テーブルはすべて、複数のセグメントに分割できます。デフォルト設定では、プライマ
リ キーを持つテーブルのデータと、システムが生成した B-TREE インデックスを別の
セグメントに格納します。データにもインデックスにもセグメント指定をしなかった場
合は、システムがデフォルト セグメントを割り当てます。
構文: CREATE TABLE 文全体の構文ダイアグラムと、segment_specification の構文の
参照ポイントを示します。
CREATE TABLE
(
table_name
column_definitions
)
segment_specification
MAXROWS PER SEGMENT
MAXSEGMENTS
maxrows
maxsegments
次に segment specification の構文ダイアグラムを示します。
セグメント定義:
DATA IN
segment_name
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
DATA IN segment_name(s
データを格納する 1 つ以上のセグメントの名前を指定します。どのテ
ーブルも、複数のセグメントに格納できます。
360
IBM Red Brick Warehouse: SQL リファレンス ガイド
セグメント定義
v 1 つのセグメントを指定した場合や、デフォルトによって 1 つの
セグメントが作成された場合は、テーブル全体がそのセグメントに
格納されます。
v 複数のセグメントを指定すると、セグメント範囲の指定に基づい
て、各セグメントにデータが格納されます。各セグメント名をカン
マで区切り、セグメント名リストを括弧で囲んでください。
v セグメント名を指定しないと、1 つの物理格納ユニット (PSU) か
ら成るデフォルト セグメントにテーブルが作成されます。
PRIMARY INDEX IN segment_name(s)
プライマリ キー インデックスを格納する 1 つ以上のセグメントの名
前を指定します。
v 1 つのセグメントを指定すると、インデックス全体がそのセグメン
トに格納されます。
v 複数のセグメントを指定すると、セグメント範囲の指定に基づい
て、各セグメントにインデックスが格納されます。各セグメント名
をカンマで区切り、セグメント名リストを括弧で囲んでください。
v 名前を指定しない場合、システムがプライマリ キー インデックス
のデフォルト セグメントを作成します。
名前付きセグメントにインデックスを作成する方法については、316
ページの『CREATE INDEX』を参照してください。
例:
デフォルト セグメントと名前付きセグメントの使用方法: この文で作成される
テーブルは、デフォルト セグメントに格納されます。
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),
第 8 章 SQL 文と RISQL 拡張機能
361
セグメント定義
state character(40),
constraint mkt_pkc primary key (mktkey) )
data in dataseg
primary index in indexseg
segment_range_spec
データやインデックスのセグメント化のために行データの範囲を割り
当てます。セグメント範囲指定の構文については、364 ページを参照
してください。
SEGMENT BY HASH
ハッシュ手法により行データを分散し、各セグメントにデータを均等
に格納します。ある列の値に基づいてデータを分散するのではなく、
各行のすべての値を使用してデータを分散します。ハッシュ手法で
は、データがランダムに分散されるため、1 つのセグメントにデータ
が集中するようなことはありません。このオプションは、インデック
スには使用できません。
次の条件が該当する場合には、SEGMENT BY HASH 句によりセグメ
ント間でさらに均等にデータが分散されます。
v セグメントの数が素数である。
v NOT NULL 句で定義されている列のみで行が構成されている。
v 行全体で大幅に変わらない値を持つ大規模列 (小桁実数 (REAL) 型
列や文字 (CHARACTER) 型列など) がテーブルの先頭付近にあ
る。
ハッシュ手法によるセグメント化には、セグメント化の基準列や範囲
の指定は不要です。
ハッシュ手法で作成されたテーブルのセグメントは、ALTER
SEGMENT 文のオプション DETACH、ATTACH、CHANGE
RANGE、または SEGMENT BY で変更することはできません。
この例では、3 つのセグメントにデータが均等に格納されます。
data in (seg1, seg2, seg3)
segment by hash
SEGMENT LIKE DATA
プライマリ キー インデックスのセグメント範囲指定が、データのセ
グメント範囲指定と同じであることを指定します。このオプションが
有効なのは、次の場合のみです。
v ハッシュではなく、値によってデータがセグメント化されている。
v プライマリ キーの先頭列が、データのセグメント化の基準列と同
じである。
362
IBM Red Brick Warehouse: SQL リファレンス ガイド
セグメント定義
v プライマリ キー インデックスとデータに、同数のセグメントが指
定されている。
第 8 章 SQL 文と RISQL 拡張機能
363
セグメント範囲の指定
セグメント範囲の指定
構文: 次にセグメント範囲指定の構文ダイアグラムを示します。セグメント範囲指定
とセグメント指定との関係は、360 ページを参照してください。
SEGMENT BY VALUES OF
( segmenting_column
)
RANGES
(
MIN:literal , literal:MAX
literal:literal
)
,
MIN:MAX
SEGMENT BY VALUES OF segmenting_column
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 から
364
IBM Red Brick Warehouse: SQL リファレンス ガイド
セグメント範囲の指定
2,147,483,647 の範囲で指定します。基準列が文字 (CHAR) 型または
可変長文字 (VARCHAR) 型の場合は、文字値の範囲を指定してしま
す。
テーブル データやプライマリ キー インデックスを複数のセグメント
に格納する場合は、セグメントごとに範囲を指定してください。
セグメントの範囲は、次のように指定します。セグメント範囲の上限
と下限をコロン (:) で区切り、各範囲指定をカンマで区切ります。範
囲指定は、MIN キーワードで始め、MAX キーワードで終わります。
昇順に指定し、値の重複やすき間がないようにします。各セグメント
の上限は、次のセグメントの下限と一致する必要があります。各セグ
メントには、下限の値以上で上限の値未満のデータが格納されます。
第 8 章 SQL 文と RISQL 拡張機能
365
例
例 1
データまたはプライマリ キー インデックスの範囲を指定する例を示します。データ
(またはインデックス) は、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)
次に、誤った指定例を示します。第 1 セグメントの範囲が第 2 セグメントの範囲と重
複しており、第 2 セグメントと第 3 セグメントが連続していません。
/*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
366
セグメントの範囲を示す英数字の値を指定します。リテラル値につい
ては、17 ページを参照してください。
IBM Red Brick Warehouse: SQL リファレンス ガイド
例 2
次の例では、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 がデフォルト セグメントに割り当てられま
す。
PSU1
PSU2
PSU3
init=16 kb
extend =256 kb
max=2 gb (-8 kb)
init=16 kb
extend=256 kb
max=2 gb (-8 kb)
init=16 kb
extend=256 kb
max=1 gb (-8 kb)
次のオプションを rbw.config ファイルに設定した場合も結果は同じです。
OPTION DEFAULT_SEGMENT_SIZE 5G
OPTION DEFAULT_PSU_EXTENDSIZE 256K
その他の 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) )
第 8 章 SQL 文と RISQL 拡張機能
367
次の文は、名前付きセグメントに格納されるテーブルを作成します。 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
次の文は、データとプライマリ キー インデックスの両方を複数の名前付きセグメント
に格納するテーブルを作成します。
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
368
IBM Red Brick Warehouse: SQL リファレンス ガイド
CREATE TEMPORARY TABLE
CREATE TEMPORARY TABLE 文は、テーブル自身が作成されたセッションの間のみ
アクセスできるテーブルを指定します。テーブルはセッション中のみ、あるいは DROP
TABLE 文で削除するまで存在します。テーブルのプライマリ キーに B-TREE インデ
ックスが自動的に作成されます。
テンポラリ テーブルは、次の特性を持っています。
v テンポラリ テーブルは、それ自身が作成された SQL セッションで排他的に使用され
ます。セッションの外部からは検索できず、テンポラリ テーブルのデータを他のセ
ッションと共有しません。
v テンポラリ テーブルは、データベース内の任意のテーブルにジョインできます。イ
ンデックスおよび列のデフォルト値をテンポラリ テーブルに対して指定でき、テー
ブル存在中は存続します。
v テンポラリ テーブルは、後のセッションで作成されるパーマネント テーブルと同名
でも構いませんが、同じセッションまたは前のセッションで作成されたパーマネント
テーブルと同名であってはなりません。
v テンポラリ テーブルのユーザが実行するすべてのクエリは、自動的にそのテーブル
をクエリの対象とします。同名のパーマネント テーブルが存在したり、後に他のセ
ッションで作成される場合でも同様です。テンポラリ テーブルは常にパーマネント
テーブルに優先します。
v 他のユーザはテンポラリ テーブルにアクセスできないため、更新中はロックする必
要はありません。
v システム テーブルの競合を避けるため、テンポラリ テーブルはシステム テーブル
に永続的にはカタログ化されません。テンポラリ テーブルの情報は、ユーザ セッシ
ョン中はメモリに格納され、システム テーブルに登録されますが、セッションが終
了するときに削除されます。
v テンポラリ テーブルは、SQL セッションの最後に自動的に削除されます。ただし、
DROP TABLE 文でセッション中に削除することもできます。
IBM Red Brick Warehouse テンポラリ テーブルは ANSI SQL-92 標準に準拠していま
す。
許可
テンポラリ テーブルを作成するユーザは、次の中で少なくとも 1 つの条件を満たして
いる必要があります。
v DBA ロールのメンバーであるか、RESOURCE システム ロール権限を持っているこ
と
v GRANT_TEMP_RESOURCE_TO_ALL オプションにより CONNECT システム ロール
権限を持っていること
第 8 章 SQL 文と RISQL 拡張機能
369
CREATE TEMPORARY TABLE
v ユーザが作成したロールのメンバーであることにより、CREATE_ANY 権限、
CREATE_OWN 権限、または TEMP_RESOURCE 権限を持っているか、または明示
的にこれらの権限が付与されていること
構文
次に CREATE TEMPORARY TABLE 文の構文ダイアグラムを示します。
CREATE TEMPORARY TABLE
table_name (
column_definitions
)
creator.
table_name
テーブル名は、次の条件を満たしている必要があります。
v セッションごとに一意であること。 同じデータベースにアクセス
する他のセッションで作成されるテンポラリ テーブルの名前と重
複しない名前である必要があります。
v 有効なデータベース識別子であること。
シノニム名を指定する場合は、オプションの creator 修飾子 (creator)
の値が、現行ユーザのデータベース ユーザ名と一致する必要がありま
す。たとえば、次の CREATE TEMPORARY TABLE 文を user1 が実
行すると正常に完了します。
create temporary table user1.tab1...
ただし、user1 が次の文を実行すると失敗します。
create temporary table user2.tab2...
オブジェクトの作成者は 所有者 とも呼ばれます。
column_definitions
テーブルの各列を定義します。 CREATE TEMPORARY TABLE 文で
列を定義するとき、プライマリ キーは定義できますが、フォーリン
キー参照は定義できません。 MAXSEGMENTS および MAXROWS
PER SEGMENT の指定は使用できません。列定義の詳細については、
350 ページを参照してください。
使用上の注意
パーマネント テーブルとテンポラリ テーブルの次の相違点に注意してください。
v テンポラリ テーブルはプライマリ キー定義をサポートしますが、フォーリン キー
参照をサポートしません。
v テンポラリ テーブルは、他のテーブルを参照したり、他のテーブルから参照された
りすることができないため、STAR インデックスの作成をサポートしません。
v テンポラリ テーブルは、データおよびインデックスのセグメント指定をサポートし
ません。データまたはインデックスのセグメント指定は、それぞれ 別々のデフォル
ト セグメントに格納する必要があります。
370
IBM Red Brick Warehouse: SQL リファレンス ガイド
CREATE TEMPORARY TABLE
v テンポラリ テーブルには、MAXSEGMENTS および MAXROWS PER SEGMENT の
指定は使用できません。
v テンポラリ テーブルは、Table Management Utility (TMU) でロードすることができ
ません。
v テンポラリ テーブルでは、次の操作は実行できません。
– ALTER TABLE
– ALTER INDEX
– ALTER SEGMENT
– CREATE VIEW
– CREATE SYNONYM
– CREATE STAR INDEX
– GRANT (特権)
– REVOKE (特権)
例
次の例は、テンポラリ テーブルを作成します。
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 章 SQL 文と RISQL 拡張機能
371
CREATE VIEW
CREATE VIEW 文は、既存のテーブルまたはビューからデータを抽出するクエリ式の結
果を読取り専用テーブルにします。
CREATE VIEW 文は、クエリ式を読み込み、使用されているマクロを展開し、効率的な
「内部」形式で式を格納します。このため、既存のビューが参照するマクロやテーブル
が変更されても、ビューには変更が反映されません。オリジナル テキストは表示のため
にのみ、RBW_VIEWTEXT テーブルに格納されます。
ビューの作成後にテーブルやマクロを修正した場合、変更をビューに反映させるには、
ビューを削除し、再作成してください。
USING 句を使用した CREATE VIEW 文は事前計算ビューを作成します。事前計算ビュ
ーは、ビューに指定したクエリの結果を格納している基本テーブルに関連付けられたビ
ューです。通常のビューの結果は、このように事前計算されません。事前計算ビューの
詳細については、「IBM Red Brick Vista ユーザーズ ガイド」を参照してください。
許可
ビューを作成するユーザは、次の中で少なくとも 1 つの条件を満たしている必要があり
ます。
v DBA システム ロールか、RESOURCE システム ロールのメンバーであること
v 明示的に付与されるかユーザが作成したロールのメンバーであることにより、
CREATE_ANY 権限か CREATE_OWN 権限を持っていること
構文
次に CREATE VIEW 文の構文ダイアグラムを示します。
CREATE VIEW
view_name
creator.
,
(
AS
column_name
query_expression
precomputed_query_expression using_clause
view_name
)
作成するビューの名前を指定します。データベースにある他のビュー
名やテーブル名と重複しないデータベース識別子を指定してくださ
い。ビューは、INSERT 文、UPDATE 文、DELETE 文で修正するこ
とはできません。
シノニム名を指定する場合は、オプションの creator 修飾子 (creator)
の値が、現行ユーザのデータベース ユーザ名と一致する必要がありま
す。たとえば、次の CREATE VIEW 文を user1 が実行すると正常に
完了します。
372
IBM Red Brick Warehouse: SQL リファレンス ガイド
CREATE VIEW
create view user1.view1...
ただし、user1 が次の文を実行すると失敗します。
create view user2.view2...
オブジェクトの作成者は 所有者 とも呼ばれます。
ビューの列名を指定します。基本テーブルの列名と同じでも、違って
いても構いません。列名リストを指定する場合は、SELECT 文で表し
たクエリ式が戻す列と同数の列を指定する必要があります。
column_name
列名リストを指定しないと、ビューの列名は基本テーブルと同じにな
ります。次のようなクエリ式を使用する場合は、列名リストを指定す
る必要があります。
v 共通の列名を持つテーブルを参照するクエリ式。 共通の列名を持
つテーブルを参照しないと、列名が重複している場合に参照があい
まいになります。
たとえば、Sales テーブルと Store テーブルの両方に Storekey とい
う列があるとします。 CREATE VIEW 文のクエリ式が、Sales テ
ーブルと Store テーブルの両方を参照する場合、列名リストを指定
しないと、どちらの Storekey 列であるかが特定できません。
v 名前のない列を使用するクエリ式。 たとえば、次に示すようなエ
イリアスのない集約関数がクエリ式に含まれる場合、列には名前が
ありません。
sum(dollars)
query_expression ビューの内容を定義します。ビューが参照されるたびに、クエリ式と
同等の SELECT 文が戻すようなリザルト テーブルが戻されます。ク
エリ式の定義と詳細は、 179 ページの『第 7 章 クエリ式』を参照し
てください。
precomputed_query_expression
通常の CREATE VIEW 文の query_expression よりも範囲を限定した
クエリ式を指定します。サブクエリ、HAVING 句、WHEN 句を使用
することはできません。事前計算クエリ式の構文は次のとおりです。
事前計算クエリ式:
,
SELECT ,
column_name
aggregate_column
FROM table_name
第 8 章 SQL 文と RISQL 拡張機能
373
CREATE VIEW
AND
WHERE
,
join_predicate
GROUP BY
column_name
SELECT
FROM 句に指定したテーブルから選択された列です。
column_name
テーブルから選択された列を指定します。 SELECT リストで指定し
たすべての列名 (集約列名以外) は、GROUP BY 句でも指定する必要
があります。 SELECT リストで列エイリアスを使用できます。
aggregate_column
次の形式で列を指定します。
set_function(expression)
この例の set_function は次の集約関数の一つです。
v SUM
v MIN
v MAX
v COUNT
expression は、ビュー定義、定数またはその両方の FROM 句に詳細
ファクト テーブルの列名を使用した単項式または多項式です。
次の式は、Sales テーブルがビュー定義の FROM 句で指定した詳細フ
ァクト テーブル名である場合の、有効な集約列の例です。
sum(sales.dollars) min(sales.dollars/sales.quantity)
max((sales.quantity) * 10)
SUM(DISTINCT) 関数、COUNT(DISTINCT) 関数、および COUNT(*)
関数もサポートされています。
次の制約に注意してください。
v COUNT 関数の引数として使用する式は単純式でなければなりませ
ん。
v スカラ関数、RISQL 表示関数、サブクエリを使用した式はサポート
されません。
v SUM 関数の式は数値式である必要があります。
v AVG 集約関数は使用できません。ただし、同じ列に対する SUM
値または COUNT 値を持つ適切な集約テーブルが存在すれば、
AVG クエリはリライト可能です。
374
IBM Red Brick Warehouse: SQL リファレンス ガイド
CREATE VIEW
v DISTINCT 関数は COUNT 関数および SUM 関数の引数としての
み使用できます。 SELECT DISTINCT クエリは使用できません。
集約関数の詳細については、 47 ページの『第 4 章 集約関数』を参照
してください。式の詳細については、 35 ページの『第 3 章 式と条
件』を参照してください。
FROM
SELECT リストの列から派生したテーブルです。 FROM 句の各テー
ブルは、WHERE 句のジョインの記述を使用して、FROM 句の他のテ
ーブルのいずれか 1 つからのみ参照できます。ジョインは、FROM
句では指定できず、WHERE 句で指定する必要があります。
table_name
詳細テーブルを指定します。システム テーブル、ビュー、クエリ式か
ら派生したテーブルおよび集約テーブルは使用できません。
シノニムはディメンジョン テーブルにのみ使用できます。
テーブルの相関名は使用できます。
WHERE
ファクト テーブルをディメンジョン テーブルおよびアウトボード テ
ーブルにジョインするジョインの記述を指定します。事前計算ビュー
のクエリ式では、ジョインの記述は、フォーリン キーまたはプライマ
リ キー関係に従ってテーブルをジョインする必要があります。これら
の述部は等号で表現する必要があります。
アウター ジョインの記述は、事前計算ビューの定義では指定できませ
ん。
GROUP BY
SELECT 文で定義した列名です。 SELECT 文のすべての非集約列を
GROUP BY 句に指定する必要があります。
using_clause
次に USING 句の構文ダイアグラムを示します。 USING 句と
CREATE VIEW 文との関係は、372 ページを参照してください。
,
USING
table_name (
column_name
)
creator.
USING
テーブルおよび列を識別し、ビューをテーブルにリンクします。ビュ
ーは、LOAD DATA 操作または INSERT 文でテーブルにデータが挿
入されるまでは、事前計算 されません。
table_name
ビューに関連付けられたテーブルの名前を指定します。作成する個々
の事前計算ビューには、個別のテーブルを使用する必要があります。
シノニムを使用して事前計算ビューを作成することはできません。
テーブル名を指定する場合には、そのテーブルを作成したユーザのユ
ーザ名を creator に指定してください。
第 8 章 SQL 文と RISQL 拡張機能
375
CREATE VIEW
ビューの列と 1 対 1 で対応するテーブルの列名を指定します。列名
リストは必須です。
column_name
シリアル (SERIAL) 型は、ビュー列、ビュー テーブル列、述部など
の事前計算ビュー定義では使用できません。
使用上の注意
CREATE VIEW...USING 文は、次の制約を満たしている必要があります。
v 検索項目リストには、GROUP BY に指定した列またはグルーピング列を最低 1 つ指
定する必要があります。
v 検索項目リストに指定した列は、GROUP BY 句に指定される列と一致する必要があ
ります。
v ジョインの記述は、プライマリ キー/フォーリン キー関係と等号による制約を反映し
ている必要があります。
v ビューの列数は、USING 句のテーブルに指定された列数と一致する必要がありま
す。
v テーブル内の名前付き列のデータ型は、ビュー内の列のデータ型との互換性が必要で
す。非数値データ型は正確に一致している必要があります。たとえば、CHAR(3) の列
はビューの CHAR(4) の列に対応させることができません。
数値データ型は、正確に一致する必要はありません。ただし、テーブルの列がビュー
で定義された列値を格納できない場合は、ビュー作成時に警告メッセージが表示され
ます。この例は、378 ページを参照してください。
重要: デフォルトでは集約処理は新しい事前計算ビューの保守を行います。
例
次のビューは、紅茶製品 (計り売りまたはパッケージ入り) に分類されている製品のみ
を格納する論理テーブルを定義します。
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
376
P
0
1
10
11
12
20
21
NAME
Darjeeling Number 1
Darjeeling Special
Assam Grade A
Assam Gold Blend
Earl Grey
English Breakfast
Irish Breakfast
IBM Red Brick Warehouse: SQL リファレンス ガイド
CREATE VIEW
2
2
2
5
5
5
5
5
5
5
5
5
5
22
30
31
0
1
10
11
12
20
21
22
30
31
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
次の文は、集約テーブルに関連付けられた事前計算ビューを作成します。
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 ユーザーズ
ガイド」を参照してください。
create view pd_qtr_view as
select qtr, year
from period
group by qtr, year
using period_qtr (qtr, year)
第 8 章 SQL 文と RISQL 拡張機能
377
CREATE VIEW
次の例は、事前計算ビューとそれに関連付けられたテーブルのデータ型には互換性が必
要であることを示します。テーブルの数値列をビューの数値列に対応させる場合、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) ビュー (AGG1_VIEW.DOLLARS、データ型 DECIMAL (13,2))
とテーブル (AGG1.DOLLARS、データ型 DECIMAL (7,2)) の関連付けされた列の
データ型は、精度落ち、オーバーフロー、またはアンダーフローを引き起こす
可能性があります。
このメッセージは、単なる警告です。テーブルおよびビューは、両方とも作成されてい
ます。
事前計算ビューを作成、選択する方法の詳しい例については、「SQL 自習ガイド」を参
照してください。また、「IBM Red Brick Vista ユーザーズ ガイド」にも事前計算ビュ
ーの例があります。
378
IBM Red Brick Warehouse: SQL リファレンス ガイド
DELETE
DELETE 文は、指定した基本テーブルから任意の行を削除します。
許可
テーブルから行を削除するユーザは、次の中で少なくとも 1 つの条件を満たしている必
要があります。
v DBA システム ロールのメンバーであること
v 明示的に付与されるかユーザが作成したロールのメンバーであることにより、
MODIFY_ANY 権限を持っていること
v テーブルの作成者であること
v テーブルに対する DELETE 特権を持っていること
構文
次に DELETE 文の構文ダイアグラムを示します。
DELETE FROM
table_name
creator.
,
USING
WHERE
search_condition
table_reference
creator.
OVERRIDE REFCHECK
table_name
行を削除するテーブル、テンポラリ テーブル、またはシノニムの名前
を指定します。 table_name にはビュー名は指定できません。テーブ
ル名を指定する場合には、そのテーブルを作成したユーザのユーザ名
を creator に指定してください。
USING table_reference
行削除の追加基準として使用するテーブルを 1 つまたは複数指定しま
す。 table-reference で指定された複数のテーブルはジョインされ、
WHERE 句で指定されたとおりに table-name から行が削除されます。
table-reference は table-name も含んでいる必要があります。このセク
ションの末尾にある例を参照してください。
USING table-reference 句は、より高いパフォーマンスをもつサブクエ
リの代用として使用します。
table-reference で指定されるテーブルは、基本テーブルまたはシノニ
ムである必要があります。
第 8 章 SQL 文と RISQL 拡張機能
379
DELETE
DELETE 操作の USING 句でターゲット テーブルに相関名が割り当
てられている場合は、FROM 句でもテーブル名そのものではなく相関
名でテーブルを指定します。たとえば、次のようになります。
delete from sales_old
using sales as sales_old, period
where...
table_reference 句の詳細については、185 ページの『テーブル参照』
を参照してください。テーブル名を指定する場合には、そのテーブル
を作成したユーザのユーザ名を creator に指定してください。
WHERE
DELETE 文の操作対象を示す検索条件を指定します。 WHERE 句を
指定しないと、すべての行がテーブルから削除されます。指定した場
合は、検索条件を満たす行のみが削除されます。検索条件からは、指
定したテーブルしか参照できません。検索条件の詳細については、39
ページを参照してください。 WHERE 句の詳細については、201 ペー
ジを参照してください。
OVERRIDE REFCHECK
DELETE 文の実行時に、参照整合性を検証しないように指示します。
参照整合性の検証を無効にするのは、主に、参照されていない行をテ
ーブルから削除する場合です。
この句は、CREATE TABLE 文で指定したデリート モードに優先し
ます。参照整合性チェックを省略すると非常に高速になりますが、デ
ータベースが不整合な状態になり、再編成による参照整合性の確認が
必要になることがあります。
OVERRIDE REFCHECK を使用すると、クエリが誤った結果を戻した
り、参照整合性違反が発生する場合があります。
使用上の注意
削除操作中の参照整合性は、テーブルの作成時に指定したデリート モードに応じて、リ
ストリクト デリート (NO ACTION) またはカスケード デリート (CASCADE) で維持
されます。複数の参照元テーブルが削除に関わり、各テーブルのデリート モードが異な
る場合は、参照整合性を保つため、全体の削除動作がリストリクト デリートになりま
す。 NO ACTION は CASCADE よりも優先され、この優先順位は参照先テーブルと参
照元テーブルに再帰的に適用されます。
DELETE 文を実行すると、事前計算ビューに対して集約処理が実行されることがありま
す。集約処理の詳細については、「IBM Red Brick Vista ユーザーズ ガイド」を参照し
てください。
重要: カスケード デリート操作については自動保守が実行されません。
380
IBM Red Brick Warehouse: SQL リファレンス ガイド
DELETE
複数の DELETE 文を実行する場合は、他のユーザによるテーブルのアクセスを制限す
る LOCK (テーブルのロック) 文を使用すると効率的になります。 LOCK テーブル文
については、424 ページの『LOCK (テーブルのロック)』を参照してください。データ
ベースの再編成と再ロード、カスケード デリートとリストリクト デリートについて
は、「管理者ガイド」を参照してください。
SELECT 文ではアウター ジョインがサポートされる (ただし、アウター ジョインは使
用しないことが強く推奨される) のに対して、DELETE 文では WHERE 句でのアウタ
ー ジョインがサポートされません。アウター ジョインが必要な場合は、USING 句で指
定してください。
USING 句では、変更するテーブルの指定には次の制限があります。
v ライト アウター ジョインで指定される左のテーブルとしては指定できません。
v レフト アウター ジョインで指定される右のテーブルとしては指定できません。
v フル アウター ジョインのどの場所にも指定できません。
DELETE 文でジョイン操作を実行する場合は、文で設定された選択基準が、ターゲット
テーブルの同じ行を複数回指定する可能性があります。この場合は、最初に選択された
ときに行が削除され、その後の指定は無視されます。行を削除すると参照整合性違反が
発生する場合は、削除できなかった行として統計にカウントされ、操作の最後に報告さ
れます。削除されなかった行と削除された行の合計は、テーブル内の行数を超えること
があります。その場合は、状況を説明するメッセージが表示されます。
DELETE 文を実行すると、事前計算ビューに対して集約処理が実行されることがありま
す。集約処理の詳細については、「IBM Red Brick Vista ユーザーズ ガイド」を参照し
てください。
例
次の 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 オプションの指定により、削除にとも
なって参照元テーブルに対する参照整合性がどのように維持されるかを示しています。
第 8 章 SQL 文と RISQL 拡張機能
381
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
)
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),
382
IBM Red Brick Warehouse: SQL リファレンス ガイド
DELETE
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)
Dim1_1 に対する削除動作で、Dim1 にはカスケード デリートが指定されていますが、
Fact2 には NO ACTION が指定されているため、すべてのテーブルについて NO
ACTION を指定した場合と同じ削除動作になります。つまり、Dim1_1 の行を参照する
Dim1 の行が、Fact2 の行によって参照される場合、Dim1_1 の行は削除されません。さ
らに、Dim1_1 の行を参照する Dim1 の行が、Fact1 の行によって参照される場合も、
Dim1_1 の行は削除されません。これは、1 つの DELETE 文に、リストリクト デリー
トとカスケード デリートを組み合わせて指定した場合は、すべての削除動作がリストリ
クト モードで実行されるためです。
プライマリ キーとフォーリン キーの従属関係にリストリクト デリート (NO ACTION)
を指定した場合は、すべての従属関係にリストリクト デリートを暗黙的に指定したこと
になります。
第 8 章 SQL 文と RISQL 拡張機能
383
DROP HIERARCHY
DROP HIERARCHY 文は、階層構造名で指定された既存の階層構造および関数従属性を
削除します。
許可
階層構造を削除するユーザは、次の中で少なくとも 1 つの条件を満たしている必要があ
ります。
v DBA システム ロールのメンバーであること
v 明示的に付与されるかユーザが作成したロールのメンバーであることにより、
DROP_ANY 権限を持っていること
v RESOURCE システム ロールのメンバーで、かつ階層構造の作成者であること
構文
次に DROP HIERARCHY 文の構文ダイアグラムを示します。
DROP HIERARCHY
hierarchy_name
例
次の DROP HIERARCHY 文は、store_market_relationship という名称の階層構造を削除
します。この階層構造が削除されると、この階層構造内のすべての関数従属性が削除さ
れるので注意してください。
drop hierarchy store_market_relationship;
階層構造の定義と削除の詳細については、「IBM Red Brick Vista ユーザーズ ガイド」
を参照してください。
384
IBM Red Brick Warehouse: SQL リファレンス ガイド
DROP INDEX
DROP INDEX 文は、指定したインデックスを削除します。 CREATE INDEX 文で作成
したインデックスと、システムが生成した B-TREE インデックスの両方を削除できま
す。
許可
テーブルに定義されたインデックスを削除するユーザは、次の中で少なくとも 1 つの条
件を満たしている必要があります。
v DBA システム ロールのメンバーであること
v 明示的に付与されるかユーザが作成したロールのメンバーであることにより、
DROP_ANY 権限を持っていること
v RESOURCE システム ロールのメンバーで、かつインデックスの作成者であること
v DROP_OWN 権限を持っていて、インデックスの作成者であること
構文
次に DROP INDEX 文の構文ダイアグラムを示します。
DROP INDEX
index_name
DROPPING SEGMENTS
KEEPING SEGMENTS
index_name
削除するインデックスの名前を指定します。 CREATE INDEX 文で作
成したインデックス、自動作成された B-TREE インデックスのどちら
も削除できます。386 ページを参照してください。
DROPPING SEGMENTS
インデックスに関連付けられている名前付きセグメントおよびデフォ
ルト セグメントを削除します。セグメントの物理格納ユニット (PSU)
は、すべて削除されます。
KEEPING SEGMENTS
インデックスに関連付けられた名前付きセグメントをそのまま残しま
す。セグメントはインデックスから切り離され、他のデータベース オ
ブジェクトにアタッチできます。デフォルト セグメントは、必ず削除
されます。
使用上の注意
DROPPING SEGMENTS、KEEPING SEGMENTS のどちらも指定されていない場合、
rbw.config ファイルの OPTION SEGMENTS パラメータで指定されているデフォルト
動作が使用されます。 rbw.config ファイルで指定されている初期デフォルト動作で
は、名前付きセグメントが保持され、デフォルト セグメントが削除されます。デフォル
ト動作は、rbw.config ファイルのパラメータで変更できます。
第 8 章 SQL 文と RISQL 拡張機能
385
DROP INDEX
テーブルを削除すると、テーブルのインデックスも自動的にすべて削除されます。
例
この文は、distribution_ix インデックスをデータベースから削除し、名前付きセグメント
をすべて残します。名前付きセグメントは、他のインデックスやテーブルにアタッチで
きます。
drop index distribution_ix
keeping segments
次の文は、TARGET インデックス tgt_ix1 と、そのインデックス セグメントをデータ
ベースから削除します。セグメントは再利用できません。
drop index tgt_ix1
dropping segments
システム生成 B-TREE インデックス の削除
DROP INDEX 文を使用して、システムが生成した B-TREE インデックスを削除する
と、次の操作が実行できなくなります。
v インデックスの対象テーブルへの行の挿入
v インデックスの対象テーブルのプライマリ キーを参照する他のテーブルへの行の挿
入
データの挿入に関する上記の制約は、テーブル データの一意性と参照整合性の制約を維
持することを目的としています。システムが生成したインデックスの削除後にデータを
挿入できるようにするには、そのテーブルのプライマリ キー インデックスを明示的に
作成してください。
IBM Red Brick Warehouse では、テーブルにあるすべてのフォーリン キーに STAR イ
ンデックスを作成し、これらのフォーリン キーがそのプライマリ キーを構成するよう
なシンプル スター スキーマ は自動的に生成されません。シンプル スター スキーマの
STAR インデックスを作成するには、システムが生成した B-TREE インデックスを削除
し、すべてのフォーリン キーをインデックス キーに指定する CREATE STAR INDEX
文を実行する必要があります。
シンプル スター スキーマの STAR インデックスを作成した場合、プライマリ キーの
B-TREE インデックスがなくても、そのインデックス付きテーブルへ行を挿入できま
す。ただし、STAR インデックスが維持できるのは一意性制約のみであり、参照整合性
の維持はできません。このため、参照先テーブルのプライマリ キーに B-TREE インデ
ックスがない限り、STAR インデックスの定義されたテーブルのプライマリ キーを参照
する他のテーブルには、行を挿入できません。
行が挿入できないテーブルは、次のとおりです。
386
IBM Red Brick Warehouse: SQL リファレンス ガイド
DROP INDEX
v プライマリ キーの B-TREE インデックスが削除された参照先 テーブル。ただし、
そのプライマリ キーに STAR インデックスが作成されている場合は、行を挿入でき
ます。
v プライマリ キーの B-TREE インデックスが削除されたテーブルを参照する参照元
テーブル。参照先テーブルのプライマリ キーに STAR インデックスが作成されてい
ても、行は挿入できません。
再作成されたインデックスのキー列の順序:
削除されたシステム生成 B-TREE インデックスと置き換えるために、複数の列から成る
プライマリ キーに B-TREE インデックスまたは STAR インデックスを作成する場合
は、新しいインデックスのキー列の順序は、CREATE INDEX 文で指定した順序となり
ます。システム生成インデックスの順序は、CREATE TABLE 文で指定した順序となり
ます。
「再作成」されたインデックス内のキー列の順序はパフォーマンスに多大な影響を与え
ます。パフォーマンスを考慮したインデックス付けの詳細については、「管理者ガイ
ド」を参照してください。
インデックスの作成については、316 ページの『CREATE INDEX』を参照してくださ
い。
第 8 章 SQL 文と RISQL 拡張機能
387
DROP MACRO
DROP MACRO 文は、マクロを削除します。
許可
PUBLIC マクロを削除するユーザは、次の中で少なくとも 1 つの条件を満たしている必
要があります。
v DBA システム ロールのメンバーであること
v 明示的に付与されるかユーザが作成したロールのメンバーであることにより、
DROP_ANY 権限か PUBLIC_MACROS 権限を持っていること
プライベート マクロを削除するユーザはマクロの作成者であり、次の中で少なくとも 1
つの条件を満たしている必要があります。
v DBA システム ロールか、RESOURCE システム ロールのメンバーであること
v 明示的に付与されるかユーザが作成したロールのメンバーであることにより、
DROP_ANY 権限か DROP_OWN 権限を持っていること
テンポラリ マクロは、現在 IBM Red Brick Warehouse データベースに接続しているユ
ーザであればどのユーザでも削除できます。
構文
次に DROP MACRO 文の構文ダイアグラムを示します。
DROP
MACRO
macro_name
TEMPORARY
PUBLIC
使用上の注意
ビューを作成すると、そのビューで参照しているマクロが展開され、ビューの SELECT
文が効率的な「内部」形式で格納されます。このため、既存のビューが参照するマクロ
を変更しても、ビューには変更が反映されません。ビューの作成後にマクロを修正また
は削除した場合、変更をビューに反映させるには、ビューを削除し、再作成してくださ
い。
DROP MACRO 文のキーワードは、対応する CREATE MACRO 文に使用したキーワー
ドと一致させてください。たとえば、テンポラリ マクロを削除する場合は、同名のマク
ロ (パブリック マクロやプライベート マクロ) が他になくても、TEMPORARY キーワ
ードを DROP MACRO 文に指定する必要があります。
388
IBM Red Brick Warehouse: SQL リファレンス ガイド
DROP ROLE
DROP ROLE 文は、指定したロールを削除します。
許可
ロールを削除するユーザは、次の中で少なくとも 1 つの条件を満たしている必要があり
ます。
v DBA システム ロールのメンバーであること
v 明示的に付与されるかユーザが作成したロールのメンバーであることにより、
ROLE_MANAGEMENT 権限を持っていること
構文
次に DROP ROLE 文の構文ダイアグラムを示します。
DROP ROLE
role_name
role_name
削除するロールの名前を指定します。システム ロールは削除できませ
ん。
使用上の注意
ロールを削除しても、そのロールのタスク権限やオブジェクト特権がデータベース ユー
ザに残っている場合があります。同じ権限や特権がそのユーザか、そのユーザがメンバ
ーである他のロールに明示的に付与されている場合がこれにあたります。
例
次の文は、temp ロールを削除します。
drop role temp
第 8 章 SQL 文と RISQL 拡張機能
389
DROP SEGMENT
DROP SEGMENT 文は、指定したセグメントをデータベースから削除し、そのセグメン
トに関連したすべての物理格納ユニット (PSU) も削除します。
許可
セグメントを削除するユーザは、次の中で少なくとも 1 つの条件を満たしている必要が
あります。
v DBA システム ロールのメンバーであること
v 明示的に付与されるかユーザが作成したロールのメンバーであることにより、
DROP_ANY 権限を持っていること
v RESOURCE システム ロールのメンバーで、かつセグメントの作成者であること
v DROP_OWN 権限を持っていて、セグメントの作成者であること
構文
次に DROP SEGMENT 文の構文ダイアグラムを示します。
DROP SEGMENT
segment_name
使用上の注意
セグメントを削除すると、そのセグメントのファイルがすべて削除されます。 DROP
SEGMENT 文で削除するセグメントは、オフラインにし、切り離しておく必要がありま
す。
セグメントをオフラインにするには ALTER SEGMENT 文を使用します。セグメントは
次の条件で切り離されます。
v ALTER SEGMENT 文による切離し
v テーブルやインデックスが削除されていて、セグメントが削除されていない場合
例
次の各文はそれぞれ、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
390
IBM Red Brick Warehouse: SQL リファレンス ガイド
DROP SYNONYM
DROP SYNONYM 文は、基本テーブルに指定したシノニムを削除します。テーブル自
体は削除されません。
許可
テーブルに定義されたシノニムを削除するユーザは、次の中で少なくとも 1 つの条件を
満たしている必要があります。
v DBA システム ロールのメンバーであること
v 明示的に付与されるかユーザが作成したロールのメンバーであることにより、
DROP_ANY 権限を持っていること
v RESOURCE システム ロールのメンバーで、かつシノニムの作成者であること
v DROP_OWN 権限を持っていて、シノニムの作成者であること
構文
次に DROP SYNONYM 文の構文ダイアグラムを示します。
DROP SYNONYM
synonym_name
creator.
synonym_name
削除するシノニムの名前を指定します。ビューが参照しているシノニ
ムは削除できません。シノニム名を指定する場合には、そのシノニム
を作成したユーザのユーザ名を creator に指定してください。
使用上の注意
テーブルに定義されたシノニムを削除しても、基本テーブルには影響ありません。
第 8 章 SQL 文と RISQL 拡張機能
391
DROP TABLE
DROP TABLE 文は、指定したテーブルをデータベースから削除し、そのテーブルに定
義されたインデックスと、そのテーブルを参照する特権やシノニムを削除します。
許可
テーブルを削除するユーザは、次の中で少なくとも 1 つの条件を満たしている必要があ
ります。
v DBA システム ロールのメンバーであること
v 明示的に付与されるかユーザが作成したロールのメンバーであることにより、
DROP_ANY 権限を持っていること
v RESOURCE システム ロールのメンバーで、かつテーブルの作成者であること
v DROP_OWN 権限を持っていて、テーブルの作成者であること
構文
次に DROP TABLE 文の構文ダイアグラムを示します。
DROP TABLE
table_name
creator.
table_name
DROPPING SEGMENTS
KEEPING SEGMENTS
基本テーブルまたはテンポラリ テーブルの名前を指定します。シノニ
ムやビューの名前は指定できません。テーブル名を指定する場合に
は、そのテーブルを作成したユーザのユーザ名を creator に指定して
ください。
次の参照先となっているテーブルは、削除できません。
v 他のテーブルのフォーリン キー
v ビュー
フォーリン キーやビューの参照先テーブルを削除するには、そのテー
ブルを参照しているすべてのテーブルやビューを削除しておきます。
または、301 ページに示すように、ALTER TABLE...DROP
CONSTRAINT 文を使用してフォーリン キー参照を削除しておきま
す。
DROPPING SEGMENTS
テーブルに関連したすべてのデフォルト セグメントと名前付きセグメ
ントを削除します。テーブルに関連したセグメントには、テーブルに
アタッチしたセグメントと、対応するインデックスが含まれます。セ
グメントの物理格納ユニット (PSU) は、すべて削除されます。
KEEPING SEGMENTS
テーブルに関連した、すべての名前付きセグメントを残します。セグ
392
IBM Red Brick Warehouse: SQL リファレンス ガイド
DROP TABLE
メントはテーブルから切り離され、他のデータベース オブジェクトに
割り当てることができます。デフォルト セグメントは、必ず削除され
ます。
使用上の注意
DROPPING SEGMENTS、KEEPING SEGMENTS のどちらも指定されていない場合、
rbw.config ファイルの OPTION SEGMENTS パラメータで指定されているデフォルト
動作が使用されます。 OPTION SEGMENTS が指定されていない場合には、名前付きセ
グメントは保持され、デフォルト セグメントは削除されます。デフォルト動作は、
rbw.config ファイルのパラメータで変更できます。
デフォルト セグメントはユーザが定義したセグメントとは異なり、テーブルを削除する
と削除されます。
削除するテーブルに破損したセグメントが含まれている (RBW_SEGMENTS システム
テーブルに情報がある) 場合は、DROP TABLE...KEEPING SEGMENTS 文が失敗しま
す。テーブルを削除する前に、破損したセグメントを切り離し、削除しておいてくださ
い。ただし、DROP TABLE...DROPPING SEGMENTS 文は、破損したセグメントがテー
ブルに含まれていても正常に実行されます。
例
次の文は、Market_Temp テーブルとそのインデックスをテーブルから削除しますが、名
前付きセグメントはすべて残します。名前付きセグメントは、他のテーブルやインデッ
クスにアタッチできます。
drop table market_temp
keeping segments
第 8 章 SQL 文と RISQL 拡張機能
393
DROP VIEW
DROP VIEW 文は、指定したビューをデータベースから削除します。
許可
ビューを削除するユーザは、次の中で少なくとも 1 つの条件を満たしている必要があり
ます。
v DBA システム ロールのメンバーであること
v 明示的に付与されるかユーザが作成したロールのメンバーであることにより、
DROP_ANY 権限を持っていること
v RESOURCE システム ロールのメンバーで、かつビューの作成者であること
v DROP_OWN 権限を持っていて、ビューの作成者であること
構文
次に DROP VIEW 文の構文ダイアグラムを示します。
DROP VIEW
view_name
creator.
使用上の注意
データベースからビューを削除しても、基本テーブルには影響ありません。同様に、集
約テーブルに関連付けられた事前計算ビューを削除しても、集約テーブルには影響あり
ません。
他のビューが参照しているビューは、削除できません。
ビュー名を指定する場合には、そのビューを作成したユーザのユーザ名を creator に指
定してください。
394
IBM Red Brick Warehouse: SQL リファレンス ガイド
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 章 SQL 文と RISQL 拡張機能
395
EXPLAIN
EXPLAIN コマンドは、指定したクエリについて、パフォーマンス チューニングに使用
できる内部クエリ処理情報を表示します。特に指定しない限り、この情報は標準出力の
画面に表示されます。データベース オブジェクト名以外は、出力データは常に英語で表
示されます。出力データの内容の詳細については、「クエリ パフォーマンス ガイド」
を参照してください。
構文
次に EXPLAIN 文の構文ダイアグラムを示します。
EXPLAIN
SQL_statement
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 つのクエリについて複数の処理方法が可能な場合は、EXPLAIN を指定した文を実行
すると、すべての処理方法についての情報が表示されます。
使用上の注意
EXPLAIN 文は、クエリ パフォーマンスの改善の方法を決定する場合に有効です。たと
えば、STAR インデックスを活用し、STAR join 処理によってテーブルをジョインする
クエリは高速になります。 EXPLAIN 文を使用すると、クエリに使用されるジョイン処
理のタイプを判断できるため、既存インデックスを最大限に活用するようにクエリをリ
ライトしたり、クエリを高速化するインデックスをスキーマに追加できます。
EXPLAIN 文の出力データを、クエリ実行時に出力される実際の統計値や情報と比較す
る場合は、EXPLAIN 文を SET STATS INFO 文と併用します。 SET STATS INFO の
詳細については、511 ページの『SET STATS』を参照してください。
EXPLAIN 出力の例については、「クエリ パフォーマンス ガイド」を参照してくださ
い。
396
IBM Red Brick Warehouse: SQL リファレンス ガイド
EXPORT
データベース管理者とアプリケーション開発者は、EXPORT 文を使用して、任意のリザ
ルト セットをディスクのファイルに効率的にエクスポートできます。
ユーザはクエリを使用してリザルト セットを定義し、出力ファイルのフォーマットとフ
ァイル名を指定します。その後 EXPORT 文は、出力ファイル、出力ファイルを記述す
るスクリプト (TMU スクリプト)、エクスポート先テーブルを記述する DDL スクリプ
トを生成します。オプションでロケールを定義することもできます。生成された DDL
文はエクスポート先テーブルを作成するために使用でき、TMU スクリプトはエクスポ
ートしたデータをテーブルにロードするために使用できます。
許可
EXPORT 文を実行するユーザは、次のいずれかの権限を持っている必要があります。
v DBA 権限
v EXPORT タスク権限
構文
次に EXPORT 文の構文ダイアグラムを示します。
EXPORT TO
output_file_specification
DDLFILE
file_specification
TMUFILE
file_specification
FORMAT
EXTERNAL
EXTERNAL VARIABLE
INTERNAL
BINARY
DELIMITED
BY ’c’
ENCLOSED BY
XML
NAMESPACE ’namespace_uri’
( select_statement
’s’
)
output_file_specification
出力ファイルの名前とパスを指定します。パス名の最大長は、プラッ
トフォームの許容最大長 (通常 1000 バイト) から 4 文字引いた長さ
です。これにより、.DDL または .TMU ファイル拡張子を追加でき、最
大 999 のオーバーフロー ファイルを作成できます。ファイル名は一
重引用符で囲んでください。
output_file_specification は、完全に修飾されたパスとファイル名、相対
パスとファイル名、パイプ指定のいずれでも構いません。相対パスを
第 8 章 SQL 文と RISQL 拡張機能
397
EXPORT
使用した場合は、rbw.config で指定されたパスの相対パスか、SET
EXPORT_DEFAULT_PATH 文で確立されたパスで指定されたパスの相
対パスが使用されます。最初の文字をパイプ記号 (|) にした場合は、
データがパイプに書き出されます。
パイプ記号を使用する場合は、必ず 一重引用符の直後の 1 文字目に
使用してください。パイプ記号の前に (スペースを含む) 別の文字が
挿入されていると、データはパイプでなくファイルにエクスポートさ
れます。指定されたパスが存在している必要があります。
指定パスが存在し、username がファイルへの書込み許可を持っている
必要があります。システムが指定されたファイルをエクスポート用に
作成します。セキュリティ上の理由から、このファイルは上書きでき
ません。同名のファイルがすでに存在する場合は、エラー メッセージ
が戻されます。既存のファイルを削除してから EXPORT 文を再実行
してください。
EXPORT_MAX_FILE_SIZE オプションが設定されている場合、各デー
タ ファイルの名前に 3 桁のサフィックスが付加されます。このよう
なファイルは最大 1000 個作成できます。
ヒント: デフォルトでは、出力ファイル サイズの上限は設定されてい
ません。 EXPORT_MAX_FILE_SIZE オプションが設定され
ている場合に限り、オーバーフロー ファイルが作成されま
す。このオプションの詳細については、457 ページの『SET
EXPORT_MAX_FILE_SIZE』を参照してください。
EXPORT 文の出力を、TMU LOAD DATA 操作にパイプを使用して
送るには、実行可能ファイル rb_tmu に引数 -d を指定する必要があ
ります。
実行可能ファイル rb_tmu と rb_ptmu の完全な構文については、「テ
ーブル マネジメント ユーティリティ リファレンス ガイド」を参照
してください。
クエリがリザルト セットを戻さなかった場合は、出力ファイルは生成
されません。
DDLFILE file_specification
DDL ファイルの名前を指定します。このファイルは、TMU UNLOAD
または GENERATE 文で作成されるファイルと同じです。
v DDLFILE は、出力リザルト セットを定義する検索項目リスト内の
各列に一意の列名を与えます。
v EXPORT コマンドは、列に DEFAULT 句を生成しません。
398
IBM Red Brick Warehouse: SQL リファレンス ガイド
EXPORT
file_specification を指定しない場合は、出力ファイルに指定された名前
とパス、およびサフィックス .DDL で名前が生成されます。データが
パイプに出力される場合は、この指定は意味を持たず、この指定への
参照も無視されます。
ロケールを指定した場合は、エクスポート操作によって、DDLFILE
(および TMUFILE) が同じロケールに作成されます。必要に応じてデ
ータの変換が行われます。
式または集約関数が指定されている場合を除き、このファイル内のテ
ーブルには GENERATED_TABLE という名前が付けられ、列にはク
エリの検索項目リストで使用されている名前が付けられます。式また
は集約関数が指定されている場合は、列の名前は
GENERATED_COLNAME_XX になります。 XX は検索項目リスト内
の列位置を表します。
TMUFILE file_specification
TMU ファイルの名前を指定します。このファイルは、TMU
UNLOAD または GENERATE 文で生成されるファイルと同じです。
ただし出力データのすべての検索項目リストの列に一意の列名が付け
られます。
file_specification を指定しない場合は、出力ファイルに指定された名前
とパス、およびサフィックス .TMU で名前が生成されます。データが
パイプに出力される場合は、この指定は意味を持たず、この指定への
参照も無視されます。
ロケールを指定した場合は、エクスポート操作によって、TMUFILE
(および DDLFILE) が同じロケールで作成されます。必要に応じてデ
ータの変換が行われます。
FORMAT
エクスポートされたデータのフォーマットを指定します。
EXTERNAL フォーマットは、同じプラットフォームまたは別のプラ
ットフォーム上で、TMU を使用して再ロードできるファイルにデー
タをエクスポートします。再ロード中、末尾の空白はデータから削除
されます。フォーマットを指定しない場合、出力ファイルのフォーマ
ットはデフォルトで EXTERNAL となります。
EXTERNAL VARIABLE フォーマットは、同じプラットフォームまた
は別のプラットフォーム上で、TMU を使用して再ロードできるファ
イルにデータをエクスポートします。再ロード中、末尾の空白は保持
され、テーブル内にロードされます。
INTERNAL
INTERNAL フォーマットは、データをバイナリ ファイルにエクスポ
ートします。このデータは、同じプラットフォームのシステム上での
み再ロードできます。たとえば、このフォーマットのデータを HP
第 8 章 SQL 文と RISQL 拡張機能
399
EXPORT
9000 からエクスポートし、AIX RISC System/6000 に再ロードするこ
とはできません。また、32 ビットシステムからデータをエクスポート
して、64 ビットシステムに再ロードすることはできません。
INTERNAL フォーマット データの再ロード中、末尾の空白は保持さ
れ、目的のテーブルにロードされます。
INTERNAL と EXTERNAL は、TMU UNLOAD コマンドでサポート
されるのと同じフォーマットです。これらのフォーマットの詳細につ
いては、「テーブル マネジメント ユーティリティ リファレンス ガ
イド」を参照してください。
BINARY
BINARY フォーマットは、整数 (INTEGER) 型、浮動小数点データ
型、実数 (DOUBLE PRECISION) 型については各プラットフォームに
固有の表現形式、その他のデータ型では ASCII (文字) 表現形式を使
用するファイルを生成します。このデータは、同じプラットフォーム
上の別のアプリケーションにデータを移植するために使用されます。
再ロード中、末尾の空白はデータから削除されます。
DELIMITED BY ’c’
DELIMITED フォーマットは、各列値を区切り文字で区切るように指
定します。次の規則が適用されます。
v 区切り文字はシングルバイト文字またはマルチバイト文字 1 つで
す。デフォルトの区切り記号はパイプ (|) です。代替区切り文字を
指定するには、オプションの BY ’c’ 指定、SET
EXPORT_DELIMITER コマンド (456 ページを参照) または
rbw.config ファイルの EXPORT_DELIMITER パラメータを使用し
ます。
v エクスポート区切り文字には、ストリング区切り文字 (ENCLOSED
BY 指定) と同一の文字、および以下の文字は使用できません。
– 小数点 (.) またはその他の基数文字
– 制御文字 (取消し文字またはエスケープ文字など)
– 空白文字 (シングルバイトまたはマルチバイトの空白、改行、タ
ブなど)
– 一重引用符 (’)
DELIMITED フォーマットでエクスポートされた文字 (CHAR) 型列と
可変長文字 (VARCHAR) 型列には、末尾の空白文字は充填されませ
ん。したがって、各出力行の長さが異なることがあります。ただし、
可変長文字 (VARCHAR) 型列に末尾の空白文字が格納されている場合
は、その空白文字列は切り捨てられずにそのまま残されます。
ENCLOSED BY ’s’
エクスポートされる文字データおよび日付時間データのストリング区
400
IBM Red Brick Warehouse: SQL リファレンス ガイド
EXPORT
切り文字としてシングルバイト文字またはマルチバイト文字を指定し
ます。ストリング区切り文字を指定してエクスポートされたデータ
は、区切りフォーマットのデータベースにロードできます。エクスポ
ートするデータのストリング区切り文字を定義できるために、
DELIMITED BY 句で定義されているエクスポート区切り文字が意図
せずに含まれていたデータを再ロードすることがあります。この具体
的なシナリオについては、 405 ページの『ストリング区切り文字列を
使用する区切りフォーマットでのエクスポート』を参照してくださ
い。
DELIMITED BY に指定する文字についてすでに定義されている制約
事項は、ENCLOSED BY に指定する文字にも適用されます。
XML
XML フォーマットは、XML (Extensible Markup Language) 出力ファ
イルを生成します。この XML ファイルのマークアップ タグは次の
命名規則を使用します。
v Root: <GENERATED_x005f_TABLE> および
</GENERATED_x005f_TABLE>
v レコード内で繰り返し使用されるブロック構造: <ROW> および
</ROW>
v 名前付き列: <column_name> および </column_name>
v 無名列 (エイリアスが設定されていない式および集約関数):
<GENERATED_x005f_COLNAME_x005f_xx> および
</GENERATED_x005f_COLNAME_x005f_xx>
ここで xx は選択されたリスト内で名前のない列の位置を示しま
す。これらの命名規則については、403 ページを参照してくださ
い。
これらのマークアップ タグはカスタマイズできませんが、出力ファイ
ルの編集は可能です。
XML ファイルには標準のヘッダ情報も含まれます。これは、XML の
バージョン文字列、エンコード (コード セット)、文書型定義 (DTD)
など、XML ドキュメントの内容モデルを記述する通常の情報です。
IBM Red Brick Warehouse がサポートするコード セットとそれに対
応する XML のエンコードについては、インストール CD のリリー
ス ノート ディレクトリ内の locales.pdf ファイルを参照してくださ
い。
他の EXPORT データ ファイルとは異なり、XML 出力には、ファイ
ルを生成した EXPORT コマンドを示すクエリ テキストおよびクライ
アント ロケールが含まれます。クエリ テキストとクライアント ロケ
ールは、DTD セクションの後に、コメントとして出力されます。
第 8 章 SQL 文と RISQL 拡張機能
401
EXPORT
XML フォーマットの EXPORT 文により、DDL ファイルおよび
TMU ファイルの作成も行われます。 DDL ファイルのフォーマット
は XML の場合も他のフォーマットと同様です。398 ページを参照し
てください。 TMU ファイルは列を定義するときに特別の XML パス
構造を使用します。「テーブル マネジメント ユーティリティ リファ
レンス ガイド」を参照してください。
NAMESPACE ’namespace_uri’
デフォルト ネーム スペース URI を指定します。この URI は、
XML 出力ファイルの root GENERATED_x005f_TABLE エレメント内
部に組み込まれます。root エレメントを含むすべてのエレメントは、
このデフォルト ネーム スペースに属しています。
NAMESPACE 構文を指定しない場合、または空のネーム スペース (’
’) を指定する場合には、GENERATED_x005f_TABLE にはデフォルト
URI は組み込まれず、XML エレメントはどのネーム スペースにも属
しません。XML ネーム スペースの詳細については、「Table
Management Utility リファレンス ガイド」を参照してください。
select_statement
214 ページで定義されているとおりに、任意の有効な SELECT 文を
指定します。文は必ず括弧で囲んでください。クエリ結果は指定した
フォーマットで出力ファイルにエクスポートされ、必要に応じてクラ
イアントのロケールに変換されます。
使用上の注意
出力ファイルのフォーマットによって、エクスポート後のデータの再ロード先と再ロー
ド方法が限定されます。
v INTERNAL フォーマットは、同じプラットフォーム上で動作している Red Brick デ
ータベースにしか再ロードできません。エクスポート先テーブルのデータ型は、エク
スポートする列のデータ型と完全に合致している必要があります。エクスポートする
データの Dollars フィールドが DEC (7,2) の場合は、エクスポート先の列も DEC
(7,2) である必要があり、DEC (7,4) や DEC (10,2) であってはなりません。 HP
9000 から INTERNAL フォーマットでエクスポートした場合は、データを AIX
RISC/6000 上で動作する Red Brick データベースに再ロードすることはできません。
v EXTERNAL フォーマットはより高い移植性を持ちます。別のプラットフォームに移
行する必要がある場合は、このフォーマットを使用してください。このフォーマット
は、サード パーティ製アプリケーションとともに使用することもできます。ただし
これらのアプリケーションで NULL 情報を使用するのは難しい場合があります。
v BINARY フォーマットは EXTERNAL フォーマットよりコンパクトです。このフォ
ーマットは、同じプラットフォームで使用する場合に限り、サード パーティ製アプ
リケーションとともに使用できます。このエクスポート データにも NULL 情報が含
まれます。
402
IBM Red Brick Warehouse: SQL リファレンス ガイド
EXPORT
XML 出力ファイルでの特殊文字および区切り識別子の処理
EXPORT コマンドを使用してクエリ結果を XML ファイルに出力する場合、一部の文
字は次の表に示すように置き換えられます。
クエリが戻す文字
XML ファイルでの置き換え
制御文字 (ASCII コード 32 未満の文字で、
9 (Tab)、10 (改行)、13 (CR) を除く)
左山形括弧 (<)
右山形括弧 (>)
アンパーサンド (&)
二重引用符 (’’)
一重引用符 (’)
疑問符 (?)
&lt;
&gt;
&amp;
&quot;
&apos;
区切り表記の列名やテーブル名、および「xml」で始まる識別子は、標準的な方法でマッ
ピングされます。EXPORT 形式で生成された、アンダースコア (_) を含むテーブル名と
列名が、このマッピングの対象となります。
SQL 名 (例)
XML ファイルおよび
TMU コントロール ファイルでの置き換え
“col name”
“emp:id”
xmlcolumn
ORDER_NO
GENERATED_TABLE
GENERATED_COLNAME_2
col_x0020_name
emp_x003a_id
_xffff_xmlcolumn
ORDER_x005f_NO
GENERATED_x005f_TABLE
GENERATED_x005f_COLNAME_x005f_2
このマッピングは XML ファイルおよび TMU コントロール ファイル内の XML パス
のみに影響し、生成された DDL ファイルではクエリで指定された元の列名およびテー
ブル名が保持されます。
例
次の例に、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
第 8 章 SQL 文と RISQL 拡張機能
403
EXPORT
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);
区切りフォーマットでのエクスポート
次の 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 は正常に終了しました。
1 個のデータファイルが /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|
404
IBM Red Brick Warehouse: SQL リファレンス ガイド
EXPORT
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|
ストリング区切り文字列を使用する区切りフォーマットでのエクスポート
次の EXPORT 文の出力は、パイプを使用して、区切りフォーマットの
export_output_delimited ファイルに送られます。このファイルではエクスポート区切り文
字としてハイフン (-) が使用されます。データ自体にハイフンが含まれているため
(t-shirt や pre-packed など)、EXPORT 文でストリング区切り文字も定義します。このよ
うに定義することで、EXPORT操作により生成される TMU コントロール ファイルを
使用して出力ファイルを再ロードできます。
export to ’export_output_delimited’
format delimited by ’-’ enclosed by ’"’
(select dealkey, order_type, order_desc from orders
where dealkey < 2)
DEALKEY
ORDER_TYPE
ORDER_DESC
** INFORMATION ** (8755) EXPORT は正常に終了しました。
1 個のデータファイルが /local/spill/export_output_delimited* に作成されました。
次のリザルト セットは、出力ファイルを示します。
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"-
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) 1 行を挿入しました。
EXPORT コマンドは次のとおりです。
RISQL> export to ’test1_orders’
> format xml namespace ’http://www.taxes-r-us.com/taxns’
> (select * from orders);
ORDER_NO
ORDER_DATE CUST_NUM
DOLLARS
** INFORMATION ** (8755) EXPORT は正常に終了しました。
1 個のデータファイルが test1_orders* に作成されました。
RISQL>
XML データ、DDL、TMU の 3 つの出力ファイルは次のとおりです。
第 8 章 SQL 文と RISQL 拡張機能
405
EXPORT
brick % more test1_orders
<?xml version="1.0" encoding="us-ascii"?>
<!-- The Client Locale was "English_UnitedStates.US-ASCII@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 xmlns="http://www.taxes-r-us.com/taxns">
<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));
brick % 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) );
406
IBM Red Brick Warehouse: SQL リファレンス ガイド
GRANT (許可とロール)
GRANT 文は、DBA システム ロール、RESOURCE システム ロール、ユーザが作成し
たロール、または個別のタスク権限をデータベース ユーザまたはロールに付与します。
権限やロールが付与されるデータベース ユーザを GRANT CONNECT 文によって作成
し、パスワードを割り当てておく必要があります。
許可
GRANT 文を使用するユーザは、次の中で少なくとも 1 つの条件を満たしている必要が
あります。
v DBA システム ロールのメンバーであること
v ROLE_MANAGEMENT 権限が明示的に付与されるか、またはユーザが作成したロー
ルのメンバーであることによりこの権限を持っていること
DBA のメンバーと、ROLE_MANAGEMENT タスク権限を持っているユーザは、すべて
のタスク権限を自分および他のユーザに付与できます。
構文
次に、許可とロールを付与する GRANT 文の構文ダイアグラムを示します。
,
GRANT ,
DBA
RESOURCE
authorization
role_name
TO db_username
role_name
DBA
TO 句に指定したデータベース ユーザまたはユーザが作成したロール
に、DBA システム ロールを付与します。指定したユーザおよびロー
ルは、DBA システム ロールのメンバーになり、すべての DBA タス
クを実行できるようになります。 DBA システム ロールについて
は、408 ページの『DBA タスク権限』を参照してください。
RESOURCE
TO 句に指定したデータベース ユーザまたはユーザが作成したロール
に、RESOURCE システム ロールを付与します。指定したユーザおよ
びロールは、RESOURCE システム ロールのメンバーになり、すべて
の RESOURCE タスクを実行できるようになります。 RESOURCE シ
ステム ロールについては、409 ページの『RESOURCE タスク権限』
を参照してください。
authorization
TO 句に指定したデータベース ユーザおよびロールに、タスク権限を
付与します。タスク権限はシステムが定義し、データベースに対して
各操作を実行する権限を与えるものです。タスク権限の一覧と定義に
ついては、408 ページの『システム ロールとタスク権限』を参照して
ください。
第 8 章 SQL 文と RISQL 拡張機能
407
GRANT (許可とロール)
role_name
TO 句に指定したデータベース ユーザとロールに付与する、ユーザが
作成したロールを指定します。指定したユーザおよびロールには、付
与するロールに定義されたすべてのタスク権限が与えられます。
TO db_username 指定したタスク権限およびロールが付与される、既存のデータベース
ユーザを指定します。直接のメンバーになれるのは、データベース ユ
ーザ当たり 16 個のロールまでです。ただし、間接的に付与されるロ
ールの数には制限がありません。
TO role_name
指定したタスク権限およびロールが付与される、ユーザが作成したロ
ールを指定します。システム ロール (DBA または RESOURCE) は、
変更できないため指定できません。
システム ロールとタスク権限
システムには CONNECT、RESOURCE、および DBA という 3 つのシステム ロールが
あります。 CONNECT システム ロールは、ユーザがデータベースに接続することを許
可し、限られた権限を与えます。 RESOURCE および DBA のシステム ロールは、シ
ステムが定義した複数のタスクをユーザが実行することを許可します。
DBA タスク権限
DBA システム ロールに定義されたタスク権限は、次のとおりです。各タスク権限は個
別に付与できます。
タスク権限
定義
ACCESS_ADVISOR_INFO
Vista Advisor テーブルの情報にアクセスします。
ACCESS_ANY
すべてのデータベース オブジェクトからデータを検索し、システム
テーブルのプライベート マクロなどのプライベート ユーザ情報にア
クセスできます。
ACCESS_SYSINFO
動的統計テーブル (DST) にある、データベース動作の統計を検索でき
ます。動的統計テーブルについては、「管理者ガイド」を参照してく
ださい。
ALTER_ANY
列、インデックス、マクロ、セグメント、シノニム、テーブル、ビュ
ーを変更できます。
ALTER_SYSTEM
ALTER SYSTEM 文を実行し、データベース管理操作を実行できま
す。
BACKUP_DATABASE
データベースをバックアップします。
CREATE_ANY
408
別のユーザのリソースを使用するオブジェクトなど、任意のオブジェ
IBM Red Brick Warehouse: SQL リファレンス ガイド
GRANT (許可とロール)
クトを作成できます。たとえば、別のユーザのテーブルにインデック
スを作成したり、別のユーザのセグメントに常駐するテーブルを作成
したりできます。
DROP_ANY
すべてのユーザが作成したオブジェクトを削除できます。
EXPORT
任意のクエリの結果をデータ ファイルにエクスポートできます。
GRANT_TABLE データベース ユーザおよびロールに、オブジェクト特権を付与できま
す。
IGNORE_QUIESCE
静止状態のデータベースにアクセスできます。
LOCK_DATABASE
データベースをロックできます。
MODIFY_ANY
データを挿入、更新、削除、ロードできます。
OFFLINE_LOAD 作業用セグメントを使用してオフラインロードを行い、セグメントを
同期させることができます。
PUBLIC_MACROS
PUBLIC マクロを作成および削除できます。
REORG_ANY
テーブルとインデックスを再編成できます。
RESTORE_DATABASE
データベースを復元できます。
ROLE_MANAGEMENT
ロールを作成、削除、付与、取消し、変更できます。
TEMP_RESOURCE
テンポラリ テーブルを作成できます。
UPGRADE_DATABASE
データベースをアップグレードできます。
USER_MANAGEMENT
GRANT CONNECT を使用してデータベース ユーザを作成したり、
パスワードを変更します。 REVOKE CONNECT によるデータベース
ユーザの削除、ALTER USER または GRANT CONNECT を使用し
て、ユーザ セッションのデフォルト優先順位を指定できます。
RESOURCE タスク権限
RESOURCE システム ロールに定義されたタスク権限は、次のとおりです。各タスク権
限は個別に付与できます。
第 8 章 SQL 文と RISQL 拡張機能
409
GRANT (許可とロール)
タスク権限
定義
ALTER_OWN
自分の作成したインデックス、マクロ、セグメント、シノニム、テー
ブル、ビューを変更できます。
ALTER_TABLE_INTO_ANY
自分の作成したテーブルを他のユーザのセグメントに変更できます。
CREATE_OWN
自分の作成したオブジェクト (インデックス、プライベート マクロ、
セグメント、シノニム、テーブル、ビュー) を作成できます。
DROP_OWN
自分の作成したオブジェクトを削除できます。
GRANT_OWN
自分の作成したオブジェクトに対するオブジェクト特権を、他のユー
ザに付与できます。
使用上の注意
v GRANT 文でシステム ロールを付与されたデータベース ユーザは、そのロールの直
接のメンバーになります。
v システム ロールを、GRANT 文や REVOKE 文で変更または削除することはできま
せん。
v GRANT 文でロールを付与されたデータベース ユーザは、そのロールの直接のメンバ
ーになります。
v CREATE ROLE 文に指定されたデータベース ユーザは、付与されたロールの直接の
メンバーになります。
v 他のロールを付与されたロールのメンバーであるデータベース ユーザまたはユーザ
が作成したロールは、付与されたロールの間接的なメンバーになります。
たとえば、Role1 が Role2 に付与されると、Role2 のメンバーは、Role1 の間接的な
メンバーになり、Role1 に定義されたすべてのタスク権限とオブジェクト特権を取得
します。
データベース ユーザおよびユーザが作成したロールが、間接的なメンバーになれる
ロールの数には制限がありません。
v データベース ユーザおよびユーザが作成したロールには、CREATE_ANY などのタ
スク権限を個別に付与できます。
v ユーザやロールが直接のメンバーになれるロールの数は 16 までです。 TO 句に指定
したユーザやロールが、すでに 16 個のロールの直接メンバーになっている場合は、
それ以上のメンバーにはなれません。
v データベース ユーザは、直接または間接的にロールのメンバーになることにより、
タスク権限を付与されます。
v ユーザが作成したロール、システム ロール、タスク権限は、1 つの GRANT 文で付
与できます。
410
IBM Red Brick Warehouse: SQL リファレンス ガイド
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 に直接的に付与されています。sonia は
temp ロールを付与されている dba_junior のメンバーであるため、temp ロールが sonia
に間接的に付与されていることになります。
次の文は、RESOURCE システム ロールを management ロールに付与します。
management ロールのメンバーは、RESOURCE システム ロールの間接的なメンバーに
なり、RESOURCE システム ロールのすべてのタスク権限を取得します。
grant resource to management
第 8 章 SQL 文と RISQL 拡張機能
411
GRANT CONNECT
GRANT CONNECT 文は、データベース ユーザ名の作成とパスワードの割り当てまた
は変更を行い、オプションで、DBA システム ロール、RESOURCE システム ロール、
ユーザが作成したロール、タスク権限をユーザに付与する文です。
許可
データベース名の作成、パスワードの割当て、ユーザ優先順位の割当てを行うには、次
の中で少なくとも 1 つの条件を満たしている必要があります。
v DBA システム ロールのメンバーであること
v 明示的に付与されるかユーザが作成したロールのメンバーであることにより、
USER_MANAGEMENT 権限を持っていること
システム ロールまたはユーザが作成したロールを付与するには、次の中で少なくとも 1
つの条件を満たしている必要があります。
v DBA システム ロールのメンバーであること
v 明示的に付与されるかユーザが作成したロールのメンバーであることにより、
ROLE_MANAGEMENT 権限または USER_MANAGEMENT 権限を持っていること
自分のパスワードは、どのデータベース ユーザも変更できます。
構文
次に GRANT CONNECT 文の構文ダイアグラムを示します。
GRANT CONNECT
TO
db_username
WITH
,
, password
’ password ’
CONNECT
DBA
RESOURCE
authorization
role_name
PRIORITY
integer
新規データベース ユーザ名の作成、パスワードの割当て、既存データ
ベース ユーザのパスワードの変更を行います。新規ユーザは、
CONNECT システム ロールのメンバーになり、次の操作を行えるよ
うになります。
v 自分のパスワードを使用したデータベースへの接続
v PUBLIC に SELECT 特権が付与されたテーブルからのデータの抽
出
v 自分のパスワードの変更
v PUBLIC テーブルおよび PUBLIC マクロの使用
412
IBM Red Brick Warehouse: SQL リファレンス ガイド
GRANT CONNECT
PUBLIC 以外のデータベース オブジェクトへのアクセス、データの修
正、データベース オブジェクトの作成を行うには、ユーザは対応する
オブジェクト特権、タスク権限、ロールを取得する必要があります。
オブジェクト特権の付与については、416 ページの『GRANT (特
権)』を参照してください。許可とロールの付与については、407 ペー
ジの『GRANT (許可とロール)』を参照してください。
DBA
指定したデータベース ユーザに、DBA システム ロールを付与する
ように指定します。指定されたデータベース ユーザは、DBA システ
ム ロールのメンバーになり、すべての DBA タスク権限を取得しま
す。 DBA タスク権限のリストについては、408 ページの『システム
ロールとタスク権限』を参照してください。
RESOURCE
指定したデータベース ユーザに、RESOURCE システム ロールを付
与するように指定します。指定されたデータベース ユーザは、
RESOURCE システム ロールのメンバーになり、すべての
RESOURCE タスク権限を取得します。 RESOURCE タスク権限のリ
ストについては、408 ページの『システム ロールとタスク権限』を参
照してください。
authorization
指定したデータベース ユーザに、タスク権限を個別に付与します。タ
スク権限はシステムが定義し、データベースに対して各操作を実行す
る権限を与えるものです。タスク権限の一覧と定義については、408
ページの『システム ロールとタスク権限』を参照してください。
role_name
指定したデータベース ユーザに付与するユーザ作成のロールを指定し
ます。指定されたユーザは、そのロールのメンバーになり、そのロー
ルに付与されたすべてのタスク権限およびオブジェクト特権を取得し
ます。
TO db_username データベース ユーザを指定します。データベース ユーザ名は有効な
識別子とし、他のユーザ名と重複しない名前にしてください。
WITH password
データベース パスワードを指定します。データベース パスワード
は、他のパスワードと重複しないものにしてください。有効な SQL
識別子でないパスワードは、文字列定数を一重引用符で囲んで指定し
ます。パスワードには 1 文字以上を指定してください。
データベース パスワードに関する制約事項を次に示します。
v 最大 8 文字までです。
v セミコロン (;) は使用しないでください。
注: 上記の制約事項に加え、RISQL エントリ ツールを使用するアカ
ウントのパスワードには次の制約が適用されます。
v 空白またはタブのみから成るパスワードを使用しないでくださ
い。
第 8 章 SQL 文と RISQL 拡張機能
413
GRANT CONNECT
v 文字と文字の間に空白を入れないでください。
ユーザは、自分のパスワードしか変更できません。 GRANT
CONNECT 文に指定したユーザ名が、文を実行するユーザと同じ場合
は、ユーザのパスワードが新規パスワードに変更されます。 DBA シ
ステム ロールのメンバーを含め、USER_MANAGEMENT タスク権限
を持っているユーザは、任意のユーザのパスワードを変更できます。
パスワードは暗号化されて保存され、DBA システム ロールのメンバ
ーを含め、ユーザにはアクセスできません。
パスワードのセキュリティ パラメータは、IBM Red Brick Warehouse
で利用できます。セキュリティ パラメータは rbw.config ファイルに
記述されており、次の項目を制限できます。
v 有効なパスワードの長さと文字タイプの組み合わせ
v パスワードの変更頻度
v 同じパスワードを繰り返し使用することを禁止するための、旧パス
ワードの保存回数
パスワード セキュリティ パラメータの詳細については、「管理者ガ
イド」を参照してください。
PRIORITY integer
ユーザ セッションのデフォルトの優先順位を指定します。0 から 100
の整数を指定できます。数字が大きくなるほど優先順位が低くなりま
す。たとえば、優先順位が 0 のユーザのセッションの CPU 時間は、
優先順位が 1 (または 0 より大きい他の値) のユーザのセッションよ
りも優先されます。デフォルト値は 50 です。
この句は、既存ユーザが実行中の現在のセッションには影響しませ
ん。実行中のセッションの優先順位を変更する場合は、ALTER
SYSTEM 文を使用してください。
ユーザが自分のパスワードを変更しているときにこの句を指定した場
合は、無視されます。
例
次の文は、kathy というデータベース ユーザ名を作成し、dbexpert というパスワードを
割り当てます。
grant connect to kathy with dbexpert
次の文は、kathy のパスワードを gumshoe に変更します。この文が実行できるのは、
kathy または DBA システム ロールを持っているユーザです。
grant connect to kathy with gumshoe
414
IBM Red Brick Warehouse: SQL リファレンス ガイド
GRANT CONNECT
次の文は、alison というデータベース ユーザ名を作成し、acrobat というパスワードを
割り当て、RESOURCE システム ロールを alison に付与します。
grant connect, resource to alison with acrobat
第 8 章 SQL 文と RISQL 拡張機能
415
GRANT (特権)
GRANT 文は、任意の数のユーザまたはユーザが作成したロールに、特定のテーブルに
対するオブジェクト特権を割り当てます。
許可
テーブルに対するオブジェクト特権を付与するユーザは、次の中で少なくとも 1 つの条
件を満たしている必要があります。
v DBA システム ロールのメンバーであること
v RESOURCE システム ロールのメンバーで、かつテーブルの作成者であること
v テーブルの作成者で、明示的に付与されるかユーザが作成したロールのメンバーであ
ることにより、GRANT_OWN タスク権限を持っていること
v 明示的に付与されるかユーザが作成したロールのメンバーであることにより、
GRANT_TABLE タスク権限を持っていること
構文
次に、特権を付与する GRANT 文の構文ダイアグラムを示します。
,
GRANT ON
ALL
PRIVILEGES
table_name TO
creator.
DELETE
INSERT
SELECT
UPDATE
,
db_username
role_name
PUBLIC
PRIVILEGES
指定したユーザ、ロール、すべてのユーザ (PUBLIC) に対し、オブジ
ェクト特権を付与できます。オブジェクト特権を付与するユーザに
は、その前に CONNECT システム ロールを付与し、パスワードを割
り当てておく必要があります。オブジェクト特権が付与されるロール
は、CREATE ROLE 文で作成しておきます。
システム ロールには、オブジェクト特権を付与できません。
ユーザまたはロールに付与できるのは、指定したテーブルに対する次
のオブジェクト特権です。
416
オブジェクト特権
説明
DELETE
行の削除
IBM Red Brick Warehouse: SQL リファレンス ガイド
GRANT (特権)
INSERT
行の挿入
SELECT
行の抽出
UPDATE
行の修正
ALL PRIVILEGES
上記のすべて
テーブルに対する INSERT 特権を持っているユーザが行を挿入するに
は、そのテーブルに対する SELECT 特権も必要です。
テーブルを作成したユーザは、そのテーブルに対するすべてのオブジ
ェクト特権を自動的に取得します。これらの特権は、テーブル作成者
が取り消すことはできません。 DBA システム ロールのメンバー
は、システム テーブル以外のデータベース テーブルについて、すべ
てのオブジェクト特権を取得します。
table_name
テーブル、ビュー、またはシノニムの名前を指定します。ビューを指
定した場合は、SELECT 特権しか付与されません。テンポラリ テー
ブルに対して特権は付与できません。テーブル名を指定する場合に
は、そのテーブルを作成したユーザのユーザ名を creator に指定して
ください。
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
第 8 章 SQL 文と RISQL 拡張機能
417
GRANT (特権)
次の文は、Market テーブルに対する SELECT、INSERT、および DELETE 特権を
market_research ロールに付与します。 market_research ロールの全メンバーは、Market
テーブルでこれらの操作を実行できます。
grant select, insert, delete on market to market_research
418
IBM Red Brick Warehouse: SQL リファレンス ガイド
INSERT
INSERT 文は、指定した基本テーブルに任意の数の行を挿入します。
許可
テーブルに行を挿入するユーザは、次の中で少なくとも 1 つの条件を満たしている必要
があります。
v DBA システム ロールのメンバーであること
v 明示的に付与されるかユーザが作成したロールのメンバーであることにより、
MODIFY_ANY 権限を持っていること
v テーブルの作成者であること
v そのテーブルに対する SELECT 特権および INSERT 特権を持っていること
構文
次に INSERT 文の構文ダイアグラムを示します。
INSERT INTO
table_name
,
column_name
(
)
,
VALUES
(
literal
NULL
DEFAULT
select_statement
DEFAULT VALUES
)
table_name
行を挿入するテーブルの名前またはシノニムを指定します。
table_name 変数にビュー名を指定することはできません。
column_name
テーブルの列を指定します。
v 列名は、任意の順序で指定できます。
v 列名は、一度しか指定できません。
v 指定しなかった列には、デフォルト値が割り当てられます。テーブ
ル作成時にデフォルト値を指定しなかった列には NULL が代入され
ます。
列を指定しなかった場合は、指定したテーブルの列の順番で、すべて
の列を指定したとみなされます。
NOT NULL に設定されている列には、NULL 以外の値を INSERT 文に
指定する必要があります。
第 8 章 SQL 文と RISQL 拡張機能
419
INSERT
VALUES
VALUES 句を指定する場合は、列リストと同数の値を指定してくださ
い。列リストを指定しなかった場合は、指定したテーブルの列数およ
び列順に合わせて、VALUES 句の値を指定する必要があります。
INSERT 文は、指定した最初の列に最初の値、2 番目の列に 2 番目の
値、という順に挿入していきます。
シリアル (SERIAL) 型列への挿入では次の結果が想定されます。
v シリアル (SERIAL) 型列を指定しなかった場合は、システムによっ
て値が生成されます。システムに現在格納されている最大のシリア
ル (SERIAL) 型値が増分されます。
v シリアル (SERIAL) 型列にデフォルト値を指定した場合は、値が生
成されます。システムに現在格納されている最大のシリアル
(SERIAL) 型値が増分されます。
v シリアル (SERIAL) 型列に負の実数値または 0 を挿入しようとし
た場合、行は挿入されません。挿入が失敗し、エラー メッセージ
が表示されます。
v シリアル (SERIAL) 型列に正の実数値を挿入する場合、挿入する正
の実数値とシステムに現在格納されている最大のシリアル
(SERIAL) 型値が比較されます。挿入する値の方が大きい場合、格
納値が挿入する値で置き換えられます。格納値以下であれば、格納
されているシリアル (SERIAL) 型値は変更されません。
v 挿入操作中、シリアル (SERIAL) 型列の値が 0 または負の値であ
った場合は、挿入操作が失敗し、エラー メッセージが戻されま
す。操作が失敗すると次の 2 つのどちらかの結果になります。
– バージョニングが有効な場合、すべての未確定の行がロールバッ
クされます。行は挿入されません。システムに現在格納されてい
るシリアル (SERIAL) 型値は変更されません。
– バージョニングが無効の場合、INSERT 文が失敗する前に適切な
値を持っていた行が挿入されます。挿入された値に基づいて、シ
ステムに現在格納されている最大のシリアル (SERIAL) 型値が調
整されます。
420
literal
文字列定数または数値定数を指定します。
NULL
指定した列への NULL 値の挿入を指定します。 NOT NULL に設定さ
れている列を指定した場合は、その行の挿入がエラーになります。
DEFAULT
指定した列に、その列のデフォルト値を挿入します。デフォルト値
は、テーブルの作成時か、ALTER TABLE 文でそのテーブルに列を追
加する時に指定します。
IBM Red Brick Warehouse: SQL リファレンス ガイド
INSERT
デフォルト値が設定されておらず、NULL 値が許可されている列に
は、NULL が挿入されます。デフォルト値が設定されておらず、NOT
NULL が設定されている列の場合は、その行の挿入がエラーになりま
す。
select_statement
214 ページに定義する標準 SQL の SELECT 文を指定します。ただ
し、ORDER BY 句に BREAK BY サブ句を指定することはできませ
ん。
行データの並び順に依存する一部の RISQL 表示関数を使用する場合
は、クエリの結果をソートしてからその行データをテーブルに挿入す
ると便利です。中間クエリ結果の順序、さらに RISQL 表示関数が戻
す値は、ORDER BY 句によって決まります。
クエリのリザルト テーブルの行データが、指定したテーブルに挿入さ
れます。クエリからは、1 行のみが戻される場合もあれば、複数行が
戻されることもあります。 1 行も戻されないと、次のメッセージが戻
されます。
** INFORMATION ** (209) 0 行を挿入しました。
クエリが戻す列の数は、列リストに指定した列の数と同じである必要
があります。列リストに指定した最初の列にクエリのリザルト テーブ
ルの先頭列の値、2 番目の列に 2 番目の値、という順に挿入されま
す。
DEFAULT VALUES
テーブルに挿入するすべての行が、各列のデフォルト値を使用しま
す。テーブルの各列にデフォルト値が挿入されます。DEFAULT
VALUES は column_name リストと併用することはできません。
デフォルトが設定されておらず、NOT NULL と設定されている列がテー
ブルにある場合、DEFAULT VALUES サブ句を指定した INSERT 文
はエラーになります。
使用上の注意
参照整合性を維持するため、対応するプライマリ キーの値がないフォーリン キーの値
を指定した INSERT 文はエラーになります。
次のテーブルには、行は挿入できません。
v プライマリ キーの B-TREE インデックスが削除された参照先 テーブル。ただし、
そのプライマリ キーに STAR インデックスが作成されている場合は、行を挿入でき
ます。
v プライマリ キーの B-TREE インデックスが削除されたテーブルを参照する参照元
テーブル。参照先テーブルのプライマリ キーに STAR インデックスが作成されてい
ても、行は挿入できません。
第 8 章 SQL 文と RISQL 拡張機能
421
INSERT
数値定数の有効桁数が数値列のサイズを超える場合は、エラー メッセージが戻されま
す。浮動小数点数値は、その精度が数値列のサイズを超える場合は、スケール (小数点
以下の桁数) が切り捨てられます。
INSERT 文を実行すると、事前計算ビューに対して集約処理が実行されることがありま
す。集約処理の詳細については、「IBM Red Brick Vista ユーザーズ ガイド」を参照し
てください。
例
この例は、クエリの結果をテーブルに挿入する方法を示します。テーブル (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));
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) 390 行を挿入しました。
これで、売上データの一部が Q1_00_Sales テーブルに格納されました。テーブルに
挿入されたデータは、2000 年の第 1 四半期に Los Gatos で販売された製品の売上
に限定されています。
3. Q1_00_Sales テーブルに対して次のクエリを実行し、Veracruzano 製品の情報のみを
表示するようにデータをさらに限定します。
select * from q1_00_sales
where product like ’Vera%’
PRODUCT
Veracruzano
Veracruzano
Veracruzano
...
422
IBM Red Brick Warehouse: SQL リファレンス ガイド
MONTH
JAN
JAN
JAN
DOLLARS
330.00
285.00
262.50
INSERT
「SQL 自習ガイド」に、上記と同様の 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’)
次の例では、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 HQ_CITY HQ_STATE DISTRICT REGION
1000
Atlanta
NULL
NULL
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) 1 行を挿入しました。
select * from serial_table;
COL1
1
COL_2
yes
第 8 章 SQL 文と RISQL 拡張機能
423
LOCK (テーブルのロック)
LOCK 文は、他のユーザによるテーブルへのアクセスを禁止します。
許可
テーブルをロックするユーザは、次の中で少なくとも 1 つの条件を満たしている必要が
あります。
v DBA システム ロールのメンバーであること
v 明示的に付与されるかユーザが作成したロールのメンバーであることにより、
MODIFY_ANY 権限を持っていること
v テーブルの作成者であること
v そのテーブルに対する INSERT、DELETE、UPDATE 特権を持っていること
構文
次に LOCK 文の構文ダイアグラムを示します。
LOCK
table_name
creator.
FOR DELETE
table_name
ロックするテーブルの名前を指定します。 1 人のユーザがロックでき
るテーブルは、1 度に 1 つのみです。ロックされたテーブルには、他
のユーザによるすべてのアクセスが禁止されます。テーブル名を指定
する場合には、そのテーブルを作成したユーザのユーザ名を creator
に指定してください。
FOR DELETE
削除操作に対し、カスケード ロックをかけます。 LOCK 文に指定し
たテーブルへのフォーリン キー参照を行うテーブルがロックされま
す。こうした他のテーブルへのロックのタイプ (読取りまたは書込み)
は、テーブルの CREATE TABLE 文の FOREIGN KEY... ON
DELETE 句によって決まります。
1 つのテーブルをロックすると、そのテーブルを参照する他のテーブ
ルにもロックがカスケードされます。
使用上の注意
ロックされたテーブルには、ロックが解除されるまで他のユーザはアクセスできませ
ん。ロックは、そのロックを保持しているユーザが UNLOCK 文を実行するか、サーバ
セッションを終了すると解除されます。
1 つ以上のテーブルを変更する複数の操作をする場合は、LOCK 文で他のユーザをロッ
クアウトするとテーブルのアクセスが向上します。
テーブルをロックしたユーザがそのテーブルを変更するか、CREATE INDEX 文を実行
すると、ロックを保持した状態でインデックスが作成されます。
424
IBM Red Brick Warehouse: SQL リファレンス ガイド
LOCK DATABASE
LOCK DATABASE 文は、指定されたモード (READ または WRITE) でデータベース
をロックします。データベース内の各テーブルのロックが完了するまでは、ユーザのア
クセスが一時停止されます。システム テーブルもロックされます。
データベースのロックを解除する場合は、UNLOCK DATABASE 文を使用します。
許可
データベースをロックするユーザは、次の中で少なくとも 1 つの条件を満たしている必
要があります。
v DBA システム ロールのメンバーであること
v 明示的に付与されるかユーザが作成したロールのメンバーであることにより、
LOCK_DATABASE 権限を持っていること
構文
次に LOCK DATABASE 文の構文ダイアグラムを示します。
LOCK DATABASE
READ
WRITE
READ
各テーブルに READ ロックをかけ、次にデータベースに READ ロッ
クをかけます。
データベースを READ モードでロックすると、次のようになりま
す。
v データベースに WRITE ロックをかけることができなくなります。
v データベース サーバはデータベースへのクエリを許可しますが、
更新は許可しません。
WRITE モードでロックされているテーブルがある場合、LOCK
DATABASE READ 文の実行は失敗します。
WRITE
各テーブルに WRITE ロックをかけます。データベースに WRITE ロ
ックをかけ、次にテーブルにかけられている WRITE ロックを解除し
ます。READ、WRITE のどちらも指定されていない場合、WRITE モ
ードでデータベースがロックされます。
データベースを WRITE モードでロックすると、次のようになりま
す。
v データベースを他のモードでロックすることができなくなります。
v データベース サーバはデータベースへのクエリも更新も許可しま
せん。
第 8 章 SQL 文と RISQL 拡張機能
425
LOCK DATABASE
LOCK TABLE 文でテーブルをロックしたユーザが LOCK
DATABASE WRITE 文を発行した場合、その文は正常に実行されま
す。このユーザが LOCK DATABASE READ 文を発行した場合、そ
の文の実行は失敗します。
ユーザがテーブルをロックしている場合、別のユーザが LOCK
DATABASE READ 文または LOCK DATABASE WRITE 文を発行す
ると、どちらの文の実行も失敗します。
使用上の注意
User1 がデータベースをロックしたとき User2 が接続中の場合、User2 はデータベース
を終了できますが、データベースのロックが解除されない限り他の RISQL 文を発行で
きません。
ロックは、そのロックの要求者が次の操作を行うことにより解除されます。
v UNLOCK DATABASE 文の実行
v データベース サーバ セッションの終了
重要: データベースをロックしたユーザがセッションを終了すると、データベースのロ
ックが自動的に解除されます。
426
IBM Red Brick Warehouse: SQL リファレンス ガイド
REVOKE (許可とロール)
REVOKE 文は、DBA システム ロール、RESOURCE システム ロール、ユーザが作成
したロール、個別のタスク権限を、データベース ユーザおよびロールから取り除きま
す。
許可
REVOKE 文を使用するユーザは、次の中で少なくとも 1 つの条件を満たしている必要
があります。
v DBA システム ロールのメンバーであること
v 明示的に付与されるかユーザが作成したロールのメンバーであることにより、
ROLE_MANAGEMENT 権限を持っていること
構文
次に REVOKE 文の構文ダイアグラムを示します。
,
REVOKE ,
DBA
RESOURCE
authorization
role_name
FROM db_username
role_name
DBA
指定したデータベース ユーザまたはユーザが作成したロールから、
DBA システム ロールを取り除きます。
RESOURCE
指定したデータベース ユーザまたはユーザが作成したロールから、
RESOURCE システム ロールを取り除きます。
authorization
指定したデータベース ユーザまたはロールで取り消す個別のタスク権
限を指定します。
role_name
指定したデータベース ユーザまたはロールで取り消すユーザ作成ロー
ルを指定します。
FROM db_username
指定したタスク権限およびロールを取り消すデータベース ユーザ名を
指定します。
FROM role_name
指定したタスク権限およびロールが取り消されるロールの名前を指定
します。システム ロールは変更できないため、ロール名に指定できま
せん。
使用上の注意
システム ロールからタスク権限を取り除くことはできません。
第 8 章 SQL 文と RISQL 拡張機能
427
REVOKE (許可とロール)
データベース ユーザの許可を取り消しても、ロールを通じてその許可がユーザに残って
いる場合があります。これを取り消すには、その許可を持つすべてのロールをデータベ
ース ユーザから取り除いてください。
同様に、ロールから許可を取り除いても、その許可がロールのメンバーに残っている場
合があります。その許可を直接に付与されたか、他のロールを通じて付与された場合が
これにあたります。ロールの全メンバーから許可を取り除くには、その許可を各メンバ
ーから取り除いてください。
ユーザおよびロールに明示的に付与された許可と、ロールを通じて直接または間接的に
付与された許可を確認するには、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
4. CREATE_ANY タスク権限を temp ロールに付与します。
grant create_any to temp
tommy には、CREATE_ANY タスク権限が明示的に付与され、temp ロールのメンバ
ーとして間接的にも付与されています。
5. 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
428
IBM Red Brick Warehouse: SQL リファレンス ガイド
REVOKE CONNECT
REVOKE CONNECT 文は、データベースからユーザ名を削除します。
許可
データベース ユーザ名を削除するユーザは、次の中で少なくとも 1 つの条件を満たし
ている必要があります。
v DBA システム ロールのメンバーであること
v 明示的に付与されるかユーザが作成したロールのメンバーであることにより、
USER_MANAGEMENT 権限を持っていること
構文
次に REVOKE CONNECT 文の構文ダイアグラムを示します。
REVOKE CONNECT FROM
CONNECT
db_username
データベースからユーザ名を削除します。
FROM db_username
データベース ユーザ名を指定します。指定されたユーザは、データベ
ースに接続できなくなり、タスク権限、オブジェクト特権、ロールが
取り消されます。
使用上の注意
ロールを削除する場合は、DROP ROLE 文を使用してください。
第 8 章 SQL 文と RISQL 拡張機能
429
REVOKE (特権)
REVOKE 文は、データベース ユーザおよびユーザが作成したロールから、指定したテ
ーブルに対する指定したオブジェクト特権を取り除きます。
許可
テーブルに対するオブジェクト特権を取り消すユーザは、次の中で少なくとも 1 つの条
件を満たしている必要があります。
v DBA システム ロールのメンバーであること
v RESOURCE システム ロールのメンバーで、かつテーブルの作成者であること
v テーブルの作成者で、明示的に付与されるかユーザが作成したロールのメンバーであ
ることにより、GRANT_OWN 権限を持っていること
v 明示的に付与されるかユーザが作成したロールのメンバーであることにより、
GRANT_TABLE タスク権限を持っていること
構文
次に、特権を付与する REVOKE 文の構文ダイアグラムを示します。
,
REVOKE ON
ALL
PRIVILEGES
table_name
creator.
DELETE
INSERT
SELECT
UPDATE
,
FROM db_username
role_name
PUBLIC
table_name
取り消すオブジェクト特権の対象となるテーブルを指定します。テン
ポラリ テーブルに対して特権は付与できません。したがって、取り消
すこともできません。テーブル名を指定する場合には、そのテーブル
を作成したユーザのユーザ名を creator に指定してください。
FROM db_username
オブジェクト特権が取り消されるデータベース ユーザを指定します。
FROM role_name
オブジェクト特権が取り消される、ユーザが作成したロールを指定し
ます。
PUBLIC
430
すべてのユーザから、指定したオブジェクト特権を取り除きます。
IBM Red Brick Warehouse: SQL リファレンス ガイド
REVOKE (特権)
使用上の注意
データベース ユーザのオブジェクト特権を取り消しても、ユーザが作成したロールを通
じてその特権がユーザに残っている場合があります。これを取り消すには、そのオブジ
ェクト特権を持つロールもユーザから取り除く必要があります。
同様に、ロールからオブジェクト特権を取り除いても、その特権がロールのメンバーに
残っている場合があります。そのオブジェクト特権を直接に付与されたか、他のロール
を通じて付与された場合がこれにあたります。ロールの全メンバーからオブジェクト特
権を取り除くには、そのオブジェクト特権を各ユーザから取り除いてください。
特定のテーブルについて、ユーザおよびロールに明示的に付与されたオブジェクト特権
と、ロールを通じて直接または間接的に付与されたオブジェクト特権を確認するには、
RBW_TABAUTH システム テーブルに対してクエリを実行します。
例
次の文は、Product テーブルに対する SELECT 特権を、すべてのデータベース ユーザ
から取り除きます。
revoke select on product from public
すべてのユーザ (PUBLIC) について SELECT 特権が取り消されましたが、Product テー
ブルの所有者であるか次のいずれかを付与されたユーザは、まだ Product テーブルに対
する SELECT 特権を持っている場合があります。
v そのテーブルに対する SELECT 特権
v そのテーブルに対する SELECT 特権を持つロール
v ACCESS_ANY タスク権限
v ACCESS_ANY タスク権限を持つロール
第 8 章 SQL 文と RISQL 拡張機能
431
SELECT
SELECT 文は、データベース テーブルからデータ行を抽出します。次に SELECT 文の
構文ダイアグラムを示します。
構文
query_expression
order_by_clause
suppress_by_clause
query_expression 179 ページに定義するジョイン クエリ式または非ジョイン クエリ式
を指定します。
SELECT 文の詳細については、214 ページを参照してください。
432
IBM Red Brick Warehouse: SQL リファレンス ガイド
UNLOCK (テーブルのロック解除)
UNLOCK 文は、LOCK (テーブルのロック) 文で設定されたテーブルのロックを解除し
ます。
許可
テーブルのロックを解除できるのは、そのロックをかけているユーザのみです。
構文
次に UNLOCK 文の構文ダイアグラムを示します。
UNLOCK
table_name
creator.
table_name
ロックを解除するテーブルの名前を指定します。テーブル名を指定す
る場合には、そのテーブルを作成したユーザのユーザ名を creator に
指定してください。
使用上の注意
テーブルをロックしたユーザが、そのテーブルを修正するか、CREATE INDEX 文を実
行すると、ロックを保持した状態でインデックスが作成されます。
例
Product テーブルのロックを解除する例を示します。
unlock product
第 8 章 SQL 文と RISQL 拡張機能
433
UNLOCK DATABASE
ユーザが設定したデータベースのロックを解除します。
許可
データベースのロックを解除できるのは、そのロックをかけているユーザのみです。
構文
次に UNLOCK DATABASE 文の構文ダイアグラムを示します。
UNLOCK DATABASE
使用上の注意
データベースがロックされると、ロックが解除されるまでは、他のユーザがデータベー
スのテーブルにアクセスすることはできません。データベースのロックを解除する方法
は 2 つあります。
v そのユーザによる UNLOCK DATABASE 文の実行
v そのユーザによるセッションの終了
434
IBM Red Brick Warehouse: SQL リファレンス ガイド
UPDATE
UPDATE 文は、指定したテーブルの行を修正します。
許可
テーブルの行を更新するユーザは、次の中で少なくとも 1 つの条件を満たしている必要
があります。
v DBA システム ロールのメンバーであること
v 明示的に付与されるかユーザが作成したロールのメンバーであることにより、
MODIFY_ANY 権限を持っていること
v テーブルの作成者であること
v テーブルに対する UPDATE 特権を持っていること
構文
次に UPDATE 文の構文ダイアグラムを示します。
,
UPDATE
table_name
SET column_name=
creator.
expression
NULL
,
FROM
WHERE
search_condition
table_reference
creator.
table_name
テーブル、テンポラリ テーブル、またはシノニムの名前を指定しま
す。table_name にはビュー名は指定できません。テーブル名を指定す
る場合には、そのテーブルを作成したユーザのユーザ名を creator に
指定してください。
SET
任意の数の列名および式を指定します。 UPDATE 文は、指定した列
の値を expression または NULL に設定します。
列名は、次の規則に従います。
v 指定したテーブルに、すでに定義されている必要があります。
v 重複して指定できません。
v テーブル名または相関名で修飾できません。
UPDATE 文の SET 句には、集約関数 (COUNT、SUM など) および
RISQL 表示関数 (RANK、NTILE など) は指定できません。
第 8 章 SQL 文と RISQL 拡張機能
435
UPDATE
FROM table_reference
行の更新に使用する値が含まれる 1 つまたは複数のテーブルを追加指
定します。 table-reference で指定した複数のテーブルがジョインさ
れ、WHERE 句で指定したとおりに table-name 内の行が更新されま
す。table_reference は table_name も含んでいる必要があります。この
セクションの末尾にある例を参照してください。
FROM table_reference 句は、より高いパフォーマンスを発揮するサブ
クエリの代用として使用します。
table-reference で指定されるテーブルは、基本テーブルまたはシノニ
ムである必要があります。テーブル名を指定する場合には、そのテー
ブルを作成したユーザのユーザ名を creator に指定してください。
更新するテーブルに相関名が割り当てられている場合は、実際のテー
ブル名ではなく、その相関名を使用してテーブルを識別する必要があ
ります。
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 句の詳細については、185 ページの『テーブル参照』
を参照してください。
WHERE
WHERE 句を省略すると、テーブルのすべての行が更新されます。指
定した場合は、検索条件を満たす行のみが更新されます。検索条件に
は、サブクエリも使用できます。
検索条件については、39 ページを参照してください。WHERE 句につ
いては、201 ページを参照してください。
436
IBM Red Brick Warehouse: SQL リファレンス ガイド
UPDATE
使用上の注意
次の操作を行う UPDATE 文は、エラーになります。
v 参照先テーブルのプライマリ キー列を更新する。
v 参照先テーブルにプライマリ キー インデックス 1 がない場合に、参照元テーブル
のフォーリン キー列を更新する。
v 対応するプライマリ キー値を持たない値をフォーリン キーに挿入する。この場合参
照整合性は保持されます。
v プライマリ キー値を既存の値に設定する。プライマリ キーは一意である必要があり
ます。
v NOT NULL と設定されている列を NULL に設定する。
v 値が負または 0 であるシリアル (SERIAL) 型列を更新する。420 ページの INSERT
値についての説明を参照してください。
上記の操作を行うと、対応するエラー メッセージが戻されます。
SELECT 文とは異なり、UPDATE 文は、WHERE 句でのアウター ジョインをサポート
していません。アウター ジョインが必要な場合は、FROM 句で指定してください。
FROM 句では、変更するテーブルの指定には次の制限があります。
v ライト アウター ジョインで指定される左のテーブルとしては指定できません。
v レフト アウター ジョインで指定される右のテーブルとしては指定できません。
v フル アウター ジョインのどの場所にも指定できません。
次の例では、更新される 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 ユーザーズ ガイド」を参照し
てください。
第 8 章 SQL 文と RISQL 拡張機能
437
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’
438
IBM Red Brick Warehouse: SQL リファレンス ガイド
第 9 章 SET 文
この章では、現在のセッションにおけるデータベース サーバのデフォルト動作を変更す
る SET 文をアルファベット順に説明します。 SET 文と同等の機能を持つグローバル
パラメータを、すべてのセッションのデフォルトとして rbw.config ファイルで指定で
きます。グローバル パラメータについては、「管理者ガイド」を参照してください。
RISQL エントリ ツール、RISQL レポーター、および Table Management Utility (TMU)
の動作を制御する SET 文については、各プログラムのマニュアルを参照してくださ
い。
© Copyright IBM Corp. 1996, 2004
439
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
ON
OFF
ON_WITH_CORR_SUB
このパラメータが ON_WITH_CORR_SUB に設定された場合は、相関サブクエリが他のリラ
イト済みクエリとともに記録されます。このパラメータが ON に設定された場合、相関
サブクエリは記録されません。 rbw.config ファイルの OPTION ADVISOR_LOGGING
パラメータを使用すると、すべてのセッションにこのパラメータを設定できます。
rbw.config ファイルのパラメータのデフォルトは ON です。
Advisor の詳細については、「IBM Red Brick Vista ユーザーズ ガイド」を参照してく
ださい。
440
IBM Red Brick Warehouse: SQL リファレンス ガイド
SET ADVISOR MAXIMUM CANDIDATE VIEWS
候補ビューの分析を行うと、非常に多くの候補ビューが生成されることがあります。こ
の処理には長時間かかる場合があります。すべての候補に対してサイズ評価を行うた
め、オーバーヘッドが発生するためです。 SET ADVISOR MAXIMUM CANDIDATE
VIEWS コマンドを使用すると、評価する候補の数を制限し、Advisor 分析にかかる時間
を削減できます。このコマンドは、各分析で生成される候補の最大数を指定します。参
照回数に基づいて、指定数以上の候補は評価から除外されます。
このコマンドが設定されていない場合、rbw.config ファイルの OPTION
ADVISOR_MAXIMUM_CANDIDATE_VIEWS パラメータの値が候補ビューの生成数を
決定します。このパラメータのデフォルト値は 20 です。
構文
SET ADVISOR MAXIMUM CANDIDATE VIEWS
value
value
Vista Advisor 候補の分析で生成できる候補ビューの最大数を正の整数
で指定します。
第 9 章 SET 文
441
SET ADVISOR SAMPLE SIZE
SET ADVISOR SAMPLE SIZE 文は、Vista Advisor 候補ビュー分析のためのファクト
テーブルの行のサンプルを自動的に生成します。ファクト テーブルの行のサンプルを生
成するには、rbw.config ファイル、または現在のセッションに、候補ビュー分析のデフ
ォルト サンプル サイズを指定します。
構文
SET ADVISOR SAMPLE SIZE
size
size
ファクト テーブル行の割合です。
set advisor sample size 10
デフォルト値は 5% です。
使用上の注意
Vista Advisor 候補ビュー分析は、指定された割合のファクト テーブルの行に対して実
行されます。手動で作成したビューを、候補クエリ (Administrator ツールを使用してい
る場合はウィザード) で指定する必要はありません。
重要: サンプリングを使用すると Vista Advisor 候補ビュー分析を高速化できます。た
だし、サンプリングを使用すると結果は近似値になるため、注意してその近似値
を解釈する必要があります。
ADVISOR_SAMPLE_SIZE パラメータを 100 に設定すると、この Advisor サンプリン
グ方法は実質的に無効になります。また、候補クエリで独自に選択したサンプル ビュー
を指定すると、このパラメータを無効にできます。パラメータを 100 に設定してビュー
を指定しない場合、分析はファクト テーブル全体に対して実行されます。
この文は、rbw.config ファイルの TUNE ADVISOR_SAMPLE_SIZE size パラメータと
しても使用できます。
Advisor の詳細については、「IBM Red Brick Vista ユーザーズ ガイド」を参照してく
ださい。
442
IBM Red Brick Warehouse: SQL リファレンス ガイド
SET ALLOW SINGLE COLUMN BTREE IN TARGETJOIN
デフォルトでは、TARGETjoin クエリ処理は、単一列フォーリン キーで定義された
TARGET インデックスと、複数列フォーリン キーで定義された B-TREE インデックス
に基づいて行われます。 SET ALLOW SINGLE COLUMN BTREE コマンドにより、
TARGETjoin プランで単一列 B-TREE インデックスを使用できるようになります。この
コマンドが ON に設定されている場合には、TARGETjoin プランで次のインデックスを
任意に組み合わせて使用できます。
v 単一列 TARGET インデックス
v 単一列 B-TREE インデックス
v 複数列 B-TREE インデックス
デフォルトでは SET コマンドは OFF に設定されており、現在のセッションにのみ適
用されます。すべてのセッションに対してこのコマンドを適用するには、rbw.config フ
ァイルの OPTION ALLOW_SINGLE_COLUMN_BTREE_IN_TARGETJOIN を ON に設
定します。
構文
SET ALLOW SINGLE COLUMN BTREE IN TARGETJOIN
OFF
ON
使用上の注意
TARGETjoin 処理を考慮して、ファクト テーブルの 1 つ以上のフォーリン キーに対し
て単一列 B-TREE 索引を作成していない場合には、このパラメータは無効です。
TARGETjoin クエリで使用するインデックスとして B-TREE インデックスと TARGET
インデックスのどちらを作成するかどうかは、この 2 種類のインデックスの相対的な効
率についての理解によって決まります。詳しくは、「クエリ パフォーマンス ガイド」
の TARGETjoin プランの説明を参照してください。
第 9 章 SET 文
443
SET ARITHIGNORE、ARITHABORT
SET ARITHIGNORE 文は、現在のデータベース サーバ セッション中にゼロ除算エラ
ーが発生した場合の処理方法を指定します。
構文
SET
ARITHABORT
ARITHIGNORE
ARITHABORT
クエリの実行中にゼロ除算エラーが発生した場合、クエリの処理を中
止してエラー メッセージを戻すように指定します。
ARITHIGNORE
クエリの実行中にゼロ除算エラーが発生した場合、NULL を戻すように
指定します。
使用上の注意
この文は、デフォルトの ARITHABORT、または rbw.config ファイルのOPTION
ARITHABORT および OPTION ARITHIGNORE パラメータの設定よりも優先されま
す。
例
次の文は、現在のセッションで実行中のクエリにゼロ除算エラーが発生した場合に、
NULL を戻すように指定します。
set arithignore
444
IBM Red Brick Warehouse: SQL リファレンス ガイド
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
SERVER_OWNER
SERVER_GROUP
ALL
SERVER_OWNER
CHECK TABLE 文と CHECK INDEX 文の出力を読み取るのは、
redbrick ユーザのみであることを指定します。これはデフォルトで
す。
SERVER_GROUP
指定したグループの UNIX ユーザに読取り専用許可を与えます。この
設定は、UNIX プラットフォームのみで有効です。
ALL
すべてのユーザに読取り専用許可を与えます。
第 9 章 SET 文
445
SET CHECK_TABLE_INDEX_DIRECTORY
SET CHECK_TABLE_INDEX_DIRECTORY 文は、CHECK TABLE、または CHECK
INDEX 文にディレクトリ パスを指定していない場合に、サマリ ファイルのデフォル
ト ディレクトリを指定します。
構文
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 の設定よりも優先されます。
446
IBM Red Brick Warehouse: SQL リファレンス ガイド
SET COUNT RESULT
SET COUNT RESULT 文は、現在のセッション中に COUNT 関数が戻す値のデータ型
を指定します。デフォルトは INTEGER で、格納行数が 232 行未満のテーブルに適用し
ます。 232 行を超えるテーブルがある場合は COUNT RESULT パラメータを DECIMAL
に設定し、行数を正しくカウントできるようにしてください。
すべてのデータベース サーバ セッションのデフォルトのデータ型を指定する場合は、
rbw.config ファイルの OPTION 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
第 9 章 SET 文
447
SET CROSS JOIN
SET CROSS JOIN 文は、2 つのテーブルのクロス積 (直積) を算出するテーブル ジョ
インの可否を設定します。たとえば、この文を ON に設定すると、Market テーブルと
Product テーブルの行の組み合わせすべてを戻します。
select * from market, product
デフォルトの動作は、クロス ジョインを禁止するように設定されており、意図しないク
ロス ジョイン (ジョイン指定の修飾が間違っている場合など) の実行を防ぐことができ
ます。現在のセッションでクロス ジョインの実行を許可するには、この文で ON を設定
してください。 rbw.config ファイルの OPTION 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
クロス ジョインの詳細については、185 ページを参照してください。
448
IBM Red Brick Warehouse: SQL リファレンス ガイド
SET DEFAULT DATA SEGMENT
SET DEFAULT DATA SEGMENT 文は、現在のセッションで作成されるデフォルト デ
ータ セグメントの物理格納ユニット (PSU) について、ディレクトリを指定します。
テンポラリ データ セグメントの格納先パスを設定する方法については、520 ページの
『SET TEMPORARY SEGMENT STORAGE PATH』を参照してください。
構文
SET DEFAULT DATA SEGMENT STORAGE PATH
’dir_name’
STORAGE PATH dir_name
デフォルト データ セグメントの PSU を格納するディレクトリの絶
対パス (dir_name) を指定します。このディレクトリは SET
DEFAULT DATA SEGMENT 文の実行時に存在していなくても構いま
せんが、デフォルト セグメントにテーブルを作成する前に作成してく
ださい。
使用上の注意
この文は、rbw.config ファイルの OPTION DEFAULT_DATA_SEGMENT パラメータ
で指定されたデフォルトよりも優先されます。 SET DEFAULT DATA SEGMENT 文、
または rbw.config ファイルでデフォルト ディレクトリを設定しないと、デフォルト
セグメントの PSU はデータベース ディレクトリに格納されます。
複数のデータベースがあるデータベース サーバでは、データベースごとに別のデフォル
ト ディレクトリを設定してください。この文を使用する場合は、他のデータベースのデ
フォルト ディレクトリを指定しないように注意してください。次のようにすると、各デ
ータベースにそれぞれ別のディレクトリを確実に指定できます。
v OPTION DEFAULT_DATA_SEGMENT パラメータ、または SET DEFAULT DATA
SEGMENT 文ではディレクトリを指定しないようにします。 PSU は、適切なデータ
ベース ディレクトリに自動的に作成されます。
v この文を、各データベースの .rbwrc ファイルに挿入します。各 .rbwrc ファイルで
デフォルト データ セグメントをそれぞれ別のディレクトリに指定します。
例
次の文は、デフォルト データ セグメントの PSU を格納するディレクトリを指定しま
す。
第 9 章 SET 文
449
SET DEFAULT DATA SEGMENT
UNIX のみ
set default data segment
storage path ’/default/dataseg_dir’
UNIX のみ の終り
Windows のみ
set default data segment
storage path ’c:\dsk1\dsegs’
Windows のみ の終り
450
IBM Red Brick Warehouse: SQL リファレンス ガイド
SET DEFAULT INDEX SEGMENT
SET DEFAULT INDEX SEGMENT 文は、現在のセッションで作成されるすべてのデフ
ォルト インデックス セグメントの物理格納ユニット (PSU) のディレクトリを指定しま
す。
テンポラリ インデックス セグメントの格納先のパスを設定する方法については、520
ページの『SET TEMPORARY SEGMENT STORAGE PATH』を参照してください。
構文
SET DEFAULT INDEX SEGMENT STORAGE PATH
’dir_name’
STORAGE PATH dir_name
デフォルト インデックス セグメントの PSU を格納するディレクト
リの絶対パス (dir_name) を指定します。このディレクトリは SET
DEFAULT INDEX SEGMENT 文の実行時に存在していなくても構い
ませんが、デフォルト セグメントにインデックスを作成する前に作成
してください。
使用上の注意
この文は、rbw.config ファイルの OPTION DEFAULT_INDEX_SEGMENT パラメータ
で指定されたデフォルトよりも優先されます。 SET DEFAULT INDEX SEGMENT
文、または rbw.config ファイルでデフォルト ディレクトリを設定しないと、デフォル
ト セグメントの PSU はデータベース ディレクトリに格納されます。
複数のデータベースがあるウェアハウスでは、データベースごとに別のデフォルト ディ
レクトリを設定してください。この文を使用する場合は、他のデータベースのデフォル
ト ディレクトリを指定しないように注意してください。次のようにすると、各データベ
ースにそれぞれ別のディレクトリを確実に指定できます。
v OPTION DEFAULT_DATA_SEGMENT パラメータまたは SET DEFAULT DATA
SEGMENT 文ではディレクトリを指定しないでください。PSU は、適切なデータベ
ース ディレクトリに自動的に作成されます。
v この SET 文を、各データベースの .rbwrc ファイルに記述します。各 .rbwrc ファ
イルでデフォルト インデックス セグメントをそれぞれ別のディレクトリに指定しま
す。
第 9 章 SET 文
451
SET DEFAULT INDEX SEGMENT
例
次の文は、デフォルト データ セグメントの PSU を格納するディレクトリを指定しま
す。
UNIX のみ
Set default index segment
storage path ’/default/indexseg_dir’
UNIX のみ の終り
Windows のみ
Set default index segment
storage path ’c:\dsk1\ixsegs’
Windows のみ の終り
452
IBM Red Brick Warehouse: SQL リファレンス ガイド
SET DEFAULT PSU EXTENDSIZE
SET DEFAULT PSU EXTENDSIZE 文は、データ セグメントがいっぱいになったとき
に、PSU を拡張するための増分を指定します。
構文
SET DEFAULT PSU EXTENDSIZE
value
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 文の使用例については、367 ページを参照してくだ
さい。
この文は、rbw.config ファイルの OPTION DEFAULT_PSU_EXTENDSIZE パラメータ
としても使用できます。
第 9 章 SET 文
453
SET DEFAULT SEGMENT SIZE
SET DEFAULT SEGMENT SIZE 文は、デフォルトのテーブルまたはインデックスに割
り当てる領域の容量を指定します。この文を設定しない場合、デフォルト テーブル サ
イズの上限は 2GB になります。
構文
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 文の使用例については、367 ページを参照してくださ
い。
454
IBM Red Brick Warehouse: SQL リファレンス ガイド
SET EXPORT_DEFAULT_PATH
SET EXPORT_DEFAULT_PATH 文は、EXPORT 文で作成したファイルのデフォルトの
パスを定義します。
構文
SET EXPORT_DEFAULT_PATH
path_specification
path_specification 非修飾のファイル名に付加されるベース パス名を指定します。デフォ
ルトは、インストール時に指定されているプラットフォーム別スピル
ディレクトリの設定と同じです。
使用上の注意
このコマンドは、rbw.config ファイルの OPTION EXPORT_DEFAULT_PATH パラメ
ータとしても使用できます。
第 9 章 SET 文
455
SET EXPORT_DELIMITER
SET EXPORT_DELIMITER 文は、区切りフォーマットの出力ファイルを作成する
EXPORT 文で使用する区切り記号を指定します。デフォルトの区切り記号はパイプ (|)
です。
構文
SET EXPORT_DELIMITER
‘delimiter_character’
delimiter_character
エクスポート ファイルの区切りフォーマットで列の区切り文字として
使用するシングルバイト文字またはマルチバイト文字を指定します。
デフォルトの区切り記号はパイプ (|) です。エクスポート区切り文字
には、ストリング区切り文字 (EXPORT 文の ENCLOSED BY 指定)
と同一の文字、および以下の文字は使用できません。
v 小数点 (.) またはその他の基数文字
v 制御文字 (取消し文字またはエスケープ文字など)
v 空白文字 (シングルバイトまたはマルチバイトの空白、改行、タブ
など)
v 一重引用符 (’)
使用上の注意
このコマンドは、rbw.config ファイルの OPTION EXPORT_DELIMITER パラメータと
しても使用できます。
エクスポート区切り文字の詳細については、397 ページの『EXPORT』を参照してくだ
さい。
456
IBM Red Brick Warehouse: SQL リファレンス ガイド
SET EXPORT_MAX_FILE_SIZE
SET EXPORT_MAX_FILE_SIZE 文は、EXPORT 文が使用するエクスポート データ フ
ァイルの最大容量を設定します。データ量が設定値を超えた場合は、ファイル名に nnn
が付加された名前を持つ追加出力ファイルが作成されます。nnn の開始値は 000 です。
EXPORT_MAX_FILE_SIZE パラメータには、32 ビット プラットフォームの場合は
2GB (2G) 未満の値を設定し、64 ビット プラットフォームの場合は 4GB (4G) 未満の
値を設定します。したがって、32 ビット プラットフォームで設定できる最大値は
2097151K です。 64 ビット プラットフォームで設定できる最大値は 4194303K です。
このパラメータに 0 を設定した場合、この制限が適用されます。
構文
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 パラメータとし
ても使用できます。
第 9 章 SET 文
457
SET FIRST DAYOFWEEK
SET FIRST DAYOFWEEK 文は、曜日のデータベース サーバ ロケールによって定義さ
れているデフォルトのナンバリング システムを上書きします。この文は、weekday の引
数が使用されたときに EXTRACT と DATENAME 関数が戻す結果に影響を与えます。
これらの関数の詳細については、『第 5 章 スカラ関数』を参照してください。
すべてのデータベース サーバ セッションに適用する週の最初の曜日を指定する場合
は、rbw.config ファイルの NLS_LOCALE 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 というオプション名で格納されます。
例
次の文は週の最初の曜日を 7 (土曜日) に設定します。
set first dayofweek 7
458
IBM Red Brick Warehouse: SQL リファレンス ガイド
SET FORCE TASKS
このセクションでは、関連する 6 つの SET 文について説明します。
v SET FORCE_SCAN_TASKS
v SET FORCE_FETCH_TASKS
v SET FORCE_JOIN_TASKS
v SET FORCE_TARGETJOIN_TASKS
v SET FORCE_HASHJOIN_TASKS
v SET FORCE_AGGREGATION_TASKS
最初の 4 つの文は、ROWS_PER_TASK パラメータよりも優先され、行数にかかわら
ず、クエリ処理に使用する並列タスク (または並列プロセス) の数を指定します。これ
らのパラメータすべてにおいて、各パラメータの設定値は使用される並列プロセスの数
を保証するものではありません。プロセスを割り当てる基準の詳細については、「クエ
リ パフォーマンス ガイド」を参照してください。
また、1 つの並列タスクの行数を指定することで、並列性を制御することもできます。
詳細については、495 ページの『SET ROWS_PER...TASK』を参照してください。
構文
次の SET 文には、OFF (デフォルト) または数値を設定してください。 OFF を設定する
と、並列性タスク数の明示的な制御が無効になります。
OFF
SET
FORCE_SCAN_TASKS
value
OFF
SET
FORCE_FETCH_TASKS
value
OFF
SET
FORCE_JOIN_TASKS
value
OFF
SET
FORCE_TARGETJOIN_TASKS
value
OFF
SET
FORCE_HASHJOIN_TASKS
value
OFF
SET
FORCE_AGGREGATION_TASKS
value
第 9 章 SET 文
459
SET FORCE TASKS
数値や OFF を指定せずに上記の SET 文を実行すると、各パラメータの現在の設定値が
戻されます。
set force_scan_tasks
** INFORMATION ** (1433) FORCE_SCAN_TASKS は 6 に設定されています。
これらの設定は rbw.config ファイルの TUNE パラメータを使用して、すべてのデー
タベース サーバ セッションに適用させることもできます。
FORCE_SCAN_TASKS
FORCE_SCAN_TASKS は、関係スキャンの並列タスク数を制御する設定です。
FORCE_FETCH_TASKS and FORCE_JOIN_TASKS
FORCE_FETCH_TASKS と FORCE_JOIN_TASKS の設定値は、STAR インデックスを
使用するクエリで、行のフェッチとテーブルのジョインに使用する並列タスクの数を制
御します。 1 以上の値に設定した場合は、それぞれ、ROWS_PER_FETCH_TASK およ
び ROWS_PER_JOIN_TASK の設定値よりも優先されます。
FORCE_TARGETJOIN_TASKS
FORCE_TARGETJOIN_TASKS は、ローカル インデックスを使用する TARGETjoin の
並列タスク数を制御する設定です。
このパラメータは、ローカル インデックスに対して TARGETjoin 操作を行う場合にの
み適用されます。非ローカル インデックスを使用する TARGETjoin の場合は、
TARGETjoin の上にある Exchange 演算子の次数は常に 1 であり、
FORCE_TARGETJOIN_TASKS パラメータによる影響はありません。
FORCE_HASHJOIN_TASKS
FORCE_HASHJOIN_TASKS の設定値は、ハイブリッド ハッシュ ジョインの並列タス
ク数を制御します。
FORCE_AGGREGATION_TASKS
FORCE_AGGREGATION_TASKS の設定値は 1 回のセッションで処理される集合タス
クの数を制御します。
460
IBM Red Brick Warehouse: SQL リファレンス ガイド
SET IDLE TIMEOUT
SET IDLE TIMEOUT 文は、データベースと ODBC または JDBC アプリケーションの
アイドル状態の接続時間を指定します。アイドル時間が指定時間を経過すると、切断さ
れます。デフォルト設定は 0 で、この場合は切断されません。
構文
SET IDLE TIMEOUT (
interval
interval
)
アイドル タイムアウト値は、分単位で指定します。この時間内はアイ
ドル状態で接続しておくことができますが、この時間が経過すると切
断します。
使用上の注意
クライアントが、指定時間以上アイドル状態である場合、データベース サーバはソケッ
トを閉じます。この場合、ユーザは再接続する必要があります。
アイドル タイムアウトの経過後に、何らかの操作を行おうとすると、クライアントに、
次のエラー メッセージが表示されます。
**FATAL** (10409) サーバに送信できないか、サーバがタイムアウトしました。
OS エラー: OS_error_message (erno error_number)
この文は、rbw.config ファイルの OPTION IDLE_TIMEOUT パラメータとしても使用で
きます。
第 9 章 SET 文
461
SET IGNORE OPTICAL INDEXES
クエリに最適なインデックスを選択する際に、光ディスクに格納されている PSU のイ
ンデックスを考慮するかどうかは、IGNORE_OPTICAL_INDEXES オプションで指定し
ます。クエリの処理中に光インデックスが使用されたというエラー メッセージまたは警
告メッセージが表示された場合、効率は低くても確実に利用できるインデックスが他に
あることが分かっていれば、IGNORE_OPTICAL_INDEXES オプションを設定し、光デ
ィスクにないインデックスの使用を強制できます。
通常、使用頻度の高いインデックスは光ディスク上のセグメントには格納しません。低
速の光ディスクにインデックスを格納すると、インデックスを使用する意味がなくなり
ます。
構文
次に、光ディスク上のセグメントに格納されたインデックスを現在のセッションに使用
するかどうかを指定する構文ダイアグラムを示します。
SET
IGNORE OPTICAL INDEXES
OFF
ON
OFF
光ディスク上のセグメントにあるインデックスを含め、すべてのイン
デックスを考慮して最適なインデックスを選択します。光ディスク上
のインデックスが最適であると判断された場合は、OPTICAL
AVAILABILITY オプションの設定によって処理方法が制御されま
す。このオプションの詳細については、470 ページの『SET OPTICAL
AVAILABILITY』を参照してください。デフォルトは OFF です。
ON
光ディスク以外の媒体に完全に格納されているインデックスのみか
ら、最適なインデックスを選択します。この基準に合ったインデック
スがなければエラーになり、操作は失敗します。
例
光ディスク以外の媒体に格納されているインデックスのみの使用を指定するには、次の
ように入力します。
set ignore optical indexes on
462
IBM Red Brick Warehouse: SQL リファレンス ガイド
SET IGNORE PARTIAL INDEXES
SET IGNORE PARTIAL INDEXES 文は、現在のセッションでクエリを処理する最適な
実行プランをシステムが選択するときに、部分的に利用可能なインデックスを考慮すべ
きかを指定します。部分的に利用可能なインデックスとは、オフライン インデックス
セグメントが 1 つ以上あるインデックスです。
構文
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 章 SET 文
463
SET INDEX TEMPSPACE and SET QUERY TEMPSPACE
SET INDEX TEMPSPACE 文は、現在のセッションでインデックス作成操作または
CHECK INDEX... VALIDATE FULL 操作に使用するスピル ファイルのディレクトリ、
メモリ サイズのしきい値、最大ファイル サイズを指定します。
SET QUERY TEMPSPACE 文は、現在のセッションでクエリ処理に使用するスピル フ
ァイルのディレクトリと最大ファイル サイズを指定します。
スピル ファイルはディスク上のファイルで、インデックスの作成中、インデックス全体
の検査中、または各クエリの処理中に中間結果を格納します。中間結果は当初メインメ
モリに格納されますが、しきい値に達するとディスクに書き出されます。スピル ファイ
ルの詳細については、「管理者ガイド」を参照してください。
構文
,
SET
QUERY
TEMPSPACE
DIRECTORIES ’ dir_path ’
MAXSPILLSIZE size
RESET
,
SET
INDEX
TEMPSPACE
SET
TEMPSPACE RESET
DIRECTORIES ’ dir_path ’
THRESHOLD value
MAXSPILLSIZE size
RESET
DIRECTORIES ’dir_path’,
テンポラリ領域に使用するディレクトリまたはディレクトリの集合を
指定します。dir_path には、絶対パスを入力してください。
rbw.config ファイルのエントリに複数のディレクトリを定義する場合
は、複数行で入力します。テンポラリ領域ディレクトリを使用する順
序はランダムであり (内部で決定)、ユーザ側から制御できないため、
ディレクトリはどの順序で指定しても構いません。
UNIX のみ
UNIX プラットフォームでは、テンポラリ領域ディレクトリを指定し
ない場合、デフォルト ディレクトリは /tmp になります。
464
IBM Red Brick Warehouse: SQL リファレンス ガイド
SET INDEX TEMPSPACE and SET QUERY TEMPSPACE
Windows のみ
Windows プラットフォームでは、テンポラリ領域ディレクトリを指定
しない場合、次の一時的なファイル パスがデフォルト ディレクトリ
として指定されます。
v %TMP% で指定されるパス
v %TEMP% が定義されていない場合は、%TMP% で指定されるパス
v %TMP% と %TEMP% が両者とも定義されていない場合は、
Windows ディレクトリ
Windows のみ の終り
THRESHOLD 値
インデックス作成、または CHECK INDEX... VALIDATE FULL 操作
の中間結果を書き込むメモリの最大許容量を指定します。指定した量
に達すると、中間結果はディスクに書き出されます。複数のインデッ
クスが関わる操作の場合は、指定したしきい値が作成される各インデ
ックスに均等分割されます。デフォルトは、10MB (10M) です。
指定単位は、KB (K) でも MB (M) でも構いません。それぞれ、数値
の後に K または M を付加してください。数値と単位識別子 (K、M)
との間には、空白を入れないでください。たとえば、1024K、500M の
ように記述します。
THRESHOLD オプションを使用するときには、次の条件に注意してく
ださい。
v しきい値は、必ずコンピュータの物理メモリ サイズよりも小さく
してください。
v コンピュータの物理メモリの 4 分の 1 から 2 分の 1 までの間
で、操作に合わせてしきい値を設定することをお勧めします。
– ロードや CREATE INDEX を実行する場合は、他のユーザが同
時にクエリを実行していることは少ないため、しきい値を物理メ
モリの半分に設定しても構いません。
– VALIDATE FULL オプションでの CHECK INDEX の実行中
に、他のユーザがデータベースにクエリを実行する可能性がある
場合は、しきい値を物理メモリの 4 分の 1 以下に設定してくだ
さい。
第 9 章 SET 文
465
SET INDEX TEMPSPACE and SET QUERY TEMPSPACE
このしきい値は、対応する MAXSPILLSIZE の前に指定してくださ
い。つまり、rbw.config ファイルの MAXSPILLSIZE エントリの前
に入力する必要があります。
しきい値を 0 に設定すると、インデックス エントリが 200 に達した
時点でディスクに書き出されます。
クエリ処理については、THRESHOLD パラメータはありません。
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 文の使用例を示します。
UNIX のみ
set index tempspace directories ’/disk1/itemp’,
’/disk2/itemp’, ’/disk3/itemp’
set index tempspace threshold 2M
set index tempspace maxspillsize 3G
UNIX のみ の終り
Windows のみ
set index tempspace directories ’d:\itemp’,
’e:\itemp’, ’f:\itemp’
set index tempspace threshold 2M
set index tempspace maxspillsize 3G
Windows のみ の終り
466
IBM Red Brick Warehouse: SQL リファレンス ガイド
SET INFO MESSAGE LIMIT
INFO_MESSAGE_LIMIT パラメータは、SET STATS INFO 文の使用中、および相関サ
ブクエリの実行中に、膨大な数のメッセージが戻されないようにします。デフォルト値
は 1,000 です。511 ページを参照してください。 1 つのクエリで最大 1,000 の通知メ
ッセージ (「STATISTICS」、または「INFORMATION」というラベルの付いたメッセー
ジ) が表示されますが、すべてのクエリは完全に実行されます。警告メッセージおよび
エラー メッセージは通常どおり戻されます。
メッセージの最大数を変更するには、DEFAULT INFO_MESSAGE_LIMIT の値を構成フ
ァイル (rbw.config) に追加するか、SET 文を使用します。通知メッセージは、クエリの
実行中にメモリに格納されるため、メッセージの可能な最大数は、システムで使用でき
るメモリの量に依存します。
構文
SET INFO MESSAGE LIMIT
1000
value
どちらの場合も、value には整数値を指定してください。 value を 0 に設定すると、戻
されるメッセージ数の制限がなくなります。
例
メッセージの最大数を 2000 に設定し、通常は 2000 以上の通知メッセージを戻す相関
サブクエリを実行したとします。この場合は 2000 までの通知メッセージが表示されま
す。
set info message limit 2000
続いて状況を説明する次のような警告メッセージが表示されます。
** WARNING ** (1443) INFO_MESSAGE_LIMIT 制限が 2000 個のため、
このクエリの通知メッセージはこれ以降表示されません。
第 9 章 SET 文
467
SET LOCK
SET LOCK 文は、他のユーザがテーブルにアクセスしている場合、またはすでにテーブ
ルをロックしている場合のテーブル ロック、およびデータベース ロックの動作を指定
します。
構文
SET LOCK
WAIT
WAIT
NO WAIT
ロックが必要な場合は、既存のロックが解除されるか、新規ロックを
取得するまでデータベース サーバ セッションを中断します。
デッドロックが発生する可能性がある場合は、ロック要求が拒否さ
れ、エラー メッセージが戻されます。 WAIT の設定は無視されま
す。
NO WAIT
すでにテーブルがロックされているか、他のユーザがテーブルにアク
セスしている場合は、ロック要求を拒否し、エラー メッセージを戻し
ます。
使用上の注意
この文は、現在のセッションでユーザが LOCK (テーブルのロック) 文または LOCK
DATABASE 文を実行したときに有効になります。この文の設定は、NO WAIT オプシ
ョンを指定した LOCK 文または LOCK DATABASE 文で変更できます。
468
IBM Red Brick Warehouse: SQL リファレンス ガイド
SET OLAP APPROXIMATE NUMERIC FAST COMPUTATION
このコマンドは、ウィンドウ フレームに関する SQL OLAP 関数を使用している特定の
クエリにのみ適用されます。これらの関数については、 125 ページの『第 6 章 分析関
数』で説明します。
構文
SET OLAP APPROXIMATE NUMERIC FAST COMPUTATION
ON
OFF
この文は、rbw.config ファイルの OPTION
OLAP_APPROXIMATE_NUMERIC_FAST_COMPUTATION パラメータの設定よりも優先
されます。
このパラメータのデフォルトは ON です。このパラメータを OFF に設定した場合、次
の条件では OLAP クエリのパフォーマンスが大きく低下する可能性があります。
v OLAP SUM、AVG、RATIO_TO_REPORT 関数がおおよその数値列 (REAL、
DOUBLE PRECISION、FLOAT) に適用される場合
v ウィンドウ フレームの下限が n PRECEDING、n FOLLOWING、CURRENT ROW
のいずれかである場合
パフォーマンス低下の程度はウィンドウ フレームのサイズに比例します。ウィンドウ
フレームが大きくなるほどパフォーマンスが低下します。
このコマンドが ON に設定されていれば、ウィンドウ パーティションが非常に大きい
場合でも、クエリのパフォーマンスは低下しません。各行についてウィンドウ フレーム
を再計算するのではなく、付加的にウィンドウ フレームを保持する分、パフォーマンス
が向上します。ただし、この「クイック計算」の方法では、OLAP 関数について誤った
結果が戻されることがあります。これは、数値列の値が大きく変化する場合は特に発生
しやすくなります。
つまり、OFF 設定では、パフォーマンスが低下する代わりに、正確な結果が保証されま
す。一方、デフォルトの ON 設定では、誤った結果を戻すリスクはありますが、パフォ
ーマンスが向上します。これに対応する RISQL MOVINGSUM クエリおよび
MOVINGAVG クエリを使用して、OLAP 関数のデフォルトの動作 (正しい結果が出な
い場合もあるクイック計算) をエミュレートすることもできます。
第 9 章 SET 文
469
SET OPTICAL AVAILABILITY
光ディスクのデータ、またはインデックスへのアクセスは、SET
OPTICAL_AVAILABILITY 文の設定、およびデータへのアクセスに使用する文が、次の
読込み操作、および書込み操作を必要とするかどうかに依存します。
v 読込み操作: SELECT 文および TMU UNLOAD 文
v 書込み操作:
– 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
WAIT NONE
光ディスク上のセグメントに格納された行データまたはインデックス
にアクセスできるまで待機します。光媒体のアクセスに関するメッセ
ージは表示されません。 WAIT_NONE はデフォルトです。
WAIT INFO
光ディスク上のセグメントに格納された行データまたはインデックス
にアクセスできるまで待機します。光ディスクにアクセス中であるこ
とを示す通知メッセージが表示されます。
WAIT WARN
光ディスク上のセグメントに格納された行データまたはインデックス
にアクセスできるまで待機します。光ディスクにアクセス中であるこ
とを示す警告メッセージが表示されます。
SKIP INFO
読込み操作について、行データまたはインデックスを格納している光
ディスクにアクセスしないことを指定します。光ディスクを操作対象
から除外したことを示す通知メッセージが表示されます。
書込み操作ではこのオプションは無視され、PRECHECK を指定した
場合と同様に文が処理されます。
SKIP WARN
470
読込み操作について、行データまたはインデックスを格納している光
IBM Red Brick Warehouse: SQL リファレンス ガイド
SET OPTICAL AVAILABILITY
ディスクにアクセスしないことを指定します。光ディスクを操作対象
から除外したことを示す警告メッセージが表示されます。
書込み操作ではこのオプションは無視され、PRECHECK を指定した
場合と同様に文が処理されます。
PRECHECK
どの操作についても、操作前に光ディスクの有無をチェックします。
光ディスク上のセグメントが検出された場合は、エラー メッセージを
表示し、処理を中止します。
ERROR
読込み操作は文を処理します。ただし、光ディスクが検出された時点
でエラー メッセージを表示し、処理を中断します。すでに処理を開始
した後に光ディスク上のセグメントが検出されるので注意してくださ
い。
書込み操作ではこのオプションは無視され、PRECHECK を指定した
場合と同様に文が処理されます。
例
光媒体に格納されたデータまたはインデックスのアクセス動作を指定する例を示しま
す。
set optical availability error
第 9 章 SET 文
471
SET ORDER BY
SET ORDER BY 文は、ソートする列でのデータベース サーバによる NULL 値の配置
を変更します。
SELECT 文の ORDER BY 句は、この設定よりも優先されます。このときの動的な
NULL の配置については、215 ページを参照してください。
構文
ASC
SET ORDER BY
NULL
FIRST
LAST
DESC
ASC、DESC
昇順ソートか降順ソートかを指定します。
FIRST、LAST
NULL 値の位置を指定します。
使用上の注意
この文は、現在のセッションで ORDER BY 句を指定した SELECT 文をユーザが実行
したときに有効になります。この文で設定した内容は、ORDER BY 句に NULL キーワ
ードを指定したクエリで変更できます。
例
次の文は、降順にソートした列の最後に NULL 値を配置するように指定します。
set order by desc null last
472
IBM Red Brick Warehouse: SQL リファレンス ガイド
SET PARALLEL SET_OPERATION
SET PARALLEL SET_OPERATION 文は、UNION、INTERSECT、EXCEPT の集約演算
子を使用しているクエリに対して、プラン レベルの並列処理を行なえるかどうかを決定
します。 rbw.config ファイルの TUNE 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 は OFF に設定されています。
使用上の注意
SET 演算子、UNION、INTERSECT、および EXCEPT を使用するクエリは、クエリ プ
ラン レベルでの並列処理および演算子レベルでの並列処理により効率的に実行できま
す。この 3 つの演算子がどのような組み合わせで指定されているクエリの場合でも、潜
在的なパフォーマンスは同じように向上します。
構成パラメータ TUNE PARALLEL_SET_OPERATION が ON に設定されている場合
は、UNION クエリ内の各クエリ式のクエリ プランは順次ではなく同時に実行されま
す。サーバは最初のクエリ式の実行が完了するのを待たずに、一部またはすべてのクエ
リ式の処理を同時に開始します。
次の簡略化したクエリを例に考えてみます。
select col1, col2, col3 from...
union
select col1, col2, col3 from...
union
select col1, col2, col3 from...;
十分な並列処理が指定されれば、3 つのクエリ式 (select...) に選択されたクエリ プラン
は同時に実行を開始します。この種のクエリとその EXPLAIN 出力の詳細な例について
は、「クエリ パフォーマンス ガイド」を参照してください。
このような特別なアプローチで並列処理を実行すると、一部の UNION クエリは高速化
されますが、それ以外はクエリ パフォーマンスが低下するため、デフォルトで
PARALLEL_SET_OPERATION パラメータは OFF に設定されます。集約演算子を含ま
第 9 章 SET 文
473
SET PARALLEL SET_OPERATION
ないクエリは影響を受けません。クエリごとに次の SET コマンドを使用してさまざま
な UNION クエリをテストし、パフォーマンスを比較することをお勧めします。
set parallel set_operation on;
クエリのパフォーマンスとリソース割当てという点から考えて、構成ファイル全体で
PARALLEL_SET_OPERATION パラメータを ON にするよりも、このほうが安全です。
チューニングに関する推奨事項の詳細については、「クエリ パフォーマンス ガイド」
を参照してください。
474
IBM Red Brick Warehouse: SQL リファレンス ガイド
SET PARALLEL_HASHJOIN
SET PARALLEL_HASHJOIN 文は、現在のセッションでハイブリッド ハッシュ ジョイ
ンに並列処理を許可するかどうかを指定します。 rbw.config ファイルの TUNE パラ
メータを使用して、すべてのデータベース サーバ セッションに適用することもできま
す。
構文
SET PARALLEL_HASHJOIN
OFF, ON
OFF
ON
ハイブリッド ハッシュ ジョインに並列処理を許可するかどうかを指
定します。デフォルトは OFF です。
このパラメータの現在の設定値を確認するには、OFF と ON のどちらも指定せずに次
の文を実行します。
set parallel_hashjoin
** INFORMATION ** (1434) PARALLEL_HASHJOIN は OFF に設定されています。
使用上の注意
SET FORCE_HASHJOIN_TASKS を使用してハイブリッド ハッシュ ジョインの並列プ
ロセス数を制御するには、この文で ON を設定してください。
例
次の文は、ハイブリッド ハッシュ ジョインに並列処理を許可するように指定します。
set parallel_hashjoin on
第 9 章 SET 文
475
SET PARTIAL AVAILABILITY
SET PARTIAL AVAILABILITY 文は、部分的に利用可能なテーブルに対するクエリの
現在のセッションでの動作を指定します。部分的に利用可能なテーブルとは、オフライ
ンの行データ セグメントが 1 つ以上あるか、クエリに使用するインデックスにオフラ
イン インデックス セグメントが 1 つ以上あるテーブルです。
構文
SET PARTIAL AVAILABILITY
PRECHECK
INFO
WARN
ERROR
INFO
クエリに必要なデータまたはインデックス セグメントの中に利用でき
ないものがあっても、クエリを実行します。テーブル全体が利用可能
な場合と結果が異なるときには、結果とともに通知メッセージが表示
されます。
WARN
INFO と同じ動作をしますが、通知メッセージではなく警告メッセー
ジを戻します。
ERROR
クエリに必要なテーブル内の行データまたはインデックス セグメント
の中に利用できないものがあっても、クエリを実行します。テーブル
全体が利用可能な場合と結果が異なるときには、結果を戻さずにエラ
ー メッセージを表示します。
PRECHECK
クエリを処理する前に、クエリに必要なテーブルまたはインデックス
の有効性をチェックします。テーブルが部分的にしか利用できない場
合は、エラー メッセージが実行され、クエリは実行されません。
使用上の注意
複数の選択式 (UNION) または部分的な SELECT 文 (サブクエリ) を含むクエリの場合
は、最初の選択式を事前に検証および実行してから、その他の選択式を検証および実行
します。
テーブルが部分的にしか利用できないために、2 番目の選択式でエラーが発生する場合
も、最初の選択式の処理が完了するまではエラー メッセージは戻されません。つまり、
最初の選択式を処理してから 2 番目の選択式を検証するため、エラーを戻すまでに時間
がかかることがあります。
部分的に利用可能なテーブルに対する動作設定とクエリに指定した選択式の内容によっ
て戻される結果とメッセージが異なります。
この文は、PRECHECK のデフォルトまたは rbw.config ファイルの OPTION
PARTIAL_AVAILABILITY パラメータで指定したデフォルトよりも優先されます。
476
IBM Red Brick Warehouse: SQL リファレンス ガイド
SET PARTITIONED PARALLEL AGGREGATION
SET PARTITIONED PARALLEL AGGREGATION 文は、現在のセッションでの集約操
作の並列処理を有効または無効にします。 rbw.config ファイルの TUNE パラメータ
を使用して、すべてのデータベース サーバ セッションに適用することもできます。
構文
SET PARTITIONED PARALLEL AGGREGATION
OFF, ON
OFF
ON
集約に並列処理を許可するかどうかを指定します。デフォルトは OFF
です。
このパラメータの現在の設定値を確認するには、OFF と ON のどちらも指定せずに次
の文を実行します。
set partitioned parallel aggregation;
** INFORMATION ** (1434) PARTITIONED_PARALLEL_AGGREGATION は OFF に設定されています。
使用上の注意
rbw.config ファイルでは、この TUNE パラメータはデフォルトで OFF に設定されて
います。パーティション化した並列集約は、非常に大きい数のグループを処理する集約
クエリへの使用を目的としています。詳細については、「クエリ パフォーマンス ガイ
ド」を参照してください。
第 9 章 SET 文
477
SET PERFORMANCE MONITOR
SET PERFORMANCE MONITOR 文は、現在のセッションにおけるクエリ パフォーマ
ンス モニタの ON/OFF を設定します。
構文
OFF
SET PERFORMANCE MONITOR
ON
‘user_comment’
OFF, ON
後続するクエリを監視するかどうかを指定します。デフォルトは OFF
です。
user_comment
オプションのコメントです。クエリが監視されているかどうか、ま
た、特定の条件やパラメータがそのクエリに指定されているかどうか
を識別するために使用できます。 user_comment には 256 文字までを
指定できます。
使用上の注意
パフォーマンス モニタ デーモン (rbwpmond) は、セッションのパフォーマンス モニタ
をオンにする前に有効にしておく必要があります。 rbwpmond デーモンを有効にするに
は、次のいずれかの方法に従います。
v Red Brick Warehouse Administrator で、[システムの管理ウィザード] の [パフォーマ
ンス監視デーモンの開始] ラジオ ボタンを選択する
v ALTER SYSTEM コマンドの START PERFORMANCE MONITOR オプションを実行
する
RISQL> alter system start performance monitor;
パフォーマンス モニタの使用方法の詳細については、「クエリ パフォーマンス ガイ
ド」を参照してください。
例
次の文では、複数の異なる ROWS_PER_TARGETJOIN_TASK の値を使用した同一クエ
リの実行を区別するため、SET PERFORMANCE MONITOR ‘comments’ コマンドを複数
使用します。
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;
478
IBM Red Brick Warehouse: SQL リファレンス ガイド
SET PERFORMANCE MONITOR
最初の SET PERFORMANCE MONITOR コマンドの ON キーワードでセッションの監
視が ON に設定されます。したがって、2 番目の SET PERFORMANCE MONITOR コ
マンドには ON キーワードが必要ありません。
第 9 章 SET 文
479
SET PRECOMPUTED VIEW MAINTENANCE
SET PRECOMPUTED VIEW MAINTENANCE 文は、集約保守が可能なすべての事前計
算集約に対して、集約保守を有効にします。集約保守がサポートされない場合について
は、「IBM Red Brick Vista ユーザーズ ガイド」を参照してください。
構文
SET PRECOMPUTED VIEW MAINTENANCE
ON
OFF
使用上の注意
この文は、SET PRECOMPUTED VIEW MAINTENANCE 文が設定されているセッショ
ンのみに適用されます。デフォルトの設定は ON です。
重要: 次の 2 つのことに注意してください。
v ロード時に保守を実行すると、ロード処理が遅くなります。
v 集約を保守する既存のスクリプトがある場合、保守が重複することがありま
す。
この文は、rbw.config ファイルの OPTION PRECOMPUTED_VIEW_MAINTENANCE
パラメータとしても使用でき、データベース サーバと TMU の両方で実装されていま
す。
480
IBM Red Brick Warehouse: SQL リファレンス ガイド
SET PRECOMPUTED VIEW MAINTENANCE ON ERROR
SET PRECOMPUTED VIEW MAINTENANCE ON ERROR 文は、保守中のエラーが原
因で保守できない集約テーブルが検出されたときに、バージョン管理されたデータベー
スがとる処置を指定します。この文はバージョン管理された データベースにのみ適用さ
れます。
構文
SET PRECOMPUTED VIEW MAINTENANCE ON ERROR
ROLLBACK
INVALIDATE
使用上の注意
この文では 2 つの結果が想定されます。保守できない集約テーブルをバージョン管理さ
れたデータベースが検出した場合、次のようになります。
v 違反した集約は無効とマークされます。
v トランザクション全体がロールバックされるため、集約テーブルを含むすべてのテー
ブルが元の状態に戻ります。
この SET 文は、TMU とデータベース サーバの両方で実装されています。
この文は rbw.config ファイルの OPTION PRECOMPUTED_VIEW_
MAINTENANCE_ON_ERROR パラメータとしても使用できます。
第 9 章 SET 文
481
SET PRECOMPUTED VIEW QUERY REWRITE
SET PRECOMPUTED VIEW QUERY REWRITE文を使用して、集約クエリ リライト
システムを ON または OFF に設定できます。デフォルトの設定は ON です。
構文
SET PRECOMPUTED VIEW QUERY REWRITE
ON
OFF
この文は、rbw.config ファイルの OPTION PRECOMPUTED_VIEW_ QUERY_
REWRITE パラメータでも指定できます。
482
IBM Red Brick Warehouse: SQL リファレンス ガイド
SET PREPLANS_HAVE_ONLY_PKFK_JOINS
SET PREPLANS_HAVE_ONLY_PKFK_JOINS 文は、プライマリ キー列/フォーリン キ
ー列を基準にしてジョインされていないディメンジョン テーブルを STARjoin 準備プ
ランに含めるかどうかを設定します。デフォルト設定値は OFF で、このようなディメ
ンジョン テーブルを STARjoin 準備プランに含めることができます。
この SET 文は FROM 句のサブクエリにも適用されます。デフォルトでは、サブクエ
リとその他のジョイン テーブルの間には参照整合性の関係はありません。
構文
SET
PREPLANS_HAVE_ONLY_PKFK_JOINS
OFF
ON
次の条件に該当する場合には、PREPLANS_HAVE_ONLY_PKFK_JOINS を ON に設定
できます。
v サブクエリまたは関連しないテーブルにジョインするディメンジョン テーブルに対
してクエリで制約を適用しており、準備プランの処理量が大きくなる。
STARjoin プランでのディメンジョン テーブルの制約ごとに、オプティマイザによっ
て準備プランが生成されます。参照整合関係によってディメンジョン テーブルにジ
ョインされていないテーブルとサブクエリを除外すると、オプティマイザで準備プラ
ンの処理時に処理量が大きいジョインが防止されるため、パフォーマンスが向上する
ことがあります。
v テーブルへのジョインでは、ディメンジョン テーブルで選択される行数を大幅に削
減できない。
準備プランでのディメンジョン テーブルと関連していないテーブルのジョインが、
STARjoin に比べ処理量が大きい場合には、準備プランからこのジョインを除外する
と、パフォーマンスが向上することがあります。ただし、ディメンジョン テーブル
またはアウトボード テーブルから選択される行の数を大幅に削減するジョインを除
外すると、STARjoin で処理する行数が大幅に増加するため、STARjoin のパフォーマ
ンスが低下する可能性があります。
すべてのデータベース サーバ セッションに適用される rbw.config ファイルの OPTION
PREPLANS_HAVE_ONLY_PKFK_JOINS パラメータをリセットできますが、このオプシ
ョンを使用するとパフォーマンスが低下する可能性があるため、セッション中には特定
のクエリに対してこの SET 文を使用することをお勧めします。
注: PREPLANS_HAVE_ONLY_PKFK_JOINS を使用するとパフォーマンスが低下する可
能性があるため、このオプションを使用する前に、参照整合性関係がないジョイン
を選択可能であるかどうかを評価してください。このジョインを組み込むことで、
ディメンジョン テーブルまたはアウトボード テーブルから選択される行の数が大
第 9 章 SET 文
483
SET PREPLANS_HAVE_ONLY_PKFK_JOINS
幅に削減される場合には、STARjoin で処理する行数が増加します。このため、この
文を ON に設定するとパフォーマンスが低下する可能性があります。
たとえば、次のクエリには Product ディメンジョン テーブルから Brand アウトボード
テーブルへのジョインが含まれています。次の条件が該当することを前提とします。
v Brand テーブルと Product テーブルには プライマリ キー/フォーリン キーの関係が
ない (この関係がある場合には、ジョインの記述に参照整合性列が指定されていない
場合でも、オプティマイザにより参照整合性列に従ってこれらのキーがジョインされ
ます。)
v Brand テーブルへのジョインでは、Product テーブルで選択される行数大幅に削減で
きない。
select extract(weekday from date) as Weekday, brand.flavor,
sum(dollars) as Jan2000_sale
from period natural join product p natural join brand natural join sales s
where year = 2000 and month = ’JAN’
and p.prodkey = s.prodkey and p.prodkey = brand.prodkey
and pkg_type = ’One-pound bag’
group by extract(weekday from date), brand.flavor;
この SET 文をデフォルト値 (OFF) で実行した場合の EXPLAIN 出力の一部を以下に示
します。ここでは、2 番目の準備プランに Brand テーブルと Product テーブルのジョイ
ンが含まれています。ジョインを実行するための適切なインデックスが存在しないた
め、このジョインはハッシュ ジョインです。
...
Prelim: 1; Choose Plan [id : 2] {
BIT VECTOR SORT (ID: 3)
-- TABLE SCAN (ID: 4) Table: PERIOD, Predicate: ((PERIOD.MONTH) = (’JAN
) ) && ((PERIOD.YEAR) = (2000) )
}
Prelim: 2; Choose Plan [id : 2] {
BIT VECTOR SORT (ID: 5)
-- HASH 1-1 MATCH (ID: 6) Join type: InnerJoin;
---- TABLE SCAN (ID: 7) Table: P (PRODUCT), Predicate: (P.PKG_TYPE) =
(’One-pound bag
’)
---- TABLE SCAN (ID: 8) Table: BRAND, Predicate: <none>
}
’
PREPLANS_HAVE_ONLY_PKFK_JOINS を ON に設定すると、2 番目の準備プランか
ら Brand テーブルと Product テーブルのジョインが除外されます。
...
Prelim: 1; Choose Plan [id : 3] {
BIT VECTOR SORT (ID: 4)
-- TABLE SCAN (ID: 5) Table: PERIOD, Predicate: ((PERIOD.MONTH) = (’JAN
) ) && ((PERIOD.YEAR) = (2000) )
}
Prelim: 2; Choose Plan [id : 3] {
484
IBM Red Brick Warehouse: SQL リファレンス ガイド
’
SET PREPLANS_HAVE_ONLY_PKFK_JOINS
BIT VECTOR SORT (ID: 6)
-- TABLE SCAN (ID: 7) Table: P (PRODUCT), Predicate: (P.PKG_TYPE) =
(’One-pound bag
’)
}
第 9 章 SET 文
485
SET QUERY MEMORY LIMIT
SET QUERY MEMORY LIMIT 文は、現在のセッションでクエリ、INSERT、
UPDATE、DELETE 文の実行に利用できる作業用メモリの最大量を指定します。指定し
た値に達すると、中間結果がディスク領域に保存されます。メモリ チューニング パラ
メータの詳細については、「管理者ガイド」と「クエリ パフォーマンス ガイド」を参
照してください。
構文
SET QUERY MEMORY LIMIT
value
value
DEFAULT
利用可能なメモリの最大量を 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
...
486
IBM Red Brick Warehouse: SQL リファレンス ガイド
SET QUERY MMAP ON/OFF
SET QUERY MMAP 文は、現在のセッションでのクエリ実行時のメモリ マッピングを
有効または無効にします。クエリのパフォーマンスを最適化するため、デフォルトでは
メモリ マッピングが有効化 (ON) されています。mmap システム呼出しは、ディメン
ジョン テーブルとインデックス ファイルを直接 プロセス アドレス空間、つまりプロ
グラム メモリにマッピングします。使用可能なメモリが十分にある場合には、オペレー
ティング システムのファイル キャッシュに対する読取り呼出し/書込み呼出しよりも、
メモリ マッピングの方が効率的です。
特に以下の条件が該当する場合には、STARjoin、TARGETjoin、およびテーブル スキャ
ンの選択プランでメモリ マッピングを実行すると、クエリのパフォーマンスが向上しま
す。
v ファンクショナル ジョインのためにディメンジョン テーブルのスキャンが実行され
る。
v B-TREE 1-1 マッチ ジョインのためにディメンジョンのプライマリ キー インデック
スにアクセスする。
その他のプラン (準備プランやハッシュ ジョイン プランなど) で実行されるファンク
ショナル ジョインと B-TREE 1-1 マッチ ジョインでは、メモリ マッピングは適切で
はありません。
メモリ マッピングは SELECT 文内のクエリ式以外にも使用できます。たとえば、前述
の条件が該当する場合には、ファクト テーブルに対する UPDATE 文で参照されるディ
メンジョン テーブルのメモリ マッピングを実行できます。ただし、DML 文のターゲ
ットであるディメンジョン テーブルにはメモリ マッピングを実行できません。
クエリとメモリの管理の詳細については、「クエリ パフォーマンス ガイド」を参照し
てください。
構文
SET QUERY MMAP
ON
OFF
使用上の注意
この文は、rbw.config ファイルの OPTION QUERY_MMAP パラメータの設定よりも
優先されます。
QUERY_MMAP オプションを無効にすると、QUERY_MMAP_LIMIT パラメータの値は
無効になります。
第 9 章 SET 文
487
SET QUERY MMAP ON/OFF
QUERY_MMAP オプションを有効にしても、ファンクショナル ジョインと B-TREE
1-1 マッチ ジョインのためにすべてのディメンジョン テーブルとインデックスのメモ
リ マッピングが実行されるわけではありません。実際には、特定のクエリについて、特
定のテーブルまたはインデックスの全体または一部がメモリ マッピングされます。サー
バ マシンで使用可能な物理メモリと仮想メモリの量によって、メモリ マッピング可能
なデータの量が決まります。 QUERY_MEMORY_LIMIT パラメータ指定による一般的
なクエリへのメモリ割当てとメモリ マッピングには同じメモリ プールが使用されま
す。 QUERY_MMAP_LIMIT パラメータ (489 ページ参照) は、クエリ実行中にメモリ
マッピング用に割り当て可能なメモリの量を制御します。
488
IBM Red Brick Warehouse: SQL リファレンス ガイド
SET QUERY MMAP LIMIT
SET QUERY MMAP LIMIT 文は、クエリ実行中にディメンジョン テーブルおよびイン
デックスのメモリ マッピングに使用できるプロセス アドレス空間、つまりプログラム
メモリの最大容量を設定します。クエリとメモリの管理の詳細については、「クエリ パ
フォーマンス ガイド」を参照してください。
構文
SET QUERY MMAP LIMIT
value
value
DEFAULT
利用可能なプロセス アドレス空間の最大量を KB (K)、MB (M)、GB
(G) で指定します。K、M、G のいずれかを指定してください。このと
き、数字と文字の間には空白を入れないでください。最小値は 8K で
す。最大値は、マシンの実際の物理メモリ量ではなく、ご使用のプラ
ットフォームの仮想メモリのアドレス可能度によって決まります。た
とえば 32 ビット Windows マシンの場合、上限は 3G 未満になりま
す。64 ビット UNIX マシンの場合、最大値はかなり大きくなりま
す。
DEFAULT キーワードは、rbw.config ファイルに指定されている値を
最大値として設定します (ファイルに値が指定されていない場合はデ
フォルトの 5M)。
使用上の注意
この文は、rbw.config ファイルの TUNE QUERY_MMAP_LIMIT パラメータの設定よ
りも優先されます。
QUERY_MMAP オプションを無効にすると (487 ページ参照)、QUERY_MMAP_LIMIT
パラメータの値は無効になります。
QUERY_MMAP_LIMIT パラメータを設定するときには、このパラメータとすべての同
時接続ユーザの QUERY_MEMORY_LIMIT 設定により使用されるリソースは、同じ物
理メモリ プールのリソースである点に注意してください。パフォーマンス上の理由か
ら、この 2 つのパラメータによって割り当てられるメモリの合計量がマシンの物理メモ
リ容量を超えないようにしてください。ただし QUERY_MMAP_LIMIT パラメータを設
定すると、この設定自体がオペレーティング システムのアドレス可能度の制限を超えて
いる場合にのみエラーが戻されます。サーバは 2 つのパラメータで割り当てられるメモ
リの合計量や利用可能な物理メモリの量をチェックしません。
メモリ マッピングにおける実際のメモリ使用量は、各クエリの B-TREE 1-1 マッチ ジ
ョインとファンクショナル ジョインの要件によって異なります。テーブルとインデック
第 9 章 SET 文
489
SET QUERY MMAP LIMIT
スが部分的にメモリ マッピングされる場合には、統計メッセージによってその旨が通知
されるので、QUERY_MMAP_LIMIT 設定値を段階的に増加します。
例
次のスクリプトは、クエリ sales_report99 のメモリ マッピング制限を 1GB に設定し、
クエリを実行してから、この制限をデフォルトにリセットします。
set query mmap limit 1G;
run sales_report99;
set query mmap limit default;
490
IBM Red Brick Warehouse: SQL リファレンス ガイド
SET QUERYPROCS
SET QUERYPROCS 文は、現在のセッションの 1 つのクエリで利用できる並列プロセ
スの最大数を指定します。
構文
SET QUERYPROCS
num_per_query
num_per_query
0 から 32,767 の整数を指定します。
0 または 1 を指定すると、並列クエリ処理は行われません。
使用上の注意
この文は、rbw.config ファイルの TUNE QUERYPROCS オプションで指定されたデフ
ォルトよりも優先されます。データベース サーバは 0 から rbw.config ファイルの設
定値までの値を受け入れます。 rbw.config ファイルの設定値を超える値と 0 未満の値
は無視されます。
例
次の文は、現在のデータベース サーバ セッションで実行する 1 つのクエリで利用でき
る最大プロセス数を 5 に設定します。
set queryprocs 5
第 9 章 SET 文
491
SET REPORT_INTERVAL
SET REPORT_INTERVAL 文は、rbwadmd デーモンにレポートを送る最大間隔時間を指
定します。 rbwadmd デーモンは、この値に基づいて動的統計テーブル (DST) を更新し
ます。
指定した間隔時間が経過する前に、データベース イベントがレポートをトリガすること
もあります。状態を変化させる文、またはロックを要求、取得、解除するセッションを
データベース サーバが検出すると、rbwadmd デーモン プロセスにレポートを送りま
す。状態とは、接続、アイドル、実行、コンパイル、演算、結果行の抽出、ソート、イ
ンデックスの作成、挿入などです。
構文
SET REPORT_INTERVAL
value
value
rbwadmd デーモンにレポートを送る分単位の最大間隔時間を、正の整
数で指定します。
使用上の注意
この文は、デフォルトの 1 分および、rbw.config ファイルの ADMIN
REPORT_INTERVAL パラメータの指定値よりも優先されます。
この文の引数として 0 を指定すると、rbwadmd デーモン プロセスにレポートを送る最
大間隔時間が無制限になります。クエリの完了などのイベントが発生するまで、レポー
トは送られません。
492
IBM Red Brick Warehouse: SQL リファレンス ガイド
SET RESULT BUFFER と SET RESULT BUFFER FULL ACTION
クエリの結果をクライアントが取得するまで格納しておくバッファのサイズを指定する
には、次の構文で SQL SET 文を実行します。
構文
SET RESULT BUFFER
UNLIMITED
valueK
valueM
valueG
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
PAUSE
ABORT
;
ABORT は、バッファのサイズが設定値に達した時点でクエリ処理を中止することを指
定します。 PAUSE は、クライアントがデータを取得するまで、クエリの処理を一時停
止することを指定します。
テーブルの Read ロックは、すべてのリザルト セットが Red Brick サーバから転送さ
れるか、リザルト バッファに格納されるまで保持されます。一定量以上のデータ抽出に
ユーザの要求を必要とするクライアント ツールの場合は、すべての結果がクライアント
に送信されるか、リザルト バッファに格納されてクライアントの要求を待機する状態に
なるまで、テーブルの Read ロックは解除されません。
例
次の SET 文は、現在のセッションについてリザルト バッファのサイズを 100MB に設
定し、設定値に達した時点でクエリ処理を中止することを指定します。
set result buffer 100M;
set result buffer full action abort;
第 9 章 SET 文
493
SET ROWCOUNT
SET ROWCOUNT 文を利用すると、誤って実行された「暴走クエリ」を制御できます。
この文は、指定した行数が抽出されるとクエリの実行を停止します。システム リソース
を有効に使用し、またユーザはリザルト セットの一部を確認できます。リザルト セッ
トの後には、SET ROWCOUNT が有効であることを示す通知メッセージが表示されま
す。
クエリから戻された行数が、ROWCOUNT の設定値と一致した場合も、クエリ中断メッ
セージが表示されます。
構文
SET 文は、現在のセッションの行カウントを設定します。すべてのデータベース サー
バ セッションの行カウントを設定する場合は、DEFAULT ROWCOUNT パラメータを
構成ファイル (rbw.config) に追加します。
SET ROWCOUNT
number_of_rows
どちらの場合も、行数は正数に設定してください。デフォルトの設定値は 0 で、抽出さ
れる行数の制限はなくなります。 ROWCOUNT の設定値を確認するには、
RBW_OPTIONS システム テーブルにクエリを実行します。
例
この例では、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) ROWCOUNT に設定された 10 個の行データを取得し、
クエリを終了しました。
494
IBM Red Brick Warehouse: SQL リファレンス ガイド
SET ROWS_PER...TASK
このセクションでは、関連する 4 つの SET 文について説明します。
v SET ROWS_PER_SCAN_TASK
v SET ROWS_PER_JOIN_TASK
v SET ROWS_PER_FETCH_TASK
v SET ROWS_PER_TARGETJOIN_TASK
上記の文は、並列タスクあたりの行数を指定することにより、クエリの並列処理を制御
します。 SET FORCE TASK 文は、ROWS_PER_TASK パラメータに優先し、タスクが
処理する行数に関係なく並列タスク数を指定します。詳細については、459 ページの
『SET FORCE TASKS』を参照してください。
各パラメータの詳しい内容とタスク数を計算する式の例については、「クエリ パフォー
マンス ガイド」を参照してください。
第 9 章 SET 文
495
ROWS_PER_SCAN_TASK
ROWS_PER_SCAN_TASK パラメータは、1 つのスキャン プロセスを生成するために必
要な結果行の最小数を設定し、関係スキャンの並列プロセス数を制限します。この値
は、インデックスを使用せずテーブル全体をスキャンするクエリに影響します。
構文
SET
ROWS_PER_SCAN_TASK
rows_per_process
rows_per_process 1 から 231 の整数を指定できます。この値を大きくするほどクエリ先
のテーブルから行が戻されるときの並列度が低くなり、値を小さくす
るほど並列度が高くなります。 5,000 以上に設定することを推奨しま
す。
実際に使用されるプロセス数は、TOTALQUERYPROCS パラメータおよび
QUERYPROCS パラメータの設定値によっても制限されます。
496
IBM Red Brick Warehouse: SQL リファレンス ガイド
ROWS_PER_FETCH_TASK と ROWS_PER_JOIN_TASK
ROWS_PER_FETCH_TASK パラメータと ROWS_PER_JOIN_TASK パラメータは、
STAR インデックスを使用するクエリを処理するための並列プロセスの数を決定しま
す。インデックス スキャン処理と行データ処理の作業量はクエリによって異なるため、
フェーズごとに最少処理行数を設定できるようになっています。たとえば、行のフェッ
チ後に大量の処理を必要とするクエリ (GROUP BY、SUM、MIN など) の場合は、フェ
ッチ タスクに割り当てる行数をジョイン操作に割り当てる行数より少なくし、フェッチ
操作に使用されるプロセス数が多くなるようにします。
構文
SET
SET
ROWS_PER_JOIN_TASK
ROWS_PER_FETCH_TASK
rows_per_process
rows_per_process
rows_per_process
1 から 231 の整数を指定できます。この値を大きく
するほど並列度が低くなり、値を小さくするほど並
列度が高くなります。利用可能なプロセス数が 2 未
満の場合、クエリの並列処理は行われません。
並列処理を効果的にするには、ROWS_PER_JOIN_TASK と ROWS_PER_FETCH_TASK
の値を 5,000 以上に設定します。
第 9 章 SET 文
497
ROWS_PER_TARGETJOIN_TASK
ROWS_PER_TARGETJOIN_TASK パラメータは、ローカルで セグメント化されたイン
デックス を使用する TARGETjoin 操作の実行に使用する並列プロセス数を決定しま
す。
構文
SET
ROWS_PER_TARGETJOIN_TASK
rows_per_process
rows_per_process 1 から 231 の整数を指定できます。この値を大きくするほど並列度が
低くなり、値を小さくするほど並列度が高くなります。利用可能なプ
ロセス数が 2 未満の場合、クエリの並列処理は行われません。
使用上の注意
このパラメータは、ローカル インデックスに対して TARGETjoin 操作を行う場合にの
み適用されます。非ローカル インデックスを使用する TARGETjoin の場合、
TARGETjoin の上にある Exchange 演算子の次数は常に 1 であり、
ROWS_PER_TARGETJOIN_TASK パラメータによる影響はありません。
498
IBM Red Brick Warehouse: SQL リファレンス ガイド
SET SAMPLE MARGIN
SET SAMPLE MARGIN 文は、ランダム サンプリングを実行しながら、行サンプルの
サイズの分散度を監視するためのマージン パラメータを設定します。
構文
SET SAMPLE MARGIN
value
ON
OFF
value
正の整数を指定します。
ON
マージン値は、rbw.config ファイルから取得されます。 rbw.config
ファイルに値が指定されていない場合、デフォルト値が使用されま
す。デフォルト値は 10% です。
OFF
マージンは設定されません。
使用上の注意
行サンプリングで戻されるサンプルの実際のサイズは、要求したサイズと異なることが
あります。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
第 9 章 SET 文
499
SET SAMPLE MARGIN
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) の並行性が 1 回以上です。
High: 4、Low: 4、Average: 4
** INFORMATION ** (1466) サンプル スキャン (ID: 2)。サンプル シード :
965929035。サンプル サイズの指定 5.00000000 パーセント (3497) rows、
結果 5.00278806 パーセント (3499) rows。
** STATISTICS ** (500) Time = 00:00:00.18 cp time, 00:00:00.15
time, Logical IO count=323
** INFORMATION ** (256) 12 行が戻されました。
500
IBM Red Brick Warehouse: SQL リファレンス ガイド
SET SAMPLE SEED
SET SAMPLE SEED 文は、特定のクエリから得たサンプルを再生するために、現在の
セッションでクエリを実行するごとにシード値 (生成された値の擬似乱数列の開始値)
を設定します。
構文
SET SAMPLE SEED
value
value
一意の正の整数を指定します。
使用上の注意
シード値を指定すると、同じデータに対する同じクエリ用に、再生可能なサンプルを維
持できます。指定するシード値は重要な問題とはなりませんが、一意である必要があり
ます。たとえば、シード値を 2 または 2000 に設定できますが、どちらに設定しても、
そのシードに基づく同一のサンプリング クエリでは同じリザルト セットが戻されま
す。
シード値は次の 2 つの場所で設定できます。
v SET SAMPLE SEED 文
v クエリの from 句
select * from sales sample 20 seed 100
重要: シード値は正の整数である必要があります。シード値を 0 にするとエラーが戻さ
れます。
あるセッションのサンプル シード値をリセットするには、値を含まない SET SAMPLE
SEED 文を使用します。デフォルトの動作が回復して、その後の各クエリには個別のラ
ンダムなシード値が割り当てられます。
EXACT 以外のモードの基本テーブルのサンプリング クエリは再生可能です。その他の
すべてのサンプリング クエリは、クエリの並列処理が無効な場合にのみ再生可能です。
重要: 並列処理を無効にすると、サンプリング クエリのパフォーマンスが大幅に低下す
ることがあるので注意してください。
SET STATS INFO が実装されている場合に限り、クエリ結果の後にサンプル マージン
情報が表示されます。
例
set stats info;
set sample seed 356;
第 9 章 SET 文
501
SET SAMPLE SEED
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) の並行性が 1 回以上です。
High: 4、Low: 4、Average: 4
** INFORMATION ** (1466) サンプル スキャン (ID: 2)。サンプル シード :
356。Sample Margin: 10.000000 percent. サンプル サイズの指定 2.00000000
パーセント (1399) rows、結果 2.00025736 パーセント (1399) rows。
** STATISTICS ** (500) Time = 00:00:00.18 cp time, 00:00:00.11 time,
Logical IO count=323
** INFORMATION ** (256) 5 行が戻されました。
502
IBM Red Brick Warehouse: SQL リファレンス ガイド
SET SEGMENTS
SET SEGMENTS 文は、テーブルまたはインデックスを削除したときに、そのセグメン
トを削除するかどうかを指定します。この指定は、名前付きセグメントにのみ適用しま
す。デフォルト セグメントは、必ず削除されます。
構文
KEEP
DROP
SET SEGMENTS
DROP
テーブルまたはインデックスを削除した時に、そのセグメントを削除
します。この指定はデフォルトです。
KEEP
名前付きセグメントが添付されているテーブルまたはインデックスを
削除しても、その名前付きセグメントを削除せず、再使用できるよう
にします。そのセグメントに割り当てられた物理ストレージには変化
がありません。セグメントは、ALTER SEGMENT 文によって他のテ
ーブルまたはインデックスに添付できます。
使用上の注意
この文は、名前付きセグメントを削除するデフォルトまたは rbw.config ファイルの
OPTION SEGMENTS パラメータで指定したデフォルトよりも優先されます。 DROP
TABLE 文または DROP INDEX 文ですべての設定を無効にすることができます。
例
この文は、現在のセッションでテーブルまたはインデックスを削除すると、そのテーブ
ルまたはインデックスのセグメントも削除するように設定します。セグメントは、他の
テーブルまたはインデックスには再使用できません。
set segments drop
第 9 章 SET 文
503
SET STAR INDEX AVAILABILITY
SET STAR INDEX AVAILABILITY コマンドには次の 2 つの目的があります。
v 特定のファクト テーブルを含む STARjoin クエリでの STAR インデックスの使用を
制御する。
v 特定のファクト テーブルを使用するシングルファクト STARjoin クエリおよびマル
チファクト STARjoin クエリでの STAR インデックスの使用を制御する。
このコマンドは、特定の STAR インデックスを使用対象から除外する場合や、ある
STAR インデックスを別の STAR インデックスよりも優先して使用する場合に使用で
きます。たとえば、既存の 5 つの STAR インデックスのうち 3 つの STAR インデッ
クスを識別し、すべてのクエリでこの 3 つのインデックスのみを使用するようにサーバ
に指示できます。あるいは、このコマンドを使用して、特定のファクト テーブルのリス
トに対するファクト間 STARjoin に使用できる STAR インデックスを制限することも
できます。
このコマンドは、デフォルトでサーバが採用する意思決定プロセスよりも優先されま
す。したがってこのコマンドを使用するのは、クエリのプロファイルとパフォーマンス
を詳しく理解した上で、STARjoin 動作を強制的に実行する明確な理由がある場合に限
ります。ほとんどの STARjoin クエリでは、サーバのデフォルト動作を受け入れます。
このコマンドは現行セッションで実行されているクエリにのみ適用されます。
構文
,
SET STAR INDEX AVAILABILITY
star_index
RESET
NULL
FOR
table_name
,
WHEN JOINING
504
table_name
star_index
table_name に対して定義されている 1 つ以上の STAR インデックス
を指定します。
RESET
指定したテーブルのこれまでの使用設定を除去、つまり「設定解除」
します。
NULL
指定したテーブルに対するすべての STARjoin 処理を無効にします。
NULL オプションを使用すると、STARjoin プランは生成されませ
ん。
IBM Red Brick Warehouse: SQL リファレンス ガイド
SET STAR INDEX AVAILABILITY
FOR table_name フォーリン キー列に対して 1 つ以上の STAR インデックスが定義さ
れているファクト テーブルを指定します。table_name には基本テー
ブルを指定してください。ビュー、シノニム、テンポラリ テーブル、
システム テーブルは指定できません。
WHEN JOINING table_name
シングルファクト STARjoin クエリおよびマルチファクト STARjoin
クエリに関連して AVAILABILITY コマンドの範囲を定義します。1
つ以上のファクト テーブルを指定してください。また、FOR
table_name 句で指定したテーブルを必ず含めてください。各
table_name には基本テーブルを指定してください。ビュー、シノニ
ム、テンポラリ テーブル、システム テーブルは指定できません。
この句で 1 つのテーブル (FOR で指定したテーブル) のみを指定す
ると、この設定は シングルファクト テーブル STARjoin に適用され
ます。このテーブルを使用するマルチファクト ジョインには、このコ
マンドは影響しません。
この句で複数のテーブルを指定すると、これらのテーブルをジョイン
する マルチファクト テーブル STARjoin にこの設定が適用されま
す。このテーブルをジョインするシングルファクト ジョインには、こ
のコマンドは影響しません。
セルフ ジョインの場合、WHEN JOINING 句で同一テーブルを繰り返
し指定できます。 WHEN JOINING 句を使用しない場合には、特定の
テーブル (シングル ファクト テーブルまたはマルチ ファクト テー
ブル) に対するすべての STARjoin クエリに設定が適用されます。
使用上の注意
実行する STAR INDEX AVAILABILITY コマンドを追跡し、これらのコマンドが相互
にデフォルト値を誤って上書きしていないことを確認します。たとえば、1 つのセッシ
ョン中に同一テーブルに 2 つの設定を入力すると、2 番目に入力した設定が 1 番目の
設定を上書きすることがあります。現在のAVAILABILITY 設定値と STARjoin および
TARGETjoin の現在のしきい値を確認するには、RBW_OPTIMIZER_OPTIONS テーブル
に対してクエリを実行します。
RISQL> select * from rbw_optimizer_options;
TNAME
OPTIMIZATION_NAME
VALUE
NULL
STARJOIN THRESHOLD
30
NULL
TARGETJOIN THRESHOLD
80
NEWSALES
STARJOIN THRESHOLD
40
NEWSALES
STAR INDEX AVAILABILITY
NEWSALES_STAR_PRODUCT_IDX
...
SEQ
1
1
1
1
複数のテーブルが指定されている WHEN JOINING 句によって施行されるディレクティ
ブの効果は、ファクト間 STARjoin プランを生成するコンパイラの機能によって決まり
ます。指定されたファクト テーブルの STAR インデックス間に互換性がないことか
第 9 章 SET 文
505
SET STAR INDEX AVAILABILITY
ら、SET コマンドに関係なく、ファクト間のジョインは不可能です。ファクト間
STARjoin の生成規則の詳細については、「クエリ パフォーマンス ガイド」を参照し
てください。
例
Sales テーブルに、SALES_STAR_IDX と STORE_STAR_IDX という 2 つの STAR イ
ンデックスが設定されているとします。次の SET コマンドは、現行セッション中の
Sales テーブルに対する STARjoin クエリで、SALES_STAR_IDX を使用可能 にし、
STORE_STAR_IDX を使用不可 にします。
set star index availability SALES_STAR_IDX for sales;
SET STAR INDEX コマンドを実行すると、実行時に現在有効な設定を示す統計メッセ
ージが表示されます。たとえば、次のようになります。
** STATISTICS ** (2495) SET コマンドは、以下の STAR インデックスを
テーブル SALES で使用可能にしました。
** STATISTICS ** (2496) SALES_STAR_IDX
次のコマンドでは、両方の STAR インデックスが使用不可になります。
set star index availability null for sales;
SET STAR INDEX コマンドを使用してファクト間ジョインでのインデックスの使用を
制御する例を次に示します。Sales テーブルと Sales_Forecast テーブルが、ファクト間
STARjoin プランを使用して頻繁にジョインされ、この 2 つのテーブル間に次の STAR
インデックスが作成されているとします。
SALES テーブルのインデックス
SALES_STAR_IDX
STORE_STAR_IDX
PRODUCT_STAR_IDX
SALES_FORECAST テーブルの
インデックス
SALES_FORECAST_STAR_IDX
SALES_FORECAST_STORE_STAR_IDX
次の SET コマンドは、Sales テーブルと Sales_Forecast テーブルのファクト間ジョイン
に使用できる唯一の STAR インデックスのペアとして、STORE_STAR_IDX と
SALES_FORECAST_STORE_STAR_IDX を指定します。
set star index availability store_star_idx for sales when joining sales,
sales_forecast;
set star index availability sales_forecast_store_star_idx for sales_forecast
when joining sales, sales_forecast;
506
IBM Red Brick Warehouse: SQL リファレンス ガイド
SET STARJOIN THRESHOLD
SET STARJOIN THRESHOLD コマンドは、シングル ファクト テーブル STARjoin ク
エリ実行時の STARjoin/TARGETjoin 処理とテーブル スキャン処理の選択を制御しま
す。
しきい値は、クエリの制約が適用されるファクト テーブルの行数の推定割合を示しま
す。デフォルトの割合は 30% です。このデフォルト値では、制約が適用されるファク
ト テーブルの行数が 30% 以下の場合に STARjoin プランが優先されます。弱い制約が
予期されている (行数の割合が大きい) 場合には、テーブル スキャン プランが優先さ
れます。この 30% 規則では、ファクト テーブルに対する制約が比較的厳密な場合には
STARjoin 処理が効率的であるが、ファクト テーブルの制約が弱くなるにつれ、
STARjoin 処理の効率性が低下することを前提としています。
しきい値をゼロ (0) に設定してもコンパイル時に STARjoin プランが生成されますが、
実行時にはこのプランは選択されません。しきい値を 100 に設定すると、テーブル ス
キャン プランは常に選択されなくなります。STARjoin プランまたは TARGETjoin プ
ランのうち、存在しているプランが選択されます。
このコマンドは現行セッションにのみ適用され、ファクト間 STARjoin クエリには 適
用されません。オプションの FOR table_name 句を使用すれば、特定のファクト テー
ブルに対するシングル ファクト テーブル STARjoin 処理のしきい値を定義できます。
この句を使用しないと、セッション中に実行されるすべてのシングル ファクト テーブ
ル STARjoin クエリにこのしきい値が適用されます。
構文
SET STARJOIN THRESHOLD
percentage
RESET
FOR
table_name
percentage
ファクト テーブル行の割合です。これは、実行時に STARjoin プラ
ンとテーブル スキャン プランのどちらが選択されるかを決定するし
きい値です。table_name を指定しないと、割合値はすべてのシングル
ファクト テーブル STARjoin クエリに適用されます。有効値は 0 か
ら 100 です。デフォルトは 30 です。
RESET
特定の設定が適用される前のしきい値にリセットします。テーブル名
を指定すると、以前に設定されたテーブル固有のしきい値が「設定解
除」されます。したがって、現在のグローバルなしきい値がそのテー
ブルに適用されます。テーブル名を指定しないと、グローバルなしき
い値がデフォルト値の 30% にリセットされます。
FOR table_name table_name を指定すると、このテーブルの STAR インデックスを使
用するシングル ファクト テーブル STARjoin クエリにのみしきい値
が適用されます。この table_name には基本テーブルを指定してくだ
さい。ビュー、シノニム、テンポラリ テーブル、システム テーブル
第 9 章 SET 文
507
SET STARJOIN THRESHOLD
は指定できません。指定したテーブルに STAR インデックスがない場
合には、SET コマンドは無効です。
使用上の注意
準備プランの実行結果によって、ディメンジョン テーブルの制約付き行の実際の行数が
決まります。この中間リザルト セットに基づいて、ファクト テーブルの制約付き行数
が推定されます。推定値がしきい値の割合以下である場合には、STARjoin プランまた
は TARGETjoin プランが選択されます。推定値がしきい値よりも大きい場合には、テー
ブル スキャン プランが選択されます。クエリ プランの選択の詳細については、「クエ
リ パフォーマンス ガイド」を参照してください。
デフォルトの「グローバル」しきい値は、RBW_OPTIMIZER_OPTIONS テーブルに格納
されており、これらのデフォルト値とテーブル固有のしきい値よりも優先されます。現
在有効な設定をすべて追跡するには、このテーブルに対してクエリを実行します。
グローバルしきい値とテーブル固有のしきい値の両方が調整されている場合には、
RESET オプションを使用した場合の影響を理解しておくことが大切です。特定のテーブ
ルのしきい値をリセットすると、リセット後の新しい設定値が 現在の グローバル設定
値になります (デフォルト グローバル設定値ではありません)。
rbw.config ファイルには、SET STARJOIN THRESHOLD コマンドに相当するパラメー
タはありません。ユーザが新規セッションを開始するたびにしきい値を自動的に設定す
るようにするには、.rbwrc ファイルをセットアップします。.rbwrc 初期化ファイルの
詳細については、「管理者ガイド」の初期化ファイルに関する説明を参照してくださ
い。
例
Aroma データベースに、フォーリン キー列に SALES_STAR_IDX が設定されていると
します。次のクエリは、先行の Period ディメンジョン テーブルに対して非常に弱い制
約を適用します。デフォルトではこのクエリはテーブル スキャン プランを使用して実
行されます。
RISQL> set starjoin threshold reset;
RISQL> select prod_name, store_name, sum(dollars)
> from sales natural join product natural join store
> natural join period
> where year in(1999, 2000)
> group by prod_name, store_name
> order by prod_name, store_name;
** STATISTICS ** (500) Compilation = 00:00:00.08 cp time, 00:00:00.07 time,
Logical IO count=81, IO count=0
PROD_NAME
STORE_NAME
Aroma Roma
Beaches Brew
17435.25
Aroma Roma
Beans of Boston
15306.00
508
IBM Red Brick Warehouse: SQL リファレンス ガイド
SET STARJOIN THRESHOLD
Aroma Roma
Aroma Roma
Aroma Roma
...
Coffee Brewers
Coffee Connection
Cupertino Coffee Supply
13210.25
12189.75
12745.00
** STATISTICS ** (1457) EXCHANGE (ID: 14) の並行性が 1 回以上です。
High: 4、Low: 4、Average: 4
** STATISTICS ** (1458) CHOOSE PLAN (ID: 2) Choice: 2 を 1 回選択しました。
** STATISTICS ** (500) Time = 00:00:07.50 cp time, 00:00:04.20 time,
Logical IO count=705, IO count=2
** INFORMATION ** (256) 5 行が戻されました。
STARjoin しきい値を 60% に増加すると、このクエリで STARjoin プランが強制的に選
択されるため、パフォーマンスを比較できます。次のクエリでは、強制的に実行される
STARjoin の方がデフォルトのテーブル スキャン プランよりもパフォーマンスが優れ
ています。
RISQL> set starjoin threshold 60;
RISQL> select prod_name, store_name, sum(dollars)
> from sales natural join product natural join store
> natural join period
> where year in(1999, 2000)
> group by prod_name, store_name
> order by prod_name, store_name;
** STATISTICS ** (500) Compilation = 00:00:00.08 cp time, 00:00:00.07 time,
Logical IO count=81, IO count=0
PROD_NAME
STORE_NAME
Aroma Roma
Beaches Brew
17435.25
Aroma Roma
Beans of Boston
15306.00
Aroma Roma
Coffee Brewers
13210.25
Aroma Roma
Coffee Connection
12189.75
Aroma Roma
Cupertino Coffee Supply
12745.00
...
** STATISTICS ** (1457) EXCHANGE (ID: 6) の並行性が 1 回以上です。
High: 4、Low: 4、Average: 4
** STATISTICS ** (1457) EXCHANGE (ID: 11) の並行性が 1 回以上です。
High: 1、Low: 1、Average: 1
** STATISTICS ** (1458) CHOOSE PLAN (ID: 2) Choice: 1 を 1 回選択しました。
** STATISTICS ** (1459) CHOOSE PLAN (ID: 2) は 1 テーブルの STAR ジョインを 1 回
実行しました。
** STATISTICS ** (1460) CHOOSE PLAN (ID: 2) は STAR ジョインにテーブル SALES の
インデックス SALES_STAR_IDX を 1 回使用しました。
** STATISTICS ** (500) Time = 00:00:01.94 cp time, 00:00:02.10 time,
Logical IO count=626, IO count=5
** INFORMATION ** (256) 5 行が戻されました。
次の一連の SET 文は、グローバル STARjoin しきい値を増加し、テーブル固有のしき
い値を設定してからリセットした場合の動作を示します。
v query1 では、グローバルしきい値 40% が有効です。
v query2 では、sales_forecast テーブルでテーブル固有のしきい値 50% が使用されます
が、その他のテーブルではグローバルしきい値 40% が使用されます。
第 9 章 SET 文
509
SET STARJOIN THRESHOLD
v query3 では、すべてのテーブルでしきい値 40% が使用されます。sales_forecast に対
して RESET コマンドを実行しても、デフォルトのグローバルしきい値 30% には戻
りません。
RISQL>
RISQL>
RISQL>
RISQL>
RISQL>
RISQL>
510
set
run
set
run
set
run
starjoin threshold 40;
query1;
starjoin threshold 50 for sales_forecast;
query2;
starjoin threshold reset for sales_forecast;
query3;
IBM Red Brick Warehouse: SQL リファレンス ガイド
SET STATS
SET STATS 文は、現在のセッションの統計報告を切り換えます。
構文
SET STATS
ON
OFF
ON
INFO
各クエリについて、統計情報を戻します。統計報告の内容は、文およ
びプラットフォームごとに異なります。
通常、サポートされる統計情報は次のとおりです。
v 戻されたデータ行の数
v 文の処理の経過時間
v 文の実行時の CPU 時間
v 論理入出力数と物理入出力数
INFO
INFO に設定すると、ON と同様の統計情報に加え、クエリのコンパ
イル時間、クエリ実行プランの選択、使用された STAR インデック
ス、クエリ リライトの有無、統計情報のサンプリングなど、クエリの
実行方法に関する情報が戻されます。
これらの状況メッセージに表示される ID および演算子は、EXPLAIN
文で抽出できるクエリのコンパイルと処理に関する情報に対応してい
ます。この文の簡単な例については、このマニュアルの 396 ページを
参照してください。EXPLAIN 出力の詳細については、「クエリ パフ
ォーマンス ガイド」を参照してください。
SQL クエリには、任意の数のサブクエリを指定できますが、
INFO_MESSAGE_LIMIT パラメータのデフォルトは 1 つのクエリで
1,000 に設定されており、複雑なクエリの実行中に膨大な数のメッセ
ージが戻されることを防ぎます。このパラメータの詳細については、
467 ページの『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
第 9 章 SET 文
511
SET STATS
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 行が戻されました。
上記のクエリを実行する前に SET STATS INFO 文を実行すると、さらに詳細な統計情
報が表示されます。
** STATISTICS ** (1457) EXCHANGE (ID: 5) の並行性が 1 回以上です。
High: 4、Low: 4、Average: 4
** STATISTICS ** (1457) EXCHANGE (ID: 9) の並行性が 1 回以上です。
High: 1、Low: 1、Average: 1
** STATISTICS ** (1458) CHOOSE PLAN (ID: 1) Choice: 1 を 1 回選択しました。
** STATISTICS ** (1459) CHOOSE PLAN (ID: 1) は 1 テーブルの STAR ジョインを 1 回
実行しました。
** STATISTICS ** (1460) CHOOSE PLAN (ID: 1) は STAR ジョインにテーブル SALES の
インデックス SALES_STAR_IDX を 1 回使用しました。
** STATISTICS ** (500) Time = 00:00:00.35 cp time, 00:00:00.36
time, Logical IO count=220, IO count=0
** INFORMATION ** (256) 5 行が戻されました。
512
IBM Red Brick Warehouse: SQL リファレンス ガイド
SET TARGETJOIN LOCAL PREDICATES
SET TARGETJOIN LOCAL PREDICATES コマンドは、TARGETjoin 操作の一部とし
て、非ジョインの記述の処理を有効または無効にします。このコマンドは現在のセッシ
ョンのみに適用されます。 rbw.config ファイルの OPTION パラメータとして
TARGETJOIN_LOCAL_PREDICATES を入力すると、設定はすべてのデータベース サー
バ セッションに適用されます。
ローカル述部 とは、ジョインされるテーブルの非ジョインの記述です。この述部はジョ
インする列以外の列に制約を適用します。TARGETJOIN_LOCAL_PREDICATES パラメ
ータが OFF に設定されている場合、すべての非ジョインの記述はジョイン操作の後 に
処理されます。このパラメータが ON に設定されている場合、次の条件で、非ジョイン
の記述がクエリ プランのジョイン段階まで「プッシュダウン」されます。
v クエリ プランに TARGETjoin 選択プランが含まれており、実行時にそのプランが選
択される。
v ジョインされているテーブルの 1 つで、非ジョインの記述によってインデックス付
けされた列が制約を受ける。インデックスは単一列の TARGET インデックスまたは
複数列の B-TREE インデックスのどちらかである必要がありますが、ローカルでセ
グメント化されている必要はありません。
構文
SET TARGETJOIN LOCAL PREDICATES
OFF, ON
OFF
ON
TARGETjoin 操作の一部としてのジョインの記述の処理を有効または
無効にします。
このパラメータの現在の設定値を確認するには、OFF と ON のどちらも指定せずに次
の文を実行します。
set targetjoin local predicates;
** INFORMATION ** (1434) TARGETJOIN_LOCAL_PREDICATES は OFF に設定されて
います。
使用上の注意
rbw.config 内で、この OPTION パラメータはデフォルトで OFF に設定されていま
す。比較的制約が多い 非ジョインの記述を含む特定のクエリでのみ、このパラメータを
ON に設定することをお勧めします。ローカル述部の制約が少ない (多くの列値が制約
の条件を満たす) 場合は、このパラメータを ON に設定しないでください。このような
場合、述部をプッシュダウンすると、TARGETjoin 操作のパフォーマンスが大きく低下
する可能性があります。 rbw.config ファイルでパラメータを ON に設定する場合は、
必ずクエリのパフォーマンスを監視してください。
第 9 章 SET 文
513
SET TARGETJOIN LOCAL PREDICATES
非ジョインの記述は、前述のプランでジョイン段階に入る前に、すでに解決されている
こともあります。この場合、TARGETJOIN_LOCAL_PREDICATES パラメータによる影
響はありません。
例
プッシュダウンできる非ジョインの記述の例としては、TARGETjoin クエリにおいて、
ファクト テーブル が (ジョインの記述以外に) インデックス付けされた列に対して追
加制約を持つ場合があげられます。次に、その例を示します。
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)
...
同じクエリが同じインデックスで実行されても、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,
514
IBM Red Brick Warehouse: SQL リファレンス ガイド
SET TARGETJOIN LOCAL PREDICATES
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>
第 9 章 SET 文
515
SET TARGETJOIN THRESHOLD
フォーリン キーに TARGET インデックスまたは B-TREE インデックスが設定されて
おり、かつ 1 つ以上の STAR インデックスが設定されているファクト テーブルでは、
STARjoin プランと 3 つの選択可能なプラン (STARjoin、TARGETjoin、テーブル スキ
ャン) が生成されます。実行時に、推定コストの比較結果に基づいてこれら 3 つのプラ
ンのうちいずれか 1 つが選択されます。STARjoin しきい値 (507 ページの『SET
STARJOIN THRESHOLD』を参照) は、STARjoin/TARGETjoin プランとテーブル スキ
ャン プランの選択に影響します。TARGETjoin しきい値は、STARjoin プランと
TARGETjoin プランの選択に影響します。
特に、STARjoin コストに対する TARGETjoin コストの比率が TARGETjoin しきい値
と比較されます。たとえば、デフォルト値 80 を使用する場合、TARGETjoin のコスト
が STARjoin のコストの 80% 以下であると、TARGETjoin プランが選択されます。
TARGETjoin しきい値が 100% の場合は常に TARGETjoin プランが選択されますが、
しきい値 50% の場合には、TARGETjoin のコストが STARjoin のコストの半分以下の
場合にのみ TARGETjoin プランが選択されます。
このコマンドは現在のセッションのみに適用されます。 TARGETjoin のみのプランのク
エリ処理では、このコマンドは無効です。
構文
SET TARGETJOIN THRESHOLD
percentage
RESET
FOR
table_name
percentage
実行時に STARjoin プランと TARGETjoin プランのどちらが選択さ
れるかを決定するしきい値です。table_name を指定しないと、すべて
のSTARjoin/TARGETjoin クエリに対してしきい値が適用されます。有
効値は 0 から 100 です。デフォルトの設定値は 80 です。設定値が
大きいほど、TARGETjoin プランが選択される可能性が高くなりま
す。常に TARGETjoin を選択するようにするには、この値を 100 に
設定します。常に STARjoin を選択するようにするには、この値を 0
に設定します。
RESET
特定の設定が適用される前のしきい値にリセットします。テーブル名
を指定すると、以前に設定されたテーブル固有のしきい値が実際に
「設定解除」されます。したがって、すべてのテーブルにグローバル
しきい値が適用されます。テーブル名を指定しないと、グローバルし
きい値がデフォルト値の 80% にリセットされます。
FOR table_name STARjoin 処理または TARGETjoin 処理に使用されるテーブルです。
table_name を指定すると、このテーブルを使用する
STARjoin/TARGETjoin クエリにのみしきい値が適用されます。この
516
IBM Red Brick Warehouse: SQL リファレンス ガイド
SET TARGETJOIN THRESHOLD
table_name には基本テーブルを指定してください。ビュー、シノニ
ム、テンポラリ テーブル、システム テーブルは指定できません。
使用上の注意
デフォルトの「グローバル」しきい値は、RBW_OPTIMIZER_OPTIONS テーブルに格納
されており、これらのデフォルト値とテーブル固有のしきい値よりも優先されます。現
在有効な設定をすべて追跡するには、このテーブルに対してクエリを実行します。
グローバルしきい値とテーブル固有のしきい値の両方が調整されている場合には、
RESET オプションを使用した場合の影響を理解しておくことが大切です。特定のテーブ
ルのしきい値をリセットすると、リセット後の新しい設定値が 現在の グローバル設定
値になります (デフォルト グローバル設定値ではありません)。
rbw.config ファイルには、SET TARGETJOIN THRESHOLD コマンドに相当するパラ
メータはありません。ユーザが新規セッションを開始するたびにしきい値を自動的に設
定するようにするには、.rbwrc ファイルをセットアップします。.rbwrc 初期化ファイ
ルの詳細については、「管理者ガイド」の初期化ファイルに関する説明を参照してくだ
さい。
例
Aroma データベースに 1 つの STAR インデックス (SALES_STAR_IDX) が作成されて
おり、このインデックスが Sales テーブルのフォーリン キーすべてに設定されてお
り、先行のディメンジョン テーブルが Period、後続のディメンジョン テーブルが
Promotion であるとします。また、Sales テーブルのフォーリン キーには一連の
TARGET インデックスも設定されているとします。次のクエリのデフォルト プランは
TARGETjoin プランですが、TARGETjoin プランが必ず選択されるようにするため、し
きい値を 100 に設定する必要があります。
RISQL> set targetjoin threshold 100;
RISQL> set stats info;
RISQL> select qtr, sum(dollars) as total_sales
> from sales, period, promotion
> where sales.perkey = period.perkey
> and sales.promokey = promotion.promokey
> and promo_type = 400
> and year in (1998, 1999, 2000)
> group by qtr
> order by qtr;
** STATISTICS ** (500) Compilation = 00:00:00.07 cp time, 00:00:00.06 time,
Logical IO count=78, IO count=0
QTR
TOTAL_SALES
Q1_00
6921.50
Q1_98
2318.00
Q1_99
5670.25
Q2_98
3260.50
Q2_99
2758.90
Q3_98
7399.90
Q3_99
4110.15
第 9 章 SET 文
517
SET TARGETJOIN THRESHOLD
Q4_98
1990.50
Q4_99
2771.25
** STATISTICS ** (1457) EXCHANGE (ID: 23) の並行性が 1 回以上です。
High: 4、Low: 4、Average: 4
** STATISTICS ** (1457) EXCHANGE (ID: 28) の並行性が 1 回以上です。
High: 1、Low: 1、Average: 1
** STATISTICS ** (1458) CHOOSE PLAN (ID: 2) Choice: 3 を 1 回選択しました。
** STATISTICS ** (1461) CHOOSE PLAN (ID: 2) TARGETjoin は 1 回実行されました。
** STATISTICS ** (500) Time = 00:00:00.24 cp time, 00:00:00.35 time,
Logical IO count=401, IO count=16
** INFORMATION ** (256) 9 行が戻されました。
このクエリは STAR インデックスの先行ディメンジョン テーブル (Period テーブル)
に対して制約を適用することから、デフォルトでは STARjoin が選択されます。ただ
し、このクエリは Period テーブルのすべての行 (1998 年から 2000 年) に制約を適用
します。STAR インデックスの後続ディメンジョン テーブル (Promotion) にはもう 1
つの制約が適用されます。したがって、TARGETjoin はこのクエリでは特に効果的で
す。比較のため、次に STARjoin の統計を示します。
RISQL> set targetjoin threshold reset;
RISQL> select qtr, sum(dollars) as total_sales
> from sales, period, promotion
> where sales.perkey = period.perkey
> and sales.promokey = promotion.promokey
> and promo_type = 400
> and year in (1998, 1999, 2000)
> group by qtr
> order by qtr;
** STATISTICS ** (500) Compilation = 00:00:00.07 cp time, 00:00:00.06 time,
Logical IO count=78, IO count=0
QTR
TOTAL_SALES
Q1_00
6921.50
Q1_98
2318.00
Q1_99
5670.25
Q2_98
3260.50
Q2_99
2758.90
Q3_98
7399.90
Q3_99
4110.15
Q4_98
1990.50
Q4_99
2771.25
** STATISTICS ** (1457) EXCHANGE (ID: 8) の並行性が 1 回以上です。
High: 4、Low: 4、Average: 4
** STATISTICS ** (1457) EXCHANGE (ID: 12) の並行性が 1 回以上です。
High: 1、Low: 1、Average: 1
** STATISTICS ** (1458) CHOOSE PLAN (ID: 2) Choice: 1 を 1 回選択しました。
** STATISTICS ** (1459) CHOOSE PLAN (ID: 2) は 1 テーブルの STAR ジョインを 1 回
実行しました。
** STATISTICS ** (1460) CHOOSE PLAN (ID: 2) は STAR ジョインにテーブル SALES の
インデックス SALES_STAR_IDX を 1 回使用しました。
** STATISTICS ** (500) Time = 00:00:00.73 cp time, 00:00:00.94 time,
Logical IO count=449, IO count=0
** INFORMATION ** (256) 9 行が戻されました。
518
IBM Red Brick Warehouse: SQL リファレンス ガイド
SET TARGETJOIN THRESHOLD
次の一連の SET 文は、グローバル TARGETjoin しきい値を増加し、テーブル固有のし
きい値を設定してからリセットした場合の動作を示します。
v query1 では、グローバルしきい値 90% が有効です。
v query2 では、sales_forecast テーブルでテーブル固有しきい値 100% が使用されます
が、その他のテーブルではグローバルしきい値 90% が使用されます。
v query3 では、すべてのテーブルでしきい値 90% が使用されます。sales_forecast に対
して RESET コマンドを実行しても、デフォルトのグローバルしきい値 80% には戻
りません。
RISQL>
RISQL>
RISQL>
RISQL>
RISQL>
RISQL>
set
run
set
run
set
run
targetjoin threshold 90;
query1;
targetjoin threshold 100 for sales_forecast;
query2;
targetjoin threshold reset for sales_forecast;
query3;
第 9 章 SET 文
519
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 TEMPORARY
dir_name
520
DATA
INDEX
SEGMENT STORAGE PATH
dir_name
すべてのデフォルト行データ セグメントまたはすべてのデフォルト
インデックス セグメントを格納するディレクトリの絶対パス
(dir_name) を指定します。デフォルト ディレクトリを指定しないと、
すべてのデフォルト セグメントは rbw.config ファイルで指定された
データベース ディレクトリに格納されます。
IBM Red Brick Warehouse: SQL リファレンス ガイド
SET TRANSACTION ISOLATION LEVEL
SET TRANSACTION ISOLATION LEVEL 文は、あるテーブルを読み取り、別のテーブ
ルを変更する SQL 文で、2 つのテーブル間にキー関係がない場合に使用された Read
ロックのタイプを制御します。この文はバージョン管理されたデータベースにのみ適用
されます。
構文
SET TRANSACTION ISOLATION LEVEL
SERIALIZABLE
REPEATABLE READ
SERIALIZABLE あるテーブルを読み取って別のテーブルを更新するトランザクション
に対して、RD (read data) ロックが使用されるようにします。この
RD ロックは、別のバージョニング トランザクションが読取り中のテ
ーブルに対して、同時にバージョニング更新を実行することを禁止し
ます。後から開始されたトランザクションは、先行するトランザクシ
ョンが終了するまで待機してから、テーブルを読み取ります。このロ
ックは、最も制約的なモードです。
REPEATABLE READ
RO (read only) ロックが使用されるようにします。 RO ロックを使用
すると、読取り操作とテーブルに対するバージョニングを同時に実行
できます。このロックは、トランザクションが、現在更新中のテーブ
ルの古いバージョンを読み取り、別のテーブルを変更すること (たと
えば、INSERT INTO...SELECT 文) を可能にします。このロックは、
SERIALIZABLE よりも制約が少ないモードです。
この文は、rbw.config ファイルの OPTION
TRANSACTION_ISOLATION_LEVEL パラメータとしても使用できま
す。このパラメータの詳細と、2 つの設定の違いを示す例について
は、「管理者ガイド」を参照してください。
第 9 章 SET 文
521
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 UNIFORM PROBABILITY FOR ADVISOR
OFF
ON
Advisor および事前計算ビューの詳細については、「IBM Red Brick Vista ユーザーズ
ガイド」を参照してください。
522
IBM Red Brick Warehouse: SQL リファレンス ガイド
SET USE INVALID PRECOMPUTED VIEWS
SET USE INVALID PRECOMPUTED VIEWS ON 文は、事前計算ビューの妥当性にか
かわらず、すべての事前計算ビューをクエリ リライトに使用できるようにします。
この文を OFF に設定した場合、ビューがクエリ リライトに使用されるようにしたり、
RBW_PRECOMPVIEW_UTILIZATION テーブルの Advisor クエリで指定されるように
するには、ビューを有効とマークする必要があります。
構文
SET USE INVALID PRECOMPUTED VIEWS
OFF
ON
この文は、OPTION USE_INVALID_PRECOMPUTED_VIEWS パラメータとしても存在
します。
Advisor および事前計算ビューの詳細については、「IBM Red Brick Vista ユーザーズ
ガイド」を参照してください。
第 9 章 SET 文
523
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
OFF
ON
バージョン管理されているデータベースの詳細については、「管理者ガイド」を参照し
てください。
524
IBM Red Brick Warehouse: SQL リファレンス ガイド
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 パラメータとしても使用でき
ます。この文の詳細については、「管理者ガイド」を参照してください。
第 9 章 SET 文
525
526
IBM Red Brick Warehouse: SQL リファレンス ガイド
付録 A. 構文一覧
付録 A では、 231 ページの『第 8 章 SQL 文と RISQL 拡張機能』で説明した SQL
コマンドおよび RISQL 拡張機能と各構文の一覧を示します。構文の一覧は、クイック
リファレンスとしてご使用ください。
ここではコマンドを次の 4 つの論理セクションに分類しています。
v データベース制御コマンド
v データ定義コマンド
v データ操作コマンド
v その他のコマンド
データベース制御コマンド
ここでは次の操作を行うコマンドの一覧を示します。
v ログ記録とアカウンティングの制御
v ユーザ操作の制御
v ユーザ優先順位の制御
v データベース ユーザとパスワードの作成
v データベース アクセス権の付与と取消
v データベース オブジェクトに対する特権の付与と取消
ALTER DATABASE
ALTER DATABASE
© Copyright IBM Corp. 1996, 2004
version_log_specification
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 database_logical_name
DROP BACKUP DATA
527
ALTER SYSTEM
ALTER SYSTEM
RESET STATISTICS
DATABASE
ALL
logical_db_name
QUIESCE
DATABASE
ALL
logical_db_name
RESUME
DATABASE
ALL
logical_db_name
ADVISOR_LOGGING
START
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
alter_user_activity
CLOSE USER SESSION
CANCEL USER COMMAND
db_username
ALL
DATABASE
ALL
logical_db_name
PROCESS
ALL
pid
alter_user_priority
CHANGE USER
db_username
ALL
SET PRIORITY
integer
ON DATABASE
ALL
logical_db_name
alter_logging
alter_logging 句:
528
IBM Red Brick Warehouse: SQL リファレンス ガイド
PROCESS
ALL
pid
START LOGGING
STOP LOGGING
SWITCH LOGGING FILE
TERMINATE LOGGING LEVEL
CHANGE LOGGING LEVEL
AUDIT
ERROR
OPERATIONAL
SCHEMA
USAGE
ROUTINE
ALERT
URGENT
alter_accounting
alter_accounting:
START ACCOUNTING
STOP ACCOUNTING
SWITCH ACCOUNTING FILE
CHANGE ACCOUNTING LEVEL
WORKLOAD
JOB
alter_performance_monitor
START
STOP
PERFORMANCE MONITOR
SESSION
session_id
DATABASE
logical_db_name
alter_clear_performance_monitor
CLEAR PERFORMANCE MONITOR
START_TIMESTAMP timestamp
USERNAME user_name
DATABASE
logical_db_name
ALTER USER
ALTER USER
db_username
SET PRIORITY integer
COMMENT
’ character_string ’
NULL
GRANT (許可とロール)
,
GRANT ,
DBA
RESOURCE
authorization
role_name
TO db_username
role_name
付録 A. 構文一覧
529
GRANT CONNECT
GRANT CONNECT
TO
db_username
WITH
,
, password
’ password ’
DBA
RESOURCE
authorization
role_name
PRIORITY
integer
GRANT (特権)
,
GRANT ON
ALL
table_name TO
creator.
PRIVILEGES
DELETE
INSERT
SELECT
UPDATE
,
db_username
role_name
PUBLIC
REVOKE (許可とロール)
,
REVOKE ,
DBA
RESOURCE
authorization
role_name
FROM db_username
role_name
REVOKE CONNECT
REVOKE CONNECT FROM
db_username
REVOKE (特権)
530
IBM Red Brick Warehouse: SQL リファレンス ガイド
,
REVOKE ON
ALL
table_name
creator.
PRIVILEGES
DELETE
INSERT
SELECT
UPDATE
,
FROM
db_username
role_name
PUBLIC
データ定義コマンド
次のコマンドは、インデックス、マクロ、ロール、セグメント、シノニム、テーブル、
ビューの変更、作成、または削除を実行します。
ALTER INDEX
ALTER INDEX
index_name
CHANGE FILLFACTOR
CHANGE DOMAIN
integer
SMALL
SIZE
MEDIUM
LARGE
’ character_string ’
NULL
COMMENT
ALTER MACRO
ALTER
MACRO
macro_name COMMENT
TEMPORARY
PUBLIC
’ character_string ’
NULL
ALTER ROLE
ALTER ROLE
role_name COMMENT
’ character_string ’
NULL
ALTER SEGMENT — ATTACH 句
ALTER SEGMENT segment_name
ATTACH TO
TABLE
table_name
creator.
INDEX index_name
付録 A. 構文一覧
531
RANGE
(
(
(
literal:literal )
rownum:rownum )
segname
: segname
rownum
rownum
LIKE SEGMENT referencing_table_segname
INVALIDATE
)
RANGE 指定では、コロンの左側に MIN、右側に MAX と入力して、それぞれ最小値
と最大値を指定することもできます。
ALTER SEGMENT — その他の句
ALTER SEGMENT
segment_name
OF
TABLE
INDEX
table_name
creator.
index_name
detach_offline_online_clear_specification
VERIFY
FORCE INTACT
SEGMENT BY segmenting_column
RANGE ( rangeval:rangeval )
MOVE
INVALIDATE
OPTICAL
ON
OFF
RENAME new_seg_name
CHANGE MAXSIZE psu_sequence_id TO max_size
CHANGE EXTENDSIZE psu_sequence_id TO increment
CHANGE PATH psu_sequence_id TO ’new_filename’
MIGRATE TO ’dir_path ’
DROPPING
KEEPING
PSUS
COMMENT
’ character_string ’
NULL
add_storage_specification
RELEASE STORAGE
DROP LAST STORAGE
detach_clear_offline_online_specification
DETACH
override_fullindexcheck_specification
OFFLINE
OVERRIDE REFCHECK
ONLINE
CLEAR
override_fullindexcheck_specification
OVERRIDE REFCHECK
532
IBM Red Brick Warehouse: SQL リファレンス ガイド
INVALIDATE
override_fullindexcheck_specification
override_fullindexcheck_specification:
,
OVERRIDE FULLINDEXCHECK ON SEGMENTS (
index_segment
)
add_storage
’filename’
ADD STORAGE
MAXSIZE
max_size
INITSIZE
init_size
EXTENDSIZE
increment
ALTER SYNONYM
ALTER SYNONYM
synonym_name
ALTER
creator.
col_name
COLUMN
COMMENT
’ character_string ’
NULL
ALTER TABLE
ALTER TABLE
table_name
creator.
付録 A. 構文一覧
533
,
add_column
drop_column
IN_PLACE
IN
USING
segment_name
,
working_segment_name
IN
( segment_name
)
alter_column
RESUME
RESET
CHANGE MAXSEGMENTS TO
NULL
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
creator.
add_column
ADD COLUMN 指定:
ADD
column_name datatype
COLUMN
NOT NULL
DEFAULT
UNIQUE
’literal’
CURRENT_DATE
CURRENT_TIME
CURRENT_TEIMESTAMP
CURRENT_USER
NULL
WITH FILLFACTOR
drop_column
DROP COLUMN 指定:
DROP
column_name
RESTRICT
COLUMN
alter_column
534
IBM Red Brick Warehouse: SQL リファレンス ガイド
n
ALTER
col_name
RENAME AS
ON DELETE
new_col_name
NO ACTION
CASCADE
SET DEFAULT default_definition
DROP DEFAULT
CHANGE FILLFACTOR n
SET SERIAL START ( value )
SET SERIAL STEP ( value )
COMMENT
‘character_string’
NULL
NULL
NOT NULL
COLUMN
add_constraintadd_constraint
ADD CONSTRAINT 指定:
,
ADD
FOREIGN KEY (
CONSTRAINT
column_name
)
constraint_name
REFERENCES
table_name
,
creator.
(
primary_key_column
)
ON DELETE
CASCADE
NO ACTION
INITIALLY
IMMEDIATE
DEFERRED
drop_constraint
drop_constraint:
DROP CONSTRAINT
constraint_name
alter_constraint
ALTER CONSTRAINT 指定:
ALTER CONSTRAINT
constraint_name
REFERENCES
ON DELETE
referenced_table_name
creator.
CASCADE
NO ACTION
付録 A. 構文一覧
535
ALTER VIEW
ALTER VIEW
view_name
creator.
COMMENT
ALTER COLUMN col_name
SET
VALID
INVALID
SET MAINTENANCE
ON
REBUILD
OFF
’ character_string ’
NULL
CREATE HIERARCHY
CREATE HIERARCHY
hierarchy_name
,
(
from_to_definition
)
ON
constraint_name
from_to_definition 句
FROM
table_name (column_name)
TO
table_name (column_name)
creator.
creator.
CREATE INDEX
,
CREATE INDEX
index_specifier
ON ERROR
STAR
TARGET
CONTINUE
ABORT
IMMEDIATE
DEFERRED
index_specifier
インデックス指定:
,
index_name
ON
table_name (
creator.
536
IBM Red Brick Warehouse: SQL リファレンス ガイド
column_name
fkey_constraint_name
)
IN
segment_specification
WITH FILLFACTOR
n
DOMAIN
SIZE
SMALL
MEDIUM
LARGE
segment_specification
segment_specification:
IN
segment_name
,
( segment_name
)
SEGMENT LIKE DATA
SEGMENT LOCAL
SEGMENT LIKE REFERENCED TABLE
segment_range_spec
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 REFERENCES OF (
RANGES
(
segmenting_column
)
MIN:MAX
)
MIN:rangeval, rangeval:MAX
rangeval:rangeval
,
CREATE MACRO
CREATE
MACRO
TEMPORARY
PUBLIC
macro_name
,
( parameter
()
)
付録 A. 構文一覧
537
AS
CATEGORY
cat_val
definition
’ character_string ’
COMMENT
CREATE ROLE
CREATE ROLE
role_name
,
FOR
db_username
role_name
CREATE SEGMENT
,
CREATE SEGMENT
segment_name storage_specification
storage_specification
STORAGE
’filename’
MAXSIZE
max_size
INITSIZE
init_size
EXTENDSIZE
increment
CREATE SYNONYM
CREATE SYNONYM
synonym_name FOR
creator.
table_name
creator.
CREATE TABLE
CREATE TABLE
table_name
creator.
(
column_definitions
)
segment_specification
MAXROWS PER SEGMENT
MAXSEGMENTS
maxsegments
column_definitions
column_definitions:
538
IBM Red Brick Warehouse: SQL リファレンス ガイド
maxrows
,
column_name datatype
NOT NULL
DEFAULT
UNIQUE
literal
function
NULL
, primary_key_reference
, foreign_key_reference
primary_key_reference
primary_key_reference:
,
PRIMARY KEY (
CONSTRAINT
column_name
)
constraint_name
foreign_key_reference
フォーリン キー参照:
,
FOREIGN KEY (
CONSTRAINT
column_name
)
constraint_name
REFERENCES
referenced_table
creator.
,
(
primary_key_column
)
ON DELETE
CASCADE
NO ACTION
segment_specification
segment_specification:
付録 A. 構文一覧
539
DATA IN
segment_name
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
segment_range_spec
SEGMENT BY VALUES OF (
segmenting_column
)
RANGES
MIN:literal , (
literal:MAX
literal:literal
)
,
MIN:MAX
CREATE TEMPORARY TABLE
CREATE TEMPORARY TABLE
table_name (
column_definitions
)
creator.
CREATE VIEW
CREATE VIEW
view_name
creator.
,
column_name
(
AS
query_expression
precomputed_query_expression using_clause
)
事前計算クエリ式
事前計算クエリ式:
,
SELECT 540
,
column_name
aggregate_column
FROM table_name
IBM Red Brick Warehouse: SQL リファレンス ガイド
AND
,
WHERE
join_predicate
GROUP BY
column_name
usage_clause
,
USING
table_name (
column_name
)
creator.
DROP HIERARCHY
DROP HIERARCHY
hierarchy_name
DROP INDEX
DROP INDEX
index_name
DROPPING SEGMENTS
KEEPING SEGMENTS
DROP MACRO
DROP
MACRO
macro_name
TEMPORARY
PUBLIC
DROP ROLE
DROP ROLE
role_name
DROP SEGMENT
DROP SEGMENT
segment_name
DROP SYNONYM
DROP SYNONYM
synonym_name
creator.
DROP TABLE
DROP TABLE
table_name
creator.
DROPPING SEGMENTS
KEEPING SEGMENTS
付録 A. 構文一覧
541
DROP VIEW
DROP VIEW
view_name
creator.
データ操作コマンド
次にデータベース テーブルの行データを修正するコマンドを示します。
DELETE
DELETE FROM
table_name
creator.
,
USING
WHERE
search_condition
table_reference
creator.
OVERRIDE REFCHECK
INSERT
INSERT INTO
table_name
,
column_name
(
)
,
VALUES
(
literal
NULL
DEFAULT
select_statement
DEFAULT VALUES
)
LOCK (テーブルのロック)
LOCK
table_name
creator.
FOR DELETE
LOCK DATABASE
LOCK DATABASE
READ
WRITE
542
IBM Red Brick Warehouse: SQL リファレンス ガイド
SELECT
query_expression
order_by_clause
suppress_by_clause
UNLOCK (テーブルのロック解除)
UNLOCK
table_name
creator.
UNLOCK DATABASE
UNLOCK DATABASE
UPDATE
,
UPDATE
table_name
SET column_name=
creator.
expression
NULL
,
FROM
WHERE
search_condition
table_reference
creator.
その他のコマンド
CHECK INDEX
CHECK INDEX
index_name
DIRECTORY
SEGMENT
‘directory_name’
segment_name
VERBOSE
VALIDATE
NORMAL
FULL
DESCRIBE
CHECK TABLE
CHECK TABLE
table_name
creator.
SEGMENT
segment_name
付録 A. 構文一覧
543
DIRECTORY
‘directory_name’
VERBOSE
FIX
EXPAND
EXPAND
sql_statement
(width)
EXPLAIN
EXPLAIN
SQL_statement
EXPORT
EXPORT TO
output_file_specification
DDLFILE
file_specification
TMUFILE
file_specification
FORMAT
(
544
EXTERNAL
EXTERNAL VARIABLE
INTERNAL
BINARY
DELIMITED
BY ’c’
ENCLOSED BY
XML
NAMESPACE ’namespace_uri’
select_statement
)
IBM Red Brick Warehouse: SQL リファレンス ガイド
’s’
付録 B. 予約語
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
BACKUP
BREAK
BETWEEN
BY
BIT
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
B
C
© Copyright IBM Corp. 1996, 2004
545
D
DATA
DELETE
DATABASE
DESC
DBA
DESCRIBE
DEC
DISTINCT
DECIMAL
DISTRIBUTED
DECLARE
DOUBLE
DEFAULT
DROP
DEFERRED
ELSE
EXCLUSIVE
END
EXISTS
ESCAPE
EXPAND
EXCEPT
EXPLAIN
EXCL
EXTRACT
FETCH
FOREIGN
FILENAME
FORTRAN
FIRST
FROM
FLOAT
FULL
FOR
FULLINDEXCHECK
GRANT
GROUP
E
F
G
H
HAVING
I
IMMEDIATE
INNER
IN
INSERT
INCL
INT
INCLUSIVE
J
JOIN
546
IBM Red Brick Warehouse: SQL リファレンス ガイド
INTEGER
INDEX
INTERSECT
INDICATOR
INTO
INITIALLY
IS
K
KEY
L
LANGUAGE
LIKE
LAST
LOCK
LEFT
MACRO
MODEL
MAPPING
MODULE
MAX
MOVINGAVG
MIN
MOVINGSUM
NATURAL
NULL
NO
NULLIF
NOT
NUMERIC
NTILE
OF
OR
OFF
ORDER
ON
OUTER
OPEN
OVERRIDE
OPTION
PASCAL
PREPARE
PERMANENT
PRIMARY
PL1
PRIVILEGES
POSITION
PROCEDURE
POSITIONB
PUBLIC
PRECISION
M
N
O
P
Q
QUIT
R
RANK
RESOURCE
RATIOTOREPORT
RESUME
付録 B. 予約語
547
REAL
REVOKE
RECOVER
RIGHT
REFERENCES
ROLE
RESET
ROLLBACK
SCHEMA
SQLCODE
SEGMENT
STAR
SELECT
SUM
SERIAL
SUMMING
SET
SUPPRESS
SMALLINT
SYNONYM
SOME
TABLE
THEN
TEMPORARY
TINYINT
TERTILE
TO
TEXTSIZE
TO_CHAR
UNION
UPDATE
UNIQUE
USER
UNLOCK
USING
VALUES
VARYING
VARCHAR
VIEW
S
T
U
V
W
WAIT
WITH
WHEN
WORK
WHERE
548
IBM Red Brick Warehouse: SQL リファレンス ガイド
付録 C. 日付時間フォーマット
IBM Red Brick Warehouse は、 ANSI SQL-92 に定義されていない日付時間フォーマッ
トを使用するツールのために、次の非標準の日付時間フォーマットをサポートします。
v 日付フォーマット: 数字で表した月と、月名の両方が使用できます。数字で表す場合
は、DATEFORMAT 変数を使用する必要があります。
v 時間フォーマット
v タイムスタンプ フォーマット: 日付フォーマットと時間フォーマットで構成します。
v ANSI SQL-92 EXTRACT 関数と類似の DATEPART スカラ関数
上記のフォーマットのサポートは、SQL サーバの日付フォーマットから ANSI SQL-92
標準型式への移行を目的としています。新たに開発するデータベースやツールでは、
ANSI SQL-92 に定義されたフォーマットを使用してください。
日時定数に DATE、TIME、TIMESTAMP のいずれかのキーワードを指定しないと、非
標準の日付時間フォーマットの使用を暗黙的に指定したことになります。
付録 C では、次の項目について説明します。
v 日付リテラル
v 時間リテラル
v タイムスタンプ リテラル
v 日付フィールドと DATEPART 関数
日付リテラル
非標準の日付フォーマットでは、数字で表した月と月名の両方が使用でき、年は 2 桁か
4 桁で表すことができます。月を数字で表す場合は、あいまいさ (たとえば、7/4/99
は、1999 年 7 月 4 日であるか、または 1999 年 4 月 7 日であるかなど) をなくすた
めに、DATEFORMAT 変数を設定して、日付エレメントの順序を定義しておく必要があ
ります。
サーバ ロケールの言語が English、テリトリが United States でない場合は、指定した
言語および地域に対応するフォーマット規則が使用され、SET DATEFORMAT 文は無
視されます。 ANSI SQL-92 に準拠しないリテラルは、アメリカ英語以外のロケールで
はサポートされません。
© Copyright IBM Corp. 1996, 2004
549
DATEFORMAT の設定
次に DATEFORMAT 変数の構文ダイアグラムを示します。
SET
DATEFORMAT
mdy
myd
ymd
ydm
dmy
dym
使用上の注意
v DATEFORMAT 変数は、SQL 文または RISQL 文と同じように入力してください。
v y は年、m は月、d は日を表します。
デフォルトは mdy です。つまり、月、日、年の順になります。
v DATEFORMAT を使用するのは、月が数字で表され、DATE キーワードが指定され
ていない場合のみです。
SET DATEFORMAT 文を使用して日付の表示を変更することはできません。 SET
DATEFORMAT 文の目的は、ANSI SQL-92 に準拠しない日付フォーマットをサーバの
型式と対応付けることです。
数字で表した月の使用
次に、月を数字で表した日付リテラルの構文ダイアグラムを示します。
日付フォーマットを ymd に設定する:
'
year1/
year2 /
month/day '
日付フォーマットを ydm に設定する:
'
year1/
year2 /
day / month '
日付フォーマットを mdy に設定する:
' month / day /
year1
year2
'
日付フォーマットを myd に設定する:
' month /
year1/
year2 /
day '
日付フォーマットを dmy に設定する:
550
IBM Red Brick Warehouse: SQL リファレンス ガイド
' day / month
year1/
year2 /
'
日付フォーマットを dym に設定する:
' day /
year1/
year2 /
month '
使用上の注意
v 日付フォーマットは、DATEFORMAT 変数によって決定されます。
v 日付エレメントの区切り記号には、上図に示すスラッシュ (/)、ハイフン (-)、ピリオ
ド (.) を使用できます。日付エレメントと区切り記号との間には、空白を入れてはい
けません。
v year1、year2、month、day は、次を有効範囲とする符号なし整数です。
year1
1 から 9999
year2
1 から 99
00 から 49 は 2000 から 2049 年を表す
50 から 99 は 1950 から 1999 年を表す
month
1 から 12
day
1 から 31
例
次に月を数字で表した有効な日付リテラルの例を示します。いずれの場合も、スラッシ
ュ (/)、ハイフン (-) またはピリオド (.) を区切り記号として使用できます。
DATEFORMAT の値
年が 4 桁の場合
年が 2 桁の場合
ymd
’1999/4/15’
’99/4/15’
ydm
’1999/15/4’
’99/15/4’
mdy
’4/15/1999’
’4/15/99’
myd
’4/1999/15’
’4/99/15’
dmy
’15/4/1999’
’15/4/99’
dym
’15/1999/4’
’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’
付録 C. 日付時間フォーマット
551
DATEFORMAT のデフォルト値は mdy であるため、DATEFORMAT を明示的に設定し
なくても次のクエリは有効になります。
select * from period where date_col = ‘12-25-1999’
月名の使用
次に、月名を使用した日付リテラルの構文ダイアグラムを示します。
月名の使用:
'
year1
month
'
day
month
year1
day
month
month
year1
day ,
year1
day
day
year2
day ,
month
year1
day
month ,
day
month
year2
month ,
year1 month
day
day year2 month
month
使用上の注意
v 各エレメント (year1、year2、month、day) と後続のエレメントは、1 つ以上の空白で
区切ります。
v カンマを使用する場合は、エレメントとカンマの間に空白を入れてはいけません。カ
ンマの後には、1 つ以上の空白を挿入してください。
v year1、year2、day は、次を有効範囲とする符号なし整数です。
year1
1 から 9999
year2
0 から 99
00 から 49 は 2000 から 2049 年を表す
50 から 99 は 1950 から 1999 年を表す
day
1 から 31 (デフォルトは 1)
v month は、月名のつづりをすべて指定するか、先頭の 3 文字を指定してください。
たとえば、January または Jan と表します。月名には大文字と小文字の区別がありま
せん。
552
IBM Red Brick Warehouse: SQL リファレンス ガイド
例
次に月名を使用した有効な日付の例を示します。 April は Apr に置き換えることができ
ます。
日あり、
年が 4 桁の場合
日あり、
年が 2 桁の場合
日なし、
年が 4 桁の場合
’1988 April 15’
’April 15 88’
’1988 April’
’1988 15 April
’April 15, 88’
’April, 1988’
’April 15 1988’
’15 April 88’
’April 1988’
’April 1999 15’
’15 88 April’
’15 April 1988’
’15 April, 1988’
時間リテラル
次に時間の値の構文ダイアグラムを示します。
時間リテラル:
'
hour
'
:minute
AM
PM
:second
.
fraction
:
all_numeric
使用上の注意
v AM/PM 指定子の前を除き、時間エレメントの間に空白を挿入することはできませ
ん。
v hour、minute、second、fraction は、次を有効範囲とする符号なし整数です。
hour
0 から 23; AM/PM 指定子を使用する場合は 0 から 12
minute
0 から 59
second
0 から 59
fraction
0 から 999999
v AM/PM 指定子は、大文字と小文字を区別しません。
v 秒未満の数値の前に小数点 (.) を入力した場合は、秒を単位とする 10 進小数と見な
されます。コロン (:) を入力した場合は、ミリ秒と見なされます。
付録 C. 日付時間フォーマット
553
例
次に有効な時間の値の例を示します。
’13:45:10:33’
’13:45:10.33’
’3AM’
’3 PM’
’03pm’
(33 milliseconds)
(33/100 seconds)
タイムスタンプ リテラル
次にタイムスタンプ値の構文ダイアグラムを示します。
タイムスタンプ リテラル:
'
date _value
time _value
all_numeric
" time _value
" date _value
'
使用上の注意
v date_value と time_value には、それぞれ日付フォーマットと時間フォーマットに定義
された任意の文字列を使用できます。
v date_value と time_value の間には空白を 1 つ挿入します。
v 日付の値は、4 桁、6 桁、または 8 桁の数値フォーマットすべてで指定できます
が、タイムスタンプ エレメントはサポートされません。
– 4 桁: 1 月 1 日。 4 桁は年と解釈されます。
– 6 桁: 19YYMMDD、6 桁は YYMMDD と解釈されます。
– 8 桁: YYYYMMDD
v 日付と時間を指定しないと、デフォルトが使用されます。 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’
次に数字のみを使用した有効なタイムスタンプの例を示します。
v ’1234’Jan 1, 1234)
v ’780123’Jan 23, 1978)
v ’12340506’May 6, 1234)
554
IBM Red Brick Warehouse: SQL リファレンス ガイド
日付フィールドと DATEPART 関数
スカラ関数の中には、日時 (DATETIME) 型 (日付フィールド) を構成する個別のエレメ
ントに対して動作するものがあります。各エレメントの定義は、 108 ページの『日付時
間スカラ関数』 で説明されています。
DATEPART 関数は、ANSI SQL-92 の EXTRACT 関数と類似のスカラ関数であり、指
定された datepart エレメントを datetime の値から抽出します。次に DATEPART 関数
を使用した日付時間式の構文ダイアグラムを示します。
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
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. 日付時間フォーマット
555
556
IBM Red Brick Warehouse: SQL リファレンス ガイド
特記事項
本書は米国 IBM が提供する製品およびサービスについて作成したものであり、本書に
記載の製品、サービス、または機能が日本においては提供されていない場合がありま
す。日本で利用可能な製品、サービス、および機能については、日本 IBM の営業担当
員にお尋ねください。本書で IBM 製品、プログラム、またはサービスに言及していて
も、その IBM 製品、プログラム、またはサービスのみが使用可能であることを意味す
るものではありません。これらに代えて、IBM の知的所有権を侵害することのない、機
能的に同等の製品、プログラム、またはサービスを使用することができます。ただし、
IBM 以外の製品とプログラムの操作またはサービスの評価および検証は、お客様の責任
で行っていただきます。
IBM は、本書に記載されている内容に関して特許権 (特許出願中のものを含む) を保有
している場合があります。本書の提供は、お客様にこれらの特許権について実施権を許
諾することを意味するものではありません。実施権についてのお問い合わせは、書面に
て下記宛先にお送りください。
〒106-0032
東京都港区六本木 3-2-31
IBM World Trade Asia Corporation
Licensing
以下の保証は、国または地域の法律に沿わない場合は、適用されません。 IBM および
その直接または間接の子会社は、本書を特定物として現存するままの状態で提供し、商
品性の保証、特定目的適合性の保証および法律上の瑕疵担保責任を含むすべての明示も
しくは黙示の保証責任を負わないものとします。国または地域によっては、法律の強行
規定により、保証責任の制限が禁じられる場合、強行規定の制限を受けるものとしま
す。
この情報には、技術的に不適切な記述や誤植を含む場合があります。本書は定期的に見
直され、必要な変更は本書の次版に組み込まれます。 IBM は予告なしに、随時、この
文書に記載されている製品またはプログラムに対して、改良または変更を行うことがあ
ります。
本書において IBM 以外の Web サイトに言及している場合がありますが、便宜のため
記載しただけであり、決してそれらの Web サイトを推奨するものではありません。そ
れらの Web サイトにある資料は、この IBM 製品の資料の一部ではありません。それ
らの Web サイトは、お客様の責任でご使用ください。
IBM は、お客様が提供するいかなる情報も、お客様に対してなんら義務も負うことのな
い、自ら適切と信ずる方法で、使用もしくは配布することができるものとします。
© Copyright IBM Corp. 1996, 2004
557
本プログラムのライセンス保持者で、(i) 独自に作成したプログラムとその他のプログラ
ム(本プログラムを含む)との間での情報交換、および (ii) 交換された情報の相互利用
を可能にすることを目的として、本プログラムに関する情報を必要とする方は、下記に
連絡してください。
IBM Corporation
J35/G4
555 Bailey Avenue
San Jose, CA 95141-1003
U.S.A.
本プログラムに関する上記の情報は、適切な使用条件の下で使用することができます
が、有償の場合もあります。
本書で説明されているライセンス・プログラムまたはその他のライセンス資料は、IBM
所定のプログラム契約の契約条項、IBM プログラムのご使用条件、またはそれと同等の
条項に基づいて、IBM より提供されます。
この文書に含まれるいかなるパフォーマンス・データも、管理環境下で決定されたもの
です。そのため、他の操作環境で得られた結果は、異なる可能性があります。一部の測
定が、開発レベルのシステムで行われた可能性がありますが、その測定値が、一般に利
用可能なシステムのものと同じである保証はありません。さらに、一部の測定値が、推
定値である可能性があります。実際の結果は、異なる可能性があります。お客様は、お
客様の特定の環境に適したデータを確かめる必要があります。
IBM 以外の製品に関する情報は、その製品の供給者、出版物、もしくはその他の公に利
用可能なソースから入手したものです。IBM は、それらの製品のテストは行っておりま
せん。したがって、他社製品に関する実行性、互換性、またはその他の要求については
確証できません。 IBM 以外の製品の性能に関する質問は、それらの製品の供給者にお
願いします。
IBM の将来の方向または意向に関する記述については、予告なしに変更または撤回され
る場合があり、単に目標を示しているものです。
表示されている IBM の価格は IBM が小売り価格として提示しているもので、現行価
格であり、通知なしに変更されるものです。卸価格は、異なる場合があります。
本書には、日常の業務処理で用いられるデータや報告書の例が含まれています。より具
体性を与えるために、それらの例には、個人、企業、ブランド、あるいは製品などの名
前が含まれている場合があります。これらの名称はすべて架空のものであり、名称や住
所が類似する企業が実在しているとしても、それは偶然にすぎません。
著作権使用許諾:
本書には、様々なオペレーティング・プラットフォームでのプログラミング手法を例示
するサンプル・アプリケーション・プログラムがソース言語で掲載されています。お客
558
IBM Red Brick Warehouse: SQL リファレンス ガイド
様は、サンプル・プログラムが書かれているオペレーティング・プラットフォームのア
プリケーション・プログラミング・インターフェースに準拠したアプリケーション・プ
ログラムの開発、使用、販売、配布を目的として、いかなる形式においても、IBM に対
価を支払うことなくこれを複製し、改変し、配布することができます。このサンプル・
プログラムは、あらゆる条件下における完全なテストを経ていません。従って IBM
は、これらのサンプル・プログラムについて信頼性、利便性もしくは機能性があること
をほのめかしたり、保証することはできません。お客様は、IBM のアプリケーション・
プログラミング・インターフェースに準拠したアプリケーション・プログラムの開発、
使用、販売、配布を目的として、いかなる形式においても、IBM に対価を支払うことな
くこれを複製し、改変し、配布することができます。
それぞれの複製物、サンプル・プログラムのいかなる部分、またはすべての派生的創作
物にも、次のように、著作権表示を入れていただく必要があります。
© IBM 2004. このコードの一部は、IBM Corp. のサンプル・プログラムから取られ
ています。 © Copyright IBM Corp. 1996-2004. All rights reserved.
この情報をソフトコピーでご覧になっている場合は、写真やカラーの図表は表示されな
い場合があります。
特記事項
559
商標
AIX
IBM Informix SE
C-ISAM
Client SDK
Cloudscape
Cloudsync
DB2
DB2 Universal Database
Distributed Relational Database Architecture
Dynamic Connect
Foundation.2000
IBM
IBM Informix
IBM Informix 4GL
IBM Informix Connect
IBM Informix Data Blade Module
IBM Informix Driver for JDBC
IBM Informix Dynamic Scalable Architecture(DSA)
IBM Informix Dynamic Server
IBM Informix Enterprise Gateway Manager
(Enterprise Gateway Manager)
IBM Informix Extended Parallel Server
IBM Informix SQL
i.Financial Services
InformiXML
J/Foundation
MaxConnect
NUMA-Q
Object Translator
OS/2
OS/390
OS/400
RedBack
Red Brick
SystemBuilder
U2
UniData
UniVerse
Wintegrate
Java およびすべての Java 関連の商標およびロゴは、Sun Microsystems, Inc. の米国およ
びその他の国における商標または登録商標です。
Windows、Windows NT、および Excel は、Microsoft Corporation の米国およびその他の
国における商標です。
UNIX は、The Open Group がライセンスしている米国およびその他の国における登録
商標です。
他の会社名、製品名およびサービス名などはそれぞれ各社の商標または登録商標です。
560
IBM Red Brick Warehouse: SQL リファレンス ガイド
索引
日本語, 数字, 英字, 特殊文字の
順に配列されています。なお, 濁
音と半濁音は清音と同等に扱わ
れています。
[ア行]
188
18
NULL 30
値の範囲
移動 264
セグメント化の基準列 263
ALTER SEGMENT 246, 250,
263
CREATE INDEX 327, 329
CREATE TABLE コマンド 364
値ベースのウィンドウ フレーム
131
移動関数、OLAP 156
入れ子にされた集合 47
入れ子になった式 37
インデックス
キー列の順序 387
コメント 239
削除 385
作成 316
作成、名前付きセグメント 324,
331
システム生成の名前 238
セグメントのアタッチ 245
タイプ 3
チェック 308, 445
ドメイン サイズ 333
名前 238, 320
© Copyright IBM Corp. 1996, 2004
13, 18
大文字と小文字の区別
名称と識別子 13
文字列定数 18
部分的に利用可能
変更 238
命名 11
オブジェクト、データベース
オブジェクト特権
取消 430
463
付与
320
B-TREE 317
作成例 326
システム生成インデックスの
FROM 句 184
WHERE 句 202
文字列
大文字と小文字
光ディスク上のセグメントでの選
択 462
フィル ファクタ 238, 332
ユーザ作成
アウター ジョイン
定義 182
アスタリスク、検索項目リスト
値の欠落 39
評価 30
インデックス (続き)
削除 386
SEGMENT LOCAL 325
SEGMENT LIKE DATA 324
SEGMENT LOCAL
326
STAR 386
TARGET
作成 317
ドメイン混在 333
SEGMENT LOCAL
インナー ジョイン 181
416
オプティマイザ ディレクティブ
504, 507, 516
[カ行]
階層構造
削除 384
作成 313
下線記号のワイルドカード
325
ウィンドウ パーティション 128,
136
ウィンドウ フレーム
値ベース 151
行ベース 149
リード機能とラグ機能 153
OLAP 129
window_frame 句 145
埋込みマクロ 338
エイリアス
定義 14
列 189
エスケープ文字
マクロ名 338
LIKE 述部 44
エラー、ゼロ除算 444
演算子
算術演算子 37
NULL 値 39
エンティティの整合性 5
11
括弧、優先順位 38
可変長文字 (VARCHAR) 型
間隔、日付時間 25
関係スキャン
44
23
460
関数、SQL
集合 56
集約 47
スカラ 57, 123
OLAP 125, 161
RISQL 表示 161, 178
関数従属性 313
完全インデックス チェック、ALTER
SEGMENT コマンドでの省略 256,
262
キー
フォーリン 4
フォーリン キー参照 356
プライマリ 4, 354
キーワード
構文ダイアグラム xiv
予約済み 545
行
テーブルから検索指定 201
561
行 (続き)
検索条件 (続き)
SET ROWCOUNT での表示制限
494
行 ID、セグメントの変更
行サブクエリ
247
限定ジョイン
行ベースのウィンドウ フレーム
130
許可と特権
SET ROWCOUNT での実行停止
小文字と大文字
クエリ式 179, 230
概要 179
クエリ指定 180, 187
224
事前計算 373
相関サブクエリ
変換 13
リテラル
単純なテーブル 181
テーブル ジョイン 180, 181
ビュー 373
明示的なテーブル 181
例 194
UNION、INTERSECT、EXCEPT
式 181, 207
クエリ指定 187
クエリ処理、操作順序 223
クエリの記述 179, 230
区切り識別子 12
マクロ名 336
グループ関数 47
クロス ジョイン
構文 185
使用上の注意 192
SET CROSS JOIN コマンド 448
検索条件
定義 44
FROM 句 184
HAVING 句 205
サンプリング
442
553
ANSI SQL-92 標準
18
式
18
入れ子
[サ行]
作業セグメント、ALTER TABLE 操
作 286
サブクエリ
検索項目リスト
198
SET ADVISOR SAMPLE
サンプル データベース 9
時間リテラル
非標準
300
195, 198
行サンプル 197
ブロック サンプル
マージン 198
作業用メモリの制限 486
削除トリガ動作 294, 299, 302, 357
227
357
ALTER TABLE ADD
CONSTRAINT コマンド
132
構文ダイアグラム
キーワード xiv
表記規則 xii
変数 xv
候補ビュー 441
494
クエリ プロセス、クエリあたりの数
491
無効
説明 181
降順 172, 216
記述 179, 230
並列プロセス 459
メモリ マッピング 487
562
参照整合性サイクル
192
値ベースのウィンドウ フレーム
SQL の実行に必要な許可と特権
5
クエリ
構文 180
サブクエリ
ALTER SEGMENT でのチェック
の省略 260, 262
192
使用上の注意
225
参照整合性 (続き)
WHEN 句 206
WHERE 句 201
189
スカラとテーブル 225
相関サブクエリと GROUP BY サ
ブクエリ 229
派生テーブル 191
部分 SELECT 文 224
例 194
列名の解決 228
FROM 句 187, 226
算術演算子、優先順位 38
参照
テーブル 191
フォーリン キー 356
列のエイリアス 189
参照先テーブル 2, 7
インデックスを同様にセグメント
化 325
参照整合性 357, 380
チェックの延期 299
定義 5
IBM Red Brick Warehouse: SQL リファレンス ガイド
37
クエリ 179, 230
算術演算子 37
ジョインの検索条件
多項式
単項式
184
36
35
評価 37
OLAP 関数
133
RISQL 表示関数 161
識別子
区切り識別子 12, 336
標準 11
時刻 (TIME) 型 25
システム カタログ 6
システム テーブル、ジョイン
194
システム ロール
タスク権限のリスト 408
取消 427
付与 407, 412
システム要件 xi
事前計算クエリ式 373
事前計算ビュー 378, 482
作成 372
説明 372
SET コマンド 523
実数 (FLOAT) 型 29, 30
シノニム
コメントの割当て 272
192,
シノニム (続き)
削除
作成
条件 (続き)
参照の変更
302
フォーリン キー参照
302
命名 11, 345
修飾列名 15, 193
ORDER BY 句
集約関数 374
入れ子 37, 47
検索項目リスト
定義 39
DATENAME
3 値論理 30
DEC
HAVING 句 205
WHEN 句 206
DECODE 63
EXTRACT 116
374
処理、SELECT 文
49
DISTINCT キーワード
MAX 53
MIN 54
OLAP 145
OLAP 集約とは異なる関数
473
集約テーブル 375, 377, 394
集約列 374
述部
構成 39
数量 40
比較 40
ローカル 513
ALL 40
BETWEEN 41
EXISTS 41
IN 42
IS NULL 43
LIKE 43
SOME または ANY 40
ジョイン クエリ式 179
上位 10 行 172
小計、BREAK BY 221
小桁整数 (SMALLINT) 型 29
小桁整数 (TINYINT) 型 29
条件
検索 44
LOWER 93
LTRIM 94
NULLIF 66
223
シリアル (SERIAL) 型
値の生成 28
値の挿入 420
POSITION
27
シンプル スター スキーマ
数値スカラ関数
ABS 69
49
145
74
FLOOR 75
IFNULL 65
INT 76, 78, 83
IFNULL 65
NULLIF 66
照合シーケンス 216
AVG 49
COUNT 51
COUNT(*) 51
114
72, 73
FLOAT
CASE 59
COALESCE 62
DECODE 63
189
ALL キーワード
DATEADD 112
DATEDIFF 113
227
条件付きスカラ関数
216
事前計算ビュー定義
集約関数 47
説明 47
SUM 55
集約操作、並列
スカラ関数 (続き)
相関 14
相関サブクエリ
391
345
95
POSITIONB 97
REAL 79
ROUND 80
322
RTRIM 98
SIGN 82
STRING 99
CEIL 70
DEC 72, 73
SUBSTR 102, 104
TIME 118
FLOAT 74
FLOOR 75
TIMESTAMP 119
TO_CHAR 120
INT 76, 78, 83
REAL 79
ROUND 80
SIGN 82
数値定数 17
数量述部 39
スカラ サブクエリ 225
スカラ関数 57
入れ子 37, 57
テリトリによる指定の結果 109
分析関数内での入れ子 77
ABS 69
CASE 59
CEIL 70
COALESCE 62
CONCAT 88, 90, 92
CURRENT_DATE 110
CURRENT_TIME 110
CURRENT_TIMESTAMP 110
CURRENT_USER 123
DATE 111
TRIM 106
UPPER 107
スカラ関数の入れ子 57
スカラ関数の出力のローカライズ
108
スキーマ
スター 6
設計の柔軟性 6
スキーマ参照のループ、無効 300,
357
スケール
数値データ型 17
整数定数 20
倍精度 30
10 進数 (DECIMAL) 型と 10 進
数 (NUMERIC) 型 29
10 進定数 20
スター スキーマ 6
ストレージの指定、セグメント 342
スピル ファイル 464
索引
563
セグメント (続き)
整数
タイムスタンプ リテラル (続き)
小桁整数 (SMALLINT) 型 29
小桁整数 (TINYINT) 型 29
部分的に利用可能なインデックス
463
定数
部分的に利用可能なテーブル
INT
19
27
整数 (INT) 型
精度
数値データ型
変更 243
保持 503
10 進定数 20
制約、テーブルの変更
制約名
テーブルから削除
302
301
テーブルへの追加 298
フォーリン キー 356
フォーリン キー参照 321
フォーリン キー制約の変更 302
プライマリ キー 354
セキュリティ、データベース 5
セグメント
値の範囲の変更
263
オフライン モード
オンライン モード
259
261
切離し 254
クリア 261, 262
コメント 268
最大数の変更 287
作業 286
削除 390, 503
作成 342
修正 253, 270
正常化 262
セグメント化の基準列 364
セグメント範囲の指定 327, 364
全移動 268
テーブルごとの最大数 349
デフォルト ディレクトリの設定
449, 451
名前の変更 266
破損 393
ハッシュ 362
範囲 246, 250, 263, 327, 329
範囲の指定 364
物理格納ユニット 267, 342
36
タスク権限
定義 408
命名 11, 324, 342
17
整数定数 20
倍精度 30
10 進数 (DECIMAL) 型 29
564
25
多項式
476
27
ANSI SQL-92 標準 18
タイムスタンプ (TIMESTAMP) 型
取消
ローカル インデックス 325
SET SEGMENTS コマンド 503
セグメント ID、セグメントの変更
427
付与 407
SQL の実行に必要な許可と特権
5
単項演算子 37
単項式 35
単純なテーブル
247
セグメント化の基準列
ALTER SEGMENT コマンド
中央値、計算
263
188
143
CREATE TABLE コマンド 364
セグメント定義、CREATE INDEX
コマンド 324
重複行 188
直積
演算の防止
セグメントの最大数、テーブル
セグメント範囲の指定
B-TREE インデックスと
クロス ジョインによる演算 185
通知メッセージ、表示制限 467
データ キューブ 322
349
TARGET インデックス 327
STAR インデックス 328
セグメント範囲の変更、STAR イン
デックス 247
接続詞、論理 44
セルフ ジョイン
説明 192
相関名 186
ゼロ除算 444
相関サブクエリ 227
相関条件 14
相関名 228
セルフ ジョイン 186
テーブル 14
相互参照、相関条件 227
[タ行]
代替テーブル名 186
代入
数値 32
日付時間 31
文字 31
タイムスタンプ リテラル
非標準 554
IBM Red Brick Warehouse: SQL リファレンス ガイド
448
データ型
一覧 22
互換性 31
シリアル (SERIAL) 型
27
日付時間 25
浮動小数点 29, 30
文字 (CHARACTER) 型 23
10 進数 29
10 進数 (NUMERIC) 型 29
CREATE TABLE コマンド 350
データベース
オブジェクト名 11
パスワードの変更 412
ユーザの削除 429
ユーザの追加 412
Aroma 9
データベース オブジェクトの命名
11
テーブル
コメント 288
削除 392
作成 347
作成、名前付きセグメント 360,
362
参照先テーブル 2
テーブル (続き)
ドメイン サイズ、TARGET インデ
参照元テーブル
システム 6
集約
ックス 333
ドメイン、定義
2
ス
181, 192
名前の変更 288
派生 191
変更 284, 296
長さ、文字列定数 18
ナチュラル ジョイン 183, 192
命名 11
リレーショナル データベース
テーブル サブクエリ、定義 225
日時 (DATETIME) 型
日時定数
2
アウター ジョイン 182
インナー ジョイン 181
クロス ジョイン 185
構文 192
システム テーブル 194
ジョイン指定 181
テーブル参照
定義 192
非標準 549
ANSI SQL-92 標準
非ジョイン クエリ式
日付 (DATE) 型 25
日付時間スカラ関数
25
186
191
FROM 句指定 192
WHERE 句指定 202
テーブル参照
構文 185, 191
派生テーブル 191
FROM 句 191
テーブルの行のソート 215
定数
数値 17
整数 19
浮動小数点値 21
文字 17
10 進数 20
ディメンジョン テーブル 2
デモンストレーション データベー
ス、インストール スクリプト xii
テリトリ、スカラ関数の結果 109
テンポラリ テーブル、作成 369
同一レベル ジョイン 181
動的統計テーブル (DST) 492
特権 416
179
CURRENT_DATE 110
CURRENT_TIME 110
18
[ハ行]
CURRENT_TIMESTAMP
DATE 111
DATEADD 112
バージョン ログ
CLEAN VERSION LOG
DATEDIFF 113
DATENAME 114
181, 192
セルフ ジョイン
直積 448
32
32
アクセス 470
インデックスの選択 462
セグメントの移動 268
[ナ行]
369, 520
テーブル ジョイン
文字
333
39, 40
数値 33
日付時間
光ディスク
代替テーブル名 186
チェック 311, 445
テンポラリ
述部
317
ドメイン混在 TARGET インデック
375, 377, 394
ジョイン
比較
235
CREATE VERSION LOG 233
DROP VERSION LOG 234
パーセントのワイルドカード文字
44
パーティション、OLAP 128
パーティション化した並列集約
EXTRACT 116
TIME 118
TIMESTAMP 119
TO_CHAR
477
ハイブリッド ハッシュ ジョイン、
並列 475
ハイブリッド TARGET インデック
ス 333
パスワード
新規ユーザの追加 413
シングルバイト文字に制限 11
変更 413
派生テーブル 187
構文 191
例 194
派生ディメンジョン、事前計算ビュ
ー 377
破損したセグメント 393
ハッシュ ジョイン、並列 475
パフォーマンス モニタ
デーモンの開始と停止 280
統計のクリア 282
ON または OFF に設定 478
パラメータ、マクロ 336
110
120
日付フィールド
定義 108
DATEPART 関数
555
EXTRACT 116
日付フィールドの抽出
(EXTRACT) 108
日付リテラル
非標準 549
ANSI SQL-92 標準 18
非同一レベル ジョイン、クロス ジ
ョインとして実行 448
ビュー 3
コメントの割当て 306
削除 394
作成 372
事前計算 372, 376, 378, 523
命名 11
表記規則
構文ダイアグラム xii
構文の表記規則 xii
表示関数 36
ファイル名、シングルバイト文字に
制限 11
索引
565
ファクト テーブル
マクロ (続き)
2
フィル ファクタ、CREATE INDEX
コマンド 332
定義 8
パラメータ
フォーリン キー
4
プライベート
437
命名 11
更新時の制約
制約名 321, 356
定義 356
拡張サイズ 267, 343
最大サイズ 267, 343
シーケンス ID 266
初期サイズ 269, 343
名前 343
パス名 267
プライマリ キー
更新時の制約
制約名 354
算術演算子
論理接続詞
188
TABLE コマンド 354
フル アウター ジョイン、構文
予想されるドメイン サイズ
予約語
プロセス
クエリあたりのプロセス数 491
並列クエリへの割当て 459
分析関数 125, 178
平均、移動 165
並列クエリ、タスクの割当て 459
並列クエリのタスク、割当て 459
並列集約 477
並列集約操作 473
並列ハッシュ ジョイン 475
変数、構文ダイアグラム xv
[マ行]
マージン、サンプリング
マクロ
埋込みマクロ 338
カテゴリ 336
コメント 241, 337
削除 336, 388
作成 335
198
318
545
487, 489
ライト アウター ジョイン、構文
184
整数
日時
18
CONCAT 88, 90, 92
LOWER 93
LTRIM 94
POSITION 95
POSITIONB 97
RTRIM 98
STRING 99
SUBSTR 102, 104
TRIM 106
UPPER 107
[ヤ行]
ユーザ
コメントの割当て 304
セッション優先順位の割当て
304
データベースから削除 429
データベースへの追加 412
パスワードの変更 412
ユーザ作成ロール
削除 389
作成 340
IBM Red Brick Warehouse: SQL リファレンス ガイド
[ラ行]
ラグ機能、OLAP
リテラル
114
44
文字データ型 23, 31
文字列スカラ関数
184
37
45
486
メモリ マッピング
文字セット
文字セット リテラル
大文字と小文字の区別
長さ 18
4, 354
437
11
38
メモリ チューニング パラメータ
日付時間の変換
ワイルドカード
ESCAPE 44
列の指定 354
REFERENCE 句、CREATE
566
優先順位
長さ 23, 351
336
427
407
ユーザ名、命名
336
空の文字列 18
シングルバイトとマルチバイト
11
21
太字 xii
不明値、評価 30
プライベート マクロ
取消
付与
336
PUBLIC 336
明示的なテーブル
物理格納ユニット
浮動小数点定数
ユーザ作成ロール (続き)
153
19
18
日時 (DATETIME) 型
文字 17
文字の長さ 17
17
10 進数 20
リレーショナル データベースのテー
ブル 2
累積合計
OLAP の例 156
RISQL 162
累積分布関数 135
列
エイリアス 14, 189
コメント 296
削除 285, 293
修飾名 15, 193
追加 285, 290
テーブルから検索指定 188
定義 348
名前 348
名前の変更 294
REFCHECK モードの変更 294,
299, 302
SET 値 435
列関数 47
列参照の解決 228
列指定によるジョイン 185, 192
レフト アウター ジョイン、構文
184
ALTER COLUMN 指定、ALTER
ローカル インデックス
作成 325
セグメントのアタッチ
TABLE コマンド
ALTER CONSTRAINT 指定、ALTER
245
TABLE コマンド 302
ALTER DATABASE コマンド
RANGE LIKE SEGMENT 句
250
ローカル述部
ロール
削除
作成
取消
構文一覧
513
コメントの割当て
付与 407, 412
命名 11
ロール ベースのセキュリティ
30
論理接続詞
44
の変更
ログ記録設定の変更
531
238
240
TARGET インデックス
ALTER MACRO コマンド
構文一覧 531
[ワ行]
構文説明 241
ALTER ROLE コマンド
構文一覧 531
ワイルドカード文字
ALTER SEGMENT コマンド
44
[数字]
10 進定数 20
3 値論理 30
A
ABS 関数 69
ADD COLUMN 句、ALTER TABLE
コマンド 290
ADD CONSTRAINT 指定、ALTER
TABLE コマンド 298
ADD STORAGE 句、ALTER
SEGMENT コマンド 269
Advisor 候補ビュー 441
ADVISOR_MAXIMUM_
CANDIDATE_VIEWS パラメータ
441
ALL PRIVILEGES、付与 416
ALL キーワード
検索項目リスト 188
AVG 関数 49
ALL 比較述部 40
ALLOW_SINGLE_COLUMN_BTREE
パラメータ 443
282, 283
279
ALTER SYSTEM コマンド、アカウ
ンティング設定の変更 280
ALTER TABLE コマンド 284, 351
構文説明 284, 296
作業セグメント 286
参照整合性チェックの延期
例 240
5
パフォーマンス モニタの変更
280
ユーザ操作の制御 275, 276, 277
ユーザ優先順位の変更 277, 278
527
ALTER INDEX コマンド
構文一覧
構文説明
使用方法
ALTER SYSTEM コマンド (続き)
パフォーマンス統計のクリア設定
構文説明 232
説明 232
242
389
340
427
論理、3 値
294
240
ADD COLUMN 指定
ADD CONSTRAINT 指定 298
ALTER COLUMN 指定 294, 296
ALTER CONSTRAINT 指定 302
完全インデックス チェックの省
略 256, 262
句の修正 253, 270
構文一覧 531
構文説明 270
参照整合性チェックの省略
299
290, 291
DROP COLUMN 指定 293
DROP CONSTRAINT 指定 301
MAXROWS PER SEGMENT 値
287
MAXSEGMENTS 値
287
RENAME AS 指定 288
ALTER USER コマンド
260,
262
例 259, 261
ATTACH 句 245, 250
DETACH OVERRIDE
FULLINDEXCHECK オプション
258
DETACH 句 254
MIGRATE TO 句 268
SEGMENT BY 句 263
SEGMENT BY、セグメント化の
基準列 263
ALTER SEGMENT コマンド、
RANGE 句 263
ALTER SYNONYM コマンド
構文一覧 533
構文説明 272
ALTER SYSTEM コマンド
構文一覧 528
構文説明 273, 280
説明 273
構文一覧 529
構文説明 304
使用上の注意 304
ALTER VIEW SET MAINTENANCE
コマンド 306
ALTER VIEW コマンド 306
AND 接続詞 44
ANY 比較述部 40
ARITHIGNORE、ARITHABORT コマ
ンド 444
Aroma データベース 9
AS キーワード、列のエイリアス
14, 189
ASC キーワード
値ベースのウィンドウ フレーム
132
OLAP ORDER BY 句 136
ORDER BY 句 216
AVG 関数 49, 374
OLAP 145
索引
567
CHECK TABLE コマンド
B
BETWEEN 述部
構文一覧
構文説明
41
BREAK BY サブ句
INSERT 文では使用不可
ORDER BY 句
215,
221
CASCADE キーワード
ALTER TABLE コマンド
299, 302
CREATE TABLE コマンド
294,
357
59
CEIL 関数 70
CHANGE
ACCOUNTING LEVEL、ALTER
280
DOMAIN 句、ALTER INDEX コ
マンド 239
EXTENDSIZE 句、ALTER
SEGMENT コマンド 267
FILLFACTOR 句、ALTER
INDEX コマンド 239
LOGGING LEVEL 句、ALTER
SYSTEM コマンド 279
MAXROWS 句、ALTER TABLE
コマンド 287
MAXSIZE 句、ALTER
SEGMENT コマンド 267
PATH 句、ALTER SEGMENT コ
マンド 267
USER 句、ALTER SEGMENT コ
マンド 277
CHECK INDEX コマンド
構文一覧 308
構文説明 308
説明 308
SET CHECK REPORT FILE
PERMISSIONS 445
568
B-TREE の例
235
CLEAR PERFORMANCE
STATISTICS 句、ALTER SYSTEM
NTILE 関数 170
CATEGORY 句、CREATE MACRO
コマンド 336
SYSTEM コマンド
B-TREE インデックス
PERMISSIONS 445
CLEAN VERSION LOG 指定、
ALTER DATABASE コマンド
327
C
CASE 式
構文説明
ドメイン サイズ 333
ローカル インデックスの例
SET CHECK REPORT FILE
221
B-TREE インデックス
CREATE INDEX コマンド (続き)
311
311
311
326
STAR インデックス 316
STAR インデックスの例 326
TARGET インデックス
コマンド 282
CLEAR キーワード、ALTER
CREATE MACRO コマンド
構文一覧 537
構文説明 335, 338
SEGMENT コマンド 261, 262
CLOSE USER COMMAND 句、
ALTER SYSTEM コマンド 276
例 338
CREATE ROLE コマンド
構文一覧 538
CLOSE USER SESSION 句、ALTER
SYSTEM コマンド 276
COALESCE 関数 62
COMMENT 句 288
インデックス 239
シノニム 272
セグメント 268
ビュー 307
マクロ 241, 337
ユーザ 304
列 296
ロール 242
CONCAT 関数 88, 90, 92
CONNECT システム ロール
付与 412
ユーザの削除 429
COUNT 関数 51, 162
結果のデータ型 447
OLAP 145
COUNT(*) 関数 51
CREATE HIERARCHY コマンド
構文一覧 536
構文説明 313
説明 313
CREATE INDEX コマンド
インデックス指定 320
構文一覧 536
構文説明 316
セグメント指定の例 330
セグメント定義 324
セグメント範囲の指定 327, 329
説明 317
IBM Red Brick Warehouse: SQL リファレンス ガイド
326
317
構文説明
317
340
使用方法 340
例 340
CREATE SEGMENT コマンド
構文一覧 538
構文説明 342, 343
ストレージの指定 342
例 343
CREATE SYNONYM コマンド
構文一覧
構文説明
538
345
例 346
CREATE TABLE コマンド
構文一覧 538
構文説明 347, 362
セグメント定義 360, 362
説明 351
プライマリ キー参照 354
例 361, 367, 368
FOREIGN KEY REFERENCES 句
356, 358
MAXROWS PER SEGMENT 値
349
MAXSEGMENTS 値 349
PRIMARY KEY REFERENCE 句
354
SEGMENT LIKE DATA 句 362
CREATE TEMPORARY TABLE コマ
ンド
構文一覧 540
構文説明 370
説明 369
CREATE VIEW コマンド
クエリ式
構文一覧
373
540
構文説明
372
事前計算ビュー
例 376
CUME_DIST 関数
DISTINCT キーワード
検索項目リスト
AVG 関数 49
COUNT 関数 51
DROP INDEX コマンド
385
DROP TABLE コマンド 392
DST (動的統計テーブル) 492
OLAP 集約 145
376
DROP COLUMN 指定、ALTER
134
CURRENT_DATE 関数
DROPPING SEGMENTS キーワード
188
110
CURRENT_TIME 関数 110
CURRENT_TIMESTAMP 関数 110
CURRENT_USER 関数 123
D
DATABASE キーワード、ALTER
SEGMENT コマンド 273
DATE 関数 111
DATEADD 関数 112
DATEDIFF 関数 113
DATEFORMAT 変数 550
DATENAME 関数 114, 458
DBA システム ロール
タスク権限のリスト 408
取消 427
付与 407
DEC 関数 72, 73
DECODE 関数 63
DEC、10 進数 (DECIMAL) 型 29
DEFAULT VALUES サブ句、
INSERT コマンド 421
DEFAULT 句、CREATE TABLE コ
マンド 352
DELETE コマンド
構文一覧 541, 542, 543
構文説明 379, 380
使用方法 380
例 381, 383
DELETE (特権) 416
DENSE_RANK 関数 134
DESC キーワード
OLAP ORDER BY 句 136
ORDER BY 句 216
DETACH 句、ALTER SEGMENT コ
マンド 254
DISTINCT 関数 375
TABLE コマンド 293
DROP CONSTRAINT 指定、ALTER
TABLE コマンド 301
DROP DEFAULT 句、ALTER
TABLE コマンド 296
DROP HIERARCHY コマンド
構文一覧 541
構文説明 384
説明 384
DROP INDEX コマンド
構文一覧 541
E
EXCEPT 演算子 207
EXISTS 述部 41
EXPAND コマンド
構文一覧 544
構文説明 395
EXPLAIN コマンド
構文一覧 544
構文説明 396
EXPORT コマンド
区切り文字 456
構文説明 397
出力ファイルの最大サイズ
構文説明 385
挿入時の制約 386
例 386
DROP LAST STORAGE オプショ
ン、ALTER SEGMENT コマンド
270
DROP MACRO コマンド
構文一覧
構文説明
説明
457
397
デフォルト パス 455
EXTENDSIZE 句、ALTER
SEGMENT コマンド 270, 343
EXTRACT 関数
116, 458
541
388
DROP ROLE コマンド
構文一覧 541
構文説明 389
例 389
DROP SEGMENT コマンド 237
構文一覧 541
構文説明 390
例 390
DROP SYNONYM コマンド
構文一覧 541
構文説明 391
DROP TABLE コマンド
構文一覧 541
構文説明 392, 393
例 393
DROP VERSION LOG 指定、ALTER
DATABASE コマンド 234
DROP VIEW コマンド
構文一覧 542
構文説明 394
F
FLOAT 関数 74
FLOOR 関数 75
FOR DELETE オプション、LOCK
コマンド 424
FORCE INTACT 句、ALTER
SEGMENT コマンド 262
FORCE_AGGREGATION_TASKS パ
ラメータ 459
FORCE_FETCH_TASKS パラメータ
459
FORCE_HASHJOIN_TASKS パラメー
タ 459
FORCE_JOIN_TASKS パラメータ
459
FORCE_SCAN_TASKS パラメータ
459
FORCE_TARGETJOIN_TASKS パラ
メータ 459
索引
569
FOREIGN KEY 句、CREATE
TABLE コマンド 356
frame_between 句 147
frame_end 句
146
frame_start 句
146
FROM 句 191
アウター ジョイン
IGNORE_OPTICAL_INDEXES パラメ
192
サブクエリ 187
サブクエリのパフォーマンス
226
192
テーブル参照 191
NATURAL JOIN 構文 192
ON サブ句 192
USING サブ句 192
FULLINDEXCHECK キーワード、
ALTER SEGMENT コマンド 256,
262
ータ、構文
462
IN 述部 42
INFO_MESSAGE_LIMIT パラメー
タ、rbw.config ファイル
467
INITIALLY DEFERRED オプショ
ン、ALTER TABLE ADD
CONSTRAINT コマンド 299
INITSIZE 句、ALTER SEGMENT コ
マンド 269, 343
INSERT コマンド
値の代入
31
構文一覧
構文説明
使用方法
542
419, 421
421, 424
挿入時の制約 386
例 422, 423
INSERT (特権) 416
INT 関数 76, 78, 83
INTERSECT 演算子 207
G
GRANT CONNECT コマンド
構文一覧 530
構文説明 412, 414
例 414
GRANT (許可とロール) コマンド
構文一覧 529
構文説明 407, 411
使用方法 410
例 411
GRANT (特権) コマンド
構文一覧 530
構文説明 416, 417
例 417
GROUP BY 句 203
HAVING 句
570
M
アル xvi
IFNULL 関数 31, 65
ー ジョイン 192
クエリ式 187
クロス ジョイン 192
H
205
94
IBM Red Brick Warehouse のマニュ
インナー ジョインおよびアウタ
ジョイン指定
LTRIM 関数
I
IN_PLACE キーワード、ALTER
TABLE コマンド 286
IS NOT NULL 述部 30
IS NULL 述部 30, 43
K
KEEPING SEGMENTS キーワード
DROP INDEX コマンド 385
DROP TABLE コマンド 392
L
LIKE 述部 43
LOCK DATABASE コマンド
構文説明 425
使用方法 426
説明 425
LOCK (テーブルのロック) コマンド
構文一覧 542
LOWER 関数 93
IBM Red Brick Warehouse: SQL リファレンス ガイド
MAX 関数
53
OLAP 145
MAXROWS PER SEGMENT 値
ALTER TABLE コマンド
287
CREATE TABLE コマンド 349
MAXSEGMENTS 値
ALTER TABLE コマンド 287
CREATE TABLE コマンド
349
MAXSIZE パラメータ
ALTER SEGMENT コマンド
269
CREATE SEGMENT コマンド
343
MAXSPILLSIZE 値、SET
INDEX/QUERY TEMPSPACE コマ
ンド 466
MAX、MIN キーワード、範囲
366
328,
MIGRATE TO 句、ALTER
SEGMENT コマンド 268
MIN 関数 54
OLAP 145
MIN、MAX キーワード、範囲
328,
366
mmap システム呼出し 487
MOVINGAVG 関数 165
MOVINGSUM 関数 167
N
NO ACTION キーワード
ALTER TABLE コマンド 294,
299, 302
CREATE TABLE コマンド 357
NO WAIT キーワード
LOCK コマンド 424
SET LOCK コマンド 468
NOT NULL キーワード
ALTER TABLE コマンド 290,
294
CREATE TABLE コマンド 351
NTILE 関数 169
NTILE 関数 (続き)
OLAP
NULL
OLAP 関数 (続き)
134
ROW_NUMBER
SUM 145
アウター ジョインで表示される
値
算術演算子
45
39
テーブル列の変更
配置 472
文字列 18
SET ORDER BY コマンド 472
SUPPRESS BY 句による値の除外
223
NULLIF 関数
PROCESS 句、ALTER SYSTEM コ
マンド
145
66
PSU 266
PSU シーケンス ID
WITHIN GROUP 句
PUBLIC
アクセス 416
オブジェクト特権
142
294,
CREATE TABLE コマンド 357
ON ERROR ABORT/CONTINUE
句、CREATE INDEX コマンド
318
NULLS FIRST、OLAP 結果 154
O
276, 278
window_order 句 136
window_partition 句 136
ON DELETE 句
ALTER TABLE コマンド
299, 302
294
97
PREPLANS_HAVE_ONLY_
PKFK_JOINS パラメータ 483
WHEN 句 137
window_frame 句
182
値の欠落 31
検索条件の評価
POSITIONB 関数
140
ON サブ句、FROM 句中 192
ONLINE モード、ALTER SEGMENT
コマンド 261
266
417
Q
QUERY_MMAP パラメータ 487
QUERY_MMAP_LIMIT パラメータ
489
QUIESCE 句、ALTER SYSTEM コ
マンド
273
OFFLINE モード、ALTER
SEGMENT コマンド 259
OPTICAL 指定、ALTER SEGMENT
コマンド 266
OPTICAL_AVAILABILITY パラメー
R
OLAP 関数 125, 161
一般的な使用方法 133
タ、構文 470
OR 接続詞 44
RANGE LIKE SEGMENT 句
ALTER SEGMENT コマンド
ウィンドウ パーティション
ウィンドウ フレーム 129
128
ウィンドウ フレームの例 149,
154
式 133
集約関数 145
集約の例 156
順位付けの例 137
リード機能とラグ機能 153
AVG 145
COUNT 145
CUME_DIST 134
DENSE_RANK 134
MAX 145
MIN 145
NTILE 134
ORDER BY 句 128
OVER 句 127
PERCENTILE_CONT 142
PERCENTILE_DISC 142
PERCENT_RANK 134
RANK 134
RATIO_TO_REPORT 159
Oracle 式の構文、アウター ジョイン
202
ORDER BY 句 215
BREAK BY サブ句 221
OLAP 128, 132, 136
RESET BY サブ句 218
UNION、EXCEPT、INTERSECT
式の制限 216
OVER 句、OLAP 関数 127
OVERRIDE REFCHECK 句
ALTER SEGMENT コマンド
260, 262
CREATE TABLE コマンド 358
DELETE コマンド 380
P
PARALLEL_SET_OPERATION パラ
メータ 473
PERCENTILE_CONT 関数 142
PERCENTILE_DISC 関数 142
PERCENT_RANK 関数 134
POSITION 関数 95
250
RANGE LIKE SEGMENT 句、
ALTER SEGMENT ATTACH
245
RANGE 句、ALTER SEGMENT コ
マンド 263
RANK 関数
上位 10 行 172
NTILE と比較 169
OLAP 134
RISQL 172
RATIOTOREPORT 関数
OLAP 159
RISQL 175
rbwadmd デーモン 492
RBW_OPTIMIZER_OPTIONS テーブ
ル 505
REAL 関数 79
RELEASE STORAGE 句、ALTER
SEGMENT コマンド 270
RENAME AS 句、ALTER TABLE
コマンド 294
RENAME 句、ALTER SEGMENT コ
マンド 266
索引
571
replacement 値、DECODE 関数 63
ROWS_PER_JOIN_TASK パラメータ
SELECT 文 (続き)
RESET BY サブ句
構文説明 218
497
ROWS_PER_SCAN_TASK パラメー
WHERE 句 201
SET ADVISOR LOGGING コマンド
WHEN 句
220
タ 496
440
RESET STATISTICS 句、ALTER
ROWS_PER_TARGETJOIN_TASK パ
SEGMENT コマンド 273
RESET 句、ALTER TABLE コマン
ラメータ 498
ROWS_PER_TASK パラメータ
ド
287
付与 407
RESTRICT キーワード、ALTER
TABLE コマンド 293
RESUME 句
ALTER SYSTEM コマンド 274
ALTER TABLE コマンド 287
REVOKE CONNECT コマンド
構文一覧 530
構文説明 429
REVOKE (許可とロール) コマンド
構文一覧
構文説明
530
427
使用方法
例 428
427
REVOKE (特権) コマンド
構文一覧 530
構文説明 430
使用方法 431
例 431
RISQL 表示関数
入れ子 37
式 36, 161
スカラ関数内での入れ子 77
リザルト セットの並び順 163
CUME 162
MOVINGAVG 165
MOVINGSUM 167
NTILE 169
RANK 172
RATIOTOREPORT 175
TERTILE 169, 177
WHEN 句 220
ROUND 関数 80
ROWS_PER_FETCH_TASK パラメー
タ 497
ROW_NUMBER 関数
RTRIM 関数 98
140
442
SET ALLOW SINGLE COLUMN
BTREE コマンド 443
S
SEGMENT BY HASH 句、CREATE
TABLE コマンド 362
SEGMENT BY VALUES OF 句
CREATE INDEX コマンド 327
CREATE TABLE コマンド
SEGMENT BY 句、ALTER
SEGMENT コマンド 263
SEGMENT LIKE DATA 句
CREATE INDEX コマンド
364
324
SEGMENT LOCAL 句、CREATE
INDEX コマンド 325
SELECT (特権) 416
SELECT 文
検索項目リスト 188
構文一覧 543
構文説明 214, 432
サブクエリ 224
処理シーケンス 223
テーブル ジョイン 192
BREAK BY サブ句 221
EXCEPT 演算子 207
FROM 句 191
GROUP BY 句 203
HAVING 句 205
INTERSECT 演算子 207
ORDER BY 句 215
RESET BY サブ句 218
SUPPRESS BY 句 223
UNION 演算子 207, 214
WHEN 句 206
SET ARITHIGNORE、ARITHABORT
コマンド 444
構文説明 444
SET CHECK REPORT FILE
PERMISSIONS コマンド 445
SET CHECK_TABLE_INDEX_
DIRECTORY コマンド 446
SET COUNT RESULT コマンド
447
SET CROSS JOIN コマンド 448
CREATE TABLE コマンド 362
SEGMENT LIKE REFERENCED
TABLE 句 325
IBM Red Brick Warehouse: SQL リファレンス ガイド
CANDIDATE VIEWS コマンド
441
SET ADVISOR SAMPLE コマンド
495
RESOURCE システム ロール
タスク権限のリスト 408
取消 427
572
459,
SET ADVISOR MAXIMUM
SET DATEFORMAT コマンド 550
SET DEFAULT DATA SEGMENT コ
マンド 449
SET DEFAULT INDEX SEGMENT
コマンド 451
SET DEFAULT PSU EXTENDSIZE
コマンド 453
SET DEFAULT SEGMENT SIZE コ
マンド 454
SET DEFAULT 句、ALTER TABLE
コマンド 295
SET EXPORT_DEFAULT_PATH コマ
ンド 455
SET EXPORT_DELIMITER コマンド
456
SET EXPORT_MAX_FILE_SIZE コマ
ンド 457
SET FIRST DAYOFWEEK コマンド
458
SET FORCE_AGGREGATION_
TASKS コマンド 459
SET FORCE_FETCH_TASKS コマン
ド 459
SET FORCE_HASHJOIN_ TASKS コ
マンド 459
SET FORCE_JOIN_TASKS コマンド
SET QUERY MMAP LIMIT コマン
SET UNIFORM PROBABILITY FOR
459
SET FORCE_SCAN_TASKS コマンド
ド 489
SET QUERY MMAP コマンド
SET USE INVALID PRECOMPUTED
ADVISOR コマンド
487
SET QUERY TEMPSPACE コマンド
459
SET FORCE_TARGETJOIN_TASKS
コマンド 459
SET IDLE TIMEOUT コマンド
461
SET IGNORE OPTICAL INDEXES
464
SET QUERYPROCS コマンド 491
SET REPORT_INTERVAL コマンド
492
コマンド 462, 463
SET INDEX TEMPSPACE コマンド
464
SET RESULT BUFFER FULL
ACTION コマンド 493
SET RESULT BUFFER コマンド
SET INFO MESSAGE LIMIT コマン
ド 467
SET LOCAL TARGET PREDICATES
493
SET ROWCOUNT コマンド 494
SET ROWS_PER_FETCH_TASK コマ
コマンド
513
ンド 497
SET LOCK コマンド 468
SET OLAP APPROXIMATE
NUMERIC コマンド 469
SET ROWS_PER_JOIN_TASK コマン
ド 497
SET ROWS_PER_SCAN_TASK コマ
SET OPTICAL AVAILABILITY コマ
ンド 470
SET ORDER BY コマンド
ンド 496
SET ROWS_PER_TARGETJOIN_
TASK コマンド 498
構文説明 472
NULL 評価 216
SET PARALLEL SET_OPERATION
コマンド 473
SET PARALLEL_HASHJOIN コマン
ド 475
SET PARTIAL AVAILABILITY コマ
ンド 476
SET PARTITIONED PARALLEL
AGGREGATION コマンド 477
SET PERFORMANCE MONITOR コ
マンド 478
SET PRECOMPUTED VIEW
MAINTENANCE ON ERROR コマ
ンド 481
SET PRECOMPUTED VIEW
MAINTENANCE コマンド 480
SET PRECOMPUTED VIEW QUERY
REWRITE コマンド 482
SET PREPLANS_HAVE_ONLY_
PKFK_JOINS コマンド 483
SET PRIORITY 句、ALTER
SYSTEM コマンド 277
SET QUERY MEMORY LIMIT コマ
ンド 486
522
VIEWS コマンド 523
SET VERSIONING コマンド
SET 句、UPDATE コマンド
SIGN 関数 82
SOME 数量述部
40
SQL OLAP 関数
125
SQL コマンド
ALTER DATABASE 232
ALTER INDEX 238
ALTER MACRO 241
ALTER ROLE 242
ALTER SEGMENT 243
ALTER SYNONYM
272
ALTER SYSTEM 273
ALTER TABLE 284, 351
ALTER USER 304
ALTER VIEW 306
CHECK INDEX 308
SET SAMPLE
参照: D コマンド
SET SAMPLE MARGIN コマンド
CHECK TABLE 311
CREATE HIERARCHY
CREATE INDEX 316
499
SET SEGMENTS コマンド
CREATE MACRO 335
CREATE ROLE 340
503
SET SERIAL START 指定、ALTER
COLUMN コマンド 295
SET SERIAL STEP 指定、ALTER
COLUMN コマンド 295
SET STAR INDEX AVAILABILITY
コマンド 504
SET STARJOIN THRESHOLD コマ
ンド 507
SET STATS コマンド
構文説明 511
例 511
SET TARGETJOIN LOCAL
PREDICATES コマンド 513
SET TARGETJOIN THRESHOLD コ
マンド 516
SET TEMPORARY SEGMENT
STORAGE PATH コマンド 520
SET TRANSACTION ISOLATION
LEVEL コマンド 521
525
435
313
CREATE SEGMENT 342
CREATE SYNONYM 345
CREATE TABLE 347, 351
CREATE TEMPORARY
TABLE 369
CREATE VIEW 372
DELETE 379
DROP HIERARCHY 384
DROP INDEX 385
DROP MACRO 388
DROP ROLE 389
DROP SEGMENT 390
DROP SYNONYM 391
DROP TABLE 392
DROP VIEW 394
EXPAND 395
EXPLAIN 396
EXPORT 397
GRANT CONNECT 412
GRANT (許可とロール) 407
索引
573
SQL コマンド (続き)
GRANT (特権)
INSERT 419
SUPPRESS BY 句 223
SWITCH ACCOUNTING FILE 句、
ALTER SYSTEM コマンド 279
416
LOCK (テーブルのロック)
REVOKE CONNECT
427
UNLOCK DATABASE 434
UNLOCK (テーブルのロック解
除) 433
UPDATE 435
SQL サーバの日付フォーマット
549
STAR インデックス
作成例 322
セグメント化 327
セグメントのアタッチ
SWITCH LOGGING 句、ALTER
SYSTEM コマンド 278
SEGMENT LIKE DATA
STARjoin クエリ処理
202
245
326
487
STAR インデックスの利用 504
STARjoin しきい値 507
START ACCOUNTING 句、ALTER
SYSTEM コマンド 279
START LOGGING 句、ALTER
SYSTEM コマンド 278
START、STOP ADVISOR LOGGING
句、ALTER SYSTEM コマンド
274
START、STOP PERFORMANCE
MONITOR 句、ALTER SYSTEM
コマンド 280
STOP ACCOUNTING 句、ALTER
SYSTEM コマンド 279
STOP LOGGING 句、ALTER
SYSTEM コマンド 278
STRING 関数 99
SUBSTR 関数 102, 104
SUM 関数 55
OLAP 145
SUMMING 句、BREAK BY 221
UNION、INTERSECT、EXCEPT 式
207, 214, 216
UNIQUE キーワード
セグメント範囲の指定
ドメイン サイズ 333
クス 317
UNLOCK DATABASE コマンド
327
CREATE INDEX コマンド
UNLOAD 操作 317
TARGETjoin クエリ処理
317
498
単一列 B-TREE インデックス
443
メモリ マッピング 487
ローカル述部 513
TARGETjoin しきい値 516
TEMPSPACE パラメータのリセット
466
TERMINATE LOGGING DAEMON
句、ALTER SYSTEM コマンド
279
TERTILE 関数 169, 177
THRESHOLD 値
構文 465
TIME 関数 118
TIMESTAMP 関数 119
TO_CHAR 関数 120
TRIM 関数 106
IBM Red Brick Warehouse: SQL リファレンス ガイド
543
構文一覧 543
構文説明 433
UPDATE コマンド
63
ドメイン、定義 317
ドメイン混在 333
変更 240
タスクあたりの行数
290
UNLOAD 操作、TARGET インデッ
構文説明 434
UNLOCK (テーブルのロック解除) コ
マンド
T
table expressions 194
target 値、DECODE 関数
351
ALTER TABLE コマンド
構文一覧
TARGET インデックス
作成 317
セグメントの変更 247
セグメント範囲の指定 328
利用 504
574
274
Sybase 式の構文、アウター ジョイン
214, 432
準備プラン 483
メモリ マッピング
SWITCH ADVISOR LOG FILE 句、
ALTER SYSTEM コマンド
429
REVOKE (許可とロール)
REVOKE (特権) 430
SELECT
424
U
値の代入
31
構文一覧
構文説明
使用方法
543
435
437
435
メモリ マッピング
例 438
UPDATE (特権) 416
487
UPPER 関数 107
USER 関数 123
USING サブ句、FROM 句中
192
V
VALUES 句、INSERT コマンド
420
W
WAIT キーワード、SET LOCK コマ
ンド 468
WHEN 句
説明 206
OLAP の例 137
RISQL 表示関数 220
WHERE 句 201
インナー ジョイン 202
条件 39
window_order 句、OLAP 136
WITH FILLFACTOR 句、CREATE
INDEX コマンド 332
WITHIN GROUP 句
142
X
XML フォーマット、エクスポート
401
[特殊文字]
*、検索項目リストでの省略 188
%、SQL ワイルドカード文字 44
_、SQL ワイルドカード文字
44
索引
575
576
IBM Red Brick Warehouse: SQL リファレンス ガイド
򔻐򗗠򙳰
Printed in Japan
SC88-9942-00
Fly UP