Comments
Transcript
IBM Red Brick Warehouse バージョン 6.2 年 9 月 2002
IBM Red Brick Warehouse バージョン 6.2 2002 年 9 月 Part No. 000-9054-8 注意 : 本書の情報および該当製品をご利用になる前に、付録「特記事項」の内容をお読みください。 本書には、IBM の著作権情報が含まれます。本書は、使用許諾契約に基づいて提供され、著作権法により 保護されます。本書の内容には、いかなる製品の明示的または黙示的保証も含まれません。 お客様が IBM に情報をお送りなる場合は、IBM に当該情報を自由に使用、頒布するための権利を許諾され たものとみなされます。IBM が当該情報を利用することにより、お客様に責任が及ぶことはありません。 © Copyright International Business Machines Corporation 1996, 2002. All rights reserved. 米国政府機関ユーザーの権利の制限 - IBM Corporation との間の GSA ADP Schedule Contract により、使用、複 製、および開示が制限されます。 ii SQL Reference Guide 目次 目次 まえがき この章について . . . . . まえがき . . . . . . . 対象読者 . . . . . . ソフトウェア要件 . . 本書の表記法 . . . . . . 文字の表記規則 . . . 構文の規則 . . . . . 構文ダイアグラム . . キーワードと区切り文字 識別子と名前 . . . . 文中記号の表記規則 . . 関連文献 . . . . . . . その他のドキュメント . . オンライン マニュアル . 印刷マニュアル . . . オンライン ヘルプ . . 第1章 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3 3 4 5 5 6 7 9 9 10 11 13 13 13 13 この章について . . . . . . . . . リレーショナル データベースのテーブル 複数ユーザとテーブル ロック . . テーブルのビュー . . . . . . インデックス . . . . . . . . プライマリ キーとフォーリン キー データベースの整合性 . . . . . 権限と特権 . . . . . . . . . システムカタログ . . . . . . IBM Red Brick Warehouse . . . . . . スキーマ設計 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-3 1-5 1-5 1-6 1-7 1-7 1-8 1-9 1-9 1-10 1-10 IBM Red Brick Warehouse の概要 意思決定支援向け関数および OLAP 関数 サブクエリによる比較 . . . . . . . マクロ . . . . . . . . . . . . セグメント単位の格納 . . . . . . . ローカライゼーション . . . . . . . Aroma データベース . . . . . . . 第2章 . . . . . . . . . . . . . . . . . . SQL Reference Guide . . . . . . . . . . . . . . . . . . 1-11 1-11 1-11 1-12 1-13 1-14 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-3 2-3 2-4 2-4 2-5 2-6 2-9 2-9 2-10 2-12 2-13 2-14 2-15 2-16 2-19 2-20 2-21 2-22 2-22 2-23 2-24 2-24 2-25 2-26 2-26 2-27 . . . . . . . . . . . . . . . . . . . . 3-3 3-4 3-4 3-5 式と条件 この章について 式 . . . . 単項式 . 多項式 . iv . . . . . . SQL 言語の各要素 この章について . . . . . . . . . . . . . . 名称と識別子 . . . . . . . . . . . . . . 標準識別子 . . . . . . . . . . . . . . 区切り識別子 . . . . . . . . . . . . . 大文字と小文字 . . . . . . . . . . . . エリアスと相関名 . . . . . . . . . . . 定数 . . . . . . . . . . . . . . . . . . 文字列定数 . . . . . . . . . . . . . . 日付時間定数 . . . . . . . . . . . . . 整数定数 . . . . . . . . . . . . . . 10 進数定数 . . . . . . . . . . . . . 浮動小数点定数 . . . . . . . . . . . . データ型 . . . . . . . . . . . . . . . . CHARACTER . . . . . . . . . . . . . DATETIME データ型 :DATE、TIME、TIMESTAMP INTEGER . . . . . . . . . . . . . . SERIAL . . . . . . . . . . . . . . . SMALLINT . . . . . . . . . . . . . TINYINT . . . . . . . . . . . . . . DECIMAL と NUMERIC . . . . . . . . . REAL . . . . . . . . . . . . . . . DOUBLE PRECISION と FLOAT . . . . . . 値の欠落と NULL 値 . . . . . . . . . . . . 列データの代入と比較 . . . . . . . . . . . 列データの代入 . . . . . . . . . . . . 比較 . . . . . . . . . . . . . . . . 第3章 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 多項式の評価 . 条件 . . . . . . 比較述部 . . . BETWEEN 述部 EXISTS 述部 . IN 述部 . . . IS NULL 述部 . LIKE 述部 . . 検索条件 . . . 第4章 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-3 . 4-4 . 4-5 . 4-7 . 4-9 . 4-10 . 4-11 この章について . . 条件付きスカラ関数 CASE . . . . COALESCE . . DECODE . . . IFNULL . . . NULLIF . . . 数値スカラ関数 . . ABS . . . . CEIL . . . . DEC . . . . EXP . . . . FLOAT . . . . FLOOR . . . INT . . . . . LN . . . . . REAL . . . . SIGN . . . . SQRT . . . . 統計関数マクロ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 集約関数 この章について . 一般的な使用方法 AVG . . . . . COUNT . . . . MAX . . . . . MIN . . . . . SUM . . . . . 第5章 3-7 3-10 3-11 3-12 3-13 3-14 3-15 3-16 3-17 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . スカラ関数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-3 . . . . 5-4 . . . . 5-4 . . . . 5-8 . . . . 5-9 . . . . 5-12 . . . . 5-13 . . . . 5-15 . . . . 5-16 . . . . 5-17 . . . . 5-19 . . . . 5-21 . . . . 5-22 . . . . 5-23 . . . . 5-25 . . . . 5-27 . . . . 5-28 . . . . 5-29 . . . . 5-30 . . . . 5-31 目次 v 文字列スカラ関数 . . . . . . . . . . . . . . . . . . CONCAT . . . . . . . . . . . . . . . . . . . LENGTH . . . . . . . . . . . . . . . . . . . LENGTHB . . . . . . . . . . . . . . . . . . . LOWER . . . . . . . . . . . . . . . . . . . . LTRIM . . . . . . . . . . . . . . . . . . . . POSITION . . . . . . . . . . . . . . . . . . . POSITIONB . . . . . . . . . . . . . . . . . . RTRIM . . . . . . . . . . . . . . . . . . . . STRING . . . . . . . . . . . . . . . . . . . . SUBSTR . . . . . . . . . . . . . . . . . . . . SUBSTRB . . . . . . . . . . . . . . . . . . . TRIM . . . . . . . . . . . . . . . . . . . . . UPPER . . . . . . . . . . . . . . . . . . . . 日付時間スカラ関数 . . . . . . . . . . . . . . . . . 日付時間スカラ関数の日付フィールド . . . . . . . . . CURRENT_DATE、CURRENT_TIME、CURRENT_TIMESTAMP DATE . . . . . . . . . . . . . . . . . . . . . DATEADD . . . . . . . . . . . . . . . . . . . DATEDIFF . . . . . . . . . . . . . . . . . . . DATENAME . . . . . . . . . . . . . . . . . . EXTRACT . . . . . . . . . . . . . . . . . . . TIME . . . . . . . . . . . . . . . . . . . . . TIMESTAMP . . . . . . . . . . . . . . . . . . TO_CHAR . . . . . . . . . . . . . . . . . . . CURRENT_USER 関数 . . . . . . . . . . . . . . . . 第6章 分析関数 この章について . . . . . . . . . . . . . . . . SQL OLAP 関数 . . . . . . . . . . . . . . . . OLAP 関数の種類 . . . . . . . . . . . . . OVER 句 . . . . . . . . . . . . . . . . OLAP 関数の使用に関する基本規則 . . . . . . . RANK、DENSE_RANK、NTILE の構文 . . . . . ROW_NUMBER および ROWNUMBER の構文 . . . AVG、COUNT、MIN、MAX、SUM の構文 . . . . RATIO_TO_REPORT および RATIOTOREPORT の構文 . RISQL 表示関数 . . . . . . . . . . . . . . . CUME . . . . . . . . . . . . . . . . . MOVINGAVG . . . . . . . . . . . . . . . vi SQL Reference Guide 5-34 5-35 5-36 5-38 5-39 5-40 5-42 5-44 5-45 5-47 5-50 5-52 5-54 5-56 5-58 5-58 5-60 5-61 5-62 5-63 5-64 5-66 5-68 5-69 5-70 5-73 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-3 6-4 6-5 6-7 6-15 6-16 6-22 6-24 6-44 6-47 6-48 6-52 MOVINGSUM . NTILE . . . . RANK . . . . RATIOTOREPORT TERTILE . . . 第7章 第8章 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-55 6-58 6-62 6-66 6-68 この章について . . . . . . . . . . . 結合および非結合クエリ式 . . . . . . . テーブル結合 . . . . . . . . . . . . 構文 . . . . . . . . . . . . . 限定結合 . . . . . . . . . . . . クロス結合 . . . . . . . . . . . テーブル参照 . . . . . . . . . . クエリ指定 . . . . . . . . . . . . . 検索項目リスト . . . . . . . . . FROM 句 . . . . . . . . . . . . サンプリング . . . . . . . . . . WHERE 句 . . . . . . . . . . . GROUP BY 句 . . . . . . . . . . HAVING 句 . . . . . . . . . . . WHEN 句 . . . . . . . . . . . . UNION、EXCEPT、INTERSECT 式 . . . . SELECT 文 . . . . . . . . . . . . . ORDER BY 句 . . . . . . . . . . SUPPRESS BY 句 . . . . . . . . . SELECT 文の処理方法 . . . . . . . サブクエリ . . . . . . . . . . . . . スカラ サブクエリとテーブル サブクエリ 相関サブクエリ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-3 7-4 7-7 7-7 7-7 7-12 7-13 7-16 7-17 7-22 7-28 7-36 7-39 7-41 7-43 7-45 7-54 7-55 7-66 7-68 7-69 7-69 7-72 クエリ式 SQL 文と RISQL 拡張機能 この章について . . . . . . . ALTER DATABASE . . . . . . ALTER INDEX . . . . . . . ALTER MACRO . . . . . . . ALTER ROLE . . . . . . . . ALTER SEGMENT . . . . . . ALTER SEGMENT - ATTACH 句 ALTER SEGMENT - その他の句 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-5 . . . . 8-6 . . . . 8-14 . . . . 8-17 . . . . 8-19 . . . . 8-20 . . . . 8-21 . . . . 8-30 目次 vii ALTER SYNONYM . . . . . . . . . ALTER SYSTEM . . . . . . . . . . ALTER TABLE . . . . . . . . . . . 列の削除 . . . . . . . . . . . 列の変更 . . . . . . . . . . . 制約の追加 . . . . . . . . . . . 制約の削除 . . . . . . . . . . . 制約の変更 . . . . . . . . . . . ALTER USER . . . . . . . . . . . ALTER VIEW . . . . . . . . . . . CHECK INDEX . . . . . . . . . . . CHECK TABLE . . . . . . . . . . . CREATE HIERARCHY . . . . . . . . CREATE INDEX . . . . . . . . . . インデックス指定 . . . . . . . . セグメント定義 . . . . . . . . . セグメント範囲指定 . . . . . . . WITH FILLFACTOR n . . . . . . . DOMAIN SIZE . . . . . . . . . CREATE MACRO . . . . . . . . . . CREATE ROLE . . . . . . . . . . . CREATE SEGMENT . . . . . . . . . CREATE SYNONYM . . . . . . . . . CREATE TABLE . . . . . . . . . . 列の定義 . . . . . . . . . . . プライマリ キー参照 . . . . . . . フォーリン キー参照 . . . . . . . プライマリ キーとフォーリン キー制約名 セグメント定義 . . . . . . . . . CREATE TEMPORARY TABLE . . . . . CREATE VIEW . . . . . . . . . . . DELETE . . . . . . . . . . . . . DROP HIERARCHY . . . . . . . . . DROP INDEX . . . . . . . . . . . DROP MACRO . . . . . . . . . . . DROP ROLE . . . . . . . . . . . . DROP SEGMENT . . . . . . . . . . DROP SYNONYM . . . . . . . . . . DROP TABLE . . . . . . . . . . . DROP VIEW . . . . . . . . . . . . viii SQL Reference Guide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-55 8-57 8-72 8-81 8-82 8-86 8-89 8-90 8-93 8-94 8-96 8-99 8-102 8-105 8-109 8-114 8-118 8-124 8-125 8-127 8-131 8-133 8-136 8-137 8-139 8-144 8-146 8-149 8-150 8-160 8-163 8-171 8-176 8-177 8-180 8-181 8-182 8-184 8-185 8-187 EXPAND . . . . . . . . . EXPLAIN . . . . . . . . . EXPORT . . . . . . . . . . GRANT ( 権限とロール ) . . . . GRANT CONNECT . . . . . . GRANT ( 特権 ) . . . . . . . INSERT . . . . . . . . . . LOCK ( テーブルのロック ) . . . LOCK DATABASE . . . . . . REVOKE ( 権限とロール ) . . . REVOKE CONNECT . . . . . REVOKE ( 特権 ) . . . . . . . SELECT . . . . . . . . . . UNLOCK ( テーブルのロック解除 ) UNLOCK DATABASE . . . . . UPDATE . . . . . . . . . . 第9章 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-188 8-189 8-190 8-201 8-207 8-211 8-214 8-221 8-222 8-224 8-226 8-227 8-229 8-229 8-230 8-231 この章について . . . . . . . . . . . . . SET ADVISOR LOGGING . . . . . . . . . . SET ADVISOR MAXIMUM CANDIDATE VIEWS . . SET ADVISOR SAMPLE SIZE . . . . . . . . SET ARITHIGNORE、ARITHABORT . . . . . . SET CHECK REPORT FILE PERMISSIONS . . . . SET CHECK_TABLE_INDEX_DIRECTORY . . . . SET COUNT RESULT . . . . . . . . . . . SET CROSS JOIN . . . . . . . . . . . . . SET DEFAULT DATA SEGMENT . . . . . . . SET DEFAULT INDEX SEGMENT . . . . . . . SET DEFAULT PSU EXTENDSIZE . . . . . . . SET DEFAULT SEGMENT SIZE . . . . . . . . SET EXPORT_DEFAULT_PATH . . . . . . . . SET EXPORT_DELIMITER . . . . . . . . . SET EXPORT_MAX_FILE_SIZE . . . . . . . SET FIRST DAYOFWEEK . . . . . . . . . . SET FORCE TASKS . . . . . . . . . . . . FORCE_SCAN_TASKS . . . . . . . . . FORCE_FETCH_TASKS と FORCE_JOIN_TASKS FORCE_TARGETJOIN_TASKS . . . . . . FORCE_HASHJOIN_TASKS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9-5 9-5 9-6 9-7 9-8 9-9 9-10 9-10 9-11 9-13 9-15 9-16 9-18 9-19 9-20 9-21 9-22 9-23 9-25 9-25 9-25 9-25 SET 文 目次 ix FORCE_AGGREGATION_TASKS . . . . . . . . . SET IDLE TIMEOUT . . . . . . . . . . . . . . . SET IGNORE OPTICAL INDEXES . . . . . . . . . . SET IGNORE PARTIAL INDEXES . . . . . . . . . . SET INDEX TEMPSPACE と SET QUERY TEMPSPACE . . . SET INFO MESSAGE LIMIT . . . . . . . . . . . . SET LOCK . . . . . . . . . . . . . . . . . . SET OLAP APPROXIMATE NUMERIC FAST COMPUTATION . SET OPTICAL AVAILABILITY . . . . . . . . . . . SET ORDER BY . . . . . . . . . . . . . . . . . SET PARALLEL SET_OPERATION . . . . . . . . . . SET PARALLEL_HASHJOIN . . . . . . . . . . . . SET PARTIAL AVAILABILITY . . . . . . . . . . . . SET PARTITIONED PARALLEL AGGREGATION . . . . . SET PERFORMANCE MONITOR . . . . . . . . . . . SET PRECOMPUTED VIEW MAINTENANCE . . . . . . SET PRECOMPUTED VIEW MAINTENANCE ON ERROR . . SET PRECOMPUTED VIEW QUERY REWRITE . . . . . . SET QUERY MEMORY LIMIT . . . . . . . . . . . . SET QUERYPROCS . . . . . . . . . . . . . . . SET REPORT_INTERVAL . . . . . . . . . . . . . SET RESULT BUFFER と SET RESULT BUFFER FULL ACTION SET ROWCOUNT . . . . . . . . . . . . . . . . SET ROWS_PER...TASK . . . . . . . . . . . . . . ROWS_PER_SCAN_TASK . . . . . . . . . . . ROWS_PER_FETCH_TASK と ROWS_PER_JOIN_TASK . ROWS_PER_TARGETJOIN_TASK . . . . . . . . . SET SAMPLE MARGIN . . . . . . . . . . . . . . SET SAMPLE SEED . . . . . . . . . . . . . . . SET SEGMENTS . . . . . . . . . . . . . . . . SET STATS . . . . . . . . . . . . . . . . . . SET TARGETJOIN LOCAL PREDICATES . . . . . . . . SET TEMPORARY SEGMENT STORAGE PATH . . . . . . SET TRANSACTION ISOLATION LEVEL . . . . . . . . SET UNIFORM PROBABILITY FOR ADVISOR . . . . . . SET USE INVALID PRECOMPUTED VIEWS . . . . . . . SET USE LATEST REVISION . . . . . . . . . . . . SET VERSIONING . . . . . . . . . . . . . . . . x SQL Reference Guide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9-25 9-26 9-27 9-28 9-29 9-33 9-34 9-35 9-36 9-38 9-39 9-40 9-41 9-43 9-44 9-46 9-47 9-48 9-49 9-50 9-51 9-52 9-53 9-54 9-55 9-55 9-56 9-57 9-59 9-61 9-62 9-64 9-67 9-68 9-69 9-70 9-71 9-72 付録 A 構文一覧 付録 B 予約語 付録 C 日付時間フォーマット 特記事項 索引 目次 xi まえがき まえがき この章について . . . . . . . . . . . . . . . . . . . 3 まえがき . . . . . 対象読者 . . . . ソフトウェア要件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3 4 本書の表記法 . . . . . 文字の表記規則 . . . 構文の規則 . . . . . 構文ダイアグラム . . . キーワードと区切り文字 識別子と名前 . . . . 文中記号の表記規則 . . コメント記号 . . . プラットフォーム記号 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 5 6 7 9 9 10 10 10 関連文献 . . . . . . . . . . . . . . . 11 . . . . . . . . 13 13 13 13 . . . . . . . その他のドキュメント . オンライン マニュアル 印刷マニュアル . . オンライン ヘルプ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 SQL Reference Guide この章について この章では、本書の概要と表記法について説明します。 まえがき このマニュアルは、IBM Red Brick Warehouse SQL の実装、およびウェアハウス デー タベース向けの RISQL 拡張機能に関する詳細な言語リファレンスです。 対象読者 本書では、以下のユーザを対象としています。 ■ ■ ■ ■ ■ ■ ■ ■ データベース ユーザ データベース管理者 データベース サーバ管理者 データベース アプリケーション プログラマー データベース設計者 データベース デザイナー データベース開発者 パフォーマンス エンジニア 本書では、読者が以下の経験や知識を持っていることを前提としています。 ■ ■ ■ ■ 使用しているコンピュータ、オペレーティング システム、およびオペレー ティング システムが提供するユーティリティに対する実務知識 リレーショナル データベースの使用経験、またはデータベースの概念に関 する知識 コンピュータ プログラミングの経験 データベース サーバ管理、オペレーティング システム管理、またはネッ トワーク管理の経験 まえがき 3 ソフトウェア要件 ソフトウェア要件 本書では、データベース サーバとして IBM Red Brick Warehouse、Version 6.2 を使用 することを前提としています。 IBM Red Brick Warehouse には、コーヒーと紅茶を取り扱う架空の会社の販売データ をおさめた Aroma というデータベースが添付されています。このデータベースで は、Aroma Coffee and Tea Company という企業の毎日の販売業務を管理しています。 このデータベースのディメンジョン モデルは、1 つのファクト テーブルと、それに 付属する複数のディメンジョン テーブルから成っています。 サンプル データベースの作成とデータのロードの詳細は、『Administrator's Guide』 を参照してください。データベースとそのデータ内容の詳細は、『SQL Self-Study Guide』を参照してください。 サンプル データベースのインストール スクリプトは <redbrick_dir>/sample_input ディレクトリにあります。<redbrick_dir> は、使用しているシステムの IBM Red Brick Warehouse ディレクトリをさします。 4 SQL Reference Guide 本書の表記法 本書の表記法 ここでは、このマニュアルで使用される、以下の表記規則について説明します。表 記規則を覚えておくと、このマニュアル、およびほかのマニュアルの内容を理解す るのに役立ちます。 以下のような表記規則があります。 ■ ■ ■ ■ ■ ■ 文字の表記規則 構文の規則 構文ダイアグラム キーワードと区切り文字 識別子と名前 文中記号の表記規則 文字の表記規則 このマニュアルは、新しい用語、画面表示、コマンド構文などを表記するのに、以 下の規則を使用します。 表記規則 意味 KEYWORD プログラミング言語の文中では、主要な要素 ( キーワード ) は、すべて大文字のセリフ フォントで表記されます。 Computer 製品の表示情報やユーザの入力情報はモノスペース フォント で表記されます。 ♦ この記号は、製品やプラットフォームなどに特有の情報の終 わりを表します。 ➞ この記号は、メニュー項目を表します。たとえば、"[ ツール ] ➞[ オプション ] を選択します。" は、[ ツール ] メニューの [ オプション ] を選択することを意味します。 ヒント : コマンドの入力、または実行の指示がある場合、入力後に ENTER キーを 押してください。コマンド以外の文字の入力やほかのキーを押す指示がある場合、 ENTER キーを押す必要はありません。 まえがき 5 構文の規則 構文の規則 このマニュアルでは、オペレーティング システム コマンドの構文の記述に以下の 表記規則を使用します。 コマンドの構成要素 例 表記規則 値および パラメータ <table_name> 適切な名前、値、式に置き換える項目は、 山形かっこ <> で囲んで表記します。 オプション項目 [ ] オプション項目は、角かっこで囲みます。 角かっこは入力しません。 選択肢 ONE |TWO 選択肢は縦線で区切ります。必要に応じ て、いずれか 1 つを選択できます。 必須選択肢 {ONE|TWO} 必須選択肢は、中かっこで囲みます。いず れか 1 つを選択してください。中かっこは 入力しません。 デフォルト値 ONE|TWO デフォルト値は、下線を付けて表記しま す。ただし、図の部分では、太字で表記し ます。 繰り返し項目 name, … 繰り返し可能な項目は、後にカンマと省略 記号を記述します。各項目は カンマで区切 ります。 記述記号 () , ; . 丸かっこ、カンマ、セミコロン、ピリオド は記述記号です。記述されているとおりに 使用してください。 6 SQL Reference Guide 構文ダイアグラム 構文ダイアグラム このマニュアルでは、以下の要素で作成されたダイアグラムを使用して、ステート メントの構文と、システム レベルのコマンド以外のすべてのコマンドを記述しま す。 構成要素 意味 ステートメントの開始。 ステートメントの構文は次の行に続きます。完全 なステートメント以外の構文要素はこの記号で終 了します。 ステートメントは前の行から続いています。完全 なステートメント以外の構文要素はこの記号で始 まります。 ステートメントの終了。 SELECT ステートメントの必須項目。 オプション項目。 DISTINCT DBA TO CONNECT TO 選択を含む必須項目。1 つの項目が存在する必要 があります。 SELECT ON ASC 選択を含むオプション項目。デフォルト値が存在 する場合、太字で印刷されます。 DESC , オプション項目。複数項目が可能です。繰り返す 項目の前にカンマが必要です。 ASC DESC まえがき 7 構文ダイアグラム 先行する構文要素は、以下のように組み合わされてダイアグラムを形成します。 REORG <table_name> , INDEX ( <index_name> ) ; ON OPTIMIZE RECALCULATE RANGES OFF 以下のように複雑な構文ダイアグラムは、要素の詳細なダイアグラムのポイント参 照用として繰り返されます。ポイント参照ダイアグラムは、影を付けて角を囲み、 グレーの線と小さい文字で表します。 LOAD <INPUT_CLAUSE> DATA <optimize_clause> <FORMAT_CLAUSE> <TABLE_CLAUSE> <segment_clause> ’<DISCARD_CLAUSE>’ ; <criteria_clause> <comment_clause> ポイント参照ダイアグラムの後に、影付き部分の拡大ダイアグラム ( この場合は INPUT_CLAUSE) が続きます。 INPUTFILE filename INDDN ( START RECORD 8 SQL Reference Guide '<FILENAME> ' <START_ROW> <START_ROW ) TAPE DEVICE STOP RECORD '<DEVICE_NAME>' <stop_row> キーワードと区切り文字 キーワードと区切り文字 キーワードとは、ステートメントおよびコマンド ( システム レベルのコマンドを除 く ) で使用するために予約された単語のことです。構文ダイアグラムでは、キー ワードが大文字で表記されます。ユーザが実際にキーワードを記述する場合は、大 文字 / 小文字のどちらを使用してもかまいません。ただし、スペルは構文ダイアグ ラムに表記されるとおりでなければなりません。 構文ダイアグラム内の区切り文字も、ダイアグラムに示されているとおりにステー トメントとコマンドの中に入れる必要があります。 識別子と名前 構文ダイアグラムおよび例の中の変数は、識別子および名前に対するプレースホル ダです。変数は、文脈に応じて任意の名前、識別子、またはリテラルに置き換える ことができます。変数は、追加の構文ダイアグラムで拡大される複雑な構文要素を 表すためにも使用されます。変数は、構文ダイアグラム、例、テキストでは、< > (山形かっこ)で表記されますす。 以下に示す構文ダイアグラムでは、変数を使用して簡単な SELECT 文の一般的な フォームを説明しています。 SELECT <column_name> FROM <table_name> このフォームの SELECT 文を書き込む場合、変数の <column_name> と <table_name> を特定の列とテーブルに置き換えます まえがき 9 文中記号の表記規則 文中記号の表記規則 マニュアル内では、数種類の記号によってその内容が区別されるテキストがありま す。この節では、これらの記号について説明します。 コメント記号 コメント記号によって区別される情報には、次の表に示す 3 種類があります。 記号 ラベル 説明 警告 : 必須の情報、注意、重要な情報が含まれています。 重要 : 現在説明されている手順または機能に関する重要な 情報が含まれています。 ヒント : 現在説明されている機能に関する、詳細または ショートカットなどの追加情報が含まれます。 プラットフォーム記号 機能記号、製品記号、およびプラットフォーム記号、特定のプラットフォームに関 する情報を意味します。 記号 説明 UNIX Windows 10 SQL Reference Guide UNIX と Linux オペレーティング システムにのみ関連のあ る情報を意味します。 Windows プラットフォームにのみ関連のある情報を意味 します。 関連文献 これらの記号は、節全体に適用される場合と、節内の一部の段落にのみ適用される 場合があります。記号が節見出しの隣に付いている場合、その機能、製品、または プラットフォーム固有の情報の範囲は、同じレベルまたは上位レベルの節が現れる 直前までです。◆ 記号は、機能、製品、またはプラットフォーム固有の情報が節内 の一部のパラグラフにのみ記述されている場合に、その固有情報の範囲の末尾を表 します。 関連文献 IBM Red Brick Warehouse のマニュアルには、次の文書が含まれています。 マニュアル 説明 『Administrator's Guide』 ウェアハウスのアーキテクチャやサポートされる スキーマなど、データべースに関連した基本概念 のマニュアルです。データべースのインプリメン トや保守の手順について説明しています。システ ム テーブルとコンフィグレーション ファイルの説 明も含まれています。 『Client Installation and Connectivity Guide』 ODBC、Red Brick JDBC Driver、RISQL エントリ ツール、RISQL レポータ をクライアント システム にインストールして構成するためのガイドです。C および C++ アプリケーション用 ODBC 製品と Java アプリケーション用 JDBC 製品を使用して、IBM Red Brick Warehouse にアクセスする方法を説明し ています。 『IBM Red Brick Vista User’s Guide』 IBM Red Brick Vista の集約計算とマネジメントのシ ステムについて説明しています。集約を使用して クエリを自動的にリライトすることによって Vista クエリ パフォーマンスを向上させる方法、毎日集 められるデータをもとに最高の集約セットを作る よう推奨すること、詳細テーブルが更新されると きに集約テーブルがどのように保守されるかを説 明しています。 『Installation and Configuration Guide』 IBM Red Brick Warehouse のインストールと環境設 定に関する説明書と、プラットフォーム別マニュ アルです。UNIX および Linux ベースのシステム用 と、Windows ベースのシステム用があります。 (1/2) まえがき 11 関連文献 マニュアル 説明 『Messages and Codes Reference Guide』 IBM Red Brick Warehouse 製品が出力するすべての 状態情報、警告、エラー メッセージとその考えら れる原因、対処方法が示されています。ログ ファ イルに書き込まれるイベント ログ メッセージも記 述されています。 『Query Performance Guide』 クエリ パフォーマンスの決定要因と、最適なクエ リ パフォーマンスを得るためのデータベースの チューニング方法について説明しています。Red Brick ツール (SET STATS、Dynamic Statistic Tables : 動的統計テーブル、EXPLAIN、および Query Performance Monitor) を使用してクエリ パフォーマ ンスを評価する方法についても、例を挙げて説明 しています。 『リリースノート』 マニュアルの印刷後に判明した現リリースに関す る情報が含まれます。 『RISQL Entry Tool and RISQL Reporter User's Guide』 SQL 文の入力に使用するコマンドライン ツールで ある RISQL エントリ ツール と、RISQL エントリ ツール にレポートのフォーマット設定機能を付加 した RISQL エントリ ツール の詳細なガイドです。 このマニュアル Red Brick SQL のインプリメントと RISQL (IBM Red Brick Warehouse データベースのための拡張機能 ) に 関する詳細な言語リファレンスです。 『SQL Self-Study Guide』 例題に基づいて SQL を復習し、RISQL 拡張機能、 マクロ関数、Aroma のサンプル データベースを紹 介します。 『Table Management Utility Reference Guide』 データのロード、管理、バックアップに関連した 機能をまとめた、Table Management Utility について 説明しています。データのコピーと rb_cm コピー 管理ユーティリティについても説明しています。 (2/2) このほか、以下の書籍やマニュアルも役に立つ場合があります。 ■ ■ ■ 12 SQL Reference Guide SQL の入門書 リレーショナル データベースの入門書 ご使用のハードウェア プラットフォームとオペレーティング システムの マニュアル その他のドキュメント その他のドキュメント 上記以外の情報は、以下のマニュアルを参照してください。 ■ ■ ■ オンライン マニュアル 印刷版マニュアル オンライン ヘルプ オンライン マニュアル Red Brick 製品には、各種の IBM Red Brick Warehouse マニュアルを電子フォーマット で収録した CD-ROM が同梱されています。収録されているマニュアルは、システム にインストールして使用することも、CD-ROM から直接アクセスすることも可能で す。 印刷マニュアル 印刷マニュアルを注文する場合は、担当販売員までご連絡ください。 オンライン ヘルプ IBM はグラフィカル ユーザ インタフェース (GUI) を用いたオンライン ヘルプを提 供します。これにより、各インタフェースや実行する関数についての情報を参照す ることができます。オンライン ヘルプを表示するには、GUI のヘルプ機能を利用し てください。 まえがき 13 第1章 の 概要 この章について . . . . . . . . . . . . . . . . . . . . 1-3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-5 1-5 1-6 1-7 1-7 1-8 1-9 1-9 IBM Red Brick Warehouse . . . . . . . . スキーマ設計 . . . . . . . . . . 意思決定支援向け関数および OLAP 関数 サブクエリによる比較 . . . . . . . マクロ . . . . . . . . . . . . . セグメント単位の格納 . . . . . . . ローカライゼーション . . . . . . . Aroma データベース . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-10 1-10 1-11 1-11 1-11 1-12 1-13 1-14 リレーショナル データベースのテーブル 複数ユーザとテーブル ロック . . テーブルのビュー . . . . . . . インデックス . . . . . . . . プライマリ キーとフォーリン キー . データベースの整合性 . . . . . 権限と特権 . . . . . . . . . システムカタログ . . . . . . . 1-2 SQL Reference Guide この章について IBM Red Brick Warehouse は、データ ウェアハウス、データマート、オンライン分析 処理 (OLAP) アプリケーションを対象としたリレーショナル データベース管理シス テム (RDBMS) です。オンライン トランザクション処理 (OLTP) やユニバーサル データベース製品と比べ、IBM Red Brick Warehouse はクエリの処理やデータのロー ドが効率的で管理しやすく、数 GB から数 TB、数人のユーザから何千人ものユーザ まで、広範囲のアプリケーションに対応する機能を備えています。 IBM Red Brick Warehouse は、ワークグループから全社的スケールまで対応し、標準 オープン データベース コネクティビティ (ODBC および JDBC) を使用するオープン クライアント / サーバ環境向けに設計され、標準 SQL でアクセスします。サーバで は OLAP 機能と RISQL 拡張機能が統合され、順位付けや比率計算などの一般的なビ ジネス計算を必要とする分析を簡略化し、Vista, STARjoin、STAR index、 TARGETjoin、TARGET index の各技術は、多彩なスキーマ設計の超大型データベー スに対する特別なクエリや分析について、優れた性能を提供します。分析的なクエ リを数多く実行し、必要な情報をすぐに得られるため、ビジネス上の決定を迅速か つ的確に下すことができます。 IBM Red Brick Warehouse の概要 1-3 この章では IBM Red Brick Warehouse の概要を示します。この章は次のセクションで 構成されています。 ■ ■ 1-4 SQL Reference Guide リレーショナル データベースのテーブル ❑ 複数ユーザとテーブル ロック ❑ テーブルのビュー ❑ インデックス ❑ プライマリ キーとフォーリン キー ❑ データベースの整合性 ❑ 権限と特権 ❑ システムカタログ IBM Red Brick Warehouse ❑ スキーマ設計 ❑ 意思決定支援向け関数および OLAP 関数 ❑ サブクエリによる比較 ❑ マクロ ❑ セグメント単位の格納 ❑ ローカライゼーション ❑ Aroma データベース リレーショナル データベースのテーブル リレーショナル データベースのテーブル リレーショナル データベースは、次の特性を持つテーブルの集合です。 ■ ■ ■ ■ ■ ■ ■ テーブルは、列と行で構成されます。 列は、データ型が同じである値の集合です。たとえば、文字データ型の列 は文字列を格納し、整数データ型の列は整数を格納します。 行は、行の n 番目の値が、テーブルの n 番目の列に対応するように配列さ れた値のシーケンスです。 通常、各行はプライマリ キーと呼ばれる一意な値によって識別されます ( 一般には使用されないが、プライマリ キー列を持たないテーブルの作成 も可能 )。 基本テーブルは、CREATE TABLE 文を使って作成したテーブルです。基本 テーブルは、DROP TABLE 文で削除するまでデータベースに存在します。 リザルト テーブルは、SELECT 文から結果として返されるテーブルです。 テンポラリ テーブルは、それ自身が作成されたセッションの間だけアクセ スできるテーブルです。テンポラリ テーブルは、セッション中だけ、また は DROP TABLE 文で削除するまでデータベースに存在します。 意思決定支援データベースの分野ではデータベースのテーブルをファクト テーブル またはディメンジョン テーブルと呼ぶこともあります。ファクト テーブルは、売 上、販売個数、比率などの加算可能な数値データを格納し、ディメンジョン テーブ ルは都市名、製品名、商標、ブランド、期間などの記述的なデータを格納します。 ファクト テーブルとディメンジョン テーブルの内容が異なるのは、スキーマ設計 上の問題であり、テーブルの作成やクエリの処理には影響がありません。IBM Red Brick Warehouse ソフトウェアを使ってテーブルを作成する場合は、テーブルのタイ プは 1 つであり、ファクト テーブルとディメンジョン テーブルのデータに対する制 約はありません。本書ではほとんどの場合、ファクト テーブルの代わりに参照元 テーブル、ディメンジョン テーブルの代わりに参照先テーブルという用語を使いま す。これによって、プライマリ キー / フォーリン キー関係で結合できるテーブルの 間の論理関係において、テーブル タイプの参照関係をはっきりと区別できます。 スキーマ設計の詳細は、『Administrator's Guide』を参照してください。 複数ユーザとテーブル ロック 複数ユーザ向けシステムでは、複数のユーザが 1 つのテーブルに同時にアクセスす ることができます。テーブルの更新を同時に行うことが許可されると、テーブルが 破壊されることがあります。テーブルが破壊されるのを防ぎ、データの整合性を維 持するため、更新されるテーブルへのアクセスはデータベース サーバが自動的に制 御します。 IBM Red Brick Warehouse の概要 1-5 テーブルのビュー データベース サーバによるアクセスの制御は、テーブルのロックによって行われま す。テーブルの更新後は、ロックが自動的に解除されます。テーブルを更新する操 作を行うと、ほかのユーザを待たせることになり、検索の所要時間が予想より長く なる場合があります。 テーブルを更改するときに、データベース サーバは更新と読み取りの並行アクセス を許可します。 適切なアクセス権を持つユーザは、テーブルを明示的にロックし、他のユーザのア クセスを制御することもできます。 テーブルのビュー ビューとは、CREATE VIEW 文を使って任意の数の基本テーブルに設定する仮想 テーブルです。テーブルと同様に、ビューも列と行で構成されます。FROM 句で参 照したり、相関名を与えたり、特定のアクセス権を割り当てることができます。た だし、基本テーブルと無関係に、単独で存在することはできません。 一般に、ビューは次の目的に使用します。 ■ ■ ■ テーブルの一部アクセス制限。たとえば、東部地域の売上だけに限定した ビューと、西部地域の売上だけに限定したビューを定義することができま す。 データの簡略化。たとえば、ニューヨークで販売した製品について、1992 年第 1 四半期と第 2 四半期の売上を抽出する場合は、複数のテーブルを参 照する複雑なクエリが必要になります。ビューを設定すれば、必要なデー タを 1 つのテーブルにまとめることができます。 異なる視点からのデータ分析。たとえば、特定の地区、地域と様々な計算 結果を表す列をビューとして定義することができます。 事前計算ビューは、事前計算テーブルという物理データベース テーブルにリンクす る特別なタイプのビューです。このビューはクエリを定義し、テーブルにはそのク エリの事前計算リザルトが格納されます。事前計算ビューは、集約クエリを書き換 えてクエリ性能を最適化します。クエリ リライトの詳細は、『IBM Red Brick Vista User’s Guide』を参照してください。 1-6 SQL Reference Guide インデックス インデックス CREATE TABLE 文を使って新規に基本テーブルを作成すると、テーブルのプライ マリ キー列に B-TREE インデックスが自動的に作成されます。 CREATE INDEX 文を使ってインデックスを列や列のグループに追加すると、テーブ ル全体のデータを高速にアクセスできるようになります。使用できるインデックス のタイプは、次のとおりです。 ■ ■ ■ B-TREE。デフォルトです。 STAR。テーブル結合を高速化します。STAR インデックスは、フォーリン キーが設定されている任意の基本テーブルに作成できます。 TARGET。選択性の低い制約を扱うクエリを高速に処理するためのビット ベクトル インデックスです。TARGET インデックスは、一意でない 1 つの 列に設定できます。TARGET インデックスは、TARGETjoin 処理を有効に することもできます。 プライマリ キーとフォーリン キー 通常、データベース テーブルには、各行を一意に識別するプライマリ キーが設定 されています。プライマリ キーは、1 つの列の値でも、複数列の値を組み合わせた ものでもかまいません。 IBM Red Brick Warehouse データベースの基本テーブルには、複数列のプライマリ キーを設定できます。テーブルの作成時にプライマリ キーとして指定する 1 つまた は複数の列は、次の条件を満たしている必要があります。 ■ ■ テーブルの各行に対応する値を格納していること。つまり、NOT NULL と 指定する必要があります。 各行について、キーの値 ( または値の組み合わせ ) が一意であること。 意味のある値で構成されるプライマリ キーの例としては、車体番号、従業員 ID 番 号、社会保険番号などがあります。意味のある値で構成せず、単に一意の数字列や 文字列のプライマリ キーも多くあります。 フォーリン キー列は、ほかのテーブルのプライマリ キー列の値を格納します。 フォーリン キー列の値は、2 つのテーブルの関係を確立するものです。ほかのテー ブルの 1 つまたは複数の行を参照します。 プライマリ キー列と異なり、フォーリン キー列には次の例に示すように重複値を 格納することができます。 IBM Red Brick Warehouse の概要 1-7 データベースの整合性 例 右のテーブルには、左のテーブルを参照するフォーリン キーが含まれています。 図 1-1 フォーリン キー参照 reg_pk ------1 2 3 4 5 6 region -----------South North Central South Central South West US state_pk -------1 2 3 4 5 6 7 8 0 state foreign_k --------- --------Florida 1 Georgia 1 Alabama 1 Mississippi 1 Louisiana 1 Chicago 3 Illinois 3 Minnesota 3 Total US 6 IBM Red Brick Warehouse は、多様なスキーマ作成のデータベースを管理できるよう に設計されているため、テーブル間の関係を柔軟に設定できます。どのテーブルも ほかのテーブルのフォーリン キーで参照でき、複数の列からなるプライマリ キー を設定することもできます。結合がクエリに明示され、結合する列が比較可能な データ型であれば、各テーブルを結ぶ結合パスが複数あっても問題ありません。 データベースの整合性 リレーショナル データベースは、次の 2 種類の整合性規則に従う必要があります。 ■ ■ エンティティの整合性 : 各テーブルのプライマリ キー列の値は、一意であ る必要があります。 参照の整合性 : フォーリン キー列の値は、参照先テーブルのプライマリ キーに存在するものである必要があります。 Table Management Utility (TMU) は、データベースをロードする際に、これらの整合 性を確認します。さらに、INSERT、UPDATE、DELETE 文でデータベースを更新す る際にはカスケード ロックと削除動作によって整合性を保証します。 パラレル TMU を使用する場合は、データのロードと並行して参照の整合性が確認 され、ロード全体の効率が向上します。 データベースのロードは、『Table Management Utility Reference Guide』を参照してく ださい。 1-8 SQL Reference Guide 権限と特権 権限と特権 SQL ( 構造化問い合わせ言語 ) 文を実行するユーザは、必要な権限を持っている必 要があります。権限は、システム ロール、タスク権限、オブジェクト特権によって 制御されます。 ■ ■ データベース ユーザには、特定のシステム ロール (CONNECT、 RESOURCE、DBA) が割り当てられます。システム ロールを与えられたメ ンバーは、そのロールに設定された作業を実行できます。データベース ユーザに個別のタスク権限を割り当てることもできます。 テーブルは、特定のデータベース ユーザに許可または禁止されるオブジェ クト特権 (SELECT、INSERT、UPDATE、DELETE) によって保護されます。 前述のシステム ロールとオブジェクト特権の付与と取消しは、それぞれ GRANT 文 と REVOKE 文によって行います。 システムカタログ データベース サーバは、システム カタログと呼ばれるシステム テーブルの集合を 管理しています。システム カタログには、データベースに存在する全データと、 データベースの管理および保護に必要なコントロール情報が設定されています。こ のシステム テーブルは、必要なアクセス権を持ったユーザが SELECT 文を用いて参 照することができます。詳細は、『Administrator's Guide』を参照してください。 IBM Red Brick Warehouse の概要 1-9 IBM Red Brick Warehouse IBM Red Brick Warehouse IBM Red Brick Warehouse は、意思決定支援アプリケーションの質と性能を向上させ るための情報システム (IS) 向けクライアント / サーバ型 RDBMS です。IBM Red Brick Warehouse は、次の基本技術に基づいて優れた性能を実現しています。 ■ ■ ■ ■ ■ ■ ■ データベース情報の検索を高速化するインデックス技法と結合技法 順次演算と OLAP 分析を効率化する意思決定支援向け関数 複数の値を効率的に比較できるスカラ サブクエリ 複雑なクエリを汎用化し、簡略化するマクロ コマンド 大型テーブルを可能にし、データの可用性を高めるセグメント単位の格納 管理とアクセスが容易なわかりやすいデータベース構造 集約クエリの性能を高速化するクエリ リライト技術 スキーマ設計 スキーマとは、データベースの構造の定義です。つまり、テーブル、テーブルの 列、プライマリ キー、フォーリン キーの関係を定義するものです。更新処理に注 目したスキーマの設計と最適化を行うと、検索の効率が低下します。逆に、検索に 注目してスキーマを最適化すると、更新の効率が損なわれます。データウェアハウ スのスキーマは、検索に注目して設計され、最適化されます。 たとえば、スター スキーマは、エンド ユーザによるデータのディメンジョン分析 を目的として設計されています。スター スキーマのテーブルは、ビジネスの各次元 を反映する記述的データであるディメンジョン データを格納するか、ビジネスの進 行状況を記録する数値データを中心としたファクトを格納するのが一般的です。 データ抽出の高速化には、プライマリ キーおよびフォーリン キーに設定したイン デックスも役立ちます。 IBM Red Brick Warehouse データベースは、スター スキーマの多様な発展形態に対応 する柔軟性を持ち、一般的なスター スキーマの形態では表現できない変則的なス キーマへのクエリも処理することができます。スター スキーマに基づく設計はクエ リ処理の性能を最適化する効果がありますが、設計できるスキーマの種類に制限は ありません。 1-10 SQL Reference Guide 意思決定支援向け関数および OLAP 関数 意思決定支援向け関数および OLAP 関数 IBM Red Brick Warehouse は、Red Brick サーバ専用に開発された独自の RISQL 表示 関数と、ANSI SQL-99 標準に準拠しそれを拡張した一連の SQL OLAP 関数の、2 種 類の分析関数をサポートします。また、Red Brick サーバは ANSI SQL-99 標準の Elementary OLAP パッケージで定義されているすべての関数をサポートします。 OLAP 関数は、RISQL 関数の機能を踏襲し、拡張したもので、RISQL 関数よりもさ らに汎用的な、一連の分析機能を提供します。RISQL 表示関数はすべて、OLAP 構 文または独自の形式で表すことができます。 たとえば、これらの関数では次の計算を行うことができます。 ■ ■ ■ ■ ■ ■ 累積合計 移動平均 移動合計 順位付け 4 分位や 100 分位など、値の範囲を任意の数のグループに等分したレベル 分け 比率 サブクエリによる比較 クエリの検索項目リストにサブクエリまたは CASE 式を使うか、FROM 句でサブク エリを使うと、データを比較するクエリを簡略化することができます。たとえば、 次のような比較を行うことができます。 ■ ■ ■ 今月の売上と過去 6 カ月間の売上 今年の売上と昨年および一昨年の売上 西部を東部、南部、中西部と比較した売上 比較の結果は、見やすいスプレッドシート形式で表示できます。このような表示関 数をサポートしない SQL では、こうした日常的な比較を行うことが非常に難しく、 結果も読みにくいものになります。 マクロ CREATE MACRO 文を使うと、指定した文字列を略記するマクロを定義することが できます。SQL 文の中にマクロ名があると、データベース サーバはそのマクロ名を 対応する文字列に置き換えます。 IBM Red Brick Warehouse の概要 1-11 セグメント単位の格納 不定な文字列を使ったマクロも作成できます。その場合は、複数のパラメータを含 む文字列として指定します。たとえば、次のマクロを作成し、複雑な条件を略記で きます。 sales(mon, day, yr) このマクロをクエリに使用する場合は、次のように特定の月、日、年に置き換えま す。 sales(12, 25, 2000) この文字列がマクロ定義に置き換えられると、月、日、年にそれぞれ 12、25、2000 が代入されます。このようなパラメータ型マクロは、ユーザにも使いやすく、再利 用可能な汎用クエリになります。 セグメント単位の格納 データベースのテーブルおよびインデックスは、デフォルト セグメントに格納する か、またはデータベース管理者が明示的に設定した任意の数のセグメントに格納す ることができます。セグメントとは、CREATE SEGMENT 文で定義したファイルの 集合です。作成したセグメントには、1 つのテーブルのデータまたは 1 つのテーブ ルのインデックスを格納することができます。 セグメントを利用すると、大規模データベースの管理が容易になります。データ ベースの性能が向上し、1 つのファイルに格納しきれない大容量のテーブルをサ ポートできるようになります。複数のセグメントに 1 つのテーブルやインデックス を格納し、セグメント レベルでテーブルやインデックスを管理できるようになりま す。データ行とインデックス エントリは同じようにセグメント化でき、定期的な データベースのメンテナンスを効率よく行うことができます。 1-12 SQL Reference Guide ローカライゼーション ローカライゼーション IBM Red Brick Warehouse は、ロケールにかかわらず、すべての機能を提供します。 データベース サーバのロケールを設定した後は、次を行うことができます。 ■ ■ ■ ■ ■ ■ シングルバイトまたはマルチバイトの文字セットのロード、格納、イン デックス付け、クエリの実行 サポートされている言語のエラー メッセージ、警告メッセージ、通知メッ セージの表示 テーブル、列、インデックス、セグメント、ロール、ユーザなどのデータ ベース オブジェクトに対し、シングルバイトまたはマルチバイトの名称を 付ける SQL の制約および分析関数がロケールに設定された照合シーケンスでソー トし、設定されたロケールに基づく結果を返す ローカライズ フォーマットによる数値、日付、時間のデータのロード ローカライズ データに日付時間と文字列のスカラ関数を実行する データベース サーバ ロケールの設定の詳細は、『Installation and Configuration Guide』 を参照してください。 IBM Red Brick Warehouse の概要 1-13 Aroma データベース Aroma データベース 本書の例では、Aroma 基本データベースのデータを主に使用しています。このデー タベースは、Aroma Coffee and Tea Company という企業の毎日の販売業務を管理して います。販売スキーマは、4 つの主要ディメンジョン テーブル (Period : 会計期間、 Product : 製品、Store : 店舗、Promotion : 販売促進活動 )、ファクト テーブル (Sales)、2 つのアウトボード テーブル (Class、Market) で構成されます。図 1-2 は、 この基本スキーマを示したものです。 図 1-2 Aroma データベース スキーマ Sales Class Product classkey class_type class_desc classkey prodkey prod_name pkg_type Store storekey mktkey store_type store_name street city state zip Market mktkey hq_city hq_state district region perkey classkey prodkey storekey promokey quantity dollars Period perkey date day week month qtr year Promotion promokey promo_type promo_desc value start_date end_date 本書の例には、Aroma Company から仕入先への注文情報を格納した仕入れスキーマ を使用するものもあります。Aroma データベースの詳細は、『SQL Self-Study Guide』 を参照してください。 1-14 SQL Reference Guide 第2章 言語の各要素 この章について . . . . . . . . . . . . . . . . . . . . 2-3 2-3 2-4 2-4 2-5 2-6 名称と識別子 . . 標準識別子 . . 区切り識別子 . 大文字と小文字 エリアスと相関名 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 定数 . . . . . . 文字列定数 . . 日付時間定数 . 整数定数 . . . 10 進数定数 . . 浮動小数点定数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-9 2-9 2-10 2-12 2-13 2-14 データ型 . . . . . . . . . . . . . . . . CHARACTER . . . . . . . . . . . . . DATETIME データ型 :DATE、TIME、TIMESTAMP INTEGER . . . . . . . . . . . . . . . SERIAL . . . . . . . . . . . . . . . SMALLINT . . . . . . . . . . . . . . TINYINT . . . . . . . . . . . . . . . DECIMAL と NUMERIC . . . . . . . . . REAL . . . . . . . . . . . . . . . . DOUBLE PRECISION と FLOAT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-15 2-16 2-19 2-20 2-21 2-22 2-22 2-23 2-24 2-24 値の欠落と NULL 値 . . . . . . . . . . . . . . . . . . 2-25 列データの代入と比較 列データの代入 . 比較 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-26 2-26 2-27 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-2 SQL Reference Guide この章について SQL 文は、精巧に設計された SQL 言語の各要素を組み合わせ、基本的な文法に 従って作成されます。この章では、SQL 言語の各要素と文法について説明します。 ■ ■ ■ ■ ■ 名称と識別子 定数 データ型 値の欠落と NULL 値 列データの代入と比較 名称と識別子 名称とは、データベース オブジェクト、データベース ユーザ、パスワードを識別 するものです。名称と識別子は同義です。 データベース オブジェクト名は、シングルバイトあるいはマルチバイト文字のどち らでも指定できます。この柔軟性により、次のオブジェクトについて、自国語でわ かりやすい名称を設定することができます。 ■ ■ ■ ■ ■ ■ テーブル、テーブル列、ビュー、シノニム インデックス セグメント マクロ ロール データベース ユーザ名 データベース ユーザ名を除き、オペレーティング システムからも使用される名称 には、マルチバイト文字は使用できません。したがって、パスワードおよびファイ ル名には、サーバ ロケールにかかわらず、シングルバイト文字しか使用できませ ん。 データベース ロケールに指定されたコード セットのサブセットとして、シングル バイト文字が含まれている場合は、シングルバイト文字とマルチバイト文字の両方 を含むオブジェクト名を作成できます。 SQL 言語の各要素 2-3 標準識別子 標準識別子 SQL 文で使用する名前は、次の規則に従っている必要があります。 ■ ■ ■ ■ ■ 文字 ( 英語では A ∼ Z と a ∼ z)、桁 (0 ∼ 9)、あるいは半角の ASCII アンダー スコア (_) のみで構成されていること。マルチバイトの下線記号文字は、 構文エラーとなる アルファベット文字で始まること 1 バイト以上、128 バイト以下であること 引用符およびスペースを含まないこと 予約語 ( 付録 B「予約語」参照 ) でないこと これらの規則に従わない識別子の使用の詳細は、2-4 ページ「区切り識別子」を参 照してください。 次にデータベース識別子の例を示します。 識別子 データベース オブジェ クト product テーブル名 dollars 列名 top_25_brands 列名 区切り識別子 IBM Red Brick Warehouse は、ANSI SQL-92 に準拠した区切り識別子として、文字列 を囲む二重引用符 (") をサポートします。これにより、どんな文字列を含む識別子 の作成も可能になります。二重引用符は、2-4 ページ「標準識別子」で説明した規 則に従わない識別子を定義する場合に必要です。二重引用符 (") を含む識別子を作 成するには、その二重引用符の前にさらに二重引用符を付けます。 リテラルの最初と最後をマークするのに二重引用符を用いるアプリケーションを使 用する場合は、二重引用符を一重引用符で置き換える必要があります。 2-4 SQL Reference Guide 大文字と小文字 例 次の表は、区切り識別子の構文、区切り識別子の出力結果、および二重引用符が必 要な理由の簡単な説明を例示します。 SQL 構文 結果 説明 "table" table TABLE は予約語であるため、その名前の識別子は二重引用符で 囲まれる必要があります。 """SELECT""" "SELECT" SELECT は予約語であるため、その名前の識別子は二重引用符 で囲まれる必要があります。出力結果に二重引用符の文字を含 めるには、それぞれの二重引用符の文字は二重引用符で囲まれ る必要があります。 "Column Name" Column Name 識別子にスペースが入っており、大文字と小文字が混在してい るため二重引用符は必須です。 "The ""STAR""" The "STAR" 最初の引用符は識別子の開始を示し、第 2 の引用符は第 3 の引用 符を文字として扱うことを示し、第 4 の引用符は第 5 の引用符を 文字として扱うことを示し、第 6 の引用符は識別子の終了を示し ます。 "STAR" という列名の列を持つ table という名称のテーブルを作成するには、次の SQL 文を入力します。 create table "table" ( "The ""STAR""" int) ; このテーブルを選択するには、次のステートメントを入力します。 select "The ""STAR""" from "table" ; 大文字と小文字 サーバでは、システム テーブルに格納する際に、小文字を大文字に変換します。た とえば、MaRkeT という名称は MARKET に、fred は FRED に変換されます。このた め、Market は MARKET と同等であり、MARKET の値が未設定または不定 (NULL) でない限り、次の条件は真になります。 MarKet = MARKET 名称の値が未設定の場合、そのステートメントは不明と評価されます。 漢字などのように、大文字と小文字の区別がない文字は、入力したとおりに格納さ れます。 SQL 言語の各要素 2-5 エリアスと相関名 例 次のクエリは、fred が作成したすべてのテーブルの名前を返します。fred は大文字 に変換されるため、検索条件には FRED を使用する必要があります。 select name from rbw_tables where creator = 'FRED' エリアスと相関名 列およびテーブルには作成時に名称を付けますが、クエリの中では列エリアスおよ びテーブル相関名で置き換えることができます。この一時的な名称は、ステートメ ントの処理中のみ有効です。 列エリアス 列のエリアスは、オプションの AS キーワードを使って検索項目リストで設定しま す。クエリ実行時に列名を変更したり、未設定の列に名称を与えます。エリアスを 割り当てた列は、それ以降の句でエリアスによって参照することができます。 次のクエリは検索項目リストの列に brand と sales という名称を割り当て、WHERE 句と GROUP BY 句で brand を使用します。 select prod_name as brand, sum(dollars) as sales from product natural join sales where brand = 'Aroma Roma' group by brand テーブルの相関名 テーブルの相関名は、FROM 句 (AS キーワードはオプション ) のテーブル参照の直 後に定義します。相関名は、1 つの相関条件でクエリやサブクエリが同じテーブル を参照する場合や、テーブルをそれ自身と結合する場合に参照のあいまいさを除く ために用いられます。また、サブクエリやほかの選択式から派生するテーブルに名 前を付ける手段にもなります。 テーブルのエリアスは、シノニムとは異なります。シノニムは、8-136 ページ 「CREATE SYNONYM」を参照してください。 FROM 句のテーブル参照に相関名を使用する場合は、相関名の後に列名リストを指 定することができます。単純なテーブル参照の場合は、テーブルの列名を列リスト に指定された名前に一時的に置き換えます。クエリ式の場合は、派生テーブルの列 に一意な名前を与える手段となります。どちらの場合も、列リストはクエリの中で のみ有効です。 2-6 SQL Reference Guide エリアスと相関名 列リストを指定する場合は、テーブルのすべての列の名前を指定してください。列 リストを使用する場合は、列リストに指定した列名に基づいて列が結合されるた め、自然結合と列を指定した結合 (USING サブ句を指定した結合 ) の指定に注意が 必要です。 自然結合と列を指定した結合では、列名が一致する 2 列を 1 列に結合したテーブル が派生しますが、ON で指定した結合では、結合する 2 列がそのまま派生テーブル に残されます。 列エリアスの構文は 7-19 ページ、相関名と列リストは 7-13 ページ、各種の結合は 7-7 ページ を参照してください。 修飾列名 修飾列名とは、テーブル名、ビュー名、テーブルやビューのシノニムのいずれかに よって修飾された列名のことです。テーブル名は、CREATE 文で定義した名前か、 FROM 句で指定した相関名です。 列名とテーブル名は、ピリオドで区切ります。 sales.dollars s.dollars period.perkey t1.perkey view_sales99.quantity v99.quantity テーブル参照の詳細は、7-13 ページを参照してください。 例 次に列エリアスと相関名の使い方の例を示します。ここに示す 2 つの例の詳細は、 『SQL Self-Study Guide』の第 4 章と第 5 章を参照してください。 この例では、サブクエリとメイン クエリ両方の FROM 句に相関名が割り当てられ ています。修飾された列名により、サブクエリの相関条件での列参照と、メイン ク エリの検索項目リストおよび GROUP BY 句での列参照が区別されています。 select q.prod_name, e.month, sum(dollars) as sales_99, (select sum(dollars) from store t natural join sales s natural join product p natural join period d where d.month = e.month and d.year = e.year-1 and p.prod_name = q.prod_name and t.city = u.city) as sales_98 SQL 言語の各要素 2-7 エリアスと相関名 from store u natural join product q natural join period e natural join sales l where year = 1999 and qtr = 'Q1_99' and prod_name like 'Lotta Latte%' and city like 'San J%' group by q.prod_name, e.month, e.year, u.city; メイン クエリの WHERE 句における列参照は、参照先が特定できるため修飾は不要 です。メイン クエリの FROM 句に指定されたテーブルを参照します。 次の例は、FROM 句の 2 つのサブクエリの外部結合から派生したテーブルおよび列 に相関名と列リストを指定しています。また、検索項目リストには (wk_no) という 列エリアスが指定され、 extract(week from date) という式から得られる列に名前を付けています。このエリアスは、後で ORDER BY 句と BREAK BY 句で参照されます。 select date, extract(week from date) as wk_no, prices, sales from ((select d1.date, sum(price) from orders natural join period d1 where d1.year = 2000 and d1.week in (12, 13) group by d1.date) as t1 full outer join (select d2.date, sum(dollars) from sales natural join period d2 where d2.year = 2000 and d2.week in (12, 13) group by d2.date) as t2 on t1.date = t2.date) as t3(order_date, prices, date, sales) order by wk_no, date break by wk_no summing 3, 4; 外部結合は、列を指定した結合でも自然結語でもないため、派生テーブル t3 には、 3 つではなく 4 つの列があります。 2-8 SQL Reference Guide 定数 定数 定数とは、文字列定数または数値定数のことです。文字列定数は、リテラル、文字 列、ストリングとも呼ばれます。日付時間リテラルは、日付と時間の一方または両 方を表す特別な文字列定数です。 数値定数は、整数、10 進数値、浮動小数点のいずれかで、符号、精度、スケールが 設定されます。精度は定数全体の桁数、スケールは小数点以下の桁数のことです。 文字列定数 文字列定数の始まりと終わりは、一重引用符 (') で示します。文字列定数の長さは、 定数の文字数になります。次に文字列定数の構文ダイアグラムを示します。 ' ' <character> '' サーバが使用するコード セットは、インストールの際にロケール設定の一部として 定義されます。ロケールの詳細は、『Administrator's Guide』を参照してください。 使用上の注意 ■ ■ ■ ■ ■ 文字とは、アルファベット、数値、特殊文字のいずれかです。 文字列定数の長さは、0 ∼ 1024 文字の範囲である必要があります。 2 つの一重引用符で囲んだ長さが 0 の文字列 (' ') は、「空の文字列」と呼ば れます。これは、NULL とは異なります。 文字列で一重引用符 (') を使用する場合は、2 つの一重引用符 (' ') を使用し てください。 文字列定数は、大文字と小文字の区別があります。Chicago と chicago は同 じではありません。 SQL 言語の各要素 2-9 日付時間定数 例 次に文字列定数の例を示します。 'IBM Software' 'Scarlet O''hara' 日付時間定数 DATE、TIME、TIMESTAMP の各キーワードは、その後に続く定数が ANSI SQL-92 標準の日付時間データ型に準拠した指定であることを示します。 次に日付時間定数の構文ダイアグラムを示します。 DATE '<YYYY-MM-DD>'' '<alternative_date_value>' TIME '<HH:MM:SS> ' '<HH:MM:SS.fraction> ' '<alternative_time_value>' TIMESTAMP '<YYYY-MM-DD> <HH:MM:SS> ' <HH:MM:SS.fraction>' '<alternative_timestamp_value >' 一部のクエリ ツールは、ANSI-92 が定義する日付時間定数に準拠しない SQL を生成 するため、IBM Red Brick Warehouse は、ほかの SQL サーバの日付時間フォーマット も限定的にサポートします。これらのフォーマットは、サーバ ロケールの言語を English、テリトリを United States に指定した場合だけ使用できます。それ以外のロ ケールでは、ANSI 日付時間定数を使用する必要があります。ANSI-92 標準型式以 外の日付時間フォーマットの詳細は、付録 C「日付時間フォーマット」を参照して ください。 2-10 SQL Reference Guide 日付時間定数 使用上の注意 ■ ■ ■ ■ ■ ■ 日付時間定数の始まりと終わりは、一重引用符 (') で示します。 日付と時間を構成する要素は、符号なしの整数とし、次に示す範囲である 必要があります。 要素 意味 最小値 最大値 YYYY 年 0001 9999 MM 月 01 12 DD 日 01 31 HH 時間 00 23 MM 分 00 59 SS 秒 00 59 fraction 秒未満の端数 0 999999 日付の要素間はハイフン (-) で区切ります。 YYYY-MM-DD 日付エレメント間に空白を使用することはできません。 時間の要素は、次のようにコロン (:) またはピリオド (.) で区切ります。 HH:MM:SS HH:MM:SS.fraction 時間の要素間に空白を使用することはできません。 fraction は秒未満の端数を表す 0 ∼ 6 桁の数字です。 タイムスタンプの日付フィールドと時間フィールドの間には空白が使用で きますが、必須ではありません。 例 次に日付時間定数の例を示します。 DATE'1999-12-25' TIME'08:23:16' TIME'14:23:16.5' TIMESTAMP'1999-12-25 08:23:16' 次の例は、DATE 型の列に ANSI SQL-92 の日付時間定数の制約を適用します。 select * from period where date = DATE '1999-12-25' SQL 言語の各要素 2-11 整数定数 ANSI SQL-92 標準型式以外の日付時間の定数を使用する場合は、付録 C「日付時間 フォーマット」に示すように、使用するフォーマットに DATEFORMAT 変数を指定 します。 整数定数 整数定数は、0 ∼ 9 桁の数字列です。数字の前には、正符号 (+) または負符号 (-) を 付けることができます。次に整数定数の構文ダイアグラムを示します。 <digit> + – 使用上の注意 ■ ■ ■ ■ 整数定数は、9 桁以下である必要があります。コンパイラは、10 桁から 38 桁までの整数定数を 10 進数定数と解釈します。38 桁を超える場合は、浮 動小数点定数を使用します。 整数定数の精度は、桁数で表す長さです。スケールは 0 です。 整数定数にはカンマを含めることはできません。たとえば、1,000 とは記 述できません。 有効な数値文字として認識されるのは、数値を表すシングルバイトの文字 だけです。 例 次に整数定数の例を示します。 234 -5280333 +2274 +999990001 2-12 SQL Reference Guide 10 進数定数 10 進数定数 10 進数定数は、小数点を含んだ数字列です。10 進数定数の前には、正符号 (+) また は負符号 (-) を付けることができます。次に 10 進数定数の構文ダイアグラムを示し ます。 <digit> . + <digit> . <digit> 使用上の注意 ■ ■ ■ ■ ■ ■ 10 進数定数は、符号および小数点を除いて 38 桁以下である必要がありま す。38 桁を超えると、浮動小数点定数と解釈されます。 10 進数定数の精度は、桁数で表す長さです。スケールは、小数点以下の桁 数になります。 10 進数定数の小数点は、必須ではありません。小数点を使用しないと、ス ケールは 0 と解釈されます。 10 進数定数にはカンマを含めることはできません (1,100.10 など )。 サーバ ロケールにかかわらず、小数点文字はピリオド (.) である必要があ ります。 有効な数値文字として認識されるのは、数値を表すシングルバイトの文字 だけです。 例 次に 10 進数定数の例を示します。 234 精度 3、スケール 0 +234.78 精度 5、スケール 2 +.007 精度 3、スケール 3 -2.1414 精度 5、スケール 4 1234567890.123456789 精度 19、スケール 9 SQL 言語の各要素 2-13 浮動小数点定数 浮動小数点定数 浮動小数点定数は、38 桁を超える数字列か、「指数表記」による数字列です。指数 表記は、10 進数値と指数部を 1 文字 (E または e) で区切って表します。指数表現の 値は、指数部で指定する 10 の累乗と 10 進数値の積になります。この表記は指数表 記とも呼ばれています。 次に浮動小数点数値の構文ダイアグラムを示します。前半は 10 進数値の部分、後 半は指数部です。 <digit> . + <digit> . <digit> E <digit> e + - 例 次に浮動小数点定数の例を示します。 1.73e+5 -2.93E+9 145.06e-5 .003E+4 +1234.56789e105 使用上の注意 ■ ■ 2-14 サーバ ロケールにかかわらず、浮動小数点定数の小数点文字はピリオド (.) である必要があります。 有効な数値文字として認識されるのは、数値を表すシングルバイトの文字 だけです。 SQL Reference Guide データ型 データ型 サーバが格納、検索、削除、挿入、更新する値は、各値の特性を示すデータ型を 持っています。データ型は、CREATE TABLE 文でテーブルを作成する時に指定しま す。データ型は、演算の処理中に変換することができます。たとえば、整数を 10 進数値に加算する場合は、整数が 10 進数値に変換されます。 Red Brick の構造化問い合わせ言語 (SQL) の実装では、ANSI SQL-89 標準データ型お よび TINY 整数のデータ型をサポートし、ANSI SQL-92 の日付データ型の一部もサ ポートします。 次の表は、サポートされるデータ型の一覧です。この表は、Red Brick ODBC Driver が実行する、CREATE TABLE 文で指定したサーバのデータ型と ODBC データ型と の間のデータ型マッピングも示します。 サーバ データ型 ODBC SQL データ型 デフォルトの ODBC C データ型 CHAR SQL_CHAR SQL_C_CHAR VARCHAR SQL_CHAR SQL_C_CHAR TINYINT SQL_TINYINT SQL_C_STINYINT SMALLINT SQL_SMALLINT SQL_C_SSHORT INTEGER SQL_INTEGER SQL_C_SLONG SERIAL SQL_INTEGER SQL_C_SLONG NUMERIC、DECIMAL SQL_DECIMAL SQL_C_CHAR REAL SQL_REAL SQL_C_FLOAT DOUBLE、FLOAT SQL_DOUBLE SQL_C_DOUBLE DATE SQL_DATE SQL_C_DATE TIME SQL_TIME SQL_C_TIME TIMESTAMP SQL_TIMESTAMP SQL_C_TIMESTAMP 3 番目の列は、Red Brick のデータ型が論理的にマッピングされる ODBC のデータ型 を示します。 エンド ユーザ ODBC アプリケーションの作成についての詳細は、 『Client Installation and Connectivity Guide』を参照してください。 SQL 言語の各要素 2-15 CHARACTER 浮動小数点データ型の最大値と最小値は、ホストのプラットフォームによって異な ります。 CHARACTER 文字列は固定長または可変長の値として格納できます。CHAR データ型は固定長と して、VARCHAR データ型は可変長として文字列を格納します。 7 または 8 ビットの ASCII コード セットを使用した場合は、1 文字の長さが常に 1 バ イトになるため、列サイズが、バイト数か文字数のどちらと見なされても違いはあ りません。ただし、マルチバイトのコード セットを使用する場合は、シングルバイ トのコード セットと同数の文字が列に格納できないことがあるので注意してくださ い。 CHARACTER CHAR ( <length> ) VARCHAR CHARACTER VARYING ( <length> ) WITH FILLFACTOR<n> CHAR VARYING WITH FILLFACTOR <n> この句は、可変長文字 (VARCHAR) 型の列にのみ適用されます。 通常の VARCHAR が取るべき列の長さの割合を指定します。この 値は、ブロックに割り当てる行サイズと行数の計算に使用されま す。 WITH FILLFACTOR を指定しないと、rbw.config ファイルに設定さ れているデフォルトの列フィル ファクタが使用されます。 rbw.config ファイルで列フィル ファクタが設定されていない場合 は、システム デフォルトである 10% が使用されます。 フィル ファクタの詳細は、『Administrator's Guide』を参照してくだ さい。 2-16 SQL Reference Guide CHARACTER 使用上の注意 ■ ■ ■ ■ ■ ■ ■ CHARACTER キーワードは、CHAR と同義です。 CHARACTER VARYING キーワードと CHAR VARYING キーワードは VARCHAR と同義です。 文字列長の値は最大列幅を指定し、1,024 以下である必要があります。デ フォルトは 1 です。 CHAR 列に格納された文字列は左寄せされ、残りのスペースに空白が追加 されます。CHAR 列に格納された文字列の長さはすべて同じです。 VARCHAR 列に格納された文字列の長さは、ソース文字列または、その文 字列 ( 追加された空白を含む ) を生成した式の長さと同じです。VARCHAR 列に格納された文字列は可変長です。 VARCHAR 列に格納された文字列には 2 バイトのオーバーヘッドが生じま す。このデータ型は、列幅が 6 バイト未満、または同等の長さの文字列を 格納する列には使用できません。CHAR データ型を使用してください。 文字列を比較する場合、シングルバイトの ASCII 空白文字ではなく、( 東ア ジア言語でサポートされている ) ダブルバイトの空白文字を含むデータを ロードすると、予測できない結果になることがあります。可能な場合に は、ダブルバイトの空白をシングルバイトの空白に置き換えて、データの ロード前に入力ファイルからダブルバイトの後ろの空白を取り除きます。 VARCHAR と CHAR の使用方法 VARCHAR データ型は、ソース文字列の長さが大きく異なる場合など、主に格納ス ペースを効率的に利用したいときに使用します。CHAR(20) 列に 5 文字の文字列を 格納すると、格納された文字列の長さは 20 文字に増加します (15 文字分は末尾の空 白 )。同じ文字列を VARCHAR(20) 列に格納すると、5 文字分しか必要としません。 次の場合には、VARCHAR ではなく CHAR を使用します。 ■ ■ ■ 6 バイト未満の列幅 文字列の長さが、あまり大幅に異ならないソース文字列 頻繁に更新され、格納された行が長くなる列。この場合は、最適に行が格 納されないことがあるので、データへのアクセスに時間がかかる可能性が あります。 重要 : VARCHAR 列の末尾に空白が存在すると、予想外の、または不定な結果に結 びつくことがあります。末尾に空白を含むデータは VARCHAR 列には保存しないこ とを推奨します。 SQL 言語の各要素 2-17 CHARACTER CHAR 列に格納されると、末尾空白の有無は重要性を失います。‘zebra’ および ‘zebra ’ ( 末尾に 1 つ空白が存在 ) の 2 つのソース文字列は、CHAR(20) 列に格納する と文字列の長さはどちらも 20 ですが、VARCHAR(20) 列に格納すると、文字列の長 さはそれぞれ 5 と 6 になります。VARCHAR 列内の末尾空白は、LENGTH、 CONCAT、SUBSTR などのスカラ関数を使用する際に重要な意味を持ちます。 VARCHAR 列内の末尾空白はまた、LIKE などの比較述部を使用する検索条件に対 しても重要な意味を持ちます。たとえば、文字列が 'zebra ' のとき次の検索条件は真 ですが、条件が 'zebra' のときは偽になります。 animal LIKE 'zebra %' VARCHAR 列の末尾に空白があると、不定な結果に結びつくことがあります。たと えば、次のクエリでは 5 または 6 が返されます。 select LENGTH(MAX(animal)) from kingdom_table; 任意の処理を実行中にクエリが、'zebra' または 'zebra ' のどちらの値を選択するかに より、返される値が変わります。MAX 集約関数では、この 2 つの文字列は同等で あり、どちらでも最大値として選ばれる可能性があります。実際に選択される値 は、テーブル内でのデータ順、および選択されたクエリ プランや実際の並列度な ど、クエリ実行の状況に左右されます。 VARCHAR データの末尾に空白が含まれていなければ、不整合は起きません。末尾 に空白が必要な場合は、一貫して使用してください。たとえば、1 つの末尾空白が 必要な場合は、すべての値の末尾に空白を 1 つ追加します。論理上、最小列幅を指 定しなければならない場合は、最小列幅より少ない値の末尾に空白を追加し、最小 列幅が満たされるようにします。それ以外の値からは末尾の空白をすべて取り除き ます。 2-18 SQL Reference Guide DATETIME データ型 :DATE、TIME、TIMESTAMP DATETIME データ型 :DATE、TIME、TIMESTAMP 日付、時間、タイムスタンプのデータ型 ( 日付時間データ型と総称 ) は、スカラ関 数、比較関数、集約関数を使用できる形式で日付と時間の情報を格納します。 DATE、TIME、TIMESTAMP のデータ型は、次の例外を除き、ANSI SQL-92 の日付 時間データ型の定義に準拠します。 ■ ■ 時間帯はサポートされません。 時間間隔は直接にはサポートされませんが、スカラ関数により間接的にサ ポートされます。 前述のデータ型は、DATE、TIME、TIMESTAMP の各キーワードで指定します。 DATE TIME ( <scale> ) TIMESTAMP ( <scale> ) 使用上の注意 ■ ■ ■ スケールの値は、0 ∼ 6 の整数である必要があります。この値は、表示お よび計算に使用する秒未満の桁数を指定します。<scale> に 0 より大きい値 を指定すると、内部には 6 桁が格納されますが、<scale> で指定した桁数だ けが有効になります。つまり、残りの桁は 0 になります。<scale> = 0 の場 合は、秒未満の桁は格納されません。 スケールの値を指定しないと、<scale> のデフォルト値は次のようになりま す。 TIME TIMESTAMP 日付時間データ型の範囲は、次のとおりです。 DATE January 1, 1 to December 31, 9999 TIME 0:0:0 to 23:59:59.999999 TIMESTAMP January 1, 1 0:0:0.000000 to December 31, 9999 23:59:59.999999 精度が異なる値を比較する場合は、精度の低い方の値に 0 を追加し、精度 の高い値と同じ桁数にします。 SQL 言語の各要素 2-19 INTEGER ■ ■ 日付時間データ型をソートまたは比較するときは、日付時間の古いものか ら順になります。 日時 (DATETIME) 型の文字列を処理する場合、シングルバイトの ASCII 空 白文字ではなく、( 東アジア言語でサポートされている ) ダブルバイトの 空白文字を含むデータをロードすると、予測できない結果になることがあ ります。可能な場合には、ダブルバイトの空白をシングルバイトの空白に 置き換えて、データのロード前に入力ファイルからダブルバイトの後ろの 空白を取り除きます。 例 次に日付時間データ型の指定の例を示します。 DATE TIME 秒未満の端数なし TIME(6) 秒未満の有効桁数は 6 TIMESTAMP(0) 秒未満の端数なし TIMESTAMP 秒未満の有効桁数は 6 TIMESTAMP(2) 秒未満の有効桁数は 2 INTEGER 整数データ型は、- 231 ∼ 231-1 (231 = 2,147,483,648) の符号付き整数です。このデータ 型は、INTEGER または INT キーワードで指定します。 2-20 SQL Reference Guide SERIAL SERIAL シリアル (SERIAL) 型は、1 ∼ 231-1 (231=2,147,483,648) の符号付き整数です。この データ型は、SERIAL キーワードで指定します。 SERIAL ( ) <start_value> , , <step_value> <step_value> <start_value> SERIAL 列の値の開始値。0 より大きく 231 未満の数値リテラルであ る必要があります。デフォルト値は 1 です。 <step_value> SERIAL 列の 2 つの値の差。0 より大きく 231 未満の数値リテラルで ある必要があります。デフォルト値は 1 です。 使用上の注意 シリアル (SERIAL) 型は特殊な整数 (INTEGER) 型です。シリアル (SERIAL) 型の使 用上の制限を次に示します。 ■ ■ ■ ■ ■ シリアル (SERIAL) 型は、整数 (INTEGER) 型が使用できるほとんどの場合 に使用できます。 どのテーブルも 1 つだけシリアル (SERIAL) 型の列を持つことができます。 シリアル (SERIAL) 型の列は、任意のテーブルのプライマリ キーとして使 用できますが、フォーリン キーの一部として使用することはできません。 シリアル ( SERIAL) 型の列をフォーリン キーとして参照する場合は、 フォーリン キー列を整数 ( INTEGER ) 型の列として指定する必要がありま す。 ほかの列と同様にシリアル (SERIAL) 型の列に一意性インデックスを定義 できる場合でも、このインデックスは別に作成する必要があります。一意 性インデックスは、2 つの同じシリアル番号が同時にテーブルに存在しな いようにします。ただし、一意性インデックスでは、シリアル番号を使用 している行のインデックス管理でオーバーヘッドが発生します。 シリアル (SERIAL) 型は、ビュー列、ビュー テーブル列、述部などの事前 計算ビュー定義では許可されません。 SQL 言語の各要素 2-21 SMALLINT シリアル (SERIAL) 型値の生成 シリアル (SERIAL) 型列の値は、自動的に挿入または更新することも、手動で挿入 または更新することもできます。手動で挿入または更新する場合は、ローダ (TMU) を使用するか、INSERT 文または UPDATE 文を使用します。シリアル (SERIAL) 型列 の値を指定せずに挿入すると、値が自動的に生成されます。データ行を挿入すると きに、シリアル (SERIAL) 型値の生成に規則が適用されます。この規則により、同 じシリアル (SERIAL) 型値が自動的に生成されないようにします。 重要 : シリアル (SERIAL) 型列に一意性インデックスが定義されていない場合、シリ アル (SERIAL) 型値を手動で設定すると、値の一意性が保証されません。一意性イン デックスは、2 つの同じシリアル番号が同時にテーブルに存在しないようにします。 サーバは、テーブルで一番大きなシリアル番号を、内部的に追跡します。 <step_value> が 1 の場合、一意のシリアル番号は 2,147,483,647 だけ存在します。 <step_value> が大きくなると一意の値の数は少なくなります。 システムに格納されているシリアル番号より大きい値を持つ行をテーブルに挿入す ると、格納されている値は、挿入された大きい値に置き換えられます。シリアル番 号が最大許容値を超えるとエラー メッセージが生成され、操作が失敗します。その 時点で、シリアル (SERIAL) 型の <start_value> をシステム管理者がリセットするま で、テーブルへの挿入はできなくなります。2,147,483,647 に近い行数のテーブルで は、シリアル (SERIAL) 型は使用しないでください。 削除などにより、すべてのシリアル (SERIAL) 型値がテーブルに存在するのではな いのため、実際には 2,147,483,647 より少ない行を格納できます。 重要 : システムが生成する次のシリアル (SERIAL) 型値が 2,147,483,647 ( システム が生成できる最大のシリアル番号 ) より大きくなる場合、シリアル (SERIAL) 型値の 自動生成は停止され、テーブルに行を挿入することはできません。エラー メッセー ジが返されます。 データをその元のシリアル番号とともにアーカイブおよび復元できます。行が削除 されても、最大シリアル (SERIAL) 型値はリセットされません。次のシリアル番号 は、最後に割り当てられたシリアル番号に基づきます。 SMALLINT 小桁整数 (SMALLINT) 型は、- 215 ∼ 215-1 (215 = 32,768) の符号付き整数です。この データ型は、SMALLINT キーワードで指定します。 TINYINT TINY 整数 (TINYINT) 型は、- 27 ∼ 27-1 (27 = 128) の符号付き整数です。このデータ型 は、TINYINT キーワードで指定します。 2-22 SQL Reference Guide DECIMAL と NUMERIC DECIMAL と NUMERIC DECIMAL 型と NUMERIC 型は、精度とスケールを正確に表した数値データ型です。 DECIMAL と NUMERIC は同義です。このデータ型は、DECIMAL、DEC、 NUMERIC、、NUM のいずれかのキーワードで指定します。 DECIMAL DEC NUMERIC ( <precision> ) , <scale> NUM 使用上の注意 ■ ■ ■ ■ 10 進数値データ型の最大精度は 38 桁です。 10 進数値データ型のスケールは正数で表し、その精度の桁数以下としま す。 デフォルトは、精度が 9、スケールが 0 です。 DECIMAL データ型は、NUMERIC データ型と同義です。 例 次に 10 進数値データ型の型指定の例を示します。 DECIMAL 精度 9、スケール 0 DEC 精度 9、スケール 0 DECIMAL(9) 精度 9、スケール 0 DECIMAL(38,38) 精度 38、スケール 38 NUMERIC 精度 9、スケール 0 NUMERIC(9) 精度 9、スケール 0 SQL 言語の各要素 2-23 REAL REAL 実数データ型は、符号付き浮動小数点数値を単精度で表した概数です。このデータ 型は、REAL キーワードで指定します。 使用上の注意 小桁実数 (REAL) 型は、おおよそ 1.17549435E-38F ∼ 1.E37 の単精度数です ( 最小範 囲と最大範囲はホスト プラットフォームに依存します )。 DOUBLE PRECISION と FLOAT 倍精度データ型と浮動小数点データ型は、符号付き浮動小数点数値を倍精度で表し た概数です。このデータ型は、DOUBLE PRECISION または FLOAT キーワードで指 定します。 使用上の注意 ■ ■ 2-24 このデータ型は、2.3E-308 ∼ 1.E307 の倍精度数です ( これは最小範囲で、 最大範囲はホスト プラットフォームに依存します )。 DOUBLE PRECISION データ型と FLOAT データ型は、同義です。 SQL Reference Guide 値の欠落と NULL 値 値の欠落と NULL 値 IBM Red Brick Warehouse は、値の欠落を次のように処理します。 ■ 値の欠落は、空白とは異なります。たとえば、次のステートメントは、 Market 列に空白が格納されていれば偽、入力データが欠落していれば真 になります。 (market is null) ■ 値の欠落は、0 とは異なります。たとえば、次のステートメントは、 Dollars 列に 0 が格納されていれば真ですが、値が欠落していれば真でも偽 でもありません。 (dollars = 0) ■ 値が欠落していれば真でも偽でもなく、不定と判定されます。 条件が参照する値が欠落している場合は、3 値 ( 真、偽、不定 ) 論理によっ て評価されます。たとえば、次のステートメントの真理値は、Dollars 列の 値が欠落していれば不定になります。 (dollars > 100) ■ 算術式が参照する値が欠落している場合は、NULL と評価されます。たと えば、次のステートメントで Dollars 列の値が欠落していれば NULL が返さ れます。 (dollars+5) ■ 列の値が欠落している場合、IS NULL 述部は真、IS NOT NULL 述部は偽に なります。たとえば、次のステートメントは、Dollars 列の値が欠落してい る場合に真になります。 (dollars is null) ■ ほとんどの表示関数と集約関数は、値の欠落を無視します。たとえば、次 のステートメントは、既存値の順位だけを返します。 rank(dollars) ■ ほとんどのスカラ関数式は値が欠落していると、NULL を返します。たと えば、次のステートメントで Dollars 列の値が欠落していれば NULL が返さ れます。 (float(dollars)) ■ IFNULL スカラ関数は、値の欠落を検出し、指定された値に置き換えます。 たとえば、次のステートメントで Market 列の値が欠落していれば No Name という値が返されます。 (ifnull(market, 'No Name')) SQL 言語の各要素 2-25 列データの代入と比較 列データの代入と比較 INSERT 文や UPDATE 文は列に値を代入し、各種の演算子や関数は値を比較します。 代入または比較の対象となる値は、互換性のあるデータ型である必要があります。 数値データ型と文字データ型は互換性がありません。たとえば、数値データ型に定 義された列に文字列を格納することはできず、文字列と数値を比較することもでき ません。 列データの代入 CHARACTER と指定された列には、文字列しか格納できません。DATETIME と指 定された列には日付時間の値、NUMERIC と指定された列には数値しか格納できま せん。さらに次の規則が適用されます。 文字列 文字列を列に挿入したり、文字列で列を更新する場合は、次の規則が適用されます。 ■ ■ ■ 文字列の長さが CHAR 列の指定長より短ければ、必要な数の空白が文字列 の右に追加されます。 文字列の長さが VARCHAR 列の指定長より短ければ、その文字列の VARCHAR 属性は、代入された文字列の長さとなります。 文字列の長さが列の指定長より長ければ、INSERT 文や UPDATE 文が失敗 し、エラー メッセージが返されます。 日付時間の値 日付時間定数を列に挿入したり、日付時間定数で列を更新する場合は、次の規則が 適用されます。 ■ ■ ■ 2-26 DATE、TIME、TIMESTAMP のプレフィクスを持つ定数は、日付時間の値 と解釈されます。 タイムスタンプの値に時間の部分が欠落していれば、午前 0 時が使用され ます。 タイムスタンプの値に日付の部分が欠落していれば、1900 年 1 月 1 日 (1900-01-01) が使用されます。 SQL Reference Guide 比較 ■ DATE、TIME、TIMESTAMP のプレフィクスを持たない定数は、その内容が 日付時間の値であると推定される場合のみ、文字定数ではなく日付時間定 数であると解釈されます。その場合、定数は日付時間の値に変換されます。 INSERT 文で、DATETIME 型の列に挿入される定数は、適切な日付時間 データ型に変換されます。 insert into table1 (date_col) values ('1999-07-04') UPDATE 文で、DATETIME 列に代入される定数は、適切な日付時間データ 型に変換されます。 update table1 set date_col = current_date 変換が失敗すると、ステートメントの実行が中止され、エラーになります。 数値 数値を列に挿入したり、数値で列を更新する場合は、次の規則が適用されます。 整数や 10 進数値の整数部は、切り捨てられません。端数部は、必要に応じて切り 捨てられます。 比較 文字はほかの文字と比較でき、日付時間はほかの日付時間、数値はほかの数値と比 較することができます。さらに次の規則が適用されます。 文字列 文字列を比較する場合は、比較する文字列の長さが同等であることが必要です。文 字列長が異なる場合は、長い方の文字列と同じ長さになるまで、短い方の文字列の 右端に空白スペースが追加されます。その上で、各文字列の対応する文字ごとに、 左から右へ比較されます。次の規則が適用されます。 ■ ■ 2 つの文字列の長さと対応する文字が同じ場合は、等しいと見なされます。 文字列の文字が同じでない場合、最初の等しくない文字によって、文字列 の大小関係が決まります。つまり、システムの相関シーケンスにおいて最 も大きな値の文字を持つ文字列の方が大きいと判断されます。 日付時間の値 日付時間の値は、次のように比較されます。 ■ ■ 日付の値は、日付の値と比較されます。 時間の値は、時間の値と比較されます。精度が異なる値を比較する場合 は、精度の低い値に 0 を追加し、精度の高い値と同じ桁数にします。 SQL 言語の各要素 2-27 比較 ■ ■ ■ ■ タイムスタンプの値は、タイムスタンプの値と比較されます。精度が異な る値を比較する場合は、精度の低い値に 0 を追加し、精度の高い値と同じ 桁数にします。 日付の値は、タイムスタンプの値と比較されます。日付の値には、比較の ために深夜の時間の値が埋め込まれます。 時間の値は、タイムスタンプの値と比較されます。その時間の値には比較 のために日付値 1900-01-01 が埋め込まれます。 DATE、TIME、TIMESTAMP のプレフィクスを持たない定数は、その内容 が日付時間の値であると推定される場合のみ、文字定数ではなく ANSI SQL-92 標準型式以外の日付時間定数であると解釈されます。その場合、 定数は日付時間の値に変換されます。詳細は付録 C「日付時間フォーマッ ト」を参照してください。 例 WHERE、HAVING、WHEN の各句で日付時間列と比較する定数は、適切な日付時 間データ型に変換されます。 select * from table1 where date_col <> '7-4-1999' 検索項目リスト中の式で、日付時間データ型が期待される位置に定数が指定されて いる場合は、適切な日付時間データ型に変換されます。 select datediff (dy, date_col, '7-4-1999') from table1 変換が失敗すると、ステートメントの実行が中止され、エラーになります。 数値 数値は、符号と大きさに基づいて比較されます。たとえば、5 は 1 より量的には大 きな値ですが、+1 は ‐ 5 より大きいと評価されます。異なる型の数値が混在する 場合は、次のように比較されます。 ■ ■ ■ ■ 2-28 整数と 10 進数値を比較する場合は、整数が一時的に 10 進数値に変換され ます。 スケールの異なる 10 進数値どうしを比較する場合は、小数点以下の桁数 が少ない方の末尾にゼロを追加し、一時的に拡張します。 浮動小数点数値を 10 進数値または整数と比較する場合は、10 進数値また は整数が一時的に浮動小数点数値に変換されます。 単精度の浮動小数点数値 (REAL) と倍精度の浮動小数点数値 (DOUBLE ま たは FLOAT) を比較する場合は、単精度の数値が一時的に倍精度の数値に 変換されます。 SQL Reference Guide 第3章 式と条件 この章について . 式 . . . . . . . . . . . 単項式 . . . . . . 多項式 . . . . . . 多項式の評価 . . . 条件 . . . . . . 比較述部 . . . BETWEEN 述部 EXISTS 述部 . IN 述部 . . . IS NULL 述部 . LIKE 述部 . . 検索条件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-3 3-4 3-4 3-5 3-7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-10 3-11 3-12 3-13 3-14 3-15 3-16 3-17 3-2 SQL Reference Guide この章について IBM Red Brick Warehouse の SQL インプリメンテーションには、各種の算術演算子、 論理演算子、論理述部が組み込まれています。 この章では、次の事項について説明します。 ■ ■ 式 ❑ 単項式 ❑ 多項式 ❑ 多項式の評価 条件 ❑ 比較述部 ❑ BETWEEN 述部 ❑ EXISTS 述部 ❑ IN 述部 ❑ IS NULL 述部 ❑ LIKE 述部 ❑ 検索条件 式と条件 3-3 式 式 式は、一意の値を表します。たとえば、5+12 という式は 17 となります。次の式は 1,000 ドル単位の値を返します。 (sales.dollars /1000) 次に示す列名の値はコンテキストによって決まります。 sales.dollars という名の列は指定した行に対する値になります。 単項式 単項式は、次のいずれかになります。 ■ ■ ■ ■ ■ ■ ■ 定数 スカラ関数 列名 集約関数 RISQL 表示関数 OLAP 関数 スカラ サブクエリ スカラ サブクエリの詳細は、7-69 ページ「スカラ サブクエリとテーブル サブクエ リ」を参照してください。 例 次の式は、いずれも単項式です。 'Lotta Latte' 2.1416 sum(dollars) rank(sales) rank(sum(dollars)) integer(dollar_cents) dollars (select max(bonus) from employee) 3-4 SQL Reference Guide 多項式 多項式 多項式は、算術演算子で結合した単項数値式のシーケンスです。多項式では、かっ こを使って評価順を指定することができます。次に多項式の構文ダイアグラムを示 します。 / * + – <simple_expression> + – ( <compound_expression> ) 多項式に使用する単項式は、数値を返すものである必要があります。 分析関数 次の RANK を使った例に示すように、1 つの多項式には任意の数の OLAP 関数また は RISQL 表示関数を使用することができます。ただし、同じ式または同じ問い合わ せで OLAP と RISQL 表示関数を混在させることはできません。 詳細は、第 6 章「分析関数」を参照してください。 例 次の式は、いずれも多項式です。 (125+sales.dollars)/5 avg(sales.dollars/1000) sum(sales.dollars)/count(*) rank() over(order by sales)/100 rank() over(order by sum(dollars)desc)/rank() over(order by sum(quantity)desc) rank(price)/rank(earnings) ratiotoreport(dollars) over(order by quantity)*100 ratiotoreport(sales)*100 (select salary from employee where emp_no = 227)*1.1 式と条件 3-5 多項式 入れ子になった式 ほかの関数に入れ子にできる関数もあります。たとえば、次の式は、数値を切り捨 てる場合に使用することができます。 string(sum(dollars), 7, 2) スカラ関数は、ほかのスカラ関数の入れ子とすることができます。たとえば、次の 式は、日付時間の構成要素のうち、年の部分を返します。 string(current_date, 4) OLAP 関数と RISQL 表示関数は、集約関数、ほかの OLAP 関数、またはほかの表示 関数の引数として使用することはできません。このため、次の式はエラーになりま す。 sum(rank() over(order by dollars)) rank(cume(dollars)) ただし、集約関数を OLAP 関数または表示関数の入れ子とすることはできます。た とえば、次の式で Dollars 列の値を合計し、合計値の順位付けをすることができま す。 rank() over(order by sum(dollars) desc) (rank(sum(dollars)) 3-6 SQL Reference Guide 多項式の評価 多項式の評価 多項式の値は、式の構成要素をデータベース サーバがどのように評価するかで決ま ります。評価基準は、次のとおりです。 ■ ■ ■ 演算子のタイプと演算子の優先順位 オペランドのデータ型 値の欠落 (NULL) があるかどうか 演算子のタイプ 多項算術式は、次の演算子を使って作成することができます。 演算子 説明 ( ) 評価順を指示するかっこ +、- 正と負の単項演算子 *、 / 乗算と除算 +、- 加算と減算 上の表では、演算子は優先度の高いものから順に ( 上から下、同一レベル内では左 から右に ) 記されています。 かっこは、評価順を制御する必要がある場合に使う演算子です。データベース サー バは、かっこの中にある式を最初に評価します。かっこが入れ子にされていれば、 1 番内側のかっこから順に評価していきます。 単項演算子のプラス (+) を使用した場合、オペランドの符号は変わりません。単項 演算子のマイナス (-) は、オペランドの符号を逆にします。ゼロを表す符号なしの 定数 (0、.0、0.0) は正の値と見なされます。 例 次にかっこの用例を示します。 10*5+7 = 57 10*(5+7) = 120 式と条件 3-7 多項式の評価 演算結果のデータ型 乗算、加算、減算のオペランドがいずれも整数の場合は、結果を表現できる最小の 整数型が演算結果になります。結果が大きすぎて整数に格納できなければ、10 進数 値に変換されます。 ただし、この規則は除算演算子には適用されません。整数を整数で除算した場合の 戻り値は、整数ではなく数値データ型になります。整数の除算には、10 進数値の除 算と同じ規則が適用されます。 一方のオペランドが整数で他方が 10 進数値の場合は、整数がスケール ( 小数点以下 の桁数 ) を 0 とする 10 進数値に一時的に変換されます。演算結果は、10 進数値にな ります。 オペランドが両方とも 10 進数値の場合、演算結果の精度とスケールは次の表に示 す規則に従います。 式 結果の精度 結果のスケール d1 + d2 max(p1- s1, p2-s2) + max(s1, s2) + 1 max(s1, s2) d1 ñ d2 max(p1- s1, p2-s2) + max(s1, s2) + 1 max(s1, s2) d1 * d2 p1 + p2 s1 + s2 d1 / d2 max(6,s1+p2-s2+1) + p1s1+s2 max(6,s1+p2-s2+1) オペランドの一方が浮動小数点数値の場合は、オペランドが一時的に浮動小数点数 値に変換されます。演算結果は、浮動小数点数値になります。 除算の結果、精度が 38 桁を超えた場合は、精度が 38 桁になるようにスケールが減 らされます。スケールは、6 桁まで減らすことができます。スケールを 6 に減らし ても精度が 38 桁を超える場合は、実行時オーバーフロー エラーが発生します。 3-8 SQL Reference Guide 多項式の評価 値の欠落 算術演算のオペランドが NULL の場合は、NULL が返されます。次の表は、各算術 演算の結果を定義したものです。x は NULL を表し、y は数値を表します。 演算 結果 -x NULL +x NULL x+y NULL x-y NULL x*y NULL x/y NULL 式と条件 3-9 条件 条件 条件は、1 つまたは複数の行に対し、真、偽、不定のいずれかを評価するステート メントのことです。条件は、SQL の比較述部と数量述部を使って表現します。次に 各述部を使った条件の構文ダイアグラムを示します。 <expression> <expression> = SOME <> < ANY > ALL <table_subquery> <= >= BETWEEN <expression> <expression> AND <expression> NOT <expression> IS NULL NOT <expression> LIKE <string_expression> NOT ESCAPE <string_expression> EXISTS <table_subquery> NOT <expression> <table_subquery> IN NOT , ( <constant> ) ヒント : 式 (expression) には、文字、日付時間、数値のいずれも使用できますが、 複数の式を 1 つの条件に指定する場合は、比較可能なデータ型である必要がありま す。 3-10 SQL Reference Guide 比較述部 比較述部 比較述部は、2 つの値の論理的関係を表しており、指定した行に対し、真、偽、不 定のいずれかを評価します。次に比較述部を使った条件の構文ダイアグラムを示し ます。 <expression> = <expression> <> SOME < ANY > ALL <table_subquery> <= >= <expression> 式には、文字、日付時間、数値が使用できますが、比較可能な データ型である必要があります。式の値が NULL の場合やサブ クエリの戻り値が NULL の場合、その条件は不定と評価されま す。 スカラ サブクエリは式に使用できますが、行サブクエリとテー ブル サブクエリは使用できません。 SOME、ANY、ALL 数量述部は、テーブル サブクエリの戻り値と式を比較します。 <table_subquery> サブクエリは複数の行を選択できますが、検索項目リストの列 数は 1 つに制限されます。 SOME 数量述部と ANY 数量述部は、シノニムです。SOME ま たは ANY で表した比較は、サブクエリが返した値の中に指定 条件を満たす値が 1 つ以上あれば真と評価されます。ALL で表 した比較は、サブクエリが返したすべての値について、比較条 件が真の場合に真と評価されます。 戻り値がなければ、SOME や ANY を使った比較は偽と評価さ れ、ALL を使った比較は真と評価されます。 式と条件 3-11 BETWEEN 述部 例 次の条件は、Dollars 列の値が 100 以上の場合は真になります。 dollars >= 100 次の条件は、Hot_Products テーブルの製品に、同じ Brand のものが 1 つでもあれば 真になります。 brand = any (select product from hot_products) 次の条件は、Dollars 列の各値が San Jose におけるどの売上よりも大きければ真にな ります。サブクエリの戻り値がない、つまり San Francisco の売上がない場合も、真 になります。これは Dollars 列の値がいずれも 0 以上であるためです。 dollars >= all (select dollars from store join sales on store.storekey = sales.storekey where city = 'San Jose') SOME および ALL 述部の詳細は、『SQL Self-Study Guide』を参照してください。 BETWEEN 述部 BETWEEN 述部は、ある値が指定した範囲にあるかどうかを評価します。次に BETWEEN 述部を使った条件の構文ダイアグラムを示します。 <expression> BETWEEN <expression> AND <expression> NOT <expression> 式には、文字、日付時間、数値が使用できますが、比較可能なデー タ型である必要があります。 BETWEEN 述部の最初の <expression> は小さい方の値、2 番目の <expression> は大きい方の値である必要があります。たとえば、次 の条件は常に偽と評価されます。 between 12 and 1 BETWEEN x between y and z この条件は、次と同義です。 (x >=y) and (x<=z) NOT BETWEENx not between y and z この条件は、次と同義です。 (x<y) OR (x>z) 3-12 SQL Reference Guide EXISTS 述部 例 次の条件は、Dollars 列の値の中で、200 以上 500 以下の値について真になります。 dollars between 200 and 500 次の条件は、Dollars 列の値の中で、200 未満か、500 より大きい値について真にな ります。 (dollars not between 200 and 500) EXISTS 述部 EXISTS 述部は、サブクエリの戻り値が 1 行以上あれば真と評価されます。NOT を 指定すると、サブクエリの戻り値が 1 行もない場合に真と評価されます。次に EXISTS 述部を使った条件の構文ダイアグラムを示します。 EXISTS <table_subquery> NOT <table_subquery> 結果が 1 つ以上の列と 1 つ以上の行を持つテーブルとなるサブ クエリ。 例 次の条件は、サブクエリの戻り値が 1 行以上あれば真になります。 exists (select prod_name from store where population > 5000} 次の条件は、サブクエリの戻り値が 1 行もなければ真になります。 not exists (select prod_name from store where population > 5000) 次のクエリは、サブクエリの戻り値が 1 行以上あれば、Deal テーブルのすべての行 を返します。 select * from deal where exists (select dealkey, discount from deal union select promokey, value from promotion); EXISTS 述部の詳細は、『SQL Self-Study Guide』を参照してください。 式と条件 3-13 IN 述部 IN 述部 IN 述部は、列の値を複数の値と比較します。次に IN 述部を使った条件の構文ダイ アグラムを示します。 <expression> IN <table_subquery> NOT , ( <constant> ) <expression> 文字、日付時間、数値が使用できますが、<constant> または <row_subquery> の戻り値と比較可能なデータ型である必要があ ります。 <table_subquery> 結果が 1 つ以上の行を持つテーブルとなるサブクエリ。ただし、 このクエリの検索項目リストには、1 つの列しか指定できませ ん。 例 ■ 次の条件は、1000、10000、100000 のいずれか 1 つと等しい値について真 になります。 quantity in (1000, 10000, 100000) ■ 次の条件は、1000、10000、100000 のいずれとも等しくない値について真 になります。 quantity not in (1000, 10000, 100000) ■ 次の条件は、JAN、FEB、MAR のいずれか 1 つと等しい月について真にな ります。 month in ('JAN', 'FEB', 'MAR') ■ 次の条件は、Hot_Products テーブルの Product の値と等しい製品について 真になります。 product in (select product from hot_products) 3-14 SQL Reference Guide IS NULL 述部 IS NULL 述部 IS NULL 述部は、列に値の欠落があるかどうかを判定します。次に IS NULL 述部を 使った条件の構文ダイアグラムを示します。 <column_name> IS NULL NOT IS NULL 列の値が欠落していれば真、値が存在していれば偽と評価されま す。 IS NOT NULL 列の値が欠落していれば偽、値が存在していれば真と評価されま す。 例 次の条件は、Product 列値が欠落していれば真になります。 product is null 次の条件は、Product 列値が欠落していれば偽になります。 product is not null 式と条件 3-15 LIKE 述部 LIKE 述部 LIKE 述部は、列の値を、指定した文字列定数、式、またはパーセント (%) と下線記 号 (_) のワイルドカード文字を使った文字パターンと比較します。次に LIKE 述部を 使った条件の構文ダイアグラムを示します。 <expression> LIKE <string_expression> NOT <expression> ESCAPE <string_expression> LIKE 述部を使った式に指定する列は、文字データ型である必 要があります。数値や日付時間のデータ型を格納する列は指定 できません。 <string_expression> <expression> の値と比較する文字列定数または文字列式を指定 します。 ESCAPE 1 文字の <string_expression> をエスケープ文字として指定し、ワ イルドカードを制御文字ではなく文字定数または式として扱え るようにします。ESCAPE キーワードは、照合する文字パター ン自体にパーセントや下線記号が含まれている場合 (「例」の 最後の例を参照 ) に使用します。 ESCAPE <string_expression> の評価結果は、シングルバイトまた はマルチバイトの 1 文字からなる文字列である必要がありま す。 ワイルドカード文字 パーセント (%) のワイルドカード文字は、任意の文字列を意味します。下線記号 (_) のワイルドカード文字は、任意の 1 文字を意味します。これらのワイルドカード は、シングルバイトの ASCII 文字で指定します。マルチバイトの下線文字やパーセ ント文字を使用すると、リテラル値とみなされます。 3-16 SQL Reference Guide 検索条件 例 city like '%ville' City 列の文字列で、ville で終わるものはすべて真になります。この例で は、末尾に空白がある文字列は真になりません。 city like '%son%' City 列の文字列で、son を含むものはすべて真になります。 city like 'San%' City 列の文字列で、San で始まるものはすべて真になります。 prod_name like '_EE%' Product の文字列で、2 番目と 3 番目の文字が EE のものはすべて真になり ます。 prod_name like '%LE_N%' Product の文字列で、指定したパターンを含むものはすべて真になります。 CLEAN、KLEEN、EXCEPTIONALLY KLEEN は、いずれもこのパターンに 一致します。 sales_pct like '%Monthly ¥%' escape '¥' Monthly % で終わる文字列は、すべて真になります。 検索条件 検索条件は、真、偽、不定のいずれかを評価する論理条件を指定するものです。論 理接続詞を使うと、基本条件を組み合わせた複合検索条件を指定することができま す。条件は、かっこを使ってグループ分けすることができます。次に検索条件の構 文ダイアグラムを示します。 AND OR <condition> NOT 式と条件 3-17 検索条件 評価結果 複合検索条件の値は、条件を構成する要素の値で決まります。複合検索条件の評価 結果は次のようになります。 C1 C2 C1 AND C2 C1 OR C2 NOT C2 真 真 真 真 偽 真 偽 偽 真 真 真 不定 不定 真 不定 偽 真 偽 真 偽 偽 偽 偽 偽 不定 偽 不定 不定 真 不定 真 不定 偽 偽 不定 不定 不定 不定 不定 評価順 かっこで評価順を指定しないと、NOT 演算子は AND 演算子の前に評価され、AND は OR の前に評価されます。 例 次の論理演算は、State 列の値が NY で、Year 列の値が 1999 である行を選択します。 state = 'NY' and year = 1999 次の論理演算は、State 列の値が NY または GA で、Year 列の値が 2000 である行を 選択します。 (state = 'NY' or state = 'GA') and year = 2000 3-18 SQL Reference Guide 第4章 集約関数 この章について . . . . . . . . . . . . . . . . . . . . 4-3 一般的な使用方法 . . . . . . . . . . . . . . . . . . . 4-4 AVG . . . . . . . . . . . . . . . . . . . . . . . . 4-5 COUNT . . . . . . . . . . . . . . . . . . . . . . . 4-7 MAX . . . . . . . . . . . . . . . . . . . . . . . 4-9 MIN . . . . . . . . . . . . . . . . . . . . . . . . 4-10 SUM . . . . . . . . . . . . . . . . . . . . . . . . 4-11 4-2 SQL Reference Guide この章について 集約関数は、1 つまたは複数の値を 1 つの値に集約した結果を返します。たとえば 次の式は、Dollars 列の値を合計します。 sum(dollars) IBM Red Brick Warehouse は、次の集約関数をサポートします。この章では、各関数 をアルファベット順に説明します。 機能 説明 AVG 平均値 COUNT 該当する行数 MAX 最大値 MIN 最小値 SUM 合計値 サーバでは、データの一部のパーティションに対して集約値を計算する OLAP 集約 関数もサポートされています。これらの関数の構文は、第 6 章「分析関数」を参照 してください。 集約関数 4-3 一般的な使用方法 一般的な使用方法 集約関数は、ANSI SQL-92 標準に定義されています。値の集合に対する演算を行う ので集合関数と呼ばれたり、値のグループを対象とするので グループ関数と呼ばれ たり、列の値を処理するので列関数呼ばれることもあります。 集約関数は、検索項目リストまたは HAVING 句で使用することができます。1 つの 式には、1 つの集約関数しか使用できません。集約関数を入れ子にする、つまり集 約関数の中で集約関数を使用することはできません。たとえば、次の検索項目リス トはエラーになります。 select max(avg(salary)) 集約関数は、WHERE 句の検索条件では使用できません。 OLAP 関数と RISQL 表示関数は、集約関数の引数としては使用できません。たとえ ば、次の式はエラーになります。 sum(rank() over(order by dollars) sum(rank(dollars)) ただし、RISQL 表示関数の引数として集約関数を使用することは可能です。次の式 は有効です。 rank() over(order by sum(dollars)) rank(sum(dollars)) クエリに集約関数を使用する場合に必要なグループ分けの条件は、7-39 ページ 「GROUP BY 句」を参照してください。 IBM Red Brick Vista を使用して、集約関数を使ったクエリの性能を高速化する方法 の詳細は、『IBM Red Brick Vista User’s Guide』を参照してください。 4-4 SQL Reference Guide AVG AVG AVG 関数は、指定した値集合の平均値を返します。 構文 次に AVG 関数を使った式の構文ダイアグラムを示します。 AVG ( <n_expression> ) ALL DISTINCT <n_expression> 数値です。集約関数や表示関数を参照することはできません。 ALL ALL キーワードは、<n_expression> の重複値を使用して、平均値を 計算します。ALL がデフォルトです。 DISTINCT DISTINCT キーワードは、指定した式から重複値を削除してから、 平均値を計算します。 結果 指定した値集合が空でなければ、AVG は平均値を返します。空の場合は NULL を返 します。 <n_expression> が指数表現を用いないデータ型 (TINYINT、SMALLINT、INTEGER、 DECIMAL) の場合は、AVG の戻り値も指数表現を使用いないデータ型になります。 結果データ型の精度とスケールは、小数点より左の桁数はそのままで、小数点より 右の桁数が 6 桁増やされます。これは、AVG 関数の戻り値が非常に小さくなって も、結果データ型の有効桁数に納まるようにするためです。 集約関数 4-5 AVG 次の表は、<n_expression> のデータ型に応じて AVG 関数が返すデータ型の一覧で す。 <n_expression> のデータ型 結果のデータ型 TINYINT DECIMAL(9,6) SMALLINT DECIMAL(11,6) INTEGER DECIMAL(16,6) SERIAL DECIMAL(16,6) DECIMAL NUMERIC DECIMAL(p,s) p = min(38, <n_expression> の精度 +6) s = min(6, 38 - <n_expression> の精度 ) REAL REAL FLOAT DOUBLE PRECISION FLOAT DOUBLE PRECISION 例 次のクエリは、Demitasse MS の日別売上合計の平均値を返します。 select avg(dollars) as sales_avg from sales join product on sales.classkey = product.classkey and sales.prodkey = product.prodkey where prod_name = 'Demitasse Ms'; SALES_AVG 204.29551820 4-6 SQL Reference Guide COUNT COUNT COUNT 関数は、検索した行の行数を返します。 構文 次に COUNT 関数を使った式の構文ダイアグラムを示します。 COUNT <expression> ( ) ALL DISTINCT * ALL 列名を <expression> に指定し、列名の前に ALL キーワードを指定す る ( またはキーワードを何も指定しない ) と、指定した列に値を持 つ行数が返されます。値が欠落している (NULL 値 ) 行は、カウント されません。 DISTINCT 列名を <expression> に指定し、列名の前に DISTINCT キーワードを 指定すると、指定した列に重複値を持つ行を除外してカウントが行 われます。値が欠落している (NULL 値 ) 行は、カウントされませ ん。 <expression> <expression> が列名の場合、指定した列に値が存在する行数が返さ れます。値が欠落している (NULL 値 ) 行は、カウントされません。 <expression> で、集約関数や表示関数を参照することはできません。 * 引数がアスタリスク (*) の場合、行集合の行数 ( 空集合の場合は 0) が返されます。この関数は、「カウント スター」関数とも呼ばれま す。NULL 値を含む行もカウントされます。 結果 COUNT 関数は、負でない整数を返します。NULL を返すことはありません。 集約関数 4-7 COUNT 例 次のクエリは、Product テーブルの製品数をカウントします。 select count(prod_name) as prod_count from product PROD_COUNT 59 次のクエリは、Product テーブルの一意な製品名をカウントします。 select count(distinct prod_name) as prod_count from product PROD_COUNT 38 ヒント : 2 番目の例は、製品数ではなく、固有の製品名をカウントします。Aroma データベースのコーヒーと紅茶製品は、計り売りとパッケージ入りの製品名が同じ ため、一意な製品数の方が少なくなります。 4-8 SQL Reference Guide MAX MAX MAX 関数は、指定した値集合の最大値を返します。 構文 次に MAX 関数を使った式の構文ダイアグラムを示します。 MAX ( <expression> ) ALL DISTINCT <expression> 集約関数や表示関数を参照することはできません。 ALL 指定した値集合に重複値を残しますが、結果には影響がありませ ん。 DISTINCT 指定した値集合から重複値を除外しますが、結果には影響がありま せん。 結果 指定した値集合が空でなければ、MAX は最大値を返します。空の場合は NULL を返 します。 例 次のクエリは、Coffee Sampler 製品の売上について、dollars 列と quantity 列 ( 日別合 計 ) の最大値を返します。 select max(dollars) as max_dol, max(quantity) as max_qty from product natural join sales where prod_name = 'Coffee Sampler' MAX_DOL MAX_QTY 570.00 19 集約関数 4-9 MIN MIN MIN 関数は、指定した値集合の最小値を返します。 関数 次に MIN 関数を使った式の構文ダイアグラムを示します。 MIN ( <expression> ) ALL DISTINCT <expression> 集約関数や表示関数を参照することはできません。 ALL 指定した値集合に重複値を残しますが、結果には影響がありませ ん。 DISTINCT 指定した値集合から重複値を除外しますが、結果には影響がありま せん。 結果 指定した値集合が空でなければ、MIN は最小値を返します。空の場合は NULL を返 します。 例 次のクエリは、East Coast Roast 店の売上について、dollars 列と quantity 列 ( 日別合計 ) の最小値を返します。 select min(dollars) as min_dol, min(quantity) as min_qty from store natural join sales where store_name = 'East Coast Roast' MIN_DOL MIN_QTY 3.75 1 4-10 SQL Reference Guide SUM SUM SUM 関数は、指定した値集合の合計値を計算します。 構文 次に SUM 関数を使った式の構文ダイアグラムを示します。 SUM <n_expression> ( ) ALL DISTINCT <n_expression> 数値です。集約関数や表示関数を参照することはできません。 ALL 重複値を使用して、合計値を計算します。ALL がデフォルトです。 DISTINCT DISTINCT キーワードは、指定した式から重複値を削除してから、 合計値を計算します。 結果 指定した値集合が空でなければ、SUM は合計値を返します。空の場合は NULL を返 します。 <n_expression> が指数表現を用いないデータ型 (TINYINT、SMALLINT、INTEGER、 DECIMAL) の場合は、SUM の戻り値も指数表現を用いないデータ型になります。 結果データ型の精度は 6 桁増やされます。これは割り当てられた格納領域に納める ためです。 集約関数 4-11 SUM 次の表は、<n_expression> のデータ型に応じて SUM 関数が返すデータ型の一覧で す。 <n_expression> のデータ型 結果のデータ型 TINYINT DECIMAL(9,0) SMALLINT DECIMAL(11,0) INTEGER DECIMAL(16,0) SERIAL DECIMAL(16,0) DECIMAL NUMERIC DECIMAL(p,s) p = min(38、<n_expression> の精度 +6) s = <n_expression> のスケール REAL REAL FLOAT DOUBLE PRECISION FLOAT DOUBLE PRECISION 例 次のクエリは、パッケージ入り紅茶製品の売上を合計した値を返します。 select sum(dollars) as tea_dollars from class natural join product natural join sales where class_type = 'Pkg_tea'; TEA_DOLLARS 510507.25 4-12 SQL Reference Guide 第5章 スカラ関数 この章について . . . . . . . . . . . . . . . . . . . . 5-3 条件付きスカラ関数 . . CASE . . . . . . COALESCE . . . . DECODE . . . . . IFNULL . . . . . NULLIF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-4 5-4 5-8 5-9 5-12 5-13 数値スカラ関数 . . . . ABS . . . . . . CEIL . . . . . . DEC . . . . . . EXP . . . . . . FLOAT . . . . . FLOOR . . . . . INT . . . . . . . LN . . . . . . . REAL . . . . . . SIGN . . . . . . SQRT . . . . . . 統計関数マクロ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-15 5-16 5-17 5-19 5-21 5-22 5-23 5-25 5-27 5-28 5-29 5-30 5-31 文字列スカラ関数 CONCAT . . LENGTH . . LENGTHB . LOWER . . LTRIM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-34 5-35 5-36 5-38 5-39 5-40 . . . . . . . . . . . . . . . . . . POSITION POSITIONB RTRIM . . STRING . SUBSTR . SUBSTRB . TRIM . . UPPER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-42 5-44 5-45 5-47 5-50 5-52 5-54 5-56 日付時間スカラ関数 . . . . . . . . . . . . . . . . 日付時間スカラ関数の日付フィールド . . . . . . . . CURRENT_DATE、CURRENT_TIME、CURRENT_TIMESTAMP DATE . . . . . . . . . . . . . . . . . . . . DATEADD . . . . . . . . . . . . . . . . . . DATEDIFF . . . . . . . . . . . . . . . . . . DATENAME . . . . . . . . . . . . . . . . . . EXTRACT . . . . . . . . . . . . . . . . . . TIME . . . . . . . . . . . . . . . . . . . . TIMESTAMP . . . . . . . . . . . . . . . . . . TO_CHAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-58 5-58 5-60 5-61 5-62 5-63 5-64 5-66 5-68 5-69 5-70 CURRENT_USER 関数 . . 5-73 5-2 SQL Reference Guide . . . . . . . . . . . . . . . この章について RISQL 拡張機能には、1 行ずつ式を処理するスカラ関数が組み込まれています。ス カラ関数は、多項式に使用したり、ほかのスカラ関数で入れ子にすることができま す。第 6 章で説明する OLAP 関数および RISQL 表示関数も、スカラ関数の引数とし て使用できます。 スカラ関数は、次のカテゴリに分類されます。この章では、各カテゴリについて説 明します。 ■ ■ ■ ■ ■ 条件付きスカラ関数 CASE、COALESCE、DECODE、IFNULL、NULLIF CASE、COALESCE、NULLIF は ANSI SQL-92 標準に定義されています。 数値スカラ関数 ABS、CEIL、DEC、EXP、FLOAT、FLOOR、INT、LN、SIGN、SQRT 文字列スカラ関数 CONCAT、LENGTH、LENGTHB、LOWER、LTRIM、POSITION、 POSITIONB、RTRIM、STRING、SUBSTR、SUBSTRB、TRIM、UPPER 日付時間スカラ関数 CURRENT_DATE、CURRENT_TIME、CURRENT_TIMESTAMP、DATE、 DATEADD、DATEDIFF、DATENAME、EXTRACT、TIME、TIMESTAMP、 TO_CHAR CURRENT_USER 関数 : 情報スカラ関数 ヒント : クエリで 0 を除数に使用した場合、エラーと NULL のどちらが返されるか は、ARITHIGNORE オプションの設定で決まります。ARITHIGNORE は、rbw.config ファイルの OPTION ARITHIGNORE を使ってサーバ レベルで設定するか、SET ARITHIGNORE 文を使ってセッションごとに設定することができます (9-8 ページ )。 スカラ関数 5-3 条件付きスカラ関数 条件付きスカラ関数 条件付きスカラ関数は次のとおりです。各関数の戻り値は、関数の引数が条件を満 たすかどうかによって決まります。 条件付きスカラ関 数 説明 CASE 指定した条件のどれに合致しているかに応じて値を返しま す。 COALESCE 指定した値のうち、NULL でない最初の値を返します。 DECODE 対象の値に応じて、値を置き換えます。 IFNULL NULL が存在するかどうかを判定し、値を返します。 NULLIF 2 つの値を比較し、等しい場合は NULL を返します。 CASE CASE 式は、指定した条件のどれに合致しているかに応じて値を返します。 構文 CASE 式にはシンプル形式とサーチ形式の 2 つがあります。 シンプル形式の CASE 式では、WHEN 句の前に最初の <expression> を指定します。 WHEN 句には、任意の数の <expression> と、それに対応する <result> を指定します。 サーチ形式の CASE 式では、WHEN 句に任意の数の <search_conditions> と、各 <search_conditions> に対応する <result> を指定します。 次に両タイプの CASE 式の構文ダイアグラムを示します。上の WHEN 句はシンプル 形式の CASE 式で、下の WHEN 句はサーチ形式の CASE 式です。 5-4 SQL Reference Guide CASE CASE WHEN <expression> WHEN <expression> <search_condition> THEN <result> THEN <result> END ELSE <result> <expression> データ型の異なる <expression> を比較する場合は、正しい暗黙 的な変換が行える必要があります。<expression> のデータ型を 変換する規則は、7-45 ページの 「UNION、INTERSECT、 EXCEPT 演算子」に示す規則と同じです。 <result> 任意の式。データ型の異なる <result> がある場合は、正しい暗 黙的な変換が行える必要があります。<result> のデータ型を変 換する規則は、7-45 ページの 「UNION、INTERSECT、 EXCEPT 演算子」に示す規則と同じです。<result> のデータ型 は <expression> のデータ型と同じでなくてもかまいません。 <result> には、NULL を指定することもできます。ただし、 THEN 句または ELSE 句に NULL でない <result> を最低 1 つ指定 し、CASE 式の戻り値が不定にならないようにしてください。 <search_condition> 真、偽、または不定を評価する倫理条件を指定します。検索条 件の構文は 3-17 ページ「検索条件」を参照してください。 スカラ関数 5-5 CASE 結果 シンプル形式の CASE 式は、WHEN 句に指定した各 <expression> の値を最初の <expression> の値と比較します。WHEN 句の <expression> は、指定した順に評価さ れます。比較した結果が等しければ、それに応じた <result> が返され、処理が終了 します。 サーチ形式の CASE 式は、<search_condition> を指定した順に評価します。検索条件 が真と評価されれば、それに応じた <result> が返され、処理が終了します。 シンプル形式、サーチ形式のどちらも、WHEN 句の条件が 1 つも満たされなけれ ば、ELSE 句に指定した <result> の値を返します。ELSE 句を指定しなかった場合の デフォルトの戻り値は NULL です。 使用上の注意 シンプル形式の CASE 式は、機能的には DECODE 関数と同じですが、ANSI SQL-92 標準に準拠している CASE を使用することをお勧めします。 シンプル形式の CASE 式はサーチ形式でも表現できますが、最初の <expression> を 1 度しか評価しないという最適化が図られます。シンプル形式の CASE 式の方が高 速になるため、シンプル形式を使用することをお勧めします。 例 次のクエリは、クエリから返される四半期の値をわかりやすい文字列に置き換える シンプル形式の CASE 式の例です。 select case qtr when 'Q1_98' then '1st Quarter' when 'Q2_98' then '2nd Quarter' when 'Q3_98' then '3rd Quarter' when 'Q4_98' then '4th Quarter' end as Period, sum (dollars) as results from sales natural join period where year = 1998 group by qtr PERIOD 1st Quarter 2nd Quarter 3rd Quarter 4th Quarter 5-6 SQL Reference Guide RESULTS 723532.35 756282.05 778795.20 782359.05 CASE 次のクエリは、1 つの列 (Dollars) について 2 種類の合計値を返すサーチ形式の CASE 式の例です。 select year, sum (case when region = 'West' then dollars else 0 end) as West_Region, sum (case when ((region = 'Central') or (region = 'North') or (region = 'South')) then dollars else 0 end) as Other_Regions from sales, store, market, period where sales.perkey = period.perkey and sales.storekey = store.storekey and store.mktkey = market.mktkey group by year order by year YEAR 1998 1999 2000 WEST_REGION 1164414.20 1195795.10 296379.45 OTHER_REGIONS 1876554.45 2084195.95 511010.95 CASE 式の例は、『SQL Self-Study Guide』を参照してください。 スカラ関数 5-7 COALESCE COALESCE COALESCE 関数は、NULL でない最初の引数の値を返します。 COALESCE 関数は、CASE 関数の特殊な用法の省略形として ANSI で定義されたも のなので、CASE 関数で表すことができます。 構文 次に COALESCE 関数を使った式の構文ダイアグラムを示します。 , COALESCE ( <expression> <expression> , <expression> ) 2 つの式のデータ型が異なる場合は、正しい暗黙的な変換が行える 必要があります。<expression> のデータ型を変換する規則は、 7-45 ページ に示す UNION 演算の規則と同じです。2 つ以上の式を 指定する必要があります。 結果 COALESCE 関数は各引数の値を指定した順に評価し、NULL でない最初の引数の値 を返します。すべての引数が NULL の場合は、NULL を返します。 例 次の COALESCE 式は、1 つの Date 列をリザルト セットに返します。 coalesce(orders.close_date, line_items.receive_date) as date 5-8 SQL Reference Guide DECODE DECODE DECODE 関数は、式を比較してほかの値に変換します。 ヒント : シンプル形式の CASE 式は、DECODE 関数と機能的には同じですが、 ANSI SQL-92 標準に準拠している CASE を使用することをお勧めします。 構文 次に DECODE 関数を使った式の構文ダイアグラムを示します。 , DECODE ( <expression> , <target> , <replacement> NULL, ) , <default> <expression> 任意のデータ型を指定できます。 <target> 第 1 引数 <expression> と同じデータ型にする必要があります。 <replacement> 任意のデータ型を指定できますが、すべてを同じデータ型にする必 要があります。 <default> 指定する場合は、<replacement> と同じデータ型にする必要がありま す。 結果 <expression> が <target> と一致すれば、対応する <replacement> に置き換えられます。 一致しなければ、<default> に置き換えられます。<default> を指定しなかった場合 は、NULL が代入されます。 ヒント : 最初の <expression> に指定する値として、<default> を指定することもでき ます。このように指定した場合、<expression> が <target> と一致しないときは、置き 換えられません。 <expression> が文字列の場合、結果の最大サイズは <replacement> の最大サイズにな ります。<expression> が数値の場合、結果のデータ型は、精度が最大の <replacement> と同じ精度になります。 値の欠落は、NULL ( 引用符なしの 4 文字リテラル ) を <target> に指定することで検 出できます。NULL に対応する <replacement> も指定してください。 スカラ関数 5-9 DECODE 例 次のクエリは、Los Angeles における製品別の総販売数量を返します。 select prod_name, sum (decode (city, 'Los Angeles', dollars, 0.0)) as LA from store sr, product pr, period pd, sales sl where sl.storekey = sr.storekey and sl.classkey = pr.classkey and sl.prodkey = pr.prodkey and sl.perkey = pd.perkey and year = 1998 group by prod_name PROD_NAME Aroma Roma Aroma Sheffield Steel Teapot Aroma Sounds CD Aroma Sounds Cassette Aroma baseball cap Aroma t-shirt Assam Gold Blend Assam Grade A Breakfast Blend Cafe Au Lait Christmas Sampler Coffee Mug ... LA 1989 51 177 180 440 529 791 898 832 1339 4 39 city の値が Los Angeles であれば、対応する dollar の値が返されます。そうでなけれ ば、0.0 が返されます。この DECODE 関数の例における構文の各要素の指定は、次 のとおりです。 ■ ■ ■ ■ 5-10 city = <expression> 'Los Angeles' = <target> dollars = <replacement> 0.0 = <default> SQL Reference Guide DECODE 次のクエリは、クエリから返される Quarter 列の値を記述的な文字列に変換します。 select decode(qtr, 'Q1_98', '1st Quarter', 'Q2_98', '2nd Quarter', 'Q3_98', '3rd Quarter', 'Q4_98', '4th Quarter') as Period, sum(dollars) as results from sales, period where sales.perkey = period.perkey and year = 1998 group by qtr PERIOD 1st Quarter 2nd Quarter 3rd Quarter 4th Quarter RESULTS 723532.35 756282.05 778795.20 782359.05 スカラ関数 5-11 IFNULL IFNULL IFNULL 関数は、式を評価して値の欠落の有無をチェックし、指定した値に置き換 えます。 IFNULL 関数は、COALESCE 関数の特殊な用法ですが、ANSI SQL-92 標準に準拠し ている COALESCE を使用することをお勧めします。 構文 次に IFNULL 関数を使った式の構文ダイアグラムを示します。 IFNULL ( <expression> ,<substitute> ) <expression> <expression> は、任意のデータ型です。 <substitute> <expression> と比較可能なデータ型である必要があります。 <expression> 引数と <substitute> 引数のデータ型が異なる場合は、正 しい暗黙的な変換が行える必要があります。<expression> のデータ 型を変換する規則は 7-49 ページ「データ型の変換」に示す規則と同 じです。 結果 <expression> が NULL の場合は、<substitute> が返されます。NULL でない場合は、 <expression> の値が返されます。 <expression> と <substitute> のデータ型が同じ場合は、結果も同じデータ型になりま す。<expression> と <substitute> のデータ型が異なる場合、結果は暗黙的な変換の データ型になります。 例 ■ ■ 5-12 ifnull(market, 'New City')- NULL を New City に置き換えます。 ifnull(dollars, 0.0) - Dollars 列の NULL を 0.0 に置き換えます。 SQL Reference Guide NULLIF NULLIF NULLIF 関数は 2 つの式を比較し、値が等しい場合は NULL を返します。等しくな ければ、最初の式の値が返されます。 構文 次に NULLIF 関数を使った式の構文ダイアグラムを示します。 NULLIF ( <expression>, <expression> <expression>, <expression> ) 2 つの式のデータ型が異なる場合は、正しい暗黙的な変換が行える 必要があります。<expression> のデータ型を変換する規則は、 7-45 ページ に示す UNION 演算の規則と同じです。 結果 NULLIF 関数は、2 つの式の値が等しければ NULL を返します。等しくなければ、 最初の式の値を返します。 使用上の注意 NULLIF 関数を用いて除算を行うクエリで 0 を NULL に置き換えることで、0 で除算 が行われるのを避けることができます。これは、SET ARITHIGNORE 文を使って行 うこともできます。詳細は、9-8 ページ「SET ARITHIGNORE、ARITHABORT」を 参照してください。 スカラ関数 5-13 NULLIF 例 次のクエリは、City 列が San Jose でなければ City 列の値を返し、San Jose な らば NULL を返します。 select prod_name, nullif(city, 'San Jose') as not_SJ, sum(dollars) as totals from sales sl, store st, product pr, class cl where cl.classkey = pr.classkey and sl.classkey = pr.classkey and sl.prodkey = pr.prodkey and sl.storekey = st.storekey and class_type like 'Gifts%' group by prod_name, city order by prod_name PROD_NAME Aroma Sounds CD Aroma Sounds CD Aroma Sounds CD Aroma Sounds CD Aroma Sounds Cassette Aroma Sounds Cassette Aroma Sounds Cassette Aroma Sounds Cassette Christmas Sampler Christmas Sampler Christmas Sampler Christmas Sampler ... 5-14 SQL Reference Guide NOT_SJ Miami NULL Atlanta Los Angeles Los Angeles NULL Atlanta Miami Atlanta Los Angeles NULL Miami TOTALS 2883.00 4480.00 4329.00 4087.00 2786.50 2795.50 2640.00 3420.50 210.00 270.00 1140.00 300.00 数値スカラ関数 数値スカラ関数 数値スカラ関数は、数値表現式か、数値を表す文字式を処理します。数値スカラ関 数は次のとおりです。 数値スカラ関数 説明 ABS 数値表現式の絶対値を返します。 CEIL 数値表現式の値を下回らない最小の整数値を返します。 DEC 文字または数値データ型を DECIMAL 型に変換します。 EXP 関数引数の指数値を返します。つまり、EXP(x) は ex=y とな る y の値を返します (e = 2.71828183)。 FLOAT 文字または数値データ型を FLOAT 型に変換します。 FLOOR 数値表現式の値を上回らない最大の整数値を返します。 INT 文字または数値データ型を INTEGER 型に変換します。 LN 関数引数の自然対数を返します。つまり、LN(y) は ex=y とな る x の値を返します (e=2.71828183)。 REAL 指定した値を REAL データ型に変換します。 SIGN 数値表現式の符号を返します。 SQRT 関数引数の平方根を返します。 スカラ関数 5-15 ABS ABS ABS 関数は、数値表現式の絶対値を返します。 構文 次に ABS 関数を使った式の構文ダイアグラムを示します。 ABS ( <expression> <expression> ) 数値データ型または文字データ型を使用できます。文字列式の場合 は、数値を表す式である必要があります。 '19.2'- 有効 'RAJ'- 無効 結果 引数のデータ型が、REAL、FLOAT、DOUBLE PRECISION、DECIMAL、NUMERIC のいずれかである場合は、入力したデータ型で絶対値を計算して返します。 引数のデータ型が、INTEGER、SMALLINT、TINYINT の場合は、絶対値を計算し て整数で返します。 引数が数値を表す文字列である場合は、その値を倍精度の浮動小数点数値に変換し て絶対値を計算し、倍精度の浮動小数点数値で返します。数値を表さない文字列の 場合は、エラーになります。引数が NULL の場合は、NULL が返されます。 例 次のクエリは、DECIMAL 型の列 (numvalue) の絶対値を抽出し、文字データ型の列 (stringnum) の絶対値に加算します。 select numvalue, stringnum, (abs(numvalue) + abs(stringnum)) as total from table_1 numvalue -9.45 -2.05 5-16 SQL Reference Guide stringnum total 8.30 17.75 -8.05 10.10 CEIL CEIL CEIL 関数は、引数の値を下回らない最小の整数値を返します。 構文 次に CEIL 関数を使った式の構文ダイアグラムを示します。 CEIL <expression> ( <expression> ) 数値データ型または文字データ型の式を使用できます。文字列式の 場合は、数値を表す式である必要があります。 '19.2'- 有効 'RAJ'- 無効 結果 引数のデータ型が、REAL、FLOAT、DOUBLE PRECISION、DECIMAL、NUMERIC の場合は、入力したデータ型で CEIL を計算して返します。 引数のデータ型が、INTEGER、SMALLINT、TINYINT の場合は、入力したデータ 型を変えずに引数の値をそのまま返します。 引数が数値を表す文字列の場合は、その値を倍精度の浮動小数点数値に変換して CEIL を計算し、倍精度の浮動小数点数値で返します。数値を表さない文字列の場 合は、エラーになります。 引数が NULL の場合は、NULL が返されます。 スカラ関数 5-17 CEIL 例 次のクエリは、品目別価格を算出し、CEIL 関数を使ってそれを下回らない最小の 整数値に切り上げます。 select distinct prod_name, store_name, ceil(dollars/quantity) as price from product natural join sales natural join period natural join store where year = 2000 and month = 'MAR' and prod_name like 'Xalapa Lapa%' 5-18 prod_name store_name price Xalapa Xalapa Xalapa Xalapa Xalapa Xalapa Xalapa Xalapa Xalapa Xalapa Xalapa Xalapa Xalapa Xalapa Xalapa Xalapa Xalapa Xalapa Xalapa Xalapa Xalapa Beaches Brew Beans of Boston Coffee Brewers Coffee Connection Cupertino Coffee Supply East Coast Roast Instant Coffee Instant Coffee Instant Coffee Java Judy’s Miami Espresso Minnesota Roaster Minnesota Roaster Moon Pennies Moroccan Moods Moulin Rouge Roasting Olympic Coffee Company Roasters, Los Gatos San Jose Roasting Company Texas Teahouse The Coffee Club 9 9 9 9 9 9 7 8 9 9 9 8 9 9 9 9 9 9 9 9 9 SQL Reference Guide Lapa Lapa Lapa Lapa Lapa Lapa Lapa Lapa Lapa Lapa Lapa Lapa Lapa Lapa Lapa Lapa Lapa Lapa Lapa Lapa Lapa DEC DEC DEC 関数は、指定した値を DECIMAL データ型の値に変換します。 構文 次に DEC 関数を使った式の構文ダイアグラムを示します。 DEC ( <expression> ) , <precision> DECIMAL , <scale> <expression> 数値データ型または文字データ型の式を使用できますが、数値を表 す式である必要があります。 '19.2'- 有効 'RAJ'- 無効 <precision> 変換後の DECIMAL 値の精度を指定します。指定できる範囲は 1 ∼ 38 です。デフォルトは 9 です。 <scale> 変換後の DECIMAL 値のスケールを指定します。指定できる範囲 は、0 から <precision> に指定した値までです。デフォルトは 0 です。 結果 この関数は 10 進数 (DECIMAL ) 型 (<precision>、<scale>) で指定した値を返します。 引数が NULL のときは NULL を返します。数値を表す CHARACTER または VARCHAR データ型の式を引数として指定した場合は、DECIMAL データ型に変換 されます。数値を表さない式の場合は、エラーになります。 <expression> に指定した値が大きすぎるために、有効桁 ( 小数点より左の桁 ) を切り 捨てないと DECIMAL (<precision>、<scale>) で表現できない場合は、"out of range ( 有効範囲外 )" エラーになります。小数点より右の桁を切り捨てないと、指定した DECIMAL (<precision>、<scale>) データ型で表現できない場合は、エラーになりま せん。 スカラ関数 5-19 DEC 例 次の式は、10 進数値 40000.00 を返します。 DEC('40E3',7,2) SELECT 文での DEC 関数の例は、『SQL Self-Study Guide』を参照してください。 5-20 SQL Reference Guide EXP EXP EXP 関数は、関数引数の指数値を返します。つまり、EXP (x) は ex=y となる y の値 を返します (e = 2.71828183)。 構文 次に EXP 関数を使った式の構文ダイアグラムを示します。 EXP <expression> ( <expression> ) <expression> のデータ型は数値を表すものである必要があります。 '19.2'- 有効 -8.634E2- 有効 'RAJ'- 無効 結果 この関数は DOUBLE PRECISION 型の値を返します。 <expression> のデータ型が TINYINT、SMALLINT、INTEGER、REAL、FLOAT、 DECIMAL、NUMERIC のいずれかである場合は DOUBLE PRECISION 型に変換され ます。 <expression> のデータ型が、数値を表す CHARACTER または VARCHAR 式の場合 は、EXP 関数は、この値を倍精度の浮動小数点数値に変換し、指数値を計算し、倍 精度の指数値として返します。文字列が数値を表していない場合はサーバがエラー メッセージを返します。引数が NULL のときは NULL を返します。 結果がオーバーフローして、DOUBLE PRECISION データ型で表現できない場合は、 エラーになります。 例 次の式は、e の 2 乗である 7.389056 を返します (e = 2.71828183)。 EXP(2.0) スカラ関数 5-21 FLOAT FLOAT FLOAT 関数は、指定した値を倍精度の浮動小数点数値に変換します。 構文 次に FLOAT 関数を使った式の構文ダイアグラムを示します。 FLOAT <expression> ( <expression> ) 数値データ型または文字データ型の式を使用できますが、数値を表 す式である必要があります。 '19.2'- 有効 'RAJ'- 無効 結果 この関数は DOUBLE PRECISION 型の値を返します。引数が NULL のときは NULL を返します。 数値を表す CHARACTER または VARCHAR データ型の式を引数として指定した場 合は、浮動小数点数値に変換されます。または数値を表さない式の場合は、エラー になります。 引数のデータ型が TINYINT、SMALLINT、INTEGER、REAL、FLOAT、DECIMAL、 NUMERIC のいずれかである場合は DOUBLE PRECISION 型に変換されます。 結果がオーバーフローして、DOUBLE PRECISION データ型で表現できない場合は、 エラーになります。 ヒント : 浮動小数点数値のリザルト セット内での表示方法は、クライアント ツー ルのフォーマット設定機能によって異なります。たとえば、RISQL Reporter のユー ザは SET COLUMN <column_name> FORMAT 文を使用して、表示フォーマットを EXPONENTIAL に設定することができます。 例 次の例は、指数表記が指定された場合、浮動小数点値 -1.969893967E+07 を返します。 float('-19698939.67') 5-22 SQL Reference Guide FLOOR FLOOR FLOOR 関数は、引数の値を上回らない最大の整数値を返します。 構文 次に FLOOR 関数を使った式の構文ダイアグラムを示します。 FLOOR <expression> ( <expression> ) 数値データ型または文字データ型の式を使用できますが、数値を表 す式である必要があります。 '19.2'- 有効 'RAJ'- 無効 結果 引数のデータ型が、REAL、FLOAT、DOUBLE PRECISION、DECIMAL、NUMERIC の場合は、入力したデータ型で FLOOR を計算して返します。 引数のデータ型が、INTEGER、SMALLINT、TINYINT の場合は、入力したデータ 型を変えずに引数の値をそのまま返します。 引数が数値を表す文字列の場合は、その値を倍精度の浮動小数点数値に変換して FLOOR を計算し、倍精度の浮動小数点数値で返します。数値を表さない文字列の 場合は、エラーになります。 引数が NULL の場合は、NULL が返されます。 スカラ関数 5-23 FLOOR 例 次のクエリは、品目別価格を算出し、それを上回らない最大の整数値に切り捨てます。 select prod_name, store_name, floor(dollars/quantity) as price from product natural join sales natural join period natural join store where date = '03-31-2000' and prod_name like 'Xalapa Lapa%' PROD_NAME Xalapa Lapa Xalapa Lapa 5-24 SQL Reference Guide STORE_NAME Instant Coffee Moroccan Moods PRICE 8 9 INT INT INT 関数は、指定した数値列を整数値に変換します。 構文 次に INT 関数を使った式の構文ダイアグラムを示します。 INT ( ( <expression> ) INTEGER <expression> 数値データ型または文字データ型の式を使用できますが、数値を表 す式である必要があります。 '19.2'- 有効 'RAJ'- 無効 結果 INT 関数は、INTEGER データ型の値を返します。引数が NULL のときは NULL を返 します。算出値の長さが INTEGER データ型の長さを超える場合は、「out of range ( 有効範囲外 )」エラーになります。 引数が数値を表す文字列の場合は、整数に変換されます。数値を表さない式の場合 は、エラーになります。 引数が TINYINT データ型または SMALLINT データ型の値の場合は、先頭に空白を 充填した整数が返されます。 引数の値が小桁実数 (REAL) 型、実数 (FLOAT) 型、実数 (DOUBLE PRECISION) 型、 10 進数 (DECIMAL) 型、10 進数 (NUMERIC) 型の場合は、スケールが切り捨てられ ます。切り捨て値の長さが INTEGER データ型の長さを超える場合は、 「out of range ( 有効範囲外 )」エラーになります。 例 次の式は、整数 197 を返します。 int('197.665') スカラ関数 5-25 INT 次のクエリは、dollars 列の値から小数点以下の桁を削除します。 select int(dollars) as no_cents from sales join product using (classkey, prodkey) join period using (perkey) where prod_name like 'Vera%' and month = 'FEB' and year = 2000 NO_CENTS 88 96 72 48 144 48 64 ... 次のクエリは、RISQL 表示関数 (CUME) 内で入れ子にされた INT 関数の例です。 select cume(int(price)) as price, line_item from line_items where order_no = 3600 order by line_item PRICE 180 480 720 960 1200 LINE_ITEM 1 2 3 4 5 RISQL 表示関数および OLAP 関数を、スカラ関数で入れ子にすることもできます。 たとえば、次のようになります。 select int(cume(price)) as price, line_item from line_items where order_no = 3600 order by line_item 5-26 SQL Reference Guide LN LN LN 関数は、関数引数の自然対数を返します。つまり、LN (y) は ex=y となる x の値を 返します (e= 2.71828183)。 構文 次に LN 関数を使った式の構文ダイアグラムを示します。 LN <expression> ( ( <expression> ) データ型は数値を表すものである必要があります。 '19.2'- 有効 'RAJ'- 無効 結果 この関数は DOUBLE PRECISION 型の値を返します。引数が NULL のときは NULL を返します。算出値の長さが DOUBLE PRECISION データ型の長さを超える場合は、 「out of range ( 有効範囲外 )」エラーになります。 引数の値のデータ型が TINYINT、SMALLINT、INTEGER、REAL、FLOAT、 DECIMAL、NUMERIC のいずれかである場合は DOUBLE PRECISION 型に変換され ます。 引数が 0 または負のときの動作は、ゼロ除算処理と同様、ARITHIGNORE または ARITHABORT の設定に従います。ARITHIGNORE が on ( または ARITHABORT が off) の場合、負の引数の LN を算出した結果として、サーバは NULL を返します。 ARITHIGNORE が off ( または ARITHABORT が on) の場合、サーバはエラーメッ セージを生成します。ARITHIGNORE および ARITHABORT の設定の詳細は、 9-8 ページを参照してください。 引数が正の数を表す文字式のときは、それを倍精度の浮動小数点数に変換します。 それ以外の場合は、サーバがエラーメッセージを返します。 例 次の式は、3.22 を返します (e3.22 = 25; e = 2.71828183)。 ln(25.0) スカラ関数 5-27 REAL REAL REAL 関数は、指定した値を REAL データ型の値に変換します。 構文 次に REAL 関数を使った式の構文ダイアグラムを示します。 REAL <expression> ( <expression> ) 数値データ型または文字データ型の式を使用できますが、数値を表 す式である必要があります。 '19.2'- 有効 'RAJ'- 無効 結果 REAL 関数は、REAL データ型の値を返します。引数が NULL のときは NULL を返 します。 数値を表す CHARACTER または VARCHAR データ型の式を引数として指定した場 合は、REAL 型に変換されます。または数値を表さない式の場合は、エラーになり ます。 引数のデータ型が TINYINT、SMALLINT、INTEGER、FLOAT、REAL、DECIMAL、 NUMERIC のいずれかである場合は REAL 型に変換されます。 結果がオーバーフローして、REAL データ型で表現できない場合は、エラーになり ます。 例 次の式は、5-22 ページで述べたように指数表記を指定した場合、浮動小数点数値の -1.9698940E+07 を返します。 real('-19698939.67') 5-28 SQL Reference Guide SIGN SIGN SIGN 関数は、整数値の符号 (+ または -) を返します。 構文 次に SIGN 関数を使った式の構文ダイアグラムを示します。 SIGN ( <expression> <expression> ) 数値データ型または文字データ型の式を使用できますが、数値を表 す式である必要があります。 '19.2'- 有効 'RAJ'- 無効 結果 SIGN 関数は式の符号を判定し、正数の場合は 1、負数の場合は -1、ゼロの場合は 0 を返します。戻り値は、INT データ型です。 引数が数値を表さない CHARACTER または VARCHAR データ型の式の場合は、エ ラーになります。 引数が NULL の場合は、NULL が返されます。 例 select numvalue, sign(numvalue) from numtable; numvalue 22.89 -90.03 0 sign(numvalue) 1 -1 0 スカラ関数 5-29 SQRT SQRT SQRT 関数は、関数引数の平方根を返します。 構文 次に SQRT 関数を使った式の構文ダイアグラムを示します。 SQRT <expression> ( ( <expression> ) データ型は数値を表すものである必要があります。 '19.2'- 有効 'RAJ'- 無効 結果 この関数は DOUBLE PRECISION 型の値を返します。引数が NULL のときは NULL を返します。算出値の長さが DOUBLE PRECISION データ型の長さを超える場合は、 「out of range ( 有効範囲外 )」エラーになります。 引数の値のデータ型が TINYINT、SMALLINT、INTEGER、REAL、FLOAT、 DECIMAL、NUMERIC のいずれかである場合は DOUBLE PRECISION 型に変換され ます。 引数が負のときの動作は、ゼロ除算処理と同様、ARITHIGNORE または ARITHABORT の設定に従います。ARITHIGNORE が on ( または ARITHABORT が off) の場合、負の引数の平方根を算出した結果として、サーバは NULL を返します。 ARITHIGNORE が off ( または ARITHABORT が on) の場合、サーバはエラーメッ セージを生成します。ARITHIGNORE および ARITHABORT の設定の詳細は、第 9 章を参照してください。 引数が数値を表す文字式の場合、SQRT 関数は引数を倍精度の浮動小数点数に変換 後、平方根の値を計算し、結果を倍精度の値として返します。文字列が数値を表し ていない場合はサーバがエラーメッセージを返します。 例 次の式は、5.000 を返します。 sqrt(25.0) 5-30 SQL Reference Guide 統計関数マクロ 統計関数マクロ 次のマクロは統計上使用される関数です。ほとんどが EXP、LN、SQRT スカラ関数 を使用して作成されています。 ■ ■ ■ ■ ■ 累乗 対数 (log) 常用対数 (log 10) 常用対数 (log 10) ❑ 祖集団値 ❑ 標準偏差推定サンプル 分散 ❑ 祖集団値 ❑ 推定祖集団分散の不偏サンプル これらのマクロについて説明します。 累乗 次のマクロは x を y 乗した値を計算します。 create macro power(x, y) as (exp( (y) * ln((x)) )); 対数 (log) 次のマクロは y を底とする数値 x の対数を計算します。 create macro log(x, y) as ( ln ((x)) / ln((y)) ); 常用対数 (log 10) 次のマクロは 10 を底とする数値 x の対数を計算します。 create macro log10(x) as ( ln((x)) / ln(10) ); 祖集団の標準偏差 祖集団値の標準偏差は次のように計算されます。 σ = [Â(xi-m)2/N]1/2 m は祖集団の中間値を、N は祖集団の規模を表します。 スカラ関数 5-31 統計関数マクロ 次のマクロは、<col_name> に指定された、祖集団値の標準偏差を計算します。 create macro stddev(<col_name>) as sqrt( abs(( sum((<col_name>) * (<col_name>)) ((sum((<col_name>)) * sum((<col_name>))) / count((<col_name>))) ) / count((<col_name>))) ); 祖集団の標準偏差推定サンプル 祖集団の標準偏差推定サンプルは次のように計算されます。 σ = [Â(xi-xbar)2/n-1]1/2 xbar はサンプルの中間値を、n はサンプルの規模を表します。 次のマクロは、<col_name> に指定された、祖集団値の標準偏差の推定サンプルを計 算します。 create macro population_stddev(<col_name>) as sqrt( abs(((count((<col_name>)) * sum((<col_name>) * (<col_name>))) (sum((<col_name>)) * sum((<col_name>)))) / (count((<col_name>)) * (count((<col_name>)) - 1))) ); 分散 祖集団値の分散は次のように計算します。 σ2 = Â(xi-m)2/N m は祖集団の中間値を、N は祖集団の規模を表します。 次のマクロは、<col_name> に指定された祖集団値の分散を計算します。 create macro variance(<col_name>) as ( (sum((<col_name>) * (<col_name>)) ((sum((<col_name>)) * sum((<col_name>))) / count((<col_name>)))) / count((<col_name>)) ); 推定祖集団分散の不偏サンプル 推定祖集団分散の不偏サンプルは次のように計算されます。 σ2 = [Â(xi-xbar)2/n-1]1/2 xbar はサンプルの中間値を、n はサンプルの規模を表します。 5-32 SQL Reference Guide 統計関数マクロ 次のマクロは、<col_name> に指定された推定祖集団分散の不偏サンプルを計算しま す。 create macro population_variance(<col_name>) as ( ((count((<col_name>)) * sum((<col_name>) * (<col_name>))) (sum((<col_name>)) * sum((<col_name>)))) / (count((<col_name>)) * (count ((<col_name>)) - 1)) ); 例 次のクエリは stddev マクロを使用し、1999 年第 1 四半期中の西地区における紅茶 "Earl Gray" の平均売上の標準偏差を計算します。 select store_name, sum(dollars) as Sales, avg(dollars) as AvgSales, stddev(dollars) as S_Dev from period natural join sales natural join store natural join market natural join product where region = 'West' and prod_name = 'Earl Grey' and qtr='Q1_99' and year = 1999 group by qtr, store_name order by qtr, store_name; STORE_NAME SALES Beaches Brew 1159.50 Cupertino Coffee Supply 628.50 Instant Coffee 717.50 Java Judy’s 595.50 Roasters, Los Gatos 911.00 San Jose Roasting Company 395.00 AVGSALES S_DEV 39.98275862 15.35 28.56818181 15.93 42.20588235 14.92 35.02941176 18.34 41.40909090 18.13 28.21428571 15.64 スカラ関数 5-33 文字列スカラ関数 文字列スカラ関数 数値データ型の値を文字列に変換する STRING 関数を除き、文字列スカラ関数は文 字列を処理します。シングルバイトおよびマルチバイトの文字処理をサポートしま す。 文字列スカラ関数は次のとおりです。 5-34 文字列スカラ関数 説明 CONCAT 文字列を連結します。 LENGTH 文字列内の文字数を計算します。 LENGTHB 文字列のバイト数を計算します。 LOWER 文字列を小文字に変換します。 LTRIM 先頭の空白を削除します。 POSITION 検索文字列での文字の論理位置を判断します。 POSITIONB 検索文字列での文字のバイト位置を判断します。 RTRIM 末尾の空白を削除します。 STRING 数値データ型を CHARACTER データ型に変換します。 SUBSTR 部分文字列を抽出します。 Substrb 文字列から部分文字列をバイト数で抽出します。 TRIM 先頭と末尾の空白を削除します。 UPPER 文字列を大文字に変換します。 SQL Reference Guide CONCAT CONCAT CONCAT 関数は、文字列を連結します。 構文 次に CONCAT 関数を使った式の構文ダイアグラムを示します。 , CONCAT ( <c_expression> , <c_expression> ) <c_expressions> 文字データ型の式です。この引数は、シングルバイトとマルチバイ トのどちらでも、任意の数を指定できます。 結果 すべての引数が NULL でない文字式の場合は、各引数を連結した文字列が返されま す。引数に NULL がある場合は、NULL が返されます。 返される文字列の最大長は、各引数の最大バイト数の合計になりますが、1,024 バ イトを超えることはできません。実際の長さは、各引数の実際の長さの合計と等し くなります。文字列の最大長を短くするには、SUBSTR、TRIM、LTRIM、RTRIM の関数を使います。 例 次のクエリは、4 つの異なる列の文字列を連結します。 select concat(hq_city, ' ', hq_state, ' ', district, ' ', region) from market where region = 'West' or region = 'North' New York Philadelphia Boston Hartford San Jose San Francisco ... NY PA MA CT CA CA New York New York Boston Boston San Francisco San Francisco North North North North West West スカラ関数 5-35 LENGTH LENGTH LENGTH 関数は文字列の文字数を計算します。 構文 次に LENGTH 関数を使った式の構文ダイアグラムを示します。 LENGTH ( <c_expression> ) <c_expression> 文字を表すデータ型である必要があります。 結果 引数が NULL でない場合、この関数は引数文字列内の文字数を指定する整数を返し ます。引数が NULL のときは NULL を返します。 VARCHAR 列の長さには末尾の空白が含まれます。 CHARACTER 列の長さは CREATE TABLE 文で指定されている長さです。TRIM、 LTRIM、RTRIM 関数で、文字列中の文字の長さが分かります。 重要 : LENGTH 関数が返すのは文字列内の文字数であり、バイト数ではありません。 例 次のクエリは、Market テーブル内の地区名の長さを文字単位で返します。TRIM や SUBSTR といった関数を使用して文字列の最大の長さを短くしていないため、この クエリは文字列の長さの最大値を返します。 select distinct district, length(district) as char_len from market; DISTRICT Atlanta Boston Chicago Los Angeles Minneapolis New Orleans New York San Francisco 5-36 SQL Reference Guide CHAR_LEN 20 20 20 20 20 20 20 20 LENGTH 次のクエリは、Market テーブル内で最も長い地区名を返します。TRIM 関数を使用 しているため、文字列の最大の長さではなく、それぞれの地区名を形成する実際の 文字数が考慮されます。 select distinct district from market where length(trim(district)) = (select max(length(trim(district))) from market) DISTRICT San Francisco スカラ関数 5-37 LENGTHB LENGTHB LENGTHB 関数は文字列内のバイト数を計算します。 構文 次に LENGTH 関数を使った式の構文ダイアグラムを示します。 LENGTHB ( <c_expression> ) <c_expression> 文字を表すデータ型である必要があります。 結果 引数が NULL でない場合、<c_expression> のバイト数を指定する整数を返します。 引数が NULL のときは NULL を返します。 LENGTHB 関数が返すのは文字列内のバイト数であり、文字数ではありません。文 字列内の文字数に戻る場合は、LENGTH 関数を使います。 例 可変バイト長のマルチバイト コード セットを使用して次のクエリを実行すると、 文字列中のバイト数が返されます。この文字列で、0 ∼ 9 の数字はシングルバイト 長、Xx および Yy 文字はダブルバイト長、Zzz 文字は 3 バイト長です。 select lengthb ('12XxYyZzz3') as 'length in bytes' from test 10 LENGTH 関数は、文字列中の文字数である 6 を返します。 5-38 SQL Reference Guide LOWER LOWER LOWER 関数は、文字列を小文字に変換します。 構文 次に LOWER 関数を使った式の構文ダイアグラムを示します。 LOWER ( <c_expression> ) <c_expression> 文字を表すデータ型である必要があります。 結果 引数が NULL でない場合は、文字列が小文字に変換されます。NULL の場合は、 NULL が返されます。 例 次のクエリは M で始まる都市名を Market テーブルから返します。リザルト テーブ ルには大文字と小文字が混在した都市名 ( テーブルにロードした時の状態 ) が表示 されます。 select hq_city from market where hq_city like 'M%' HQ_CITY ----------Miami Minneapolis Milwaukee 次のクエリは、LOWER 関数を使って都市名を小文字で表示します。 select lower(hq_city) as lower_city from market where hq_city like 'M%' LOWER_CITY ----------miami minneapolis milwaukee スカラ関数 5-39 LTRIM LTRIM LTRIM 関数は、文字列の先頭の空白の位置を移動します。マルチバイトの空白は、 シングルバイトの空白と同じ方法で処理されます。 構文 次に LTRIM 関数を使った式の構文ダイアグラムを示します。 LTRIM ( <c_expression> ) <c_expression> 文字を表すデータ型である必要があります。 結果 引数が NULL でない場合は、文字列から先頭の空白が削除されます。NULL の場合 は、NULL が返されます。 結果の最大長は、引数の最大長になります。 使用上の注意 CHAR 列と出力データは常に固定長であるため、指定の長さを満たすために空白が 追加されます。CHAR 列または出力列幅の短縮に LTRIM は使用できません。 例 次の式は、Market 列から先頭の空白を削除します。 ltrim(market) 5-40 SQL Reference Guide LTRIM 次のクエリは、Hq_City 列と District 列から先頭の空白を削除します。 select concat( ltrim(hq_city), ltrim(district)) as mkt_district from market where region in ('South', 'North') MKT_DISTRICT Atlanta Miami New Orleans Houston New York Philadelphia Boston Hartford Atlanta Atlanta New Orleans New Orleans New York New York Boston Boston スカラ関数 5-41 POSITION POSITION POSITION 関数はソース文字列を処理し、検索文字列内の文字の開始位置を示す数 値を返します。たとえば、ソース文字列が 'David Banner' で検索文字列が 'Banner' の場合、POSITION 関数は、'David Banner' 内の 'Banner' の開始位置を 示す 7 を返します。 構文 次に POSITION 関数を使った式の構文ダイアグラムを示します。 position ( <c_expression>, <c_expression> ) <c_expression> 最初の <c_expression> は検索文字列を指定します。2 番目の <c_expression> はソース文字列を示します。<c_expression> には、 1,024 文字以下のシングルバイト文字またはマルチバイト文字で構 成される文字型を使用できます。 結果 POSITION 関数には、次の 5 つの結果があります。 ■ ■ ■ ■ ■ 最初の <c_expression> を見つけた場合、この関数は 2 番目の <c_expression> 内での最初の <c_expression> の開始位置を示す整数を返します。 最初の <c_expression> が見つからない場合、結果は 0 です。 最初の <c_expression> の長さが 0 の場合、結果は 1 です。 最初の <c_expression> が NULL の場合、エラー メッセージが返されます。 2 番目の <c_expression> が NULL の場合、結果は 0 です。 例 次の 2 つの例では、検索文字列内での文字の開始位置を示す数値が返されます。 5-42 SQL Reference Guide POSITION 次の例で、クエリは "Imports" の文字 I の開始位置を示す 4 を返します。文字 C で始 まり "Imports" という単語を含まないほかの 2 つの会社名の場合、このクエリは 0 を 返します。 select name, position('Imports', name) as name_pos from supplier where name like 'C%' NAME CB Imports Colo Coffee Crashing By Design NAME_POS 4 0 0 次の例で、クエリは単語 "Express" の文字 E の開始位置を示す 10 を返します。 select NAME, position('Express', name) as NAME_POS from supplier where NAME like 'E%'; NAME Espresso Express NAME_POS 10 スカラ関数 5-43 POSITIONB POSITIONB POSITIONB 関数はソース文字列を処理し、検索文字列内の文字の開始バイト位置 を示す数値を返します。 構文 次に POSITIONB 関数を使った式の構文ダイアグラムを示します。 positionb ( <c_expression>, <c_expression> ) <c_expression> 最初の <c_expression> は検索文字列を指定します。2 番目の <c_expression> はソース文字列を示します。<c_expression> には、 1,024 文字以下のシングルバイト文字またはマルチバイト文字で構 成される文字型を使用できます。 結果 POSITIONB 関数には、次の 5 つの結果があります。 ■ ■ ■ ■ ■ 最初の <c_expression> を見つけた場合、この関数は 2 番目の <c_expression> 内での最初の <c_expression> の開始バイト位置を示す整数を返します。 最初の <c_expression> が見つからない場合、結果は 0 です。 最初の <c_expression> の長さが 0 の場合、結果は 1 です。 最初の <c_expression> が NULL の場合、エラー メッセージが返されます。 2 番目の <c_expression> が NULL の場合、結果は 0 です。 例 次の例では、検索文字列内の文字の開始バイト位置を示す数値を返します。2 バイ トのコード セットを <mb-x> で表すものとします。たとえば、文字列 <mb-A><mb-n><mb-n> は 3 つの文字の 6 バイト表現を表します。 select name, positionb('<mb-a><mb-v><mb-i><mb-d>',name) as NAME_POS from customer where NAME like '<mb-D>' NAME NAME_POS ---------------------------------------------<mb-D><mb-i><mb-a><mb-n><mb-n><mb-e> 0 <mb-D><mb-a><mb-v><mb-i><mb-d> 3 <mb-D><mb-i><mb-c><mb-k> 0 <mb-D><mb-e><mb-n><mb-n><mb-i><mb-s> 0 5-44 SQL Reference Guide RTRIM RTRIM RTRIM 関数は、文字列の末尾の空白の位置を移動します。マルチバイトの空白は、 シングルバイトの空白と同じ方法で処理されます。 構文 次に RTRIM 関数を使った式の構文ダイアグラムを示します。 RTRIM ( <c_expression> ) <c_expression> 文字を表すデータ型である必要があります。 結果 引数が NULL でない場合は、文字列から末尾の空白が削除されます。NULL の場合 は、NULL が返されます。 結果の最大長は、引数の最大長になります。 使用上の注意 文字 (CHAR) 型の列と出力データは常に固定長であるため、指定の長さを満たすた めに空白が追加されます。CHAR 列または出力列幅の短縮に RTRIM は使用できま せん。 例 次の式は、Market 列から末尾の空白を削除します。 rtrim(market) スカラ関数 5-45 RTRIM 次のクエリは、Hq_City 列から末尾の空白を削除します。さらに、カンマと空白を 区切り記号として、Hq_City 列と District 列を連結します。 select concat(rtrim(hq_city), ', ' , district) as mkt_district from market where region in ('South', 'North') MKT_DISTRICT Atlanta, Atlanta Miami, Atlanta New Orleans, New Orleans Houston, New Orleans New York, New York Philadelphia, New York Boston, Boston Hartford, Boston 5-46 SQL Reference Guide STRING STRING STRING 関数は、数値データ型または日付時間データ型の値を文字列に変換します。 構文 次に STRING 関数を使った式の構文ダイアグラムを示します。 STRING ( ) <expression> , <length> , <scale> <expression> 数値データ型または日付時間データ型です。<expression> が NULL でない場合は、文字列が返されます。NULL の場合は、NULL が返 されます。 <length> 戻り値の最大文字数を指定します。NULL は使用できません。整数 定数または整数式を指定するか、指定を省略することができます。 この引数を省略した場合は、次の表に示すように、式のデータ型に よって戻り値の文字数が決まります。 データ型 戻り値のデフォルト文字数 TINYINT 4 文字 SMALLINT 6 文字 INTEGER 11 文字 SERIAL 11 文字 DECIMAL、NUMERIC ( 精度 + 2) 文字 または ( 精度 + 3) 文字 戻り値が < 0 で、スケール = 精度の場合 REAL、FLOAT、 DOUBLE PRECISION 23 文字 (1/2) スカラ関数 5-47 STRING データ型 戻り値のデフォルト文字数 DATE 10 文字 (8 桁、区切り記号 2 桁 ) TIME 15 文字 (12 桁、区切り記号 3 桁 ) TIMESTAMP 26 文字 (20 桁、区切り記号 5 桁、空白 1 桁 ) (2/2) データ型戻り値の値を表すのに必要な桁数が、STRING 関数が返す文字数を超える 場合は、結果が切り捨てられます。たとえば、指定したデータ型に対し、戻り値の デフォルト文字数が不足している場合や、指定した <length> 引数の値が小さい場合 です。 特に、FLOAT データ型の式には注意が必要です。STRING 関数は指数表記を使用し ないため、<LENGTH> 引数を指定しないと、1E35 のような値は切り捨てられます。 これは、FLOAT データ型の式に対する戻り値のデフォルトが、23 文字のためです。 複数の列を使った数値表現式を指定した場合は、結果が浮動小数点数値に変換され ます。<length> 引数が式の場合は、行ごとに式の値を切り捨てた整数を使用して第 1 引数のフォーマットを設定します。<length> が短すぎても、エラー メッセージや 警告メッセージを表示せずに結果が切り捨てられます。 ヒント : STRING 関数は、数値表現式のすぐ左にあるマイナス符号 (ñ)、プラス符 号 (+)、空白などの桁を文字数にカウントします。このため、次の式は、1234 では なく 123 と評価されます。 string(1234, 4) 数値データ型の場合は小数点以下の桁数、時間データ型およびタイ ムスタンプ データ型の場合は秒未満の桁数を指定します。<scale> の値は (<length>- 3) 以下とし、NULL は使用できません。DATE 型の 式は、スケールが無視されます。 <scale> 例 ■ 次の式は、小数点以下の桁数が 2 で、10 文字以内の文字列を返します。 string(dollars/quantity, 10,2) ■ 次の式は、1999-11-07 のように、現在の日付を表す文字列を返します。 string (current_date) ■ 次の式は、2000 のように、現在の日付から年の部分だけを返します。 string (current_date, 4) 5-48 SQL Reference Guide STRING ■ 次の式は、現在のタイムスタンプを表す文字列を返します。 string (current_timestamp) たとえば、次のようになります。 '2000-11-07 14:50:40.710474' ■ 次の式は、秒未満を 4 桁とする現在のタイムスタンプを表す文字列を返し ます。 string (current_timestamp, 26, 4) たとえば、次のようになります。 '2000-11-07 14:50:40.7104' ■ 次のクエリは、STRING 関数を使って、Price 列の値を小数第 2 位まで算出 します。STRING 関数を使用しないと、Price 列の値は桁数の多い数値デー タ型で返されます。 select prod_name, sum(dollars) as total_sales, sum(quantity) as total_qty, string(sum(dollars)/sum(quantity), 7, 2) as price from product natural join sales natural join period where year = 2000 group by prod_name SELECT 文で STRING 関数を使用する例は、 『SQL Self-Study Guide』を参照してく ださい。 スカラ関数 5-49 SUBSTR SUBSTR SUBSTRB 関数は、文字列から部分文字列を抽出します。 SUBSTR スカラ関数の <start> 引数と <length> 引数は、バイト値ではなく文字値とし て解釈されます。ただし、この関数の結果に割り当てられるバイト幅は、ウェアハ ウス ロケールで定義されるコード セット内の最大バイト幅を文字数に掛けたもの です。 このコード セット内で最も幅の広い文字に 2 バイトの格納域が必要だとします。ど のクエリでも、substr(name, 1, 3) のような式は、結果に 3 バイトではなく 6 バイトを割り当てます。 SUBSTR 関数の <length> 引数も 5 に設定される CHAR(5) 型列などに SUBSTR 関数 が指定されている INSERT INTO SELECT 文では、エラー メッセージが表示されま す。このエラーが発生するのは、10 バイトを部分文字列に割り当てようとしている のに、5 バイトのみが CREATE TABLE 文に割り当てられているためです。 構文 次に SUBSTR 関数を使った式の構文ダイアグラムを示します。 SUBSTR ( <c_expression>, <start> ) , <length> <c_expression> 文字を表すデータ型である必要があります。 <start> 第 1 引数の部分文字列の開始文字の位置を指定する整数式です。先 頭位置は 1 です。 <length> 抽出する文字数を指定します。<length> を指定する場合は、NULL でない整数式か、整数定数を使用することができます。<length> が 整数定数の場合は、第 1 引数の長さより大きい値は指定できませ ん。 結果 与えられた条件に応じて、次のいずれかの結果が SUBSTR 関数に返されます。 ■ ■ 5-50 第 1 引数が NULL でなければ、<start> で指定した位置で始まり、<length> で指定した長さの部分文字列が返されます。<length> を指定しなかった場 合は、<start> から <c_expression> の終わりまでの部分文字列が返されます。 第 1 引数が NULL ならば、NULL が返されます。 SQL Reference Guide SUBSTR ■ ■ <start> 引数が 1 未満か NULL ならば、エラーになります。<start> が第 1 引 数の長さより大きい場合は、長さ 0 の文字列が返されます。 <length> が (<c_expression> の長さ _<start>) +1 より長ければ、 (<c_expression> の長さ - <start>) +1 文字だけが返されます。 末尾空白の使用方法 SUBSTR がクライアントで使用された場合、システムの末尾空白の処理方法によっ ては、出力が矛盾することがあります。現在のネイティブ ODBC 接続ソフトウェア では、末尾の空白は削除し、以前のものでは削除されずに残されているからです。 これは、rbw.config オプション OPTION SERVER_TRIM_TRAILING_SPACES を使用 することにより解決できます。クライアントのアプリケーションにデータを送る前 に、サーバが SUBSTR 動作の結果で発生した末尾空白を削除するかどうかを設定 します。デフォルトは YES です。 例 次の式は、文字位置 5 で始まる 10 文字の部分文字列を抽出します。 substr(market, 5, 10) 次のクエリは、文字位置 1 で始まる 8 文字の部分文字列を抽出します。 select classkey as class_no, substr(class_type, 1, 8) as type from class CLASS_NO 1 2 3 4 5 6 7 8 12 TYPE Bulk_bea Bulk_tea Bulk_spi Pkg_coff Pkg_tea Pkg_spic Hardware Gifts Clothing スカラ関数 5-51 SUBSTRB SUBSTRB SUBSTRB 関数は、文字列からバイト単位で部分文字列を抽出します。 構文 次に SUBSTRB 関数を使った式の構文ダイアグラムを示します。 SUBSTRB ( <c_expression>, <start> ) , <length> <c_expression> 文字を表すデータ型である必要があります。 <start> 第 1 引数の部分文字列の開始文字の位置を指定する整数式です。先 頭位置は 1 です。 <length> 抽出するバイト数を指定します。<length> を指定する場合は、 NULL でない整数式か、整数定数を使用することができます。 <length> が整数定数の場合は、<c_expression> の長さより大きい値は 指定できません。 結果 与えられた条件に応じて、次のいずれかの結果が SUBSTRB 関数に返されます。 ■ 第 1 引数が NULL でなければ、<start> で指定した位置で始まり、<length> で指定したバイト数の部分文字列が返されます。<length> を指定しなかっ た場合は、<start> から <c_expression> の終わりまでの部分文字列が返され ます。 警告 : SUBSTRB は文字ではなく、バイトを返すため、マルチバイト文字の途中の 位置を指定する <start> や <lentgh> 引数を指定することができます。この場合は、シ ングルバイトを含む結果が返されます。 ■ ■ ■ 5-52 第 1 引数が NULL ならば、NULL が返されます。 <start> 引数が 1 未満か NULL ならば、エラーになります。<start> が第 1 引 数の長さより大きい場合は、長さ 0 の文字列が返されます。 <length> が (<c_expression> の長さ _<start>) +1 より長ければ、 (<c_expression> の長さ - <start>) +1 バイトだけが返されます。 SQL Reference Guide SUBSTRB 例 可変バイト長のマルチバイト コード セットを使用して次のクエリを実行すると、 文字列中のバイト数が返されます。この文字列で、0 ∼ 9 の数字はシングルバイト 長、Xx および Yy 文字はダブルバイト長、Zzz 文字は 3 バイト長です。 select substrb ('12XxYyZzz3',3,4) from test; XxYy SUBSTR 関数では、次の結果が返されます。 select substr ('12XxYyZzz3',3,4) from test; XxYyZzz3 次のクエリは、マルチバイト文字の途中の位置を指定する <length> 引数を含む SUBSTRB です。 select substrb ('12XxYyZzz3',3,3) from test; Xx<blank> マルチバイト文字の最初のバイト Yy ではなく、シングルバイトの空白が返されま す。 スカラ関数 5-53 TRIM TRIM TRIM 関数は、文字列の先頭と末尾の空白の位置を移動します。マルチバイトの空 白は、シングルバイトの空白と同じ方法で処理されます。 構文 次に TRIM 関数を使った式の構文ダイアグラムを示します。 TRIM ( ) <c_expression> , 'Both' , 'Right' , 'Left' <c_expression> 文字を表すデータ型である必要があります。 Both、Right、 Both、Right、Left は、リテラルです。大文字、小文字、大文字と小 Left 文字の混在のいずれでもかまいません。一重引用符文字 (') は必須で す。Both は、先頭の空白と末尾の空白の両方を削除します。Right は、末尾の空白を削除します。Left は、先頭の空白を削除します。 デフォルトは、Both です。 結果 第 1 引数が NULL でなければ、文字列から先頭の空白と末尾の空白が削除されま す。第 1 引数が NULL ならば、NULL が返されます。結果の最大長は、第 1 引数の 最大長です。 使用上の注意 CHAR 列と出力データは常に固定長であるため、指定の長さを満たすために空白が 追加されます。CHAR 列または出力列幅の短縮に TRIM は使用できません。 TRIM 関数の処理では、シングルバイトの ASCII 空白文字ではなく、東アジア言語 でサポートされているダブルバイトの文字を使用すると、予測できない結果になる ことがあります。文字列内のダブルバイトの空白はシングルバイトの空白に置き換 え、データのロード前に入力ファイルからダブルバイトの後ろの空白を取り除いて おきます。 5-54 SQL Reference Guide TRIM 例 次の式は、Market 列の文字列の後ろの空白の位置を移動します。right 引数を指定 した TRIM は、RTRIM 関数と同じです。 trim(market, 'right') 次のクエリは、City 列の値の先頭と末尾の空白の位置を移動します。 select trim(hq_city) as city from market スカラ関数 5-55 UPPER UPPER UPPER 関数は、文字列を大文字に変換します。 構文 次に UPPER 関数を使った式の構文ダイアグラムを示します。 UPPER ( <c_expression> ) <c_expression> 文字を表すデータ型である必要があります。 結果 引数が NULL でなければ、文字列は大文字に変換されます。引数が NULL ならば、 NULL が返されます。 例 次のクエリは M で始まる都市名を Market テーブルから返します。リザルト テーブ ルには大文字と小文字が混在した都市名が、テーブルに挿入されたときの状態で表 示されます。 select hq_city as city from market where hq_city like 'M%' CITY ----------Miami Minneapolis Milwaukee 5-56 SQL Reference Guide UPPER 次のクエリは、UPPER 関数を使って都市名を大文字で表示します。 select upper(hq_city) as city from market where hq_city like 'M%' UPPER_CITY ----------MIAMI MINNEAPOLIS MILWAUKEE スカラ関数 5-57 日付時間スカラ関数 日付時間スカラ関数 このセクションでは、日付時間式を処理するスカラ関数について説明します。日付 時間スカラ関数は次のとおりです。 日付時間関数 説明 CURRENT_DATE 現在の日付を返します。 CURRENT_TIME 現在の時間を返します。 CURRENT_TIMESTAMP 現在の日付時間を返します。 DATE TIMESTAMP または文字列を DATE に変換します。 DATEADD 日付時間の値に、時間隔を加算します。 DATEDIFF 2 つの日付時間の差異を算出します。 DATENAME 日付時間の日付フィールドを、文字列として抽出し ます。 EXTRACT 日付時間の日付フィールドを、INTEGER として抽出 します。 TIME TIMESTAMP または文字列を TIME に変換します。 TIMESTAMP DATE または TIME または文字列を TIMESTAMP に変 換します。 TO_CHAR 日付、時刻、タイムスタンプをユーザ指定の形式で 返します。 DATEADD、DATEDIFF、EXTRACT の各関数の例は、『SQL Self-Study Guide』を参 照してください。 日付時間スカラ関数の日付フィールド スカラ関数の中には、日付時間データ型を構成する特定のサブフィールド、つまり 日付フィールドを処理するものがあります。EXTRACT 関数を使うと、日付時間の 値から該当する日付フィールドを抽出することができます。 datepart 引数はローカライズされません。これらの datepart 引数は、どのロケールで も同じフォーマットです。ただし、DATENAME 関数と EXTRACT 関数の出力デー タはローカライズされます。 5-58 SQL Reference Guide 日付時間スカラ関数の日付フィールド 各日付フィールドの定義は次のとおりです。 日付フィールド 略記 戻り値の範囲 YEAR yy 1 ∼ 9999 QUARTER qq 1 ∼ 4 ( 月の値から判定 ) MONTH mm 1 ∼ 12 (DATENAME 関数で指定した場合は、 ローカライズされた月 ) DAYOFYEAR dy 1 ∼ 366 DAY dd 1 ∼ 31 WEEK wk 1 ∼ 53。最初の週を除き、週は 1 週間が始ま る曜日から始まります ( サーバ ロケールが 指定するテリトリのフォーマット規則によ り指定 )。最初および最後の週は、1 月 1 日 の曜日に応じて、1 週間未満になる場合があ ります。 WEEKDAY dw 1 ∼ 7。1 は 1 週間が始まる曜日です ( サーバ ロケールが指定するテリトリのフォーマッ ト規則により指定 )。DATENAME 関数で指 定した場合は、この引数はローカライズさ れた曜日名を返します。 HOUR hh 0 ∼ 23 MINUTE mi 0 ∼ 59 SECOND ss 0 ∼ 59 MILLISECOND ms 0 ∼ 999 MICROSECOND us 0 ∼ 999999 ヒント : ANSI SQL-92 EXTRACT 関数を使用しないクライアント ツールのために、 非標準の DATEPART スカラ関数がサポートされています。DATEPART の詳細は、 付録 C を参照してください。 スカラ関数 5-59 CURRENT_DATE、CURRENT_TIME、CURRENT_TIMESTAMP CURRENT_DATE、CURRENT_TIME、 CURRENT_TIMESTAMP CURRENT_DATE、CURRENT_TIME、CURRENT_TIMESTAMP 関数は、それぞれ現 在の日付、時間、タイムスタンプの値を返します。 構文 次に上記の関数を使った日付時間式の構文ダイアグラムを示します。 CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP ( <n> ) ( <n> ) TIME および TIMESTAMP の値を構成する秒未満の精度を指定する 整数です。 <n> <n> を指定しなかった場合、デフォルトの精度は次のようになります。 ■ ■ CURRENT_TIME(0) CURRENT_TIMESTAMP(6) 結果 CURRENT_DATE、CURRENT_TIME、CURRENT_TIMESTAMP 関数の結果は、クエ リの処理中は同じ値です。 例 次に現在の日付を Date_Col 列に挿入する例を示します。 insert into table_1 (date_col) values (CURRENT_DATE) 5-60 SQL Reference Guide DATE DATE DATE 関数は、文字列式またはタイムスタンプ式から DATE を算出します。 構文 次に DATE 関数を使った日付時間式の構文ダイアグラムを示します。 DATE <c_expression> ( ) <timestamp_expression> <c_expression>、 <timestamp_expression> 引数には文字列式またはタイムスタンプ式を指定します。 日付式も指定できますが、その場合は変換は行われませ ん。文字列式は、2-10 ページ「日付時間定数」に示す有 効な日付の値である必要があります。非標準の日付 フォーマットやタイムスタンプ フォーマットは指定でき ません。 結果 結果は DATE データ型です。 例 次に DATE 関数を使ってテーブルの文字型の列の値を変換し、別のテーブルの Date_Col 列に挿入する例を示します。 insert into table_1 (date_col) select date (char_col) from table_2 次に DATE 関数を使って TIMESTAMP 型の値を DATE 型の値に変換する例を示しま す。 insert into table_1 (date_col) select date (timestamp_col) from table_2 DATE フォーマットのデフォルトは yyyy-mm-dd です。日付を異なるフォーマットで 表示するには、EXTRACT 関数を使用します。具体的な例は、5-66 ページ 「EXTRACT」を参照してください。 スカラ関数 5-61 DATEADD DATEADD DATEADD 関数は、日付時間の値に経過時間を加算します。 構文 次に DATEADD 関数を使った日付時間式の構文ダイアグラムを示します。 DATEADD ( <datepart>, <interval>, <datetime_expression> ) <datepart> 経過時間を加算する日付フィールド名を指定します。 5-58 ページ「日付時間スカラ関数の日付フィールド」に示す フィールド名または略記を指定する必要があります。 <interval> 整数である必要があります。 <datetime_expression> DATE、TIME、または TIMESTAMP のデータ型である必要が あります。 結果 結果は <datetime_expression> と同じデータ型になります。 <day>、<dayofyear>、<dayofweek> が関わる計算は、日数単位で行われます。 加算する経過時間の日付フィールドが月または四半期で、結果の日付がその月の日 数を超える場合、その月の最終日が返されます。 加算する経過時間の日付フィールドが年で、うるう年の場合は 2 月 29 日が返され、 うるう年以外の場合は 3 月 1 日が返されます。 例 この DATEADD 関数は、Table_1 の Date_Col 列の各値について、月の値を 1 増やし ます。 select dateadd(month, 1, date_col) as month_increment from table_1 日付 1999-11-25 は、1999-12-25 になります。日付 1999-12-25 は、2000-1-25 になります。 次の例は、Table_1 の Date_Col 列の各値について、月の値を 1 減らします。 select dateadd(month, -1, date_col) as month_decrement from table_1 5-62 SQL Reference Guide DATEDIFF DATEDIFF DATEDIFF 関数は、2 つの日付時間式の時間差を算出します。 構文 次に DATEDIFF 関数を使った日付時間式の構文ダイアグラムを示します。 DATEDIFF ( <datepart>, <datetime_expression>, <datetime_expression> ) <datepart> 時間差の計算の対象となる日付フィールド名を指定します。 5-58 ページ「日付時間スカラ関数の日付フィールド」に示す フィールド名または略記を指定する必要があります。 <datetime_expression> 式は DATE、TIME、または TIMESTAMP のデータ型である 必要があります。2 つの式が同じデータ型である必要はあり ませんが、どちらにも指定した日付フィールドが含まれて いる必要があります。 一方の式に指定した日付フィールドが含まれていない場合は、時間には午前 0 時、 日付にはデフォルトの日付 1900-01-01 が使用されます。 結果 DATEDIFF 関数は、結果を日付フィールドを単位とする整数で返します。<day>、 <dayofyear>、<dayofweek> が関わる計算は、日数単位で行われます。 例 Table_1 の Date_Col 列に、1998-12-03 という日付の値が格納されているとします。 select current_date as today, datediff(year, '01-01-2001', current_date) as till_next_mil from period where date = '12-03-1998'; TODAY 1999-09-02 TILL_NEXT_MIL スカラ関数 5-63 DATENAME DATENAME DATENAME 関数は、指定した日付フィールドを抽出し、文字列として値を返しま す。 構文 次に DATENAME 関数を使った日付時間式の構文ダイアグラムを示します。 DATENAME ( <datepart>, <datetime_expression> ) <datepart> 日付時間式から抽出する日付フィールド名を指定します。 5-58 ページ「日付時間スカラ関数の日付フィールド」に示す フィールド名または略記を指定する必要があります。 <datetime_expression> DATE、TIME、または TIMESTAMP のデータ型である必要 があります。 結果 指定した日付フィールドが日付時間式に含まれていなければ、時間には午前 0 時、 日付にはデフォルトの日付 1900-01-01 が使用されます。これらのデフォルト値も、 文字列として返されます。 DATENAME 関数の出力データはローカライズされます。月と日は、サーバ ロケー ルが指定する言語およびテリトリに従って表示されます。 例 サーバ ロケールが指定する言語が English で、日付の値が 1999-12-25 の場合、次の DATENAME 関数は、December を返します。 select datename(mm, date) from period where date = '12-25-1999' December 5-64 SQL Reference Guide DATENAME ドイツ語のデータベースでは、DATENAME 関数は、ドイツ語の月と曜日を返しま す。 select distinct datename(mm, date) from period where qtr like 'Q4%' Dezember November Oktober select datename(dw, date) from period order by perkey Samstag Sonntag Montag ... 日付が 1999-12-25 の場合、次の DATENAME 関数は、1999 を返します。 select datename(yy, date '1999-12-25') from period 1999 ... 日付が 1997-12-01 の場合、次の DATENAME 関数は、1 を返します。 select datename(dd, date '1997-12-01') from period 1 ... スカラ関数 5-65 EXTRACT EXTRACT EXTRACT 関数は、日付時間の値から、指定された日付フィールドを整数値として 抽出します。 構文 次に EXTRACT 関数を使った日付時間式の構文ダイアグラムを示します。 EXTRACT ( <datepart> FROM <datetime_expression> ) <datepart> 日付時間式から抽出する日付フィールド名を指定します。 5-58 ページ「日付時間スカラ関数の日付フィールド」に示す フィールド名または略記を指定する必要があります。 <datetime_expression> DATE、TIME、または TIMESTAMP のデータ型である必要 があります。 結果 指定した日付フィールドが日付時間式に含まれていなければ、時間には午前 0 時、 日付にはデフォルトの日付 1900-01-01 が使用されます。これらのデフォルト値も、 整数として返されます。 EXTRACT 関数の出力データは、サーバ ロケールが指定するテリトリのフォーマッ ト規則に従ってローカライズされます。たとえば、日付から曜日 (1 から 7 までの数 字 ) を抽出する場合、1 週間が何曜日から始まるかによって結果が異なります。 <datepart> が週の場合、指定した年の最初の日が何曜に当たるかを考慮して抽出が 行われます。たとえば、1 月の最初の日が土曜で、1 週間が日曜から始まる場合は、 2 番目の日は週 2 ( 第 2 週 ) になります。1 週間が月曜から始まる場合は、2 番目の日 は週 1 ( 第 1 週 ) となります。 5-66 SQL Reference Guide EXTRACT 例 この EXTRACT 関数は、日付から年を抽出します。 select extract (year from date_col) as year_1999 from table_1 1999 ... EXTRACT 関数は、日付を異なるフォーマットで表示することができます。 select date, concat (substr (string (extract(month from date_col)), 10, 2), '/', substr (string (extract (day,date_col)), 10, 2), '/', substr (string (extract (year from date_col)), 10, 2)) as new_date from period; DATE 1998-01-01 1998-01-02 1998-01-03 NEW_DATE 1/1/98 1/2/98 1/3/98 「/」は、必要に応じて省略することも、 「-」に変更することもできます。 EXTRACT 関数は、曜日のローカライズされた値を返します。たとえば、 English_UnitedStates にロケール設定されたデータベースで次のクエリを実行する と、2 の値を返します。 select extract(dw from date) from period where date = '01-03-2000' 2 1 週間が日曜から始まり、2000 年 1 月 3 日が月曜日なのでこの結果となります。 German_Germany のロケール設定のように、1 週間が月曜から始まる言語や地域の場 合は、同じクエリが 1 の値を返します。 ヒント : ANSI SQL-92 EXTRACT 関数を使用しないクライアント ツールのために、 非標準の DATEPART スカラ関数がサポートされています。DATEPART の詳細は、 付録 C を参照してください。 スカラ関数 5-67 TIME TIME TIME 関数は、文字列データ型またはタイムスタンプ データ型の式から TIME を算 出します。 構文 次に TIME 関数を使った日付時間式の構文ダイアグラムを示します。 TIME ( <c_expression> ) <timestamp_expression> <c_expression>、 <timestamp_expression> 文字列式またはタイムスタンプ式を指定します。時間式も 指定できますが、その場合は変換は行われません。文字列 式は、2-10 ページ「日付時間定数」に示す有効な時間の 値である必要があります。非標準の時間フォーマットやタ イムスタンプ フォーマットは指定できません。 結果 結果は TIME データ型になります。 例 次に TIME 関数を使ってテーブルの文字列の値を変換し、別のテーブルの TIME 列 に挿入する例を示します。 insert into table_1 (time_col) select time (char_col) from table_2 次に TIME 関数を使って TIMESTAMP 型の値を TIME 型の値に変換する例を示しま す。 insert into table_1 (time_col) select time (timestamp_col) from table_2 5-68 SQL Reference Guide TIMESTAMP TIMESTAMP TIMESTAMP 関数は、文字列または日付時間の値から TIMESTAMP を算出します。 構文 次に TIMESTAMP 関数を使った日付時間式の構文ダイアグラムを示します。 TIMESTAMP ( <c_expression> <date_expression> ) , <time_expression> <c_expression>、 引数を 1 つ指定する場合は、文字列式である必要があります。 <date_expression>、 文字列式は、2-10 ページ「日付時間定数」に示す有効なタイム <time_expression> スタンプの値である必要があります。非標準の時間フォーマッ トやタイムスタンプ フォーマットは指定できません。 引数を 2 つ指定する場合は、第 1 引数を DATE 式、第 2 引数を TIME 式とし、各式 をカンマ (,) で区切ります。DATE 式か TIME 式のどちらかが NULL の場合は、結果 の TIMESTAMP 式も NULL になります。 結果 結果は TIMESTAMP データ型になります。 例 次に TIMESTAMP 関数を使ってテーブルの文字列の値を変換し、別のテーブルの TIMESTAMP 列に挿入する例を示します。 insert into table_1 (timestamp_col) select timestamp (char_col) from table_2 次に TIMESTAMP 関数を使って DATE 型と TIME 型の値を TIMESTAMP 型の値に変 換する例を示します。 insert into table_1 (timestamp_col) select timestamp (date_col, time_col) from table_2 スカラ関数 5-69 TO_CHAR TO_CHAR TO_CHAR 関数は、日付 (DATE)、時刻 (TIME)、タイムスタンプ (TIMESTAMP)の データ型を処理し、指定された形式の文字列を返す日時スカラ関数です。日時リテ ラルは ANSI SQL-92 DATETIME データ型標準に準拠しています。 構文 次に TO_CHAR 関数を使った式の構文ダイアグラムを示します。 ( <source_date> to_char ) , <format_str> <source_date> 日付、時刻、タイムスタンプのいずれかのデータ型である必要 があります。列名、式、リテラル文字列のいずれかを指定でき ます。 <format_str> リテラル文字列を指定する必要があります。 この関数のオプションの <format_str> 引数では、次の要素がサポートされています。 要素 意味 最小値 最大値 YYYY 4 桁の年 0000 9999 YY 2 桁の年 00 99 MONTH ロケール定義に基づく月のフル ネーム MON ロケール定義に基づく月の省略名 MM 2 桁の月 01 12 DAY ロケール定義に基づく日のフル ネーム DY ロケール定義に基づく日の省略名 DD 日 01 31 DDD 年ごとの日付 001 366 (1/2) 5-70 SQL Reference Guide TO_CHAR 要素 意味 最小値 最大値 CC 週の数値日 0 6 HH 時間 01 12 HH12 日の中の時 01 12 HH24 日の中の時 00 23 MI 分 00 59 SS 秒 00 59 A.M./P.M. ロケール定義に基づく 12 時間制表示 (2/2) TO_CHAR 関数の要素を指定する場合には次の要因を考慮します。 ■ ■ ■ <format_str> 要素間の区切り記号として、数字、文字、句読点の任意の組 合せを使用できます。ただし、区切り記号は必須ではありません。たとえ ば、次の形式文字列はいずれも有効です。 ❑ MM/DD/YY ❑ 日付は MONTH、DAY、YEAR で時刻は HH:MI ❑ 日付 MM-DD-YY 週の中の数値日は 0 ∼ 6 の数値を返します。0 は日曜日を表します。 タイムスタンプの日付要素と時刻要素の間に空白を使用できますが、必須 ではありません。 結果 TO_CHAR 関数には、次の 3 つの結果があります。 ■ ■ ■ TO_CHAR 関数は、指定された <format_str> 形式の <source_date> に指定さ れた日付を含む文字列を返します。<source_date> は、日付 (DATE)、時刻 (TIME)、タイムスタンプ (TIMESTAMP) のいずれかのデータ型である必要 があります。 <format_str> を指定しない場合、そのデータ型に対応する適切なロケール 表現が使用されます。 <source_date> が NULL の場合、結果は NULL になります。 スカラ関数 5-71 TO_CHAR 例 次の 3 つの例は、指定された形式で表された、指定された日付を含む文字列を返し ます。 次の例では、購入日を選択し、それを P_DATE として表示します。 select to_char(purchase_date) as P_DATE from sales where customer_id < 1000 P_DATE -------------1999-02-24 次の例では、close_date を選択し、2 桁の日、2 桁の月、2 桁の年をハイフンで区 切って C_DATE として表示します。 select to_char(close_date, 'dd-mm-yy') as C_DATE from orders where dealkey > 30 C_DATE 07-01-00 07-01-00 21-01-00 02-03-00 11-02-00 18-02-00 13-03-00 24-03-00 19-03-00 04-04-00 次の例では、CLOSE_DATE を選択し、それを元の形式で 1 回、TO_CHAR 形式で 1 回表示します。TO_CHAR 形式では、2 桁の日、3 文字の月、4 桁の年が、区切り文 字なしで CLOSING として表示されます。 select CLOSE_DATE, to_char(CLOSE_DATE, 'dd MON yyyy') as CLOSING from orders where order_no < 3604; CLOSE_DATE 2000-01-07 2000-01-07 2000-01-07 2000-01-21 5-72 SQL Reference Guide CLOSING 07 Jan 2000 07 Jan 2000 07 Jan 2000 21 Jan 2000 CURRENT_USER 関数 CURRENT_USER 関数 CURRENT_USER 関数は、情報の提供や管理を目的としたスカラ関数です。この関 数は、データベースを現在使用しているユーザのデータベース ユーザ名 ( 使用権 ID) を返します。データベース ユーザ名は、8-207 ページに説明する GRANT CONNECT 文を使って作成します。 構文 次に USER 関数を使った式の構文ダイアグラムを示します。 CURRENT_USER USER 結果 データベースの現在のユーザ名が返されます。この関数は、ユーザ名に基づいてア クセスを制限したり提供するために使用できます。 例 次のクエリは、現在データベースに接続しているユーザが作成したテーブルを表示 します。 select * from rbw_tables where creator = CURRENT_USER 次のビューは、各ユーザが作成したテーブルを表示します。 create view table_list as select * from rbw_tables where creator = CURRENT_USER ビューの作成者は select 特権を public に付与して、そのビューに各ユーザがアクセ スできるようにする必要があります。 grant select on table_list to public これにより、各ユーザが Table_List を検索し、自分が作成したテーブルを一覧でき るようになります。表示されるのは、現在のユーザが作成したテーブルだけです。 システム テーブルと、アクセス権があってもユーザが作成していないテーブルは表 示されません。 select * from table_list スカラ関数 5-73 第6章 分析関数 この章について . . . . . . . . . . 6-3 SQL OLAP 関数 . . . . . . . . . . . . . . . OLAP 関数の種類 . . . . . . . . . . . . . OVER 句 . . . . . . . . . . . . . . . . OLAP ウィンドウ パーティション . . . . . . パーティション内の行のソート . . . . . . ウィンドウ フレーム . . . . . . . . . . OLAP 関数の使用に関する基本規則 . . . . . . RANK、DENSE_RANK、NTILE の構文 . . . . . OLAP <window_partition> 句 . . . . . . . . OLAP <window_order> 句 . . . . . . . . . OLAP 順位付けの例 . . . . . . . . . . . ROW_NUMBER および ROWNUMBER の構文 . . . ROW_NUMBER の例 . . . . . . . . . . 使用上の注意 . . . . . . . . . . . . . AVG、COUNT、MIN、MAX、SUM の構文 . . . . OLAP <window_frame> 句 . . . . . . . . . 行ベースのウィンドウ フレームの例 . . . . . 値ベースのウィンドウ フレームの例 . . . . . リードおよびラグ ウィンドウ フレーム . . . . NULLS FIRST および NULLS LAST の例 . . . OLAP 集約の使用上の注意 . . . . . . . . OLAP 集約の例 . . . . . . . . . . . . RATIO_TO_REPORT および RATIOTOREPORT の構文 使用上の注意 . . . . . . . . . . . . . OLAP RATIOTOREPORT の例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-4 6-5 6-7 6-7 6-7 6-10 6-15 6-16 6-17 6-17 6-18 6-22 6-23 6-23 6-24 6-25 6-30 6-33 6-36 6-37 6-38 6-40 6-44 6-45 6-46 . . . . . . 6-47 6-48 6-52 RISQL 表示関数 . . . . CUME . . . . . . MOVINGAVG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . MOVINGSUM . NTILE . . . . RANK . . . . RATIOTOREPORT TERTILE . . . 6-2 SQL Reference Guide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6-55 6-58 6-62 6-66 6-68 この章について IBM Red Brick Warehouse は、Red Brick サーバ専用に開発された独自の RISQL 表示 関数と、ANSI SQL-99 標準に準拠しそれを拡張した一連の SQL OLAP 関数の、2 種 類の分析関数をサポートします。また、Red Brick サーバは ANSI SQL-99 標準の Elementary OLAP パッケージで定義されているすべての関数をサポートします。 OLAP 関数は RISQL 関数の機能を踏襲し、拡張したもので、RISQL 関数よりもさら に汎用的な、一連の分析機能を提供します。RISQL 表示関数はすべて、新しい OLAP 構文または独自の形式で表すことができます。 一般に、分析関数は次の点で有用です。 ■ ■ ■ 複雑かつ頻出するビジネス上の問合わせを SQL 文で表すことが簡単になる 効率が良い ほかの計算実行方法より高速である この章では、これら 2 種類の関数の使用方法を 2 つのセクションに分けて説明しま す。 ■ ■ SQL OLAP 関数 RISQL 表示関数 分析関数 6-3 SQL OLAP 関数 SQL OLAP 関数 SQL OLAP 関数は、単一のクエリ式内でパーティション分割されたリザルト セット に対して適用されます。ウィンドウ パーティションとは、クエリで返される行のサ ブセットで、特別な OVER() 句で 1 つ以上の列によって定義されます。 olap_function() over (partition by col1, col2...) クエリ内の各 OLAP 関数は、それぞれのウィンドウ パーティションの内容に対して 適用されます。一方、分析関数でない関数は、リザルト セットの各行に対して計算 を実行します。たとえば、次のクエリの OLAP RANK 関数を例に考えてみます。 RISQL> select date, store_name, sum(dollars) as sales_dols, > rank() over (partition by date order by sales_dols desc) as date_rank > from period, store, sales > where period.perkey = sales.perkey > and store.storekey = sales.storekey > and state = 'CA' > group by date, store_name > order by date; DATE 1998-01-02 1998-01-02 1998-01-02 1998-01-02 1998-01-02 1998-01-03 1998-01-03 1998-01-03 1998-01-03 1998-01-03 1998-01-04 1998-01-04 ... STORE_NAME Beaches Brew Roasters, Los Gatos San Jose Roasting Company Cupertino Coffee Supply Instant Coffee Instant Coffee San Jose Roasting Company Cupertino Coffee Supply Roasters, Los Gatos Beaches Brew Instant Coffee San Jose Roasting Company SALES_DOLS DATE_RANK 785.55 1 762.25 2 636.25 3 634.00 4 457.75 5 713.75 1 633.25 2 470.50 3 433.00 4 367.25 5 1031.50 1 613.95 2 このクエリは売上額の順位を返します。小売店は各日付の総売上高に基づいて順位 付けされます。日付が変わると順位の値はリセットされます。複数の順位値 (1 ∼ n) のセットは、サブクエリや複雑な SQL を使うことなく、単一のクエリ式で計算され ます。 6-4 SQL Reference Guide OLAP 関数の種類 実際、OLAP 関数を使用することによって、アプリケーション開発者は分析的なビ ジネス クエリを簡単かつ効率的に作成できます。たとえば、さまざまな間隔に対し て移動平均や移動合計を計算したり、選択した列の値の変化に応じて集約と順位付 けをリセットしたり、複雑な比率を単純な用語で表現できます。また、単一のクエ リ式内で、複数の異なる OLAP 関数を各関数固有のパーティション分割規則で定義 できます。RISQL 表示関数は OLAP の機能の一部をエミュレートしていますが、標 準的な方法ではなく、柔軟性に欠けています。 OLAP 関数の種類 IBM Red Brick Warehouse でサポートされる OLAP 関数は、次の 4 つのカテゴリに分 類されます。 ■ ■ ■ ■ 順位付け ❑ RANK ❑ DENSE_RANK および DENSERANK ( シノニム ) ❑ NTILE 番号付け : ROW_NUMBER および ROWNUMBER ( シノニム ) 集約 : ❑ AVG ❑ COUNT ❑ MIN ❑ MAX ❑ SUM COUNT(DISTINCT) などの集約関数での DISTINCT の指定もサポートされ ています。 比率レポート :RATIO_TO_REPORT および RATIOTOREPORT ( シノニム ) 分析関数 6-5 OLAP 関数の種類 次の表に、サポートされている OLAP 関数と、対応する RISQL 表示関数を示しま す。 SQL OLAP 関数 対応する RISQL 表示関数 RANK RANK DENSE_RANK、DENSERANK NTILE NTILE、TERTILE RATIO_TO_REPORT、RATIOTOREPORT RATIOTOREPORT ROW_NUMBER、ROWNUMBER CUME(1) AVG MOVINGAVG COUNT MIN MAX SUM CUME、MOVINGSUM OVER 句がない場合、5 つの集約関数は第 4 章「集約関数」の説明のように機能し ます。RISQL CUME、MOVINGAVG、および MOVINGSUM 関数は、OLAP OVER 句 で AVG および SUM 関数を使用してエミュレートできます。 6-6 SQL Reference Guide OVER 句 OVER 句 OLAP 関数は RISQL 表示関数などのほかの分析関数やレポート関数とは異なり、 OLAP OVER 句を使用できます。OVER 句では主に、次の 3 つの操作を行えます。 ■ ■ ■ ウィンドウ パーティションの定義 (PARTITION BY 句 ) パーティション内の行のソート (ORDER BY 句 ) ウィンドウ フレームの定義 (ROWS/RANGE 指定 ) OVER 句の使用規則は、それが使用される OLAP 関数の種類 ( 順位付けや集約など ) によって異なります。使用規則は、この章で後述している個々の構文の解説を参照 してください。次に、ウィンドウ パーティション、パーティション分割した行の ソート、およびウィンドウ フレームについて、その概念を簡単に説明します。すで にこれらの概念を理解している場合は、6-16 ページからの構文説明と例に進んでく ださい。 OLAP ウィンドウ パーティション ウィンドウ パーティションとは、OLAP 関数を適用するためにグループ分けされた 列の集合のことです。OLAP 関数は各行に適用されますが、計算はパーティション 内の行全体に対して行われます。パーティションが指定されていない場合、OLAP 関数は完全な中間リザルト セットに対して計算を行います。 パーティション内の行のソート OLAP ORDER BY 句は、任意のクエリ式に追加できる ORDER BY 句とは区別されま す。7-55 ページを参照してください。OLAP 関数の ORDER BY 句は通常、ウィンド ウ パーティション内で行をソートするための式を定義するものですが、先行する PARTITION BY 句なしでも ORDER BY 句を使用できます。つまり、中間リザルト セットをソートするために、意図的に OLAP 関数を使用できます。 この指定は OLAP 関数の順位付けファミリでは必須となります。順位値は関数自体 の引数ではなく、ORDER BY 句によって決定されます。OLAP 集約の場合は、一般 的に ORDER BY 句は必須ではありませんが、ウィンドウ フレームを定義するとき には必須となります 6-10 ページを参照してください。パーティション分割された行 は、各フレームに適切な集約値を計算する前にソートされている必要があります。 分析関数 6-7 OVER 句 ORDER BY 句には NULL の取り扱い規則と同様、昇順および降順のソートを定義す るためのセマンティクスが含まれます。デフォルトでは OLAP 関数は昇順による ソートを行い、最低値が 1 に順位付けされます。この動作は SELECT 文の末尾に ORDER BY 句を使用する場合のデフォルトの動作と一致していますが、ほとんどの 順序計算には非直観的なものとなっています。OLAP 計算ではしばしば降順による ソートが必要となります。このとき、最高値が 1 に順位付けされますが、これは ORDER BY 句で DESC キーワードを使用して明示的に指定する必要があります。 6-17 ページを参照してください。 次の例では、ウィンドウ パーティションは「Dimension」列で定義されています。 ここでは値「A」を持つ 5 つの行で 1 つのウィンドウが構成されています。「B」お よび 「C」の場合も同様です。Measure 列は OLAP RANK 関数の入力データで、各 パーティションの行は Measure 列の値によってソートされています。RANK 関数が 適用される場合は、各パーティションに対して計算が行なわれます。Measure 列の 値は各パーティション内で 1 ∼ 5 に順位付けされます。デフォルトの昇順では最低 値に 1 が割り当てられます。 6-8 SQL Reference Guide OVER 句 この例では OLAP ROW_NUMBER 関数の計算も行われます。ここでは PARTITION BY 句を使わずに、リザルト セット全体に対して連続した行番号が生成されます。 Row Dimension Measure OLAP_RANK 1 A 10 1 2 A 50 2 3 A 100 3 4 A 120 4 5 A 500 5 6 B 50 1 7 B 60 2 8 B 200 3 9 B 220 4 10 B 600 5 11 C 40 1 12 C 300 2 13 C 500 3 14 C 1000 4 15 C 2000 5 このクエリの SQL 文は次のようになります。 select row_number() over() as row, dimension, measure, rank() over(partition by dimension order by measure) as olap_rank from...; この例のように、ウィンドウ パーティションは単一のディメンジョンの値で定義で きます。また、複数のディメンジョンを指定することもできます。たとえば、市と 州、あるいは月と四半期と年の値に基づいて、行をパーティションに分割できま す。 分析関数 6-9 OVER 句 ウィンドウ フレーム 集約など、順位付けを行わない OLAP 関数に対しては、ウィンドウ フレームを定義 できます。ウィンドウ フレームはウィンドウ パーティション内の行の集合を定義 します。ウィンドウ フレームが定義されると、OLAP 関数はパーティション全体の 固定内容ではなく、この移動フレームの内容に対して計算を行います。 ウィンドウ フレームの定義は行ベース (ROWS 指定 ) または値ベース (RANGE 指定 ) で行うことができます。 行ベースのウィンドウ フレーム どのウィンドウ フレームの場合も、参照ポイントは現在の行になります。SQL OLAP 構文は、行ベースのウィンドウ フレームを定義するためのメカニズムを提供 します。この構文では、現在の行の前後の行数を任意に指定できます。 次のダイアグラムでは、行 1 ∼ 5 は1つのパーティションを表します。OLAP ウィ ンドウ フレームが前方にスライドするにつれ、各行が現在の行となります。ここで フレームは現在の行から次の 2 行目までと定義されており、各フレームには最大で 3 行、最小で 1 行が含まれます。フレームがパーティションの末尾に達すると、現 在の行のみが含まれることになります。グレー部分は各ステップでフレームから除 外される行を示します。 1 現在の行 2 現在の行 +1 現在の行 3 現在の行 +2 現在の行 +1 現在の行 現在の行 +2 現在の行 +1 現在の行 現在の行 +2 現在の行 +1 4 5 現在の行 つまり、ここではウィンドウ フレームによって次の規則が課されます。 ■ ■ ■ ■ ■ 6-10 行 1 が現在の行の場合、行 4 と 行 5 が除外される 行 2 が現在の行の場合、行 5 と 行 1 が除外される 行 3 が現在の行の場合、行 1 と 行 2 が除外される 行 4 が現在の行の場合、行 1、2、3 が除外される 行 5 が現在の行の場合、行 1、2、3、4 が除外される SQL Reference Guide OVER 句 次の図では、これらの規則を具体的な値の集合に適用し、各行に対して計算される OLAP AVG 関数を示します。ここではスライドしながら計算を行い、現在の行の位 置によって 3 つまたはそれ以下となる行の間隔に対して、移動平均を算出していま す。 Row Dimension Measure OLAP_AVG 1 A 10 53.3 2 A 50 90.0 3 A 100 240 4 A 120 5 A 500 } 310 } 500 このクエリの SQL 文は次のようになります。 select row_number() over() as row, dimension, measure, avg(measure) over(partition by dimension order by measure rows between current row and 2 following) as olap_avg from... 平均値は次のように計算されます。 ■ ■ ■ ■ ■ Row 1 = (10 + 50 + 100)/3 Row 2 = (50+ 100 + 120)/3 Row 3 = (100 + 120 + 500)/3 Row 4 = (120 + 500)/2 Row 5 = (500)/1 リザルト セットの残りのすべてのパーティション (B、C、...) に対しても、同様の計 算が行われます。 値ベースのウィンドウ フレーム 行ベースのウィンドウ フレームの定義は数多くありますが、前の例ではその中の 1 つを紹介しました。SQL OLAP 構文では、特定の連続する行ではなく値ベース、つ まり範囲ベースの行の集合に対して制限範囲を定義するウィンドウ フレームもサ ポートしています。 分析関数 6-11 OVER 句 値ベースのウィンドウ フレームは、特定の範囲の数値を含むウィンドウ パーティ ション内に行を定義します。OLAP 関数の ORDER BY 句は、RANGE 指定を適用す る数値列を定義します。これは、その列の現在の行の値からの相対的な値で定義さ れます。RANGE 指定は ROWS 指定と同じ構文を使用しますが、その解釈は異なり ます。 たとえば、1 つのフレームを Year 値を持つ行の集合であると定義し、現在の行の年 の前または後の任意の年数を指定することができます。具体的には次のようになり ます。 order by year asc range between current row and 1 preceding 1 preceding は現在の行の Year 値マイナス 1 を意味します。 この種の範囲指定では、範囲の両端の値が含まれます。現在の行の Year 値が 2000 の場合、パーティション内の行の物理的な位置に関係なく、Year 値が 2000 または 1999 であるウィンドウ パーティション内のすべての行がフレームに含まれること になります。値ベースの行を含めたり除外したりするための規則は、行ベースのフ レームに適用される規則とは大きく異なります。行ベースのフレームは行の物理的 な順序に完全に依存します。 次に OLAP AVG の計算について説明します。ここでは、次の部分的なリザルト セットを使用して、値ベースのウィンドウ フレームの概念を説明します。前述のよ うに、フレームは次の行で構成されています。 ■ ■ 6-12 現在の行と同じ年を持つ行 現在の行から 1 を引いた年を持つ行 Row Dimension Year Measure Olap_Avg 1 A 1999 10000 10000 2 A 2001 5000 3000 3 A 2001 1000 3000 4 A 2002 12000 5250 5 A 2002 3000 5250 SQL Reference Guide OVER 句 このクエリの SQL 文は次のようになります。 select row_number() over() as row, dimension, year, measure, avg(measure) over(partition by dimension order by year asc range between current row and 1 preceding) as olap_avg from... 平均値は次のように計算されます。 ■ ■ ■ ■ ■ Row 1 = 1999、Row 2 ∼ 5 は除外、AVG = 10,000/1 Row 2 = 2001、Row 1、4、5 は除外、AVG = 6,000/2 Row 3 = 2001、Row 1、4、5 は除外、AVG = 6,000/2 Row 4 = 2002、Row 1 は除外、AVG = 21,000/4 Row 5 = 2002、Row 1 は除外、AVG = 21,000/4 ウィンドウ フレームの例については、6-30 ページを参照してください。 値ベースのフレームの昇順および降順 OLAP 関数の ORDER BY 句で値ベースのウィンドウ フレームを指定する場合、 RANGE 指定の対象となる数値列を識別するだけでなく、ORDER BY 値のソート順 も指定することになります。たとえば、次のような指定があるとします。 range between current row and n following この指定は、先に行われるソート順 (ASC または DESC) の影響を受けます。n following という指定は、次の意味を持ちます。 ■ ■ パーティションがデフォルトである昇順 (ASC) でソートされる場合、n を 加算 パーティションが降順 (DESC) でソートされる場合、n を減算 分析関数 6-13 OVER 句 たとえば、Year 列に 1999 ∼ 2002 の 4 つの異なる値がある場合を例に考えてみます。 次の表では、左にデフォルトである昇順、右に降順を示しています。 ORDER BY year ASC ORDER BY year DESC 1999 2002 2000 2001 2001 2000 2002 1999 前の年 ↕ 次の年 現在の行が 1999 で、次のように指定されているとします。 order by year asc range between current row and 1 following この場合、値 1999 および 2000 を持つ行がフレームに含まれます。一方、ソートが 降順で指定されるとします。 order by year desc range between current row and 1 following この場合は、値 1999 および 1998 を持つ行がフレームに含まれます (1998 を持つ行 はこのテーブルに存在しません )。ORDER BY 値のソート順は、値ベースのフレー ムで行を指定する場合に決定的な項目となります。数値のみで除外するか含めるか は決定されません。 6-14 SQL Reference Guide OLAP 関数の使用に関する基本規則 OLAP 関数の使用に関する基本規則 次の規則はサポートされているすべての OLAP 関数に適用されます。 ■ ■ OLAP 関数は、SQL クエリの次の部分で使用できます。 ❑ 検索項目リストの中。 ❑ 式の中。 ❑ スカラ関数の引数。 ❑ WHEN 句の中。 ❑ 最後の ORDER BY 句の中 ( エイリアス、またはそのクエリ内の別の場 所にある OLAP 関数への位置参照を使用 )。 ❑ BREAK BY...SUMMING 句を含むクエリの中。 ❑ サブクエリの中。 OLAP 関数は、次の部分では使用できません。 ❑ RISQL 表示関数と同じクエリの中。 ❑ WHERE 句の検索条件の中。 ❑ SET ( 集約 ) 関数の引数。たとえば、次の式は無効です。 sum(rank() over(order by dollars)) ❑ ■ ■ 同じクエリ ブロック内にあるほかの OLAP 関数の引数。ただし、サブ クエリ ブロック内の OLAP 関数の結果は、外部のクエリ ブロック内 のほかの OLAP 関数から参照できます。 ❑ 事前計算ビュー定義の中。ただし、OLAP 関数を含むクエリは、Vista クエリ リライト システムでリライトできます。また、これらのリラ イトに基づいて、候補ビューを生成できます。 OLAP 関数が参照する列は、グループ分けされた列か、OLAP 関数と GROUP BY 句がある同じクエリ ブロックからの集約関数である必要があり ます。OLAP 処理はグループ分け処理および集約処理の後で、最後の ORDER BY 句が適用される前に行われます。したがって、それらの中間結 果を使用して OLAP 式を記述する必要があります。 GROUP BY 句がクエリ ブロックにない場合、OLAP 関数は検索項目リスト 内のほかの列を参照できます。 相関参照は OLAP 関数内で許可されていますが、相関列のエイリアスは許 可されていません。 個々の OLAP 関数の使用方法の注意点は、この章で後述している各構文の説明を参 照してください。 分析関数 6-15 RANK、DENSE_RANK、NTILE の構文 RANK、DENSE_RANK、NTILE の構文 RANK、DENSE_RANK、および NTILE は、IBM Red Brick Warehouse でサポートさ れる OLAP 関数の順位付けファミリを構成します。これらの関数は、順位値の計算 に使用する列または式を定義している OVER 句内の ORDER BY 句に依存します。 PARTITION BY 句はオプションです。 RANK() <window_order> OVER ( DENSE_RANK() ) <window_partition> DENSERANK() NTILE(<unsigned_constant>) RANK() OVER 句で必須の ORDER BY 式に基づいて、各行の順位 値を決定します。オプションの PARTITION BY 句も指定 している場合は、順位は行グループごとにリセットされま す。同順位の行が 2 つ以上ある場合、次の順位値までは間 があきます。たとえば、2 つの行が 1 に順位付けされる と、次の順位は 3 になります。 空のかっこを指定する必要があります。 DENSE_RANK()、 DENSERANK() OVER 句で必須の ORDER BY 式に基づいて、各行の順位 値を決定します。オプションの PARTITION BY 句も指定 した場合は、順位は行グループごとにリセットされます。 DENSE_RANK 関数は、同順位の行が 2 つ以上ある場合も 次の順位値までの間があかない点が RANK 関数と異なり ます同順位の行が 2 つ以上ある場合、次の順位値までは間 があきます。たとえば、2 つの行が 1 に順位付けされて も、次の順位は 2 のままです。 DENSE_RANK と DENSERANK は同じ関数のシノニムで です。空のかっこを指定する必要があります。 NTILE 3 分位、4 分位、100 分位など、順位値をレベル分けして 計算します。計算は、関数の引数 ( 符号なし定数 ) および OVER 句で必須の ORDER BY 式に基づいて行われます。 たとえば、関数 ntile(100) over (order by dollars) は Dollar 列 の値に対して 100 分位での順位を計算します。 6-16 SQL Reference Guide RANK、DENSE_RANK、NTILE の構文 (<unsigned_constant>) NTILE 関数で必須です。第 2 章「SQL 言語の各要素」で 定義したように、符号なし整数定数を指定します。 OVER ( 順位付け関数の window 句 (<window_partition> および <window_order>) を指定します。OLAP 順位付け関数は RISQL 順位付け関数とは異なり、OVER 句を使用できま す。 <window_partition> RANK、DENSE_RANK、NTILE 関数のオプションです。 6-17 ページを参照してください。 <window_order>) RANK、DENSE_RANK、NTILE 関数で必須です。この句 は順位値の基準となる列または式を定義します。 6-17 ページを参照してください。 OLAP <window_partition> 句 次に OLAP 関数の <window_partition> 句の構文ダイアグラムを示します。 , <expression> PARTITION BY PARTITION BY OLAP 関数のウィンドウを 1 つ以上の式で定義します。 <expression> 第 3 章「式と条件」で定義したように、任意の有効な式を 指定します。 OLAP <window_order> 句 次に OLAP 関数の <window_order> 句の構文ダイアグラムを示します。 , ORDER BY <expression> ASC NULLS LAST DESC NULLS FIRST 分析関数 6-17 RANK、DENSE_RANK、NTILE の構文 ORDER BY 各パーティション内の行をソートします。パーティション が指定されていない場合、この句は完全な中間リザルト セットをソートします。ORDER BY 句は OLAP 関数の順 位付けファミリでは必須で、順位値の基準となる列を定義 します。この句は <window_frame> 句を含む、順位付けを 行わない OLAP 関数で必須です。 この句は COUNT (DISTINCT) などの DISTINCT キーワー ドを含む OLAP 集約関数には使用できません。集約関数 は、6-24 ページを参照してください。 <expression> ソート操作を行う 1 つ以上の列または式を定義します。第 3 章「式と条件」で定義したように、OLAP ORDER BY 句 には、有効であればどのような式でも記述できます。ただ し、SELECT 文に追加できる通常の ORDER BY 句の定数 とは異なり、数値定数は位置を表す数値としては解釈され ません。 値ベースのウィンドウ フレーム (RANGE 指定 ) を使用す る OLAP 関数には 1 つの式のみを記述でき、この式は数値 式である必要があります。6-25 ページ を参照してくださ い。 ASC 昇順を指定します ( デフォルト )。ORDER BY 列の最低値 は 1、最高値は n に順位付けされます。 DESC 降順を指定します。ORDER BY 句の最高値は 1、最低値は n に順位付けされます。 NULLS FIRST、 NULLS LAST ORDER BY の列の値を、NULL を含む行が最初 (1 に順位 付け ) または最後 (n に順位付け ) になるようにソートしま す。昇順 ASC の場合 NULLS FIRST ( デフォルト )、降順 DESC の場合 NULLS LAST となります。 OLAP 順位付けの例 次の例は OLAP RANK、DENSE_RANK、NTILE 関数がどのように機能するかを示 しています。これに対応する RISQL RANK および NTILE の例は、この章で後述し ます。 6-18 SQL Reference Guide RANK、DENSE_RANK、NTILE の構文 RANK の例、上位 5 行 次のクエリは総売上高の製品ごとの順位付けを行います。WHEN 句は上位 5 行以外 をすべて削除するために使用します。この例ではパーティションが指定されていな いため、順位は完全なリザルト セット全体に適用されます。 select prod_name, sum(dollars) as prod_sales, rank() over(order by prod_sales desc) as prod_rank from product join sales on sales.classkey = product.classkey and sales.prodkey = product.prodkey group by prod_name when prod_rank <=5; PROD_NAME Demitasse Ms Xalapa Lapa NA Lite Lotta Latte Cafe Au Lait PROD_SALES PROD_RANK 656401.50 1 577450.00 2 557655.00 3 533454.50 4 526793.50 5 このクエリの OLAP ORDER BY 句は 2 つの主要な機能を実行しています。 ■ ■ 順位値が割り当てられる列の値を指定します。この場合は Prod_Sales 列で す。 降順のソート順 (DESC キーワード ) を指定します。ここでは Prod_Sales の 最高値に順位 1 が割り当てられます。 SQL 標準の OLAP 関数のデフォルトのソート順は昇順 (ASC キーワード ) です。デフォルトの順位付けでは順位 1 が最低売上額に割り当てられるた め、DESC キーワードは重要です。 RISQL の順位付け関数では、より直観的な降順がデフォルトとなっていま す。 この例に対応する RISQL クエリは、6-62 ページに記載しています。 分析関数 6-19 RANK、DENSE_RANK、NTILE の構文 DENSE_RANK の例 OLAP DENSE_RANK 関数により返される順位を理解するには、OLAP RANK 関数 により返される同等の値と比較するとよいでしょう。次のクエリでは両方の値セッ トが返されます。ORDER BY 句に同順位の行が出現するまで、順位が同じであるこ とに注意してください。同順位の行が出現すると、DENSE_RANK 関数は同順位の 行に同じ順位値を割り当てますが、次の順位値をスキップするわけではありませ ん。 select date, prod_name, sum(dollars) as aroma_sales, rank() over(order by sum(dollars) desc) as aroma_rank, dense_rank() over(order by sum(dollars) desc) as aroma_dense from sales natural join period natural join product where qtr = 'Q1_00' and prod_name like 'Aroma%' group by date, prod_name; DATE 2000-03-07 2000-02-27 2000-03-02 2000-01-30 2000-02-21 2000-02-09 2000-03-24 2000-03-09 2000-02-07 2000-01-14 2000-03-29 2000-03-31 2000-03-04 2000-02-01 2000-02-15 2000-03-13 2000-03-25 2000-02-05 2000-03-27 2000-02-08 2000-01-15 2000-03-28 2000-03-22 2000-02-26 2000-01-02 2000-02-17 2000-03-03 2000-02-02 2000-03-06 2000-01-22 ... 6-20 SQL Reference Guide PROD_NAME Aroma Roma Aroma Roma Aroma Roma Aroma Roma Aroma Roma Aroma Roma Aroma Roma Aroma Roma Aroma Roma Aroma Roma Aroma Roma Aroma Roma Aroma Roma Aroma Roma Aroma Roma Aroma Roma Aroma Roma Aroma Roma Aroma Roma Aroma Roma Aroma Roma Aroma Roma Aroma Roma Aroma Roma Aroma Roma Aroma Roma Aroma Roma Aroma Roma Aroma Roma Aroma Roma AROMA_SALES AROMA_RANK AROMA_DENSE 1537.00 1 1 1457.25 2 2 1339.50 3 3 1261.50 4 4 1174.50 5 5 1152.75 6 6 1113.00 7 7 1109.25 8 8 1074.00 9 9 1057.50 10 10 1029.50 11 11 1022.25 12 12 1015.00 13 13 1000.50 14 14 993.25 15 15 971.50 16 16 964.25 17 17 935.25 18 18 928.00 19 19 913.50 20 20 884.50 21 21 884.50 21 21 877.25 23 22 870.00 24 23 855.50 25 24 855.50 25 24 848.25 27 25 841.00 28 26 833.75 29 27 813.75 30 28 RANK、DENSE_RANK、NTILE の構文 DENSE_RANK に対応する RISQL 関数はありません。RISQL RANK 関数は OLAP RANK 関数と同じように同順位の行を扱います。 NTILE の例 次のクエリでは OLAP NTILE(5) 関数が CASE 式内に使用されています。CASE 式は NTILE 順位 (1 ∼ 5) を 3 つの名前付きグループに再分類します。WHEN 句は中間リ ザルト セットから上位 20 行のみを保持します。 select prod_name, date, dollars, case ntile(5) over(order by dollars desc) when 1 then 'top_20' when 2 then 'mid_60' when 3 then 'mid_60' when 4 then 'mid_60' when 5 then 'low_20' end as n_rank from sales natural join product natural join period natural join store where year = 2000 and day = 'TH' and store_name like 'Minnesota Roaster%' when n_rank = 'top_20' order by prod_name; PROD_NAME Colombiano Demitasse Ms NA Lite NA Lite Veracruzano Veracruzano DATE DOLLARS 2000-02-03 276.75 2000-03-30 292.50 2000-01-06 396.00 2000-03-02 297.00 2000-01-13 360.00 2000-02-10 322.50 N_RANK top_20 top_20 top_20 top_20 top_20 top_20 このセクションで前述した OLAP RANK の例と同様に、ORDER BY 句は決定的な項 目です。ここでも、高から低へ順位付けを行うには DESC キーワードを使用する必 要があります。 この例に対応する RISQL クエリは、6-58 ページ以降の NTILE 関数の説明で記載し ています。 分析関数 6-21 ROW_NUMBER および ROWNUMBER の構文 ROW_NUMBER および ROWNUMBER の構文 ROW_NUMBER 関数は各 OLAP パーティションの各行の番号を返します。各パー ティションの行番号は 1 で始まり、各行は同順位であるかないかに関係なく 1 ずつ 増加します。<window_partition> 句が指定されない場合、完全なリザルト セットに 対して 1 ∼ n の番号が付けられます。 <window_partition> および <window_order> 句はどちらもオプションですが、OVER() キーワードとかっこは指定する必要があります。この関数自体は引数を必要としま せんが、かっこは指定する必要があります。次のクエリは有効です。 select row_number() over() from table; <window_order> 句が指定されない場合は、クエリで処理されるデフォルトの行順序 に従って行番号が割り当てられます。<window_order> 句が指定される場合は、 ORDER BY 指定により行番号の割り当てが決まります。 次にこの関数の完全な構文ダイアグラムを示します。 ROW_NUMBER() ) OVER ( ROWNUMBER() ROW_NUMBER()、 ROWNUMBER() <window_partition> <window_order> 現在のパーティション内の各行に一意の行番号を割り当て ます。行番号は 1 から開始されます。 ROW_NUMBER および ROWNUMBER は同じ関数のシノ ニムです。空のかっこは必須です。 6-22 OVER() <window_partition> および <window_order> 句を指定しま す。空の OVER() 句も有効です。 <window_partition> 6-17 ページ を参照してください。ROW_NUMBER 関数の オプションです。 <window_order> 6-17 ページ を参照してください。ROW_NUMBER 関数の オプションです。 SQL Reference Guide ROW_NUMBER および ROWNUMBER の構文 ROW_NUMBER の例 次のクエリでは Product テーブル内の行をパッケージの種類によりパーティション 分割し、各パーティションで行番号を 1 から再開しています。 select rownumber() over(partition by pkg_type order by prod_name) as rownum, prod_name, pkg_type from product; ROWNUM 1 2 1 2 3 4 5 1 2 3 4 5 6 7 8 9 10 11 12 13 ... PROD_NAME Aroma Sounds CD Aroma Sounds Cassette Christmas Sampler Coffee Sampler Easter Sampler Basket Spice Sampler Tea Sampler Aroma Roma Aroma baseball cap Aroma t-shirt Assam Gold Blend Assam Grade A Breakfast Blend Cafe Au Lait Coffee Mug Colombiano Darjeeling Number 1 Darjeeling Special Demitasse Ms Earl Grey PKG_TYPE Aroma designer box Aroma designer box Gift box Gift box Gift box Gift box Gift box No pkg No pkg No pkg No pkg No pkg No pkg No pkg No pkg No pkg No pkg No pkg No pkg No pkg <window_order> 句は Prod_Name 列を指定しているため、行番号は製品名のアル ファベット順に基づいて付けられます。たとえば、No pkg パーティション内の 3 つ の Aroma 製品には、1、2、3 の番号が付けられています。大文字は小文字より先に ソートされることに注意してください。 使用上の注意 ROW_NUMBER 関数は簡略化した RANK 関数のようなもので、ORDER BY 句を必 要とせず、同順位を検出しません。ROW_NUMBER 関数は常に、各ウィンドウ パーティション内の各列について、一意の値を返します。 この関数は各基本テーブルに存在する rbw_rownum 擬似列には関係しません。 分析関数 6-23 AVG、COUNT、MIN、MAX、SUM の構文 AVG、COUNT、MIN、MAX、SUM の構文 これらの OLAP 集約関数は、第 4 章で説明した SQL 集約関数と同じ名前を持ち、部 分的に同じ構文を使いますが、SQL 関数とは別のクラスに属します。次に、集約関 数を含む式をもとに OLAP 集約関数を使った式の構文ダイアグラムを示します。 <set_function> ) OVER ( <window_partition> <window_order> <window_frame> <set_function> 第 4 章「集約関数」で定義したように、AVG、COUNT、 MIN、MAX、SUM を含む式を指定します。 COUNT(DISTINCT) など、集約での DISTINCT の指定もサ ポートされます。ただし、<window_order> 句はこれらの DISTINCT 関数で使用できません。 6-24 OVER() <window_partition>、<window_order>、<window_frame> な ど、OLAP 関数の window 句を指定します。SQL OLAP 集 約関数は標準の SQL 集約関数とは異なり、OVER 句を使 用できます。 <window_partition> 6-17 ページを参照してください。AVG、COUNT、MIN、 MAX、SUM のオプションです。 <window_order> 6-17 ページを参照してください。AVG、COUNT、MIN、 MAX、SUM のオプションです。<window_frame> 句を指 定する場合は必須です。 <window_frame> 6-25 ページを参照してください。AVG、COUNT、MIN、 MAX、SUM のオプションです。 SQL Reference Guide AVG、COUNT、MIN、MAX、SUM の構文 OLAP <window_frame> 句 <window_order> 句はウィンドウ フレームを定義する場合に必須です。ORDER BY 句はパーティションごとに各行の順序を決定し、ウィンドウ フレームはその順序に 対して適用されます。ウィンドウ フレームの概念的な説明は、6-30 ページを参照し てください。 次に OLAP <window_frame> 句の構文ダイアグラムを示します。 ROWS <frame_start> RANGE <frame_end> <frame_between> ROWS、RANGE ウィンドウ フレームの種類を行ベース (ROWS) または値 ベース (RANGE) で定義します。<window_frame> 句の前に は <window_order> 句が必要です。6-17 ページを参照して ください。 行ベースのウィンドウフレームは、<frame_start>、 <frame_end> または <frame_between> の指定の基準となる 参照ポイントとして現在の行を使用することで、パーティ ション内での正確な行数を定義します。 値ベースのウィンドウ フレームは、<window_order> 句、 および <frame_start>、<frame_end>、<frame_between> のい ずれかで指定する基準を満たす行の集合を定義します。現 在の行は参照ポイントとして機能します。値ベースのウィ ンドウ フレームの場合、<window_order> 句に含める式は 1 つだけにする必要があり、また、その式は数値式である必 要があります。 ウィンドウ フレームの一般的な説明は、6-10 ページを参 照してください。構文の例は、6-30 ページを参照してく ださい。 <frame_start> 現在の行を基準として、ウィンドウ フレームの開始行 ( 下 端の行 ) を定義します。この場合、終了行 ( 上端の行 ) が 現在の行となります。6-26 ページを参照してください。 分析関数 6-25 AVG、COUNT、MIN、MAX、SUM の構文 <frame_end> 現在の行を基準として、ウィンドウ フレームの終了行 ( 上 端の行 ) を定義します。この場合、開始行 ( 下端の行 ) が 現在の行となります。6-27 ページを参照してください。 <frame_between> 現在の行を基準として、ウィンドウ フレームの開始行と 終了行を定義します。6-27 ページを参照してください。 <frame_start> 句 次に <frame_start> 句の構文ダイアグラムを示します。 UNBOUNDED PRECEDING <unsigned_constant> PRECEDING CURRENT ROW UNBOUNDED PRECEDING パーティションの最初の行を開始行 ( 下端の行 ) に指定し ます。 <unsigned_constant> PRECEDING 現在の行から n 行前を行ベースの開始行に指定します。ま たは、現在の行の ORDER BY 値に n を加算または減算し た値の行を、値ベースの開始行とします。加算または減算 のどちらになるかは、ORDER BY 句のソート指定 (ASC ま たは DESC) によって決まります。 CURRENT ROW 現在の行を開始行に指定します。 <frame_start> 句のみを指定した場合、ウィンドウ フレームの上端の行が現在の行と なります。 6-26 SQL Reference Guide AVG、COUNT、MIN、MAX、SUM の構文 <frame_end> 句 次に <frame_end> 句の構文ダイアグラムを示します。 UNBOUNDED FOLLOWING <unsigned_constant> FOLLOWING CURRENT ROW UNBOUNDED FOLLOWING パーティションの最後の行を終了行 ( 上端の行 ) に指定し ます。 <unsigned_constant> FOLLOWING 現在の行から n 行後を行ベースの終了行に指定します。ま たは、現在の行の ORDER BY 値に n を加算または減算し た値の行を、値ベースの終了行とします。加算または減算 のどちらになるかは、ORDER BY 句のソート指定 (ASC ま たは DESC) によって決まります。 CURRENT ROW 現在の行を終了行に指定します。 <frame_end> 句のみを指定した場合、ウィンドウ フレームの下端の行が現在の行と なります。 <frame_between> 句 次に <frame_between> 句の構文ダイアグラムを示します。 BETWEEN <frame_bound1> <frame_bound1>、 <frame_bound2> AND <frame_bound2> BETWEEN...AND キーワードで指定されたウィンドウ フ レームの開始行 ( 下端の行 ) と終了行 ( 上端の行 ) を指定 します。 分析関数 6-27 AVG、COUNT、MIN、MAX、SUM の構文 <frame_bound1> 次に <frame_bound1> 句の構文ダイアグラムを示します。 UNBOUNDED PRECEDING <unsigned_constant> PRECEDING <unsigned_constant> FOLLOWING CURRENT ROW UNBOUNDED PRECEDING パーティションの最初の行を開始行に指定します。 <unsigned_constant> PRECEDING 現在の行から n 行前を行ベースの開始行に指定します。ま たは、現在の行の ORDER BY 値に n を加算または減算し た値の行を、値ベースの開始行とします。加算または減算 のどちらになるかは、ORDER BY 句のソート指定 (ASC ま たは DESC) によって決まります。 <unsigned_constant> FOLLOWING 現在の行から n 行後を行ベースの開始行に指定します。ま たは、現在の行の ORDER BY 値に n を加算または減算し た値の行を、値ベースの開始行とします。加算または減算 のどちらになるかは、ORDER BY 句のソート指定 (ASC ま たは DESC) によって決まります。 <frame_bound1> に FOLLOWING を指定する場合は、 <frame_bound2> に PRECEDING または CURRENT ROW は 指定できません。 CURRENT ROW 現在の行をウィンドウの上端または下端の行に指定しま す。<frame_bound1> に CURRENT ROW を指定する場合 は、<frame_bound2> に PRECEDING は指定できません。 <frame_bound2> 次に <frame_bound2> 句の構文ダイアグラムを示します。 6-28 SQL Reference Guide AVG、COUNT、MIN、MAX、SUM の構文 UNBOUNDED FOLLOWING <unsigned_constant> PRECEDING <unsigned_constant> FOLLOWING CURRENT ROW UNBOUNDED FOLLOWING パーティションの最後の行を終了行に指定します。 <unsigned_constant> PRECEDING 現在の行から n 行前を行ベースの終了行に指定します。ま たは、現在の行の ORDER BY 値に n を加算または減算し た値の行を、値ベースの終了行とします。加算または減算 のどちらになるかは、ORDER BY 句のソート指定 (ASC ま たは DESC) によって決まります。 <frame_bound1> に FOLLOWING または CURRENT ROW を 指定した場合は、<frame_bound2> に PRECEDING を指定 できません。 <unsigned_constant> FOLLOWING 現在の行から n 行後を行ベースの終了行に指定します。ま たは、現在の行の ORDER BY 値に n を加算または減算し た値の行を、値ベースの終了行とします。加算または減算 のどちらになるかは、ORDER BY 句のソート指定 (ASC ま たは DESC) によって決まります。 CURRENT ROW 現在の行を終了行に指定します。<frame_bound1> に FOLLOWING を指定した場合は、<frame_bound2> に CURRENT ROW は指定できません。 分析関数 6-29 AVG、COUNT、MIN、MAX、SUM の構文 行ベースのウィンドウ フレームの例 行ベースのウィンドウ フレームは現在の行とその前の数行で構成されます。フレー ム内の前後の行数は、定数 (1、2、3 など ) または無制限として指定できます。無制 限の場合、パーティション内での現在の行の前または後のすべての行が対象となり ます。 次の例は、各種ウィンドウ フレームを指定するメカニズムと、そのメカニズムがど のように OLAP AVG 関数の計算に影響を与えるかを示しています。ウィンドウ フ レームを使用したビジネス クエリの例は、6-40 ページ「OLAP 集約の例」を参照し てください。 この例では、8 行 3 列の Points テーブルを使用します。 PLAYER Smith Singh Ricci Osaka Baxter Chun Tran Kwan TEAM A A B B B C D D POINTS 14 7 12 8 18 13 16 9 このテーブルは次の SQL 文を実行することで作成できます。 create table points (player char(10), team char(10), points int); insert insert insert insert insert insert insert insert 6-30 SQL Reference Guide into into into into into into into into points points points points points points points points values('Smith','A',14); values('Singh','A',7); values('Chun','C',13); values('Osaka','B',8); values('Ricci','B',12); values('Baxter','B',18); values('Kwan','D',9); values('Tran','D',16); AVG、COUNT、MIN、MAX、SUM の構文 ROWS UNBOUNDED PRECEDING は、現在の行とその前にあるパーティション内の 各行がフレームに含まれることを意味します。 RISQL> select team, player, points, > avg(points) over(partition by team order by points desc > rows unbounded preceding) as olap_avg > from points; TEAM PLAYER POINTS OLAP_AVG A Smith 14 14.00000000000 A Singh 7 10.50000000000 B Baxter 18 18.00000000000 B Ricci 12 15.00000000000 B Osaka 8 12.66666666666 C Chun 13 13.00000000000 D Tran 16 16.00000000000 D Kwan 9 12.50000000000 この例と同じウィンドウ フレームを、次の <frame_between> 句でも表現できます。 rows between unbounded preceding and current row この場合、Points 値にデフォルトの昇順ではなく降順を使用していることに注意し てください。つまり、最も多くの得点を獲得したプレイヤーが各パーティションの 最初にソートされます。 ROWS n PRECEDING は、現在の行とその前にあるパーティション内の n 行がフ レームに含まれることを意味します。この例では、ORDER BY 句にデフォルトの昇 順を使用しています。 select team, player, points, avg(points) over(partition by team order by points rows 1 preceding) as olap_avg from points; TEAM A A B B B C D D PLAYER Singh Smith Osaka Ricci Baxter Chun Kwan Tran POINTS 7 14 8 12 18 13 9 16 OLAP_AVG 7.00000000000 10.50000000000 8.00000000000 10.00000000000 15.00000000000 13.00000000000 9.00000000000 12.50000000000 この例と同じウィンドウ フレームを、次の <frame_between> 句でも表現できます。 rows between 1 preceding and current row 分析関数 6-31 AVG、COUNT、MIN、MAX、SUM の構文 ROWS BETWEEN n PRECEDING AND n FOLLOWING は、現在の行とその前の n 行、 および現在の行の後の n 行がフレームに含まれることを意味します。 select team, player, points, avg(points) over(partition by team order by points rows between 1 preceding and 1 following) as olap_avg from points; TEAM PLAYER POINTS OLAP_AVG A Singh 7 10.50000000000 A Smith 14 10.50000000000 B Osaka 8 10.00000000000 B Ricci 12 12.66666666666 B Baxter 18 15.00000000000 C Chun 13 13.00000000000 D Kwan 9 12.50000000000 D Tran 16 12.50000000000 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING は、 パーティション内のすべての行がフレームに含まれることを意味します。 select team, player, points, avg(points) over(partition by team order by points rows between unbounded preceding and unbounded following) as olap_avg from points; TEAM A A B B B C D D PLAYER Singh Smith Osaka Ricci Baxter Chun Kwan Tran POINTS 7 14 8 12 18 13 9 16 OLAP_AVG 10.50000000000 10.50000000000 12.66666666666 12.66666666666 12.66666666666 13.00000000000 12.50000000000 12.50000000000 OLAP ORDER BY 句が指定されない場合、これはデフォルトのウィンドウ フレーム です。実際この指定では、各パーティション内の各行の同じウィンドウ フレームに 対して、OLAP の計算が適用されることになります。 6-32 SQL Reference Guide AVG、COUNT、MIN、MAX、SUM の構文 値ベースのウィンドウ フレームの例 次の例は、OLAP 関数に指定できる値ベースのウィンドウ フレームを示していま す。この例では 4 列の Points_Age テーブルを使用します。このテーブルには Points テーブルと同じデータに加えて、Age 列が含まれています。 PLAYER Smith Singh Chun Osaka Ricci Baxter Kwan Tran AGE 26 25 21 35 40 27 22 31 TEAM A A C B B B D D POINTS 14 7 13 8 12 18 9 16 このテーブルは次の SQL 文を実行することで作成できます。 create table points_age (player char(10), age int, team char(10), points int); insert insert insert insert insert insert insert insert into into into into into into into into points_age points_age points_age points_age points_age points_age points_age points_age values('Smith', 26, 'A',14); values('Singh', 25, 'A',7); values('Chun', 21, 'C',13); values('Osaka', 35, 'B',8); values('Ricci', 40, 'B',12); values('Baxter', 27, 'B',18); values('Kwan', 22, 'D',9); values('Tran', 31, 'D',16); この例では、ORDER BY 列にデフォルトの昇順を使用します。Age 値は各パーティ ション内で低から高の順に並びます。DESC キーワードを追加する場合は次のよう になります。 order by age desc... OLAP 関数の結果は、昇順と降順のどちらを指定するかによって異なります。 分析関数 6-33 AVG、COUNT、MIN、MAX、SUM の構文 次の例では、現在の行の年齢に 9 を足した年齢までがウィンドウ フレームに指定さ れています。 select player, age, team, points, avg(points) over(partition by team order by age range between current row and 9 following) as olap_avg from points_age; PLAYER Singh Smith Baxter Osaka Ricci Chun Kwan Tran AGE 25 26 27 35 40 21 22 31 TEAM A A B B B C D D POINTS 7 14 18 8 12 13 9 16 OLAP_AVG 10.50000000000 14.00000000000 13.00000000000 10.00000000000 12.00000000000 13.00000000000 12.50000000000 16.00000000000 パーティション D の Kwan の平均値は Tran の得点を考慮したものであることに注意 してください。両者の年齢は指定された値ベースの範囲内にあります。パーティ ション B では、Baxter の平均値に 8 才上の Osaka の得点が含まれていますが、13 才 上の Ricci の得点は含まれていません。 次の例では、現在の行の年齢から 3 を引いた年齢までがウィンドウ フレームに指定 されています。 select player, age, team, points, avg(points) over(partition by team order by age range between 3 preceding and current row) as olap_avg from points_age; PLAYER Singh Smith Baxter Osaka Ricci Chun Kwan Tran AGE 25 26 27 35 40 21 22 31 TEAM A A B B B C D D POINTS 7 14 18 8 12 13 9 16 OLAP_AVG 7.00000000000 10.50000000000 18.00000000000 8.00000000000 12.00000000000 13.00000000000 9.00000000000 16.00000000000 パーティション A の Smith の平均値は前の行の Singh の得点を考慮したものである ことに注意してください。両者の年齢は指定の範囲内にあります。この例にあるほ かのすべての行については、現在の行以外は平均値の計算から除外されます。 6-34 SQL Reference Guide AVG、COUNT、MIN、MAX、SUM の構文 次の例では、現在の行の年齢から 1 を引いた年齢から現在の行の年齢に 1 を足した 年齢までが、ウィンドウ フレームに指定されています。 select player, age, team, points, avg(points) over(partition by team order by age range between 1 preceding and 1 following) as olap_avg from points_age; PLAYER AGE TEAM POINTS OLAP_AVG Singh 25 A 7 10.50000000000 Smith 26 A 14 10.50000000000 Baxter 27 B 18 18.00000000000 Osaka 35 B 8 8.00000000000 Ricci 40 B 12 12.00000000000 Chun 21 C 13 13.00000000000 Kwan 22 D 9 9.00000000000 Tran 31 D 16 16.00000000000 パーティション A の Singh と Smith の平均が同じであることに注意してください。 Singh が現在の行の場合、Smith はフレームに含まれます (26 = 1 才上 )。Smith が現 在の行の場合、Singh はフレームに含まれます (25 = 1 才下 )。この例にあるほかのす べての行については、現在の行以外は平均値の計算から除外されます。 分析関数 6-35 AVG、COUNT、MIN、MAX、SUM の構文 リードおよびラグ ウィンドウ フレーム 次の形式でウィンドウ フレームを指定することで、SQL OLAP LEAD および LAG 関 数の機能をエミュレートできます。 rows between 1 preceding and 1 preceding rows between 2 preceding and 1 preceding rows between 1 following and 3 following これらのウィンドウ フレームには現在の行が含まれず、現在の行の OLAP 関数は現 在の行の前の行の集合 ( ラグ ) または後の行の集合 ( リード ) に基づきます。たとえ ば次のクエリでは、現在の行の前にあるパーティション内の 2 行に対して、Points 列の値で OLAP 平均値を計算しています。 RISQL> select player, age, team, points, avg(points) over(partition by team order by age rows between 2 preceding and 1 preceding) as olap_avg from points_age; PLAYER AGE TEAM POINTS OLAP_AVG Singh 25 A 7 NULL Smith 26 A 14 7.00000000000 Baxter 27 B 18 NULL Osaka 35 B 8 18.00000000000 Ricci 40 B 12 13.00000000000 Chun 21 C 13 NULL Kwan 22 D 9 NULL Tran 31 D 16 9.00000000000 パーティション B では、Ricci の平均値は Baxter および Osaka の Points 合計から計算 しています ((18 + 8 = 26)/2 = 13)。現在の行に前の行が存在せず、計算に使用できな い場合、OLAP 関数は NULL を返します。 6-36 SQL Reference Guide AVG、COUNT、MIN、MAX、SUM の構文 NULLS FIRST および NULLS LAST の例 次の例は OLAP ORDER BY 句に NULLS FIRST および NULLS LAST を設定した場合 の動作を示しています。この動作を示すため、2 つの新しい行を Points_Age テーブ ルに挿入します。 RISQL> insert into points_age values('Scofield', NULL, 'A',15); RISQL> insert into points_age values('Guinness', NULL, 'C',10); 次は ORDER BY 句に NULLS FIRST が指定されている場合の例です。 RISQL> select player, age, team, points, > avg(points) over(partition by team order by age nulls first > rows between 1 preceding and 1 following) as olap_avg > from points_age; PLAYER AGE TEAM POINTS OLAP_AVG Scofield NULL A 15 11.00000000000 Singh 25 A 7 12.00000000000 Smith 26 A 14 10.50000000000 Baxter 27 B 18 13.00000000000 Osaka 35 B 8 12.66666666666 Ricci 40 B 12 10.00000000000 Guinness NULL C 10 11.50000000000 Chun 21 C 13 11.50000000000 Kwan 22 D 9 12.50000000000 Tran 31 D 16 12.50000000000 同じクエリに NULLS LAST ( デフォルト ) を指定した場合は、次のようになります。 RISQL> select player, age, team, points, > avg(points) over(partition by team order by age nulls last > rows between 1 preceding and 1 following) as olap_avg > from points_age; PLAYER AGE TEAM POINTS OLAP_AVG Singh 25 A 7 10.50000000000 Smith 26 A 14 12.00000000000 Scofield NULL A 15 14.50000000000 Baxter 27 B 18 13.00000000000 Osaka 35 B 8 12.66666666666 Ricci 40 B 12 10.00000000000 Chun 21 C 13 11.50000000000 Guinness NULL C 10 11.50000000000 Kwan 22 D 9 12.50000000000 Tran 31 D 16 12.50000000000 NULL ORDER BY 値での行の配置方法によって、OLAP の平均値計算結果が各パー ティション内でどのように変化するかに注意してください。 分析関数 6-37 AVG、COUNT、MIN、MAX、SUM の構文 OLAP 集約の使用上の注意 次の規則は SQL 標準に準拠しています。 集約関数は OLAP 集約関数で入れ子にすることができます。たとえば、次のクエリ は有効です。 select avg(sum(dollars)) over() from sales; ここで SUM 関数は集約関数であり、これを囲む AVG 関数は OLAP 関数です。クエ リの処理順としては、OLAP 関数の計算は常にグループ分けと集約操作の後、最後 の ORDER BY 操作の前に実行されます。 OLAP 集約関数の OVER 句が空の場合、または OVER 句に <window_partition> のみ が指定されている場合、OLAP の計算は各パーティション内の各行について、同じ デフォルトのウィンドウ フレームに対して適用されます。したがって、OLAP 関数 の結果は、パーティション内の各行で同じになります。たとえば、次のようになり ます。 select player, team, age, points, sum(points) over(partition by team) as olap_sum from points_age; PLAYER Smith Singh Ricci Osaka Baxter Chun Tran Kwan TEAM A A B B B C D D AGE POINTS OLAP_SUM 26 14 21 25 7 21 40 12 38 35 8 38 27 18 38 21 13 13 31 16 25 22 9 25 <window_order> 句はあるが <window_frame> 句がない OLAP 集約関数では、デフォ ルトの値ベースのフレームが使用され、次のように指定した場合と同じになりま す。 range between unbounded preceding and current row 6-38 SQL Reference Guide AVG、COUNT、MIN、MAX、SUM の構文 たとえば、次のようになります。 select player, team, age, points, sum(points) over(order by team) as olap_sum from points_age; PLAYER Smith Singh Ricci Osaka Baxter Chun Tran Kwan TEAM A A B B B C D D AGE POINTS OLAP_SUM 26 14 21 25 7 21 40 12 59 35 8 59 27 18 59 21 13 72 31 16 97 22 9 97 この動作により累積合計が計算されますが、同一の ORDER BY 値を持つ行には同じ 累積合計が割り当てられます。 分析関数 6-39 AVG、COUNT、MIN、MAX、SUM の構文 OLAP 集約の例 次の例で、累積合計と移動平均などのさまざまな OLAP 集約がどのように計算され るかを示します。 累積合計 次のクエリは与えられた期間における製品売上の累積合計を計算します。OLAP SUM 関数は累積合計を計算するために使用されます。この例に対応する RISQL ク エリは、6-48 ページ以降の CUME 関数の説明で記載しています。 select prod_name, store_name, date, sum(quantity) over(order by date rows unbounded preceding) as run_total from sales natural join period natural join product natural join store where day = 'FR' and year = 2000 and qtr = 'Q1_00' and prod_name = 'Aroma baseball cap' order by date PROD_NAME Aroma baseball Aroma baseball Aroma baseball Aroma baseball Aroma baseball Aroma baseball cap cap cap cap cap cap STORE_NAME San Jose Roasting Company Miami Espresso Olympic Coffee Company San Jose Roasting Company San Jose Roasting Company Beaches Brew DATE 2000-02-11 2000-02-18 2000-03-03 2000-03-17 2000-03-24 2000-03-24 RUN_TOTAL 2 10 24 30 44 48 このクエリでは、ウィンドウ フレームを次のように指定しています。 rows unbounded preceding この行ベースのウィンドウ フレームは、各パーティション内の完全な行の集合 ( 現 在の行とその前にあるすべての行 ) で構成されます。したがって、累積合計は行ご とに増加します。同じウィンドウ フレームを、BETWEEN...AND を使用して次のよ うに表現することもできます。 rows between unbounded preceding and current row 6-40 SQL Reference Guide AVG、COUNT、MIN、MAX、SUM の構文 累積合計のリセット 次の例は、SUM 関数に OLAP パーティションを使用して、累積合計を計算およびリ セットする方法を示しています。製品名が変わるときに PROD_TOTAL 列がリセッ トされることに注意してください。 select prod_name, city, sum(dollars) as prod_dol, sum(sum(dollars)) over(partition by prod_name order by prod_name, city rows unbounded preceding) as prod_total, sum(sum(dollars)) over(order by prod_name, city rows unbounded preceding) as run_total from sales natural join product natural join period natural join store natural join market where year = 1999 and district like 'Chicago%' group by prod_name, city order by prod_name, city; PROD_NAME Aroma Roma Aroma Roma Cafe Au Lait Cafe Au Lait Colombiano Colombiano Demitasse Ms Demitasse Ms Expresso XO Expresso XO La Antigua La Antigua Lotta Latte Lotta Latte NA Lite NA Lite Veracruzano Veracruzano Xalapa Lapa Xalapa Lapa CITY Chicago Detroit Chicago Detroit Chicago Detroit Chicago Detroit Chicago Detroit Chicago Detroit Chicago Detroit Chicago Detroit Chicago Detroit Chicago Detroit PROD_DOL PROD_TOTAL RUN_TOTAL 13188.50 13188.50 13188.50 12820.75 26009.25 26009.25 17394.50 17394.50 43403.75 15737.50 33132.00 59141.25 10544.25 10544.25 69685.50 11104.75 21649.00 80790.25 16960.50 16960.50 97750.75 17264.00 34224.50 115014.75 10494.75 10494.75 125509.50 11644.75 22139.50 137154.25 11774.00 11774.00 148928.25 13949.00 25723.00 162877.25 16402.00 16402.00 179279.25 10940.50 27342.50 190219.75 11864.00 11864.00 202083.75 14931.00 26795.00 217014.75 9561.00 9561.00 226575.75 11764.00 21325.00 238339.75 13079.50 13079.50 251419.25 16747.00 29826.50 268166.25 この例は、7-59 ページの RESET BY 句の説明で使用している RISQL の例に対応し ています。 分析関数 6-41 AVG、COUNT、MIN、MAX、SUM の構文 移動平均 次の例は、OLAP AVG 関数を使用して移動平均を計算する方法を示しています。 select month, quantity, dec(avg(quantity) over(order by sales.perkey desc rows 2 following),7,2) as mv_avg from sales natural join period natural join promotion where month in ('DEC', 'APR') and sales.promokey in (1001, 1002, 2001, 2002) order by sales.perkey; MONTH QUANTITY MV_AVG APR 16 16.00 APR 13 14.50 APR 17 15.33 APR 7 12.33 APR 14 12.66 APR 7 9.33 APR 13 11.33 APR 18 12.66 APR 4 11.66 APR 17 13.00 DEC 4 8.33 DEC 12 11.00 DEC 7 7.66 APR 1 6.66 APR 8 5.33 ... 移動平均の行範囲は 3 行で、ここでは次のように表現されています。 rows 2 following 同じウィンドウ フレームを次のように表現することもできます。 rows between current row and 2 following この例に対応する RISQL クエリは、6-52 ページ以降の MOVINGAVG 関数の説明で 記載しています。 6-42 SQL Reference Guide AVG、COUNT、MIN、MAX、SUM の構文 値ベースのウィンドウ フレームを使用した OLAP SUM 関数 次の例で、OLAP の機能が RISQL 表示関数で使用できる機能よりも強力である場合 を示します。 このクエリは OLAP SUM 関数に値ベースのウィンドウ フレームを使用し、Dollars 列の値で 7 日間 ( 現在の行の 3 日前から現在の行の 3 日後まで ) の売上合計を計算し ています。リザルト セットは Prod_Name および Store_Name 列でパーティション分 割されます。OLAP ORDER BY 句に EXTRACT 関数が使用されていることに注意し てください。この関数は日付の値を数値データ型で返します。値ベースのフレーム の ORDER BY 句には、1 つの数値列のみを指定する必要があります。 select date, prod_name, store_name, dollars, sum(dollars) over(partition by prod_name, store_name order by extract(day from date) range between 3 preceding and 3 following) as olap_sum from sales natural join store natural join period natural join product where month = 'MAR' and year = 2000 and prod_name = 'Earl Grey' group by date, prod_name, store_name, dollars order by store_name; DATE 2000-03-04 2000-03-05 2000-03-05 2000-03-08 2000-03-12 2000-03-15 2000-03-18 2000-03-24 2000-03-26 2000-03-28 2000-03-31 2000-03-05 2000-03-06 2000-03-08 2000-03-09 2000-03-22 2000-03-29 2000-03-30 2000-03-01 2000-03-06 2000-03-07 2000-03-08 2000-03-10 2000-03-11 2000-03-17 2000-03-17 2000-03-18 2000-03-28 2000-03-30 ... PROD_NAME Earl Grey Earl Grey Earl Grey Earl Grey Earl Grey Earl Grey Earl Grey Earl Grey Earl Grey Earl Grey Earl Grey Earl Grey Earl Grey Earl Grey Earl Grey Earl Grey Earl Grey Earl Grey Earl Grey Earl Grey Earl Grey Earl Grey Earl Grey Earl Grey Earl Grey Earl Grey Earl Grey Earl Grey Earl Grey STORE_NAME Beaches Brew Beaches Brew Beaches Brew Beaches Brew Beaches Brew Beaches Brew Beaches Brew Beaches Brew Beaches Brew Beaches Brew Beaches Brew Beans of Boston Beans of Boston Beans of Boston Beans of Boston Beans of Boston Beans of Boston Beans of Boston Coffee Brewers Coffee Brewers Coffee Brewers Coffee Brewers Coffee Brewers Coffee Brewers Coffee Brewers Coffee Brewers Coffee Brewers Coffee Brewers Coffee Brewers DOLLARS OLAP_SUM 24.50 90.50 24.00 153.50 42.00 153.50 63.00 129.00 56.00 68.00 12.00 96.00 28.00 40.00 56.00 108.50 52.50 161.00 52.50 161.00 56.00 108.50 20.00 71.50 7.50 123.50 44.00 123.50 52.00 103.50 56.00 56.00 28.00 60.00 32.00 60.00 21.00 21.00 66.50 143.50 35.00 183.50 42.00 235.50 40.00 169.00 52.00 134.00 44.00 64.50 17.50 64.50 3.00 64.50 28.00 119.50 32.00 119.50 分析関数 6-43 RATIO_TO_REPORT および RATIOTOREPORT の構文 RATIO_TO_REPORT および RATIOTOREPORT の 構文 RATIO_TO_REPORT と RATIOTOREPORT は同じ関数のシノニムです。値グループ の合計値に対する値の比率を計算します。値グループとして扱うのは、完全なリザ ルト セットまたは OVER 句で指定したパーティションです。OVER 句はオプション で、次のクエリは有効となります。 select ratio_to_report(expression) over() from table; RATIO_TO_REPORT(<expression>) OVER ( <window_partition> RATIOTOREPORT(<expression>) ) <window_order> <window_frame> RATIOTOREPORT、 RATIO_TO_REPORT 関数の引数に基づいて、パーティション内の残りの行に対 する各行の比率を計算し、小数で表します。 <window_partition>、<window_order>、および <window_frame> 句はオプションであり、パーティション 分割後の行、または完全なリザルト セットに対して比率 の計算を行うことができます。 RATIO_TO_REPORT と RATIOTOREPORT は同じ関数のシ ノニムです。 6-44 <expression> 第 3 章「式と条件」で定義したように、有効な数値式を指 定します。この式は必須です。ここから RISQL 表示関数 および OLAP 関数は参照できません。 OVER() <window_partition>、<window_order>、<window_frame> 句 を指定します。OLAP RATIOTOREPORT 関数は RISQL RATIOTOREPORT 関数とは異なり、OVER 句を使用でき ます。空の OVER() 句は許可されますが、OVER キーワー ドとかっこは指定する必要があります。 SQL Reference Guide RATIO_TO_REPORT および RATIOTOREPORT の構文 <window_partition> 6-17 ページを参照してください。RATIOTOREPORT のオ プションです。 <window_order> 6-17 ページを参照してください。RATIOTOREPORT のオ プションです。 <window_frame> 6-25 ページを参照してください。RATIOTOREPORT のオ プションです。 使用上の注意 SUM や MAX などの OLAP 集約関数の OVER 句が空の場合、または OVER 句に <window_partition> のみが指定されている場合、OLAP 関数の結果はパーティション 内の各行に対して同じになります。これは RATIOTOREPORT の場合には当てはま りません。RATIOTOREPORT の場合はパーティション内の各行に異なる比率が割り 当てられ、パーティション全体で約 1 となります。百分率で比率を出すには、次の 例のように関数に 100 を掛けます。 分析関数 6-45 RATIO_TO_REPORT および RATIOTOREPORT の構文 OLAP RATIOTOREPORT の例 次の例では、すべての市の総売上高に対する各市の売上の比率を計算しています。 値は小数で表されます。 select city, sum(dollars) as sales, ratiotoreport(sales) over() *100 as ratio_dollars from sales natural join store natural join period group by city order by sales desc; CITY San Jose Atlanta Miami Los Angeles Phoenix New Orleans Cupertino Boston Houston New York Los Gatos Philadelphia Milwaukee Detroit Chicago Hartford Minneapolis SALES 896931.15 514830.00 507022.35 503493.10 437863.00 429637.75 424215.00 421205.75 417261.00 397102.50 394086.50 392377.75 389378.25 305859.75 294982.75 236772.75 165330.75 RATIO_DOLLARS 12.58 7.22 7.11 7.06 6.14 6.03 5.95 5.91 5.85 5.57 5.53 5.50 5.46 4.29 4.14 3.32 2.32 この例に対応する RISQL クエリは、6-66 ページ以降の RATIOTOREPORT 関数の説 明の中で記載しています。 6-46 SQL Reference Guide RISQL 表示関数 RISQL 表示関数 RISQL 表示関数は、ビジネス関連のクエリでよく使用されるような順次計算を、行 の集合に対して実行します。たとえば、次の関数は、行の集合の各行について累積 合計を返します。 CUME(dollars) 次の表は、各 RISQL 表示関数の一覧です。 機能 説明 CUME 累積合計 ( 総額 ) を計算します。 MOVINGAVG 移動平均 (<n> 行ごとの平均 ) を計算します。 MOVINGSUM 移動合計 (<n> 行ごとの合計 ) を計算します。 NTILE <n> レベルに値をグループ分けします。 RANK 順位を決定します。 RATIOTOREPORT 合計に対する部分の比率を計算します。 TERTILE 3 レベル ( 上位、中位、下位 ) に値をグループ分けします。 RISQL 表示関数を使ったクエリの詳しい例は、『SQL Self-Study Guide』を参照して ください。 SQL クエリでは、RISQL 表示関数を次の場所で使用できます。 ■ ■ ■ ■ ■ 検索項目リストの中。 式の中。 スカラ関数の引数。 WHEN 句の条件の中。 サブクエリの中。 表示関数は、次の場所では使用できません。 ■ ■ ■ OLAP 関数と同じクエリの中。 WHERE 句の検索条件の中。 SET 関数 ( 集約関数 ) や、ほかの表示関数の引数。たとえば、次の式は無効 です。 cume(rank(sales)) sum(rank(sales)) ただし、表示関数の引数としては SET 関数を使用できます。 分析関数 6-47 CUME CUME CUME 関数は、行集合の ( 現在の行を含む ) 各行について累積合計を計算します。 ORDER BY 句に RESET BY サブ句を指定すると、累積合計を 0 にリセットできま す。 構文 次に CUME 関数を使った式の構文ダイアグラムを示します。 CUME ( <n_expression> ) <n_expression> 数値である必要があります。また、ほかの表示関数を参照すること はできません。 結果 現在の行とそれ以前の行について、指定した引数の累積合計を計算します。不定値 と NULL は無視されます。戻り値は、行の順序に依存するため注意が必要です。 6-50 ページ「リザルト セットの並び順」を参照してください。 <n_expression> のデータ型が指数表現を使用しないデータ型 (TINYINT、 SMALLINT、INTEGER、SERIAL、DECIMAL) の場合は、戻り値も指数表現を使用 しないデータ型になります。結果データ型の精度は 6 桁増やされます。これは割り 当てられた格納領域に納めるためです。 6-48 SQL Reference Guide CUME 次の表は、<n_expression> のデータ型に応じて CUME 関数が返すデータ型の一覧で す。 <n_expression> のデータ型 結果のデータ型 TINYINT DECIMAL(9,0) SMALLINT DECIMAL(11,0) INTEGER DECIMAL(16,0) SERIAL DECIMAL(16,0) DECIMAL NUMERIC DECIMAL(p,s) p = min(38, <n_expression> の精度 + 6) s = <n_expression> のスケール REAL REAL FLOAT DOUBLE PRECISION FLOAT DOUBLE PRECISION RESET BY 7-55 ページ に示すように、ORDER BY 句に RESET BY サブ句を指定すると、指定 した列値が変わるときに累積合計を 0 にリセットできます。 例 次の式は、現在の行とそれ以前の行の Dollars 列の値を合計して 1000 ドル単位で返 します。 cume(dollars/1000) 分析関数 6-49 CUME 次のクエリは、2000 年第 1 四半期の金曜日に販売した Aroma baseball cap の販売総量 の累計合計を返します。ORDER BY 句が指定されているため、日付 (Date 列の値 ) の古い順にリザルト セットがソートされます。 select prod_name, store_name, date, cume(quantity) as run_total from sales natural join period natural join product natural join store where day = 'FR' and year = 2000 and qtr = 'Q1_00' and prod_name = 'Aroma baseball cap' order by date PROD_NAME Aroma baseball Aroma baseball Aroma baseball Aroma baseball Aroma baseball Aroma baseball cap cap cap cap cap cap STORE_NAME San Jose Roasting Company Miami Espresso Olympic Coffee Company San Jose Roasting Company San Jose Roasting Company Beaches Brew DATE 2000-02-11 2000-02-18 2000-03-03 2000-03-17 2000-03-24 2000-03-24 RUN_TOTAL 2 10 24 30 44 48 リザルト セットの並び順 次の関数の結果は、これらの関数を使用するクエリで ORDER BY 句が使用されなけ れば、正確に、または整合性を持って計算されないことがあります。 ■ ■ ■ CUME MOVINGAVG MOVINGSUM ORDER BY 句を使用すると、表示関数による値の計算は、表示関数の引数である数 値式の値の集合が一貫してソートされた結果に基づいて行われることになります。 CUME、MOVINGSUM、MOVINGAVG 関数を使用するクエリ式の結果が (UNION ク エリの場合のように ) ほかのクエリ式の結果と統合される場合、ORDER BY 句はク エリ全体の結果に適用されます。したがって、最初のクエリ式の中の表示関数によ り計算される値は、ソートされた行集合にはなりません。このとき、ORDER BY 句 は 2 つのクエリ式が統合されてから初めて適用されます。このため、複数のクエリ 式を含むクエリに CUME、MOVNGSUM、MOVINGAVG 関数を使用することは、実 用的ではありません。 6-50 SQL Reference Guide CUME たとえば、次のクエリは、最初のクエリ式の結果のソート方法によっては、 Cume_Sales 列に関して予期せぬ結果を返すことがあります。 select qtr, sum(dollars) as total_sales, cume(sum(dollars)) as cume_sales from sales_west natural join period group by qtr union select qtr, sum(dollars) as total_sales, cume(sum(dollars)) as cume_sales from sales_east natural join period group by qtr order by total_sales asc; 同様に、ビューで指定したクエリ式に表示関数を使用することができますが、その クエリ式に ORDER BY 句を使用することはできません。したがって、ビュー定義に CUME、MOVINGSUM、MOVINGAVG 関数を使用するのは、実用的ではありませ ん。ビューの詳細は、8-163 ページ「CREATE VIEW」を参照してください。 分析関数 6-51 MOVINGAVG MOVINGAVG MOVINGAVG 関数は、指定した値集合に対して、指定した行数の移動平均を計算し ます。 関数 次に MOVINGAVG 関数を使った式の構文ダイアグラムを示します。 MOVINGAVG ( <n_expression> , <integer> ) <n_expression>、<integer>第 1 引数は数値、第 2 引数は正の整数である必要がありま す。<n_expression> は、ほかの表示関数を参照することは できません。 結果 行ごとに、現在の行とその前にある <integer>-1 行の <n_expression> の平均として移 動平均を返します。 <integer> で指定した行数だけ NULL が連続すると、NULL が返されます。最初の移 動平均を計算するための十分な行が処理されるまで、先頭の <integer> -1 行には、 NULL が表示されます。戻り値は、行の順序に依存するため注意が必要です。 6-50 ページ「リザルト セットの並び順」を参照してください。 <n_expression> のデータ型が指数表現を使用しないデータ型 (TINYINT、 SMALLINT、INTEGER、DECIMAL) の場合は、戻り値も指数表現を使用しない データ型になります。結果データ型の精度とスケールは、小数点より左の桁数はそ のままで、小数点より右の桁数が 6 桁増やされます。これは、MOVINGAVG 関数の 戻り値が非常に小さくなっても、結果データ型の有効桁数に納めるようにするため です。 6-52 SQL Reference Guide MOVINGAVG 次の表は、<n_expression> のデータ型に応じて MOVINGAVG 関数が返すデータ型の 一覧です。 <n_expression> のデータ型 結果のデータ型 TINYINT DECIMAL(9,6) SMALLINT DECIMAL(11,6) INTEGER DECIMAL(16,6) SERIAL Decimal (16,0) DECIMAL NUMERIC DECIMAL(p,s) p = min(38, <n_expression> の精度 + 6) s = min(6, 38 - <n_expression> の精度 ) REAL REAL FLOAT DOUBLE PRECISION FLOAT DOUBLE PRECISION RESET BY 7-55 ページ に示すように、ORDER BY 句に RESET BY サブ句を指定すると、値集 合が変わるときに移動平均を 0 にリセットできます。 例 次の式は、現在の行とその前にある 5 行の Dollars 列の値の平均値を計算し、Dollars 列の移動平均として返します。 movingavg(dollars,6) 分析関数 6-53 MOVINGAVG 次のクエリは、Quantity 列の移動合計を返します。MOVINGAVG の結果が DEC ス カラ関数で指定された桁数を超えた場合は切り捨てられます。 select month, quantity, dec(movingavg(quantity, 3),7,2) from sales natural join period natural join promotion where month in ('DEC', 'APR') and sales.promokey in (1001, 1002, 2001, 2002) order by sales.perkey MONTH APR APR APR APR APR APR APR APR APR APR DEC DEC DEC APR APR ... 6-54 SQL Reference Guide QUANTITY 16 13 17 7 14 7 13 18 4 17 4 12 7 1 8 MV_AVG NULL NULL 15.33 12.33 12.66 9.33 11.33 12.66 11.66 13.00 8.33 11.00 7.66 6.66 5.33 MOVINGSUM MOVINGSUM MOVINGSUM 関数は、指定した値集合に対して、指定した行数の移動合計を計算 します。 構文 次に MOVINGSUM 関数を使った式の構文ダイアグラムを示します。 MOVINGSUM ( <n_expression> , <integer> ) <n_expression>、<integer>第 1 引数は数値、第 2 引数は整数である必要があります。 <n_expression> は、ほかの表示関数を参照することはでき ません。 結果 行ごとに、現在の行とその前にある <integer>-1 行の <n_expression> の合計として移 動合計を返します。<integer> で指定した行数だけ NULL が連続すると、NULL が返 されます。戻り値は、行の順序に依存するため注意が必要です。6-50 ページ「リザ ルト セットの並び順」を参照してください。 <n_expression> のデータ型が指数表現を使用しないデータ型 (TINYINT、 SMALLINT、INTEGER、DECIMAL) の場合は、戻り値も指数表現を使用しない データ型になります。結果データ型の精度は 6 桁増やされます。これは割り当てら れた格納領域に納めるためです。 分析関数 6-55 MOVINGSUM 次の表は、<n_expression> のデータ型に応じて MOVINGSUM 関数が返すデータ型の 一覧です。 <n_expression> のデータ型 結果のデータ型 TINYINT DECIMAL(9,0) SMALLINT DECIMAL(11,0) INTEGER DECIMAL(16,0) DECIMAL NUMERIC DECIMAL(p,s) p = min(38, <n_expression> の精度 + 6) s = <n_expression> のスケール REAL REAL FLOAT DOUBLE PRECISION FLOAT DOUBLE PRECISION RESET BY 7-55 ページ に示すように、ORDER BY 句に RESET BY サブ句を指定すると、値集 合が変わるときに移動合計を 0 にリセットできます。 例 次の式は、現在の行とその前にある 5 行の Dollars 列の値の合計値を計算し、Dollars 列の移動合計として返します。 movingsum(dollars,6) 6-56 SQL Reference Guide MOVINGSUM 次のクエリは、Quantity 列の移動合計を返します。 select promo_desc, quantity, movingsum(quantity, 3) as mvg_sum from sales natural join promotion natural join period where year = 2000 and month = 'FEB' and promo_desc like '%coupon%' order by sales.perkey; PROMO_DESC Aroma catalog Aroma catalog Aroma catalog Aroma catalog Aroma catalog Aroma catalog Aroma catalog Aroma catalog Aroma catalog Aroma catalog Aroma catalog Aroma catalog Aroma catalog Aroma catalog Aroma catalog Aroma catalog Aroma catalog ... coupon coupon coupon coupon coupon coupon coupon coupon coupon coupon coupon coupon coupon coupon coupon coupon coupon QUANTITY 3 9 12 11 6 7 28 16 16 14 9 1 39 19 9 24 27 MVG_SUM NULL NULL 24 32 29 24 41 51 60 46 39 24 49 59 67 52 60 分析関数 6-57 NTILE NTILE NTILE 関数は、指定した範囲に値をレベル分けします。値の範囲を 3 つに限定し、 レベルを表す文字 (H= 上位、M= 中位、L= 下位 ) を返す TERTILE 関数とは異なり、 NTILE 関数には任意の数の範囲を指定でき、結果は 1 ( 最高 ) ∼ 100 ( 最低 ) のよう に該当する範囲を表す整数で返されます。 NTILE と RANK の違いは、NTILE が指定した整数に応じてリザルト セットを 5 等 分、10 等分、100 等分などに分割するのに対し、RANK は、値に応じてリザルト セット全体を単純にソートする点です。 構文 次に NTILE 関数を使った式の構文ダイアグラムを示します。 NTILE ( <n_expression> , <integer> ) <n_expression>、<integer>引数 <n_expression> は数値、<integer> は 0 でない正の整数 である必要があります。< n_expression> は、ほかの表示関 数を参照することはできません。 結果 <n_expression> 引数が NULL でない場合は、指定した範囲のレベルを表す整数が返 されます。たとえば、<integer> 引数を 5 と指定した場合、最高レベルに相当する値 には 1 が返され、最低レベルに相当する値には 5 が返されます。 RESET BY 7-55 ページ に示すように、ORDER BY 句に RESET BY サブ句を指定すると、指定 したグループが変わるときにレベル値をリセットできます。 使用上の注意 指定した整数で集合の行数が割り切れない場合、剰余になる行は上位グループに含 められます。ランクの境界に複数の等値がある場合は、隣接するグループに分配さ れます。この場合、結果はクエリごとに異なります。 6-58 SQL Reference Guide NTILE たとえば、次の式は、リザルト セットの行数が 4 行の場合は 1、1、2、3 の各値を 返し、5 行の場合は 1、1、2、2、3 の各値を返します。 ntile(col_name, 3) NTILE 関数は、TERTILE 関数の出力データのローカライズに使用できます。詳細 は、6-68 ページを参照してください。 例 このクエリは、Dollars 列の値の合計に基づいてコーヒー製品と紅茶製品をレベル分 けします。ランク数が 6 であるため、製品にはそれぞれ 1 ∼ 6 の値が返されます。 select prod_name, ntile(sum(dollars), 6) as sales_rank from sales natural join product where product.classkey in (1, 2, 4, 5) group by prod_name PROD_NAME Demitasse Ms Xalapa Lapa NA Lite Lotta Latte Cafe Au Lait Expresso XO Aroma Roma Veracruzano La Antigua Colombiano Darjeeling Special Assam Gold Blend Darjeeling Number 1 Irish Breakfast English Breakfast Breakfast Blend Earl Grey Assam Grade A Special Tips Gold Tips SALES_RANK 1 1 1 1 2 2 2 3 3 3 4 4 4 4 5 5 5 6 6 6 分析関数 6-59 NTILE 次の例は、CASE 式の中で NTILE 関数を使用し、レベル分け (5 等分 ) した値を 3 つ の非均等グループに再分類します。ここでは上位 20% を <top_20>、中位 60% を <mid_60>、下位 20% を <low_20> と表示します。 select prod_name, date, dollars, case ntile(dollars, 5) when 1 then 'top_20' when 2 then 'mid_60' when 3 then 'mid_60' when 4 then 'mid_60' when 5 then 'low_20' end as n_rank from sales natural join product natural join period natural join store where year = 2000 and day = 'TH' and store_name like 'Minnesota Roaster%' order by prod_name PROD_NAME Aroma Roma Aroma Roma Cafe Au Lait Colombiano Colombiano Colombiano Colombiano Colombiano Colombiano Demitasse Ms Demitasse Ms Demitasse Ms Expresso XO La Antigua La Antigua La Antigua La Antigua Lotta Latte Lotta Latte Lotta Latte Lotta Latte NA Lite NA Lite NA Lite NA Lite Veracruzano Veracruzano Veracruzano Veracruzano 6-60 SQL Reference Guide DATE 2000-03-23 2000-02-17 2000-02-24 2000-03-02 2000-02-24 2000-01-06 2000-01-20 2000-03-23 2000-02-03 2000-02-24 2000-03-30 2000-02-24 2000-02-17 2000-01-13 2000-03-23 2000-03-16 2000-01-13 2000-01-13 2000-02-17 2000-03-09 2000-01-27 2000-01-06 2000-03-02 2000-01-06 2000-02-17 2000-01-13 2000-02-10 2000-02-03 2000-01-27 DOLLARS 166.75 224.75 119.00 135.00 175.50 148.50 162.00 128.25 276.75 61.50 292.50 185.25 74.25 100.75 210.25 181.25 159.50 85.00 161.50 240.00 127.50 396.00 297.00 126.00 108.00 360.00 322.50 142.50 232.50 N_RANK mid_60 mid_60 mid_60 mid_60 mid_60 mid_60 mid_60 mid_60 top_20 low_20 top_20 mid_60 low_20 low_20 mid_60 mid_60 mid_60 low_20 mid_60 mid_60 mid_60 top_20 top_20 mid_60 low_20 top_20 top_20 mid_60 mid_60 NTILE 前ページのクエリに WHEN 句を追加すると、上位 20% を除くすべての行をリザル ト セットから除外することができます。 select prod_name, date, dollars, case ntile(dollars, 5) when 1 then 'top_20' when 2 then 'mid_60' when 3 then 'mid_60' when 4 then 'mid_60' when 5 then 'low_20' end as n_rank from sales natural join product natural join period natural join store where year = 2000 and day = 'TH' and store_name like 'Minnesota Roaster%' when n_rank = 'top_20' order by prod_name PROD_NAME Colombiano Demitasse Ms NA Lite NA Lite Veracruzano Veracruzano DATE 2000-02-03 2000-03-30 2000-01-06 2000-03-02 2000-01-13 2000-02-10 DOLLARS 276.75 292.50 396.00 297.00 360.00 322.50 N_RANK top_20 top_20 top_20 top_20 top_20 top_20 分析関数 6-61 RANK RANK RANK 関数は、指定した値について、集合における相対的な順位を決定します。 構文 次に RANK 関数を使った式の構文ダイアグラムを示します。 RANK ( <expression> <expression> ) 任意のデータ型ですが、ほかの表示関数を参照することはできませ ん。<expression> の前にマイナス (-) 符号を指定すると、昇順 ( 小さ なものから順 ) に順位付けされます。非数値データ型の場合は、 サーバ ロケール設定で指定された照合シーケンスに応じてレベル分 けされます。 結果 引数が NULL でない場合は、値集合における相対的な順位を表す整数が返されます。 NULL の場合は NULL が返されます。昇順か、降順 ( デフォルト ) のどちらにも順位 付けできます。 順位付けする値が等しければ、同一順位になります。たとえば、3 位の行が 2 行あ る場合は、4 位は飛ばされます。 上位 10 行 WHEN 句を使うと、最終的なリザルト テーブルの上位 5 行、上位 10 行というよう に、返す結果を任意の数の順位に限定することができます。When 句の詳細は、 7-43 ページ「WHEN 句」を参照してください。 RESET BY 7-55 ページ に示すように、ORDER BY 句に RESET BY サブ句を指定すると、値の グループが変わるときに順位付けを 0 にリセットできます。 6-62 SQL Reference Guide RANK 例 次の式は、グループの各行の Dollars 列の値に基づいて、行の順位を表す整数を返し ます。 rank(-dollars) この順位付けは、昇順 ( 小さなものから順 ) になります。 次のクエリは、データベースの使用期間 (27 か月 ) にわたる売上合計に基づいて各 製品を順位付けします。 select prod_name, sum(dollars) as prod_sales, rank(sum(dollars)) as prod_rank from product join sales on sales.classkey = product.classkey and sales.prodkey = product.prodkey group by prod_name PROD_NAME Demitasse Ms Xalapa Lapa NA Lite Lotta Latte Cafe Au Lait Expresso XO Aroma Roma Veracruzano La Antigua Colombiano Ruby's Allspice Darjeeling Special Assam Gold Blend Darjeeling Number 1 Irish Breakfast English Breakfast Breakfast Blend Earl Grey Assam Grade A Special Tips Gold Tips Espresso Machine Italiano Aroma t-shirt Espresso Machine Royale Tea Sampler Aroma baseball cap Coffee Sampler Spice Sampler Aroma Sheffield Steel Teapot Aroma Sounds CD Aroma Sounds Cassette French Press, 4-Cup Spice Jar PROD_SALES 656401.50 577450.00 557655.00 533454.50 526793.50 514094.50 479330.25 479015.50 473434.50 462003.50 299977.00 292751.00 156962.00 136768.25 109281.00 100459.50 93790.75 90798.00 88651.00 87413.25 86315.75 48057.95 45632.80 35754.00 32411.00 32249.00 32220.00 16219.00 15797.00 15779.00 11642.50 9727.55 9694.00 PROD_RANK 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 分析関数 6-63 RANK French Press, 2-Cup Easter Sampler Basket Travel Mug Coffee Mug Christmas Sampler 7060.25 5280.00 3312.80 2793.00 1920.00 34 35 36 37 38 上位 5 行を返すには、前ページのクエリに WHEN 句を追加します。 select prod_name, sum(dollars) as prod_sales, rank(sum(dollars)) as prod_rank from product join sales on sales.classkey = product.classkey and sales.prodkey = product.prodkey group by prod_name when prod_rank <=5 PROD_NAME Demitasse Ms Xalapa Lapa NA Lite Lotta Latte Cafe Au Lait PROD_SALES 656401.50 577450.00 557655.00 533454.50 526793.50 PROD_RANK 1 2 3 4 5 次のクエリは、最小の値を第 1 位として、price の値を昇順 ( 小さなものから順 ) で 順位付けします。 select price, rank(-price) from orders where order_no > 3616 PRICE 3995.95 4325.25 4325.25 4425.00 4425.00 5400.00 5400.00 10234.50 10234.50 16500.00 6-64 SQL Reference Guide 1 2 2 4 4 6 6 8 8 10 RANK 順位付けされた行が表示される順序は、クエリの指定に応じて異なりますが、各値 の順位は変わりません。 select price, rank(-price) from orders where order_no > 3616 order by price desc PRICE 16500.00 10234.50 10234.50 5400.00 5400.00 4425.00 4425.00 4325.25 4325.25 3995.95 10 8 8 6 6 4 4 2 2 1 分析関数 6-65 RATIOTOREPORT RATIOTOREPORT RATIOTOREPORT 関数は、合計値に対する値の比率を計算します。 構文 次に RATIOTOREPORT 関数を使った式の構文ダイアグラムを示します。 RATIOTOREPORT ( <n_expression> ) <n_expression> 数値である必要があります。また、ほかの表示関数を参照すること はできません。 結果 引数が NULL でない場合は、合計値に対する値の比率が返されます。NULL の場合 は、NULL が返されます。 RESET BY 7-55 ページ に示すように、ORDER BY 句に RESET BY サブ句を指定すると、値の グループが変わるごとに RATIOTOREPORT 関数をリセットできます。 例 次の式は、値の集合のすべての数量の合計値に対する各行の Quantity 列の値の比率 を返します。 ratiotoreport(quantity) 6-66 SQL Reference Guide RATIOTOREPORT 次のクエリは、合計売上に対する売上の比率を (100 で乗算してパーセントで ) 返し ます。 select city, sum(dollars) as sales, ratiotoreport(sum(dollars))*100 as ratio_dollars from sales natural join store natural join period group by city order by sales desc CITY San Jose Atlanta Miami Los Angeles Phoenix New Orleans Cupertino Boston Houston New York Los Gatos Philadelphia Milwaukee Detroit Chicago Hartford Minneapolis SALES 896931.15 514830.00 507022.35 503493.10 437863.00 429637.75 424215.00 421205.75 417261.00 397102.50 394086.50 392377.75 389378.25 305859.75 294982.75 236772.75 165330.75 RATIO_DOLLARS 12.58 7.22 7.11 7.06 6.14 6.03 5.95 5.91 5.85 5.57 5.53 5.50 5.46 4.29 4.14 3.32 2.32 分析関数 6-67 TERTILE TERTILE TERTILE 関数は、数値グループの各値を上位、中位、下位のレベルに分けます。 構文 次に TERTILE 関数を使った式の構文ダイアグラムを示します。 TERTILE ( <n_expression> ) <n_expression> 数値である必要があります。また、ほかの表示関数を参照すること はできません。 結果 引数が NULL でない場合は、上位、中位、下位を表す文字 H、M、L が返されます。 NULL の場合は NULL が返されます。 RESET BY 7-55 ページ に示すように、ORDER BY 句に RESET BY サブ句を指定すると、指定 したグループが変わるときにレベル値をリセットできます。 使用上の注意 集合の行数が 3 で割り切れない場合、剰余になる行は上位レベルに含められます。 ランクの境界に複数の等値がある場合は、隣接するグループに分配されます。この 場合、結果はクエリごとに異なります。NTILE 関数の説明にある例を参照してくだ さい。 NTILE 関数は、TERTILE 関数の出力データをローカライズしながら、TERTILE 関 数の動作を再現することができます。つまり、値 H、M、L をデータベースの言語 にとって意味のある 3 つの文字列に変更することができます。NTILE 関数の詳細 は、6-58 ページ を参照してください。 6-68 SQL Reference Guide TERTILE 例 次の式は、グループの各行について、Dollars 列の値に基づくレベル分けを行い、上 位、中位、下位を表す文字を返します。 tertile(dollars) 次のクエリは、Dollars 列と Quantity 列の値をレベル分けし、各列について上位、 中位、下位を表す文字を返します。 select prod_name, dollars, quantity, tertile(dollars) as sales, tertile(quantity) as qty from store natural join sales natural join period natural join product where year = 2000 and week = 2 and store_name like 'Instant%'; PROD_NAME Lotta Latte Colombiano Lotta Latte La Antigua Cafe Au Lait Darjeeling Special Darjeeling Special Lotta Latte Lotta Latte Colombiano Xalapa Lapa Darjeeling Number 1 Aroma Roma ... DOLLARS QUANTITY SALES 328.00 41 H 216.00 32 H 216.00 27 H 210.25 29 H 136.00 16 H 126.50 11 H 115.00 10 H 110.50 13 H 110.50 13 H 108.00 16 H 99.00 11 M 94.50 18 M 94.25 13 M QTY H H H H H L L M H H M H M 次のマクロは、NTILE 関数を使って TERTILE 関数の動作を再現します。クエリで このマクロが使用されると、レベル分けした dollars の合計に応じて値 A、B、C が 返されます。このような CASE 式は、ユーザの言語に応じた任意の 3 つの文字列を 返すことができます。 create macro nls_tertile as case ntile((sum(dollars)), 3) when 1 then 'A' when 2 then 'B' when 3 then 'C' end as tile; 分析関数 6-69 第7章 クエリ式 この章について . . . . . . . . . . . . . . . . . . . . 7-3 結合および非結合クエリ式 . . . . . . . . . . . . . . . . 7-4 テーブル結合 . . . . 構文 . . . . . . 限定結合 . . . . . クロス結合 . . . . テーブル参照 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-7 7-7 7-7 7-12 7-13 クエリ指定 . . . 検索項目リスト FROM 句 . . . サンプリング . WHERE 句 . . GROUP BY 句 . HAVING 句 . . WHEN 句 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-16 7-17 7-22 7-28 7-36 7-39 7-41 7-43 UNION、EXCEPT、INTERSECT 式 . . . . . . . . . . . . . 7-45 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-54 7-55 7-66 7-68 . . . . . . 7-69 7-69 7-72 SELECT 文 . . . . . ORDER BY 句 . . . SUPPRESS BY 句 . . SELECT 文の処理方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . サブクエリ . . . . . . . . . . . . スカラ サブクエリとテーブル サブクエリ 相関サブクエリ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7-2 SQL Reference Guide この章について この章では、SQL でクエリを記述する場合の規則を説明します。まずクエリ式の概 要を説明し、次にクエリ式の構成要素と例を示します。章の最後では、SELECT 文 と各種のサブクエリについて説明します。 この章では、次の事項について説明します。 ■ ■ ■ ■ ■ ■ 結合および非結合クエリ式 テーブル結合 クエリ指定 UNION、EXCEPT、INTERSECT 式 SELECT 文 サブクエリ 『SQL Self-Study Guide』にも、各種クエリ式の詳細な例が紹介されています。 クエリ式 7-3 結合および非結合クエリ式 結合および非結合クエリ式 クエリ式は、選択したデータを評価した結果をテーブルにします。単純なクエリの 場合は、このテーブルが最終的なリザルト セットとしてユーザに返されます。複雑 なクエリの場合は、このテーブルは中間テーブルとなり、ほかのクエリ式の結果と 統合されて最終的なリザルト セットになります。 SQL のクエリ記述のことをクエリ式といいます。テーブル式と呼ばれることもあり ますが、このマニュアルでは、ANSI SQL 92 標準に従ってクエリ式という用語を使 用します。 各クエリ式は、結合または非結合のどちらかの形式をとります。非結合クエリ式 は、クエリ指定 ( 選択式とも呼ぶ )、明示的なテーブル、または UNION、 INTERSECT、EXCEPT などの演算子を含む複雑な式からできています。 結合クエリ式、つまりテーブル結合は、2 つ以上のテーブル参照を明示的に結合し ます。テーブル参照は、単純なテーブル名、別の結合されたテーブル、または別の クエリ式にすることができます。 次に、各種のクエリ式と簡単な例を示します。 図 7-1 クエリ式 クエリ式 非結合クエリ式 テーブル結合 明示的テーブル table sales1 クエリ指定 sales1 join sales2 on sales1.a = sales2.a (select * from sales1) as s1 natural join (select * from sales2) as s2 select * from sales1 where dollars > 1000 UNION、INTERSECT、EXCEPT 演算子 select * from sales1 union select * from sales2 7-4 SQL Reference Guide 結合および非結合クエリ式 クエリ式で最も単純な形式は、シングル クエリ指定という形式です。複雑な形式の クエリ式は、サブクエリから得られた複数の中間テーブル、テーブル結合、および UNION、INTERSECT、EXCEPT 演算子を含む式から結果を導き出します。いろいろ なクエリ式を組み合わせて 1 つのクエリに統合したり、SELECT キーワードが不要 なクエリを作成することができます。前述の例はセミコロン ( またはほかのエント リ ツールの終端記号 ) を式に追加すれば、SQL の SELECT 文として実行できます。 構文 次にクエリ式の構文ダイアグラムを示します。 <joined_table> <query_specification> <union_expression> TABLE <joined_table> <table_name> 2 つのテーブル参照を明示的に結合するクエリ式を指定します。 詳細な構文ダイアグラムと説明については、7-7 ページ 「テーブル結合」を参照してください。 <query_specification> SELECT キーワードと FROM 句で始まるクエリ式を指定しま す。オプションの句も指定できますが、それらには指定順序 があります。 詳細な構文ダイアグラムと説明については、7-16 ページ「ク エリ指定」を参照してください。 クエリ式 7-5 結合および非結合クエリ式 <union_expression> UNION、INTERSECT、EXCEPT 演算子で結合された 2 つ以 上のクエリ式からなります。<union_expression> という用語 は、各演算子による集合演算式を表します。 詳細な構文ダイアグラムと説明については、7-45 ページ 「UNION、EXCEPT、INTERSECT 式」を参照してください。 TABLE< table_name> 指定したテーブルの全行を意味する明示的なテーブル指定で す。たとえば、次の 2 つのクエリは同じです。 table store select * from store 7-6 SQL Reference Guide テーブル結合 テーブル結合 テーブル結合は、2 つのテーブル参照を明示的に結合するクエリ式です。テーブル 結合には、次の 3 種類があります。 ■ ■ ■ 限定結合 : 結合するテーブル、結合の基準となる列を指定する内部結合ま たは外部結合 クロス結合または直積結合 かっこで囲んだテーブル結合 結合の基準となる列が比較可能なデータ型で、その列がクエリに明示されていれ ば、任意の 2 つのテーブルを結合できます。 構文 次に <joined_table> の構文ダイアグラムを示します。 <qualified_join> <cross_join> (<joined_table>) 限定結合 限定結合には、内部結合と外部結合があり、3 種類の指定方法があります。同じ名 前を持つ列を基準とする結合 ( 自然結合 )、指定した列に基づく結合、述部に基づ く結合です。ここでは、内部結合と外部結合という用語の定義と、3 種類の指定方 法の構文を説明します。 内部結合 内部結合は、2 つ以上のテーブルから、列の値が一致している行を結合します。結 合するテーブルの行の列値が一致していると、その行をデータベース サーバが結合 し、中間リザルト テーブルに格納します。 クエリ式 7-7 限定結合 結合方法を明示しない結合がクエリにある ( 標準の限定結合構文を使用する ) 場合 は、それらのテーブルの直積 (2 つのテーブルのすべての行の可能な組み合わせの集 合 ) が生成されます。 たとえば、State と Region という 2 つのテーブルがあるとします。 STATE FL FL GA TN CITY Jacksonville Miami Atlanta Nashville CITY Jacksonville Miami Atlanta New Orleans AREA South South South South 上記の 2 テーブルを内部結合で City 列に基づいて結合すると、次のリザルト セット が返されます。 STATE FL FL GA STATE.CITY Jacksonville Miami Atlanta REGION.CITY Jacksonville Miami Atlanta AREA South South South City 列を対象とした内部結合の条件は、次のとおりです。 state.city = region.city 外部結合 外部結合には、レフト、ライト、フルの 3 種類があります。 この 3 種類の外部結合は、それぞれ異なる中間リザルト セットを生成します。レフ ト外部結合は、内部結合が返すすべての行とレフト テーブル ( 最初に指定したテー ブル ) の行のうち、ライト テーブルの行と一致しないすべての行を返します。 これに対しライト外部結合は、内部結合が返すすべての行とライト テーブル (2 番 めに指定したテーブル ) の行のうち、レフト テーブルの行と一致しないすべての行 を返します。 フル外部結合は、両方のテーブルにあるすべての行を返します。 3 種類の外部結合はいずれも、一致しない行の列を NULL で表します。 7-8 SQL Reference Guide 限定結合 たとえば、State テーブルと Region テーブルを対象としたレフト外部結合は、State テーブルのすべての行を返します。Region テーブルと一致しない行の列には NULL が表示されます。 STATE FL FL GA TN STATE.CITY Jacksonville Miami Atlanta Nashville REGION.CITY Jacksonville Miami Atlanta NULL AREA South South South NULL State テーブルと Region テーブルのライト外部結合は、Region テーブルのすべての 行を返す点を除けば、レフト外部結合と同じです。 STATE FL FL GA NULL STATE.CITY Jacksonville Miami Atlanta NULL REGION.CITY Jacksonville Miami Atlanta New Orleans AREA South South South South フル外部結合は、両テーブルのすべての行を返します。 state FL FL GA TN NULL state.city Jacksonville Miami Atlanta Nashville NULL region.city Jacksonville Miami Atlanta NULL New Orleans area South South South NULL South クエリ式 7-9 限定結合 限定結合の構文 次に限定結合の構文ダイアグラムを示します。 <table_reference> JOIN NATURAL INNER LEFT OUTER RIGHT OUTER FULL OUTER <table_reference> <search_condition> ON , USING ( <column_name> ) <table_reference> テーブルとして評価されるテーブル、ビュー、シノニム、ク エリ式を指定します。<table_reference> の詳細な構文について は、7-13 ページ「テーブル参照」を参照してください。 NATURAL 自然結合は、同じ名前をもつ列を基準にしてテーブルを結合 します。列名は、明示的に指定しません。自然結合は、同じ 列名を持つ列が複数ある場合はそのすべての列をもとに 2 つ のテーブルを結合します。 次の例は、Classkey 列と Prodkey 列という共通の列名を基準 にして Sales テーブルと Product テーブルを結合します。 sales natural join product NATURAL キーワードを指定する場合は、ON 句と USING 句 は使用できません。 7-10 SQL Reference Guide 限定結合 INNER テーブル参照の内部結合を指示します。INNER キーワードは オプションです。 LEFT、RIGHT、FULLテーブル参照のレフト外部結合、ライト外部結合、フル外部 結合のいずれかを指定します。 OUTER テーブル参照の外部結合を指示します。OUTER キーワード はオプションです。LEFT、RIGHT、FULL のいずれかを指定 すれば、外部結合を暗黙的に指定することになります。 JOIN テーブル参照の限定結合を指示します。このキーワードは、 内部結合と外部結合には必須入力です。INNER または OUTER キーワードを指定しない場合、内部結合を暗黙的に 指定したことになります。 ON <search_condition> 述部を基準とした結合を指定します。USING 句や NATURAL 結合を指定する場合は、ON 句は使用できません。 <search_condition> は、2 つの行の結合に必要な条件となる述 部を記述します。結合する 2 つのテーブルの列を参照する、 論理条件式を指定します。通常は、単純等価結合を表す述部 を指定しますが、次のように複雑な式を指定することもでき ます。 table1.col1 = table2.col2 + table2.col3 または、次のように非等価結合を指定することができます。 table1.col1 > table2.col2 どちらの場合も、論理条件式の前には ON キーワードを指定 してください。 on sales.classkey = product.classkey and sales.prodkey = product.prodkey USING (<column_name>) 1 つ以上の列に基づく結合を指定します。 using (classkey, prodkey) 結合するテーブルの両方に存在する列を指定してください。 ON 句や NATURAL 結合を指定する場合、USING 句は指定で きません。 クエリ式 7-11 クロス結合 使用上の注意 NATURAL JOIN または USING の構文を使ってテーブルを結合すると、最初のテー ブルからすべての共通列が検出順に格納され、その後、最初のテーブルにある結合 の基準列でないすべての列、2 番めのテーブルにある結合の基準列でないすべての 列を格納したリザルト テーブルが返されます。結合から得られる列のデータ型は、 結合した 2 つのテーブルのどちらの列とも異なる場合がありますが、どちらの列値 も格納できるデータ型になります。 ON を使ってテーブルを結合すると、結合する両方の列 ( およびそのデータ型 ) が、 結果に残されます。たとえば、Perkey 列に基づいて Sales テーブルと Period テーブ ルを結合すると、2 つの Perkey 列が中間リザルト セットに格納されます。 クロス結合 クロス結合は、結合するテーブルのすべての行の直積を生成します。つまり、各行 のすべての可能な組み合わせを返します。 データベース サーバはデフォルトでは、クロス結合を指定したクエリが実行される とエラー メッセージを返します。クロス結合を指定したクエリを有効にするには、 SET CROSS JOIN ON 文を実行するか rbw.config ファイルの OPTION CROSS_JOIN パ ラメータを編集します。このパラメータの詳細については、9-11 ページを参照して ください。 構文 次にクロス結合の構文ダイアグラムを示します。 <table_reference> CROSS JOIN <table_reference> <table_reference> テーブルとして評価されるテーブル、ビュー、シノニム、クエリ 式を指定します。<table_reference> の詳細な構文については、 7-13 ページ「テーブル参照」を参照してください。 CROSS JOIN 7-12 SQL Reference Guide 結合するテーブルのすべての行を結合し、各行のすべての可能な 組み合わせをリザルト セットに返します。 テーブル参照 テーブル参照 次にテーブル参照の構文ダイアグラムを示します。 <table_name> <correlation_name> <view_name> ( <column_list> ) AS <synonym> <joined_table> ( <query_expression> ) <correlation_name> AS <table_name>、 <view_name>、 <synonym> ( <column_list> ) 相関名で修飾できるテーブル名、ビュー名、シノニム名のい ずれかを指定します。シノニムの詳細については、8-136 ペー ジ「CREATE SYNONYM」を参照してください。 クエリ式 7-13 テーブル参照 AS <correlation_name>基本テーブル、またはクエリの処理中にクエリ式から派生し たテーブルに名前を割り当てます。テーブルに相関名を定義 した場合、クエリ中でそのテーブルを参照するときは相関名 を用いる必要があります。AS キーワードはオプションです。 相関名は、テーブル参照の直後に指定します。たとえば、次 のテーブル参照リストは、Store、Product、Period、Sales の 各テーブルに、それぞれ sr、pr、pd、sl という相関名を割 り当てます。 store sr, product pr, period pd, sales sl 相関名を割り当てるのは、クエリとサブクエリの両方が同じ テーブルを参照する場合に、参照先が特定できなくなるのを 防ぐためです。サブクエリの詳細については、7-69 ページを 参照してください。 テーブルに相関名を割り当てると、テーブル名ではなく、相 関名を使って修飾列名を表すことができます。たとえば、 Period テーブルに pd という相関名を割り当てた場合、Period テーブルの Month 列は、month または pd.month で指定する ことができます。ただし、列参照の範囲内にほかの Month 列 がない場合に限ります。Month 列がほかにもあると、参照先 が特定できなくなってしまいます。この列を period.month と指定すると、エラーになります。 通常、相関名を割り当てるのは、サブクエリの参照先を親 ( メイン ) クエリの参照先と関連付ける場合です。たとえば、 次の条件は、Month を参照先とするサブクエリと親クエリの 参照を関連付けます。 pp.month = pd.month 上記の条件式により、サブクエリの参照 (pp.month) は、親 クエリの参照 (pd.month) と同じになります。 相関名のもう 1 つの使い方は、それ自身と結合 ( セルフ結合 ) する場合に、そのテーブルに別の名前を付けることです。セ ルフ結合の詳細については、『SQL Self-Study Guide』を参照し てください。 7-14 SQL Reference Guide テーブル参照 <column_list> 参照テーブルの列に、クエリの処理中に使用する名前を割り 当てます。テーブルの各列に固有の名前を指定してください。 テーブル参照が自然結合や列名に基づく結合に用いられるク エリ式の場合、その列名は一意である必要があります。 <joined_table> 7-7 ページ「テーブル結合」の定義に従って、任意の有効な結 合クエリ式を指定します。 (<query_expression>) 7-4 ページで説明した非結合クエリ式またはテーブル結合を指 定します。テーブル参照として使用するクエリ式はかっこで 囲み、相関名を割り当てると、ほかのテーブルや、ほかのク エリ式の結果と結合できるようになります。たとえば、次の クエリは FROM 句の中にクエリ式を含む例です。 select * from (class natural join product) as cp(col1, col2, col3, col4, col5, col6) 列リストはオプションです。 クエリ式 7-15 クエリ指定 クエリ指定 クエリ指定 ( 選択式 ) には、SELECT、FROM、WHERE、GROUP BY、HAVING、 WHEN の SQL 句を指定します。これらの句には、指定順序があります。 構文 次にクエリ指定の構文ダイアグラムを示します。 <select_list> SELECT <from_clause> <where_clause> <group_by_clause> <having_clause> <when_clause> クエリ指定には、次のものを指定してください。 ■ ■ ■ SELECT キーワード 検索項目リスト FROM 句 ほかの句はオプションです。オプションの句を指定する場合は、構文ダイアグラム に示す順序で指定します。 ユーザには、クエリ指定で参照する基本テーブルとビューに対する SELECT 特権が 必要です。そうでない場合、クエリはエラーになります。 例 次のクエリは、Class テーブルから各クラス タイプの名前を返します。 select class_type from class CLASS_TYPE Bulk_beans Bulk_tea Bulk_spice Pkg_coffee Pkg_tea Pkg_spice Hardware Gifts Clothing 7-16 SQL Reference Guide 検索項目リスト 検索項目リスト 検索項目リストには、最終的なリザルト テーブルに返す列を指定し、重複行を除外 するかを指定します。リザルト テーブルの列の代替名 ( エリアス ) を、検索項目リ ストに指定することもできます。 構文 ここではクエリ指定を繰り返して、<select_list> の構文の参照のポイントを与えてい ます。 SELECT <select_list> <from_clause> <where_clause> <group_by_clause> <having_clause> <when_clause> 次に検索項目リストの構文ダイアグラムを示します。 * , ALL DISTINCT <expression> <c_alias> AS <table_name.*> ALL リザルト テーブルのすべての行を返すように指示します。 クエリ式 7-17 検索項目リスト DISTINCT 重複行をリザルト テーブルから除外するように指示します。 リザルト テーブルの重複行とは、ある行の各列の値が、別の行の各 列の値と等しいものです。NULL は等しいとみなされます。リザル ト テーブルには、検索項目リストに指定した列だけが格納されま す。 *( アスタリス アスタリスク (*) は、FROM 句に指定されたすべてのテーブル参照 ク) の列名を表します。 ヒント : IBM Red Brick Warehouse は明示的なテーブルもサポートします。たとえ ば、次の 2 つのクエリは同じです。 select * from market table market 7-18 SQL Reference Guide 検索項目リスト <expression> リザルト テーブルの特定の列を指定します。通常は、列名、修飾列 名、列名に関連づけた関数 ( 集約関数、スカラ関数、日付時間関数、 RISQL、OLAP) を <expression> に指定します。 <expression> には、スカラ サブクエリを指定することもできます。 つまり、1 つのスカラ値 ( 文字、日付時間、数値、NULL のいずれか ) を返すサブクエリです。サブクエリの詳細については、7-69 ペー ジを参照してください。 7-21 ページの例に示すように、複数の DISTINCT キーワードを集約 関数の一部として同じ検索項目リストまたは HAVING 句に指定する こともできます。 AS <c_alias> 列エリアス、つまりクエリ式を評価して得られたテーブルの列名を 指定します。エリアスは、最終的なリザルト テーブルの列見出しと して返されます。エリアスは、そのクエリのほかの句 (WHERE、 GROUP BY など ) や、検索項目リストに指定するその後の列で参照 できます。 検索項目リストの列名は、左から右に処理されます。列エリアス は、検索項目リストで使用する前に、AS 句で定義しておいてくだ さい。たとえば、次の検索項目リストは、rank_dollars が AS 句 で定義される前に指定されているため、エラーになります。 select rank_dollars, rank(sum(dollars)) as rank_dollars 上記の検索項目リストは、次のように修正すると適切になります。 select rank(sum(dollars)) as rank_dollars, rank_dollars AS キーワードはオプションです。たとえば、次の検索項目リスト は rank_dollars を rank(sum(dollars)) のエリアスに定義し ます。 select prod_name, rank(sum(dollars)) rank_dollars 列エリアスは、データベース識別子です。2-3 ページで説明した名 称と識別子の規則に従っている必要があります。 <table_name.*> 指定したテーブルのすべての列を指定します。 product.* クエリ式 7-19 検索項目リスト 集約関数 クエリ指定に GROUP BY 句を指定しない場合、検索項目リストに指定できるのは集 約関数、定数値、非相関サブクエリとなります。検索項目リストに集約関数だけを 指定した場合、リザルト テーブルに返されるのは 1 行です。それ以外は、WHERE 句に指定した検索条件に応じて複数の行が返されます。 クエリ指定に GROUP BY 句を指定した場合、検索項目リストに指定する式は次のい ずれかである必要があります。 ■ ■ ■ ■ 文字定数、日付時間定数、数値定数 GROUP BY 句に指定した列名、または GROUP BY 句に指定した列名で構 成される式 FROM 句に指定したテーブルの列だけを参照する定数または式を引数とす る集約関数 GROUP BY 句に指定した列だけを参照する式、定数を引数とする RISQL 表示関数、OLAP 関数、スカラ関数、またはそのクエリで有効な集約関数 リザルト テーブルには、各グループにつき 1 行が返されます。 例 次のクエリは、Market テーブルの一意な地区名を返します。 select distinct region from market REGION Central North South West 次のクエリは、各地区名と各地区の店舗数を返します。 select region, count(store_name) as nbr_stores from market natural join store group by region REGION South North Central West 7-20 SQL Reference Guide NBR_STORES 4 4 4 6 検索項目リスト 次のクエリは、開始日を返し、販売促進活動の一意な種類の数と開始日に対する一 意な値の数をカウントします。 select start_date, count (distinct promo_desc) as PROMO, count(distinct value) as value from promotion group by start_date START_DATE 1998-01-01 1998-02-01 1998-03-01 1998-03-31 1998-04-01 1998-05-01 1998-06-01 1998-07-01 1998-08-01 1998-09-01 1998-10-01 1998-11-01 1998-12-01 PROMO 4 4 4 1 4 4 4 4 4 4 4 4 5 VALUE 3 3 3 1 3 3 3 3 3 3 3 3 4 クエリ式 7-21 FROM 句 FROM 句 FROM 句は、クエリ指定で取得され評価されたデータのソースをリスト表示するこ ともできます。各ソースはテーブル参照です。 構文 クエリ指定の構文ダイアグラムと FROM 句の構文のポイント ダイアグラムを示し ます。 SELECT <from_clause> <select_list> <where_clause> <group_by_clause> <having_clause> <when_clause> 次に FROM 句の構文ダイアグラムを示します。 , FROM <table_reference> <sample_clause> 7-22 SQL Reference Guide FROM 句 <table_reference> テーブル名 ( 基本テーブル、システム テーブル、ビュー、シノニム ) 、 テーブル結合 (2 つ以上のテーブルを結合したクエリ式 )、サブクエリ のいずれかを指定します。詳細な構文ダイアグラムと説明については、 7-13 ページ「テーブル参照」を参照してください。 FROM 句のテーブル参照にサブクエリを指定する場合は、テーブル 参照に相関名を付けてください。相関名はテーブルやビューにも使 用でき、テーブルに略記用の別名を与えたり、クエリとサブクエリ が同じテーブルを参照する場合にテーブルを区別します。 1 つのテーブルを参照する場合は、そのテーブルがクエリ指定の唯 一のデータ ソースになります。複数のテーブルを参照する場合は、 クエリ指定の論理的結果は直積 ( またはクロス結合 ) になります。 直積を生成しないようにするには、FROM 句か WHERE 句に結合指 定を明示してください。 次のテーブル参照は、暗黙的なクロス結合を示します。 product, sales 次のテーブル結合は、明示的なクロス結合を示します。 product cross join sales <sample_clause> テーブルの行のサンプルを指定します。7-28 ページを参照してくだ さい。 FROM 句の結合 1 つの結合動作により、2 つのテーブル参照から行が抽出、結合されます。結合に は、次の規則と制約があります。 ■ ■ ■ ■ 結合動作は、内部結合または外部結合 (LEFT、RIGHT、FULL) を指定でき ますが、どちらの場合も結合する列を明示的に指定する必要があります。 結合するテーブルは、FROM 句に指定します。結合する列は、結合のタイ プ (INNER または OUTER) にかかわらず、FROM 句か WHERE 句に指定し ます。 結合する列は比較可能なデータ型である必要があります。 1 つのテーブルを、それ自身と結合する (FROM 句に同じテーブルを重複し て指定する ) ことができます。ただし、最低 1 つのテーブルに相関名を割 り当てて、テーブル参照を区別する必要があります。セルフ結合クエリの 例については、『SQL Self-Study Guide』を参照してください。 クエリ式 7-23 FROM 句 ■ ■ ■ ■ クロス結合 ( または直積結合 ) が生成されるのは、rbw.config ファイルの OPTION CROSS_JOIN パラメータが ON に設定されている場合か、ユーザ が SET CROSS JOIN ON 文を実行した場合だけです。この制約の目的は、 誤った限定結合指定などにより、無駄なクロス結合クエリが実行されない ようにすることです。 ユニオン結合はサポートされません。 FROM 句で内部結合または外部結合を指定する方法には、次の 3 種類があ ります。 ❑ ON サブ句 ( 述部に基づく結合 ) ❑ USING サブ句 ( 指定した列に基づく結合 ) ❑ NATURAL JOIN 構文 ( 同じ名前の列の組み合わせを基準とする結合 ) FROM 句に外部結合条件を指定する場合、最初のテーブルが左のテーブ ル、2 番めのテーブルが右のテーブルとみなされます。この結合を WHERE 句に指定する場合、7-37 ページの構文ダイアグラムに示すように、 指定された演算子から外部結合が取られます。 各種結合の詳細な構文については、7-7 ページ「限定結合」を参照してください。 列名の修飾 FROM 句で参照するテーブルに同じ名前の列がある場合は、列が特定できるよう に、所属先テーブルの名前で各列の参照を修飾してください。たとえば、Store テーブルの Storekey 列は、次のどちらかの方法で指定できます。 ■ ■ 7-24 storekey store.storekey SQL Reference Guide FROM 句 しかし、Store テーブルと Sales テーブルの両方が FROM 句で参照される場合は、 Storekey 列への参照を次のように修飾する必要があります。 ■ ■ store.storekey sales.storekey クエリ式から派生するテーブルには、複数の同じ名前の列が生成される場合があり ます。このような列をクエリのほかの部分で参照する場合は、適切なクエリ指定で 列エリアスを指定するか、相関名の後に派生テーブルの列名リストを指定して、一 意な名前を割り当ててください。 列名の修飾の詳細については、2-7 ページを参照してください。 例 このクエリは、すべての注文品と品目をそれぞれのテーブルから抽出し、平均価格 を算出します。検索項目リストと FROM 句で修飾された列名を指定して、2 つの テーブルの Price 列と Order_No 列を区別しています。 select avg(orders.price) as orders_avg, avg(line_items.price) as line_avg from orders join line_items on orders.order_no = line_items.order_no ORDERS_AVG 12340.64758241 LINE_AVG 1380.16296703 このテーブルには、Promokey、Promo_Type、Promo_Desc、Value、Start_Date、 End_Date という列が定義されています。次の例は、Promotion テーブルに相関名 p を割り当て、一時的に Promokey 列に Promo_Code、Value 列に Amount という別名 を割り当てる列リストを指定しています。 select promo_code, amount from promotion p(promo_code, promo_type, promo_desc, amount, start_date, end_date) このクエリに、Promotion テーブルと Sales テーブルの自然結合指定を追加すると、 共通の列名が検出されないため、クロス結合が必要になります。これは、クエリの 処理中 Promotion テーブルの Promokey 列の名前が Promo_Code に置き換えられ、 Promokey という名前の列が存在しないためです。 クエリ式 7-25 FROM 句 次のクエリでは、3 種類の結合指定を FROM 句に指定していますが、結果は同じに なります。 select prod_name, dollars from sales natural join product where dollars < 1000 select prod_name, dollars from sales join product on sales.classkey = product.classkey and sales.prodkey = product.prodkey where dollars < 1000 select prod_name, dollars from sales join product using (classkey, prodkey) where dollars < 1000 次の例では、3 つのテーブルの自然結合を指定しています。 select class_type, prod_name, dollars from class natural join product natural join sales CLASS_TYPE Clothing Clothing Clothing Clothing Clothing Clothing PROD_NAME Aroma t-shirt Aroma t-shirt Aroma t-shirt Aroma t-shirt Aroma t-shirt Aroma t-shirt DOLLARS 54.75 109.50 107.40 197.10 54.75 43.80 次の例では、FROM 句にサブクエリを使用し、Promotion テーブルの Value 列の値 を限定してから、派生テーブルを Sales テーブルに結合します。派生テーブルには、 相関名 (p) を指定する必要があります。 select distinct promo_desc, sum(dollars) as dollars from (select * from promotion where value > 2.00) as p join sales on sales.promokey = p.promokey group by promo_desc PROMO_DESC Christmas special Easter special 7-26 SQL Reference Guide DOLLARS 1920.00 5280.00 FROM 句 システム テーブルも、基本テーブルやビューと同じ方法で結合することができま す。次の例は、RBW_SEGMENTS テーブルと RBW_STORAGE テーブルを結合し、 セグメント名 (storage)、物理格納ユニット (PSU) のファイル名 (psu_location)、関連する基本テーブル (table_name) を表示します。 select segname as storage, location as psu_location, tname as table_name from rbw_storage join rbw_segments on rbw_storage.segname = rbw_segments.name; STORAGE RBW_SYSTEM RBW_SYSTEM RBW_SYSTEM RBW_SYSTEM RBW_SYSTEM DEFAULT_SEGMENT_1 DEFAULT_SEGMENT_2 DEFAULT_SEGMENT_3 DEFAULT_SEGMENT_5 DEFAULT_SEGMENT_7 PSU_LOCATION RB_DEFAULT_SEGM RB_DEFAULT_INDE RB_DEFAULT_TABL RB_DEFAULT_LOCK RB_DEFAULT_IDX dfltseg1_psu1 dfltseg2_psu1 dfltseg3_psu1 dfltseg5_psu1 dfltseg7_psu1 TABLE_NAME NULL NULL NULL NULL NULL MARKET MARKET STORE CLASS PRODUCT クエリ式 7-27 サンプリング サンプリング サンプリング機能は、データ セット全体ではなく行の「無作為」サンプルを処理す るクエリを実行する方法を提供します。サンプリング機能を使用するクエリが作成 するリザルト セットは、リザルト セット全体から分散的にサンプリングしたもの です。たとえば、Sales テーブルの 10% の行から算出した平均日別売上は、テーブ ル全体から算出したした実際の平均値に近い値になります。 サンプル要求のメカニズムは、SELECT 文の FROM 句の拡張機能です。FROM 句は オプションの SAMPLE 句をサポートし、SAMPLE 句は次の 2 種類のサンプル要求を サポートします。 ■ ■ リザルト セット全体から均一に分散してサンプリングした行のサブセット データ行が格納された 8 KB ブロックのサブセット 構文 次にクエリ指定の FROM 句におけるオプションの <sample_clause> の構文ダイアグ ラムを示します。 <size> SAMPLE ROW COUNT SEED <value> EXACT BLOCK 7-28 SAMPLE 直前の <table_reference> のサンプリングを指定します。 ROW 基本テーブルから指定の数またはパーセントの行をサンプリングす る、行サンプリングを指定します。デフォルトは ROW です。 EXACT 指定されたサイズと一致するサンプル サイズを、行のサンプリング によって生成することを保証します。指定された数またはパーセン トのブロックでサンプルを生成することを常に保証するブロック サ ンプリングでは、このキーワードを使用できません。パーセントで サイズを指定する行サンプリングでは、サンプル サイズは小数点以 下を切り捨てた正確な数になります。たとえば、35,967 行の 10% は 3,596 です。EXACT モード ( またはサブクエリ ) サンプリングの最 大誤差は ± 2 行です。 SQL Reference Guide サンプリング BLOCK ブロック サンプリングを指定します。指定の数またはパーセントの 8KB データ ブロックがサンプリングされます。 <size> サンプル サイズを、基本テーブル内の行数またはブロック数、ある いは行またはブロックのパーセントで指定します。この値は必須で す。この値は実数 (FLOAT) 型である必要があります。PERCENT を 指定する場合、100 より小さい値を指定します。 COUNT サンプル サイズを、行数またはブロック数で指定します。COUNT を指定しない場合、パーセントの値が返されます。サンプル サイズ を、行またはブロックのパーセントで指定します。 SEED <value> 乱数発生プログラム用の開始数を指定し、サンプルを再現可能にし ます。この数値は、正の整数である必要があります。 使用上の注意 サンプリング クエリの結果は、テスト データベースの「トレーニング セット」や、 データ採掘プログラムに渡すデータなど、ほかのアプリケーションの入力として使 用できます。この場合、サンプリング機能は、性能の最適化よりもアプリケーショ ンの強化に利用されています。クエリやサブクエリがリザルト セット全体を返す テーブル スキャンを必要としない限り、サンプリングによってクエリやサブクエリ の性能が最適化されることはまずありません。テーブル スキャンを必要としないク エリの場合、サンプリング機能を使用すると性能が低下することがあります。 Vista Advisor で候補ビュー分析を行う場合、ファクト テーブルの行のサンプルを制 約すれば、性能の最適化が保証されます。rbw.config ファイルの ADVISOR_SAMPLE_SIZE パラメータは 5% に設定されているので、デフォルトで 候補分析が最適化されます。Advisor の詳細については、 『IBM Red Brick Vista User’s Guide』を参照してください。 サンプル要求の対象として、次のいずれかの種類のテーブルを <table_reference> で 指定します。 ■ ■ ■ ■ 基本テーブル テンポラリ テーブル ビュー サブクエリから抽出したテーブル システム テーブルのサンプリングはできません。 EXPORT 文、INSERT INTO...SELECT 文、および CREATE VIEW 文の中でも、通常 のビュー ( 事前計算ビュー以外のビュー ) に対するサンプリング機能を使用するこ とができます。UPDATE 文 および DELETE 文の中ではサンプリング機能を使用でき ません。 クエリ式 7-29 サンプリング デフォルトではサンプル サイズを行またはブロックのパーセントで指定しますが、 行数またはブロック数で指定することもできます。サンプル要求の対象が基本テー ブルまたはテンポラリ テーブルである場合、行とブロックのどちらのサンプリング も使用できます。しかし、サブクエリから抽出されたテーブルを対象とする場合、 行サンプリングしか使用できません。この制約の理由は、ブロックの概念がデータ ベース テーブルに格納されたデータにしか適用できないためです。ブロックの概念 は中間クエリ結果には適用できません。 テーブル データをセグメント化してもサンプリングを分散させる効果はありませ ん。サンプリング対象のテーブルが 2 つのセグメントで構成されていて、サンプル のパーセント値を 10 に指定した場合、各セグメントから 10 パーセントの行または ブロックがサンプリングされます。 WHERE 句の制約は、サンプルの選択前ではなく選択後に適用されます。 重要 : いずれかのクエリで <sample_clause> が指定された場合、SuperScan アルゴリ ズムは無効になります。それ以外の場合、このアルゴリズムは、クエリによる行の 読み取りシーケンスを変更して、サンプルが生成されるのを防ぎます。SuperScan の技術については、『Administrator's Guide』を参照してください。 行サンプル サンプルを要求するとき、結果全体の中の一定のパーセントの行をサンプリングす るか、または特定の行数をサンプリングするかを指定できます。デフォルトのサン プル要求は、テーブル内の指定のパーセントの行を選択する行サンプルであり、こ れが最も簡単な方法です。次の例は、Sales テーブル内の約 20 パーセントの行を返 します。 select * from sales sample 20 次の例は、Sales テーブルから約 20 行を無作為に選択して返します。 select * from sales sample 20 count 行サンプルの場合、デフォルトでは指定の行数と実際のサンプル数が正確に一致し ませんが、正確な行数をサンプリングすることもできます。次の例は、Sales テー ブルから 20 行を無作為に選択して返します。 select * from sales sample exact 20 count 正確なサンプリングを行うモードでは、データの読み取り ( スキャン動作 ) は並列 実行されますが、サンプリング動作は別々に直列実行されます。デフォルトの不正 確なモードでは、スキャン動作とサンプリング動作はどちらも同時に並列実行され ます。 重要 : 正確な行数のサンプルを要求した場合、処理速度は低下します。 7-30 SQL Reference Guide サンプリング ブロック サンプル 基本テーブルのサンプルでは、テーブル データが格納されたデータ ブロックのサ ブセットを読み取るサンプルを要求できます。無作為に選択されたブロックのリス トに格納されたすべての行がサンプル データセットを構成します。Red Brick の データ行は 8 KB のブロック単位で格納され、行がブロックをまたがって分割され ることはありません。10 パーセントの行サンプルを行うと、これらの行を生成する ためにデータ ブロックのほとんどすべてがアクセスされます。しかし、10 パーセ ントのブロック サンプルを行うと、ソース データの 10 パーセントだけが正確にア クセスされます。デフォルトは、パーセント サンプルです。 select * from sales sample block 10 ブロック サンプリングによって、本当に無作為な行サンプリングとは異なる、「ク ラスタ化サンプリング」ができます。この方法を使用すると性能は上がりますが、 技巧が複雑であり分析能力は落ちます。DBA は隣接するデータ行を意図的に選択し ます。この場合、行が論理的にグループ化されたデータ配置になっていることを前 提とします。そのため性能向上の代償として、本当に分散されたサンプリングがで きないことがあります。 ヒント : 分散されたサンプルが性能の向上よりも重要でなければ、ブロック サン プリングを選択してください。 ブロック サンプリングの場合、ブロック数指定の方がパーセント指定よりも有効で す。たとえば、テーブル内のブロック数がわからない場合でも、CHECK TABLE...VERBOSE コマンドを使用すれば、テーブル内の行数を簡単に知ることが できます。ブロック当たりの行数を判定すれば、それらの統計情報に基づいてブ ロック数を指定することができます。 シード クエリでサンプリングが使用された場合、サンプルの再生成が必要になる場合があ ります。シード値、すなわち生成番号の疑似乱数シーケンスの開始番号を指定する ことで、同じデータには同じクエリを実行できるように再生成可能サンプルを管理 することができます。重要なことは、どのシード番号を指定するかではなく、その 番号に一意性があることです。たとえば、シード値を 2、または 2000 に設定できま すが、どちらに設定しても、そのシードに基づくサンプリング クエリでは同じリザ ルト セットが返されます。 シリアル (SERIAL) データ型の詳細については、9-59 ページ「SET SAMPLE SEED」 を参照してください。 クエリ式 7-31 サンプリング マージン 行サンプリングで返されるサンプルの実際のサイズは、要求したサイズと異なるこ とがあります。マージン パラメータを設定することにより、行サンプルのサイズの 分散度を監視できます。実際のサイズが、指定したマージン百分位数の範囲外にな るたびに、警告メッセージが表示されます。たとえば、マージンを 10 に設定した 場合、サンプル クエリで返される行の量が、要求した量よりも 10% を上回る、ま たは下回るたびに、メッセージが表示されます。マージン設定にかかわらず、クエ リは完全に実行されます。 マージンの詳細については、9-57 ページ「SET SAMPLE MARGIN」を参照してくだ さい。 行サンプリングとブロック サンプリングの例 シングル テーブル行サンプル 次のクエリは、Sales テーブル内の行の約 5 パーセントのサンプルに基づき、Sales テーブルの Dallars の平均値を返します。 select avg(dollars) from sales sample 5 102.40746567 このテーブル内の行 ( 合計 69,941 行 ) の 5 パーセントは約 3,500 行であるため、それ と等価の行数サンプルを行うと次のようになります。 select avg(dollars) from sales sample 3500 count 101.99215714 どちらのサンプル クエリの結果も、実際の平均値に非常に近い値になります。 select avg(dollars) from sales 101.91947641 シングル テーブル ブロック サンプル 次の例は、前の例と同じ平均を要求しますが、Sales テーブルをブロック単位でサ ンプリングします。 7-32 SQL Reference Guide サンプリング CHECK TABLE...VERBOSE を使用してブロック数を判定することができます。Sales テーブルの行の 5 パーセントは 13 ブロックにほぼ等しく、これは Sales テーブルの 総ブロック数の 5 パーセントです。したがって、上記の 5 パーセントの行サンプル と等価なブロック サンプルは、次のいずれかになります。 select avg(dollars) from sales sample block 13 count 102.56437937 select avg(dollars) from sales sample block 5 102.53939393 ブロック サンプルの結果は、実際の結果にも、行サンプルの結果にも近い値になり ます。 クエリ式 7-33 サンプリング サンプルへの結合 次のサンプル クエリは、サブクエリを使用して、Period ディメンジョン テーブル から分散的にサンプリングした行のサブセットを生成します。テーブルの約 3 パー セントを返し、それを Sales ファクト テーブルと Store ディメンジョン テーブルに 結合することにより、サンプルした日付について店舗ごとのドルの合計を算出しま す。SET STATS INFO は、サンプリング動作に関する情報を返すために使用されま す。 set stats info; select date, store_name, sum(dollars) as daily_store_sales from sales, store, (select perkey, date from period sample 3) as t1(perkey, date) where t1.perkey = sales.perkey and sales.storekey = store.storekey and extract(year from date) = 1999 group by date, store_name order by date, store_name; ** STATISTICS ** (500) Compilation = 00:00:00.07 cp time, 00:00:00.05 time, Logical IO count=56 DATE 1999-01-31 1999-01-31 1999-01-31 ... 1999-12-04 1999-12-04 1999-12-04 STORE_NAME Beaches Brew Beans of Boston Coffee Brewers San Jose Roasting Company Texas Teahouse The Coffee Club DAILY_STORE_SALES 1098.50 282.25 1095.25 497.00 993.75 197.25 ** STATISTICS ** (1457) EXCHANGE (ID:6) Parallelism over 1 times High:4 Low:4 Average: 4. ** STATISTICS ** (1457) EXCHANGE (ID:11) Parallelism over 1 times High:1 Low:1 Average: 1. ** STATISTICS ** (1458) CHOOSE PLAN (ID:2) Choice:1 was chosen 1 times. ** STATISTICS ** (1459) CHOOSE PLAN (ID:2) STARjoin on 1 tables was done 1 times. ** STATISTICS ** (1460) CHOOSE PLAN (ID:2) used Index SALES_STAR_IDX of Table SALES 1 times for STARjoin. ** INFORMATION ** (1466) SAMPLE SCAN (ID:4) Sample Seed:963616913. Sample Margin:10 percent.Sample Size specified 3.00000000 percent (25) rows, returned 3.16686967 percent (26) rows. ** STATISTICS ** (500) Time = 00:00:00.32 cp time, 00:00:00.39 time, Logical IO count=296 ** INFORMATION ** (256) 229 rows returned. 7-34 SQL Reference Guide サンプリング サブクエリでサンプリングを使用すると、アウター クエリへの入力が減少し、それ により STARjoin クエリの処理速度が上がります。 サンプルされた 26 行 ( メッセージ 1466 を参照 ) は、Sales テーブルと Store テーブル への結合に対する入力として使用されました。これらの結合の結果として、229 行 ( メッセージ 256 を参照 ) からなる最終的なリザルト セットが作成されました。前に 示したこのリザルト セットでは、最初と最後の 3 行を除くすべての行が省略されて います。 再生成可能サンプル 上記のクエリで Period テーブルのサンプルを再生成する場合は、メッセージ 1466 に示されたシード値を指定して、クエリを再実行できます。 select date, store_name, sum(dollars) as daily_store_sales from sales, store, (select perkey, date from period sample 3 seed 963616913) as t1(perkey, date) where t1.perkey = sales.perkey and sales.storekey = store.storekey and extract(year from date) = 1999 group by date, store_name order by date, store_name クエリを実行する前に、シード値を設定しておくこともできます。 set sample seed 963616913 自分専用のシード番号を選択して、クエリの実行前またはクエリの内部でそのシー ド値を指定することができます。 set sample seed 9000 または select date, store_name, sum(dollars) as daily_store_sales from sales, store, (select perkey, date from period sample 3 seed 9000) ... クエリ式 7-35 WHERE 句 WHERE 句 WHERE 句には、FROM 句から得られた中間リザルト テーブルの各行に適用する検 索条件を指定します。 構文 ここではクエリ指定を繰り返して、<where_clause> の構文の参照のポイントを与え ています。 SELECT <select_list> <from_clause> <where_clause> <group_by_clause> <having_clause> <when_clause> 次に WHERE 句の構文ダイアグラムを示します。 WHERE <search_condition> <search_condition> FROM 句から得られた中間リザルト テーブルの各行について真、 偽、不定を判定する条件です。条件が真と判定された行はリザ ルト テーブルに残され、それ以外は除外されます。WHERE 句 を省略すると、中間リザルト テーブルのすべての行が残されま す。 検索条件は、次の条件を満たしている必要があります。 ■ ■ 7-36 3-10 ページ「条件」で説明した規則に従って記述されていること 検索条件で参照する列は、中間リザルト テーブルの列を一意に指定するも のか、サブクエリでのみ可能な相関列の参照であること SQL Reference Guide WHERE 句 結合述部 結合するテーブルを FROM 句に指定した場合は、WHERE 句に結合を指定できま す。結合述部は、7-11 ページで説明した規則に従っている必要があります。たとえ ば、次のクエリは、City 列に基づく State テーブルと Region テーブルの内部等価結 合です。 select * from state, region where state.city = region.city 標準とは異なる外部結合の構文 外部結合の構文は、7-10 ページに示す FROM 句の構文にすることをお勧めします。 この構文は ANSI SQL-92 規格に準拠しています。 警告 : IBM Red Brick Warehouse は、次のダイアグラムに示す構文を、移行のために のみサポートしています。この構文は、WHERE 句におけるレフト、ライト、フル の外部結合指定を記述することができます。 Sybase 式の構文 <table_1.col> *= <table_2.col> <table_1.col> =* *=* <table_2.col> <table_1.col> <table_2.col> Oracle 式の構文 <table_1.col> = <table_2.col(+)> <table_1.col(+)> = = <table_2.col> <table_1.col(+)> <table_2.col(+)> クエリ式 7-37 WHERE 句 <table_1.col>、 2 つのテーブルから、比較可能なデータ型の 2 列を指定します。た <table_2.col> とえば、Sales テーブルと Orders テーブルのレフト外部結合は、次 のように指定します。 where sales.perkey *= orders.perkey Perkey 列を基準とした内部等価結合から返されるすべての行と、 Sales テーブルのうち、結合した列について Orders テーブルの行と 一致しない行が返されます。 上記と同じレフト外部結合は、次のように指定することもできま す。 where sales.perkey = orders.perkey(+) 例 次のクエリは、1998 年 12 月の日別売上が 500 ドルを超えた製品の売上金額を返し ます。WHERE 句には、Dollars 列の列エリアス top_prods が使用されていることに 注意してください。WHERE 句には、FROM 句で指定したテーブルについて、結合 の基準となる列も指定されています。 select prod_name, dollars as top_prods from sales s, product p, period d where s.classkey = p.classkey and s.prodkey = p.prodkey and s.perkey = d.perkey and year = 1998 and month = 'DEC' and top_prods > 500 PROD_NAME Espresso Machine Italiano Coffee Sampler 7-38 SQL Reference Guide TOP_PRODS 699.65 570.00 GROUP BY 句 GROUP BY 句 GROUP BY 句は、指定した列に基づいてリザルト テーブルをグループ分けします。 構文 ここではクエリ指定を繰り返して、<group_by_clause> の構文の参照のポイントを与 えています。 SELECT <select_list> <from_clause> <where_clause> <group_by_clause> <having_clause> <when_clause> 次に GROUP BY 句の構文ダイアグラムを示します。 , GROUP BY <column_name> <column_name> リザルト テーブルの列を一意に指定します。GROUP BY 句で参照す る列を、グルーピング列と呼びます。 GROUP BY 句は、グルーピング列で定義された行のグループにリザルト テーブルを 分割します。1 つのグループは、1 行以上から構成されます。複数の行からなるグ ループでは、どの行も GROUP BY に指定した列の値が同じです。NULL は列内の一 意な値として扱われます。リザルト テーブルには、各グループを集約した行が返さ れます。 GROUP BY に指定するグループ分けの基準となる列は、リザルト テーブルに表示で きます。ただし、検索項目リストになければ、リザルト テーブルには表示されませ ん。 クエリ式 7-39 GROUP BY 句 クエリに GROUP BY 句を指定し、そのクエリの FROM 句に指定した列を検索項目 リストに指定する場合は、検索項目リストで参照している列は、集約関数の引数 か、GROUP BY 句に指定されている必要があります。つまり検索項目リストの式 は、次のいずれかである必要があります。 ■ ■ ■ ■ 文字定数、日付時間定数、数値定数 GROUP BY 句に指定した列または列エリアス、または GROUP BY 句に指 定した列で構成される式 FROM 句に指定したテーブルの列だけを参照する定数または式を引数とす る集約関数 GROUP BY 句に指定した列だけを参照する式、定数を引数とする RISQL 表示関数、OLAP 関数、スカラ関数、またはそのクエリで有効な集約関数 GROUP BY に指定する列は、HAVING 句の検索条件に指定することができます。 検索項目リストにサブクエリを指定したクエリで GROUP BY 句を指定する場合で相 関列がある場合、アウター クエリの GROUP BY 句で相関列を指定してください。 相関サブクエリの詳細については、このマニュアルの 7-72 ページおよび『SQL Self-Study Guide』を参照してください。 例 次のクエリは、販売促進活動に基づいてグループ分けした 2000 年 1 月の売上合計を 返します。 select promo_desc, sum(dollars) as promo_totals from promotion natural join sales natural join period where year = 2000 and month = 'JAN' group by promo_desc PROMO_DESC No promotion Temporary price reduction Aroma catalog coupon Monthly coffee special Store display 7-40 SQL Reference Guide PROMO_TOTALS 250668.75 4046.25 5216.80 1083.00 1896.75 HAVING 句 HAVING 句 HAVING 句は、GROUP BY 句から得られたリザルト テーブルに適用する条件を指定 します。HAVING 句が使用できるのは、検索項目リストに集約関数を指定している か GROUP BY 句を指定しているクエリ式だけです。 構文 ここではクエリ指定を繰り返して、<having_clause> の構文の参照のポイントを与え ています。 SELECT <select_list> <from_clause> <where_clause> <group_by_clause> <having_clause> <when_clause> 次に HAVING 句の構文ダイアグラムを示します。 HAVING <search_condition> <search_condition> リザルト テーブルの各グループについて真、偽、不定を判定 する条件です。条件が真と判定されたグループはリザルト テーブルに残され、それ以外は除外されます。HAVING 句を 省略すると、リザルト テーブルのすべてのグループが残され ます。 検索条件は、次の条件を満たしている必要があります。 ■ ■ 3-10 ページ「条件」で説明した規則に従って記述されていること 条件で参照される列が、グルーピング列、相関列の参照、集約関数に指定 された列のいずれかであること 条件に相関サブクエリが指定された場合、その相関サブクエリはリザルト テーブル の各グループについて評価されます。 クエリ式 7-41 HAVING 句 例 次のクエリは、売上が 50,000 ドルを超えた製品について、1998 年の売上合計を返し ます。 select prod_name, sum(dollars) as total_1998 from product natural join sales natural join period where year = 1998 group by prod_name having total_1998 > 50000 PROD_NAME Darjeeling Number 1 La Antigua Expresso XO Aroma Roma Colombiano Veracruzano NA Lite Ruby's Allspice Darjeeling Special Xalapa Lapa Lotta Latte Demitasse Ms Assam Gold Blend Cafe Au Lait 7-42 SQL Reference Guide TOTAL_199 62283.25 197069.50 224020.00 203544.00 188474.50 201230.00 231845.00 133188.50 127207.00 251590.00 217994.50 282385.25 71419.00 213510.00 WHEN 句 WHEN 句 集約関数 (AVG、MIN、MAX、SUM、COUNT) の演算、HAVING 句の評価、RISQL 表示関数または OLAP 関数の処理の結果得られたリザルト テーブルに対する条件を 指定します。条件を満たす行は最終的なリザルト テーブルに残され、それ以外は除 外されます。 構文 ここではクエリ指定を繰り返して、<when_clause> の構文の参照のポイントを与え ています。 SELECT <from_clause> <select_list> <where_clause> <having_clause> <group_by_clause> <when_clause> 次に WHEN 句の構文ダイアグラムを示します。 WHEN <condition> <condition> 集約関数の演算、HAVING 句の評価、RISQL 表示関数または OLAP 関数の処理の結果得られたリザルト テーブルに対する条件を指定し ます。AND、OR、NOT の各論理接続詞を使った複合条件を指定す ることもできます。 条件の詳細については、第 3 章「式と条件」を参照してください。 使用上の注意 WHEN 句の RISQL 表示関数に影響を与えるのは、単純な RESET BY 句だけです。 複雑な RESET BY 指定によって行を選別するには、検索項目で列エリアスを指定 し、その列エリアスを WHEN 句で参照する必要があります。この例は、7-62 ペー ジを参照してください。 クエリ式 7-43 WHEN 句 例 次のクエリは、1999 年の合計売上に基づいて各製品を順位付けし、上位 10 製品の 売上を返します。 select prod_name, sum(dollars) as sales, rank() over(order by sales) as top_ten_99 from sales natural join product natural join period where year = 1999 group by prod_name when top_ten_99 <= 10 7-44 SQL Reference Guide UNION、EXCEPT、INTERSECT 式 UNION、EXCEPT、INTERSECT 式 UNION、EXCEPT、INTERSECT の演算子はいずれも、複数のリザルト セットを処 理し、1 つのリザルト セットを返します。 ■ ■ ■ UNION 演算子は、2 つのクエリ式の結果を 1 つのリザルト セットに結合し ます。クエリ式は個別に実行され、各結果が 1 つのリザルト セットに統合 されます。 EXCEPT 演算子は、2 つのクエリ式の結果を評価し、差異を返します。最 初のクエリ式から返されるすべての行から、2 番めのクエリ式から返され る行を除外した結果がリザルト セットに返されます。 INTERSECT 演算子は、2 つのクエリ式の結果を評価し、各結果に共通の行 だけを返します。 次の図は上記の概念をベン図で表したものです。陰影の部分がリザルト セットを示 しています。 図 7-2 リザルト セット Union Except Intersect 構文 次に UNION 式の構文ダイアグラムを示します。 ( ( <query_expression> EXCEPT ) <query_expression> UNION ALL INTERSECT クエリ式 7-45 UNION、EXCEPT、INTERSECT 式 <query_expression> 7-5 ページで説明した結合クエリ式または非結合クエリ式を 指定します。 ステートメント中の各クエリ式では、それぞれの検索項目リ ストの列数が一致する必要があります。各リストの対応する 列は、同じ順序で指定する必要がありますが、列名は一致し なくてもかまいません。リザルト テーブルの列名は、最初の クエリ式のものが使用されます。かっこを使っても変わりま せん。 リザルト テーブルの列見出しを変更するには、最初のクエリ 式の検索項目リストに AS 句を使用します。< union_expression> を FROM 句で使用する場合は、相関名と列 リストを使って見出しを指定します。7-13 ページを参照して ください。 各クエリ式の対応する列は、同じデータ型か、データ型間で 暗黙の変換が行われるものにしてください。短いデータ型は 長いデータ型に変換され、精度の低いデータ型は精度の高い データ型に変換されます。たとえば、一方の列が 小桁実数 (REAL) 型で、対応する列が実数 (FLOAT) 型の場合は、リザ ルト テーブルの列は実数 (FLOAT) 型になります。これは小桁 実数 (REAL) 型より実数 (FLOAT) 型の方が精度が高いためで す。 対応する列のデータ型間の変換は、7-49 ページのデータ型変 換表に示します。 UNION | EXCEPT | INTERSECT UNION は、2 つ以上のリザルト セットを 1 つのリザルト セットに結合します。 EXCEPT は、2 つのリザルト セットを評価し、最初のリザル ト セットから、2 番めのリザルト セットにない行を返しま す。 INTERSECT は、2 つのリザルト セットに共通の行をリザル ト セットに返します。 UNION、INTERSECT、EXCEPT の各演算子は、1 つの <union_expression> にまとめることができます。 複数の演算子を使用したステートメントのデフォルト評価順 ( 優先順位 ) は、左から右になります。ただし、INTERSECT 演算子は、UNION および EXCEPT の前に評価されます。評 価順は、かっこを使って変更できます。 7-46 SQL Reference Guide UNION、EXCEPT、INTERSECT 式 ALL ALL を指定すると、<union_expression> の結果から重複行が 除外されません。2 つのクエリ式から同じ行が返された場合、 2 行とも最終結果に返されます。ALL を指定しないと、重複 行はリザルト セットから除外されます。 複数の UNION、EXCEPT、INTERSECT 演算子と ALL キー ワードを指定したステートメントでは、評価順によって結果 が変わります。重複行が除外されるかどうかは、クエリの評 価順と ALL キーワードの位置関係によって決まります。最後 に実行される演算に ALL キーワードを指定しないと、直前の 評価で残された重複行は除外されてしまいます。 クエリ式 7-47 UNION、EXCEPT、INTERSECT 式 使用上の注意 UNION 演算子と EXCEPT 演算子の優先順位は同じです。複数の演算子を指定した クエリは、左から右に評価されます。 <query_expression1> union<query_expression2> except <query_expression3> 上記のクエリは、次の順序で評価されます。 (<query_expression1> union <query_expression2>) except <query_expression3> INTERSECT 演算子は、UNION 演算子や EXCEPT 演算子よりも優先されます。かっ こがなければ、INTERSECT 演算子が最初に評価されることになります。 <query_expression1> union<query_expression2> intersect <query_expression3> 上記のクエリは、次の順序で評価されます。 <query_expression1> union (<query_expression2> intersect <query_expression3>) かっこを使ってデフォルトの優先順位を変更すると、処理順が変わり、重複行が除 外されるかどうかも変わります。 <union_expression> に指定した結合は、かっこでデフォルト評価順を変更した場合 を除き、上記の 3 つの演算子よりも優先されます。 INSERT INTO...SELECT 文には、UNION、INTERSECT、EXCEPT 演算子を使用でき ます。 insert into orders.all select * from orders.new union select * from orders.old OR 接続詞を使って検索条件を指定したクエリは、UNION 演算子を使って書き直し た方がクエリ性能が向上することがあります。この例については、『SQL Self-Study Guide』の第 5 章を参照してください。 7-48 SQL Reference Guide UNION、EXCEPT、INTERSECT 式 データ型の変換 UNION、INTERSECT、EXCEPT 演算で対応する列のデータ型が異なる場合、デー タ型の変換結果は次の表のようになります。 データベース サーバが、サポートするデータ型のいずれかと CHAR、VARCHAR、 DEC、TINYINT、SMALLINT データ型のいずれかを比較する場合、変換結果は次の 表のようになります。 DEC(p2, s2) TINYINT SMALLINT VARCHAR (MAX(M,N)) error error error VARCHAR (MAX(M,N)) VARCHAR (MAX(M,N)) error error error DEC(p1,s1) error error † † † TINYINT error error † TINYINT SMALLINT SMALLINT error error † SMALLINT SMALLINT INTEGER error error † INTEGER INTEGER SERIAL error error † INTEGER INTEGER error error FLOAT REAL REAL FLOAT** error error FLOAT FLOAT FLOAT DATE error error error error error TIME(m) error error error error error TIMESTAMP(m) error error error error error CHAR(n) VARCHAR(n) CHAR(m) CHAR (MAX(M,N)) VARCHAR(m) REAL § † 変換結果は、データ型の精度とスケールによって異なります。値を格納できる最 小許容データ型が使用されます。 § REAL は、FLOAT(4) と同じです。 ** FLOAT は、DOUBLE PRECISION と同じです。 クエリ式 7-49 UNION、EXCEPT、INTERSECT 式 データベース サーバが、サポートするデータ型のいずれかと INTEGER、REAL、 FLOAT、DATE、TIME、TIMESTAMP データ型のいずれかを比較する場合、変換結 果は次の表のようになります。 INTEGER REAL§ FLOAT** DATE TIME(n) TIMESTAMP(n) CHAR(m) error error error error error error VARCHAR(m) error error error error error error DEC(p1,s1) † FLOAT FLOAT error error error TINYINT INTEGER REAL FLOAT error error error SMALLINT INTEGER REAL FLOAT error error error INTEGER INTEGER FLOAT FLOAT error error error SERIAL INTEGER FLOAT FLOAT error error error REAL FLOAT REAL FLOAT error error error FLOAT** FLOAT FLOAT FLOAT error error error DATE error error error DATE error error TIME(m) error error error error TIME(MAX(M,N)) error TIMESTAMP(m) error error error error error TIMESTAMP (MAX(M,N)) § † 変換結果は、データ型の精度とスケールによって異なります。値を格納できる最 小許容データ型が使用されます。 § REAL は、FLOAT(4) と同じです。 ** 7-50 FLOAT は、DOUBLE PRECISION と同じです。 SQL Reference Guide UNION、EXCEPT、INTERSECT 式 例 Store テーブルと Market テーブルの City 列と Hq_City 列からデータを抽出して結合 する、単純な UNION 演算の例を示します。 select hq_city as ca_cities from market where hq_state like 'CA%' union select city from store where state like 'CA%' CA_CITIES Cupertino Los Angeles Los Gatos Oakland San Francisco San Jose 次に、ALL キーワードを使用し、Hq_City 列と City 列のエントリが重複していても 除外しない例を示します。 select hq_city as ca_cities from market where hq_state like 'CA%' union all select city from store where state like 'CA%' CA_CITIES San Jose San Francisco Oakland Los Angeles Los Gatos San Jose Cupertino Los Angeles San Jose クエリ式 7-51 UNION、EXCEPT、INTERSECT 式 次の例では、UNION 演算子が EXCEPT 演算子に置き換えられています。その結果、 Market テーブルにある California 州の都市のうち、Store テーブルにないものだけが 返されます。 select hq_city as ca_cities from market where hq_state like 'CA%' except select city from store where state like 'CA%' CA_CITIES Oakland San Francisco 次の例では、UNION 演算子が INTERSECT 演算子に置き換えられています。その結 果、Market テーブルと Store テーブルの両方にある California 州の都市だけが返さ れます。 select hq_city as ca_cities from market where hq_state like 'CA%' intersect select city from store where state like 'CA%' CA_CITIES Los Angeles San Jose 次のクエリは、複数の INTERSECT 演算子を使って、5 つのテーブルに共通のキー 値を返します。 select prodkey as common_keys from product intersect select classkey from class intersect select promokey from promotion intersect select perkey from period intersect select storekey from store COMMON_KEYS 1 3 4 5 12 7-52 SQL Reference Guide UNION、EXCEPT、INTERSECT 式 次に、UNION 演算子と INTERSECT 演算子を含むクエリの評価順をかっこで指定す る例を示します。UNION 演算子はかっこで囲まれているため、最初に評価されま す。かっこがなければ INTERSECT 演算子が優先され、リザルト セットの内容が異 なる可能性があります。 (select prod_name from product natural join sales_canadian union select prod_name from product natural join sales_mexican) intersect select prod_name from product natural join sales かっこは、UNION、EXCEPT、INTERSECT 演算のデフォルト評価順よりも優先さ れるため、最終的なリザルト セットから重複行を除外するかどうかにも影響が生じ ます。次の 2 つのクエリは、この例です。 最初のクエリでは、左から右のデフォルト評価順に従って、1 番めと 2 番めのクエ リ式が最初に評価されます。UNION ALL 式が指定されているため、重複行は除外 されません。その後の UNION は、1 番めと 2 番めのクエリ式の結果を 3 番めのクエ リ式と結合し、重複行を除外します。 select prod_name natural join union all select prod_name natural join union select prod_name natural join from product sales_canadian from product sales_mexican from product sales 次のクエリでは、2 番めと 3 番めのクエリ式を結合する union が最初に評価され、重 複行が除外されます。その後で、1 番めのクエリ式と、2 番めと 3 番めのクエリ式の 結果とを結合する UNION ALL 演算が評価され、重複行は残されます。 select prod_name from product natural join sales_canadian union all (select prod_name from product natural join sales_mexican union select prod_name from product natural join sales) UNION、INTERSECT、EXCEPT 演算子を含むほかのクエリ例については、『SQL Self-Study Guide』を参照してください。 クエリ式 7-53 SELECT 文 SELECT 文 SELECT 文は、データベースから複数のデータ行を抽出します。任意のクエリ式 と、その後に指定するオプションの SUPPRESS BY 句や ORDER BY 句から構成され ます。クエリ式を、データベース サーバが実行できる SELECT 文に変えるには、セ ミコロン ( または使用しているエントリ ツールに応じた終端記号 ) を付加します。 単純な例をいくつか示します。 ■ テーブル結合 : ■ クエリ指定 : ■ UNION 式 : sales_east natural join sales_west; select * from sales_east natural join sales_west; select * from sales_east union select * from sales_west; ■ 明示的テーブル : table sales_east; SELECT 文は、SELECT キーワードを必要とするとは限りません。クエリ式により、 検索項目リストや FROM 句が暗黙的に指定される場合もあります。 構文 次に SELECT 文の構文ダイアグラムを示します。 <query_expression> <order_by_clause> 7-54 SQL Reference Guide <suppress_by_clause> ORDER BY 句 <query_expression> 7-5 ページで説明した結合クエリ式または非結合クエリ式を指 定します。 <order_by_clause> リザルト テーブルの行をソートします。詳細については、 7-55 ページ「ORDER BY 句」を参照してください。ORDER BY 句には、7-59 ページと 7-63 ページ でそれぞれ定義されて いる RESET BY と BREAK BY の 2 つの RISQL サブ句を指定す ることもできます。 BREAK BY 句を指定した SELECT 文は、INSERT 文では使用で きません。 <suppress_by_clause> 指定した列に NULL、空白、または 0 が格納されていた場合 に、最終的なリザルト セットからその行を除外します。詳細 については、7-66 ページ「SUPPRESS BY 句」を参照してくだ さい。 ORDER BY 句 ORDER BY 句は、指定した列の値に応じて、リザルト テーブルの行を昇順または降 順にソートします。 構文 次に ORDER BY 句の構文ダイアグラムを示します。 , ORDER BY <column_name> <integer> ASC DESC RESET BY <subclause> NULL FIRST LAST BREAK BY <subclause> クエリ式 7-55 ORDER BY 句 <column_name> リザルト テーブルの行をソートする基準となる列を指定します。 結果のソートに使用する列は、リザルト テーブルに表示しなくても かまいません。検索項目リストにない列を基準にソートする場合 は、ソートの基準列は表示されません。ORDER BY 句の前にあるク エリ式がクエリ指定の場合は、検索項目リストに指定するすべての 列を GROUP BY 句に指定しないと、列に基づくソートはできませ ん。 重複を除外する DISTINCT キーワードを SELECT 句に使用する場合 は、ORDER BY 句に指定するすべての列を検索項目リストに指定し てください。 ORDER BY 句に複数の列名を指定した場合は、各列を組み合わせた ソート順になり、優先順位は左から右になります。 <integer> 検索項目リストの列の相対列番号を指定します。0 より大きく、リ ザルト テーブルの列数以下の整数を指定してください。この整数 は、検索項目リストの k 番めの列を指定します。 ASC 昇順に値をソートします。デフォルトは ASC です。 DESC 降順に値をソートします。 NULL デフォルトのソートでは、NULL は、ホストのオペレーティング シ ステムの照合シーケンスの最大値より大きいと評価されます。この ため、昇順ソートの場合はシーケンスの最後、降順ソートの場合は シーケンスの最初になります。デフォルトは、次の時点で変更でき ます。 ■ ■ ■ データベース サーバ初期化ファイルからデータベース サーバを初期化したとき SET ORDER BY 文を使ってクエリを実行する前 NULL サブ句を使ったクエリの実行中 データベース サーバ初期化ファイル (.rbwrc ファイル ) で NULL の 初期デフォルト位置を決める方法は、 『Administrator's Guide』で説明 されています。デフォルトの位置をクエリごとに変更する SET ORDER BY 文は、9-38 ページで説明します。 整列順序 行は、各列のデータ型に応じた順にソートされます。数値データ型の場合は値の大 きさの順、文字データ型の場合はアルファベット順、日付時間データ型の場合は時 系列にソートされます。ソート シーケンスのどこで NULL が現れるかは、前の説明 を参照してください。 7-56 SQL Reference Guide ORDER BY 句 データベース サーバは、サーバ ロケールが指定する照合シーケンスおよびソート 方法に従ってデータを比較、ソートします。異なるソート方法をクライアントに指 定しても、影響はありません。データベース サーバ ロケールの設定の詳細につい ては、『Administrator's Guide』を参照してください。 使用上の注意 UNION 式の後に指定された ORDER BY 句は、最初のクエリ式から得られたテーブ ルで指定された列を基準に、最終的なリザルト セットをソートする必要がありま す。つまり、最初のクエリ式でエリアスを割り当てられた列名はそのエリアスで参 照される必要があり、その限定列を UNION 式の ORDER BY 句に指定することはで きません。 UNION 式の後に指定される ORDER BY 句には、BREAK BY サブ句は使用できます が、RESET BY 句は使用できません。 ORDER BY 句では、OLAP 関数のエリアス、またはクエリのほかの場所で使われて いる OLAP 関数の定位置参照のどちらかを使うことができます。RISQL 表示関数を ORDER BY 句で参照することはできません。 例 次の SELECT 文は、クエリ式にテーブル結合を指定して class テーブルと product テーブルを結合し、得られた 6 列のテーブルを、package type 列を基準にソートしま す。 class natural join product order by pkg_type CLASSKEY 8 8 8 8 8 8 8 CLASS_TYPE Gifts Gifts Gifts Gifts Gifts Gifts Gifts CLASS_DESC Samplers Samplers Samplers Samplers Samplers Samplers Samplers PRODKEY 31 30 20 4 10 5 3 PROD_NAME Aroma Sounds CD Aroma Sounds CD Easter Sampler Coffee Sampler Christmas Sampler Spice Sampler Tea Sampler KG_TYPE Aroma designer box Aroma designer box Gift box Gift box Gift box Gift box Gift box クエリ式 7-57 ORDER BY 句 次の SELECT 文は、UNION 式をクエリ式として使用しています。結果は、price 列 を基準にソートされます。最初のクエリ式の検索項目リストで指定される列エリア ス Order_Amounts は Price 列を表し、ORDER BY 句で参照されています。ORDER BY 句には、相対列番号 2 を使用することもできますが、「price」という語は使用で きません。 select prod_name, price as order_amounts from period natural join product natural join line_items where year = 1998 and qtr = 'Q1_98' union select prod_name, price from product, line_items where prod_name like 'Lotta%' order by order_amounts 次のクエリは、California 州の店舗で販売した袋詰め製品について、1999 年の売上 を返します。リザルト テーブルは、都市別に製品名と合計売上に基づいて降順に ソートされます。 select prod_name, city, sum(dollars) as city_total from sales natural join product natural join store natural join period where year = 1999 and state = 'CA' and pkg_type like '%bag%' group by prod_name, city order by prod_name, city_total desc 次のクエリは、Minneapolis で販売した製品について、1999 年 10 月の売上を返しま す。リザルト テーブルは、quantity 列を基準に降順にソートされます。Quantity 列 は表示されないことに注意してください。 select prod_name, dollars from sales natural join product natural join period natural join store where city like 'Minn%' and year = 1999 and month = 'OCT' order by quantity desc PROD_NAME Colombiano Aroma Roma Colombiano Colombiano Aroma Roma La Antigua Veracruzano 7-58 SQL Reference Guide DOLLARS 330.75 355.25 330.75 317.25 333.50 333.50 337.50 ORDER BY 句 次のクエリは、各都市で販売した Lotta Latte の売上合計と累積売上を返し、地区名 と都市名を基準にソートします。 select city, region, sum(dollars) as total_dollars, cume(sum(dollars)) as running_total from sales natural join product natural join store natural join market where prod_name like 'Lotta%' group by region, city order by region, city CITY Chicago Detroit Milwaukee Minneapolis Boston Hartford New York Philadelphia Atlanta Houston Miami New Orleans Cupertino Los Angeles Los Gatos Phoenix San Jose REGION Central Central Central Central North North North North South South South South West West West West West TOTAL_DOLLARS 32432.00 28033.00 31133.00 18475.50 26849.00 23896.50 35420.50 26848.50 30390.00 29766.00 28056.00 30878.50 29908.00 27887.00 32369.50 32813.50 68298.00 RUNNING_TOTAL 32432.00 60465.00 91598.00 110073.50 136922.50 160819.00 196239.50 223088.00 253478.00 283244.00 311300.00 342178.50 372086.50 399973.50 432343.00 465156.50 533454.50 RESET BY サブ句 RESET BY サブ句は、ORDER BY 句で参照される列で指定されているコントロール ブレークに従って、RISQL 表示関数の算出値を 0 に再初期化します。 RESET BY の機能は OLAP 関数には必要ありません。OLAP パーティションが、 OVER 句で指定することで、RESET BY の動作をエミュレートします。 構文 次に、単純な RESET BY サブ句の構文ダイアグラムを示します。 RESET BY <order_reference> クエリ式 7-59 ORDER BY 句 次に、検索項目リストの表示関数を対象とした複雑な RESET BY サブ句の構文ダイ アグラムを示します。 AND , RESET <RISQL_reference> BY <order_reference> RESET BY ORDER BY 句の直後に指定するサブ句です。 <order_reference> ORDER BY 句の列の中から、初期化の基準となる列を指定し ます。<order_reference> の値、または ORDER BY 句で指定した それ以前の列の値が変化するたびに、コントロール ブレーク が発生します。 参照できるのは、次のどちらかです。 ■ ■ <RISQL_reference> クエリの検索項目リストに指定した、最低 1 つの表示関数を参 照します。参照できるのは、次のどちらかです。 ■ ■ 7-60 SQL Reference Guide ORDER BY 句の列名。 ORDER BY 句の k 番めの列を指定する整数値。1 は ORDER BY 句の最初の列、2 は ORDER BY 句の 2 番 めの列を示します。 0 より大きく、中間リザルト テーブルの列数以下の整 数値。この整数はクエリの k 番めの列を指定し、その 列には、RISQL 表示関数が含まれている必要があり ます。 最低 1 つの RISQL 表示関数を含む検索項目リストに 指定された式を参照する列エリアス。 ORDER BY 句 例 次のクエリは、Chicago 地域で販売した製品について、1999 年の累積合計を返しま す。Prod_Total 列の値は、製品名が変わるたびにリセットされますが、Run_Total 列の値はリセットされません。 select prod_name, city, sum(dollars) as prod_dol, cume(sum(dollars)) as prod_total, cume(sum(dollars)) as run_total from sales natural join product natural join period natural join store natural join market where year = 1999 and district like 'Chicago%' group by prod_name, city order by prod_name, city reset 4 by prod_name PROD_NAME Aroma Roma Aroma Roma Cafe Au Lait Cafe Au Lait Colombiano Colombiano Demitasse Ms Demitasse Ms CITY Chicago Detroit Chicago Detroit Chicago Detroit Chicago Detroit PROD_DOL 13188.50 12820.75 17394.50 15737.50 10544.25 11104.75 16960.50 17264.00 PROD_TOTAL 13188.50 26009.25 17394.50 33132.00 10544.25 21649.00 16960.50 34224.50 RUN_TOTAL 13188.50 26009.25 43403.75 59141.25 69685.50 80790.25 97750.75 115014.75 同一製品グループ内の行の順番は不定です。 クエリ式 7-61 ORDER BY 句 WHEN 句で参照する RISQL 表示関数は、検索項目リストの RISQL 表示関数とは独 立しています。列エリアスを指定し、そのエリアスを WHEN 句が参照する場合を 除き、RESET BY 句は検索項目リストで参照する関数に動作します。次に、その例 を示します。 select city, prod_name, sum(dollars) as sales_00, rank(sum(-dollars)) as rank_00 from sales s, product p, store r, period d where s.prodkey = p.prodkey and s.classkey = p.classkey and s.storekey = r.storekey and s.perkey = d.perkey and year = 2000 and city in ('Atlanta', 'Boston', 'Phoenix') group by city, prod_name when rank_00 <= 2 order by city reset rank_00 by city; CITY Atlanta Atlanta Boston Boston Phoenix Phoenix PROD_NAME Coffee Mug Aroma Sounds Cassette Special Tips Earl Grey Earl Grey Special Tips SALES_00 55.00 136.00 538.25 556.00 436.00 714.50 RANK_00 1 2 1 2 1 2 rank(sum(-dollars)) 上記の式では、エリアス rank_00 の代わりに次の式を WHEN 句に指定すると、すべ ての都市について、2000 年の売上の下位 2 製品だけを返し、その都市における製品 の順位付けが示されます。 CITY Atlanta Atlanta 7-62 SQL Reference Guide PROD_NAME Coffee Mug Aroma Sounds Cassette SALES_00 55.00 136.00 RANK_00 1 2 ORDER BY 句 BREAK BY サブ句 BREAK BY サブ句に指定した列の値が変わるたびに、SUMMING 句に指定した列の 小計を算出します。 構文 次に BREAK BY サブ句の構文ダイアグラムを示します。 BREAK BY SUMMING <order_reference> <select_reference> , <order_reference> または、ORDER BY 句で指定したそれ以前の列の値が変化するた びに ( コントロール ブレーク )、BREAK BY サブ句は小計行をリザルト テーブルに 挿入します。この小計は、列値が変わるまで値を合計した値です。BREAK BY サブ 句は、リザルト テーブルの最終行に総計行も挿入します。 <order_reference> ORDER BY 句で参照する列を指定します。参照できるのは、次の どちらかです。 ■ ■ 列名またはエリアス。 0 より大きく、リザルト テーブルの列数以下の整数。こ の整数は、検索項目リストの k 番めの列を指定します。 SUMMING 検索項目リストの数値表現式を指定します。参照できるのは、次 <select_reference> のどちらかです。 ■ ■ ■ 列名またはエリアス。 0 より大きく、リザルト テーブルの列数以下の整数。こ の整数は、検索項目リストの k 番めの列を指定します。 <select_reference> は、小計が算出できる数値データ型で ある必要があります。 クエリ式 7-63 ORDER BY 句 使用上の注意 BREAK BY サブ句を指定した SELECT 文は、INSERT 文では使用できません。 BREAK BY サブ句は、OLAP 関数を使ったクエリで使用することができます。 BREAK BY サブ句をデータベース サーバが処理する手順は、次のようになります。 ■ ■ <order_reference> の値、または ORDER BY 句で指定したそれ以前の列値が 変化するたびに、小計行を返します。 リザルト テーブルの最終行に、総計行を返します。 小計行のフォーマットは、リザルト テーブルのほかの行と同じですが、行の値は次 のようになります。 ■ ■ BREAK BY の基準の列には、現在の小計値 ほかの列には NULL 小計行を示す識別子はありません。リザルト テーブル中の小計行を見分けるには、 <order_reference> の値、または ORDER BY 句で指定したそれ以前の列値が変化する 行を検索します。 このように、小計行を識別するものがないため、小計行とデータ行が混同される恐 れがあります。混乱を避けるために、通信ゲートウェイを通じてデータベースにア クセスするクライアント アプリケーションは小計行を検出、識別できる必要があり ます。リザルト テーブルは表示できても、フォーマットを設定できない SQL ツー ルの場合は、小計行の識別ができないことがあります。 7-64 SQL Reference Guide ORDER BY 句 例 次のクエリは、San Jose で販売した Aroma Roma の 1998 年および 1999 年の第 1 四半 期の販売を返し、それぞれの第 1 四半期の小計を算出します。リザルト セットで、 Month 列が NULL の行が小計行で、最終行が総計行です。 select month, qtr, sum(dollars) as dollars, sum(quantity) as qty from sales natural join product natural join period natural join store where prod_name like 'Aroma R%' and city like 'San J%' and year in (1998, 1999) and month in ('JAN', 'FEB', 'MAR') group by month, qtr order by qtr break by qtr summing 3, 4 MONTH JAN FEB MAR NULL JAN FEB MAR NULL NULL QTR Q1_98 Q1_98 Q1_98 Q1_98 Q1_99 Q1_99 Q1_99 Q1_99 NULL DOLLARS 1653.00 2495.50 1341.25 5489.75 1950.25 2022.75 3048.50 7021.50 12511.25 QTY 228 350 185 763 269 279 426 974 1737 クエリ式 7-65 SUPPRESS BY 句 SUPPRESS BY 句 SUPPRESS BY 句は、指定したすべての列が、NULL、空白、または 0 のいずれかで ある行をリザルト テーブルから除外します。行の除外は、クエリに指定した RISQL 表示関数または OLAP 関数を実行する直前に行われます。 構文 次に SUPPRESS BY 句の構文ダイアグラムを示します。 , SUPPRESS BY <column_reference> <column_reference> リザルト テーブルを評価するときに、NULL、空白、0 の有無 をチェックする列を指定します。SUPPRESS BY 句に指定でき るのは、検索項目リストに指定した列名だけです。参照できる ものは、次のどちらかです。 ■ ■ 相対列番号 ( 整数 ) 列名またはエリアス SUPPRESS BY サブ句では、RISQL 表示関数や OLAP 関数は参照できません。 7-66 SQL Reference Guide SUPPRESS BY 句 例 次のクエリは、Q198_Sales 列と Q198_Qty 列の両方が NULL、0、空白のいずれかで ある行を除外します。 select store_name, sum(dollars) as q198_sales, sum(quantity) as q198_qty from sales natural join store natural join period where year = 1998 and qtr = 'Q1_98' group by store_name suppress by 2, 3 STORE_NAME Beaches Brew Moroccan Moods Instant Coffee Roasters, Los Gatos Cupertino Coffee Supply Moulin Rouge Roasting The Coffee Club Q198_SALES 57893.00 44065.00 43129.50 43011.50 44280.75 44353.25 30962.25 Q198_QTY 7452 6323 6239 6114 6459 6517 3839 クエリ式 7-67 SELECT 文の処理方法 SELECT 文の処理方法 SELECT 文を実行すると、データベース サーバは次の処理を実行します。 1. 2. FROM 句に指定されたテーブルからデータ行を抽出し、各テーブルの行を 結合し、中間リザルト テーブルを生成します。 WHERE 句に指定された検索条件を満たす行を、中間リザルト テーブルか ら抽出します。WHERE 句を指定しなければ、中間リザルト テーブル全体 が残されます。 WHERE 句の制約は、サンプルの選択前ではなく選択後に適用されます。 たとえば、次のクエリは、ディメンジョン全体の 10% をサンプリングした 後で制約を適用します。 (select * from product sample 10 where prod_name = 'Aroma Roma') 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. つまり、この例ではサンプル スキャンの前にほかの演算は実行されませ ん。 リザルト テーブルを、GROUP BY 句で指定したグループに分割します。 指定したグループ ( グループ分けを指定しなければリザルト テーブル全体 ) に対し、集約関数を処理します。 HAVING 条件を指定した場合は、条件を満たすグループだけを残します。 SUPPRESS BY 句を指定した場合は、該当する行を除外します。 すべての OLAP 関数を処理します。 ORDER BY 句を指定した場合は、リザルト テーブルの行を最後の ORDER BY 句の指定順序に並べ替えます。 すべての RISQL 表示関数を処理し、RESET BY サブ句に従って値を算出し ます。 WHEN 句に指定した条件を満たす行だけを、リザルト テーブルに残しま す。 検索項目リストに DISTINCT キーワードを指定した場合は、重複行を除外 します。 BREAK BY 行を作成します。BREAK BY サブ句は ORDER BY 句の一部で す。 上記の動作が完了すると、最終的なリザルト テーブルがユーザに返されます。ただ し、上記の手順はクエリによっては行われない部分もあります。たとえば、クエリ 式が UNION 式である場合、RESET BY 句は使用できません。 SELECT 文は、最終結果または中間結果の行のサイズが行の最大幅より大きいと異 常終了します。行の最大幅については、『Administrator's Guide』を参照してくださ い。 7-68 SQL Reference Guide サブクエリ サブクエリ サブクエリは、かっこで囲んだクエリ式のことです。サブクエリは、INSERT、 DELETE、UPDATE、SELECT 文、またはほかのクエリ式に任意の深さで入れ子に することができます。サブクエリを含むステートメントや式を、サブクエリの親と いいます。通常サブクエリは、親クエリのリザルト セットと相関させてリザルト セットを導き出すのに使用します。 『SQL Self-Study Guide』には、検索項目リスト、FROM 句、WHERE 句の中で使用す るサブクエリの詳しい例が示されています。 スカラ サブクエリとテーブル サブクエリ ANSI 標準に従って、サブクエリはスカラ サブクエリ、行サブクエリ、およびテー ブル サブクエリの 3 つに分類されます。IBM Red Brick Warehouse は、スカラ サブク エリとテーブル サブクエリをサポートします。 ■ ■ スカラ サブクエリは、1 つのスカラ値 (1 つの列、行 ) を返し、検索項目リ スト、または比較演算子の引数として条件に指定します。 テーブル サブクエリは、0 以上の行で構成されるリザルト テーブルを返 し、FROM 句、または EXISTS、IN、SOME、ANY、ALL 述部の引数とし て条件に指定します。 FROM 句のサブクエリと、EXISTS 述部の引数として使用するサブクエリ は、複数の列と複数の行を返すことができます。ただし、IN、SOME、 ANY、ALL 述部の引数として使用するサブクエリの検索項目リストは、1 列に限定されます。 条件と述部の構文については、第 3 章「式と条件」を参照してください。 構文 次にサブクエリの構文ダイアグラムを示します。 ( <query_expression> ) <query_expression> 7-5 ページで説明した結合クエリ式または非結合クエリ式を指 定します。列名リストは、かっこで囲んでください。 クエリ式 7-69 スカラ サブクエリとテーブル サブクエリ ほかのクエリ式と同様に、サブクエリでは ORDER BY 句や SUPPRESS BY 句は指定 できません。 次のどちらかのサブクエリの場合、サブクエリの検索項目リストには 1 つの式しか 指定できません。 ■ ■ スカラ サブクエリ SOME、ANY、ALL、IN 述部の引数として条件に指定されるテーブル サブ クエリ クエリとサブクエリとの相関関係は、7-72 ページ「相関サブクエリ」で説明しま す。 例 通常、サブクエリは、親クエリへの入力データとなる値集合を返します。次のス テートメントでは、サブクエリがギフト製品の全製品名を抽出し、親クエリが 1999 年に San Jose で販売した同製品の売上合計を抽出します。 select prod_name, sum(dollars) as sales_99 from sales natural join product natural join period natural join store where year = 1999 and city like 'San J%' and prod_name in (select prod_name from product where pkg_type like 'Gift%') group by prod_name PROD_NAME Spice Sampler Tea Sampler Coffee Sampler Christmas Sampler 7-70 SQL Reference Guide SALES_99 1860.00 4207.00 3420.00 780.00 スカラ サブクエリとテーブル サブクエリ 前述のサブクエリは複数行を返すため、テーブル サブクエリになります。次のサブ クエリは、1 つの値しか返さないのでスカラ サブクエリになります。複数の値を返 した場合は、エラーになります。このクエリは、ギフト製品の 1999 年 12 月の売上 と、全製品の年間売上を返します。 select prod_name, sum(dollars) as sales_dec, (select sum(dollars) from sales natural join period where year = 1999 and pkg_type like 'Gift%') as sales_99 from sales natural join product natural join period where month = 'DEC' and year = 1999 and pkg_type like 'Gift%' group by prod_name PROD_NAME Tea Sampler Coffee Sampler Christmas Sampler Spice Sampler GIFT_SALES_DEC 1625.00 1140.00 1230.00 384.00 ALL_SALES_99 3279991.05 3279991.05 3279991.05 3279991.05 次に、FROM 句でサブクエリを使用する方法を示します。このサブクエリは、販売 促進活動のリストと、販売促進活動別の売上合計を返します。メイン クエリは、 「販売促進活動なし」の売上を除き、すべての販売促進活動の売上合計を返します。 select sum(promo_sales) from (select promo_desc, sum(dollars) as promo_sales from promotion natural join sales group by promo_desc) as promos where promo_desc not like 'No%' PROMO_DOLLARS 267296.40 ヒント : 『SQL Self-Study Guide』に、FROM 句のサブクエリのさらなる詳細例が記 載されています。通常は、FROM 句のサブクエリの方が項目リストの等価相関サブ クエリよりも速く実行されます。 クエリ式 7-71 相関サブクエリ 相関サブクエリ 前述の例はいずれも、1 度実行すればよいサブクエリです。相関サブクエリは、親 クエリとの相互参照があり、親クエリが新しい行を抽出するたびに、サブクエリを 強制的に実行させることができます。たとえば、次の条件を指定したサブクエリ は、親クエリが行を抽出するたびに評価されます。 parent.month = child.month Parent.Month 列が参照する値が変化すると条件そのものも変化するため、そのつど サブクエリが実行されます。 例 次のサブクエリは、1998 年と 1999 年の 1 月に San Jose Roasting Company で販売した 計り売り Lotta Latte コーヒー豆の日別売上を比較します。比較は、この製品の販売 促進活動以外の売上に限定します。 select prod_name, substr(string(date),6,5) as date, dollars as sales_99, (select dollars from store st2 natural join sales sa2 natural join product pr2 natural join class cl2 natural join period pe2 natural join promotion po2 where pe2.date = dateadd(year, -1, pe1.date) and pr2.prod_name = pr1.prod_name and cl2.class_type = cl1.class_type and st2.store_name = st1.store_name and po2.promo_desc = po1.promo_desc) as sales_98 from store st1 natural join sales sa1 natural join product pr1 natural join class cl1 natural join period pe1 natural join promotion po1 where year = 1999 and month = 'JAN' and prod_name = 'Lotta Latte' and class_type = 'Bulk_beans' and promo_desc = 'No promotion' and store_name = 'San Jose Roasting Company' PROD_NAME Lotta Latte Lotta Latte Lotta Latte Lotta Latte 7-72 SQL Reference Guide DATE 01-03 01-06 01-09 01-18 SALES_99 368.00 256.00 168.00 96.00 SALES_98 NULL 248.00 NULL NULL 相関サブクエリ このメイン クエリは 1999 年 1 月の日別売上を抽出し、サブクエリは ( 年度以外は同 じ制約を使用して ) 1998 年の対応する売上を抽出します。このクエリが行う動作は 次のとおりです。 1. 2. 3. 親クエリは、Date 列の値が 1999 年 1 月である行を抽出します。この行に は、製品、製品分類名、日付、店舗名のデータが格納されています。 サブクエリは、1998 年 1 月について、対応する行を抽出します。 1999 年および 1998 年について、対応するデータを格納する 1 行がリザル ト テーブルに作成されます。 列名の修飾 前述の例では、メイン クエリとサブクエリはいずれも、参照先テーブルに相関名を 割り当てます。たとえば、Store テーブルには、メイン クエリで st1 という相関名 が割り当てられ、サブクエリで st2 という相関名が割り当てられます。これらの相 関名は、それぞれの相関条件に指定する列名を修飾するために使用されます。 pe2.date = dateadd(year, -1, pe1.date) pr2.prod_name = pr1.prod_name cl2.class_type = cl1.class_type st2.store_name = st1.store_name po2.promo_desc = po1.promo_desc サブクエリが親クエリで指定された列を参照する場合は、すべての列名を修飾する ことをお勧めします。次のセクションで説明するように、この操作によってあいま いさがなくなり、列名が正しく解決されます。列名を修飾しない理由が特にない限 り、修飾を付けるようにしてください。 列名の解決 データベース サーバは、サブクエリの検索項目リストに指定された列エリアスを検 索してから、サブクエリの FROM 句に指定されたテーブルを検索することで、修飾 されていない列参照名を解決します。 ■ ■ ■ ■ 列名が検索項目リストで見つかった場合は、検索は正常に終了します。 1 つのテーブルで列名が見つかった場合は、検索は正常に終了します。 列名が複数のテーブルで見つかった場合は、データベース サーバはエラー を返します。 列名が見つからない場合は、データベース サーバは親クエリの検索項目リ ストに指定された列エリアスを検索してから、親クエリの FROM 句を検索 します。1 つのテーブルで列名が見つかった場合は、検索は正常に終了し ます。列名が見つからず、親クエリがほかの親クエリの子クエリである場 合は、参照先列名が見つかるまで検索が続けられます。 クエリ式 7-73 相関サブクエリ 入れ子にされたサブクエリで列名が明示的に修飾されていない場合は、この列名の 解決手順が原因で、クエリが予期せぬ結果を返すことがあります。 データベース サーバは、FROM 句に指定されたテーブルを検索して、修飾された列 名の参照を解決します。この場合、最も似た修飾子を使ったクエリ指定が使用され ます。 この列名の解決規則は、あらゆるサブクエリに適用されます。 例 列名を解決する例を示します。この例では、col_a 列は table_1 テーブルに存在 しますが、table_2 テーブルには存在しません。サブクエリで参照されている col_a 列を特定するために、データベース サーバは table_2 を先に検索します。 col_a は table_2 には存在しないため、親クエリに指定されたテーブルが検索さ れます。col_a 列は、親クエリの FROM 句に指定された table_1 で見つかり、ク エリは正常に処理されます。 select col_a from table_1 where col_a in (select col_a from table_2) ただし、col_a が table_1 と tabel_2 の両方に存在する場合は、上記のサブクエ リは、col_a の列参照名が次のように修飾されていない限り、table_2 から col_a を取得します。 (select table_1.col_a from table_2) 重要 : 前出の例は、名前の解決方法を示すために紹介しましたが、このような列 名とテーブル名の付け方はお勧めできません。 行グループ 検索項目リストに集約関数を使用した親クエリが相関サブクエリも使用する場合 は、親クエリの GROUP BY 句に相関列を指定してください。これは、次の例に示す ように、親クエリの GROUP BY 句が、親クエリの検索項目リストの列名とサブクエ リの相関列名を使用することを意味します。 この規則は、親クエリの WHERE 句で使用する相関サブクエリには適用されませ ん。 7-74 SQL Reference Guide 相関サブクエリ 例 次のクエリは、1998 年および 1999 年の第 1 四半期に San Jose で販売した Lotta Latte の月間売上を比較します。 select pr1.prod_name, pe1.month, sum(sa1.dollars) as sales_99, (select sum(sa2.dollars) from store st2 natural join sales sa2 natural join product pr2 natural join period pe2 where pe2.month = pe1.month and pe2.year = pe1.year-1 and pr2.prod_name = pr1.prod_name and st2.city = st1.city) as sales_98 from store st1 natural join sales sa1 natural join product pr1 natural join period pe1 where year = 1999 and qtr = 'Q1_99' and prod_name = 'Lotta Latte' and city = 'San Jose' group by pe1.month, pe1.year, pr1.prod_name, st1.city PROD_NAME Lotta Latte Lotta Latte Lotta Latte MONTH JAN FEB MAR SALES_99 1611.00 3162.50 2561.50 SALES_98 3195.00 4239.50 2980.50 次のサブクエリの相関条件は、親クエリの GROUP BY 句で指定されている列を参照 します。 pe2.month = pe1.month pe2.year = pe1.year-1 pr2.prod_name = pr1.prod_name st2.city = st1.city クエリ式 7-75 第8章 文と この章について . 拡張機能 . . . . . . . . . . . . . . . . . . . 8-5 ALTER DATABASE . . . . . . . . . . . . . . . . . . . 8-6 ALTER INDEX . . . . . . . . . . . . . . . . . . . . 8-14 ALTER MACRO . . . . . . . . . . . . . . . . . . . . 8-17 ALTER ROLE . . . . . . . . . . . . . . . . . . . . 8-19 ALTER SEGMENT . . . . . . . . . . . . . ALTER SEGMENT - ATTACH 句 . . . . . . . RANGE LIKE SEGMENT 句 . . . . . . . ALTER SEGMENT - その他の句 . . . . . . . DETACH、OFFLINE、ONLINE、CLEAR 句 . VERIFY 句と FORCE 句 . . . . . . . . SEGMENT BY 句 . . . . . . . . . . . RANGE 句 . . . . . . . . . . . . . OPTICAL 句と RENAME 句 . . . . . . . CHANGE MAXSIZE 句 . . . . . . . . . ADD STORAGE 指定 . . . . . . . . . DROP STORAGE 句と RELEASE STORAGE 句 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-20 8-21 8-28 8-30 8-32 8-43 8-44 8-45 8-49 8-49 8-52 8-54 ALTER SYNONYM . . . . . . . . . . . . . . . . . . . . 8-55 ALTER SYSTEM . . . . . . . ユーザ操作の制御 . . . . ユーザ優先順位の変更 . . . ログ記録設定の変更 . . . アカウンティング設定の変更 パフォーマンス モニタの変更 性能統計のクリア設定の変更 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-57 8-61 8-63 8-65 8-67 8-68 8-70 ALTER TABLE 列の削除 . 列の変更 . 制約の追加 制約の削除 制約の変更 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-72 8-81 8-82 8-86 8-89 8-90 ALTER USER . . . . . . . . . . . . . . . . . . . . . 8-93 ALTER VIEW . . . . . . . . . . . . . . . . . . . . . 8-94 CHECK INDEX . . . . . . . . . . . . . . . . . . . . 8-96 CHECK TABLE . . . . . . . . . . . . . . . . . . . . 8-99 CREATE HIERARCHY . . . . . . . . . . . . . . . . . . 8-102 CREATE INDEX . . . . . . . . . . . . . . インデックス指定 . . . . . . . . . . . . セグメント定義 . . . . . . . . . . . . セグメント範囲指定 . . . . . . . . . . . B-TREE インデックスと TARGET インデックス WITH FILLFACTOR n . . . . . . . . . . DOMAIN SIZE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . CREATE MACRO 8-105 8-109 8-114 8-118 8-118 8-124 8-125 . . . . . . . . . . . . . . . . . . . 8-127 . . . . . . . . . . . . . . . . . . . 8-131 CREATE SEGMENT . . . . . . . . . . . . . . . . . . 8-133 CREATE SYNONYM . . . . . . . . . . . . . . . . . . 8-136 CREATE ROLE . CREATE TABLE . . . . . . . . . . . . . . . 列の定義 . . . . . . . . . . . . . . . . プライマリ キー参照 . . . . . . . . . . . . フォーリン キー参照 . . . . . . . . . . . . プライマリ キーとフォーリン キー制約名 . . . . セグメント定義 . . . . . . . . . . . . . 8-2 SQL Reference Guide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8-137 8-139 8-144 8-146 8-149 8-150 CREATE TEMPORARY TABLE . . . . . . . . . . . . . . . 8-160 CREATE VIEW . . . . . . . . . . . . . . . . . . . . . 8-163 DELETE . . . . . . . . . . . . . . . . . . . . . 8-171 DROP HIERARCHY . . . . . . . . . . . . . . . . . . . 8-176 DROP INDEX . . . . . . . . . . . . . . . . . . . . . . . 8-177 DROP MACRO . . . . . . . . . . . . . . . . . . . . . 8-180 DROP ROLE . . . . . . . . . . . . . . . . . . . . . 8-181 DROP SEGMENT . . . . . . . . . . . . . . . . . . . . 8-182 DROP SYNONYM . . . . . . . . . . . . . . . . . . . . 8-184 DROP TABLE . . . . . . . . . . . . . . . . . . . . . 8-185 DROP VIEW . . . . . . . . . . . . . . . . . . . . . . 8-187 EXPAND . . . . . . . . . . . . . . . . . . . . . . . 8-188 EXPLAIN . . . . . . . . . . . . . . . . . . . . . . . 8-189 EXPORT . . . . . . . . . . . . . . . . . . . . . . . 8-190 GRANT ( 権限とロール ) . . . . . . . . . . . . . . . . . 8-201 GRANT CONNECT . . . . . . . . . . . . . . . . . . . 8-207 GRANT ( 特権 ) . . . . . . . . . . . . . . . . . . . . 8-211 . . . . . . . . . . . . . . . . . . . . 8-214 LOCK ( テーブルのロック ) . . . . . . . . . . . . . . . . 8-221 LOCK DATABASE . . . . . . . . . . . . . . . . . . 8-222 REVOKE ( 権限とロール ) . . . . . . . . . . . . . . . . . 8-224 REVOKE CONNECT . . . . . . . . . . . . . . . . . . . 8-226 REVOKE ( 特権 ) . . . . . . . . . . . . . . . . . . . . 8-227 SELECT . . . . . . . . . . . . . . . . . . . . 8-229 . . . . . . . . . . . . . 8-229 INSERT . . . . . . . . . UNLOCK ( テーブルのロック解除 ) SQL 文と RISQL 拡張機能 8-3 UNLOCK DATABASE . . . . . . . . . . . . . . . . . . 8-230 UPDATE . . . . . . . . . . . . . . . . . 8-231 . . 8-4 SQL Reference Guide . . . この章について 構造化問い合わせ言語 (SQL) には、データを制御、定義、操作する各ステートメン トがあります。この章は、各 SQL 文と、SQL を拡張した RISQL 拡張機能をアルファ ベット順に説明したリファレンスです。 この章では、次の操作を行うステートメントについて説明します。 ■ ■ ■ ■ ■ ■ テーブル、インデックス、セグメントの変更 データベース オブジェクトの作成と削除 データベース行の変更 データベース アクセス権とテーブル アクセス権の付与と取消 テーブルとデータベースのロックと解除 データベースとユーザ操作の制御 SET 文は、第 9 章「SET 文」を参照してください。 SELECT 文の詳細については、第 7 章「クエリ式」を参照してください。 SQL 文と RISQL 拡張機能 8-5 ALTER DATABASE ALTER DATABASE ALTER DATABASE 文には、次の目的があります。 ■ ■ ■ ■ ■ ■ ■ ■ ■ セグメント内にバージョン ログを作成します。 バージョン ログを削除します。 バージョニング トランザクションを開始、終了します。 データベースのバキューム クリーナ デーモン / スレッドを開始、終了しま す。 バージョン ログを整理します。 後続のクエリで読み込むリビジョンの番号を固定します。 クエリが最新リビジョンを読み込めるように、リビジョン番号を解除しま す。 データベース セッションを終了します。 セグメントをバックアップ セグメントとしてマークします。 1 つのデータベースにつき 1 つのセグメントだけが、バージョン ログとして指定で きます。バージョン ログが定義されていない場合は、バージョニング トランザク ションは実行できません。 1 つのデータベースにつき 1 つのセグメントだけが、バックアップ セグメントとし て指定できます。バックアップ セグメントが存在しない場合、TMU バックアップ 操作および復元操作は実行できません。 アクセス権 ALTER DATABASE 文を実行するユーザは、次の中で少なくとも 1 つの条件を満た している必要があります。 ■ ■ ■ 8-6 SQL Reference Guide DBA システム ロールのメンバーであること 明示的に付与されるかユーザが作成したロールのメンバーであることによ り、ALTER_SYSTEM 権限を持っていること ( バージョン ログを実行する 場合 ) 明示的に付与されるかユーザが作成したロールのメンバーであることによ り、BACKUP_DATABASE および RESTORE_DATABASE 権限を持っている こと ALTER DATABASE 構文 次に ALTER DATABASE 文の構文ダイアグラムを示します。 <version_log_specification> ALTER DATABASE DROP VERSION LOG START VERSIONING STOP VERSIONING START CLEANING STOP CLEANING CLEAN VERSION LOG REMOVE DAMAGED SEGMENTS FREEZE QUERY REVISION UNFREEZE QUERY REVISION TERMINATE DATABASE <database_logical_name> CREATE BACKUP DATA IN <segment_name> DROP BACKUP DATA SQL 文と RISQL 拡張機能 8-7 ALTER DATABASE <version_log_ specification> CREATE VERSION LOG 文を指定します。指定した未使 用のセグメント内のディスク領域を使って、データベー スのバージョン ログを作成します。この説明の後に、構 文ダイアグラムを示します。 1 つのデータベースにつき 1 つのバージョン ログだけを 作成できます。データベースのバージョニング トランザ クションを有効にするには、まずバージョン ログを作成 する必要があります。バージョン ログ用のすべてのディ スク領域が CREATE VERSION LOG 文によって割り当て られるため、操作に時間がかることがあります。操作が 完了するまでに、セグメント内のすべての PSU が MAXSIZE 値まで展開されます。 CREATE VERSION LOG 操作の実行中、ほかのユーザは データベースに接続できません。操作開始後は、すべて の接続が拒否されます。 CREATE VERSION LOG の実行中にエラーが発生した場 合は、バージョン ログを削除してから、操作を再実行し てください。 バージョン ログの作成後、バージョニング (ALTER DATABASE START VERSIONING) を開始しないと、デー タベースはバージョニング トランザクションを受け付け ません。 バージョン ログを作成すると、データベースのバキュー ム クリーナ デーモン / スレッドが開始されます。 次にバージョン ログ指定の構文ダイアグラムを示しま す。このダイアグラムでは、 MAXREVISIONS は、指定された時間内でバージョン ロ グ内に作成可能なデータベースのバージョンの最大値で す。デフォルトは 5000 です。 CREATE VERSION LOG IN <segment_name> MAXREVISIONS <number> 8-8 SQL Reference Guide ALTER DATABASE DROP VERSION LOG バキューム クリーナを終了し、バージョニングの共有リ ソースを解放して、バージョン ログを格納したセグメント を切り離します。セグメントが使用していたディスク領域 は解放されません。この動作は、PSU を 初期値まで縮小す る DROP TABLE 文とは異なります。バージョニングがアク ティブで、バキューム クリーナ デーモン / スレッドが未処 理のアクティブなデータがバージョン ログに存在する場合 は、操作は実行されずエラーが発生します。 バージョン ログの削除を行うには、ALTER DATABASE STOP VERSIONING 文でバージョニングを停止し、バ キューム クリーナがバージョン ログのクリーニングを完了 するまで待機する必要があります。DST_DATABASES テー ブルの CURRENT_REVISION 列の値が、 LATEST_MERGED_REVISION 列の値と等しくなったとき、 バージョン ログは空になります。UPGRADE 操作の実行前 には、バージョン ログを削除する必要があります。 DROP VERSION LOG 操作の間、ほかのユーザはこのデータ ベースに接続できません。 START VERSIONING データベースで新しいバージョニング トランザクションを 処理可能にします。バージョニングが明示的に停止された 場合、またはデータベースにバージョン ログを作成した直 後のみ、バージョニングを起動する必要があります。この ステートメントを実行するには、バージョン ログが存在し ている必要があります。 SQL 文と RISQL 拡張機能 8-9 ALTER DATABASE STOP VERSIONING データベースが新しいバージョニング トランザクションを 受け入れるのを停止します。ALTER DATABASE STOP VERSIONING 操作を実行すると、データベースのバージョ ン情報を変更する新しいトランザクションは、自動的にブ ロッキング トランザクションにはならず、エラーが発生し て失敗します。 IBM Red Brick Warehouse の再起動後も、データベースの バージョニング状態は保持されます。したがって、データ ベースのバージョニングが動作中に rbwapid デーモン (UNIX システムの場合 ) または IBM Red Brick Warehouse サービス (Windows システムの場合 ) が停止された場合、 デーモンまたはサービスを再起動すると同時にバージョニ ングは再起動されます。同様に、rbwapid デーモンまたは IBM Red Brick Warehouse サービスが停止中にデータベース のバージョニングが停止された場合、デーモンまたはサー ビスを再起動してもそのデータベースのバージョニングは 停止されたままとなります。 START CLEANING データベースに対するバキューム クリーナ デーモンまたは スレッドが停止している場合に、これを開始します。 STOP CLEANING データベースに対するバキューム クリーナ デーモンまたは スレッドが動作している場合に、これを停止します。バ キューム クリーナが停止中に rbwapid デーモン (UNIX シス テムの場合 ) または IBM Red Brick Warehouse サービス (Windows システムの場合 ) が停止された場合、そのデーモ ンまたはサービスを再起動するとバキューム クリーナは自 動的に再起動されます。 8-10 SQL Reference Guide ALTER DATABASE CLEAN VERSION LOG バージョン ログの内容をフラッシュするように、バキュー ム クリーナに指示します。ALTER DATABASE CLEAN VERSION LOG はブロッキング文です。つまりバキューム クリーナがバージョン ログにあるすべてのブロックをフ ラッシュするまで、セッションへアクセスできません。 データベースのバージョニングが動作中の場合、バージョ ン ログのフラッシュ完了時に、制御がユーザに返ります。 データベースのバージョニングが動作中でない場合、バー ジョン ログは空のため、すぐに制御がユーザに返ります。 REMOVE DAMAGED SEGMENTS オプションは、バージョ ン ログの中の破損したセグメントについてのブロックを廃 棄します。これによってデータベースが不整合な状態にな るので、破損セグメントを修復できない場合に限ってこの オプションを使用することをお勧めします。 このオプションは、重大なことが発生した後、たとえば、 バックアップからデータベースを復元する前にバージョン を空にする場合などに削除するためのものです。 REMOVE DAMAGED SEGMENTS オプションを指定しな かった場合、削除する必要がある破損セグメントが発見さ れたところでコマンドが停止します。したがって、バー ジョン ログは削除されないままです。この場合、CLEAN VERSION LOG 文により次のメッセージが返されます。 The statement cannot complete because segment <segment_name> is damaged. ALTER DATABASE FREEZE QUERY REVISION 文によって クエリ リビジョンが固定されている場合、バキューム ク リーナが、バージョン ログを完全にディスクにフラッシュ できるようになるのは、クエリ リビジョンが解除されてか らです。したがって、CLEAN 文の実行時にクエリ リビ ジョンが固定されている場合、クエリ リビジョンが解除さ れ、バキューム クリーナによってデータベースのバージョ ン ログが完全にフラッシュされてから、セッションの制御 がユーザに返されます。 重要 : ユーザがバージョン ログをチェックしてログが削除されているかどうかを 確認することをお勧めします。これには、DST_DATABASES テーブルの CURRENT_REVISION 列と LATEST_MERGED_ REVISION 列へのクエリを実行します。この 2 つの列が一致している場合は、バー ジョン ログが削除されています。 SQL 文と RISQL 拡張機能 8-11 ALTER DATABASE FREEZE QUERY REVISION 現在のリビジョン番号を読み込み、デフォルトの読み取り リビジョン番号として設定します。セッション内で変更し ない限り、この番号が後続のすべてのクエリで使用されま す。ステートメントが正しく完了すると、クエリ リビジョ ンとして選択したリビジョン番号が表示されます。 クエリ リビジョンがすでに固定されていた場合は、ステー トメントが中止され、エラー メッセージが表示されます。 UNFREEZE QUERY REVISION ALTER DATABASE FREEZE QUERY REVISION 文の実行結 果を取り消します。後続のクエリはすべて最新のリビジョ ンを読み込み、システムに加えられたその他の制限もすべ て取り消されます。 クエリ リビジョンが固定されていなかった場合は、ステー トメントが中止され、エラー メッセージが表示されます。 TERMINATE データベース セッションを終了し、そのデータベースのす べての共有リソースを解放します。ほかのユーザが接続し ている場合、このステートメントはエラーにより失敗しま す。 DATABASE <database_logical_ name> ALTER DATABASE TERMINATE 文を ADMIN データベース から実行する場合は、共有リソースを解放するデータベー スを特定する DATABASE <database_logical_name> 句を指定 する必要があります。 CREATE BACKUP DATA IN <segment_name> 既存の未使用セグメントをバックアップ セグメントとして マークします。TMU バックアップ操作および復元操作につ いては、『Table Management Utility Reference Guide』を参照 してください。バックアップ セグメントは通常 CREATE SEGMENT 文によって作成され、複数の PSU を使用できま す。 DROP BACKUP DATA データベースからバックアップ データを削除し、バック アップ セグメントを通常のセグメントに変更します。セグ メント自身は削除されません。このコマンドが実行された 後、TMU バックアップ操作および復元操作は実行できなく なります。ALTER DATABASE コマンドを有効にするため に、バックアップ セグメントをオフラインにする必要はあ りません。データベースからバックアップ セグメントを削 除するために DROP SEGMENT 文を使用することはできま せん。 8-12 SQL Reference Guide ALTER DATABASE 使用上の注意 バージョン ログが作成されたセグメント内の PSU の展開には、時間がかかること があります。このセグメントの PSU に対する MAXSIZE パラメータは、バージョン ログに直接割り当てられるディスク領域の量を指定するため、このパラメータの設 定には注意してください。 バージョン ログのロケーションが、性能に影響を与えることがあります。バージョ ン ログの使用量が多い場合、たとえば、LOAD 操作によってデータベース内の多数 のブロックを変更する場合などは、バージョン ログへのアクセスによってシステム 性能が低下することがあります。したがって、バージョン ログは RAID レベル 0 や レベル 1 に設定された格納領域などの高性能格納領域に配置するのが最適です。最 良性能を確保するには、データベース ファイルが格納されているデバイスから独立 したデバイスにバージョン ログを配置することをお勧めします。高性能な Write 操 作が必要とされるため、RAID レベルが大きなデバイスには配置しないことをお勧 めします。 バージョン ログにはデータベース内の複数のセグメントからデータが格納されるた め、バージョン ログを損失した場合は、データベース全体をバックアップから復元 する必要が生じる可能性があります。この問題を防止するため、バージョン ログ は、RAID レベル 0 などの信頼性の高い格納装置上に格納する必要があります。 例 次にセグメントを作成し、バージョン ログとして指定する SQL 文を示します。 1. セグメントを作成します。 create segment versionlog_seg storage '/test/vl1' maxsize 1024, storage '/test/vl2' maxsize 1024, storage '/test/vl3' maxsize 1024, storage '/test/vl4' maxsize 1024; 2. 作成したセグメントをバージョン ログとして指定します。 alter database create version log in versionlog_seg; 3. このステートメントはすべての物理領域をバージョン ログとして割り当て るため、時間がかかることがあります。 データベースのバージョニングを開始します。 alter database start versioning; SQL 文と RISQL 拡張機能 8-13 ALTER INDEX ALTER INDEX ALTER INDEX 文には、3 つの目的があります。 ■ ■ ■ インデックスのフィル ファクタの変更。フィル ファクタの設定値は、 データのロード時のインデックス ノードの使用率を指定します。 TARGET インデックスのオプションであるドメイン サイズの変更。 TARGET インデックスの格納方法、つまり 「表現形式」は、ドメイン サ イズに基づいて選択されます。ドメイン サイズを指定しないと、適切な表 現形式をサーバが自動的に選択します。 インデックスの内容を説明したコメントの付加。コメントは、 RBW_INDEXES システム テーブルに格納されます。 アクセス権 インデックスを変更するユーザは、次の中で少なくとも 1 つの条件を満たしている 必要があります。 ■ ■ ■ ■ DBA システム ロールのメンバーであること 明示的に付与されるかユーザが作成したロールのメンバーであることによ り、ALTER_ANY 権限を持っていること RESOURCE システム ロールのメンバーで、かつインデックスの作成者で あること インデックスの作成者であり、明示的に付与されるかユーザが作成した ロールのメンバーであることにより、ALTER_OWN 権限を持っていること 構文 次に ALTER INDEX 文の構文ダイアグラムを示します。 ALTER INDEX <index_name> <integer> CHANGE FILLFACTOR SMALL CHANGE DOMAIN SIZE MEDIUM LARGE COMMENT '<character_string>' NULL 8-14 SQL Reference Guide ALTER INDEX <index_name> 変更するインデックスの名前を指定します。フィル ファクタとコ メントは、ユーザが作成したインデックスとシステムが生成した インデックスの両方を変更できます。ドメイン サイズは、ユーザ が作成した TARGET インデックスだけに適用されます。 ユーザが作成したインデックスのフィル ファクタ、ドメイン サ イズ、およびコメントを変更する場合は、CREATE INDEX 文に指 定したインデックス名を指定してください。システムが生成した インデックスのフィル ファクタやコメントを変更する場合は、シ ステムが生成したインデックス名を指定します。 システムが生成したインデックス名は、RBW_INDEXES テーブ ルを確認するか、次の命名規則に従って指定します。 ■ プライマリ キー インデックスの名前は、インデックス の対象となるテーブル名に文字列 _PK_IDX を付加した ものになります。たとえば、Market テーブルのプライ マリ キー インデックスの名前は、次のようになります。 ■ インデックス名は 128 文字以下です。テーブル名と文字 列を組み合わせたインデックス名が 128 文字を超える場 合は、テーブル名が切り捨てられます。 MARKET_PK_IDX インデックス名は一意である必要があります。テーブル名と文字 列を組み合わせたインデックス名が一意でない場合は、001 ∼ 999 の数字がインデックス名の末尾に追加され、重複しない名前 が付けられます。 CHANGE FILLFACTOR <integer> データを初めてテーブルにロードするときや、REORG 操作でイ ンデックスを再作成するときに、新規インデックス ノードを充填 する割合を指定します。その後、行が挿入されていくと、容量の 100% までインデックス ノードが充填され、インデックス ノード が 100% を超すと、ノードの分割が生じます。 <integer> の有効範囲は 1 ∼ 100 ですが、フィル ファクタは一般に 50% 以上に設定します。 データのロード、データの再編成、最適化オプションの設定、 フィル ファクタの設定については、『Administrator's Guide』を参 照してください。 SQL 文と RISQL 拡張機能 8-15 ALTER INDEX ユーザ定義の TARGET インデックスの DOMAIN を指定します。 ほかの種類のインデックスのドメイン サイズを設定、変更するこ とはできません。ドメイン サイズの選択 ( オプション ) の詳細に ついては、8-105 ページ「CREATE INDEX」を参照してください。 CHANGE DOMAIN SIZE SMALL、 MEDIUM、 LARGE TARGET インデックスのドメイン サイズは変更できますが、ドメ イン サイズの指定を削除、つまりデフォルト ドメインの TARGET インデックスに変更することはできません。 SIZE キーワードはオプションです。 インデックスの内容を説明したコメント文字列を割り当てます。 コメントは、RBW_INDEXES システム テーブルに格納されます。 256 バイトまで入力できます。データベースはこのコメント テキ ストを無視します。 COMMENT NULL を指定すると、コメント文字列が NULL に置き換えられま す。 使用上の注意 フィル ファクタ インデックスの初期フィル ファクタは、インデックスの作成時に設定されます。 ユーザが作成したインデックスのフィル ファクタについては、CREATE INDEX...WITH FILLFACTOR 文で設定します。 システムが自動的に生成するプライマリ キー インデックスのフィル ファクタは、 rbw.config ファイルの FILLFACTOR PI パラメータに指定したデフォルト値に自動的 に設定されます。初期デフォルトは 100% です。 システムが生成したインデックスのフィル ファクタを指定する方法は、2 種類で す。 ■ ■ テーブルを作成する前に、rbw.config ファイルのデフォルトを必要に応じ て変更します。 テーブルを作成した後に、システムが生成したインデックス名を使用して ALTER INDEX 文でインデックスを変更します。 ドメイン サイズが SMALL の TARGET インデックスは、フィル ファクタを 100% ( デフォルト ) にしてください。ドメイン サイズが MEDIUM または LARGE のイン デックスは、行の更新や削除の予定がない場合は 100% に設定してください。更新 や削除を行う場合は、100% より小さな値に変更してください。 8-16 SQL Reference Guide ALTER MACRO ドメイン サイズ TARGET インデックスのドメイン サイズを変更する ALTER INDEX 文は、REORG 操作が実行されるまでインデックスが無効であるとマークします。したがって、あ るインデックスのドメインを変更する場合、そのドメインをすぐに再作成する予定 のときには、単にインデックスを削除して再作成する方がよい場合もあります。 REORG 操作を使うと、複数のインデックスを一括して再作成することができます。 この方法では、インデックスを 1 つずつドロップして再作成するよりもリソースが 節約できます。無効なインデックスを持つ列を検索条件にしない限り、そのイン デックスを持つテーブルにも引き続きクエリを実行できるため、REORG 操作は必 要に応じて延期することができます。 例 次のステートメントは、Market テーブルのプライマリ キー インデックスのフィル ファクタを 75% に設定します。 alter index market_pk_idx change fillfactor 75; 次のステートメントは、TARGET インデックスのドメイン サイズを変更します。 alter index tgt_idx1 change domain large; ALTER MACRO ALTER MACRO 文は、マクロにその内容を説明したコメントを付けます。コメント は、RBW_MACROS システム テーブルに格納されます。 アクセス権 マクロを変更するユーザは、次の中で少なくとも 1 つの条件を満たしている必要が あります。 ■ ■ ■ ■ DBA システム ロールのメンバーであること 明示的に付与されるかユーザが作成したロールのメンバーであることによ り、ALTER_ANY 権限を持っていること RESOURCE システム ロールのメンバーで、かつマクロの作成者であるこ と マクロの作成者であり、明示的に付与されるかユーザが作成したロールの メンバーであることにより、ALTER_OWN 権限を持っていること SQL 文と RISQL 拡張機能 8-17 ALTER MACRO 構文 次に ALTER MACRO 文の構文ダイアグラムを示します。 MACRO ALTER <macro_name> TEMPORARY PUBLIC COMMENT '<character_string>' NULL TEMPORARY、 PUBLIC 変更するマクロのタイプを指定します。TEMPORARY と PUBLIC のどちらも指定しないと、プライベート マクロが変更 されます。 <macro_name> 変更するマクロの名前を指定します。 COMMENT マクロの内容を説明したコメント文字列を割り当てます。コメ ントは、RBW_MACROS システム テーブルに格納されます。 256 バイトまで入力できます。コメントのテキストは、データ ベース サーバが使用するものではありません。 NULL を指定すると、コメント文字列が NULL に置き換えられま す。 8-18 SQL Reference Guide ALTER ROLE ALTER ROLE ALTER ROLE 文は、ユーザが作成したロールにコメントを付けます。コメントは、 RBW_ROLES システム テーブルおよび RBW_USERAUTH システム テーブルに格 納されます。 アクセス権 ロールを変更するユーザは、次の中で少なくとも 1 つの条件を満たしている必要が あります。 ■ ■ DBA システム ロールのメンバーであること ROLE_MANAGEMENT タスク権限を持っていること 構文 次に ALTER ROLE 文の構文ダイアグラムを示します。 ALTER ROLE <role_name> COMMENT '<character_string>' NULL <role_name> 変更するロールの名前を指定します。 COMMENT ロールの内容を説明したコメント文字列を割り当てます。コメント は、RBW_ROLES システム テーブルおよび RBW_USERAUTH シ ステム テーブルに格納されます。256 バイトまで入力できます。 データベースはこのコメント テキストを無視します。 NULL を指定すると、コメント文字列が NULL に置き換えられます。 SQL 文と RISQL 拡張機能 8-19 ALTER SEGMENT ALTER SEGMENT ALTER SEGMENT 文はセグメントを変更するものです。次の目的に使用できます。 ■ ■ ■ ■ テーブルやインデックスへのセグメントのアタッチ テーブルやインデックスからのセグメントの切り離し セグメントの検証と、物理的な検査 ( セグメントの PSU に不良がなければ、 正常とマーク ) セグメントの修正 ❑ セグメント化の基準となる列 ( セグメント化の基準列 ) の指定 ❑ セグメントの範囲指定の変更 ❑ セグメントの指定範囲の変更と移動 ❑ セグメントのオフライン化 ❑ セグメントのオンライン化 ❑ セグメントのすべてのデータのクリア ❑ セグメント名の変更 ❑ セグメントにおける PSU の最大サイズの変更 ❑ セグメントにおける PSU の拡張サイズの変更 ❑ セグメントにおける PSU のロケーション、パスまたはその両方の変更 ❑ セグメント全体のロケーションの移行 ❑ RBW_SEGMENTS システム テーブルへのセグメントのコメントの格 納 ❑ セグメントへの新規 PSU の追加 ❑ セグメント末尾の未使用領域の解放 ❑ セグメント末尾からの空の PSU の削除 バージョン ログ セグメントの詳細については、8-6 ページ「ALTER DATABASE」を 参照してください。 セグメントのアタッチについては、8-21 ページ「ALTER SEGMENT - ATTACH 句」 を参照してください。セグメントの切り離し、検証、その他の変更については、 8-30 ページ「ALTER SEGMENT - その他の句」を参照してください。 8-20 SQL Reference Guide ALTER SEGMENT - ATTACH 句 アクセス権 ALTER SEGMENT 文を実行するユーザは、次の中で少なくとも 1 つの条件を満たし ている必要があります。 ■ ■ ■ ■ DBA システム ロールのメンバーであること 明示的に付与されるかユーザが作成したロールのメンバーであることによ り、ALTER_ANY 権限を持っていること RESOURCE システム ロールのメンバーで、かつセグメントおよび関連 テーブルの作成者であること 明示的に付与されるかユーザが作成したロールのメンバーであることによ り、ALTER_OWN 権限を持っていること、かつセグメントおよび関連テー ブルの作成者であること ALTER SEGMENT - ATTACH 句 ここでは、テーブルやインデックスにセグメントをアタッチする方法を説明しま す。セグメントの切り離し、検証、その他の変更は、8-31 ページを参照してくださ い。 構文 次に、テーブルやインデックスにセグメントをアタッチする ALTER SEGMENT 文 の構文ダイアグラムを示します。 <segment_name> ALTER SEGMENT ATTACH TO RANGE TABLE <table_name> INDEX <index_name> ( <literal:literal> ) INVALIDATE ( <rownum:rownum> ) ) : <segname> ( <segname> <rownum> LIKE SEGMENT <rownum> <referencing_table_segname> SQL 文と RISQL 拡張機能 8-21 ALTER SEGMENT - ATTACH 句 <segment_name> テーブルやインデックスにアタッチする既存セグメントの名前を指 定します。アタッチするセグメントは、CREATE SEGMENT 文で作 成します。 ATTACH TO TABLE、 INDEX テーブルとインデックスのどちらにセグメントをアタッチするかを 指定します。セグメントをアタッチするには、セグメント化の基準 となる列の値の範囲を指定してください。この列は、CREATE TABLE 文、CREATE INDEX 文、ALTER SEGMENT 文で指定します。 STAR インデックス、ローカルの B-TREE インデックス、TARGET インデックスでは、参照されるテーブル セグメントの指定に従って 同一範囲にセグメントをアタッチできます。RANGE LIKE SEGMENT 句の詳細については、8-28 ページを参照してください。 ローカル インデックスの詳細については、8-116 ページを参照して ください。 重要 : ローカル インデックスを持つテーブルにデータ セグメント をアタッチした後、テーブルを更新する前に各ローカル インデック スに対応するセグメントをアタッチするか、ローカル インデックス を選択するクエリ プランを実行する必要があります。または各ロー カル インデックスに CHECK INDEX を実行する必要があります。 ATTACH 操作が完了したセグメントは、自動的にオンラインになり ます。必要に応じて、アタッチした状態でオフラインにすることも できます。 テーブルにセグメントをアタッチする場合は、次の制限に注意して ください。 ■ ■ ■ 8-22 SQL Reference Guide テーブルの MAXSEGMENTS に設定された値を超える数の セグメントをアタッチすることはできません。 テーブルにセグメントをアタッチする前に、セグメント化 の基準列を 1 つ指定する必要があります。 ハッシュ値によって複数セグメントに分散されているデー タが格納されているテーブルには、セグメントをアタッチ することはできません。ハッシュによる格納については、 8-153 ページを参照してください。 ALTER SEGMENT - ATTACH 句 RANGE 新たにアタッチしたセグメントに格納する、セグメント化の基準列 の値の範囲を指定します。 このオプションを使用する場合は、次の制限に注意してください。 ■ ■ ■ セグメントは、テーブルやインデックスの既存セグメント の範囲内にアタッチする必要があります。このため、新規 セグメントの範囲は、一方を既存セグメントの境界と一致 させ、他方をそのセグメントの境界を超えない値に指定す る必要があります。 テーブルにアタッチする場合、ATTACH 操作では新しいセ グメントにデータを移動させることができないため、テー ブルにすでに格納されているデータ値を含む範囲を指定す ることはできません。 セグメントをインデックスにアタッチする場合、セグメン トの範囲がインデックス内の既存値と重複するときは、 INVALIDATE キーワードが指定されているかどうかによっ て動作が異なります。INVALIDATE が指定されている場合 は操作が続行され、インデックスは無効になります。指定 されていない場合は操作が拒否され、インデックスは変更 されません。INVALIDATE キーワードの詳細については、 8-25 ページを参照してください。 テーブルやインデックスにアタッチするセグメントが 1 つの場合、 そのセグメントの範囲は (<min:max>) になります。2 つ目のセグメ ントをアタッチする場合は、ALTER SEGMENT 文の RANGE 指定の 一方に <min> か <max> を設定してください。 <literal:literal> リテラルの範囲は、テーブル、B-TREE インデックス、TARGET イ ンデックスのセグメントに使用する必要があります。セグメント範 囲を指定しない場合は、エラー メッセージが返されます。 範囲の値は、セグメント化の基準列のデータ型に準じます。たとえ ば、この列が INTEGER の場合は、-2,147,483,648 ∼ 2,147,483,647 の 値で範囲を指定します。文字データ型の場合は、文字で範囲を指定 してください。 指定した範囲が既存の行、または範囲と重なっていない場合、セグ メントが追加されます。 SQL 文と RISQL 拡張機能 8-23 ALTER SEGMENT - ATTACH 句 <rownum: rownum>、 <segname rownum: segname rownum> STAR インデックスのセグメント範囲には、列の値ではなく、セグ メント化の基準列が参照するテーブルの行データ ID を指定します。 参照先テーブルが 1 つのセグメントに格納されている場合は、 <rownum:rownum> フォーマットを使用する必要があります。 <rownum> はそのセグメント内の行を示します。 参照先テーブルが複数のセグメントにある場合は、 <segname rownum:segname rownum> フォーマットを使用する必要が あります。<segname> は参照先テーブルにアタッチされるセグメン トを示します。<rownum> はオプションです。<rownum> を省略する と、名前付きセグメントの最小行データ ID (<min>) とみなされま す。 <rownum> の範囲は、0 から MAXROWS PER SEGMENT の値未満で す。STAR インデックスの範囲を明示的に指定する場合は、次のク エリを実行し、セグメント化の基準列を格納しているテーブルの行 データ ID とセグメント名を確認してください。 select primary_key, rbw_segname, rbw_rownum from table_name 上記のクエリは、テーブルの全行を返します。テーブルの行データ が多い場合は、リザルト セットが非常に大きくなります。 STAR インデックスのセグメントでは、RANGE 指定はオプションで す。このオプションを省略すると、STAR インデックスの総セグメ ント数と、参照先テーブルに設定された MAXSEGMENTS の値およ び MAXROWS PER SEGMENT の値に基づいて範囲が自動的に設定 されます。この場合、REORG 文によって STAR インデックスを再 編成する必要があります。REORG 操作については、『Table Management Utility Reference Guide』を参照してください。 STAR インデックスのセグメント化については、『Administrator's Guide』を参照してください。 8-24 SQL Reference Guide ALTER SEGMENT - ATTACH 句 INVALIDATE 指定された範囲がインデックス内の既存の値と重なっている場合、 そのインデックスが無効とマークされるように指定します。 セグメントをテーブルまたはローカル インデックスにアタッチする 場合、INVALIDATE キーワードは使用できません。 指定したインデックス セグメントの範囲がほかのインデックス セ グメントの既存値と重複する場合、新しい境界を作成して値を別の セグメントへ移動する必要があります。ATTACH 操作でデータを移 動することはできないため、動作は INVALIDATE キーワードを指定 したかどうかによって異なります。 ■ ■ INVALIDATE キーワードを指定した場合、セグメントが追 加されてインデックスが無効になり、インデックスの再作 成が必要になります。インデックスを再作成するには TMU REORG 文を使用します。 INVALIDATE キーワードを指定しなかった場合、動作が失 敗し、セグメントは追加されず、インデックスは無効にな りません。 STAR インデックスにアタッチするときに範囲を指定しなかった場 合、動作は INVALIDATE キーワードを指定したかどうかによって異 なります。 ■ ■ INVALIDATE キーワードを指定した場合、インデックス セ グメントが既存のセグメントのリストの末尾にアタッチさ れてインデックスが無効となり、再作成が必要となりま す。ATTACH 操作はすべてのセグメントの範囲を再計算 し、それぞれのセグメントに対して均等に範囲を割り当て ます。 INVALIDATE キーワードを指定しなかった場合、動作が失 敗し、セグメントは追加されず、インデックスは無効にな りません。 重要 : INVALIDATE キーワードを指定しない限り、ALTER SEGMENT 文によって インデックスが無効になることはありません。 ヒント : RANGE 指定では、コロン (:) の左側に MIN、右側に MAX と入力して、そ れぞれ最小値と最大値を指定することもできます。たとえば、次のように範囲を指 定できます。 (min:literal) (literal:max) (min:rownum) (segname rownum:max) SQL 文と RISQL 拡張機能 8-25 ALTER SEGMENT - ATTACH 句 例 Mktkey 列の値を基準として、4 つのセグメントにデータを格納している Sales テー ブルがあるとします。 create table sales ... data in (data1, data2, data3, data4) segment by values of (mktkey) ranges (min:500, 500:1000, 1000:3000, 3000:max) Sales テーブルに既存のセグメント data5 をアタッチするには、範囲を次のように 指定します。 alter segment data5 attach to table sales range (1000:1500) 上記のステートメントは、次の条件が満たされるため有効です。 ■ ■ ■ 新しい範囲の最小値 (1000) は、data2 セグメントと data3 セグメントの 既存境界である 新しい範囲の最大値 (1500) は、上限を 3000 とする data3 セグメントの範 囲内である Sales テーブルには、Mktkey 列の値が 1000 ∼ 1499 となっている行がない Sales テーブルの新しいセグメント範囲は、図 8-1 のようになります。 図 8-1 data1 data2 data5 data3 data4 min:500 500:1000 1000:1500 1500:3000 3000:max Sales テーブルの 新しいセグメント 範囲 Market テーブルを参照し、複数セグメントに格納されている Sales テーブルに、 STAR インデックスが作成されているとします。 create star index sales_star on sales (mktkey) in (ix_seg1, ix_seg2, ix_seg3, ix_seg4) segment by references of (mktkey) ranges (min:tab_seg1 500, tab_seg1 500:tab_seg2 1000, tab_seg2 1000:tab_seg3 3000, tab_seg3 3000:max) 別のセグメント (ix_seg5) をインデックスにアタッチするには、次の ALTER SEGMENT 文を実行します。 alter segment ix_seg5 attach to index sales_star range (tab_seg2 1000:tab_seg3 1500) 8-26 SQL Reference Guide ALTER SEGMENT - ATTACH 句 上記のステートメントは、次の条件が満たされるため有効です。 ■ ■ ■ 複数セグメントのテーブルを参照する STAR インデックスに必要な <segname rownum> フォーマットが範囲指定で使用されている 新しい範囲の最小値 (tab_seg2 1000) は、ix_seg2 セグメントと ix_seg3 セグメントの既存境界である 新しい範囲の最大値 (tab_seg3 1500) は、上限を 3000 とする ix_seg3 セグメントの範囲内である 古いセグメントから新しいセグメントに移動する必要があるデータが存在する場合 でも、このステートメントは有効です。このようなデータが存在する場合、イン デックスは無効とマークされ、TMU の REORG 文で再編成する必要があります。 例 セグメント化の基準列を指定し、名前付きセグメント (seg_sales1) が 1 つだけ Sales テーブルにアタッチされているとします。セグメントの範囲は、(<min:max>) です。seg_sales2 セグメントを Sales テーブルにアタッチする場合は、次のどちらか の ALTER SEGMENT 文を使用します。 alter segment seg_sales2 attach to table sales range (500:max) alter segment seg_sales2 attach to table sales range (min:500) 新しい範囲は、(min:500, 500:max) になります。 デフォルト セグメントへのセグメントのアタッチ例 この例では、セグメント化の基準列を指定せずに Sales テーブルが作成されたとし ます。すべてのデータが seg_sales1 セグメントに格納されています。 次の ALTER SEGMENT 文は、Perkey 列を基準として Sales テーブルをセグメント化 することを指定します。seg_sales1 セグメントの範囲は、(<min:max>) と暗黙的に設 定されます。 alter segment seg_sales1 of table sales segment by perkey これでセグメントの範囲が指定され、Perkey 列の値に基づいて新規セグメントを Sales テーブルに追加することができます。 alter segment seg_sales2 attach to table sales range (500:max) SQL 文と RISQL 拡張機能 8-27 ALTER SEGMENT - ATTACH 句 Sales テーブルの新しいセグメント範囲は、図 8-2 のようになります。 図 8-2 seg_sales1 seg_sales2 min:500 500:max Sales テーブルの セグメント範囲 RANGE LIKE SEGMENT 句 RANGE LIKE SEGMENT STAR インデックス、ローカルの B-TREE、TARGET インデッ クス セグメントを、指定したテーブル セグメントと同じ範囲 にアタッチします。 この句を使用する場合は、次の制限に注意してください。 ■ ■ セグメントを B-TREE または TARGET インデックス にアタッチする場合、そのインデックスはローカル インデックスである必要があります。ローカル イン デックスでは、インデックスとなる列がファクト テーブルのセグメント化の基準列でなくてもかまい ません。 セグメントを STAR インデックスにアタッチする場 合は次のようになります。 ■ 参照元 ( ファクト ) テーブルのセグメント範囲で は、先頭のディメンジョン テーブルに少なくと も 1 つの列が存在する必要があります。 ■ ファクト テーブルのセグメント化の基準列はイン デックス キー内の先頭列である必要があります。 ■ 範囲がインデックス内の既存値と重複する場合 は、ATTACH 操作の実行時に INVALIDATE キー ワードを指定してインデックスを無効にしない 限り、操作は拒否されます。INVALIDATE オプ ションの詳細については、8-25 ページを参照し てください。 RANGE LIKE SEGMENT 句を使用した時間ごとのデータ保守 の詳細については、『Administrator's Guide』を参照してくださ い。 <table_ segname> 8-28 SQL Reference Guide インデックスのテーブル内の既存のセグメント名を指定しま す。RANGE LIKE SEGMENT 句を使用してインデックス セグ メントをアタッチする場合は、このセグメントと同じ範囲に なります。 ALTER SEGMENT - ATTACH 句 例 Perkey 列の値と、そのデータと同じセグメント単位の STAR インデックス、および ローカルの TARGET インデックスを基準として、Sales テーブルを作成するとしま す。 create table sales ( perkey integer not null, ... constraint sales_date_fkc foreign key (perkey) references period (perkey), ... data in (daily_data1, daily_data2) segment by values of (perkey) ranges (min:415, 415:max) maxsegments 10 create star index sales_star_idx on sales (sales_date_fkc, sales_product_fkc, sales_store_fkc, sales_promo_fkc) in (sales_star_seg1, sales_star_seg2) segment like data; create target index prod_per_sales_ix on sales (promokey) in (sales_target_ix1, sales_target_ix2) segment local; この Sales テーブルにセグメントをアタッチするとします。ここで daily_data3、 sales_star_seg3、sales_target_ix3 の各セグメントが作成され、STAR インデックスの 先頭のディメンジョン テーブル (Period テーブル ) が新しい範囲の値であらかじめ ロードされていることを想定します。この例の詳細については、『Administrator's Guide』のデータ ウェアハウスの保守に関する章を参照してください。 データと同じ範囲でセグメントを Sales テーブルおよび STAR インデックス セグメ ントにアタッチするには、次のステートメントを実行します。 alter segment daily_data3 attach to table sales range (830:max); alter segment sales_star_seg3 attach to index sales_star_idx range like segment daily_data3; alter segment sales_target_ix3 attach to index prod_per_sales_ix range like segment daily_data3; 上記のステートメントは、次の条件が満たされるため有効です。 ■ ■ ■ ■ 新しい範囲の最小値 (830) は sales_data2 セグメントの範囲内にある。 新しい範囲の最大値 (max) は sales_data2 セグメントの既存境界である。 Sales テーブルには、Perkey 列の値が 830 ∼ max となっている行がない。 STAR インデックスの先頭のディメンジョン テーブル (Period テーブル ) に 少なくとも 1 つの列がある。 SQL 文と RISQL 拡張機能 8-29 ALTER SEGMENT - その他の句 ■ ■ STAR インデックスのセグメント化の基準列 (sales_date_fkc) はインデック ス キーの先頭列 (Perkey) である。 TARGET インデックスはローカル インデックスである。したがって、イン デックス付き列は Sales テーブルのセグメント化の基準列である必要はあ りません。 ALTER SEGMENT - その他の句 このセクションでは、アタッチされたセグメントまたはテーブルやインデックスに アタッチされていないセグメントを修正する方法を説明します。セグメントをア タッチする方法は、8-21 ページ「ALTER SEGMENT - ATTACH 句」を参照してくだ さい。 バージョン ログ セグメントに、次の句は使用できません。 ■ ■ ■ ■ ■ ■ ■ ■ DETACH SEGMENT BY RANGE OFFLINE ONLINE CLEAR DROP LAST STORAGE RELEASE STORAGE ALTER SEGMENT CLEAR 文を実行すると、事前計算ビューに対して集約保守が実 行されることがあります。集約保守の詳細については、『IBM Red Brick Vista User’s Guide』を参照してください。 バージョン ログ セグメントの詳細については、8-6 ページ「ALTER DATABASE」を 参照してください。 8-30 SQL Reference Guide ALTER SEGMENT - その他の句 構文 次に、セグメントを修正する ALTER SEGMENT 文の構文ダイアグラムを示します。 <segment_name> ALTER SEGMENT OF TABLE <table_name> INDEX <index_name> <detach_offline_online_clear_specification> VERIFY FORCE INTACT <segmenting _column> SEGMENT BY RANGE ( <rangeval:rangeval> ) MOVE INVALIDATE ON OPTICAL OFF RENAME <new_seg_name> <psu_sequence_id> CHANGE MAXSIZE <psu_sequence_id> CHANGE EXTENDSIZE <psu_sequence_id> CHANGE PATH MIGRATE TO TO <max_size> TO TO <increment> '<new_filename>' '<dir_path>' DROPPING PSUS KEEPING COMMENT '<character_string>' NULL <add_storage_specification> RELEASE STORAGE DROP LAST STORAGE SQL 文と RISQL 拡張機能 8-31 ALTER SEGMENT - その他の句 <segment_name> 修正するセグメントの名前を指定します。 <table_name> セグメントをアタッチしているテーブルの名前を指定します。 テーブルにアタッチされたセグメントを修正する場合は、この句 を指定してください。テーブルにアタッチされていないセグメン トの場合は、指定しないでください。 <index_name> セグメントがアタッチされているインデックスの名前を指定しま す。インデックスにアタッチされたセグメントを修正する場合は、 この句を指定してください。インデックスにアタッチされていな いセグメントの場合は、指定しないでください。 DETACH、OFFLINE、ONLINE、CLEAR 句 次に DETACH、OFFLINE、ONLINE、CLEAR 句の構文ダイアグラムを示します。 DETACH <override_fullindexcheck_specification> INVALIDATE OFFLINE OVERRIDE REFCHECK ONLINE CLEAR <override_fullindexcheck_specification> OVERRIDE REFCHECK 8-32 SQL Reference Guide ALTER SEGMENT - その他の句 DETACH 指定したテーブルまたはインデックスからセグメントを削除しま す。 空でないテーブル セグメントを削除する場合、列データと対応す るインデックス データが最初に削除されます。その後、テーブル セグメントが削除されます。 テーブルにローカル インデックスがある場合、テーブル セグメン トが削除されるときには Red Brick サーバにより対応するローカル インデックス セグメントがすぐにクリアされます。ローカル イン デックスがない場合は、OVERRIDE FULLINDEXCHECK 句を使用 してインデックス データを削除する処理速度を高めることができ ます。OVERRIDE FULLINDEXCHECK 句の詳細については、 8-35 ページを参照してください。 テーブルとローカル インデックス セグメントは同じである必要が あります。1 つ以上のローカル インデックスを持つテーブルから セグメントを削除する場合、対応するローカル インデックス セグ メントを削除してから次の操作を行います。 ■ ■ ■ DELETE、INSERT、UPDATE 文を使用したテーブルの修 正 ローカル インデックスを使用したクエリ プランによる テーブルへのクエリの実行 ローカル インデックスでの CHECK INDEX の実行 対応するテーブル セグメントを削除しない限り、ローカル イン デックスを切り離すことはできません。 空でないインデックス セグメントを切り離す場合、DETACH 操作 の実行時に INVALIDATE キーワードを指定してインデックスを無 効にしない限り、操作は失敗します。INVALIDATE キーワードの 詳細については、8-36 ページを参照してください。 デフォルト セグメントを切り離した場合は、セグメントのデータ とセグメント自体の両方が削除されます。名前付きセグメントを 切り離した場合は、セグメントのデータは削除されますが、セグ メント自体は削除されません。名前付きセグメントは個別に ALTER SEGMENT 文を使用して、テーブルまたはインデックスに 再アタッチすることができます。 SQL 文と RISQL 拡張機能 8-33 ALTER SEGMENT - その他の句 切り離したセグメントの範囲は、テーブルやインデックスのほか のセグメントの範囲に併合されます。切り離したセグメントの下 限に隣接するセグメント範囲が、切り離したセグメントの領域ま で拡張されます。 セグメントを切り離す場合は、次の制限に注意してください。 ■ ■ ■ ■ ■ ■ 8-34 SQL Reference Guide 切り離すセグメントは、オフライン モードに設定してお く必要があります。 テーブルまたはインデックスがセグメント化されていな い場合は、エラーになります。 ローカル インデックスが存在する場合は、テーブル セグ メントを切り離してから対応するローカル インデックス セグメントを切り離す必要があります。 テーブル セグメントと対応するインデックス セグメント を切り離すには、ALTER SEGMENT DETACH 文をそれぞ れ実行する必要があります。 DETACH 句で切り離せるのは、複数のセグメントを持つ テーブルやインデックスにアタッチされているセグメン トだけです。テーブルやインデックスにアタッチされて いないセグメントや、1 つのセグメントからなるテーブ ルやインデックスのセグメントを切り離すことはできま せん。DETACH 句では、複数のセグメントを持つテーブ ルやインデックスのデフォルト セグメントを切り離すこ とができます。 STAR インデックスの範囲指定で指定されているセグメ ントは、参照先テーブルから切り離すことはできません。 これは、そのセグメントを切り離すと、範囲指定が無効 になってしまうためです。この場合、無効になる STAR インデックスを示すエラー メッセージが表示されます。 ALTER SEGMENT - その他の句 <override_ fullindexcheck _specification> テーブルからデータ セグメントを切り離したりクリアするとき、 テーブル セグメントのインデックス エントリを削除します。これ によって実行時間が短縮されます。インデックス セグメントが テーブル セグメントとまったく同じようにセグメント化されてい る場合、この句を使用して対応するインデックス セグメントに名 前を付け、インデックスをスキャンせずにインデックス セグメン トをクリアしてインデックス エントリを削除できます。このオプ ションを使用すると、10 億行を超えるような大きなファクト テー ブルから、データ セグメントを切り離すような場合に時間が節約 できます。 Red Brick サーバは、インデックス セグメントとデータ セグメント の対応を完全にチェックし、対応していない場合はエラー メッ セージを返します。 この省略オプションは、ローカル インデックス セグメントでは無 効です。切り離しやクリア操作では、対応するローカル インデッ クス セグメントのみを自動的にクリアし、インデックス内のほか のセグメントはスキャンしません。ローカル インデックスの詳細 については、8-116 ページを参照してください。 次に OVERRIDE FULLINDEXCHECK 文の構文ダイアグラムを示します。 OVERRIDE FULLINDEXCHECK ON SEGMENTS ( <index_segment> ) , SQL 文と RISQL 拡張機能 8-35 ALTER SEGMENT - その他の句 <index_segment> データ セグメントと同じ列を基準として、セグメント化されている インデックス セグメントを指定します。この句はすべての種類の非 ローカル インデックスに使用できます。 データとインデックス セグメントの対応を検証した後、DETACH ま たは CLEAR 操作によって次のことが行われます。 ■ ■ 指定したデータ セグメントのクリア このオプションで指定したインデックス セグメントのクリア 検証プロセスが失敗すると、操作が無効であることを警告するメッ セージが表示されます。正しいインデックス セグメント名を指定 し、ステートメントを再実行してください。 <index_segment> で参照されるセグメントを持たないインデックスに ついては、インデックス全体がスキャンされます。 INVALIDATE 切り離すセグメントが空でない場合、そのインデックスが無効と マークされるように指定します。 空でないインデックス セグメントを切り離すと、テーブル内の列と 対応するエントリがインデックス内に存在しない可能性がありま す。対応するエントリがない場合、インデックスとテーブルの整合 性が維持できなくなるため、インデックスを再作成する必要があり ます。このため、インデックスは無効とマークされます。 ■ ■ INVALIDATE キーワードを指定した場合、セグメントが追 加され、インデックスが無効になります。無効となったイ ンデックスは、TMU REORG 文を使用して再編成する必要 があります。 INVALIDATE キーワードを指定せず、インデックス セグメ ントが空でない場合、DETACH 操作は失敗し、インデック スは無効になりません。 インデックス セグメントが DETACH 操作以前に無効であった場合、 INVALIDATE キーワードは無視され、セグメントは切り離されてイ ンデックスは無効のままとなります。 8-36 SQL Reference Guide ALTER SEGMENT - その他の句 セグメントの切り離し例 テーブルの範囲が図 8-3 のようになっているとします。 図 8-3 seg1 seg2 seg3 seg4 min:100 100:200 200:400 400:max テーブルの セグメント範囲 seg3 を切り離すと、新しい範囲は図 8-4 のようになります。 図 8-4 seg1 seg2 seg4 min:100 100:400 400:max seg3 が 切り離された セグメント範囲 切り離したセグメントが範囲の下限のセグメントであった場合、下限から 2 番めの セグメントがその領域まで拡張されます。前ページの範囲から seg1 を切り離すと、 seg2 が拡張され、新しい範囲が図 8-5 のようになります。 図 8-5 seg2 seg3 seg4 min:200 200:400 400:max 下限の セグメントが 切り離された セグメント範囲 OVERRIDE FULLINDEXCHECK オプションを使用した DETACH の例 OVERRIDE FULLINDEXCHECK オプションを使用して、Sales テーブルから daily_data1 セグメントを切り離す時間を短縮する例を示します。 alter segment DAILY_DATA1 of table sales offline; alter segment daily_data1 of table sales detach override fullindexcheck on segments (sales_star_seg1, sales_pk1); 重要 : 切り離すセグメントは、オフライン モードに設定しておく必要があります。 SQL 文と RISQL 拡張機能 8-37 ALTER SEGMENT - その他の句 この OVERRIDE FULLINDEXCHECK オプションを使用して、次のように DETACH 操作を高速化します。 ■ ■ sales_star_seg1 インデックスと sales_pk1 インデックスは daily_data1 と同 じ列を基準としてセグメント化されているため、完全インデックス スキャ ンを省略する sales_star インデックスと sales_pk インデックス内のほかのセグメントを検 索しない Sales テーブルにローカル インデックスがある場合、それらは daily_data1 セグメン トと同じ基準でセグメント化されているため、DETACH 操作でそのローカル イン デックスの完全スキャンは自動的に省略されます。ローカル インデックスの詳細に ついては、8-116 ページを参照してください。 INVALIDATE キーワードを使用した DETACH の例 次の例では、daily_data1 テーブル セグメントに対応するインデックス セグメント を切り離します。上記の例で対応するデータ セグメントから切り離されたインデッ クス セグメントは空です。したがって、次の DETACH 文で INVALIDATE キーワー ドは必要ありません。 alter segment sales_star_seg1 of index sales_star_idx offline; alter segment sales_star_seg1 of index sales_star_idx detach; 次の例では、インデックス セグメントに対応するテーブル セグメント daily_data2 が切り離されていないためインデックス セグメントは空でなく、INVALIDATE キー ワードを使用して切り離す必要があります。インデックス セグメントが切り離され ている場合、テーブル内の列と対応するエントリがインデックス内にない可能性が あります。対応するエントリがない場合、インデックスとテーブルの整合性が維持 できなくなるため、インデックスを再作成する必要があります。 alter segment sales_star_seg2 of index sales_star_idx offline; alter segment sales_star_seg2 of index sales_star_idx detach invalidate; Red Brick サーバからは、この DETACH 操作によりインデックス sales_star_idx が無 効にされたという警告メッセージが返されます。 8-38 SQL Reference Guide ALTER SEGMENT - その他の句 ATTACH および DETACH でセグメント範囲を変更する例 この例では、Budget テーブルが 2 つのセグメントに分割され、Mktkey 列がセグメ ント化の基準列であるとします。セグメントの範囲は図 8-6 のようになります。 図 8-6 Budget テーブルの セグメント範囲 seg1 seg2 min:750 750:max 次の ALTER SEGMENT 文は、Budget テーブルに第 3 のセグメントをアタッチしま す。このステートメントが有効なのは、Mktkey 列の値が 1500 ∼最大許容値の範囲 内にある行が Budget テーブルに存在しない場合だけです。 alter segment seg3 attach to table budget range (1500:max) seg2 の上限が 1500 になり、Budget テーブルの新しいセグメント範囲は図 8-7 のよ うになります。 図 8-7 seg1 seg2 seg3 min:750 750:1500 1500:max 新規セグメントの アタッチ後の セグメント範囲 seg2 がオフライン モードに設定され、Budget テーブルから切り離されます。seg2 に格納されているすべての行がデータベースから削除されます。 alter segment seg2 of table budget offline alter segment seg2 of table budget detach Budget テーブルの新しいセグメント範囲は、図 8-8 のようになります。 図 8-8 seg1 seg3 min:1500 1500:max seg2 を OFFLINE に 設定した後の セグメント範囲 SQL 文と RISQL 拡張機能 8-39 ALTER SEGMENT - その他の句 OFFLINE 句 OFFLINE 指定したセグメントをオフライン モードに設定し、データべースが そのセグメントを一時的に使用できないようにします。管理者はオ フラインのセグメントに対し新規データのロード、記憶媒体の障害 やデータ消失によるデータの復元、DETACH によるテーブルやイン デックスからの切り離しができます。 テーブルに関連した行データやインデックス データを格納するセグ メントがオフライン モードになった場合、そのテーブルは部分的に しか利用できません。ユーザは、部分的に利用可能と設定された テーブルのオンライン セグメントにアクセスできます。部分的に利 用可能なテーブルに対するクエリの動作は、rbw.config ファイルの OPTION PARTIAL_AVAILABILITY パラメータか、SET PARTIAL AVAILABILITY 文で設定します。rbw.config ファイルについては、 『Administrator's Guide』を参照してください。SET PARTIAL AVAILABILITY 文については、9-41 ページを参照してください。 OFFLINE 句は、複数の名前付きセグメントからなるテーブルやイン デックスにアタッチされたセグメントにしか使用できません。次の セグメントはオフラインにできません。 ■ ■ ■ OVERRIDE REFCHECK テーブルやインデックスにアタッチされていないセグメント テーブルまたはインデックスに単独で存在するセグメント テーブルやインデックスの最後のオンライン セグメント ほかのテーブルが参照するテーブルにアタッチされているセグメン トをオフラインにするかクリアする ALTER SEGMENT 文を実行する とき、参照整合性チェックを省略します。 セグメントと参照元テーブルの両方にデータが格納されていても、 セグメントのクリアやオフライン化によって参照整合性違反が発生 しない場合は、このオプションを使用して動作を強制的に続行させ ることができます。 警告 : OVERRIDE REFCHECK オプションの動作を正しく理解し、注意して使用し てください。参照先テーブルのセグメントをクリアするとき、参照元テーブルの値 のいずれかがクリアするセグメントの値に対応している場合は、参照整合性が維持 できなくなります。 セグメントと参照元テーブルの両方にデータが格納されている場合、このオプショ ンを使用しないと参照整合性違反が発生することがあります。その結果、ALTER SEGMENT 文が中止され、エラー メッセージが表示されます。セグメントまたは参 照元テーブルが空の場合は、参照整合性違反は発生しないためステートメントは正 常に終了します。 8-40 SQL Reference Guide ALTER SEGMENT - その他の句 例 1998 ∼ 2000 年の売上データを格納している Sales ファクト テーブルが、 period_seg1 と period_seg2 という 2 つのセグメントにデータを格納している Period テーブルを参照する場合、どちらかのセグメントをオフラインにするとエ ラー メッセージが表示されます。period_seg2 セグメントに格納されているデー タが 1997 ∼ 1999 年のデータだけであれば、参照整合性チェックを省略してセグメ ントをオフラインにしてもかまいません。 alter segment period_seg2 of table period offline override refcheck セグメントをオフラインにする例 次の ALTER SEGMENT 文は、STAR インデックスのセグメントをオフラインにしま す。 alter segment default_segment_7 of index sales_star_idx offline 重要 : テーブルやインデックスが 1 つのセグメントに格納されている場合は、オフ ラインにできません。 ONLINE 句と CLEAR 句 ONLINE オフライン セグメントをオンライン モードに設定し、データ べースがそのセグメントを使用できるようにします。セグメント をオンライン モードに設定する前に、セグメントが破損してい ないかどうかが検証されます。破損している場合は、セグメント はオフライン モードのままにされ、破損原因が報告されます。 テーブルの行データ セグメントとインデックス セグメントがす べてオンラインになると、テーブル全体がデータベースで利用可 能になります。 オフライン ロードの終了後にオフライン セグメントをオンライ ン モードに設定する前に、TMU の SYNCH コマンドでセグメン トを同期させておく必要があります。TMU の SYNCH コマンド については、『Table Management Utility Reference Guide』を参照し てください。 SQL 文と RISQL 拡張機能 8-41 ALTER SEGMENT - その他の句 CLEAR データ セグメントの全行と、それらの行を参照するインデックス エントリを削除します。セグメントのクリアは、効率的にセグメ ントのデータを大量に削除します。データの大量削除は、オフラ イン セグメントへのロードを取り消す場合にも使用できます。 データ セグメントからすべての行を削除する操作は、比較的短 時間で済みますが、対応するインデックス エントリの削除は非 常に時間がかかります。特に、インデックス エントリの総数に 比べて関連するエントリの数が少ない場合にこのことがいえま す。このため CLEAR は、行数および対応するインデックス エン トリ数が多いセグメントを空にする場合に使用してください。行 数の少ないセグメントを空にする場合は、適切な制約を指定した DELETE 文を使用してください。 CLEAR 句は、複数の名前付きセグメントに格納されたテーブル にアタッチしているオンライン セグメントとオフライン セグメ ントのクリアに使用できます。インデックス セグメント、ア タッチされていないセグメント、1 つのセグメントからなるテー ブルのセグメントはクリアできません。 ALTER SEGMENT CLEAR 文を実行すると、事前計算ビューに対 して集約保守が実行されることがあります。集約保守の詳細につ いては、 『IBM Red Brick Vista User’s Guide』を参照してください。 <override_ fullindexcheck_ specification> インデックス全体の参照整合性チェックを省略し、指定したテー ブルからデータ セグメントをクリアします。詳細については、 8-35 ページを参照してください。 OVERRIDE REFCHECK ほかのテーブルが参照するテーブルに所属するセグメントをクリ アする ALTER SEGMENT 文を実行する場合に、参照整合性 チェックを省略します。詳細については、8-40 ページを参照し てください。 8-42 SQL Reference Guide ALTER SEGMENT - その他の句 VERIFY 句と FORCE 句 VERIFY 指定したセグメントの PSU を検証し、セグメントが物理的に完全で あるかを確認します。 セグメントが破損している理由が不明な場合は、VERIFY 句を使っ て原因を調べてください。破損の修復後 VERIFY を再実行し、セグ メントの PSU が完全であれば、セグメントは正常とマークされま す。VERIFY を実行すると、RBW_SEGMENTS テーブルの INTACT 列が更新され、セグメントが正常とマークされます。 セグメントの PSU を 1 つずつ検証するプロセスは、時間がかかるこ とがあります。 ONLINE 句を使用すると、VERIFY を実行した場合と同じ検証タス クが実行され、同じ情報が返されます。こうしたタスクが実行され るほか、その後でセグメントがオンラインになります。ONLINE 句 はオフラインのセグメントのみに使用できます。オンラインのセグ メントの検証には、VERIFY 句を使用してください。 破損したセグメントの修復については、『Administrator's Guide』を参 照してください。 FORCE INTACT 物理的損傷の有無をチェックする PSU の検証を省略し、 RBW_SEGMENTS テーブルの INTACT 列を更新して、利用できな いセグメントを正常とマークします。FORCE INTACT 句と VERIFY 句のどちらを使用してもセグメントをマークすることができますが、 FORCE INTACT は PSU の検証を行わないため、VERIFY の場合より も比較的処理時間が短くなります。 PSU が損傷している可能性がある場合は、VERIFY を実行してくだ さい。FORCE INTACT は、データの整合性に影響のない軽度のエ ラーのためにセグメントが利用不能になった場合に限り使用してく ださい。 SQL 文と RISQL 拡張機能 8-43 ALTER SEGMENT - その他の句 SEGMENT BY 句 SEGMENT BY <segmenting_ column> 1 つのセグメントに格納され、セグメント化の基準列が設定されて いないテーブルやインデックスに基準列を指定します。テーブルの セグメントの列には、NULL は使用できません。インデックスでは、 インデックス キーに指定された最初の列をセグメント化の基準とな る列に指定します。 STAR インデックス キーの最初の列が複数列のフォーリン キーの場 合は、SEGMENT BY 指定におけるインデックス キーの最初の構成要 素を識別するために、フォーリン キー制約名を指定する必要があり ます。 セグメント化の基準列をテーブルやインデックスに指定すると、こ の列の値または行データ ID に基づいて、セグメントの範囲 (<min:max>) が暗黙的に設定されます。そのテーブルやインデックス には、ほかのセグメントをアタッチしたり、その範囲を暗黙的に マージすることができます。 この句は、すでにセグメント化基準列が割り当てられているテーブ ルまたはインデックスのセグメント化基準列を変更したり、ハッ シュ値によってセグメント化されているテーブルにセグメント化基 準列を割り当てるのには使用できません。 8-44 SQL Reference Guide ALTER SEGMENT - その他の句 RANGE 句 RANGE <rangeval: rangeval> セグメントの値または行データ ID の範囲を指定します。 ■ ■ テーブル、B-TREE インデックス、TARGET インデックスに アタッチするセグメントの範囲は、この列の値に基づいて 指定されます。その場合、rangeval はリテラル値である必要 があります。 STAR インデックスのセグメントの範囲は、この列が参照す るテーブルの行データ ID ( セグメント名、行データ ID) に 基づいて指定されます。先頭の行データ ID は 0 です。 STAR インデックスの範囲指定には、8-24 ページで説明し たフォーマットのいずれかを使用してください。 セグメント範囲の値については、CREATE TABLE 文と CREATE INDEX 文の説明を参照してください。 テーブルやインデックスのセグメント範囲に不連続や重複を生じさ せたり、既存の行データやインデックス データをほかのセグメント に移動させる必要があるような範囲の修正はできません。 たとえば、既存セグメントの範囲が (1000:2000) の場合、(1000:2500) に変更すると、そのセグメントの上位にあるセグメントの下限が 2500 に自動的に調整されますが、2000 ∼ 2500 の範囲に既存データ がある場合は、ALTER SEGMENT 文はエラーになります。 RANGE 句は、複数の名前付きセグメントからなるテーブルやイン デックスにアタッチされたセグメントにしか使用できません。次の 目的には使用できません。 ■ ■ ■ テーブルやインデックスにアタッチされていないセグメン トの範囲の変更 1 つのセグメントからなるテーブルやインデックスのセグ メント範囲の変更 ハッシュによってセグメント化されているテーブルへの範 囲の追加 SQL 文と RISQL 拡張機能 8-45 ALTER SEGMENT - その他の句 MOVE セグメントをテーブルやインデックスから切り離したり再アタッチ したりせずに、範囲を移動します。 指定した範囲が既存の行、または範囲と重なっていない場合、セグ メントは切り離され、指定した範囲に再アタッチされます。 RANGE MOVE 句を使用する場合は、次の制限に注意してください。 ■ ■ ■ ■ ■ ■ 8-46 SQL Reference Guide セグメント範囲を指定しなかった場合、インデックスがセ グメント化されていないときは、エラー メッセージが返さ れます。 新しい範囲の値の境界は、既存の別セグメントの境界と重 なる必要があります。既存のセグメントの範囲を拡張する 場合は、RANGE 句を使用します。 RANGE MOVE 操作によって範囲の値にすき間ができない ようにする必要があります。RANGE MOVE 句を使用する と、次の操作を実行できます。 ■ 指定したセグメントの切り離しとクリア ■ 隣接するセグメントの範囲の調整 ■ 切り離したセグメントの新しい範囲位置への再アタッチ ■ 隣接するセグメントの範囲の調整 RANGE MOVE 操作の例については、8-47 ページを参照し てください。 あるインデックスについて、RANGE MOVE 操作によって セグメント範囲が重複したり、インデックス データを別の セグメントに移動する必要が生じた場合は、INVALIDATE キーワードを指定しない限り、操作は拒否されます。詳細 については、下記の INVALIDATE を参照してください。 RANGE MOVE 操作による変更を行ったために、既存の行 データを別のセグメントに移動する必要が発生しないよう にしてください。 RANGE MOVE 句はローカル インデックスでは無効です。 ALTER SEGMENT - その他の句 INVALIDATE 空でないセグメントに RANGE MOVE 操作を行う場合や、範囲がイ ンデックスの既存の値に重複する場合、そのインデックスが無効と マークされるように指定します。 ■ ■ 移動したインデックス セグメントの範囲がほかのインデッ クス セグメントの既存の値と重複する場合、新しい境界を 作成してそのインデックス キーの値を別のセグメントへ移 動する必要があります。RANGE MOVE 操作でインデック ス キーを移動することはできません。インデックスを再作 成して無効とマークする必要があります。 空でないインデックス セグメントを移動する場合、そのイ ンデックス キーは別の範囲にある可能性があります。 RANGE MOVE 操作はインデックス キーを別のセグメント に移動しないため、インデックスを再作成する必要があり ます。 INVALIDATE キーワードを指定した場合、セグメントが追加され、 インデックスが無効になります。 INVALIDATE キーワードを指定しなかった場合、動作が失敗し、セ グメントは追加されず、インデックスは無効になりません。 RANGE MOVE 句の例 Sales テーブルの範囲が図 8-9 のようになっているとします。 図 8-9 daily_data1 daily_data2 daily_data3 daily_data4 min:200 200:400 400:600 600:max Sales テーブルの セグメント範囲 セグメント daily_data2 をテーブル末尾の新しい範囲へ移動し、現在の最大値が 799 である場合は、次の SQL 文を使用します。 alter segment daily_data2 of table sales range (800:max) move RANGE MOVE 句は最初に切り離しを行い、セグメント daily_data2 はクリアされて 移動後は 0 行となります。Sales テーブルにローカル インデックスが定義されてい る場合、テーブル セグメントに対して RANGE MOVE 操作を行うことで、対応する ローカル インデックス セグメントもクリアされます。 SQL 文と RISQL 拡張機能 8-47 ALTER SEGMENT - その他の句 この ALTER SEGMENT RANGE MOVE 文によって、以前セグメント daily_data2 で 定義されていた範囲が、下位に隣接するセグメント daily_data1 に含まれるように 調整されます。この ALTER SEGMENT RANGE MOVE 文の実行結果の範囲は次に示 します。 daily_data1 daily_data3 daily_data4 daily_data2 min:400 400:600 600:800 800:max 最下位のセグメント daily_data1 の範囲を移動するには、次の SQL 文を使用します。 alter segment daily_data1 of table sales range (800:max) move このステートメントによって、下から 2 番めのセグメント daily_data2 の範囲が該当 する部分まで拡張されます。図 8-9 の範囲を使用すると、新しい範囲は次のように なります。 daily_data2 daily_data3 daily_data4 daily_data1 min:400 400:600 600:800 800:max RANGE MOVE で同じ境界を使用できない理由の例 移動するセグメントの既存の境界と同じ範囲にある値を指定する場合、RANGE MOVE 句を使用することはできません。たとえば、セグメント daily_data2 が図 8-9 に示す範囲のときに次の値の範囲を指定すると、この範囲を移動しなければならな くなり、エラーになります。 alter segment daily_data2 of table sales range (300:400) move; ** ERROR ** (6415) To change the range of a segment without moving it to a different position in the range list, please use the ALTER SEGMENT RANGE command without the MOVE clause. また、次の例のように、境界と一致しない値の範囲を指定した場合もエラーになり ます。 alter segment daily_data2 of table sales range (300:500) move; ** ERROR ** (6414) Cannot change the range of segment DAILY_DATA2 because the new range will not match a boundary when the segment is being moved. 8-48 SQL Reference Guide ALTER SEGMENT - その他の句 OPTICAL 句と RENAME 句 OPTICAL ALTER SEGMENT...OPTICAL 文は、既存セグメントをニアライ ン、または光学式のディスクに格納されているセグメントとして マークします。 セグメントを OPTICAL ON に設定すると、RBW_SEGMENTS シ ステム テーブルの OPTICAL 列が Y に設定され、9-36 ページで 説明されている SET OPTICAL AVAILABILITY の各ステートメン トを使用してセグメントへのアクセスを制御できるようになりま す。セグメントを OPTICAL OFF に設定すると、セグメントは光 ディスクに格納されているとは認識されなくなるため、利用効率 のステートメントを実行しても効果がありません。 RENAME <new_seg_name> 指定したセグメントの名前を変更します。テーブルやインデック スにアタッチしたり、切り離したりする時に、デフォルト セグ メントや名前付きセグメントの名前を変更することができます。 <psu_sequence_id> セグメントの各 PSU にサーバが割り当てるシーケンス番号を指 定します。たとえば、セグメントの先頭 PSU にはシーケンス ID 1 が割り当てられ、次の PSU にはシーケンス ID 2 が割り当てら れます。シーケンス ID 番号は、RBW_STORAGE テーブルに格 納されます。 CHANGE MAXSIZE 句 CHANGE MAXSIZE <psu_sequence_id> TO < max_size> PSU の最大サイズを変更します。PSU の最大サイズは、デフォ ルト セグメントと名前付きセグメントの両方を変更できます。 <max_size> は KB 単位で指定しますが、実際のサイズは、8KB の 倍数に切り上げられます。MAXSIZE の許容最小値は 16KB です。 該当 PSU の次のシーケンス ID を持つ PSU にデータが格納されて いる場合は、この句によって PSU の最大サイズを変更すること はできません。ただし、次の PSU のサイズが INITSIZE パラメー タによって領域確保されていても、その PSU にデータが格納さ れていない場合は、最大サイズを増加させることができます。 SQL 文と RISQL 拡張機能 8-49 ALTER SEGMENT - その他の句 例 図 8-10 では psu2 にデータが割り当てられています。このため、psu1 の最大サイズ を変更することはできません。psu3 にはデータが割り当てられていないため、psu2 の最大サイズを増加することは可能です。 図 8-10 PSU データ割り当て psu1 psu2 psu3 例 次の ALTER SEGMENT 文は、psu1 の最大サイズを 100KB に増やします。 alter segment segment2 of table sales change maxsize 1 to 100. CHANGE EXTENDSIZE <psu_sequence_id> TO <increment> PSU を拡張するときの増分を変更します。増分値は KB 単 位で指定しますが、実際は指定値が 8 の倍数に切り上げら れます。 CHANGE PATH <psu_sequence_id> TO '<new_filename>' 指定した PSU のロケーションを変更します。 新しいロケーションを指定しても、PSU が実際に移動するわけではありません。 RBW_STORAGE テーブルの LOCATION 列が更新されるだけです。ファイルを物 理的に移動したりコピーする場合には、オペレーティング システムの該当するコマ ンドを使用してください。 データベース サーバは次の事項を検証します。 ■ ■ ■ ■ ディレクトリ パスにファイルが存在すること。存在しなければ、警告メッ セージが表示されます。 redbrick ユーザによるアクセスが許可されているファイルであること。そ うでない場合は、エラーになります。 ファイルのサイズが、8KB の倍数であること。そうでない場合は、エラー になります。 ディレクトリ、キャラクタ デバイス、ブロック デバイス、名前付きパイ プ、ハード リンク、シンボリック リンク、ソケットのいずれでもない、通 常のファイルであること。シンボリック リンク以外の場合は、エラーにな ります。シンボリック リンクの場合は、通知メッセージが表示されます。 8-50 SQL Reference Guide ALTER SEGMENT - その他の句 MIGRATE TO '<dir_path>' <dir_path> で指定したロケーションに、セグメントをコピーし ます。<dir_path> は、絶対パスまたはデータベース ディレクト リに対する相対パスです。 MIGRATE TO 句を使用してセグメント全体を移動できます。 たとえば、ディスクから光ディスクに移動したり、光ディスク からディスクに移動したり、ディスクから別のディスクに移動 できます。 領域が不足していたりファイル名が重複しているために移動が 完了できない場合は、それらを修正して再実行すれば、残りの PSU が引き続きコピーされます。 複数のディレクトリ上の PSU を 1 つのディレクトリに移動し たためにファイル名が重複した場合は、次の手順で問題を解決 してください。 1. 2. オペレーティング システムのコマンドで、PSU を格 納しているファイルを一意の名前に変更します。 ALTER SEGMENT…HANGE PATH 文で、データベー スのシステム テーブルの PSU 名を変更します。 ALTER SEGMENT…IGRATE TO 文で PSU を移動します。 DROPPING、 KEEPING コピー完了後、元の PSU を削除するかどうかを指定します。 デフォルトは DROPPING です。 COMMENT セグメントの内容を説明するコメント文字列を割り当てます。 コメントは、RBW_SEGMENTS システム テーブルに格納され ます。256 バイトまで入力できます。データベースはこのコメ ント テキストを無視します。 NULL を指定すると、コメント文字列が NULL に置き換えられ ます。 SQL 文と RISQL 拡張機能 8-51 ALTER SEGMENT - その他の句 ADD STORAGE 指定 ADD STORAGE 指定は、新しい PSU をセグメントに追加します。1 つのセグメント に、サイズの異なる複数の PSU を割り当てることができます。 次に ADD STORAGE 文の構文ダイアグラムを示します。格納方法の指定と ALTER SEGMENT 文との関係は、8-30 ページを参照してください。 ADD STORAGE INITSIZE '<filename>' <init_size> MAXSIZE EXTENDSIZE <max_size> <increment> ADD STORAGE 新しい PSU は、指定セグメント内の既存の PSU の最後に追加され <filename> ます。 新しい PSU のパス名は、データベース ディレクトリとの相対パス 名、絶対パス名のどちらでもかまいません。指定するディレクトリ は、すべて存在するものにしてください。 MAXSIZE <max_size> PSU にロードするデータの最大量を KB 数で指定します。この値に 達すると、シーケンス内の次の PSU に切り換わります。<max_size> は KB 単位で指定しますが、実際のサイズは、8KB の倍数に切り上 げられます。MAXSIZE の許容最小値は 16KB です。 MAXSIZE パラメータは、RBW_STORAGE システム テーブルの MAXSIZE 列に格納されます。このシステム テーブルには、PSU の 使用済み KB 数 (USED 列 ) も格納されます。 8-52 SQL Reference Guide ALTER SEGMENT - その他の句 INITSIZE <init_size> PSU にあらかじめ確保される領域の初期サイズを指定します。KB 単位で指定しますが、実際のサイズは 8KB の倍数に切り上げられま す。指定する値は、MAXSIZE パラメータで指定した最大サイズ以 下にしてください。 INITSIZE パラメータは、RBW_STORAGE システム テーブルの INITSIZE 列に格納されます。 セグメントの先頭 PSU の初期サイズは、16KB 以上にします。最初 の PSU に 9 KB 未満の初期サイズを指定した場合は、エラーが返さ れます。9KB ∼ 16KB 未満の値を指定すると、16KB に切り上げら れます。それ以降の PSU の初期サイズは、0 ∼最大サイズの任意の 値に設定できます。 デフォルトは 16KB です。 EXTENDSIZE PSU の容量が不足した場合に、初期サイズ以上に拡張するときの増 <increment> 分の単位を指定します。増分は KB 単位で指定しますが、実際のサ イズは 8KB の倍数に切り上げられます。デフォルトは 8KB です。 SQL 文と RISQL 拡張機能 8-53 ALTER SEGMENT - その他の句 DROP STORAGE 句と RELEASE STORAGE 句 DROP LAST STORAGE 指定したテーブルまたはインデックス セグメントの末尾から、最後 の PSU を削除します。最後の PSU は完全に空にしてから削除する 必要があります。この PSU はファイル システムから物理的に削除 されます。 重要 : 最後の PSU から行データを削除した後も領域が論理的に使 用されている場合、最初に ALTER SEGMENT RELEASE STORAGE オプションを使用して領域を解放してから PSU を削除する必要があ ります。RBW_SEGMENTS システム テーブルの Used 列に対してク エリを実行し、領域が使用中であるかどうかを確認してください。 格納領域の解放と削除の詳細な手順については、『Administrator's Guide』を参照してください。 複数の PSU を削除するには、PSU ごとに ALTER SEGMENT DROP LAST STORAGE を実行します。 複数の PSU が存在する場合、デフォルト セグメントに DROP LAST STORAGE オプションが使用できます。 RELEASE STORAGE テーブル セグメントの PSU に使用されていない割り当て領域を切 り捨てて、その領域をオペレーティング システムに返します。 セグメントから格納領域を解放すると、各 PSU の末尾の未使用領域 が使用可能になります。PSU が空の場合、領域は INITSIZE で指定 されたサイズにリセットされます。空の PSU は、テーブル セグメ ントから削除されません。セグメント末尾の空の PSU を削除するに は、DROP LAST STORAGE オプションを使用します。 重要 : RELEASE STORAGE オプションを使用すると、セグメント の構造が変更され、セグメントが破損して問題が発生する場合があ ります。セグメントが破損していないかどうかをチェックするに は、セグメントに対して CHECK TABLE を実行してから ALTER SEGMENT RELEASE STORAGE を実行します。 RELEASE STORAGE オプションはインデックス セグメントや名前 のないセグメントには無効です。 ALTER SEGMENT RELEASE STORAGE コマンドが完了すると、オ ペレーティング システムに返されたブロックの割合を示すメッセー ジが表示されます。 8-54 SQL Reference Guide ALTER SYNONYM セグメントの格納領域を解放 / 削除する例 ALTER SEGMENT 文を使用して DAILY_DATA2 セグメントの末尾から未使用の領域 を解放するには、次のようにします。 alter segment DAILY_DATA2 of table sales release storage; ALTER SEGMENT 文を使用して Sales テーブルのセグメントの末尾から空の PSU を 削除するには、次のようにします。 alter segment DAILY_DATA2 of table sales drop last storage; セグメントに格納領域を追加する例 ALTER SEGMENT 文を使用して Sales テーブルのセグメントの末尾に PSU を追加す るには、次のようにします。 alter segment DAILY_DATA2 of table sales add storage 'sales_psu4' maxsize 1024 initsize 100 extendsize 100; ALTER SYNONYM ALTER SYNONYM 文は、シノニムまたはシノニムの列にコメントを付けます。シ ノニムのコメントは、RBW_SYNONYMS および RBW_TABLES システム テーブル に格納されます。列のコメントは、RBW_COLUMNS システム テーブルに格納さ れます。 アクセス権 シノニムを変更するユーザは、次の中で少なくとも 1 つの条件を満たしている必要 があります。 ■ ■ ■ ■ DBA システム ロールのメンバーであること 明示的に付与されるかユーザが作成したロールのメンバーであることによ り、ALTER_ANY 権限を持っていること RESOURCE システム ロールのメンバーで、かつシノニムの作成者である こと シノニムの作成者であり、明示的に付与されるかユーザが作成したロール のメンバーであることにより、ALTER_OWN 権限を持っていること SQL 文と RISQL 拡張機能 8-55 ALTER SYNONYM 構文 次に ALTER SYNONYM 文の構文ダイアグラムを示します。 ALTER SYNONYM <synonym_name> <col_name> ALTER COLUMN COMMENT '<character_string>' NULL <synonym_name> 変更するシノニムの名前を指定します。 ALTER COLUMN <col_name> 指定したシノニムの中で、変更する列の名前を指定します。 COLUMN キーワードはオプションです。 COMMENT シノニムまたはシノニムの列を説明するコメント文字列を割り当 てます。シノニムのコメントは、RBW_SYNONYMS および RBW_TABLES システム テーブルに格納されます。列のコメン トは、RBW_COLUMNS システム テーブルに格納されます。256 バイトまで入力できます。データベースはこのコメント テキス トを無視します。 NULL を指定すると、コメント文字列が NULL インジケータに置 き換えられます。 8-56 SQL Reference Guide ALTER SYSTEM ALTER SYSTEM ALTER SYSTEM 文は、データベース管理者や、必要なアクセス権を持ったユーザ が、データベースの制御や各種の管理を行うときに使用します。 アクセス権 データベースに対して ALTER SYSTEM 文を実行するユーザは、次の中で少なくと も 1 つの条件を満たしている必要があります。 ■ ■ DBA システム ロールのメンバーであること 明示的に付与されるかユーザが作成したロールのメンバーであることによ り、ALTER_SYSTEM 権限を持っていること 管理データベースの DBA システム ロールのメンバーであるか、ALTER_SYSTEM 権限を持っているユーザは、すべてのウェアハウス データベースを対象とした ALTER SYSTEM 文を実行することができます。 SQL 文と RISQL 拡張機能 8-57 ALTER SYSTEM 構文 次に ALTER SYSTEM 文の構文ダイアグラムを示します。 ALTER SYSTEM RESET STATISTICS DATABASE ALL <logical_db_name> QUIESCE DATABASE ALL <logical_db_name> RESUME DATABASE START ALL <logical_db_name> ADVISOR_LOGGING STOP SWITCH ADVISOR_LOG FILE TERMINATE ADMIN ADMINISTRATION <alter_user_activity> <alter_user_priority> <alter_logging> <alter_accounting> <alter_performance_monitor> <alter_clear_performance_stats> 8-58 SQL Reference Guide DAEMON ALTER SYSTEM RESET STATISTICS カレント データべースの動的統計テーブルの統計情報をすべて 0 にリセットします。カレント データベースが管理データベース の場合は、DATABASE 句を指定してください。 DATABASE 1 つまたはすべてのデータベースを指定します。カレント データ ベースが管理データベースの場合は、この句の入力は必須です。 そうでない場合は、使用しません。 ALL ALTER SYSTEM 文が、すべてのウェアハウス データベースに適 用することを指定します。 <logical_db_name> データベース名を指定します。rbw.config ファイルに設定された データベース論理名を使用することができます。 QUIESCE カレント データべースまたは指定したデータべースを、静止し た状態にします。静止状態のデータベースに対しては、新しくコ マンドを実行したり、新しく接続することはできません。DBA システム ロールのメンバーまたは IGNORE_QUIESCE タスク権 限を持つユーザが開始する場合は、コマンドや接続は実行可能で す。現在実行中のコマンドは、完了させることができます。カレ ント データベースが管理データベースの場合は、DATABASE 句 と対象データベース名を指定してください。 RESUME 静止状態のデータべースをアクティブ状態に変更します。静止 データベースでは新規にセッションが起動できないため、このコ マンドは既存セッションで実行するか、管理データベースに接続 していて、その管理データベースに対する ALTER_SYSTEM 権限 を持っているユーザが実行する必要があります。カレント デー タベースが管理データベースの場合は、DATABASE 句と対象 データベース名を指定してください。 START、STOP ADVISOR_ LOGGING Vista Advisor ログ ファイルへの情報の記録を開始または停止しま す。このステートメントには、デフォルト設定はありません。こ のステートメントは rbw.config ファイルの ADMIN ADVISOR_LOGGING パラメータよりも優先されます。 SQL 文と RISQL 拡張機能 8-59 ALTER SYSTEM SWITCH ADVISOR_LOG FILE デフォルト名で新規のアクティブ ログ ファイルを作成し、次の 情報をログに記録します。 ■ ■ ■ ■ ■ ■ ■ タイムスタンプ。メッセージがログ記録された日付と時 刻を示します。 データベース名。使用中のデータベースの名前を示しま す。 基本テーブル識別番号。事前計算ビューの作成に使用さ れた基本テーブルを識別します。 ビュー識別番号。クエリへの応答に使用された事前計算 ビューを識別します。 ロールアップ情報。ビューのグルーピング列のサブセッ トまたはグラニュラリティ ( 詳細度 ) の低いディメン ジョンの属性を問い合わせるクエリに応答するために ビューが参照された回数を示します。 クエリおよびクエリ内の各集約ブロックの経過時間。ク エリの集約部分の実行に要した合計時間を示します。 集約ブロックの SQL テキスト。ビューの定義を表しま す。 TERMINATE 管理デーモン (rbwadmd) を終了します。rbwadmd を終了する ADMIN DAEMON と、動的統計テーブル (DST) に格納されていた情報はすべて削除 されます。管理者は /redbrick/bin ディレクトリから rbwadmd ス クリプトを実行して管理デーモンを再起動できます。 <alter_user_ activity> ALTER SYSTEM の 2 つのオプション、CLOSE USER SESSION と CANCEL USER COMMAND を含みます。どちらのオプションも、 現在実行中のユーザ コマンドを取り消すものです。異なる点は、 CLOSE USER SESSION オプションが、コマンドを実行している セッションも終了させる点です。<alter_user_activity> 句の詳しい 定義は、8-61 ページ を参照してください。 <alter_user_ priority> 現在のユーザ セッションの優先順位を変更します。そのユーザ に新しく開始されたセッションがある場合、そのセッションの優 先順位が既存の優先順位です。 ユーザ優先順位の変更を行うには、ALTER USER 文を使用しま す。ユーザ優先順位をサポートするには、UNIX の renice コマン ドを実行できるプラットフォームを使用してください。ADMIN RENICE_COMMAND 構成パラメータで renice スクリプトのフル パス名を指定してください。<alter_user_priority> 句の詳しい定義 は、8-63 ページを参照してください。 8-60 SQL Reference Guide ALTER SYSTEM ログ動作を制御するオプションが含まれます。<alter_logging> 句 の詳しい定義は、8-65 ページを参照してください。 <alter_logging> <alter_accounting> アカウント動作を制御するオプションが含まれます。 <alter_accounting> 句の詳しい定義は、8-67 ページを参照してく ださい。 <alter_performance_ パフォーマンス モニタを制御するオプションが含まれます。 monitor> <alter_performance_monitor> 句の詳しい定義は、8-68 ページを参 照してください。 性能 DST をクリアするオプションが含まれます。 <alter_clear_performance_statistics> 句の詳しい定義は、8-70 ペー ジを参照してください。 <alter_clear_ performance_ statistics> ユーザ操作の制御 次にユーザ操作の制御句の構文ダイアグラムを示します。ユーザ操作の制御句と ALTER SYSTEM 文との関係は、8-57 ページを参照してください。 <db_username> CLOSE USER SESSION CANCEL USER COMMAND DATABASE ALL ALL <logical_db_name> PROCESS ALL <pid> SQL 文と RISQL 拡張機能 8-61 ALTER SYSTEM CLOSE USER SESSION カレント データべースの 1 つまたはすべてのユーザ セッションに ついて、現在実行中のコマンドを取り消し、終了します。カレント データベースが管理データベースの場合は、DATABASE 句を指定 してください。 CANCEL USER カレント データべースのそれぞれ、またはすべてのユーザ セッ COMMAND ションについて、現在実行中のコマンドを取り消します。カレント データベースが管理データベースの場合は、DATABASE 句を指定 してください。 <db_username> 有効なデータベース ユーザ名を指定します。 ALL ステートメントに指定したデータベースの全ユーザに適用すること を指定します。 DATABASE 1 つまたはすべてのデータベースを指定します。カレント データ ベースが管理データベースの場合は、入力が必須です。そうでない 場合は、使用しません。 ALL ステートメントが、すべてのウェアハウス データベースに適用さ れることを指定します。 <logical_db_ name> rbw.config ファイルに設定されたデータベース論理名を指定しま す。 PROCESS セッションのプロセス ID により、特定のセッションを指定します。 管理データベースに接続している場合は、DATABASE 句の後にこ の句を指定してください。たとえば、管理データベースに接続中に データベース DB1 上の特定のユーザのすべての処理を終了させる 場合は、DATABASE DB1 句の後にこの句を指定する必要がありま す。 ALL すべてのセッションを指定します。PROCESS オプションを指定し なければ、ALL がデフォルトになります。 <pid> 特定のユーザ セッションのプロセス ID を指定します。 8-62 SQL Reference Guide ALTER SYSTEM 例 次のステートメントは、カレント データベースでユーザ diaz が実行している特定 のセッションについて、現在実行中のステートメントを取り消します。 alter system cancel user command diaz process 23581 次のステートメントは、データベース marketing でユーザ intern が実行している全 セッションのステートメントを取り消し、同セッションを終了します。このステー トメントを実行するユーザは、管理データベースに対する ALTER SYSTEM 権限を 持ち、管理データベースに接続している必要があります。 alter system close user session intern database marketing process all 次の例は、ユーザ jones が実行中の全ウェアハウス データベースの全セッションの ステートメントを取り消し、同セッションを終了します。このステートメントを実 行するユーザは、管理データベースに対する ALTER SYSTEM 権限を持ち、管理 データベースに接続している必要があります。 alter system close user session jones database all ユーザ優先順位の変更 次に <alter_user_priority> 句の構文ダイアグラムを示します。この句と ALTER SYSTEM 文との関係は、8-57 ページを参照してください。 CHANGE USER <db_username> ALL SET PRIORITY <integer> ON DATABASE ALL <logical_db_name> PROCESS ALL <pid> SQL 文と RISQL 拡張機能 8-63 ALTER SYSTEM CHANGE USER 1 つまたは複数のユーザ セッションの優先順位を変更します。この 句を使用するには、ADMIN RENICE_COMMAND パラメータを設定 してください。 <db_username> 有効なデータベース ユーザ名を指定します。 ALL ステートメントに指定したデータベースの全ユーザに適用すること を指定します。 SET PRIORITY セッションの優先順位を <integer> に指定した値に設定します。0 ∼ <integer> 100 の値を指定できます。最優先の順位は 0 です。 ON DATABASE 1 つまたはすべてのデータベースを指定します。カレント データ ベースが管理データベースの場合は、入力が必須です。そうでない 場合は、使用しません。 ALL ステートメントが、すべてのウェアハウス データベースに適用する ことを指定します。 <logical_db_ name> rbw.config ファイルに設定されたデータベース論理名を指定します。 PROCESS セッションのプロセス ID により、特定のセッションを指定します。 管理データベースに接続している場合は、DATABASE 句の後にこの 句を指定してください。たとえば、管理データベースに接続中に データベース DB1 上の特定のユーザの優先順位を変更したい場合 は、DATABASE DB1 句の後にこの句を指定する必要があります。 ALL すべてのセッションを指定します。PROCESS オプションを指定し なければ、ALL がデフォルトになります。 <pid> 特定のユーザ セッションのプロセス ID を指定します。 8-64 SQL Reference Guide ALTER SYSTEM ログ記録設定の変更 次にログ記録設定句の構文ダイアグラムを示します。この句と ALTER SYSTEM 文 との関係は、8-57 ページを参照してください。 START LOGGING STOP LOGGING SWITCH LOGGING FILE TERMINATE LOGGING DAEMON CHANGE LOGGING LEVEL AUDIT ERROR OPERATIONAL ROUTINE ALERT URGENT SCHEMA USAGE ヒント : 次に示す操作を実行するには、ログ デーモンが起動している必要があり ます。 START LOGGING イべントのロギングを開始します。ログ デーモンが、ウェアハウス プロセスからのログ要求メッセージの受信を開始し、対応するログ レコードを新規ログ ファイルに書き込みます。 STOP LOGGING イべントのロギングを停止します。ログ デーモンは、ロギングを停 止し、アクティブ状態のログ ファイルを閉じます。ログ デーモン は停止されないため、いつでもログ記録を再開できます。 SWITCH LOGGING FILE アクティブ状態のログ ファイルを閉じ、その後のレコードを書き込 む新規のアクティブ ログ ファイルを作成します。閉じたファイル は名前が rbwlog.<daemon_name>.active から rbwlog.<daemon_name>.<datetime_stamp> に変更されます。ログ記 録が停止していると、このステートメントは無視されます。 SQL 文と RISQL 拡張機能 8-65 ALTER SYSTEM TERMINATE LOGGING DAEMON ログ記録タスクとアカウンティング タスクの両方を実行しているロ グ デーモン プロセス (rbwlogd) を終了します。 CHANGE LOGGING LEVEL 選択したログ イべント カテゴリについて、ログの重要度を変更し ます。変更は、ただちに有効になります。イべント カテゴリは、次 のとおりです。 ■ ■ ■ ■ ■ ROUTINE、 ALERT、 URGENT 8-66 SQL Reference Guide AUDIT ( セキュリティおよびアクセス コントロールに関連 したイべント ) ERROR ( エラー イべント ) OPERATIONAL ( 管理操作 ) SCHEMA ( データべースの物理的および論理的構造の変更 ) USAGE ( ロード操作、アンロード操作、DML 操作 ) そのイベント カテゴリについて、指定したレベル以上の重要度を持 つログ イベントだけが記録されます。最低レべルは ROUTINE、最 高レべルは URGENT です。ALERT の重要度レベルは、ROUTINE と URGENT の中間です。 ALTER SYSTEM アカウンティング設定の変更 次にアカウンティング設定の構文ダイアグラムを示します。この句と ALTER SYSTEM 文との関係は、8-57 ページを参照してください。 START ACCOUNTING STOP ACCOUNTING SWITCH ACCOUNTING FILE CHANGE ACCOUNTING LEVEL WORKLOAD JOB START ACCOUNTING アカウンティング動作を開始します。ログ デーモンが、アカウ ンティング要求メッセージの受信を開始し、対応するアカウン ト レコードを新規アカウント ファイルに書き込みます。すで にアカウンティングが開始していると、このオプションは無視 されます。 STOP ACCOUNTING アカウンティング動作を停止します。ログ デーモンは、アク ティブ状態のアカウント ファイルを閉じます。ログ デーモン は停止されないため、いつでもアカウンティングを再開するこ とができます。 SWITCH アクティブ状態のアカウント ファイルを閉じ、その後のアカウ ACCOUNTING FILE ント レコードを書き込む新規のアクティブ ファイルを作成し ます。閉じたファイルは名前が rbwacct.<daemon_name>.active から rbwacct.<daemon_name>.<datetime_stamp> に変更されま す。アカウンティングが実行中でなければ、このステートメン トは無視されます。 CHANGE ACCOUNTING LEVEL 記録するアカウント レベルの詳細レベルを、JOB アカウンティ ングまたは WORKLOAD アカウンディングに変更します。変更 は、ただちに有効になります。 WORKLOAD、 JOB JOB アカウンティングまたは WORKLOAD アカウンティングを 指定します。JOB は、基本的なリソース使用率情報に限定され ます。WORKLOAD アカウンティングには詳細な情報が含まれ ます。主に IBM サポート スタッフがこのアカウンティングを 使用します。 SQL 文と RISQL 拡張機能 8-67 ALTER SYSTEM パフォーマンス モニタの変更 次に パフォーマンス モニタの変更句の構文ダイアグラムを示します。この句と ALTER SYSTEM 文との関係は、8-57 ページを参照してください。 PERFORMANCE MONITOR START SESSION <session_id> STOP DATABASE <logical_db_name> START、STOP クエリの実行結果を収集および格納する場合に、パフォーマンス PERFORMANCE モニタ デーモン (rbwpmond) を開始または停止します。このス MONITOR テートメントでは、QUERYPROCS、 PERFORMANCE_MONITOR_MAXSESSIONS、および PERFORMANCE_MAXOPERATORS パラメータの現在の値を使 用してメモリを割り当てて、クエリ統計を収集および格納しま す。メモリ要件とパフォーマンス モニタの使用の詳細について は、『Query Performance Guide』を参照してください。 警告 : 性能の検証中はパフォーマンス デーモンを常に有効にし ておき、クエリごとに起動および終了しないようにしてくださ い。セッション中にクエリのモニタを開始および停止するには、 SET PERFORMANCE MONITOR ON および SET PERFORMANCE MONITOR OFF を使用することをお勧めします。詳細について は、9-44 ページ「SET PERFORMANCE MONITOR」を参照して ください。 性能の検証は数日から 1 週間かかる場合もあります。割り当てら れたメモリにクエリのすべてのモニタ結果を保存できる場合は、 検証中はパフォーマンス モニタを常に有効にしておくことがで きます。メモリが不足した場合、ALTER SYSTEM コマンドの CLEAR PERFORMANCE STATISTICS オプションを使用して、性 能 DST の行データをクリアすることができます。このオプショ ンの詳細については、8-70 ページを参照してください。 SESSION 指定したセッションのパフォーマンス モニタを開始または停止 します。DBA はこのキーワードを使用して、パフォーマンス モ ニタを個別のセッションに制限できます。 <session_pid> 現在アクティブなセッションを指定します。 8-68 SQL Reference Guide ALTER SYSTEM DATABASE パフォーマンス モニタを開始または停止するデータベースを指 定します。カレント データベースが管理データベースの場合は、 入力が必須です。そうでない場合は、使用しません。 <logical_db_ name> rbw.config ファイルに設定されたデータベース論理名を指定しま す。 使用上の注意 ALTER SYSTEM コマンドの START PERFORMANCE MONITOR オプションによっ て、パフォーマンス モニタ デーモン rbwpmond が開始され、システム全体の性能 をモニタするためのリソースが割り当てられます。 RISQL> alter system start performance monitor; ALTER SYSTEM コマンドの START PERFORMANCE MONITOR オプションは、Red Brick サーバがモニタを行うための調整を行います。実際にクエリ モニタを開始お よび停止するには、セッションごとに SET PERFORMANCE MONITOR コマンドを 使用します。 RISQL> set performance monitor on; RISQL> select ...; RISQL> set performance monitor off; 詳細については、9-44 ページ「SET PERFORMANCE MONITOR」を参照してくださ い。 デフォルトでは、パフォーマンス モニタはすべてのセッションで有効です。DBA は SESSION <session_pid > 句とともに ALTER SYSTEM STOP PERFORMANCE MONITOR コマンドを実行することで、指定したセッションのモニタを停止できま す。 RISQL> alter system stop performance monitor session 6042; セッション 6042 のユーザがモニタを開始しようとすると、エラーになります。 RISQL> set performance monitor on; ** ERROR ** (9112) Performance monitoring for this session has been disabled ユーザが SET PERFORMANCE MONITOR コマンドでモニタを開始していた場合、 この ALTER SYSTEM STOP コマンドを SESSION 句とともに使用して、セッション のモニタを停止できます。 セッションのパフォーマンス モニタを手動で停止した後、DBA は ALTER SYSTEM START PERFORMANCE MONITOR コマンドの SESSION 句を使用してモニタを再開 できます。 RISQL> alter system start performance monitor session 6042; SQL 文と RISQL 拡張機能 8-69 ALTER SYSTEM STOP PERFORMANCE MONITOR コマンドを SESSION キーワードを使用せずに実 行すると、パフォーマンス モニタ デーモン rbwpmond が停止され、システム全体 の性能をモニタするためのリソースが解放されます。 RISQL> alter system stop performance monitor; パフォーマンス モニタの使用方法の詳細については、『Query Performance Guide』を 参照してください。 性能統計のクリア設定の変更 次に 性能統計のクリア設定の変更句の構文ダイアグラムを示します。この句と ALTER SYSTEM 文との関係は、8-57 ページを参照してください。 CLEAR PERFORMANCE STATISTICS START_TIMESTAMP <timestamp> USERNAME <user_name> DATABASE <logical_db_name> CLEAR START_TIMESTAMP および USERNAME オプションを使用して、 PERFORMANCE 性能 DST に格納された行データをクリアします。 STATISTICS START_TIMESTAMP と USERNAME のどちらも指定しない場合 は、すべての行がクリアされます。 この句を使用するには、パフォーマンス モニタ デーモン rbwpmond が有効である必要があります。 START_ TIMESTAMP コマンドの開始時間を基準にして、性能 DST から行データをク リアします。 <timestamp> コマンドの開始時間を指定します。この前に、性能 DST からす べての行がクリアされます。 USERNAME ユーザ名を基準にして、性能 DST から行データをクリアします。 <db_username> 有効なデータベース ユーザ名を指定します。このユーザ名のあ る行データが性能 DST からクリアされます。 DATABASE 性能 DST から行データをクリアするデータベースを指定します。 カレント データベースが管理データベースの場合は、入力が必 須です。そうでない場合は、使用しません。 8-70 SQL Reference Guide ALTER SYSTEM <logical_db_ name> rbw.config ファイルに設定されたデータベース論理名を指定しま す。 使用上の注意 PERFORMANCE_MONITOR_COMMANDS_LIMIT パラメータは、パフォーマンス モニタが DST に格納できるコマンドの最大数を指定します。このパラメータで指定 した数に達した場合、パフォーマンス モニタで新規クエリを開始することはできま せん。このときパフォーマンス モニタからはエラー メッセージが返され、性能 DST をクリアする必要があることを示します。ALTER SYSTEM コマンドの CLEAR PERFORMANCE STATISTICS 句を使用して、行データのサブセットまたはすべての 行データをクリアし、クエリのモニタを再開してください。 CLEAR PERFORMANCE STATISTICS 句の使用手順とその例については、『Query Performance Guide』を参照してください。 SQL 文と RISQL 拡張機能 8-71 ALTER TABLE ALTER TABLE ALTER TABLE 文には、次の目的があります。 ■ ■ ■ ■ ■ テーブル列の追加、修正、削除。 テーブルに使用できるセグメントの最大数と、セグメント当たりの最大行 数の変更。 テーブルまたは列を説明したコメントの割り当て。テーブルと列のコメン トは、それぞれ RBW_TABLES テーブルと RBW_COLUMNS テーブルに 格納されます。 フォーリン キー制約の追加、削除、変更。 事前計算ビューの有効または無効の設定。 ALTER TABLE 文の実行中は、テーブルが自動的にロックされます。 ALTER TABLE 文は、テンポラリ テーブルに対してはサポートされません。 アクセス権 テーブルを変更するユーザは、次の中で少なくとも 1 つの条件を満たしている必要 があります。 ■ ■ ■ ■ DBA システム ロールのメンバーであること。 明示的に付与されるかユーザが作成したロールのメンバーであることによ り、ALTER_ANY 権限を持っていること。 テーブルの作成者であり、RESOURCE システム ロールのメンバーである こと。 テーブルの作成者であり、ALTER_OWN 権限と ALTER_TABLE_INTO_ANY 権限を持っていること。ただし、IN_PLACE オ プションを使用するには ALTER_TABLE_INTO_ANY 権限は不要です。 8-72 SQL Reference Guide ALTER TABLE 構文 次に ALTER INDEX 文の構文ダイアグラムを示します。 , ALTER TABLE <table_name> <add_column> <drop_column> IN_PLACE IN <segment_name> , IN ( <segment_name> ) <alter_column> RESUME RESET NULL CHANGE MAXSEGMENTS TO <maxsegments> CHANGE MAXROWS PER SEGMENT TO NULL <maxrows> SET PRECOMPUTED VIEWS VALID INVALID COMMENT NULL '<character_string>' <add_constraint> <drop_constraint> <alter_constraint> RENAME AS <new_name> SQL 文と RISQL 拡張機能 8-73 ALTER TABLE <table_name> 変更するテーブルの名前を指定します。このテーブルは、す でにユーザが定義済みのものである必要があります。 シノニム、ビュー、テンポラリ テーブル、システム テーブ ルは変更できません。変更するテーブルのシノニムは、テー ブルと同時に変更されますが、ビューには影響しません。基 本テーブルの変更をビューに反映させるには、ビューを削除 して、再作成する必要があります。 <add_column, drop_column> 指定したテーブルに追加する列、またはテーブルから削除す る列を指定します。 1 つの ALTER TABLE 文は、列の追加と削除を同時に行うこ とができるように、複数の列を指定できます。ADD と DROP はいくつでも指定できます。 <add_column> 指定と <drop_column> 指定の詳細は、それぞれ 8-73 ページと 8-81 ページを参照してください。 <alter_column> 既存列の変更内容を記述します。既存列の名前やデフォルト 値を変更することができます。指定列がフォーリン キー列の 場合は、alter_column を指定して参照先テーブルから行を削 除するときの動作を変更できます。 alter_column を指定して、列のフィル ファクタを変更したり、 列にコメントを割り当てたりすることもできます。コメント は RBW_COLUMNS テーブルに格納されます。 <alter_column> 指定の詳細は、8-82 ページを参照してくださ い。 IN_PLACE 既存セグメントで、列の追加や削除を行います。 行のサイズを大きくする ( 追加する列の合計幅が、削除する 列の合計幅より広い ) 場合は、テーブルの全行を格納できる 大きさのセグメントを使用してください。 このオプションを使用して操作が中止された場合は、テーブ ルはリセットされません。 8-74 SQL Reference Guide ALTER TABLE IN <segment_name> 名前付きセグメントにテーブルを再作成します。既存セグメ ントのすべての行が新規セグメントにコピーされ、コピーと 同時に ADD 指定または DROP 指定が適用されます。 1 つのセグメントに格納されているテーブルは、1 つのセグ メントにコピーしてください。複数セグメントを持つテーブ ルは、同数のセグメントにコピーする必要があります。 変更が完了すると、元のセグメントはテーブルから切り離さ れるか、削除されます。名前付き ( ユーザが作成した ) セグ メントは切り離され、デフォルト セグメントは削除されま す。 新規セグメントは、テーブル全体を格納できるサイズにして ください。 IN_PLACE と IN <segment_name> のどちらも指定しない場合 は、変更後のテーブルはデフォルト セグメントに作成されま す。変更が完了すると、元のセグメントはテーブルから切り 離されるか、削除されます。名前付き ( ユーザが作成した ) セグメントは切り離され、デフォルト セグメントは削除され ます。 RESUME 割り込みによって中断した ALTER TABLE ADD COLUMN 操 作や DROP COLUMN 操作を再開します。 実行に失敗した ALTER TABLE ADD CONSTRAINT 操作や DROP CONSTRAINT 操作は再開できません。 RESET テーブルを元の状態に復元します。RESET は、次の条件が満 たされた場合にのみ有効です。 ■ ■ ALTER TABLE 文が、ユーザの割り込みや、実行中 の障害によって完了できなかった場合。これには DBA 権限の欠如のような特権違反は含まれません。 ALTER TABLE 文に、IN_PLACE オプションを指定 しなかった場合。 SQL 文と RISQL 拡張機能 8-75 ALTER TABLE CHANGE MAXSEGMENTS TO...CHANGE MAXROWS PER SEGMENT TO テーブルの <maxsegments> または <maxrows per segment> の値 を変更します。STAR インデックス キーのフォーリン キーが このテーブルを参照している場合に、この値でインデックス キーのサイズを算出し、データ量に応じた領域をインデック スに割り当てます。 ALTER TABLE 文は上記の 2 つの値を変更できますが、両方 を 1 つのステートメントで変更することはできません。 どちらかの値に NULL を指定すると、CREATE TABLE 文で指 定を省略した場合と同様になりますので、注意してくださ い。 STAR インデックスのサイズ変更の詳細については、 『Administrator's Guide』を参照してください。 ヒント : 参照先テーブルの MAXROWS PER SEGMENT の値を変更すると STAR イ ンデックスの範囲指定が無効になるような場合、この値を変更できません。そのよ うな変更を加えようとすると、その STAR インデックスを示すエラー メッセージが 表示されます。 SET PRECOMPUTED table_name を持つすべての事前計算ビューに、詳細テーブル VIEWS が有効または無効とマークします。このステートメントには デフォルトはありません。ただし、すべての事前計算ビュー は、作成時には自動的に無効とマークされます。 COMMENT テーブルの内容を説明するコメントを割り当てます。コメン トは、RBW_TABLES システム テーブルに格納されます。 256 バイトまで入力できます。データベースはこのコメント テキストを無視します。 NULL を指定すると、コメント文字列が NULL に置き換えら れます。 <add_constraint> テーブルに追加するフォーリン キー制約を指定します。詳細 については、8-86 ページ「制約の追加」を参照してくださ い。 <drop_constraint> テーブルから削除するフォーリン キー制約を指定します。詳 細については、8-89 ページ「制約の削除」を参照してくださ い。 8-76 SQL Reference Guide ALTER TABLE <alter_constraint> 変更するフォーリン キー制約を指定して、シノニムまたはシ ノニムの基本テーブルを参照するようにします。詳細につい ては、8-90 ページ「制約の変更」を参照してください。 RENAME AS <new_name> <table_name> で指定した基本テーブルの名前を <new_name> に変更します。新しい名前には、既存のテンポラリ テーブ ル、パーマネント テーブル、派生テーブルやシノニムの名前 を使用できません。 シノニム名は変更可能です。また、テーブル名を変更した後 も、シノニムは有効です。次のオブジェクトの名前は変更で きません。 ■ ■ ■ ■ ■ システム テーブル。 動的統計テーブル (DST)。 モデル テーブル。 派生テーブル ( ビューや集約テーブルなど )。 ビューで参照されるテーブル。テーブルの名前を変 更するときは、テーブルで定義されたビューをすべ て削除する必要があります。 クエリ リビジョンが固定されている場合、バージョン管理さ れたデータベースのテーブル名は変更できません。 ユーザは、ほかの DDL タスクを実行する権限に応じて、 テーブルの名前を変更するための権限を持つ必要がありま す。たとえばテンポラリ テーブルを作成でき、パーマネント テーブルを作成できないユーザは、テンポラリ テーブルの名 前を変更することはできますが、パーマネント テーブルの名 前は変更できません。 テーブル名を変更しても、プライマリ キー制約とフォーリン キー制約は引き続き有効です。制約名とインデックス名は、 新しいテーブル名を反映するように自動的に更新されませ ん。システムがデフォルトで生成した制約名およびプライマ リ キー インデックス名には、元のテーブル名が含まれてい ます。このため、RBW_RELATIONSHIPS、 RBW_CONSTRAINTS、および RBW_INDEXES テーブルに対 するクエリ出力は、紛らわしい場合があります。 テーブル名を変更しても、マクロ テキストは動的に更新され ません。したがって、名前を変更したテーブルを参照するマ クロは、エラーになるか、不正な結果を返します。 SQL 文と RISQL 拡張機能 8-77 ALTER TABLE 使用上の注意 VARCHAR 列を使用している場合、ALTER TABLE 文で必要となる正確な領域の容 量を事前に算出することはできません。 ヒント : 領域不足のために、ステートメントの実行に失敗する場合に備えて、 テーブルの変更前に必ずそのバックアップを作成することをお勧めします。 <add_column> は、指定したテーブルに追加する列を指定します。<add_column> を ALTER TABLE 文で指定する方法については、8-72 ページ「ALTER TABLE」を参照 してください。 構文 次に 列の追加指定の構文ダイアグラムを示します。 ADD <column_name> <datatype> NOT NULL COLUMN UNIQUE WITH FILLFACTOR n '<literal>' DEFAULT CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP CURRENT_USER NULL ADD 新規列を作成し、指定したテーブルの最終列に追加します。 CREATE TABLE 文で最後にこの列を指定してテーブルを作成する のと同じ結果になります。キーワード COLUMN はオプションで す。 <col_name> 指定したテーブルに追加する列を指定します。ALTER TABLE 文 に指定する列の名前は、一意である必要があります。テーブルに ある既存の列名とも重複できません。 8-78 SQL Reference Guide ALTER TABLE <data type> 列のデータ型を指定します。ALTER TABLE には、CREATE TABLE 文で使用できるデータ型をすべて使用できます。 DEFAULT 句に指定する値はデータ型との互換性が必要です。 データ型については、2-15 ページ「データ型」および 8-139 ペー ジ「列の定義」を参照してください。 NOT NULL 列が NULL ではないことを指定します。NOT NULL と指定した列 には、そのテーブルのすべての行に値を格納する必要があります。 値を入力しなかったり、未知の値を入力することはできません。 NOT NULL 句は SERIAL 列の指定で必要です。 UNIQUE 列が一意であることを指定します。UNIQUE と指定した列には、 重複値を格納することはできません。一意性が検証されるには、 UNIQUE と指定した各列に B-TREE インデックスを設定する必要 があります。 DEFAULT 列の DEFAULT 値を指定します。この値は、すべての既存行に適 用されます。新規列のデータ型は、デフォルト値との型互換性が 必要です。たとえば、REAL 列に 1 を割り当てるのは有効ですが、 INTEGER 列に次の文字列を割り当てるのは無効です。 'larry, moe, and curly' DEFAULT に続けて指定できるキーワードと値は、8-143 ページを 参照してください。このようなキーワードや値には <literal>、 CURRENT_DATE、CURRENT_TIME、CURRENT_TIMESTAMP、 CURRENT_USER、および NULL があります。 シリアル (SERIAL) 型以外のすべてのデータ型にはデフォルト値が 必要です。シリアル (SERIAL) 型列には、デフォルト値はありませ ん。 WITH FILLFACTOR n この句は、可変長文字 (VARCHAR) 型列にのみ適用されます。 通常の VARCHAR が取るべき列の長さの割合を指定します。この 値は、ブロックに割り当てる行サイズと行数の算出に使用されま す。 WITH FILLFACTOR を指定しない場合、rbw.config ファイルに設定 されているデフォルトの列フィル ファクタが使用されます。 rbw.config ファイルで列フィル ファクタが設定されていない場合 は、システム デフォルトである 10% が使用されます。 VARCHAR FILLFACTOR を使用したブロックごとの行数の計算に ついては、『Administrator's Guide』を参照してください。 SQL 文と RISQL 拡張機能 8-79 ALTER TABLE 使用上の注意 複数の ADD 指定を使用した場合は、ALTER TABLE 文に記述された順序で、テーブ ルの最後に各列が追加されます。 テーブルに列を追加しても、ビューは変わりません。ビューの列参照名は、ビュー の作成時にすべて展開されています。このため、ビューの基本テーブルに列を追加 しても、クエリ式として SELECT * FROM を指定したビューには、ビュー定義後に 行われた列の追加は反映されません。 例 次のステートメントは、Sales_93 という整数列を Sales テーブルに追加します。 alter table sales add column sales_93 int default 0 in_place 次のステートメントは、Origin と Ranking という 2 列を Product テーブルに追加し て新規セグメント seg30 に格納します。 alter table product add column origin char(8) default 'ABC', add column ranking int default 1 in seg30 8-80 SQL Reference Guide 列の削除 列の削除 <drop_column> は、指定したテーブルから削除する列を指定します。<drop_column> を ALTER TABLE 文で指定する方法は、8-72 ページ「ALTER TABLE」を参照してく ださい。 構文 次に 列の削除指定の構文ダイアグラムを示します。 DROP <column_name> RESTRICT COLUMN DROP 指定したテーブルから列を削除します。キーワード COLUMN は オプションです。削除した列のデータはアクセスできなくなりま す。この操作を取り消すことはできません。 <column_name> テーブルから削除する列を指定します。 RESTRICT 次の条件のいずれかが真の場合、DROP COLUMN 操作を中止しま す。 ■ ■ ■ ■ 削除する列が、ビューで直接または間接的に (SELECT * などで ) 参照される。このようなビューは、あらかじめ 削除する必要があります。 指定した列が、テーブルのプライマリ キーである。 指定した列にインデックスが設定されている。インデッ クスは、あらかじめ削除しておく必要があります。 指定した列に、フォーリン キー制約が設定されている。 例 次のステートメントは、Product テーブルの Body 列について、RESTRICT DELETE を実行します。 alter table product drop body restrict in_place SQL 文と RISQL 拡張機能 8-81 列の変更 次のステートメントは、Product テーブルに対して、複数の列の追加と削除を実行 します。 alter table product drop body restrict, add column origin char(8) default 'ABC', add column rank int default 2 in seg30 列の変更 <alter_column> は、指定したテーブルで変更する列を指定します。<alter_column> を ALTER TABLE 文で指定する方法は、8-72 ページ「ALTER TABLE」を参照してく ださい。 構文 次に 列の変更指定の構文ダイアグラムを示します。 <col_name> ALTER COLUMN RENAME AS <new_col_name> ON DELETE NO ACTION CASCADE SET DEFAULT <default_definition> DROP DEFAULT CHANGE FILLFACTOR n SET SERIAL START ( <value> ) SET SERIAL STEP ( <value> ) COMMENT NULL NOT NULL 8-82 SQL Reference Guide NULL'<character_string>' 列の変更 ALTER 既存列の変更を指定します。 <col_name> テーブルの列名を指定します。 RENAME AS 指定した列名を変更します。新しい列名は、テーブルで一意にして <new_col_name> ください。 ビューに指定されている列の名前は、ビューを削除しないと変更で きません。 ON DELETE 列の参照整合性チェック モードを変更します。この動作は、フォー リン キーで参照されたテーブルから行を削除するときに行われま す。ON DELETE 句は、フォーリン キーとして設定された列にしか 適用できません。 NO ACTION キーワードは、参照先テーブルの行を削除すると参照 元テーブルの参照整合性が維持できなくなる場合に、行を削除しな いことを指定します。 CASCADE キーワードは、参照先テーブルの行を削除すると参照元 テーブルの参照整合性が維持できなくなる場合に、その行を参照し ている参照元テーブルの行も削除することを指定します。この動作 は、アウトボード テーブルとその参照元テーブルにも適用されま す。 削除モードの動作を示す例については、8-171 ページ「DELETE」 と『Administrator's Guide』を参照してください。 ヒント : 複数の列からなるフォーリン キーの削除動作を変更する場合は、フォー リン キー制約名を <col_name> に指定してください。1 つの列からなるフォーリン キーの場合は、列名を <col_name> に指定できます。 SET SERIAL START シリアル (SERIAL) 型の <start_value> を指定値にリセットします。 その後、現在格納されている最大の SERIAL 値がリセットされ、こ の値から次のシリアル (SERIAL) 型値が生成されます。 シリアル (SERIAL) 型値の重複を防ぐため、テーブルに現在格納さ れている行のシリアル (SERIAL) 型列の最大値を指定します。 SERIAL 値が格納されているテーブルに行を追加するたびに、その 行の値が現行の格納値と照合されます。格納値よりも挿入した値の 方が大きい場合、格納値が挿入した値で更新されます。格納された SERIAL 値が自動的に生成される場合、制約により新規の値はテー ブルに格納されている値と同じになることはありません。 警告 : <start_value> を手動で設定した場合や挿入動作中にシリアル (SERIAL) 型値 を入力した場合は、シリアル (SERIAL) 型値の一意性が保証されません。 SQL 文と RISQL 拡張機能 8-83 列の変更 次の 2 つの操作は、エラーになります。 ■ ■ SET SERIAL STEP シリアル (SERIAL) 型以外の列で開始値を設定しようとし た場合 シリアル (SERIAL) 型列で SET DEFAULT または DROP DEFAULT のオプションを使用した場合 SERIAL 列の 2 つの値の差を示す値を変更します。 <step_value> を変更した場合、格納された SERIAL 値は現行の値の ままとなります。 重要 : <step_value> と <start_value> の両方を変更する必要がある場合、先に <step_value> を変更してください。<step_value> より先に <start_value> を変更する と、誤った値が生成されます。 <value> 0 より大きく 231 未満の数値リテラルを示します。デフォルト値は 1 です。 SET DEFAULT <default_definition> 列の新しいデフォルト値を指定します。このデフォルト値は、 列に値が格納されていない新規行に使用されます。列のデフォ ルト値を指定しないと、デフォルトは NULL になります。NOT NULL 列にデフォルト値が指定されていない場合は、挿入操作 時に値を入力する必要があります。値を入力しないと、データ ベース サーバまたは TMU がエラー メッセージを返します。 <default_definition> は、CREATE TABLE 文の <column_definitions> 句について説明したとおり、リテラル、 デフォルト関数、NULL のいずれかを指定できます。有効なデ フォルト値については、8-143 ページを参照してください。 DROP DEFAULT テーブルの作成時または先の ALTER TABLE 文で明示的に設定 されたデフォルトを削除します。列のデフォルト値は暗黙のデ フォルト設定である NULL に戻ります。 CHANGE FILLFACTOR n ブロックに含める行数を決定する可変長文字 (VARCHAR) 型列 のフィル ファクタを変更します。このステートメントは、 テーブルにアタッチされた既存のデータやセグメントは変更し ません。新しいフィル ファクタは、テーブルを書き換える ALTER TABLE ADD COLUMN 文または DROP COLUMN 文で 使用されます。 フィル ファクタの詳細については、『Administrator's Guide』を 参照してください。 8-84 SQL Reference Guide 列の変更 COMMENT 列にコメント文字列を割り当てます。コメントは、 RBW_COLUMNS システム テーブルに格納されます。256 バ イトまで入力できます。データベースはこのコメント テキス トを無視します。 NULL を指定すると、コメント文字列が NULL に置き換えられます。 NULL、NOT NULL 指定した列を NULL から NOT NULL、またはその逆に置き換 えます。指定するテーブルは基本テーブルである必要がありま す。列が次のいずれかに属する場合、その列を NULL または NOT NULL に変更することはできません。 ■ ■ ■ ■ ■ ■ システム テーブル DST テンポラリ テーブル モデル テーブル シノニム 派生テーブル ( ビューや集約テーブルなど ) 列を NULL または NOT NULL に変更するユーザは、通常の DDL 権限を持っている必要があります。次の場合、列を NULL または NOT NULL に変更することはできません。 ■ ■ データベースがバージョン管理され、クエリ リビ ジョンが固定されている場合 事前計算ビューが変更する列を参照している場合 次のいずれかに当てはまる場合、ALTER COLUMN NULL 操作 はエラーになります。この場合、列は NOT NULL のままにな ります。 ■ ■ ■ ■ ■ ■ ■ UNIQUE 指定列 シリアル (SERIAL) 型列 セグメント化の基準列 プライマリ キーに属する列 フォーリン キーに属する列 複数列の B-TREE インデックスに属する列 階層構造の From 列 列がすでに NULL 値を持つ場合、これを NOT NULL に変更する ことはできません。このため、ALTER COLUMN NOT NULL 文 を実行すると、テーブル全体がインデックス スキャンまたは テーブル スキャンによってチェックされます。指定した列に NULL 値が見つかると、操作はエラーとなります。このスキャン には時間がかかります。ALTER COLUMN 文を実行する前に、ク エリで列データの内容を確認しておくことをお勧めします。 SQL 文と RISQL 拡張機能 8-85 制約の追加 例 次のステートメントは、Distributor という列名を Distrib に変更します。 alter table product alter column distributor rename as distrib 次のステートメントは、Market テーブルの State 列のデフォルト値 CA を指定しま す。 alter table market alter column state set default 'CA' 制約の追加 <add_constraint> は、参照元テーブルにフォーリン キー制約を追加します。 構文 次に 制約の追加指定の構文ダイアグラムを示します。 , ADD FOREIGN KEY ( <column_name> ) <constraint_name> CONSTRAINT <table_name> REFERENCES , ( <primary_key_column> INITIALLY ON DELETE CASCADE ) IMMEDIATE DEFERRED NO ACTION <constraint_name> 8-86 SQL Reference Guide 追加するフォーリン キー制約の名前を指定します。制約名はオ プションです。制約名を指定する場合は、その前に CONSTRAINT キーワードを入力し、既存の制約名以外を指定 します。制約名を指定しないと、デフォルトの制約名が割り当 てられます。制約名の詳細については、8-149 ページ「プライ マリ キーとフォーリン キー制約名」を参照してください。 制約の追加 <column_name> 変更するテーブル内の列名を指定します。テーブルからは、少 なくとも 1 つの列を指定する必要があります。各列を NULL 値 不可と指定する必要があります。列名リストはかっこで囲み、 その前に FOREIGN KEY キーワードを入力してください。指定 した列のデータ型は、参照先テーブルのプライマリ キー列の データ型と同じである必要があります。 SERIAL 列をフォーリン キーとして参照することはできませ ん。 <table_name> 変更するテーブル内のフォーリン キー参照になるプライマリ キーが含まれるテーブルを指定します。 <primary_key_ column> 参照先テーブルの列名を指定します。任意の数の列名を指定で きますが、参照先テーブルのプライマリ キー列と一致する必要 があります。列名リストは、かっこで囲みます。 ON DELETE 制約の参照整合性チェック モードを定義します。この動作は、 フォーリン キーで参照されたテーブルから行を削除するときに 行われます。 NO ACTION キーワードは、参照先テーブルの行を削除すると 参照元テーブルの参照整合性が維持できなくなる場合に、行を 削除しないことを指定します。 CASCADE キーワードは、参照先テーブルの行を削除すると参 照元テーブルの参照整合性が維持できなくなる場合に、その行 を参照している参照元テーブルの行も削除することを指定しま す。この動作は、アウトボード テーブルとその参照元テーブル にも適用されます。 削除モードの動作を示す例については、8-171 ページ 「DELETE」および『Administrator's Guide』を参照してくださ い。 INITIALLY IMMEDIATE、 DEFERRED 新しい制約 ( フォーリン キー参照 ) の列値に対して参照整合性 チェックが実行されるかどうかを指定します。IMMEDIATE は 参照整合性を即時チェックすることを示し、DEFERRED は参 照整合性をチェックしないことを示します。デフォルトは IMMEDIATE です。 ヒント : INITIALLY DEFERRED オプションは、参照整合性違反を検査しないた め、参照整合性が検証されていることが確実な場合に限り使用してください。たと えば、フォーリン キー参照のあるテーブルのシノニムを作成して、参照元テーブル から作成したシノニムに新しいフォーリン キー制約を追加したとします。この場 合、元の基本テーブルの参照整合性が検証されていることはわかっているので、シ ノニムの参照整合性が検証されていることは確実です。 SQL 文と RISQL 拡張機能 8-87 制約の追加 使用上の注意 1 つのテーブルには、256 までのフォーリン キーを設定できます。 すべてのフォーリン キー参照にユーザ定義制約名を付けることをお勧めします。複 数の列から成るフォーリン キーを参照するにはユーザ定義制約名を使用する必要が あります。そうしないと、それらのフォーリン キーに STAR インデックスを作成で きません。 ALTER TABLE ADD CONSTRAINT 文の実行が失敗した場合は、ALTER TABLE RESET 文でリセットできますが、ALTER TABLE RESUME 文では再開できません。 ALTER TABLE ADD CONSTRAINT 文が失敗するのは、参照先テーブルのプライマ リ キー列に、システムが生成した、またはユーザが定義した B-TREE インデックス がない場合です。 新しい制約を追加することにより、変更されるテーブルが参照整合性に違反する か、参照整合性がループする場合も、ALTER TABLE ADD CONSTRAINT 文は失敗 します。新しい制約を設定する列の既存の値は、参照先テーブルのプライマリ キー にある必要があります。 すでに制約のあるテーブルから、それ自身に対する制約を追加することはできませ ん。たとえば、table2 から table1 に対する制約がすでに存在する場合、table1 から table2 に対する制約を追加することはできません。このようなテーブル設定を行う と、参照整合性がループします。 フォーリン キー列の SERIAL 列を、SERIAL 値として参照することはできません。 SERIAL 列をフォーリン キーとして参照する場合は、フォーリン キー列を INTEGER 列として指定する必要があります。シリアル (SERIAL) データ型の詳細に ついては、2-21 ページを参照してください。 例 Orders テーブルのフォーリン キー参照を Promotion テーブルの Promokey 列に追加 するには、次の ALTER TABLE 文を実行します。 alter table orders add foreign key(promokey) references promotion(promokey) このステートメントを実行するには、Orders テーブルに Promokey 列が存在し、 Promokey 列が Promotion テーブルのプライマリ キーである必要があります。 Sales テーブルには、プライマリ キー列 Perkey、Promokey、Custkey があり、それ ぞれ Period、Promotion、Customer テーブルを参照します。2 つの列からなるプラ イマリ キーを持つ Product テーブルにフォーリン キー参照を追加するには、次の ALTER TABLE 文を実行します。 8-88 SQL Reference Guide 制約の削除 alter table sales add constraint product_fkc foreign key(classkey, prodkey) references product(classkey, prodkey) 制約の削除 <drop_constraint> は、フォーリン キー制約の削除に使用します。 構文 次に 制約の削除指定の構文ダイアグラムを示します。 DROP CONSTRAINT <constraint_name> <constraint_name> 削除するフォーリン キー制約の名前を指定します。制約名の詳 細については、8-149 ページ「プライマリ キーとフォーリン キー制約名」を参照してください。 使用上の注意 指定したフォーリン キーに STAR インデックス キーが設定されていると、ALTER TABLE DROP CONSTRAINT 文が失敗します。インデックスは、あらかじめ削除し ておく必要があります。変更するテーブルに STAR インデックスが設定されていて も、削除するフォーリン キー以外のフォーリン キーで構成されている場合は正常 に実行されます。 プライマリ キー制約は削除できません。 例 次の例は、Sales テーブルから product_fkc 制約を削除します。 alter table sales drop constraint product_fkc SQL 文と RISQL 拡張機能 8-89 制約の変更 制約の変更 <alter_constraint> は、基本テーブルのフォーリン キー参照をシノニムのフォーリン キー参照に変更します。同様に、シノニムのフォーリン キー参照を基本テーブルの フォーリン キー参照または基本テーブルのほかのシノニムのフォーリン キー参照 に変更します。 構文 次に 制約の変更指定の構文ダイアグラムを示します。 ALTER CONSTRAINT REFERENCES ON DELETE <constraint_name> <referenced_table_name> CASCADE NO ACTION <constraint_name> 参照元テーブルの CREATE TABLE 文に指定した、変更する フォーリン キー制約名を指定します。1 つの列からなるフォー リン キー参照の場合は、列名も制約名の指定に使用できます。 フォーリン キー参照の制約名の詳細については、8-146 ページ 「フォーリン キー参照」を参照してください。 <referenced_table_ name> 8-90 SQL Reference Guide CREATE TABLE 文で初期参照した基本テーブルから作成された シノニム、または基本テーブル名自体を指定します。シノニム を初期参照した場合は、基本テーブルまたは基本テーブルから 作成されたほかのシノニムを <referenced_table_name> に指定で きます。 制約の変更 ON DELETE 制約の参照整合性チェックのモード、つまりフォーリン キーが 参照しているテーブルから行が削除されたときの動作を指定し ます。 NO ACTION キーワードは、参照先テーブルの行を削除すると 参照元テーブルの参照整合性が維持できなくなる場合は、行を 削除しないことを指定します。 CASCADE キーワードは、参照先テーブルの行を削除すると参 照元テーブルの参照整合性が維持できなくなる場合に、その行 を参照している参照元テーブルの行も削除することを指定しま す。この動作は、アウトボード テーブルとその参照元テーブル にも適用されます。 使用上の注意 ALTER TABLE ALTER CONSTRAINT 文は、共通の参照先テーブルを持つ複数の参 照元テーブルを結合するクエリの性能を調整することができます。参照元テーブル が基本テーブルの代わりにシノニムを参照する場合は、標準の STARjoin アルゴリ ズムではなく、ハッシュ結合アルゴリズムまたは B-TREE 1-1 マッチ アルゴリズム を使用することができます。 例 次の ALTER TABLE 文は、フォーリン キー参照を変更して Aroma データベースの Sales テーブルを変更します。 alter table sales alter constraint sales_date_fkc references period_syn1 CREATE TABLE 文で指定した Period テーブルを参照する代わりに、フォーリン キー制約 period_fkc は、Period_Sny1 シノニムを参照するようになります。 sales_date_fkc は 1 つの列からなるフォーリン キー参照であるため、列名 Perkey も 制約名の指定に使用することができます。 alter table sales alter constraint perkey references period_syn1 次のステートメントは、参照先テーブルを元の基本テーブルに戻します。 alter table sales alter constraint sales_date_fkc references period SQL 文と RISQL 拡張機能 8-91 制約の変更 次のステートメントは、参照先テーブルを Period テーブルのほかのシノニムに変更 します。 alter table sales alter constraint sales_date_fkc references period_syn2 8-92 SQL Reference Guide ALTER USER ALTER USER ALTER USER 文は、ユーザの優先順位を変更したり、ユーザにコメントを割り当て します。 アクセス権 ユーザを変更するユーザは、次の中で少なくとも 1 つの条件を満たしている必要が あります。 ■ ■ DBA システム ロールのメンバーであること USER_MANAGEMENT タスク権限を持っていること 構文 次に ALTER USER 文の構文ダイアグラムを示します。 ALTER USER <db_username> SET PRIORITY COMMENT <integer> '<character_string>' NULL <db_username> 有効なデータベース ユーザ名を指定します。 SET PRIORITY そのユーザが起動したすべてのセッションについて、優先順位を指 <integer> 定します。0 ∼ 100 の整数で指定してください。最優先の順位は 0 です。 COMMENT ユーザ名を説明するコメントを割り当てます。コメントは、 RBW_USERAUTH システム テーブルに格納されます。256 バイト まで入力できます。データベースはこのコメント テキストを無視し ます。 NULL を指定すると、コメント文字列が NULL に置き換えられます。 SQL 文と RISQL 拡張機能 8-93 ALTER VIEW 使用上の注意 ユーザの優先順位は、0 ∼ 100 (0 が最優先 ) の整数で指定します。優先順位の値は、 異なるユーザが起動したセッションの相対的な重要度を示すものです。優先順位の 高いユーザの実行したクエリは、優先順位の低いユーザのクエリより優先的に CPU を使用できます。ユーザの優先順位は、CPU 以外のシステム リソースの使用や、 テーブル ロックには影響しません。 データベース管理者は、GRANT CONNECT 文によってユーザをデータベースに追 加するときに、ユーザ優先順位を設定することができます。ユーザの優先順位を指 定していない場合、デフォルトの優先順位は 50 になります。 UNIX ユーザ優先順位をサポートするには、UNIX の renice コマンドを 実行できるプラットフォームを使用してください。ADMIN RENICE_COMMAND 構成パラメータに renice スクリプトのフル パス名を指定してください。 Windows NT ユーザ優先順位を指定する整数は、対応する優先レベル (1 ∼ 36) にマッピングされます。 ALTER VIEW ALTER VIEW 文は、ビューまたはビューの列にコメントを付けます。ビューのコメ ントは、RBW_VIEWS および RBW_TABLES システム テーブルに格納されます。 ビューの列のコメントは、RBW_COLUMNS システム テーブルに格納されます。 ALTER VIEW 文を使用して、事前計算ビューの保守タイプと有効性を変更すること もできます。 アクセス権 ビューを変更するユーザは、次の中で少なくとも 1 つの条件を満たしている必要が あります。 ■ ■ ■ ■ DBA システム ロールのメンバーであること 明示的に付与されるかユーザが作成したロールのメンバーであることによ り、ALTER_ANY 権限を持っていること RESOURCE システム ロールのメンバーで、かつビューの作成者であるこ と ビューの作成者であり、明示的に付与されるかユーザが作成したロールの メンバーであることにより、ALTER_OWN 権限を持っていること 8-94 SQL Reference Guide ALTER VIEW 構文 次に ALTER VIEW 文の構文ダイアグラムを示します。 ALTER VIEW <view_name> COMMENT ALTER COLUMN <col_name> SET VALID INVALID SET MAINTENANCE ON REBUILD OFF <view_name> 変更するビューの名前を指定します。 ALTER COLUMN ビューの変更する列の名前を指定します。 <col_name> SQL 文と RISQL 拡張機能 8-95 CHECK INDEX SET VALID/ INVALID 事前計算ビューを有効または無効とマークし、RBW_VIEWS テーブルを更新します。このステートメントにはデフォルトは ありません。 SET MAINTENANCE 各事前計算ビューについて集約保守を ON、OFF または REBUILD に設定します。RBW_VIEWS テーブルの MAINTENANCE 列には、この設定の値がビューごとに示され ます。デフォルトの設定は ON です。 特定のビューについて MAINTENANCE を ON に設定した場合、 データベース サーバはそのビューで差分保守を実行しようとし ますが、差分保守ではなく REBUILD の保守を実行することが あります。設定が REBUILD の場合、REBUILD の保守だけが実 行されます。REBUILD の保守は、詳細テーブルまたはその他の ( グラニュラリティの高い ) 集約を使用して実行されます。 特定の事前計算ビューを保守するには、 PRECOMPUTED_VIEW_MAINTENANCE オプションを ON に設 定し、そのビューの MAINTENANCE を ON または REBUILD に 設定する必要があります。 COMMENT ビューまたはビューの列を説明するコメントを割り当てます。 ビューのコメントは、RBW_VIEWS および RBW_TABLES シ ステム テーブルに格納されます。列のコメントは、 RBW_COLUMNS システム テーブルに格納され、256 バイトま で入力できます。コメントのテキストは、データベース サーバ が使用するものではありません。 次にコメント文字列の構文ダイアグラムを示します。NULL を指定すると、コメン ト文字列が NULL に置き換えられます。 COMMENT '<character_string>' NULL CHECK INDEX CHECK INDEX 文は、インデックスの破損を調べ、インデックスの構成情報および サイズ情報を表示します。CHECK INDEX 文は、どの種類のインデックスにも使用 できます。 8-96 SQL Reference Guide CHECK INDEX 構成情報には次の内容が含まれます。 ■ ■ ■ ■ インデックス キーのサイズと種類 インデックス ブロックごとのエントリの最大数 インデックスの格納先セグメントの数 インデックス (STAR インデックスのみ ) 内で参照されている各テーブルの MAXROWS PER SEGMENT 値 サイズ情報には次の内容が含まれます。 ■ ■ インデックス エントリの数 インデックスの各セグメントで、リーフ ノードおよびインナー ノードと して使用されているインデックス ブロックの数 アクセス権 CHECK INDEX 文を実行するユーザは、DBA システム ロールのメンバーである必要 があります。 構文 次に CHECK INDEX 文の構文ダイアグラムを示します。 CHECK INDEX <index_name> SEGMENT <segment_name> DIRECTORY '<directory_name>' VERBOSE VALIDATE NORMAL FULL DESCRIBE <index_name> チェックするインデックスの名前を指定します。 SEGMENT <segment_name> CHECK INDEX を実行する名前付きセグメントを指定します。 指定できるセグメントは 1 つだけです。<segment_name> を指定 した場合、指定したセグメントだけがチェックされ、そのセグ メントに関する結果だけが表示されます。 SQL 文と RISQL 拡張機能 8-97 CHECK INDEX DIRECTORY <directory_name> CHECK INDEX 操作からの詳細情報ファイルの書き込み先ディ レクトリを指定します。セグメントごとに個別のファイルが作 成されます。ファイル名にはセグメント ID、プロセス ID、タイ ムスタンプが含まれます。 rbw.config ファイル内で CHECK_REPORT_FILE_PERMISSIONS オプションを使って別のファイル アクセス権を設定しない限 り、これらのファイルの読み書きを実行できるのは redbrick ユーザのみです。オプションの値は次のとおりです。 ■ ■ ■ SERVER_OWNER : redbrick ユーザに読み書き権を与 えます。 これはデフォルトのオプションです。 SERVER_GROUP : グループに読み取り専用権を与え ます。 この値は UNIX システムでしか使用できません。 ALL : すべてのユーザに読み取り専用許可を与えます。 指定したディレクトリのあるディスクが書き込み禁止に設定さ れている場合、または存在しない場合は、エラーが返されます。 CHECK INDEX 出力ファイルの解釈については、 『Administrator's Guide』を参照してください。 VERBOSE 出力情報を verbose フォーマットに指定します。このフォーマッ トでは、CHECK INDEX が実行する各関数の簡単な説明が含ま れます。 VALIDATE FULL を選択すると、CHECK INDEX はインデックスをトラバー スし、各インデックス キーに対して、インデックスが参照する テーブルの行を取り出します。行を取り出した後、CHECK INDEX は行内のキーとインデックス内のキーを比較し、合致し ていることを確認します。また、各インデックス エントリが一 意の行を指し、参照先テーブルの各行がそれぞれ 1 つのイン デックス エントリによって指し示されていることを確認しま す。参照先テーブルの行が取り出され、インデックス全体がト ラバースされるため、この操作には非常に時間がかかることが あります。 セグメント名を指定した場合は、参照先テーブルの各行がそれ ぞれ 1 つのインデックス エントリによってポイントされている ことは確認されませんが、上記のその他の検証はすべて行われ ます。 デフォルトの NORMAL は、行ごとの検証以外の検証を行います。 8-98 SQL Reference Guide CHECK TABLE DESCRIBE 構成情報をすばやく表示して、インデックスの検証やサイズ情 報の計算を行わずに終了します。CHECK INDEX で大きなイン デックスを検証すると非常に時間がかかるため、構成情報だけ を知りたい場合は DESCRIBE を指定してください。 例 次のステートメントは、Market テーブルに CHECK INDEX 操作を実行し、結果を /docs/idx_results ディレクトリに格納します。 check index market_pk_idx directory '/docs/idx_results' INFORMATION Index: 1 Segment: 2 is ok Index validation succeeded この例では、より詳細な結果が /docs/idx_results ディレクトリに格納されます。 CHECK TABLE CHECK TABLE 文は、テーブル格納データ構造およびテーブルの行カウントの破損 を調べ、オプションで修復も行います。CHECK TABLE は参照整合性をチェックし ません。また、列が NOT NULL 句で定義されている場合は NULL 値をチェックしま せん。 CHECK TABLE 文は、出力結果を複数の行で返します。解析対象テーブルのスキー マに関係なく、行は単一 CHAR(1024) 列として定義されます。CHECK TABLE を実 行すると、CHECK TABLE 操作から出力された詳細情報を含む一連のテキスト ファ イルも生成されます。これらのテキスト ファイルは、ユーザが指定したディレクト リ内に作成されます。 アクセス権 CHECK TABLE 文を実行するユーザは、DBA システム ロールのメンバーである必要 があります。 SQL 文と RISQL 拡張機能 8-99 CHECK TABLE 構文 次に CHECK TABLE 文の構文ダイアグラムを示します。 CHECK TABLE <table_name> SEGMENT <segment_name> DIRECTORY ‘<directory_name>’ VERBOSE <table_name> FIX チェックするテーブルの名前を指定します。基本テーブルを指定 してください。シノニム、ビュー、テンポラリ テーブル、システ ム テーブルはチェックできません。 SEGMENT CHECK TABLE を実行する名前付きセグメントを指定します。指 <segment_name> 定できるセグメントは 1 つだけです。<segment_name> を指定した 場合、テーブル内の指定されたセグメントでの検証だけが報告さ れます。大きなテーブル内の特定のセグメントだけを検証する必 要がある場合にこのオプションを使うと、非常に時間が節約でき ます。 DIRECTORY CHECK TABLE 操作から出力される詳細情報ファイルを書き込む <directory_name> ディレクトリを指定します。セグメントごとに個別のファイルが 作成されます。ファイル名には、テーブル ID、セグメント ID、 プロセス ID、タイムスタンプが含まれます。 rbw.config ファイル内で CHECK_REPORT_FILE_PERMISSIONS オ プションを使って別のファイル アクセス権を設定しない限り、こ れらのファイルの読み書きを実行できるのは redbrick ユーザのみ です。オプションの値は次のとおりです。 ■ ■ ■ SERVER_OWNER : redbrick ユーザに読み書き権を与え ます。 これはデフォルトのオプションです。 SERVER_GROUP : グループに読み取り専用権を与えま す。 この値は UNIX システムでしか使用できません。 ALL : すべてのユーザに読み取り専用許可を与えます。 指定したディレクトリのあるディスクが書き込み禁止に設定され ている場合、または存在しない場合は、エラーが返されます。 8-100 SQL Reference Guide CHECK TABLE VERBOSE 出力情報を、ユーザが指定したディレクトリ内に作成されるテキ スト ファイルに verbose フォーマットでレポートするよう指定し ます。VERBOSE オプションは、CHECK TABLE が実行する各関 数の簡単な説明とセグメント統計を出力します。 これらのテキスト ファイルは、VARCHAR FILLFACTOR 値の効力 の判断や、チェック操作中のエラーのトラブルシュートに利用で きます。これらのテキスト ファイルの解釈については、 『Administrator's Guide』を参照してください。 FIX CHECK TABLE で見つかった問題を修復することを指定します。 修復が行われた場合、ALTER SEGMENT 文を VERIFY オプション とともに実行し、セグメントが修復されていることを確認してか ら次の CHECK TABLE ... FIX 文を実行する必要があります。FIX オプションを指定すると、CHECK TABLE は逐次実行されます。 警告 : CHECK TABLE 操作を FIX モードで実行する場合は、実行する前に、デー タベースの最新のバックアップがあることを確認し、IBM テクニカルサポートに連 絡してください。 例 このステートメントは、Market テーブルに CHECK TABLE 操作を実行し、結果を /docs/tbl_results ディレクトリに格納します。 check table market directory '/docs/tbl_results' INFORMATION Table: 1 Segment: 1 is ok No inconsistencies were detected. この例では、より詳細な結果が /docs/tbl_results ディレクトリに格納されます。 SQL 文と RISQL 拡張機能 8-101 CREATE HIERARCHY CREATE HIERARCHY CREATE HIERARCHY 文は、1 つのテーブルまたは複数のテーブルにある列の間に、 1 つまたは複数の関数従属性を指定します。関数従属性は、2 つの列間に存在する 多対 1 の関係です。階層構造指定は、Vista クエリ リライト システムが集約クエリ を書き換えるために利用する事前計算ビューの判定に使用されます。 階層構造は注意して指定してください。多対 1 の関係を満たさない値を持つ列に階 層構造を指定すると、書き換えられたクエリが警告メッセージなしに不正な結果を 返すことがあります。管理ツールを使用して階層構造を作成する場合を除き、階層 構造を指定するときに、ウェアハウス サーバによる階層構造の検証は行われませ ん。また、データベースが変更されたために有効な階層構造が無効になったときで もユーザに通知されません。したがって、管理者が階層構造を指定する前に階層構 造の妥当性を検証し、無効になった階層構造を削除する必要があります。 階層構造の使用の詳細については、 『IBM Red Brick Vista User’s Guide』を参照してく ださい。 アクセス権 階層構造を作成するユーザは、次の中で少なくとも 1 つの条件を満たしている必要 があります。 ■ ■ DBA システム ロールか、RESOURCE システム ロールのメンバーであるこ と 明示的に付与されるかユーザが作成したロールのメンバーであることによ り、CREATE_ANY 権限を持っていること 8-102 SQL Reference Guide CREATE HIERARCHY 構文 次に CREATE HIERARCHY 文の構文ダイアグラムを示します。 CREATE HIERARCHY ( <hierarchy_name> , ) <from_to_definition> ON <constraint_name> <hierarchy_name> 1 つまたは複数の関数従属性を参照することができる階層構 造の名称を指定します。どの階層構造名も、一意の名前で ある必要があります。 <from_to_definition> 関数従属性が設定されているテーブルまたは列を指定しま す。この関係は、1 つの同じテーブルの列間でも 2 つのテー ブルの列間でもかまいません。最初の列 (from 列 ) はテーブ ルの作成時に NOT NULL と指定されている必要があります。 そうしないと、エラーメッセージが表示されます。 次に <from_to_definition> 句の構文ダイアグラムを示します。 FROM <table_name (column_name) > TO <table_name (column_name)> > SQL 文と RISQL 拡張機能 8-103 CREATE HIERARCHY ON <constraint_name> 従属性が指定されたフォーリン キー制約を指定します。ON 句で指定するフォーリン キー制約名は CREATE TABLE 文で 指定したフォーリン キー制約名と同じである必要がありま す。 指定したテーブル間に 1 つのフォーリン キー / プライマリ キー関係がある場合は、ON 句はオプションです。ただし、 フォーリン キー / プライマリ キー関係が複数存在する場合 は、ON 句は必須です。1 つのテーブルの列間にフォーリン キー / プライマリ キー関係がある場合は、ON 句は指定でき ません。 2 つのテーブルの列間の関係は、フォーリン キー / プライマ リ キー関係に基づいている必要があります。この場合、階 層構造は、最初のテーブルの列と 2 番めのテーブルを参照す る最初のテーブルのフォーリン キー列の間の関数従属性を 表します。この関数従属性から、参照先テーブルのすべて の列のロールアップを暗黙的に指定したことになります。 1 つの階層構造名で複数の従属性を設定することができま す。ただし、各関係には、個別の <from_to_definition> が必 要です。 ヒント : ほかの列にロールアップする複数の対の列を指定することはできません。 階層構造には、1 対 1 で列を指定する必要があります。 例 次の例は、1 つのテーブルの列間の関数従属性を指定します。 create hierarchy district_region ( from market (district) to market (region)) 次の例は、2 つのテーブルの列間の関数従属性を指定します。 create hierarchy store_market ( from store (store_name) to market (district) on store_fkc) 次の例は、1 つのテーブルまたは 2 つのテーブルの列間に複数の関数従属性を使用 した階層構造を指定します。 create hierarchy store_market_relationship ( from store (store_type) to market (district) on store_fkc, from store (zip) to market (region) on store_fkc, from store (store_name) to store (city)) 8-104 SQL Reference Guide CREATE INDEX 次のテーブルの対の値を比較してください。Period テーブルに 2 番めの値集合が含 まれる場合は、各年に対して第 1 四半期の値、第 2 四半期の値などが一意であるた め、Qtr 列から Year 列までの階層構造は有効です。Period テーブルに最初の値集合 が使用される場合は、Qtr 列が 1998、1999 年に対して同じ第 1 四半期の値 (Q1) を使 用しているため、階層構造は無効です。 無効な関係 有効な関係 Qtr 列 Year 列 Qtr 列 Year 列 Q1 1998 Q1_98 1998 Q2 1998 Q2_98 1998 Q3 1998 Q3_98 1998 Q4 1998 Q4_98 1998 Q1 1999 Q1_99 1999 ... ... ... ... CREATE INDEX 各テーブルに自動的に作成されるプライマリ キー インデックス以外に、CREATE INDEX 文で任意の数のインデックスを作成することができます。 インデックスの作成には次の制限が適用されます。 ■ ■ ■ ■ 同じテーブルのインデックスであれば 1 つの CREATE INDEX 文で複数のイ ンデックスが作成できます。 STAR、B-TREE、TARGET の各インデックスは、テーブルが空であって も、データが格納されていても作成することができます。実行中のクエリ が使用していないインデックスは、削除できます。 テンポラリ テーブルには、STAR インデックスを作成できません。 SERIAL 列にインデックスを作成することをお勧めします。これはシリア ル番号が位置の番号でもテーブルの行の位置を示すものでもないためで す。シリアル番号による行へのアクセスには、インデックス、またはテー ブルのスキャンが必要です。 SQL 文と RISQL 拡張機能 8-105 CREATE INDEX アクセス権 テーブルのインデックスを作成するユーザは、次の中で少なくとも 1 つの条件を満 たしている必要があります。 ■ ■ ■ ■ DBA システム ロールのメンバーであること 明示的に付与されるかユーザが作成したロールのメンバーであることによ り、CREATE_ANY 権限を持っていること RESOURCE システム ロールのメンバーで、かつテーブルの作成者である か、そのテーブルに対する SELECT 特権を持っていること CREATE_OWN 特権を持っていて、テーブルの作成者であるか、そのテー ブルに対する SELECT 特権を持っていること 構文 次に CREATE INDEX 文の構文ダイアグラムを示します。 , INDEX CREATE <index_specifier> STAR TARGET ON ERROR STAR CONTINUE IMMEDIATE ABORT DEFERRED 指定したフォーリン キーの STAR インデックスを作成します。1 つ のテーブルに複数の STAR インデックスがある場合は、フォーリン キーのサブセット、順序またはその両方がインデックスごとに異 なっている必要があります。 MAXROWS PER SEGMENT の値が指定されていないほかのテーブ ルのプライマリ キーをフォーリン キーが参照している場合、 CREATE STAR INDEX 文の実行は失敗します。詳細については、 8-137 ページ「CREATE TABLE」を参照してください。 テンポラリ テーブルには、STAR インデックスを作成できません。 8-106 SQL Reference Guide CREATE INDEX B-TREE インデックスとして STAR、TARGET のどちらも指定されていない 場合は、B-TREE がデフォルトです。 INDEX キーワードの前にインデックスのタイプを指定しないと、 B-TREE インデックスがテーブルに作成されます。このインデック スを使うと、比較述部による検索の処理時間が短縮されます。BTREE インデックスは、すべてのデータ型の列で作成できます。 テーブルの作成時には、そのテーブルのプライマリ キーについて、 デフォルトの B-TREE インデックスが自動的に作成されます。 CREATE TABLE 文のセグメント指定構文では、デフォルト B-TREE インデックスをプライマリ キー インデックスと呼んでいます。 テーブルのインデックスの選択の詳細については、『Administrator's Guide』を参照してください。 TARGET テーブルの指定した列について、TARGET インデックスを作成し ます。 1 つのテーブルに複数の TARGET インデックスを作成することはで きますが、単一の一意でない列に 1 つずつ作成してください。複数 の列から構成される TARGET インデックスは作成できません。 TARGET インデックスの順序で、テーブルをアンロードすること はできません。UNLOAD 操作には、B-TREE インデックスか STAR インデックスを使用してください。B-TREE インデックスについて は、8-106 ページを参照してください。 選択性の低い複数の列を制約する検索は、TARGET インデックス を使用すると性能が向上します。一般に、非常に大きなテーブルで 列のドメイン ( 可能値の集合 ) が小さければ、選択性が低くなりま す。たとえば、Employees テーブルの Gender 列のドメインには、 Male と Female の 2 つの値しかありません。この列の制約は選択性 が低くなり、非常に多くの行が抽出されます。 ドメインが大きくても、選択性が低くなる場合があります。たとえ ば、同じ Employees テーブルの Age 列は、Gender 列より大きなド メインですが、年齢を制約した検索も選択性が低い場合がありま す。特に、ドメイン内のデータの分布に偏りがある場合や、データ の多くが含まれる値に制約して検索する場合にこのことがいえま す。 TARGET インデックスは、TARGETjoin 処理を有効にすることもで きます。TARGETjoin 操作については、『Administrator's Guide』およ び『Query Performance Guide』を参照してください。 SQL 文と RISQL 拡張機能 8-107 CREATE INDEX <index_specifier> インデックス名、作成するインデックスの対象となるテーブル、イ ンデックス キーの列名、セグメントを指定します。テンポラリ テーブルには、フォーリン キー制約とセグメント定義はできませ ん。<index_specifier> の構文については、8-109 ページ「インデッ クス指定」を参照してください。 ON ERROR ABORT を指定した場合は、作成できないインデックス が 1 つでもあると、すべてのインデックス作成が中止されます。 ERROR ON ERROR CONTINUE を指定するか ERROR 句を省略すると、作 成できないインデックスがあっても、ほかのインデックス作成は続 行されます。 この句は、1 つのステートメントで複数のインデックスを作成する 場合に意味があります。省略した場合のデフォルト動作は CONTINUE です。 IMMEDIATE ステートメント実行時にインデックスを作成および構成します。 DEFERRED インデックス構造を作成し、RBW_INDEXES システム テーブルの STATE 列に DEFERRED というエントリを作成します。この時点で は、インデックスにデータは登録されません。TMU の REORG 操 作を使ってデータを登録しない限り、このインデックスは使用でき ません。 CREATE INDEX...DEFERRED 操作は、データからインデックスを 作成したり、ほかのインデックスからデータを導出するという時間 のかかるフェーズをスキップします。インデックスの作成を必要と しないすべての処理が実行されます。これには、特定のセグメント のテーブルへの関連付けや各種の意味妥当性検査が含まれます。通 常、CREATE INDEX...DEFERRED 操作の後で、データベース サー バより効率的にインデックスを作成できる TMU の並列再編成操作 が実行されます。 DEFERRED 状態のインデックスは空であるため、インデックスの内容を読み取っ たり書き込んだりするどの機能からもインデックスを検索できません。次の機能が これに該当します。 ■ ■ ■ クエリ 挿入、更新、削除 ロード、アンロード 遅延作成されたインデックスは、コンパイラからも見ることはできません。そのた め、遅延作成されたインデックスに対するクエリの実行プランは生成されません。 8-108 SQL Reference Guide インデックス指定 インデックス構造に対してのみ操作を加える関数からは、遅延作成された状態にあ るインデックスを見ることができます。通常は、これらの関数は遅延作成されたイ ンデックスと完全に作成されたインデックスとを区別することはできません。次の 関数は遅延作成されたインデックスを見ることができます。 ■ ■ ■ ■ ■ ■ DROP INDEX : インデックスを削除することができます。 ALTER INDEX : すべての操作が可能です。 DROP TABLE : DEFERRED インデックスを含め、テーブル内のすべての インデックスを削除します。 ALTER TABLE DROP COLUMN : 指定された列が遅延作成されたインデッ クスの構成要素である場合、この操作を実行することはできません。 CREATE INDEX : 同じ名前のインデックスや同じ種類のインデックスは、 同じ列に作成することができません。 ALTER SEGMENT : 遅延作成されたインデックス以外のインデックスに実 行可能なすべての操作は、遅延作成されたインデックスにも実行可能で す。 例 この CREATE INDEX 文は、Market テーブルを対象とした 2 つのインデックスを並 列に作成し、その 1 つをユーザが作成したセグメントに格納します。最初のイン デックス作成中にエラーが発生すると、どちらのインデックスも作成されません。 create index mkt_city_idx on market (city) in mkt_idx_seg, index mkt_district_idx on market (district) on error abort 次のステートメントは、Car_Model テーブルの Color 列について、デフォルト ドメ インの TARGET インデックスを作成します。 create target index tgt_idx1 on car_model (color) in sgmt_1 インデックス指定 <index_specifier> は、インデックス名、作成するインデックスの対象となるテーブ ル、インデックス キーの列名、セグメント情報を指定します。 SQL 文と RISQL 拡張機能 8-109 インデックス指定 構文 次に CREATE INDEX 文の構文ダイアグラムと、インデックス指定構文の参照ポイ ントを示します。 , INDEX CREATE <index_specifier> STAR TARGET ON ERROR CONTINUE IMMEDIATE ABORT DEFERRED 次にインデックス指定の構文ダイアグラムを示します。 , <index_name> ON <table_name> ( <column_name> <fkey_constraint_name> IN <segment_specification> WITH FILLFACTOR DOMAIN <n> SMALL SIZE MEDIUM LARGE 8-110 SQL Reference Guide ) インデックス指定 <index_name> インデックス名を指定します。インデックス名はデータベー ス内で一意である必要があります。 <table_name> 作成するインデックスの対象となるテーブルの名前を指定し ます。テンポラリ テーブル名は、TARGET インデックスま たは B-TREE インデックスを作成するときには指定できます が、STAR インデックスを作成するときには指定できませ ん。 STAR インデックスのフォーリン キーの参照先テーブルに は、CREATE TABLE 文で MAXROWS PER SEGMENT の値を 指定する必要があります。 <column_name> TARGET インデックスと B-TREE インデックスにインデック ス キーを指定します。 ■ ■ B-TREE インデックスに複数の列を指定する場合 は、すべての列を CREATE TABLE 文で NOT NULL と指定する必要があります。 TARGET インデックスでは、重複可能な列を 1 つだ け指定できます。 <column_name, STAR インデックスのインデックス キーを指定します。STAR fkey_constraint_name> インデックス キーは複数のフォーリン キーで構成され、そ の指定方法は 2 種類あります。 ■ ■ 列名による指定。各列名は CREATE TABLE 文で指 定した特定の単一列フォーリン キー参照を識別す る必要があります。 フォーリン キー制約名による指定。フォーリン キー制約名は、1 つ以上の列からなるフォーリン キーを識別できます。制約名は CREATE TABLE 文 で指定します。詳細については、8-149 ページ「プ ライマリ キーとフォーリン キー制約名」を参照し てください。 <segment_specification> インデックス セグメント名と、各インデックス セグメント に対する値の範囲を指定します。<segment_specification> の 構文については、8-118 を参照してください。 WITH FILLFACTOR 詳細については、8-124 を参照してください。 DOMAIN 詳細については、8-125 を参照してください。 インデックス キーは、列名と制約名を組み合わせて指定できますが、次の規則に 従ってフォーマットを統一することをお勧めします。 SQL 文と RISQL 拡張機能 8-111 インデックス指定 ■ ■ ■ フォーリン キーが単一列プライマリ キーを持つテーブルを参照している 場合は、フォーリン キー列の名前だけでインデックス キー内の列を定義 できます。ただし、フォーリン キーが複数列プライマリ キーを持つテー ブルを参照している場合は、一連の個別列名ではなく、列集合のフォーリ ン キー制約名を指定する必要があります。 CREATE STAR INDEX 文では、ユーザ定義のフォーリン キー制約名だけを 使用できます。 CREATE STAR INDEX 文に指定した名前は、まず制約名とみなされます。 これと一致する制約名が存在する場合は、その制約名が示すフォーリン キーがインデックス キーになります。存在しなければ、最初に指定した名 前が列名とみなされます。一致する名前がない場合は CREATE STAR INDEX 文の実行が失敗します。 フォーリン キーとは、NOT NULL と定義された列で、CREATE TABLE 文の FOREIGN KEY REFERENCES 句で指定された列のことです。シンプル スター ス キーマを形成するのでなければ、フォーリン キーの任意の部分を任意の順序で STAR インデックス キーに使用することができます。詳細は、8-177 ページを参照 してください。インデックス キーの順序は、フォーリン キーを指定した順番にな ります。最初の名前が先頭のキー列、2 番めが次のキー列というようになります。 8-112 SQL Reference Guide インデックス指定 例 - STAR インデックスの作成 次のような Sales テーブルを作成したとします。Perkey、Classkey、Prodkey、 Storekey、Promokey の各プライマリ キー列にデフォルトの B-TREE インデックス が作成されます。 create table sales ( perkey integer not null, classkey integer not null, prodkey integer not null, storekey integer not null, promokey integer not null, quantity integer, dollars dec(7,2), constraint sales_pkc primary key (perkey, classkey, prodkey, storekey, promokey), constraint sales_date_fkc foreign key (perkey) references period (perkey), constraint sales_product_fkc foreign key (classkey,prodkey) references product (classkey, prodkey), constraint sales_store_fkc foreign key (storekey) references store (storekey), constraint sales_promo_fkc foreign key (promokey) references promotion (promokey)) data in (daily_data1, daily_data2) segment by values of (perkey) ranges (min:415, 415:max) maxsegments 2 maxrows per segment 50000 STAR インデックスはどのような順序でも作成可能で、またフォーリン キーのサブ セットにも作成できます。シンプル スター スキーマを形成するには、プライマリ キーを構成するすべてのフォーリン キー列に STAR インデックスを作成します。た だしこの場合、デフォルトの B-TREE インデックスが STAR インデックスと重複す ることになり、データのロードと更新により多くの格納領域と処理時間が必要にな ります。このため、デフォルトの B-TREE インデックスを削除することをお勧めし ます。B-TREE インデックスの削除は、STAR インデックスの作成前でも作成後で もかまいません。 次の CREATE INDEX 文は、Perkey 列および Promokey 列に STAR インデックスを作 成し、これらの列に制約をかけて検索する頻度が最も高いクエリを効率化します。 create star index time_sales_ix on sales (sales_date_fkc, sales_promo_fkc) in (sales_seg_ix1, sales_seg_ix2) ... SQL 文と RISQL 拡張機能 8-113 セグメント定義 この場合は、フォーリン キーが制約名 sales_date_fkc と sales_promo_fkc で特定され ていますが、参照先テーブルが 1 つの列からなるプライマリ キーであるため、列名 を指定することも可能です。 create star index time_sales_ix on sales (perkey, promokey) in (sales_seg_ix1, sales_seg_ix2) ... 次の CREATE INDEX 文は、Classkey 列、Prodkey 列、および Promokey 列にイン デックスを作成し、これらの列に制約をかけて検索する頻度が最も高いクエリを効 率化します。 create star index prod_per_sales_ix on sales (sales_product_fkc, promokey) in (sales_seg_ix3, sales_seg_ix4) segment by references of (sales_product_fkc) ranges (...) この場合、フォーリン キーは、複数の列からなるプライマリ キーを持つテーブル (Product テーブル ) を参照するため、制約名 sales_product_fkc でインデックス キー を指定する必要があります。この場合は、インデックス セグメントも制約名で特定 されます。制約名の詳細については、8-149 ページ「プライマリ キーとフォーリン キー制約名」を参照してください。 セグメント定義 次にセグメント指定の構文ダイアグラムを示します。 <segment_name> IN , ( <segment_name> SEGMENT LIKE DATA ) SEGMENT LOCAL SEGMENT LIKE REFERENCED TABLE <segment_range_spec> 8-114 SQL Reference Guide セグメント定義 <segment_name> インデックスを格納するセグメントの名前を指定します。セグ メント名を指定しないと、インデックスはデフォルト セグメン トに格納されます。指定したセグメントを、ほかのインデック スやテーブルで使用することはできません。 1 つのユーザ定義セグメントまたはデフォルト セグメントを指 定した後に、ALTER SEGMENT 文を使ってインデックスにセグ メントを追加することができます。 テンポラリ テーブルには、セグメント名を 1 つしか指定できな いため、セグメントの範囲指定は適用されません。 SEGMENT LIKE DATA B-TREE インデックス、STAR インデックス、または TARGET イ ンデックスのセグメント範囲指定が、テーブル データのセグメ ント範囲指定と同じであることを指定します。このオプション が有効なのは、次の場合のみです。 ■ ■ ■ ■ ハッシュではなく、値によってデータがセグメント化 されている。 インデックスの先頭列が、データのセグメント化の基 準となる列と同じである。 インデックスとデータについて、同数のセグメントが 指定されている。 STAR インデックスでは、テーブルのセグメント範囲の すべてについて、先頭の参照先テーブルに少なくとも 1 つの列が存在する必要があります。 このオプションは、インデックスの作成時に参照先テーブルの セグメント区分を静的に反映します。セグメントの切り離しや 割り当てによってテーブルのセグメント区分が変更された場合、 その変更はインデックスのセグメント区分に自動的には反映さ れません。参照先テーブルを変更する場合は、インデックスも 明示的に変更してください。 STAR インデックスの値は列の値ではなく、参照先テーブルの行 データ ID です。行を削除および挿入するとき、行データ ID は 再使用されます。このため、インデックスのセグメント区分は テーブルと異なるものになる場合があります。STAR インデック スのセグメント化については、『Administrator's Guide』を参照し てください。 SQL 文と RISQL 拡張機能 8-115 セグメント定義 SEGMENT LOCAL テーブルのセグメント化基準列がインデックスの先頭列ではな く、またはインデックス内にない場合でも、B-TREE または TARGET インデックスのセグメント範囲がテーブル データのセ グメント範囲と同じであることを指定します。テーブル セグメ ントをクリアまたは削除すると、ローカル インデックス セグメ ントは自動的にクリアされます。 このオプションは、次の条件が満たされた場合だけ有効です。 ■ ■ ■ ハッシュではなく、値によってデータがセグメント化 されている。 インデックスとデータについて、同数のセグメントが 指定されている。 ローカル インデックスが定義されている列が一意では ない。 このオプションは、STAR インデックスには使用できません。 ローカル インデックスは時間ごとに変化するデータの TARGETjoin 処理を行う場合に最もよく使用されます。ローカル インデックスを使用して TARGETjoin 処理の性能を向上させる ことができますが、パラメータを調整しないとほかのクエリ処 理に影響する可能性があります。詳細については、『Query Performance Guide』を参照してください。 SEGMENT LIKE REFERENCED TABLE STAR インデックスのセグメント範囲指定が、参照先テーブルの セグメント範囲指定と同じであることを指定します。このイン デックス セグメントと参照先テーブルのインデックス セグメン トが 1 対 1 で対応することを定義するものです。このため、参 照先テーブルのセグメント化に使用する範囲の値は、STAR イン デックスのセグメント区分も示すことになります。 SEGMENT LIKE REFERENCED TABLE オプションを使用する場 合は、次の条件に注意してください。 ■ ■ ■ 8-116 SQL Reference Guide このオプションが有効なのは、<index_specifier> に指定 した最初のフォーリン キーが参照しているテーブルの すべてのセグメントを、<segment_name> に指定した場 合だけです。 このオプションは、参照先テーブルのセグメント区分 を静的に反映するものです。その範囲が変更されても、 STAR インデックスの設定には自動的に反映されませ ん。参照先テーブルを変更する場合は、STAR インデッ クスも明示的に変更してください。 このオプションは、B-TREE インデックスおよび TARGET インデックスには使用できません。 セグメント定義 例 - セグメント化されたインデックスの作成 次の CREATE INDEX 文は、Market テーブルにインデックスを設定し、名前付き ( ユーザが作成した ) セグメントを指定します。 create index mkt_state_idx on market (state) in mkt_state_idx_seg Sales テーブルを作成し、perkey 列の値によってセグメント化するとします。次の CREATE INDEX 文で、この Sales テーブルのデータによってセグメント化した STAR インデックスを定義します。 create table sales ( perkey integer not null, classkey integer not null, prodkey integer not null, storekey integer not null, promokey integer not null, quantity integer not null, dollars dec(7,2) not null, constraint sales_pkc primary key (perkey, classkey, prodkey, storekey, promokey), constraint sales_date_fkc foreign key (perkey) references period (perkey), constraint sales_product_fkc foreign key (classkey, prodkey) references product (classkey, prodkey), constraint sales_store_fkc foreign key (storekey) references store (storekey), constraint sales_promo_fkc foreign key (promokey) references promotion (promokey)) data in (daily_data1, daily_data2) segment by values of (perkey) ranges (min:415, 415:max) maxsegments 2 maxrows per segment 60000; create star index sales_star_idx on sales (sales_date_fkc, sales_product_fkc, sales_store_fkc, sales_promo_fkc) in (sales_star_seg1, sales_star_seg2) segment like data; 重要 : STAR インデックスの作成前に先頭のディメンジョン テーブル ( 上記の例で は Period テーブル ) をロードする必要があります。 SQL 文と RISQL 拡張機能 8-117 セグメント範囲指定 Sales テーブルにローカルの TARGET インデックスを追加するとします。次の CREATE INDEX 文で、この Sales テーブルの promokey 列のデータによってセグメ ント化したローカル インデックスを定義します。 create target index prod_per_sales_ix on sales (promokey) in (sales_target_ix1, sales_target_ix2) segment local; セグメント範囲指定 セグメント範囲はセグメント化の基準となる列を指定し、各セグメントに分散して 格納する値の範囲を指定します。 TARGET インデックスと B-TREE インデックスは、インデックス キーの値に応じて セグメント化されます。STAR インデックスは、参照先テーブルの行データ ID に基 づいてセグメント化されます。参照先テーブルのセグメント範囲を指定することに より、参照元テーブルのセグメント化の基準列と、各セグメントに分散して格納す る行の範囲が割り当てられます。 セグメント範囲の指定とインデックス指定との関係については、8-109 ページを参 照してください。 B-TREE インデックスと TARGET インデックス 次に、B-TREE インデックスまたは TARGET インデックスに セグメント範囲を指定 する構文ダイアグラムを示します。セグメント範囲の指定が必要なのは、インデッ クスが複数のセグメントを使用する場合だけです。 SEGMENT BY VALUES OF RANGES ( MIN :<literal> ( , <literal>:MAX <literal:literal> MIN:MAX 8-118 SQL Reference Guide ) <segmenting_column> , ) セグメント範囲指定 SEGMENT BY VALUES OF <segmenting_ column> B-TREE インデックスおよび TARGET インデックスの セグメント 範囲を指定するときは、次の規則に従ってください。 ■ ■ ■ RANGES (MIN:MAX) <segmenting_column> は、<index_specifier> に指定した最 初の列である必要があります。 範囲の指定は、各セグメントに対して行ってください。 <literal> の値は <segmenting_column> の値を識別する必要 があります。<literal> の値と <segmenting_column> の値は 同じデータ型である必要があります。 指定したインデックス キーの値に基づいて、各セグメントにイン デックスを格納します。 範囲の指定では、次の規則に従ってください。 ■ ■ ■ ■ 範囲の上限値と下限値を組にして指定し、上限と下限を コロン (:) で区切ります。 次の組との間は、カンマ (,) で区切ります。 キーの最小値を示す MIN キーワードで始め、最大値を示 す MAX キーワードで終わります。 昇順に指定し、値の重複やすき間がないようにします。 各セグメントの上限は、次のセグメントの下限と一致す る必要があります。各セグメントには、下限の値以上で 上限の値未満のデータが格納されます。 SQL 文と RISQL 拡張機能 8-119 セグメント範囲指定 STAR インデックス 次に、STAR インデックスにセグメント範囲を指定する構文ダイアグラムを示しま す。この指定はオプションです。 範囲を指定しないと、STAR インデックスのセグメント数と、インデックス キーで 参照している最初のテーブルの MAXSEGMENTS の値および MAXROWS PER SEGMENT の値に基づいて範囲が自動的に設定されます。この範囲は、各セグメン トに均等分割されます。 ( SEGMENT BY REFERENCES OF RANGES ( <segmenting_column> ) ) MIN :MAX MIN :<rangeval> , <rangeval>:MAX <rangeval:rangeval> SEGMENT BY REFERENCES OF <segmenting_column> セグメント化の基準となる列またはフォーリン キー制約名 を指定します。これにより、各セグメントにインデックス を分散させる方法が決まります。<segmenting_column> の 指定では、次の規則に従ってください。 ■ ■ ■ ■ 8-120 SQL Reference Guide , セグメント化の基準列 ( および範囲 ) の指定はオプ ションです。この句を指定しないと、複数セグメ ントの範囲が自動的に設定されます。 STAR インデックス キーの先頭フォーリン キーが 1 つの列で構成されている場合は、その列をセグ メント化の基準列に指定する必要があります。こ のときは列名またはフォーリン キー制約名を使用 します。 先頭のフォーリン キーフォーリン キーが複数の 列で構成されている場合は、フォーリン キー制約 名 ( CREATE TABLE 文の FOREIGN KEY REFERENCES 句に指定したもの ) を指定して各 列を特定する必要があります。 セグメント化の基準列が参照しているテーブルに は、MAXROWS PER SEGMENT の値が割り当てら れている必要があります。 セグメント範囲指定 RANGES (MIN:MAX) インデックス キーで参照される最初のテーブルの行番号 ( またはセグメント名と行データ番号の組み合わせ ) に基づ いて、各セグメントに格納する STAR インデックスの範囲 を指定します。先頭行の番号は 0、行データ ID の最大値は MAXROWS PER SEGMENT の値未満にします。セグメント 化の基準列を指定する場合は、STAR インデックスのセグ メントごとに範囲を指定してください。指定しなければ、 範囲が自動的に設定されるため範囲の指定はできません。 STAR インデックスの範囲を指定するために、参照先テー ブルのセグメント名と行データ ID を確認するには、次の クエリを実行します。 select <primary_key>, rbw_segname, rbw_rownum from <table_name> 上記のクエリは、参照先テーブルの全行を返します。テー ブルの行データが多い場合は、リザルト セットが大きくな ります。 範囲の指定では、次の規則に従ってください。 ■ ■ ■ ■ 範囲の上限値と下限値を組にして指定し、上限と 下限をコロン (:) で区切ります。 次の組との間は、カンマ (,) で区切ります。 最初の参照先テーブルの先頭セグメントの先頭行 を示す MIN キーワードで始め、最初の参照先 テーブルの最終セグメントの最終行を示す MAX キーワードで終わります。 昇順に指定し、値の重複やすき間がないようにし ます。各セグメントの上限は、次のセグメントの 下限と一致する必要があります。各セグメントに は、下限の値以上で上限の値未満のデータが格納 されます。 SQL 文と RISQL 拡張機能 8-121 セグメント範囲指定 <rangeval> STAR インデックスのセグメントでは、範囲の値を指定す る方法が 2 種類あります。<rangeval> ( 範囲値 ) 変数は、次 のどちらかを使って表すことができます。 ■ <rownum> これは、セグメント化の基準列が参照している テーブルが、1 つのセグメントだけを使用してい る場合の指定です。<rownum> は、参照先テーブ ルの行データの ID です。たとえば、上限と下限 の組を、次のように指定できます。 ■ <segname rownum> これは、セグメント化の基準列が参照している テーブルが、複数のセグメントを使用している場 合の指定です。<segname> は、参照先テーブルの セグメントを特定し、<rownum> は、そのセグメ ントに格納されている参照先テーブルの行データ の ID を特定します。たとえば、上限と下限の組 を、次のように指定できます。 100:200 seg1 100:seg1 200 範囲値の <rownum> 部分はオプションです。省略 すると、そのセグメントの最小行データ ID が想 定されます。 例 - セグメントの定義 次のステートメントは、3 つの名前付きセグメントに格納されている Sales テーブル の STAR インデックスを作成します。このインデックスのキーは、Perkey 列と Mktkey 列を制約するクエリを効率化します。Period テーブルは、インデックス キーで参照される最初のテーブルであるため、Perkey 列をセグメント化の基準列に 指定する必要があります。範囲の値は、Period テーブルの行データ ID を参照しま す。 create star index sales_mkt_prod_idx on sales (perkey, mktkey) in (sales_idx_seg1, sales_idx_seg2, sales_idx_seg3) segment by references of (perkey) ranges (min:300, 300:600, 600:max) 次のステートメントは、セグメント化の基準列を指定せずに 1 つの名前付きセグメ ントに Orders テーブルの STAR インデックスを作成します。このインデックスに は、ALTER SEGMENT 文を使ってセグメントを追加することができます。 create star index sales_cust_prod_idx on orders (custkey, prodkey) in orders_idx_seg 8-122 SQL Reference Guide セグメント範囲指定 次に、1 つのセグメントに格納された B-TREE インデックスを指定する例を示しま す。範囲は、(min:max) のフォーマットで指定する必要があります。 segment by values of (perkey) ranges (min:max) 複数のセグメントに格納された B-TREE インデックスを定義する場合は、次のよう になります。セグメント化の基準列 (Perkey) は日付時間データ型であるため、範囲 の値が日付になっています。 segment by values of (perkey) ranges (min: '1-01-1998', '01-01-1998':'01-01-1999', '01-01-1999':'01-01-2000', '01-01-2000': max) 先頭セグメントの上限は、2 番めのセグメントの下限と一致しています。このイン デックスにデータを挿入するときには、1998 年より前の日付の行が先頭セグメント に挿入され、1998 年の行が第 2 セグメント、1999 年の行が第 3 セグメント、2000 年 以降の行が最終セグメントに挿入されます。 次に、1 つのセグメントに格納されたテーブルを参照する複数セグメントの STAR インデックスを定義する例を示します。各範囲の数値は、Perkey の値ではなく、 Perkey 列の行データ ID を表します。 segment by references of (perkey) ranges (min:100, 100:200, 200:500, 500:max) 複数セグメントのテーブルを参照する複数セグメントの STAR インデックスを定義 する例を次に示します。 ... in (ix_seg1, ix_seg2, ix_seg3, ix_seg4) segment by references of (mktkey) ranges (min:tab_seg1 1000, tab_seg1 1000:tab_seg2 2000, tab_seg2 2000:tab_seg3 3000, tab_seg3 3000:max) 最後の 2 つの例では、セグメント指定に列挙したセグメントごとに範囲を指定して います。 SQL 文と RISQL 拡張機能 8-123 WITH FILLFACTOR n WITH FILLFACTOR n WITH FILLFACTOR <n> 各インデックス ノードを充填する初期の割合を指定します。 その後、行が挿入されていくと、容量の 100% までインデッ クス ノードが充填されます。必要なインデックス ノードが 100% を超すと、ノードの分割が生じます。フィル ファクタ を正しく設定しておけば、ノードを分割せずに挿入や更新を 行うことができます。 <n> の有効範囲は 1 ∼ 100 ですが、フィル ファクタは一般に 50% 以上に設定します。 すでにデータが格納されているテーブルにインデックスを作 成した場合は、インデックスの作成が完了すると、フィル ファクタの設定値に従ってインデックス ノードに充填され ます。空のテーブルにインデックスを作成した場合は、その テーブルにデータをロードした時にフィル ファクタの設定 値が使用されます。フィル ファクタの設定値は、データを テーブルに再ロードする時や、REORG オプションによって テーブルを再編成する時にも使用されます。データのロード や再編成時にフィル ファクタの設定値を使用する場合は、 TMU の optimize オプションをオンにしておきます。 WITH FILLFACTOR オプションを指定しないと、rbw.config ファイルに設定されているデフォルトのフィル ファクタが 使用されます。rbw.config ファイルに設定されている初期デ フォルト フィル ファクタは、どのタイプのインデックスで も 100% です。インデックスの作成後は、ALTER INDEX 文 でフィル ファクタの設定値を変更することができます。 ドメイン サイズが SMALL の TARGET インデックスは、 フィル ファクタを 100% ( デフォルト ) にしてください。ド メイン サイズが MEDIUM または LARGE のインデックスは、 行の更新や削除がなければ、100% に設定してください。更 新や削除を行う場合は、100% より小さな値に変更してくだ さい。 フィル ファクタの詳細については、『Query Performance Guide』を参照してください。 8-124 SQL Reference Guide DOMAIN SIZE 例 この例では、フィル ファクタが 60 と設定されていて、インデックス ノードを初め て作成するときは、容量の 60% しか充填されません。 create index promotion_idx on promotion (promo_type) with fillfactor 60 DOMAIN SIZE DOMAIN SIZE 必要に応じて、TARGET インデックスのインデックス付き 列のドメイン サイズとして SMALL、MEDIUM、LARGE の うちから指定します。ドメイン サイズとは、その列の一意 値の数を示すものです。 DOMAIN SIZE 句は、TARGET インデックスにのみ適用しま す。 IBM Red Brick Warehouse は、指定されたドメイン サイズに 基づいて、インデックスの格納方法、つまり 燈 \ 現形式 î を 選択します。ドメイン サイズを指定しないと、列の値を表 す適切な形式をデータベース サーバが選択し、処理速度と 格納効率が高いデフォルト ドメインの TARGET インデック スを作成します。ドメイン内にデータが均等に分布している か、ドメインが非常に小さな場合は、列値のほとんどまたは すべてに適合するサイズを指定します。通常、特に列値の分 布に偏りがある場合や分布が未知の場合などは、デフォルト のデフォルト ドメインが適しています。 SQL 文と RISQL 拡張機能 8-125 DOMAIN SIZE 図 8-11 は、実際のドメイン サイズの境界について、デフォルト ドメインの TARGET インデックスと B-TREE インデックスとを比較したものです。B-TREE イ ンデックスは、取り得る値の数が 10,000 を超えるドメインに適しています。実際の ドメイン サイズに対する SMALL、MEDIUM、LARGE のドメイン指定の判断はよ り難しいものですが、図 8-11 に一般的なガイドラインを示します。格納領域につい ては、『Administrator's Guide』を参照してください。 図 8-11 ドメイン サイズの境界 Mixed-Domain TARGET Indexes Domain <size> 1 (small) 100 (medium) 1,000 (large) B-TREE Indexes 10,000 • ドメイン サイズ SMALL は一般に検索性能が最も高くなりますが、インデックスの 格納領域は最も大きく、取り得る値の数の増大と共に必要な容量が増加します。 TARGET インデックスは、TARGETjoin 処理を有効にすることもできます。 TARGETjoin 処理の詳細については、『Query Performance Guide』を参照してくださ い。 例 大量のデータ行がある Demographics テーブルの Occupation 列には約 5,000 通りの値 がありますが、少数の値がテーブルの全行の半数以上を占めるという分布の偏りが あります。この場合は、デフォルト ドメインの TARGET インデックスを選択しま す。 create target index code_tgt_ix on promotion(promo_code) 同テーブルの Marital_Status 列に、10 通り未満の値 (Single、Married、Divorced など ) が均等に分布していることがわかっている場合、その列の TARGET インデックスは、 次のように指定します。 create target index city_tgt_ix on store(city) domain size small 8-126 SQL Reference Guide CREATE MACRO CREATE MACRO CREATE MACRO 文は、SQL 文の一部または全体を略記するマクロを作成します。 CREATE MACRO 文には、マクロの内容を分類するオプションのカテゴリと、マク ロを説明するコメントを指定することができます。 アクセス権 PUBLIC マクロを作成するユーザは、次の中で少なくとも 1 つの条件を満たしてい る必要があります。 ■ ■ DBA システム ロールのメンバーであること 明示的に付与されるかユーザが作成したロールのメンバーであることによ り、CREATE_ANY 権限か PUBLIC_MACROS 権限を持っていること プライベート マクロを作成するユーザは、次の中で少なくとも 1 つの条件を満たし ている必要があります。 ■ ■ DBA システム ロールか、RESOURCE システム ロールのメンバーであるこ と 明示的に付与されるかユーザが作成したロールのメンバーであることによ り、CREATE_ANY 権限か CREATE_OWN 権限を持っていること TEMPORARY マクロは、Red Brick データベースに接続しているユーザであればど のユーザでも作成できます。 構文 次に CREATE MACRO 文の構文ダイアグラムを示します。 MACRO CREATE <macro_name> TEMPORARY PUBLIC , ( <parameter> ) CATEGORY <cat_val> () AS COMMENT <definition> '<character_string>' SQL 文と RISQL 拡張機能 8-127 CREATE MACRO TEMPORARY、 PUBLIC マクロには、テンポラリ、パブリック、プライベートの 3 種類 があります。 ■ ■ ■ テンポラリ マクロ名は、ユーザ セッション中に作成さ れ、そのセッションの存続中にだけ存在し、作成者だ けがアクセスできます。クライアント ツールがデータ ベース サーバとの接続を解除すると、テンポラリ マク ロは削除されます。 パブリック マクロは、ユーザ セッションとは独立して 作成され、RBW_MACROS システム テーブルに格納さ れ、DROP PUBLIC MACRO 文で削除されるまで存続し ます。このマクロには、すべてのユーザがアクセスで きます。 テンポラリ マクロ、パブリック マクロのどちらも指定 しないと、ユーザ セッションとは無関係にプライベー ト マクロが作成されます。このマクロは、作成者が削 除するまで RBW_MACROS システム テーブルに格納 され、作成者だけがアクセスできます。 パブリック マクロとその格納場所の詳細については、 『Administrator's Guide』を参照してください。 <macro_name>、 <parameter> マクロ名とパラメータ名は、データベース識別子です。キー ワードは指定できません。同じマクロ名が、テンポラリ、パブ リック、およびプライベート マクロのいずれにも使用できま す。マクロ名が特定できなければ、次の規則に基づいて、セッ ション中にデータベース サーバがマクロを読み込んだり作成す る時に特定されます。指定した名前のテンポラリ マクロが存在 する場合は、テンポラリ マクロが使用されます。テンポラリ マ クロが存在せず、指定した名前のプライベート マクロが存在す る場合は、プライベート マクロが使用されます。テンポラリお よびプライベート マクロが共に存在せず、指定した名前のパブ リック マクロが存在する場合は、パブリック マクロが使用され ます。 マクロは、SQL 文の一部として使用するか、別のマクロ内で使 用することができます。SQL 文の実行中は、マクロ名がマクロ の定義内容に置き換えられます。 区切り識別子を使用したマクロ名は、二重引用符で囲まれる必 要があります。また、区切り識別子を囲むすべての二重引用符 には、二重引用符を補う必要があります。この例は、8-131 ペー ジを参照してください。 8-128 SQL Reference Guide CREATE MACRO CATEGORY マクロに対する構文 カテゴリを指定します。SQL 文でマクロを 使用する方法によってそのマクロにカテゴリを付けます。これ はオプションのパラメータです。 カテゴリ値は、RBW_MACROS システム テーブルに格納されます。カテゴリ値は、 RBW_MACROS テーブルへのクエリで参照できますが、データベース サーバはカ テゴリ値に対してそれ以外の検査や処理を行いません。カテゴリ値の最小値は 0、 最大値は 65,535 です。このオプション パラメータを指定しなかった場合、または以 前のリリースの IBM Red Brick Warehouse からマクロを移行した場合は、 RBW_MACROS の Category 列に NULL が格納されます。 IBM Red Brick Warehouse は、一般カテゴリの定義として 0 ∼ 255 の値を予約してい ます。新しいカテゴリを定義するには、255 より大きい値を選択してください。 次の表に、<cat_val> に定義されている値を示します。 カテゴリ値 カテゴリの定義 1 検索項目リストの項目。クエリの検索項目リストに指定でき る算出列を定義するマクロです。 2 検索条件。SELECT 文の WHERE 句に指定できる任意の数の 検索条件を定義するマクロです。 3 ソート基準。ORDER BY 句に指定できる項目を定義するマク ロです。 10 値。リテラルまたはサブクエリを示すテキストを定義するマ クロです。 11 値リスト。複数のリテラル値を示すテキストを指定するマク ロです。 100 SQL 文。構文的に完全な SQL 文を定義するマクロです。 101 その他。ほかのカテゴリで定義されていない SQL テキストを 定義するマクロです。 SQL 文と RISQL 拡張機能 8-129 CREATE MACRO COMMENT < character_string> マクロの意味や使い方を説明するコメント文字列を割り当てま す。256 バイトまで入力できます。コメントは、 RBW_MACROS システム テーブルに格納されるオプションの パラメータで、このテーブルへのクエリによって参照すること ができます。 このパラメータを指定しなかった場合、または以前のリリース の IBM Red Brick Warehouse からマクロを移行した場合は、 RBW_MACROS の COMMENT 列に NULL が格納されます。 データベース サーバはこのテキストを無視します。 ALTER MACRO 文を使用して、RBW_MACROS の COMMENT 列の内容を更新することができます。 AS <definition> マクロを定義します。次の規則に従って、SQL 文の一部また は全体を定義できます。 ■ ■ ■ ■ マクロ名およびパラメータ名を使用することができま す。これらは埋め込みマクロとして参照されます。 1024 バイト以下です。パラメータ名のサイズやマク ロの実行時に入力する値のサイズに関係なく、指定パ ラメータ 1 つが 3 バイトを使用します。 完全なステートメントは 1 つしか記述できません。 パラメータにカンマ ( , ) が含まれている場合は、エス ケープ文字の円記号 (¥) をつけます。 マクロ実行時にマクロ名が展開されるときには、定義された各 パラメータ名が、対応する引数の値に置き換えられます。 EXPAND 文は、展開したマクロを返すステートメントです。 詳細については、8-188 ページ「EXPAND」を参照してくださ い。 例 SELECT 文全体をマクロにし、構文 カテゴリを指定する例を示します。 create macro select_star_lotta category 100 as select * from product where product like 'Lotta' 8-130 SQL Reference Guide CREATE ROLE 次の例は、パラメータによって条件を定義し、マクロの構文 カテゴリとコメントを 指定します。 create macro mo_sales(prod_name, mo, yr) category 2 comment 'Search condition with parameters.' as where product like prod_name and month = mo and year = yr sales という上記のマクロ名は、SELECT 文で次のように参照することができます。 select prod_name, city, dollars from store natural join sales natural join product natural join period mo_sales('Lotta%', 'MAR', 1998) 上記のクエリは、Lotta Latte という製品について、1998 年 3 月の売上を返します。 マクロの詳しい使用例については、『SQL Self-Study Guide』を参照してください。 次の例では、展開後、区切り識別子を使用する CREATE TABLE 文になるマクロを 作成します。 create macro create_star as "create table ""table"" (""The """"STAR"""""" int)" RISQL プロンプトで create_star と入力すると、"STAR" という列名の列を持つ table という名前のテーブルが作成されます。 CREATE ROLE CREATE ROLE 文はロールを作成し、オプションで 1 人以上のユーザにロールを付 与します。作成したロールには、GRANT 文を使ってタスク権限とオブジェクト特 権を付与します。 アクセス権 ロールを作成するユーザは、次の中で少なくとも 1 つの条件を満たしている必要が あります。 ■ ■ DBA システム ロールのメンバーであること 明示的に付与されるかユーザが作成したロールのメンバーであることによ り、ROLE_MANAGEMENT 権限を持っていること SQL 文と RISQL 拡張機能 8-131 CREATE ROLE 構文 次に CREATE ROLE 文の構文ダイアグラムを示します。 CREATE ROLE <role_name> , FOR <db_username> <role_name> <role_name> 作成するロールを識別する名前です。ロール名はほかのロール名、 データベース ユーザ名、タスク権限名とは異なる名前にしてくださ い。 FOR 作成したロールをデータベース ユーザに付与します。そのユーザ <db_username> は、新規作成されたロールのメンバーになり、そのロールのタスク 権限およびオブジェクト特権をすべて取得します。 FOR <role_name> 作成したロールを、ユーザが作成した既存のロールに付与します。 DBA システム ロールや RESOURCE システム ロールには付与できま せん。システム ロールは変更できません。 使用上の注意 FOR 句に指定したデータベース ユーザおよびロールは、作成したロールの直接のメ ンバーになります。ユーザやロールが直接のメンバーになれるロールの数は 16 ま でです。FOR 句に指定したユーザやロールが、すでに 16 個のロールのメンバーで ある場合は、新規ロールは作成されません。 例 次のステートメントは、temp というロールを作成します。 create role temp 次のステートメントは、contractor というロールを作成し、そのロールを jerry に付 与します。 create role contractor for jerry 次のステートメントは、market_research というロールを作成し、そのロールを alison、emily、paul に付与します。 create role market_research for alison, emily, paul 8-132 SQL Reference Guide CREATE SEGMENT CREATE SEGMENT CREATE SEGMENT 文は、任意の数の物理格納ユニット (PSU) を格納する名前付き セグメントを定義します。 テーブルやインデックスは、デフォルト セグメントか任意の数の名前付きセグメン トを使用することができます。デフォルト セグメントは、名前付きセグメントを指 定せずにテーブルやインデックスを作成したときに、自動作成されます。名前付き セグメントは、CREATE SEGMENT 文によって作成し、CREATE TABLE、ALTER TABLE、CREATE INDEX、ALTER SEGMENT のいずれかのステートメントによっ てテーブルやインデックスに割り当てます。1 つの名前付きセグメントには、1 つ のデータベース オブジェクトしか格納できません。テーブルやインデックスは、複 数のセグメントに格納することができます。 アクセス権 セグメントを作成するユーザは、次の中で少なくとも 1 つの条件を満たしている必 要があります。 ■ ■ DBA システム ロールか、RESOURCE システム ロールのメンバーであるこ と 明示的に付与されるかユーザが作成したロールのメンバーであることによ り、CREATE_ANY 権限か CREATE_OWN 権限を持っていること 構文 次に CREATE SEGMENT 文の構文ダイアグラムを示します。 , CREATE SEGMENT <segment_name> <storage_specification> SQL 文と RISQL 拡張機能 8-133 CREATE SEGMENT <segment_name> 作成するセグメントの名前を指定します。現在のデータベースに 存在しない名前で、有効なデータベース識別子である必要があり ます。 <storage_ specification> セグメントの行データまたはインデックス データを格納する各 PSU のパスとサイズを指定します。格納領域を指定する構文に ついては、次のセクションを参照してください。 <storage_specification> には、セグメントに割り当てられる物理格 納ユニット (PSU) と呼ばれる各ファイルのパス名とサイズを指定 します。1 つのセグメントに、サイズの異なる複数の PSU を割り 当てることができます。 構文 次に格納領域の指定の構文ダイアグラムを示します。 STORAGE INITSIZE 8-134 SQL Reference Guide '<filename>' <init_size> MAXSIZE <max_size> EXTENDSIZE <increment> CREATE SEGMENT STORAGE < filename> PSU のファイル名を指定します。ファイル名は、データべースの ディレクトリに対する相対パスでも、絶対パスでもかまいません。 指定するディレクトリは、すべて存在するものにしてください。 MAXSIZE <max_size> PSU にロードするデータの最大量を KB 数で指定します。この量 までロードされると、シーケンス内の次の PSU に切り換わりま す。増分は KB 単位で指定しますが、実際のサイズは 8 の倍数に切 り上げられます。MAXSIZE の許容最小値は 16KB です。 MAXSIZE の値は、RBW_STORAGE システム テーブルの MAXSIZE 列に格納されます。このシステム テーブルには、PSU の使用済み KB 数 (USED 列 ) も格納されます。 INITSIZE <init_size> PSU にあらかじめ確保される領域の初期サイズを指定します。KB 単位で指定しますが、実際のサイズは 8 KB の倍数に切り上げられ ます。指定する値は、MAXSIZE パラメータで指定した最大サイズ 以下にしてください。デフォルトは 16KB です。 セグメントの先頭 PSU の初期サイズは、16KB 以上にします。先 頭 PSU の初期サイズを 0KB ∼ 9KB 未満の値に指定すると、エ ラーが返されます。9KB ∼ 16KB 未満の値を指定すると、16KB に 切り上げられます。それ以降の PSU の初期サイズは、0KB ∼最大 サイズの任意の値に設定できます。 INITSIZE の値は、RBW_STORAGE システム テーブルの INITSIZE 列に格納されます。 EXTENDSIZE <increment> PSU の容量が不足する場合に、初期サイズ以上に拡張するときの 増分の単位を指定します。増分は KB 単位で指定しますが、実際 のサイズは 8KB の倍数に切り上げられます。デフォルトは 8KB で す。 例 この CREATE SEGMENT 文は、3 つの PSU から構成されるセグメントを定義しま す。各 PSU には、最高 1MB (MAXSIZE) のデータを格納できます。 create segment sales_dataseg1 storage 'sales_area1' maxsize 1024 initsize 100 extendsize 100, storage 'sales_area2' maxsize 1024, storage 'sales_area3' maxsize 1024 SQL 文と RISQL 拡張機能 8-135 CREATE SYNONYM 先頭の PSU の sales_area1 には、セグメントの作成時に 104KB の格納領域 (INITSIZE) が割り当てられます。sales_area1 が容量限界になると、最大サイズに達 するまで、104KB (EXTENDSIZE) ずつ拡張されていきます。sales_area1 が最大サイ ズに達すると、sales_area2 にデータが格納されます。 sales_area2 および sales_area3 の PSU には、セグメントの作成時に 16KB の格納領域 が割り当てられます。これは、INITSIZE のデフォルトです。最初は sales_area2 が拡 張され、最大サイズに達するまで 8KB ずつ拡張されます。次に、sales_area3 が最大 サイズに達するまで 8KB ずつ拡張されます。 CREATE SYNONYM シノニムは、既存テーブルの論理名またはエリアスです。定義したシノニムは、元 のテーブルのコピーとして使用することができます。シノニムは、データベースに ある任意の基本テーブルに対して作成できますが、ビューおよびテンポラリ テーブ ルには作成できません。 アクセス権 テーブルのシノニムを作成するユーザは、次の中で少なくとも 1 つの条件を満たし ている必要があります。 ■ ■ ■ ■ DBA システム ロールのメンバーであること 明示的に付与されるかユーザが作成したロールのメンバーであることによ り、CREATE_ANY 権限を持っていること RESOURCE システム ロールのメンバーで、かつテーブルの作成者である こと CREATE_OWN 権限を持っていて、テーブルの作成者であること 構文 次に CREATE SYNONYM 文の構文ダイアグラムを示します。 CREATE SYNONYM 8-136 SQL Reference Guide <synonym_name> FOR <table_name> CREATE TABLE <synonym_name> 作成するシノニムの名前を指定します。データベースにあるほ かのビュー、テーブル、シノニムとは異なるデータベース識別 子を指定してください。 <table_name> 作成するシノニムの対象となる既存のテーブルを指定します。 ビューおよびテンポラリ テーブルのシノニムを作成することは できません。 使用上の注意 シノニムは、テーブル名のエリアスを作成するだけです。1 つのファクト テーブル に同じ 1 つのディメンジョン テーブルへの複数の参照を設定するクエリを書くに は、シノニムを作成する必要はありません。どのテーブルもほかのテーブルに複数 のプライマリ キー参照またはフォーリン キー参照を設定することができます。 例 次の例は、Period テーブルに Shipdate というシノニムを作成します。 create synonym shipdate for period CREATE TABLE CREATE TABLE 文は、プライマリ キー、属性、フォーリン キー参照、セグメント を指定した ( シノニムではない ) 基本テーブルを定義します。テーブルを作成する と、そのテーブルのプライマリ キーについて B-TREE インデックスが自動的に作成 されます。 CREATE TEMPORARY TABLE 文の構文については、8-160 ページを参照してくださ い。 アクセス権 テーブルを作成するユーザは、次の中で少なくとも 1 つの条件を満たしている必要 があります。 ■ ■ DBA システム ロールか、RESOURCE システム ロールのメンバーであるこ と 明示的に付与されるかユーザが作成したロールのメンバーであることによ り、CREATE_ANY 権限か CREATE_OWN 権限を持っていること SQL 文と RISQL 拡張機能 8-137 CREATE TABLE ほかのユーザのセグメントにテーブルを作成する場合は、次の中で少なくとも 1 つ の条件を満たしている必要があります。 ■ ■ DBA システム ロールのメンバーであること CREATE_ANY 権限を持っていること 構文 次に CREATE TABLE 文の構文ダイアグラムを示します。 CREATE TABLE ( <table_name> <column_definitions> ) <segment_specification> MAXROWS PER SEGMENT MAXSEGMENTS <maxrows> <maxsegments> <table_name> 作成する基本テーブルの名前を指定します。テーブル名 は、次の条件を満たしている必要があります。 ■ ■ <column_definitions> データベースにあるほかのビュー、テーブル、シ ノニムの名前と重複しないこと 有効なデータベース識別子であること テーブルの列を定義します。テーブルの各列には、完全な 列定義が必要です。列定義の詳細については、8-139 ペー ジを参照してください。 <segment_specification> テーブルのデータ、およびシステムが生成する B-TREE イ ンデックスに、セグメントを割り当てます。CREATE TABLE 文のセグメント定義を省略すると、データおよびイ ンデックスはデフォルト セグメントに格納されます。 デフォルト セグメントの最大サイズは、通常 2GB です。 ただし、複数の PSU を使用すると、デフォルト セグメン トのサイズを 2GB より大きくすることができます。 8-138 SQL Reference Guide 列の定義 CREATE TABLE 文の実行時の状況を次に示します。 ■ ■ ■ ■ 指定した容量の領域に、少なくとも 1 つの PSU を 割り当てる必要があります。 各 PSU の MAXSIZE は 2GB から 8KB を引いた値 に設定されます。 各 PSU の INITSIZE は 16KB に設定されます。 作成される PSU の数は DEFAULT_SEGMENT_SIZE を 2GB で割った値に 等しくなります。DEFAULT_SEGMENT_SIZE が 2GB で割り切れない場合、最後の PSU はその他の PSU より小さくなります。 テーブルやインデックスを名前付きセグメントに格納する 場合は、CREATE SEGMENT 文を使って、名前付きセグメ ントをあらかじめ作成してください。 セグメント定義の構文と説明については、8-150 ページを 参照してください。 MAXSEGMENTS <maxsegments>、 MAXROWS PER SEGMENT <maxrows> MAXSEGMENTS は、テーブルが使用できるセグメントの 最大数を指定します。MAXROWS PER SEGMENT は、テー ブルの各セグメントに格納できる行の最大数を指定しま す。これらの値は、インデックス付きテーブルのフォーリ ン キーによってこのテーブル参照されたとき STAR イン デックス キーのサイズの計算に使用されます。 MAXSEGMENTS を指定しなかった場合のデフォルトは、 <segment_specification> に指定したセグメントの数になり、 <segment_specification> が指定されていない場合は 1 になり ます。 MAXROWS PER SEGMENT を指定しなかった場合、この テーブルのプライマリ キーを参照する別のテーブルの フォーリン キーに STAR インデックスを定義できなくな り、CREATE INDEX 文は失敗します。 列の定義 データベース テーブルの各列は、CREATE TABLE 文の中で完全に定義する必要が あります。 SQL 文と RISQL 拡張機能 8-139 列の定義 構文 CREATE TABLE 文全体の構文ダイアグラムと、列の定義構文の参照ポイントを示し ます。 CREATE TABLE ( <table_name> <column_definitions> ) <segment_specification> MAXROWS PER SEGMENT MAXSEGMENTS <maxrows> <maxsegments> 次に <column_definition> の構文ダイアグラムを示します。 , <column_name> <datatype> DEFAULT NOT NULL UNIQUE <literal> <function> NULL , <primary_key_reference> , <foreign_key_reference> 8-140 SQL Reference Guide 列の定義 <column_name> テーブルの列名を指定します。列名は、テーブルで一意の有効な データベース識別子とし、修飾子は使用できません。1 つのテーブ ルには、7,280 列まで作成することができます。 列に NULL または NOT NULL および UNIQUE を指定でき、デフォル ト値も指定できます。 <data type> 次のいずれかのデータ型を指定します。 ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ 固定長の文字列値は、CHARACTER または CHAR 可変長の文字列値は、VARCHAR 日付時間の値は、DATE、TIME、または TIMESTAMP 符号付き 10 進数値 (NUMERIC と同等 ) には、DECIMAL ま たは DEC 符号付き浮動小数点数値 (DOUBLE PRECISION と同等 ) に は FLOAT 符号付き浮動小数点数値には REAL -231 ∼ 231-1 の符号付き整数値には INTEGER または INT 1 ∼ 231-1 の符号付き整数値には、シリアル (SERIAL) テーブルごとに SERIAL 列を 1 つだけ作成できます。 SERIAL 列を定義するときに、NULL 値の入力不可を指定 する必要があります。 -215 ∼ 215-1 の符号付きスモール整数値には SMALLINT -27 ∼ 27-1 の符号付き整数値には TINYINT SQL 文と RISQL 拡張機能 8-141 列の定義 文字 (CHAR または VARCHAR) データ型の列を定義した場合、列サ イズとして指定した値は、列値の文字数ではなく、列値のバイト数 とみなされます。 7 または 8 ビットの ASCII 文字セットを使用した場合は、1 文字の 長さが常に 1 バイトになるため、列サイズがバイト数または文字数 のどちらとみなされても違いはありません。ただし、マルチバイト の文字セットを使用する場合は、シングルバイトの文字セットと同 数の文字が列に格納できないことがあるので注意してください。 データ型の詳細については、2-15 ページを参照してください。 NOT NULL 指定した列について、テーブルのすべての行に値を格納することを 定義します。NULL や不定値は格納できません。この制約に違反す る INSERT 文や UPDATE 文は実行されず、エラー メッセージが返 されます。 NOT NULL 句は SERIAL 列の指定で必要です。 UNIQUE 指定した列には、重複値を格納できないことを定義します。列を UNIQUE と指定しても、その列の一意性を強制することにはなり ません。一意性を強制するには、列に B-TREE インデックスも作成 する必要があります。複数の列の組み合わせに一意性を強制するに は、すべての列を UNIQUE と指定し、それらの列に対して 1 つの インデックス (B-TREE または STAR) を作成します。この列をプラ イマリ キー列にする必要はありません。 次の CREATE TABLE 文について考えてみます。 create c1 int c2 int c3 int table tbl ( not null unique, not null unique, not null); 次のステートメントは一意の B-TREE インデックスを作成します。 create index idx1 on tbl(c1, c2); 次のステートメントは一意でない B-TREE インデックスを作成しま す。 create index idx2 on tbl(c1, c3); ヒント : 列の組み合わせだけが一意で、個々の列自体は一意でない場合、1 つの列 にインデックスを定義しないでください。そのような定義は、一意性をその列に強 制します。 8-142 SQL Reference Guide 列の定義 DEFAULT 指定した列に、デフォルト値を割り当てます。列のデフォルト値 は、ALTER TABLE 文によって新規列をテーブルに追加した時の既 存行と、その列に値がない新規行に使用されます。INSERT 文で追 加された行や、ロード中に参照整合性を維持するために自動生成さ れた行にも使用されます。自動的な行の生成については、『Table Management Utility Reference Guide』を参照してください。 リテラル値を指定する場合は、その列のデータ型とリテラル値を互 換性のあるものにしてください。 関数を指定する場合は、その列のデータ型と互換性のある値を返す 関数にしてください。戻り値は、行の挿入時に列に挿入されます。 デフォルトに使用できる関数は、次のいずれかです。 ■ ■ ■ ■ CURRENT_USER ( または USER) CURRENT_USER 関数をデフォルトに使用できるのは、 CHAR(128) または VARCHAR(128) 以上のデータ型の列だ けです。 CURRENT_DATE CURRENT_TIME (<precision>) CURRENT_TIMESTAMP (<precision>) デフォルトの句は、シリアル (SERIAL) 型のデータでは使用できま せん。 DEFAULT NULL は、行の挿入時に値が指定されなかった場合に列 のデフォルトを NULL に設定するように指定できます。 同じ列に、NOT NULL と DEFAULT NULL の両方を指定できます。 その列には、いかなる場合もデフォルト値を入力できないという意 味です。これは、そのテーブルの自動的な行の生成を無効にするこ とになります。自動的な行の生成については、『Table Management Utility Reference Guide』を参照してください。 この CREATE TABLE 文は、テーブル Prod_Basic を作成します。 Prodname 列には、デフォルト値 Unknown が割り当てられます。 Prod_Basic テーブルに行を挿入するときに、Prodname 列の値を指 定しないと、Unknown が挿入されます。 create table prod_basic ( prodkey integer not null, prodname char(30) default 'Unknown', descript character(40), constraint prod_pkc primary key (prodkey) ) デフォルト値の用法の詳細については、8-218 ページに示す INSERT 文の例を参照してください。 SQL 文と RISQL 拡張機能 8-143 プライマリ キー参照 プライマリ キー参照 テーブルのプライマリ キーは、任意の数の列で構成することができます。プライマ リ キーはオプションですが、プライマリ キーを持たないテーブルはテンポラリ テーブルに限って作成することをお勧めします。プライマリ キーを持たないテーブ ルに対しては、次の操作はできません。 ■ ■ ■ ほかのテーブルによるフォーリン キー参照 参照整合性チェック Table Management Utility の UPDATE または MODIFY 構文によるロード テーブルを作成すると、そのテーブルのプライマリ キーについて B-TREE インデッ クスが自動的に作成されます。 構文 次に プライマリ キー参照の構文ダイアグラムを示します。PRIMARY KEY REFERENCES 句と、CREATE TABLE 文および列定義との関係は、8-139 ページを参 照してください。 , PRIMARY KEY CONSTRAINT <constraint_name> 8-144 SQL Reference Guide ( <column_name> ) プライマリ キー参照 CONSTRAINT <constraint_name> プライマリ キー制約の名前を指定します。この名前は、 RBW_RELATIONSHIPS および RBW_CONSTRAINTS シス テム テーブルに格納されます。プライマリ キー制約名はオ プションです。指定しないと、次のフォーマットのデフォル ト名が自動的に割り当てられます。 <tablename>_PKEY_CONSTRAINT 制約名の詳細については、8-149 ページ「プライマリ キーと フォーリン キー制約名」を参照してください。 PRIMARY KEY <column_name> テーブルのプライマリ キーを指定します。複数の列からなる プライマリ キーを指定することができます。 プライマリ キーは、次の条件に従います。 ■ ■ ■ 1 つのテーブルには 1 つのプライマリ キーしか指定 できませんが、プライマリ キーは、複数の列で構成 することができます。 プライマリ キーとして指定する列は、すべて NOT NULL に指定する必要があります。 プライマリ キーの値は、一意である必要がありま す。つまり、プライマリ キーによってテーブルの行 が一意に識別できる必要があります。 SQL 文と RISQL 拡張機能 8-145 フォーリン キー参照 フォーリン キー参照 ほかのテーブルのプライマリ キー値に存在する値だけを格納する列を、フォーリン キー参照を行う列といいます。 構文 次に フォーリン キー参照の構文ダイアグラムを示します。FOREIGN KEY REFERENCES 句と、CREATE TABLE 文および列定義との関係は、8-139 ページを参 照してください。 , FOREIGN KEY CONSTRAINT <constraint_name> REFERENCES <referenced_table> <column_name> ( ) , ( ON DELETE <primary_key_column> ) CASCADE NO ACTION CONSTRAINT <constraint_name> フォーリン キー制約の名前を指定します。この名前は、 RBW_RELATIONSHIPS および RBW_CONSTRAINTS システ ム テーブルに格納されます。フォーリン キー制約名はオプ ションです。指定しないと、次のフォーマットのデフォルト名 が自動的に割り当てられます。 <tablename>_FKEY#_CONSTRAINT # は、CREATE TABLE 文に指定したフォーリン キーの順番を 示す数字です。 プライマリ キーが複数の列で構成されているテーブルを参照 しているテーブルに STAR インデックスを作成する場合は、 ユーザが定義したフォーリン キー制約名を CREATE STAR INDEX 文に指定してください。 制約名の詳細については、8-149 ページ「プライマリ キーと フォーリン キー制約名」を参照してください。 8-146 SQL Reference Guide フォーリン キー参照 FOREIGN KEY 作成するテーブルと、REFERENCES キーワードの後に指定し たテーブル間の結合パスを定義します。パスは、 <column_name> と <parent_column> に指定した列について定義 します。1 つのテーブルに 256 までのフォーリン キーを設定す ることができます。 フォーリン キーにより参照されるテーブルは、プライマリ キーを持っている必要があります。シリアル (SERIAL) 型列は フォーリン キーとして使用できません。シリアル (SERIAL) 型 列をフォーリン キーとして参照するときは、フォーリン キー 列を整数 (INTEGER) 型として指定する必要があります。シリ アル (SERIAL) データ型の詳細については、2-21 ページを参照 してください。 ループするスキーマ参照は定義できません。たとえば、table2 から table1 に対する制約がすでに存在する場合、table1 から table2 に対する制約を追加することはできません。このような テーブル設定を行うと、参照整合性がループします。 <column_name> 作成するテーブルの列名を指定します。この列は、NOT NULL に指定されたものとし、<parent_column> と同名でもかまいま せん。 <referenced_table> 既存の参照先テーブルまたはシノニムの名前を指定します。 <primary_key_ column> <referenced_table> にあるプライマリ キー列の名前を指定しま す。指定しないと、参照先テーブルのプライマリ キーが自動 的に使用されます。指定する場合は、参照先テーブルに指定し たプライマリ キー列と一致させてください。 SQL 文と RISQL 拡張機能 8-147 フォーリン キー参照 ON DELETE 参照先テーブルに削除操作が実行された時に、参照整合性を維 持する方法を指定します。参照元の行をすべて削除するか、参 照先の行の削除を中止するかを指定します。ON DELETE 句を 省略した場合のデフォルトは、NO ACTION です。これは、行 の削除によって参照整合性違反が発生した場合に、行の削除を 中止する指定です。 NO ACTION を指定すると、参照先テーブルの行と参照元テー ブルの行はどちらも削除されません。このような削除は、リス トリクト デリートと呼ばれます。 CASCADE を指定すると、参照先テーブルの行と、その行を参 照している参照元テーブルのすべての行が削除されます。削除 後は、各テーブルから削除された行数を示すメッセージが表示 されます。このような削除は、カスケード デリートと呼ばれ ます。 リストリクト デリートとカスケード デリートの両方が関わる 削除では、NO ACTION が CASCADE に優先します。削除される 行はありません。この優先順位は、すべての参照元テーブルに 再帰的に適用されます。 シノニムには、対応する基本テーブルと同じ削除動作を指定し てください。そうでない場合は、CREATE TABLE 文がエラー になります。 ON DELETE 句に指定した動作は、OVERRIDE REFCHECK 句 を指定した DELETE 文で変更することができます。 OVERRIDE REFCHECK 句は、参照整合性が維持できるよう に、注意して使用してください。 各種の削除モードの動作例については、8-171 ページ 「DELETE」および『Administrator's Guide』を参照してくださ い。 8-148 SQL Reference Guide プライマリ キーとフォーリン キー制約名 プライマリ キーとフォーリン キー制約名 CREATE TABLE 文では、制約名でプライマリ キー参照とフォーリン キー参照をプ リフィックスすることができます。 プライマリ キー制約名は、作成中のテーブルの 1 つまたは複数のプライマリ キー列 を一意に指定する手段になります。フォーリン キー制約名は、作成中のテーブル が、ほかのテーブルの 1 つまたは複数の列に対して作成するすべてのフォーリン キー参照を一意に指定する手段になります。 次の例の Sales テーブルに対する CREATE TABLE 文は、1 つのプライマリ キー制約 と 4 つのフォーリン キー制約を指定します。 create table sales ( perkey integer not null, classkey integer not null, prodkey integer not null, storekey integer not null, promokey integer not null, ... constraint sales_pkc primary key (perkey, classkey, prodkey, storekey, promokey), constraint sales_date_fkc foreign key (perkey) references period (perkey), constraint sales_product_fkc foreign key (classkey, prodkey) references product (classkey, prodkey), constraint sales_store_fkc foreign key (storekey) references store (storekey), constraint sales_promo_fkc foreign key (promokey) references promotion (promokey)) ... テーブルを作成するとき、制約名はオプションです。指定しないと、次のフォー マットのデフォルト名が自動的に割り当てられます。 <table_name>_PKEY_CONSTRAINT <table_name>_FKEY#_CONSTRAINT <table_name> は作成中のテーブル名、# は、CREATE TABLE 文に指定したフォーリ ン キーの順番を示す数字です。システム定義の場合もユーザ定義の場合も、制約名 は、RBW_RELATIONSHIPS および RBW_CONSTRAINTS システム テーブルに格 納されます。 システム テーブルは、列名ではなく制約名でプライマリ キー制約とフォーリン キー制約を管理するため、CREATE TABLE 文にはユーザ定義の制約名を統一して使 用してください。ユーザ定義の制約名は、プライマリ キー参照およびフォーリン キー参照に意味のある名前を割り当てる手段にもなります。 SQL 文と RISQL 拡張機能 8-149 セグメント定義 CREATE TABLE 構文では制約名はオプションですが、CREATE STAR INDEX 文では 必須となる場合があります。参照先テーブルの複数の列からなるプライマリ キーを 構成する、参照元テーブルの列に STAR インデックスを作成する場合は、ユーザ定 義のフォーリン キー制約名でインデックス キーを指定する必要があります。 たとえば、次のステートメントは Sales テーブルの Classkey 列と Prodkey 列に STAR インデックスを作成します。 create star index prod_sales_ix on sales (classkey, prodkey); この 2 つの列は、参照先テーブル Product に複数の列からなるプライマリ キーを構 成するため、構文エラーが返されます。STAR インデックスを作成する唯一の方法 は、2 つのフォーリン キー列を区別するフォーリン キー制約名を指定することで す。 create star index prod_sales_ix on sales (sales_product_fkc); sales_product_fkc 制約は、Sales テーブルに対する CREATE TABLE 文で指定されるこ とに注意してください。詳細については、8-149 ページを参照してください。 セグメント定義 セグメント定義は、テーブル データおよびシステムが生成した B-TREE インデック スに、名前付きセグメントとデータの格納範囲を割り当てます。データベース オブ ジェクトに対してどのようなときにセグメントを指定するかについては、 『Administrator's Guide』を参照してください。 テーブルはすべて、複数のセグメントに分割することができます。デフォルト設定 では、プライマリ キーを持つテーブルのデータと、システムが生成した B-TREE イ ンデックスを別のセグメントに格納します。データにもインデックスにもセグメン ト指定をしなかった場合は、システムがデフォルト セグメントを割り当てます。 8-150 SQL Reference Guide セグメント定義 CREATE TABLE 文全体の構文ダイアグラムと、セグメント定義構文の参照ポイント を示します。 CREATE TABLE ( <table_name> <column_definitions> ) <segment_specification> MAXROWS PER SEGMENT MAXSEGMENTS <maxrows> <maxsegments> 次にセグメント定義の構文ダイアグラムを示します。 <segment_name> DATA IN <segment_range_spec> SEGMENT BY HASH , ( ) <segment_name> <segment_range_spec> SEGMENT BY HASH PRIMARY INDEX IN <segment_name> <segment_range_spec> SEGMENT LIKE DATA , ( <segment_name> ) <segment_range_spec> SEGMENT LIKE DATA SQL 文と RISQL 拡張機能 8-151 セグメント定義 DATA IN <segment_name(s)> データを格納する 1 つ以上のセグメントの名前を指定しま す。どのテーブルも、複数のセグメントに格納することが できます。 ■ ■ ■ PRIMARY INDEX IN <segment_name(s)> 1 つのセグメントを指定した場合や、デフォルト によって 1 つのセグメントが作成された場合は、 テーブル全体がそのセグメントに格納されます。 複数のセグメントを指定すると、セグメント範囲 の指定に基づいて、各セグメントにデータが格納 されます。各セグメント名をカンマで区切り、セ グメント名リストをかっこで囲んでください。 セグメント名を指定しないと、1 つの物理格納ユ ニット (PSU) からなるデフォルト セグメントに テーブルが作成されます。 プライマリ キー インデックスを格納する 1 つ以上のセグメ ントの名前を指定します。 ■ ■ ■ 1 つのセグメントを指定すると、インデックス全 体がそのセグメントに格納されます。 複数のセグメントを指定すると、セグメント範囲 の指定に基づいて、各セグメントにインデックス が格納されます。各セグメント名をカンマで区切 り、セグメント名リストをかっこで囲んでくださ い。 名前を指定しない場合、システムがプライマリ キー インデックスのデフォルト セグメントを作成 します。 名前付きセグメントにインデックスを作成する方法につい ては、8-105 ページ「CREATE INDEX」を参照してくださ い。 8-152 SQL Reference Guide セグメント定義 例 - デフォルト セグメントと名前付きセグメントの使い方 このステートメントで作成されるテーブルは、デフォルト セグメントに格納されま す。 create table product( prodkey integer not null, classkey integer not null, product char(30), vendor character(40), constraint prod_pkc primary key (prodkey, classkey) constraint prod_fkc foreign key (classkey) references class (classkey)) 次のステートメントで作成されるテーブルは、名前付きセグメントに格納されま す。データは dataseg セグメント、プライマリ キー インデックスは indexseg セグメ ントに格納されます。 create table market( mktkey integer not null, city char(40), state character(40), constraint mkt_pkc primary key (mktkey) ) data in dataseg primary index in indexseg <segment_ range_spec> データやインデックスのセグメント化のために行データの範囲を割 り当てます。セグメント範囲指定の構文については、8-154 ページ を参照してください。 SEGMENT BY ハッシュ手法によるセグメント化により、各セグメントにデータを HASH 均等に格納します。ある列の値に基づいてデータを分散するのでは なく、各行のすべての値を使ってデータを分散します。ハッシュ手 法では、データがランダムに分散されるため、1 つのセグメントに データが集中するようなことはありません。このオプションは、イ ンデックスには使用できません。 ハッシュ手法によるセグメント化には、セグメント化の基準列や範 囲の指定は不要です。 ハッシュ手法で作成されたテーブルのセグメントは、ALTER SEGMENT 文のオプション DETACH、ATTACH、CHANGE RANGE、 または SEGMENT BY で変更することはできません。 この例では、3 つのセグメントにデータが均等に格納されます。 data in (seg1, seg2, seg3) segment by hash SQL 文と RISQL 拡張機能 8-153 セグメント定義 SEGMENT LIKE DATA プライマリ キー インデックスのセグメント範囲指定が、データ のセグメント範囲指定と同じであることを指定します。このオ プションが有効なのは、次の場合のみです。 ■ ハッシュではなく、値によってデータがセグメント化 されている。 プライマリ キーの先頭列が、データのセグメント化の 基準列と同じである。 プライマリ キー インデックスとデータに、同数のセグ メントが指定されている。 ■ ■ セグメント範囲指定 次にセグメント範囲指定の構文ダイアグラムを示します。セグメント範囲指定とセ グメント指定との関係は、8-150 ページを参照してください。 ( SEGMENT BY VALUES OF RANGES ( MIN :<literal> <segmenting_column> , ) <literal>:MAX <literal>:<literal> ) , MIN:MAX SEGMENT BY VALUES OF <segmenting_ column> 8-154 SQL Reference Guide <segmenting_column> の値に基づいて、テーブル データまたはプラ イマリ キー インデックスをセグメントに分散して格納します。 データのセグメント化を行うには、セグメント化の基準となる列 を NOT NULL に指定する必要があります。プライマリ キー イン デックスのセグメント化は、プライマリ キー インデックスの先頭 列を基準列に指定してください。 セグメント定義 例 - セグメント化基準列の指定 この例では、Mktkey 列が基準列です。Mktkey 列の値に基づいて、seg1_ix、 seg2_ix、seg3_ix の各セグメントにインデックスが格納されます。 primary index in (seg1_ix, seg2_ix, seg3_ix) segment by values of (mktkey) ranges (...) 次の例では、1 つのセグメントしか指定していませんが、セグメント化の基準列も 指定しています。セグメントが 1 つしかないテーブルやインデックスにも指定して おくと、ALTER SEGMENT 文によってセグメントを追加する時に役立ちます。 data in (seg1) segment by values of (prodkey) ranges (...) RANGES (MIN...MAX) 各セグメントに格納するセグメント化の基準列の値の範囲を指定し ます。 データとプライマリ キー インデックスの両方について、基準列の 値に基づいて範囲を指定します。データとプライマリ キー イン デックスの値の範囲は、基準列のデータ型によって決まります。た とえば、基準列が整数 (INTEGER) 型の場合は、-2,147,483,648 ∼ 2,147,483,647 の範囲で指定します。基準列が文字 (CHAR) 型または 可変長文字 (VARCHAR) 型の場合は、文字値の範囲を指定してくだ さい。 テーブル データやプライマリ キー インデックスを複数のセグメン トに格納する場合は、セグメントごとに範囲を指定してください。 セグメントの範囲は、次のように指定します。セグメント範囲の上 限と下限をコロン (:) で区切り、各範囲指定をカンマで区切ります。 範囲指定は、MIN キーワードで始め、MAX キーワードで終わりま す。昇順に指定し、値の重複やすき間がないようにします。各セグ メントの上限は、次のセグメントの下限と一致する必要がありま す。各セグメントには、下限の値以上で上限の値未満のデータが格 納されます。 SQL 文と RISQL 拡張機能 8-155 セグメント定義 例 データまたはプライマリ キー インデックスの範囲を指定する例を示します。デー タ ( またはインデックス ) は、State 列の値に基づいて 3 つのセグメントに格納され ます。第 1 セグメントの上限 (AZ) は、第 2 セグメントの下限と一致していることに 注意してください。テーブルやインデックスにデータを挿入すると、最小の ASCII 値から AY までの値が第 1 セグメント、AZ から MN までの値が第 2 セグメント、 MO から最大の ASCII 値までの値が第 3 セグメントに挿入されます。 segment by values of (state) ranges (min:'AZ', 'AZ':'MO', 'MO':max) データまたはプライマリ キー インデックスの範囲を指定する例をもう 1 つ示しま す。データは、Mktkey 列の値に基づいて 4 つのセグメントに格納されます。 Mktkey 列の値が 1000 である行をテーブルに挿入すると、その行は第 2 セグメント に格納されます。 segment by values of (mktkey) ranges (min:1000, 1000:2000, 2000:3000, 3000:max) 図 8-12 に、誤った指定例を示します。第 1 セグメントの範囲が、第 2 セグメントの 範囲と重複していて、第 2 セグメントと第 3 セグメントが連続していません。 図 8-12 範囲指定のエラー /*Error*/ segment by values of (mktkey) ranges (min:1000, 500:2000, 3000:4000, 4000:max) MIN、MAX 範囲の最初と最後を示す値を指定します。最初の範囲の最小値に は、セグメント化の基準列の最小値を示す MIN キーワードを指定 し、最後の範囲の最大値には、セグメント化の基準列の最大値を示 す MAX キーワードを指定します。 4 つのセグメントにデータまたはプライマリ キー インデックスを格納する例を示し ます。Mktkey は、INTEGER データ型のセグメント化の基準列です。MIN キーワー ドは、Mktkey の値が 500 未満であるすべての行を第 1 セグメントに格納することを 指定します。MAX キーワードは、Mktkey の値が 4,000 ∼ 2,147,483,647 の範囲にあ るすべての行を最終セグメントに格納することを指定します。 segment by values of (mktkey) ranges (min:500, 500:2000, 2000:4000, 4000:max) <literal> 8-156 SQL Reference Guide セグメントの範囲を示す英数字の定数値を指定します。定数の詳細 については、2-9 ページを参照してください。 セグメント定義 例 次の例では、SET DEFAULT SEGMENT SIZE 文を使用して、デフォルト セグメント に領域を割り当てます。さらに SET DEFAULT PSU EXTENDSIZE 文を使用して、 データ セグメントがいっぱいになったときに PSU を拡張するための増分サイズを 指定します。 SET DEFAULT SEGMENT SIZE 文により、作成されるデフォルト PSU の数が決まり ます。2GB のデフォルト セグメントごとに 1 つのデフォルト PSU が作成されます。 次の 2 つのステートメントで、DEFAULT SEGMENT SIZE を 5GB、DEFAULT PSU EXTENDSIZE を 256KB に設定できます。 SET DEFAULT SEGMENT SIZE 5G SET DEFAULT PSU EXTENDSIZE 256K この 2 つのステートメントで、次のように 3 つの PSU がデフォルト セグメントに割 り当てられます。 図 8-13 3 つの PSU PSU 1 PSU 2 PSU 3 init = 16 KB init = 16 KB init = 16 KB extend = 256 KB extend = 256 KB extend = 256 KB max = 2 GB (-8 KB) max = 2 GB (-8 KB) max = 1 GB (-8 KB) 次のオプションを rbw.config ファイルに設定した場合も結果は同じです。 OPTION DEFAULT_SEGMENT_SIZE 5G OPTION DEFAULT_PSU_EXTENDSIZE 256K SQL 文と RISQL 拡張機能 8-157 セグメント定義 その他の CREATE TABLE 例 次のステートメントは、データとプライマリ キー インデックスにデフォルト セグ メントを 1 つずつ使用するテーブルを作成します。 create table sales ( mktkey integer not null, prodkey integer not null, perkey integer not null, punits numeric (9,2), units integer, dollars integer, constraint sales_pkc primary key (mktkey, prodkey, perkey), constraint sales_fkc1 foreign key (mktkey) references market (mktkey), constraint sales_fkc2 foreign key (prodkey) references product (prodkey), constraint sales_fkc3 foreign key (perkey) references period (perkey) ) 次のステートメントは、名前付きセグメントに格納されるテーブルを作成します。 Prodname 列には No Name というデフォルト値が割り当てられます。Prod_Exmpl テーブルに行を挿入するときに、Prodname 列の値を指定しないと、No Name が Prodname 列に挿入されます。Descript 列の値を指定しないと、Descript 列は NULL に設定されます。 create table product_exmpl ( prodkey integer not null, prodname char(30) default 'No Name', descript character(40), constraint prod_pkc primary key (prodkey) ) data in dataseg primary index in indexseg maxsegments 2 maxrows per segment 50000 8-158 SQL Reference Guide セグメント定義 次のステートメントは、データとプライマリ キー インデックスの両方を複数の名 前付きセグメントに格納するテーブルを作成します。 create table orders ( invoice integer not null, line_item integer not null, perkey date not null, prodkey integer not null, classkey integer not null, custkey integer not null, promokey integer not null, dollars integer, weight integer, constraint orders_pkc primary key (invoice, line_item), constraint orders_fkc1 foreign key (perkey) references period (perkey), constraint orders_fkc2 foreign key (prodkey, classkey) references product (prodkey, classkey), constraint orders_fkc3 foreign key (custkey) references customer (custkey), constraint orders_fkc4 foreign key (promokey) references promotion (promokey) ) data in (orders_data1, orders_data2, orders_data3) segment by values of (perkey) ranges (min:'04-01-1999', '04-01-1999':'07-01-1999', '07-01-1999':max) primary index in (orders_ix1, orders_ix2, orders_ix3) segment by values of (invoice) ranges (min:1000, 1000:3000, 3000:max) maxsegments 3 maxrows per segment 50000 SQL 文と RISQL 拡張機能 8-159 CREATE TEMPORARY TABLE CREATE TEMPORARY TABLE CRATE TEMPORARY TABLE 文は、テーブル自身が作成されたセッションの間だけ アクセスできるテーブルを指定します。テーブルはセッション中だけ、あるいは DROP TABLE 文で削除するまで存在します。テーブルのプライマリ キーに B-TREE インデックスが自動的に作成されます。 テンポラリ テーブルは、次の特性を持っています。 ■ ■ ■ ■ ■ ■ ■ テンポラリ テーブルは、それ自身が作成された SQL セッションで排他的 に使用されます。セッションの外部からは検索できず、テンポラリ テーブ ルのデータをほかのセッションと共有しません。 テンポラリ テーブルは、データベース内の任意のテーブルに結合できま す。インデックスおよび列のデフォルト値をテンポラリ テーブルに対して 指定でき、テーブル存在中は存続します。 テンポラリ テーブルは、後のセッションで作成されるパーマネント テー ブルと同名でもかまいませんが、同じセッションまたは前のセッションで 作成されたパーマネント テーブルと同名であってはなりません。 テンポラリ テーブルのユーザが実行するすべてのクエリは、自動的にその テーブルをクエリの対象とします。同名のパーマネント テーブルが存在し たり、後にほかのセッションで作成される場合でも同様です。テンポラリ テーブルは常にパーマネント テーブルに優先します。 ほかのユーザはテンポラリ テーブルにアクセスできないため、更新中は ロックする必要はありません。 システム テーブルの競合を避けるため、テンポラリ テーブルはシステム テーブルに永続的にはカタログ化されません。テンポラリ テーブルの情報 は、ユーザ セッション中はメモリに格納され、システム テーブルに登録 されますが、セッションが終了するときに削除されます。 テンポラリ テーブルは、SQL セッションの最後に自動的に削除されます。 ただし、DROP TABLE 文でセッション中に削除することもできます。 IBM Red Brick Warehouse テンポラリ テーブルは ANSI SQL92 標準に準拠していま す。 8-160 SQL Reference Guide CREATE TEMPORARY TABLE アクセス権 テンポラリ テーブルを作成するユーザは、次の中で少なくとも 1 つの条件を満たし ている必要があります。 ■ ■ ■ DBA ロールのメンバーであるか、RESOURCE システム ロール権限を持っ ていること GRANT_TEMP_RESOURCE_TO_ALL オプションにより CONNECT システ ム ロール権限を持っていること 明示的に付与されるかユーザが作成したロールのメンバーであることによ り、CREATE_ANY 権限、CREATE_OWN 権限、または TEMP_RESOURCE 権限を持っていること 構文 次に CREATE TEMPORARY TABLE 文の構文ダイアグラムを示します。 <table_name> CREATE TEMPORARY TABLE ( <table_name> <column_definitions> テーブル名は、次の条件を満たしている必要があります。 ■ ■ <column_ definitions> ) セッションごとに一意であること。同じデータベースにア クセスするほかのセッションで作成されるテンポラリ テー ブルの名前と重複しない名前である必要があります。 有効なデータベース識別子であること。 テーブルの各列を定義します。CREATE TEMPORARY TABLE 文で 列を定義するとき、プライマリ キーは定義できますが、フォーリン キー参照は定義できません。MAXSEGMENTS および MAXROWS PER SEGMENT の指定は使用できません。列の定義の説明について は、8-139 ページを参照してください。 SQL 文と RISQL 拡張機能 8-161 CREATE TEMPORARY TABLE 使用上の注意 パーマネント テーブルとテンポラリ テーブルの次の相違点に注意してください。 ■ ■ ■ ■ ■ ■ テンポラリ テーブルはプライマリ キー定義をサポートしますが、フォー リン キー参照をサポートしません。 テンポラリ テーブルは、ほかのテーブルを参照したり、ほかのテーブルか ら参照されたりすることができないため、STAR インデックスの作成をサ ポートしません。 テンポラリ テーブルは、データおよびインデックスのセグメント指定をサ ポートしません。データ、またはインデックスのセグメント指定は、それ ぞれ別々のデフォルト セグメントに格納する必要があります。 テンポラリ テーブルには、MAXSEGMENTS および MAXROWS PER SEGMENT の指定は使用できません。 テンポラリ テーブルは、Table Management Utility (TMU) でロードすること ができません。 テンポラリ テーブルでは、次の操作は実行できません。 ❑ ALTER TABLE ❑ ALTER INDEX ❑ ALTER SEGMENT ❑ CREATE VIEW ❑ CREATE SYNONYM ❑ CREATE STAR INDEX ❑ GRANT PRIVILEGE ❑ REVOKE PRIVILEGE 例 次の例は、テンポラリ テーブルを作成します。 create temporary table tea_list( name char(10) not null, type char(5) not null, stock_no int not null, constraint temptable_pkc primary key (name, stock_no)) 8-162 SQL Reference Guide CREATE VIEW CREATE VIEW CREATE VIEW 文は、既存のテーブルまたはビューからデータを抽出するクエリ式 の結果を読み取り専用テーブルにします。 CREATE VIEW 文は、クエリ式を読み込み、使用されているマクロを展開し、効率 的な内部形式で式を格納します。このため、既存のビューが参照するマクロやテー ブルが変更されても、ビューには変更が反映されません。オリジナル テキストは表 示のためにだけ、RBW_VIEWTEXT テーブルに格納されます。 ビューの作成後にテーブルやマクロを修正した場合、変更をビューに反映させるに は、ビューを削除し、再作成してください。 USING 句を使用した CREATE VIEW 文は事前計算ビューを作成します。事前計算 ビューは、ビューに指定したクエリの結果を格納している基本テーブルに関連付け られたビューです。通常のビューの結果は、このように事前計算されません。事前 計算ビューの詳細については、 『IBM Red Brick Vista User’s Guide』を参照してくださ い。 アクセス権 ビューを作成するユーザは、次の中で少なくとも 1 つの条件を満たしている必要が あります。 ■ ■ DBA システム ロールか、RESOURCE システム ロールのメンバーであるこ と 明示的に付与されるかユーザが作成したロールのメンバーであることによ り、CREATE_ANY 権限か CREATE_OWN 権限を持っていること 構文 次に CREATE VIEW 文の構文ダイアグラムを示します。 CREATE VIEW <view_name> , ( AS ) <column_name> <query_expression> <precomputed_query_expression> <using_clause> SQL 文と RISQL 拡張機能 8-163 CREATE VIEW <view_name> 作成するビューの名前を指定します。データベースにあるほかの ビュー名やテーブル名と重複しないデータベース識別子を指定して ください。ビューは、INSERT 文、UPDATE 文、DELETE 文で修正 することはできません。 <column_name> ビューの列名を指定します。基本テーブルの列名と同じでも、違っ ていてもかまいません。列名リストを指定する場合は、SELECT 文 で表したクエリ式が返す列と同数の列を指定する必要があります。 列名リストを指定しないと、ビューの列名は基本テーブルと同じに なります。次のようなクエリ式を使用する場合は、列名リストを指 定する必要があります。 ■ ■ 共通の列名を持つテーブルを参照するクエリ式。共通の列 名を持つテーブルを参照しないと、列名が重複している場 合に参照があいまいになります。 たとえば、Sales テーブルと Store テーブルの両方に Storekey という列があるとします。CREATE VIEW 文のク エリ式が、Sales テーブルと Store テーブルの両方を参照す る場合、列名リストを指定しないと、どちらの Storekey 列であるかが特定できません。 名前のない列を使用するクエリ式。たとえば、次に示すよ うなエリアスのない集約関数がクエリ式に含まれる場合、 列には名前がありません。 sum(dollars) <query_ expression> ビューの内容を定義します。ビューが参照されるたびに、クエリ式 と同等の SELECT 文が返すようなリザルト テーブルが返されます。 クエリ式の定義と詳細は、第 7 章「クエリ式」を参照してくださ い。 <precomputed_ 通常の CREATE VIEW 文の <query_expression> よりも範囲を限定し query_ たクエリ式を指定します。サブクエリ、HAVING 句、WHEN 句を expression> 使用することはできません。事前計算クエリ式の構文は次のとおり です。 8-164 SQL Reference Guide CREATE VIEW , <column_name> SELECT <aggregate_column> , <table_name> FROM AND WHERE <join_predicate> , GROUP BY <column_name> SELECT FROM 句に指定したテーブルから選択された列です。 <column_name> テーブルから選択された列を指定します。SELECT リストで指 定したすべての列名 ( 集約列名以外 ) は、GROUP BY 句でも指 定する必要があります。SELECT リストで列エリアスを使用で きます。 SQL 文と RISQL 拡張機能 8-165 CREATE VIEW <aggregate_column> 次の形式で列を指定します。 <set_function>(<expression>) この例の <set_function> は次の集約関数の一つです。 ■ ■ ■ ■ SUM MIN MAX COUNT <expression> は、ビュー定義、定数またはその両方の FROM 句 に詳細ファクト テーブルの列名を使用した単項式または多項 式です。 次の式は、Sales テーブルがビュー定義の FROM 句で指定した 詳細ファクト テーブル名である場合の、有効な集約列の例で す。 sum(sales.dollars) min(sales.dollars/sales.quantity) max((sales.quantity) * 10) SUM (DISTINCT) 関数、COUNT (DISTINCT) 関数および COUNT (*) 関数もサポートされます。 次の制約に注意してください。 ■ ■ ■ ■ 8-166 SQL Reference Guide COUNT 関数の引数として使用する式は、単項式であ る必要があります。 スカラ関数、RISQL 表示関数、サブクエリを使用し た式はサポートされません。 SUM 関数の式は数値式である必要があります。 AVG 集約関数は使用できません。ただし、適切な集 約テーブルに同じ列の SUM 値または COUNT 値があ る場合は、AVG クエリを書き換えることができます。 CREATE VIEW ■ DISTINCT 関数は COUNT 関数および SUM 関数の引数とし てだけ使用できます。SELECT DISTINCT クエリは使用で きません。 集約関数の詳細については、第 4 章 「集約関数」を参照してくださ い。式の詳細については、第 3 章「式と条件」を参照してくださ い。 FROM SELECT リストの列から派生したテーブルです。FROM 句の各テー ブルは、WHERE 句の結合述部を使用して、FROM 句のほかのテー ブルのいずれか 1 つからだけ参照できます。結合は、FROM 句では 指定できず、WHERE 句で指定する必要があります。 <table_name> 詳細テーブルを指定します。システム テーブル、ビュー、クエリ式 から派生したテーブルおよび集約テーブルは使用できません。 シノニムはディメンジョン テーブルにだけ使用できます。 テーブルの相関名は使用できます。 WHERE ファクト テーブルをディメンジョン テーブルおよびアウトボード テーブルに結合する結合述部を指定します。事前計算ビューのクエ リ式では、結合述部は、フォーリン キーまたはプライマリ キー関 係に従ってテーブルを結合する必要があります。これらの述部は等 号で表現する必要があります。 外部結合述部は、事前計算ビューの定義では指定できません。 GROUP BY SELECT 文で定義した列名です。SELECT 文のすべての非集約列を GROUP BY 句に指定する必要があります。 <using_clause> 次に USING 句の構文ダイアグラムを示します。USING 句と CREATE VIEW 文との関係は、8-163 ページを参照してください。 , USING <table_name> ( <column_name> ) SQL 文と RISQL 拡張機能 8-167 CREATE VIEW USING テーブルおよび列を識別し、ビューをテーブルにリンクします。 ビューは、LOAD DATA 操作または INSERT 文でテーブルにデータ が挿入されるまでは、事前計算されません。 <table_name> ビューに関連付けられたテーブルの名前を指定します。作成する 個々の事前計算ビューには、個別のテーブルを使用する必要があ ります。 シノニムを使用して事前計算ビューを作成することはできません。 <column_name> ビューの列と 1 対 1 で対応するテーブルの列名を指定します。列 名リストは必須です。 シリアル (SERIAL) 型は、ビュー列、ビュー テーブル列、述部な どの事前計算ビュー定義では許可されません。 事前計算ビューの使用上の注意 CREATE VIEW...USING 文は、次の制約を満たしている必要があります。 ■ ■ ■ ■ ■ 検索項目リストには、GROUP BY に指定した列またはグルーピング列を最 低 1 つ指定する必要があります。 検索項目リストに指定した列は、GROUP BY 句に指定される列と一致する 必要があります。 結合述部は、プライマリ キー / フォーリン キー関係と等号による制約を反 映している必要があります。 ビューの列数は、USING 句のテーブルに指定された列数と一致する必要が あります。 テーブル内の名前付き列のデータ型は、ビュー内の列のデータ型との互換 性が必要です。非数値データ型は正確に一致している必要があります。た とえば、CHAR(3) の列はビューの CHAR(4) の列に対応させることができ ません。 数値データ型は、正確に一致する必要はありません。ただし、テーブルの 列がビューで定義された列値を格納できない場合は、ビュー作成時に警告 メッセージが表示されます。この例は、8-170 ページを参照してください。 重要 : デフォルトでは集約保守は新しい事前計算ビューの保守を行います。 8-168 SQL Reference Guide CREATE VIEW 例 次のビューは、紅茶製品 ( 計り売りまたはパッケージ入り ) に分類されている製品 だけを格納する論理テーブルを定義します。 create view tea_list as select product.classkey as c, product.prodkey as p, prod_name as name from product join class on product.classkey = class.classkey where class.classkey in (2, 5); select * from tea_list; C 2 2 2 2 2 2 2 2 2 2 5 5 5 5 5 5 5 5 5 5 P 0 1 10 11 12 20 21 22 30 31 0 1 10 11 12 20 21 22 30 31 NAME Darjeeling Number 1 Darjeeling Special Assam Grade A Assam Gold Blend Earl Grey English Breakfast Irish Breakfast Special Tips Gold Tips Breakfast Blend Darjeeling Number 1 Darjeeling Special Assam Grade A Assam Gold Blend Earl Grey English Breakfast Irish Breakfast Special Tips Gold Tips Breakfast Blend 各店舗を地域別にグループ分けし、各地域の店舗数をカウントするビューの例を示 します。 create view regions (region, store_count) as select region, count(name) from market join store on market.mktkey = store.mktkey group by region; select * from regions; REGION West South Central North STORE_COUNT 7 4 4 4 SQL 文と RISQL 拡張機能 8-169 CREATE VIEW 次のステートメントは、集約テーブルに関連付けられた事前計算ビューを作成しま す。 create view company_sales (period, class_no, product_no, units, amount) as select perkey, classkey, prodkey, sum (quantity) as units, sum (dollars) as amount from sales group by perkey, prodkey, classkey using aggr_sales_table (perkey, classkey, prodkey, quantity, dollars) 次のステートメントは、派生ディメンジョン テーブルに関連付けられた事前計算 ビューを作成します。このため、クエリ式には GROUP BY に指定した列だけが使用 されます。集約列は使用されません。派生ディメンジョンの詳細については、 『IBM Red Brick Vista User’s Guide』を参照してください。 create view pd_qtr_view as select qtr, year from period group by qtr, year using period_qtr (qtr, year) 次の例は、事前計算ビューとそれに関連付けられたテーブルのデータ型には互換性 が必要であることを示します。テーブルの数値列をビューの数値列に対応させる場 合、2 つのデータ型が正確に一致しない場合は警告メッセージが表示されます。 create table agg1 (perkey int, dollars dec(7,2)) create view agg1_view(perkey, dollars) as select period.perkey, sum(dollars) from sales, period where period.perkey = sales.perkey group by period.perkey using agg1(perkey, dollars) ** WARNING ** (1931) Datatypes of related columns in the view (AGG1_VIEW.DOLLARS, datatype DECIMAL (13,2)) and table (AGG1.DOLLARS, datatype DECIMAL (7,2)) might cause precision loss, overflow, or underflow. このメッセージは、単なる警告です。テーブルおよびビューは、両方とも作成され ています。 事前計算ビューを作成、選択する方法の詳しい例については、『SQL Self-Study Guide』を参照してください。また、『IBM Red Brick Vista User’s Guide』にも事前計 算ビューの例があります。 8-170 SQL Reference Guide DELETE DELETE DELETE 文は、指定した基本テーブルから任意の行を削除します。 アクセス権 テーブルから行を削除するユーザは、次の中で少なくとも 1 つの条件を満たしてい る必要があります。 ■ ■ ■ ■ DBA システム ロールのメンバーであること 明示的に付与されるかユーザが作成したロールのメンバーであることによ り、MODIFY_ANY 権限を持っていること テーブルの作成者であること テーブルに対する DELETE 特権を持っていること 構文 次に DELETE 文の構文ダイアグラムを示します。 DELETE FROM <table_name> , USING WHERE <search_condition> <table_reference> OVERRIDE REFCHECK SQL 文と RISQL 拡張機能 8-171 DELETE <table_name> 行を削除するテーブル名、テンポラリ テーブル名、またはシノニ ム名を指定します。<table_name> にビュー名は指定できません。 USING 行削除の追加基準として使用するテーブルを 1 つまたは複数指定 <table_reference> します。<table-reference> で指定された複数のテーブルは結合さ れ、WHERE 句で指定されたとおりに <table-name> から行が削除 されます。<table-reference> は <table-name> も含んでいる必要があ ります。このセクションの末尾にある例を参照してください。 USING <table-reference> 句は、より高い性能をもつサブクエリの 代用として使用します。 <table-reference> で指定されるテーブルは、基本テーブルまたはシ ノニムである必要があります。 DELETE 操作の USING 句でターゲット テーブルに相関名が割り 当てられている場合は、FROM 句でもテーブル名そのものではな く相関名でテーブルを指定します。たとえば、次のようになりま す。 delete from sales_old using sales as sales_old, period where... <table_reference> 句の詳細は、7-13 ページ「テーブル参照」を参 照してください。 WHERE DELETE 文の操作対象を示す検索条件を指定します。WHERE 句 を指定しないと、すべての行がテーブルから削除されます。指定 した場合は、検索条件を満たす行だけが削除されます。検索条件 からは、指定したテーブルしか参照できません。検索条件の詳細 については、3-10 ページを参照してください。WHERE 句の詳細 については、7-36 ページを参照してください。 OVERRIDE REFCHECK DELETE 文の実行時に、参照整合性を検証しないように指示しま す。参照整合性の検証を無効にするのは、主に、参照されていな い行をテーブルから削除する場合です。 この句は、CREATE TABLE 文で指定したデリート モードに優先 します。参照整合性チェックを省略すると非常に高速になります が、データベースが不整合な状態になり、再編成による参照整合 性の確認が必要になることがあります。 OVERRIDE REFCHECK を使用すると、クエリが誤った結果を返 したり、参照整合性違反が発生する場合があります。 8-172 SQL Reference Guide DELETE 使用上の注意 削除操作中の参照整合性は、テーブルの作成時に指定したデリート モードに応じ て、リストリクト デリート (NO ACTION) またはカスケード デリート (CASCADE) で維持されます。複数の参照元テーブルが削除に関わり、各テーブルのデリート モードが異なる場合は、全体の削除動作がリストリクト デリートになります。NO ACTION は CASCADE よりも優先され、この優先順位は参照先テーブルと参照元 テーブルに再帰的に適用されます。 DELETE 文を実行すると、事前計算ビューに対して集約保守が実行されることがあ ります。集約保守の詳細については、 『IBM Red Brick Vista User’s Guide』を参照して ください。 重要 : カスケード デリート操作については自動保守が実行されません。 複数の DELETE 文を実行する場合は、ほかのユーザによるテーブルのアクセスを制 限する LOCK ( テーブルのロック ) 文を使用すると効率的になります。LOCK ( テー ブルのロック ) 文については、8-221 ページ「LOCK ( テーブルのロック )」を参照 してください。データベースの再編成と再ロード、カスケード デリートとリストリ クト デリートについては、 『Administrator's Guide』を参照してください。 SELECT 文では外部結合がサポートされる ( ただし、外部結合は使用しないことが 強く推奨される ) のに対して、DELETE 文では WHERE 句での外部結合がサポート されません。外部結合が必要な場合は、USING 句で指定してください。 USING 句では、変更するテーブルの指定には次の制限があります。 ■ ■ ■ 右外部結合で指定される右のテーブルとしては指定できません。 左外部結合で指定される左のテーブルとしては指定できません。 フル外部結合のどの場所にも指定できません。 DELETE 文で結合操作を実行する場合は、ステートメントで設定された選択基準 が、ターゲット テーブルの同じ行を複数回指定する可能性があります。この場合 は、最初に選択されたときに行が削除され、その後の指定は無視されます。行を削 除すると参照整合性違反が発生する場合は、削除できなかった行として統計にカウ ントされ、操作の最後に報告されます。削除されなかった行と削除された行の合計 は、テーブル内の行数を超えることがあります。その場合は、状況を説明するメッ セージが表示されます。 DELETE 文を実行すると、事前計算ビューに対して集約保守が実行されることがあ ります。集約保守の詳細については、 『IBM Red Brick Vista User’s Guide』を参照して ください。 SQL 文と RISQL 拡張機能 8-173 DELETE 例 : DELETE 次の DELETE 文は、WHERE 句に指定した検索条件を満たす行を Product テーブル から削除します。 delete from product where prod_name like 'Allspice%' and pkg_type like 'Sealed%' 次の例は、USING 句の使い方を示しています。この例では、1998 年 1 月 15 日より 前のプロモーションをすべて削除します。 delete from promotion using promotion, period, sales where period.perkey = sales.perkey and promotion.promokey = sales.promokey and period.date < DATE '1998-01-15' 次の例は、CREATE TABLE 文の ON DELETE オプションの指定により、削除にとも なって参照元テーブルに対する参照整合性がどのように維持されるかを示していま す。Fact1 テーブルと Fact2 テーブルは、どちらも Dim1 テーブルと Dim2 テーブル を参照しますが、Dim1 テーブルの参照には同じ ON DELETE 句を使用しており、 Dim2 テーブルの参照では異なる内容の ON DELETE 句を使用しています。 create table dim1( pkey1 int not null, primary key (pkey1) ) create table dim2( pkey2 int not null, primary key (pkey2) ) create table fact1( pkey1 int not null, pkey2 int not null, primary key (pkey1, pkey2), foreign key (pkey1) references dim1(pkey1) on delete cascade, foreign key (pkey2) references dim2(pkey2) on delete cascade ) create table fact2( pkey1 int not null, pkey2 int not null, primary key (pkey1, pkey2), foreign key (pkey1) references dim1(pkey1) on delete cascade, foreign key (pkey2) references dim2(pkey2) on delete no action ) 8-174 SQL Reference Guide DELETE Dim1 に対する削除動作では、指定した行が Dim1 から削除されると同時に、削除さ れる行を参照する Fact1 と Fact2 の行も削除されます。 Dim2 に対する削除動作は、Dim2 の参照に対する ON DELETE 句を、Fact1 と Fact2 のどちらについても NO ACTION に設定した場合と同様になります。Fact1 の ON DELETE 句には、Dim2 の参照についてカスケード デリート モードが指定されてい ますが、Fact1 または Fact2 が参照する Dim2 の行は削除されません。 次の例は、NO ACTION が CASCADE よりも優先され、この優先順位が再帰的に適 用される場合を示しています。 create table dim1_1( pkey1_1 int not null, primary key(pkey1_1) ) create table dim1( pkey1 int not null, primary key (pkey1), fkey1 int not null, foreign key (fkey1) references dim1_1(pkey1_1) on delete cascade ) create table dim2( pkey2 int not null, primary key (pkey2) ) create table fact1( pkey1 int not null, pkey2 int not null, primary key (pkey1, pkey2), foreign key (pkey1) references on delete cascade, foreign key (pkey2) references on delete no action ) create table fact2( pkey1 int not null, pkey2 int not null, primary key (pkey1, pkey2), foreign key (pkey1) references on delete no action, foreign key (pkey2) references on delete cascade ) dim1(pkey1) dim2(pkey2) dim1(pkey1) dim2(pkey2) SQL 文と RISQL 拡張機能 8-175 DROP HIERARCHY Dim1_1 に対する削除動作で、Dim1 にはカスケード デリートが指定されています が、Fact2 には NO ACTION が指定されているため、すべてのテーブルについて NO ACTION を指定した場合と同じ削除動作になります。つまり、Dim1_1 の行を参照 する Dim1 の行が、Fact2 の行によって参照される場合、Dim1_1 の行は削除されま せん。さらに、Dim1_1 の行を参照する Dim1 の行が、Fact1 の行によって参照され る場合も、Dim1_1 の行は削除されません。これは、1 つの DELETE 文に、リスト リクト デリートとカスケード デリートを組み合わせて指定した場合は、すべての 削除動作がリストリクト モードで実行されるためです。 プライマリ キーとフォーリン キーの従属関係にリストリクト デリート (NO ACTION) を指定した場合は、すべての従属関係にリストリクト デリートを暗黙的 に指定したことになります。 DROP HIERARCHY DROP HIERARCHY 文は、階層構造名で指定された既存の階層構造および関数従属 性を削除します。 アクセス権 階層構造を削除するユーザは、次の中で少なくとも 1 つの条件を満たしている必要 があります。 ■ ■ ■ DBA システム ロールのメンバーであること 明示的に付与されるかユーザが作成したロールのメンバーであることによ り、DROP_ANY 権限を持っていること RESOURCE システム ロールのメンバーで、かつ階層構造の作成者である こと 構文 次に DROP HIERARCHY 文の構文ダイアグラムを示します。 DROP HIERARCHY 8-176 SQL Reference Guide <hierarchy_name> DROP INDEX 例 次の DROP HIERARCHY 文は、store_market_relationship という名称の階層構造を削 除します。この階層構造が削除されると、この階層構造内のすべての関数従属性が 削除されるので注意してください。 drop hierarchy store_market_relationship; 階層構造の定義と削除の詳細については、 『IBM Red Brick Vista User’s Guide』を参照 してください。 DROP INDEX DROP INDEX 文は、指定したインデックスを削除します。CREATE INDEX 文で作 成したインデックスと、システムが生成した B-TREE インデックスの両方を削除す ることができます。 アクセス権 テーブルに定義されたインデックスを削除するユーザは、次の中で少なくとも 1 つ の条件を満たしている必要があります。 ■ ■ ■ ■ DBA システム ロールのメンバーであること 明示的に付与されるかユーザが作成したロールのメンバーであることによ り、DROP_ANY 権限を持っていること RESOURCE システム ロールのメンバーで、かつインデックスの作成者で あること DROP_OWN 権限を持っていて、インデックスの作成者であること 構文 次に DROP INDEX 文の構文ダイアグラムを示します。 DROP INDEX <index_name> DROPPING SEGMENTS KEEPING SEGMENTS SQL 文と RISQL 拡張機能 8-177 DROP INDEX <index_name> 削除するインデックスの名前を指定します。CREATE INDEX 文で作 成したインデックス、自動作成された B-TREE インデックスのどち らも削除できます。8-179 ページを参照してください。 DROPPING SEGMENTS インデックスに関連した名前付きセグメントおよびデフォルト セグ メントを削除します。セグメントの物理格納ユニット (PSU) は、す べて削除されます。 KEEPING SEGMENTS インデックスに関連付けられた名前付きセグメントをそのまま残し ます。セグメントはインデックスから切り離され、ほかのデータ べース オブジェクトにアタッチすることができます。デフォルト セグメントは、必ず削除されます。 使用上の注意 DROPPING SEGMENTS、KEEPING SEGMENTS のどちらも指定されていない場合、 rbw.config ファイルの OPTION SEGMENTS パラメータで指定されているデフォルト 動作が使用されます。rbw.config ファイルで指定されている初期デフォルト動作で は、名前付きセグメントが保持され、デフォルト セグメントが削除されます。デ フォルト動作は、rbw.config ファイルのパラメータで変更できます。 テーブルを削除すると、テーブルのインデックスも自動的にすべて削除されます。 例 このステートメントは、distribution_ix インデックスをデータベースから削除し、名 前付きセグメントをすべて残します。名前付きセグメントは、ほかのインデックス やテーブルにアタッチすることができます。 drop index distribution_ix keeping segments 次のステートメントは、TARGET インデックス tgt_ix1 と、そのインデックス セグ メントをデータベースから削除します。セグメントは再利用できません。 drop index tgt_ix1 dropping segments 8-178 SQL Reference Guide DROP INDEX システム生成 B-TREE インデックスの削除 DROP INDEX 文を使用して、システムが生成した B-TREE インデックスを削除する と、次の操作が実行できなくなります。 ■ ■ インデックスの対象テーブルへの行の挿入 インデックスの対象テーブルのプライマリ キーを参照するほかのテーブル への行の挿入 データの挿入に関する上記の制約は、テーブル データの一意性と参照整合性の制約 を維持することを目的としています。システムが生成したインデックスの削除後に データを挿入できるようにするには、そのテーブルのプライマリ キー インデック スを明示的に作成してください。 テーブルにあるすべてのフォーリン キーに STAR インデックスを作成し、これらの フォーリン キーがそのプライマリ キーを構成するようなシンプル スター スキーマ は、IBM Red Brick Warehouse で自動的に生成されません。シンプル スター スキーマ の STAR インデックスを作成するには、システムが生成した B-TREE インデックス を削除し、すべてのフォーリン キーをインデックス キーに指定する CREATE STAR INDEX 文を実行する必要があります。 シンプル スター スキーマの STAR インデックスを作成した場合、プライマリ キー の B-TREE インデックスがなくても、そのインデックス付きテーブルへ行を挿入で きます。ただし、STAR インデックスが維持できるのは一意性制約だけであり、参 照整合性の維持はできません。このため、参照先テーブルのプライマリ キーに BTREE インデックスがない限り、STAR インデックスの定義されたテーブルのプライ マリ キーを参照するほかのテーブルには、行を挿入できません。 行が挿入できないテーブルは、次のとおりです。 ■ ■ プライマリ キーの B-TREE インデックスが削除された参照先テーブル。た だし、そのプライマリ キーに STAR インデックスが作成されている場合 は、行を挿入することができます。 プライマリ キーの B-TREE インデックスが削除されたテーブルを参照する 参照元テーブル。参照先テーブルのプライマリ キーに STAR インデックス が作成されていても、行は挿入できません。 再作成されたインデックスのキー列の順序 削除されたシステム生成 B-TREE インデックスと置き換えるために、複数の列から なるプライマリ キーに B-TREE インデックスまたは STAR インデックスを作成する 場合は、新しいインデックスのキー列の順序は、CREATE INDEX 文で指定した順序 となります。システム生成インデックスの順序は、CREATE TABLE 文で指定した順 序となります。 SQL 文と RISQL 拡張機能 8-179 DROP MACRO 再作成されたインデックス内のキー列の順序は性能に多大な影響を与えます。性能 向上を目的とするインデックス作成の詳細については、 『Administrator's Guide』を参 照してください。 インデックス作成に関する詳細については、8-105 ページ「CREATE INDEX」を参 照してください。 DROP MACRO DROP MACRO 文は、マクロを削除します。 アクセス権 PUBLIC マクロを削除するユーザは、次の中で少なくとも 1 つの条件を満たしてい る必要があります。 ■ ■ DBA システム ロールのメンバーであること 明示的に付与されるかユーザが作成したロールのメンバーであることによ り、DROP_ANY 権限か PUBLIC_MACROS 権限を持っていること プライベート マクロを削除するユーザはマクロの作成者であり、次の中で少なくと も 1 つの条件を満たしている必要があります。 ■ ■ DBA システム ロールか、RESOURCE システム ロールのメンバーであるこ と 明示的に付与されるかユーザが作成したロールのメンバーであることによ り、DROP_ANY 権限か DROP_OWN 権限を持っていること テンポラリ マクロは、現在 IBM Red Brick Warehouse データベースに接続している ユーザであればどのユーザでも削除できます。 構文 次に DROP MACRO 文の構文ダイアグラムを示します。 MACRO DROP TEMPORARY PUBLIC 8-180 SQL Reference Guide <macro_name> DROP ROLE 使用上の注意 ビューを作成すると、そのビューで参照しているマクロが展開され、ビューの SELECT 文が効率的な内部形式で格納されます。このため、既存のビューが参照す るマクロを変更しても、ビューには変更が反映されません。ビューの作成後にマク ロを修正または削除した場合、変更をビューに反映させるには、ビューを削除し、 再作成してください。 DROP MACRO 文のキーワードは、対応する CREATE MACRO 文に使用したキー ワードと一致させてください。たとえば、テンポラリ マクロを削除する場合は、同 名のマクロ ( パブリック マクロやプライベート マクロ ) がほかになくても、 TEMPORARY キーワードを DROP MACRO 文に指定する必要があります。 DROP ROLE DROP ROLE 文は、指定したロールを削除します。 アクセス権 ロールを削除するユーザは、次の中で少なくとも 1 つの条件を満たしている必要が あります。 ■ ■ DBA システム ロールのメンバーであること 明示的に付与されるかユーザが作成したロールのメンバーであることによ り、ROLE_MANAGEMENT 権限を持っていること 構文 次に DROP ROLE 文の構文ダイアグラムを示します。 DROP ROLE <role_name> <role_name> 削除するロールの名前を指定します。システム ロールは削除できま せん。 SQL 文と RISQL 拡張機能 8-181 DROP SEGMENT 使用上の注意 ロールを削除しても、そのロールのタスク権限やオブジェクト特権がデータベース ユーザに残っている場合があります。同じ権限や特権がそのユーザか、そのユーザ がメンバーであるほかのロールに明示的に付与されている場合がこれにあたりま す。 例 次のステートメントは、temp ロールを削除します。 drop role temp DROP SEGMENT DROP SEGMENT 文は、指定したセグメントをデータベースから削除し、そのセグ メントに関連したすべての物理格納ユニット (PSU) も削除します。 アクセス権 セグメントを削除するユーザは、次の中で少なくとも 1 つの条件を満たしている必 要があります。 ■ ■ ■ ■ DBA システム ロールのメンバーであること 明示的に付与されるかユーザが作成したロールのメンバーであることによ り、DROP_ANY 権限を持っていること RESOURCE システム ロールのメンバーで、かつセグメントの作成者であ ること DROP_OWN 権限を持っていて、セグメントの作成者であること 構文 次に DROP SEGMENT 文の構文ダイアグラムを示します。 DROP SEGMENT 8-182 SQL Reference Guide <segment_name> DROP SEGMENT 使用上の注意 セグメントを削除すると、そのセグメントのファイルがすべて削除されます。 DROP SEGMENT 文で削除するセグメントは、オフラインにし、切り離しておく必 要があります。 セグメントをオフラインにするには ALTER SEGMENT 文を使用します。セグメン トは次の条件で切り離されます。 ■ ■ ALTER SEGMENT 文による切り離し テーブルやインデックスが削除されていて、セグメントが削除されていな い場合 例 次の各ステートメントはそれぞれ、seg_market セグメントをオフラインにして切り 離し、削除します。 alter segment seg_market of table market offline alter segment seg_market of table market detach drop segment seg_market 次のステートメントは、seg_market_idx セグメントを削除します。このセグメント に格納されていたインデックスが削除されており、セグメントは削除されていない ことが想定されています。このため、seg_market_idx セグメントはすでに切り離さ れています。 drop segment seg_market_idx SQL 文と RISQL 拡張機能 8-183 DROP SYNONYM DROP SYNONYM DROP SYNONYM 文は、基本テーブルに指定したシノニムを削除します。テーブル 自体は削除されません。 アクセス権 テーブルに定義されたシノニムを削除するユーザは、次の中で少なくとも 1 つの条 件を満たしている必要があります。 ■ ■ ■ ■ DBA システム ロールのメンバーであること 明示的に付与されるかユーザが作成したロールのメンバーであることによ り、DROP_ANY 権限を持っていること RESOURCE システム ロールのメンバーで、かつシノニムの作成者である こと DROP_OWN 権限を持っていて、シノニムの作成者であること 構文 次に DROP SYNONYM 文の構文ダイアグラムを示します。 DROP SYNONYM <synonym_name> <synonym_name> 削除するシノニムの名前を指定します。ビューが参照している シノニムは削除できません。 使用上の注意 テーブルに定義されたシノニムを削除しても、基本テーブルには影響ありません。 8-184 SQL Reference Guide DROP TABLE DROP TABLE DROP TABLE 文は、指定したテーブルをデータベースから削除し、そのテーブルに 定義されたインデックスと、そのテーブルを参照する特権やシノニムを削除しま す。 アクセス権 テーブルを削除するユーザは、次の中で少なくとも 1 つの条件を満たしている必要 があります。 ■ ■ ■ ■ DBA システム ロールのメンバーであること 明示的に付与されるかユーザが作成したロールのメンバーであることによ り、DROP_ANY 権限を持っていること RESOURCE システム ロールのメンバーで、かつテーブルの作成者である こと DROP_OWN 権限を持っていて、テーブルの作成者であること 構文 次に DROP TABLE 文の構文ダイアグラムを示します。 DROP TABLE <table_name> DROPPING SEGMENTS KEEPING SEGMENTS SQL 文と RISQL 拡張機能 8-185 DROP TABLE <table_name> 基本テーブルまたはテンポラリ テーブルの名前を指定します。シノ ニムやビューの名前は指定できません。次の参照先となっている テーブルは、削除できません。 ■ ■ ほかのテーブルのフォーリン キー ビュー フォーリン キーやビューの参照先テーブルを削除するには、その テーブルを参照しているすべてのテーブルやビューを削除しておき ます。または、8-89 ページに示すように、ALTER TABLE...DROP CONSTRAINT 文を使ってフォーリン キー参照を削除しておきます。 DROPPING SEGMENTS テーブルに関連したすべてのデフォルト セグメントと名前付きセグ メントを削除します。テーブルに関連したセグメントには、テーブ ルにアタッチしたセグメントと、対応するインデックスが含まれま す。セグメントの物理格納ユニット (PSU) は、すべて削除されま す。 KEEPING SEGMENTS テーブルに関連した、すべての名前付きセグメントを残します。セ グメントはテーブルから切り離され、ほかのデータべース オブジェ クトに割り当てることができます。デフォルト セグメントは、必ず 削除されます。 使用上の注意 DROPPING SEGMENTS、KEEPING SEGMENTS のどちらも指定されていない場合、 rbw.config ファイルの OPTION SEGMENTS パラメータで指定されているデフォルト 動作が使用されます。OPTION SEGMENTS が指定されていない場合には、名前付き セグメントは保持され、デフォルト セグメントは削除されます。デフォルト動作 は、rbw.config ファイルのパラメータで変更できます。 デフォルト セグメントはユーザが定義したセグメントとは異なり、テーブルを削除 すると削除されます。 削除するテーブルに破損したセグメントが含まれている (RBW_SEGMENTS システ ム テーブルに情報がある ) 場合は、DROP TABLE...KEEPING SEGMENTS 文が失敗 します。テーブルを削除する前に、破損したセグメントを切り離し、削除しておい てください。ただし、DROP TABLE...DROPPING SEGMENTS 文は、破損したセグメ ントが含まれていても正常に実行されます。 8-186 SQL Reference Guide DROP VIEW 例 次のステートメントは、Market_Temp テーブルとそのインデックスをテーブルから 削除しますが、名前付きセグメントはすべて残します。名前付きセグメントは、ほ かのテーブルやインデックスにアタッチすることができます。 drop table market_temp keeping segments DROP VIEW DROP VIEW 文は、指定したビューをデータベースから削除します。 アクセス権 ビューを削除するユーザは、次の中で少なくとも 1 つの条件を満たしている必要が あります。 ■ ■ ■ ■ DBA システム ロールのメンバーであること 明示的に付与されるかユーザが作成したロールのメンバーであることによ り、DROP_ANY 権限を持っていること RESOURCE システム ロールのメンバーで、かつビューの作成者であるこ と DROP_OWN 権限を持っていて、ビューの作成者であること 構文 次に DROP VIEW 文の構文ダイアグラムを示します。 DROP VIEW <view_name> 使用上の注意 データベースからビューを削除しても、基本テーブルには影響ありません。同様 に、集約テーブルに関連付けられた事前計算ビューを削除しても、集約テーブルに は影響ありません。 ほかのビューが参照しているビューは、削除できません。 SQL 文と RISQL 拡張機能 8-187 EXPAND EXPAND EXPAND コマンドはステートメントを表示し、そのステートメントに含まれるマク ロ名を展開して表示します。 ステートメントが展開されると、それに含まれるすべてのマクロがテキストで置き 換えられたステートメントが返されます ( マクロの展開 )。ステートメントの構文 は検査されませんが、マクロを呼び出すときには正しい数の引数を指定してくださ い。 構文 次に EXPAND 文の構文ダイアグラムを示します。 EXPAND <SQL_STATEMENT> ( <width> ) <width> 各リザルト行に返される最大文字数を指定します。20 ∼ 1024 の値 を指定してください。<width> を指定しなかったり、許容範囲外の 値を指定した場合は、79 が設定されます。 <sql_statement> 展開する SQL 文か、その一部を指定します。 例 まず、パラメータを 1 つ持つマクロを作成します。 create temporary macro select_star(condition) as select * from market where condition 次のマクロ呼出しは、Region 列の値が South である行を Market テーブルから抽出 します。 select_star(region='South') 次の EXPAND 文は、マクロのパラメータに値を代入した後の SELECT 文を返しま す。 expand select_star(region='South') STATEMENT --------SELECT * FROM MARKET WHERE REGION='South' 8-188 SQL Reference Guide EXPLAIN EXPLAIN EXPLAIN コマンドは、指定したクエリについて、パフォーマンス チューニングに 使用できる内部クエリ処理情報を表示します。特に指定しない限り、この情報は標 準出力の画面に表示されます。データベース オブジェクト名以外は、出力データは 常に英語で表示されます。出力データの内容の詳細については、 『Query Performance Guide』を参照してください。 構文 次に EXPLAIN 文の構文ダイアグラムを示します。 <SQL_statement> EXPLAIN <SQL_statement> SQL 文全体のテキストを指定します。EXPLAIN は、有効な SQL クエリを含むステートメント、INSERT、UPDATE、DELETE の 各ステートメントに使用できます。 例 次のステートメントは、テーブル結合、集約、演算を含む各種のクエリ処理情報を 返します。 explain select prod_name, sum(dollars) as prod_sales, rank(sum(dollars)) as prod_rank from product join sales on sales.classkey = product.classkey and sales.prodkey = product.prodkey group by prod_name 1 つのクエリについて複数の処理方法が可能な場合は、すべての処理方法について の情報が表示されます。 SQL 文と RISQL 拡張機能 8-189 EXPORT 使用上の注意 EXPLAIN 文は、クエリ 性能の改善の方法を決定する場合に有効です。たとえば、 STAR インデックスを活用し、STARjoin 処理によってテーブルを結合するクエリは 高速になります。EXPLAIN 文を使用すると、クエリに使用される結合処理のタイ プを判断できるため、既存インデックスを最大限に活用するようにクエリを書き換 えたり、クエリを高速化するインデックスをスキーマに追加することができます。 EXPLAIN 文の出力データを、クエリ実行時に出力される実際の統計値や情報と比 較する場合は、EXPLAIN 文を SET STATS INFO 文と併用します。SET STATS INFO 文の詳細については、9-62 ページ「SET STATS」を参照してください。 EXPLAIN の出力例については、『Query Performance Guide』を参照してください。 EXPORT データベース管理者とアプリケーション開発者は、EXPORT 文を使って、任意のリ ザルト セットをディスクのファイルに効率的にエクスポートできます。エクスポー ト操作は ODBC レイヤをバイパスするため、ほかの方法と比較して、より効率的に データベースのデータを出力ファイルに移動することができます。 ユーザはクエリを使ってリザルト セットを定義し、出力ファイルのフォーマットと ファイル名を指定します。その後 EXPORT 文は、出力ファイル、出力ファイルを記 述するスクリプト (TMU スクリプト )、エクスポート先テーブルを記述する DDL ス クリプトを生成します。オプションでロケールを定義することもできます。生成さ れた DDL 文はエクスポート先テーブルを作成するために使用でき、TMU スクリプ トはエクスポートしたデータをテーブルにロードするために使用できます。 アクセス権 EXPORT 文を実行するユーザは、次のいずれかの権限を持っている必要がありま す。 ■ ■ DBA 権限 EXPORT タスク権限 8-190 SQL Reference Guide EXPORT 構文 次に EXPORT 文の構文ダイアグラムを示します。 <output_file_specification> EXPORT TO DDlFILE <file_specification> TMUFILE ( FORMAT <file_specification> <select_statement> ) EXTERNAL EXTERNAL VARIABLE INTERNAL BINARY DELIMITED XML SQL 文と RISQL 拡張機能 8-191 EXPORT <output_file_ specification> 出力ファイルの名前とパスを指定します。パス名の最大長は、 プラットフォームの許容最大長 ( 通常 1000 バイト ) から 4 文字 引いた長さです。これにより、DDL または TMU ファイル拡張 子を追加でき、最大 999 のオーバーフロー ファイルを作成でき ます。ファイル名は一重引用符で囲んでください。 <output_file_specification> は、完全に修飾されたパスとファイル 名、相対パスとファイル名、パイプ指定のいずれでもかまいま せん。相対パスを使用した場合は、rbw.config で指定されたパス の相対パスか、SET EXPORT_DEFAULT_PATH 文で確立された パスで指定されたパスの相対パスが使用されます。最初の文字 をパイプ記号 (|) にした場合は、データがパイプに書き出されま す。 パイプ記号を使用する場合は、必ず一重引用符の直後の 1 文字 目に使用してください。パイプ記号の前に ( スペースを含む ) 別 の文字が挿入されていると、データはパイプでなくファイルに エクスポートされます。指定されたパスが存在している必要が あります。 指定パスが存在し、<username> がファイルへの書き込み権限を 持っている必要があります。システムが指定されたファイルを エクスポート用に作成します。セキュリティ保護のため、この ファイルは上書き禁止です。同名のファイルがすでに存在する 場合は、エラー メッセージが返されます。既存のファイルを削 除してから EXPORT 文を再実行してください。 EXPORT_MAX_FILE_SIZE オプションが設定されている場合、 各データ ファイルの名前に 3 桁のサフィックスが付加されます。 このようなファイルは最大 1000 個作成できます。 ヒント : デフォルトでは、出力ファイル サイズの上限は設定されていません。 EXPORT_MAX_FILE_SIZE オプションが設定されている場合に限り、オーバーフ ロー ファイルが作成されます。このオプションの詳細については、9-21 ページ 「SET EXPORT_MAX_FILE_SIZE」を参照してください。 EXPORT 文の出力を、TMU LOAD DATA 操作にパイプを使用し て送るには、実行可能ファイル rb_tmu に引数 -d を指定する必要 があります。 実行可能ファイル rb_tmu と rb_ptmu の完全な構文については、 Table Management Utility Reference Guide の第 2 章を参照してくだ さい。 クエリがリザルト セットを返さなかった場合は、出力ファイル は生成されません。 8-192 SQL Reference Guide EXPORT DDLFILE <file_ specification> DDL ファイルの名前を指定します。このファイルは、 TMUUNLOAD または GENERATE 文で作成されるファイルと同 じです。 ■ DDLFILE は、出力リザルト セットを定義する検索項目リスト 内の各列に一意の列名を与えます。 ■ EXPORT コマンドは、列に DEFAULT 句を生成しません。 <file_specification> を指定しない場合は、出力ファイルに指定さ れた名前、パス、サフィックス DDL で名前が生成されます。 データがパイプに出力される場合は、この指定は意味を持たず、 この指定への参照も無視されます。 ロケールを指定した場合は、エクスポート操作によって、 DDLFILE ( および TMUFILE) が同じロケールに作成されます。 必要に応じてデータの変換が行われます。 式または集約関数が指定されている場合を除き、このファイル 内のテーブルには GENERATED_TABLE という名前が付けら れ、列にはクエリの検索項目リストで使用されている名前が付 けられます。式または集約関数が指定されている場合は、列の 名前は GENERATED_COLNAME_XX になります。XX は検索項 目リスト内の列位置を表します。 TMUFILE <file_ specification> TMU ファイルの名前を指定します。このファイルは、TMU UNLOAD または GENERATE 文で生成されるファイルと同じで す。ただし出力データのすべての検索項目リストの列に一意の 列名が付けられます。 <file_specification> を指定しない場合は、出力ファイルに指定さ れた名前、パス、サフィックス .TMU で名前が生成されます。 データがパイプに出力される場合は、この指定は意味を持たず、 この指定への参照も無視されます。 ロケールを指定した場合は、エクスポート操作によって、 TMUFILE ( および DDLFILE) が同じロケールに作成されます。 必要に応じてデータの変換が行われます。 SQL 文と RISQL 拡張機能 8-193 EXPORT FORMAT エクスポートされたデータのフォーマットを指定します。 EXTERNAL フォーマットは、同じプラットフォームまたは別の プラットフォーム上で、TMU を使用して再ロードできるファイ ルにデータをエクスポートします。再ロード中、末尾の空白は データから削除されます。フォーマットを指定しない場合、出 力ファイルのフォーマットはデフォルトで EXTERNAL となりま す。 EXTERNAL VARIABLE フォーマットは、同じプラットフォーム または別のプラットフォーム上で、TMU を使用して再ロードで きるファイルにデータをエクスポートします。再ロード中、末 尾の空白は保持され、テーブル内にロードされます。 INTERNAL INTERNAL フォーマットは、データをバイナリ ファイルにエク スポートします。このデータは、同じプラットフォームのシス テム上でのみ再ロードできます。たとえば、このフォーマット のデータを HP9000 からエクスポートし、AIX RISC System/6000 に再ロードすることはできません。また、32 ビット システムか らデータをエクスポートして、64 ビット システムに再ロードす ることはできません。 INTERNAL フォーマット データの再ロード中、末尾の空白は保 持され、目的のテーブルにロードされます。 INTERNAL と EXTERNAL は、TMU UNLOAD コマンドでサポー トされるのと同じフォーマットです。これらのフォーマットの 詳細については、『Table Management Utility Reference Guide』を 参照してください。 BINARY 8-194 SQL Reference Guide BINARY フォーマットは、整数、浮動小数点、倍精度データ型 については各プラットフォームに固有の表現形式、その他の データ型では ASCII ( 文字 ) 表現形式を使用するファイルを生成 します。このデータは、同じプラットフォーム上の別のアプリ ケーションにデータを移植するために使用されます。再ロード 中、末尾の空白はデータから削除されます。 EXPORT DELIMITED DELIMITED フォーマットは、各列値を区切り文字で区切るよう に指定します。次の規則が適用されます。 ■ 区切り文字はシングルバイト文字またはマルチバイト 文字 1 つです。デフォルトの区切り記号はパイプ (|) で す。ほかの区切り文字を指定する方法は、9-20 ページ 「SET EXPORT_DELIMITER」を参照してください。 ■ 各行を復帰改行文字で区切ります。 DELIMITED フォーマットでエクスポートされた文字 (CHAR) 型 列と可変長文字 (VARCHAR) 型列には、末尾の空白文字は充填 されません。したがって、各出力行の長さが異なることがあり ます。ただし、可変長文字 (VARCHAR) 型列に末尾の空白文字 が格納されている場合は、その空白文字列は切り捨てられずに そのまま残されます。 XML XML フォーマットは、XML (Extensible Markup Language) 出力 ファイルを生成します。この XML ファイルのマークアップ タ グは次の命名規則を使用します。 ■ ルート :<GENERATED_x005f_TABLE> および </GENERATED_x005f_TABLE> ■ レコード内で繰り返し使用されるブロック構造 :<ROW> およ び </ROW> ■ 名前付き列 :<column_name> および </column_name> ■ 名前のない列 ( 式およびエリアスのない集約関数 ) : <GENERATED_x005f_COLNAME_x005f_xx> および </GENERATED_x005f_COLNAME_x005f_xx> ここで xx は選択されたリスト内で名前のない列の位置を示しま す。これらの命名規則については、8-197 ページを参照してくだ さい。 これらのマークアップ タグはカスタマイズできませんが、出力 ファイルの編集は可能です。 SQL 文と RISQL 拡張機能 8-195 EXPORT XML ファイルには標準のヘッダー情報も含まれます。これは、 XML のバージョン文字列、エンコード、文書型定義 (DTD) な ど、XML ドキュメントの内容モデルを記述する通常の情報で す。IBM Red Brick Warehouse がサポートするコード セットから XML のエンコードへのマッピング方法については、インストー ル CD-ROM のリリース ノート ディレクトリ内の locales.pdf ファ イルを参照してください。 ほかの EXPORT データ ファイルとは異なり、XML 出力には、 ファイルを生成した EXPORT コマンドを示すクエリ テキストお よびクライアント ロケールが含まれます。クエリ テキストとク ライアント ロケールは、DTD セクションの後に、コメントとし て出力されます。 XML フォーマットの EXPORT 文により、DDL ファイルおよび TMU ファイルの作成も行われます。DDL ファイルのフォーマッ トは XML の場合もほかのフォーマットと同様です。8-193 ペー ジを参照してください。TMU ファイルは列を定義するときに特 別の XML パス構造を使用します。『Table Management Utility Reference Guide』を参照してください。 <select_ statement> 第 7 章で定義されているとおりに、任意の有効な SELECT 文を 指定します。ステートメントはかっこで囲んでください。クエ リ結果は指定したフォーマットで出力ファイルにエクスポート され、必要に応じてクライアントのロケールに変換されます。 使用上の注意 出力ファイルのフォーマットによって、エクスポート後のデータの再ロード先と再 ロード方法が限定されます。 ■ ■ INTERNAL フォーマットは、同じプラットフォーム上で動作している Red Brick データベースにしか再ロードできません。エクスポート先テーブル のデータ型は、エクスポートする列のデータ型と完全に合致している必要 があります。エクスポートするデータの Dollars フィールドが DEC(7,2) の 場合は、エクスポート先の列も DEC(7,2) である必要があり、DEC(7,4) や DEC(10,2) であってはなりません。HP 9000 から INTERNAL フォーマット でエクスポートした場合は、データを AIX RISC/6000 上で動作する Red Brick データベースに再ロードすることはできません。 EXTERNAL フォーマットはより高い移植性を持ちます。別のプラット フォームに移行する必要がある場合は、このフォーマットを使用してくだ さい。このフォーマットは、サードパーティ製アプリケーションとともに 使用することもできます。ただしこれらのアプリケーションで NULL 情報 を使用するのは難しい場合があります。 8-196 SQL Reference Guide EXPORT ■ BINARY フォーマットは EXTERNAL フォーマットよりコンパクトです。 このフォーマットは、同じプラットフォームで使用する場合に限り、サー ドパーティ製アプリケーションとともに使用することができます。このエ クスポート データにも NULL 情報が含まれます。 XML 出力ファイルでの特殊文字と区切り識別子の取り扱い EXPORT コマンドを使用してクエリ結果を XML ファイルに出力する場合、一部の 文字は次の表に示すように置き換えられます。 クエリが返す文字 XML ファイルでの置き換え 制御文字 (ASCII コード 32 未満の文字で、 9 (Tab)、10 ( 改行 )、13 (CR) を除く ) 疑問符 (?) 左山形かっこ (<) < 右山形かっこ (>) > アンパサンド (&) & 二重引用符 ('') " 一重引用符 (') ' 区切り表記の列名やテーブル名、および xml で始まる識別子は、標準的な方法で マッピングされます。EXPORT 形式で生成された、アンダースコア (_) を含むテー ブル名と列名が、このマッピングの対象となります。 SQL 名 ( 例 ) XML ファイルおよび TMU 制御ファイルで の置き換え "col name" col_x0020_name "emp:id" emp_x003a_id xmlcolumn _xffff_xmlcolumn ORDER_NO ORDER_x005f_NO GENERATED_TABLE GENERATED_x005f_TABLE GENERATED_COLNAME_2 GENERATED_x005f_COLNAME_x005f_2 このマッピングは XML ファイルおよび TMU 制御ファイル内の XML パスのみに影 響し、生成された DDL ファイルではクエリで指定された元の列名およびテーブル 名が保持されます。 SQL 文と RISQL 拡張機能 8-197 EXPORT 例 次の例に、EXPORT コマンドを使用して、各種のフォーマットでクエリ結果を保存 する方法を示します。 外部フォーマットのファイルへのエクスポート 次のステートメントは、クエリから /home/george/sum1 というファイルにデータを エクスポートします。 export to '/home/george/sum1' (select prod_name, sum(dollars), rank(sum(dollars)) as top_ten_99 from sales natural join product natural join period where year = 1999 group by prod_name when top_ten_99 <=10) 生成されたファイル home/george/sum1.DDL には、次の情報が含まれます。 CREATE TABLE GENERATED_TABLE ( PROD_NAME CHARACTER(30), GENERATED_COLNAME_2 DECIMAL(13,2), TOP_TEN_99 INTEGER); 生成されたファイル /home/george/sum1.TMU には、次の情報が含まれます。 LOAD DATA INPUTFILE '/home/george/sum1' RECORDLEN 60 INSERT NLS_LOCALE 'English_UnitedStates.US-ASCII@Binary' INTO TABLE GENERATED_TABLE ( PROD_NAME POSITION(2) CHARACTER(30) NULLIF(1)='%', GENERATED_COLNAME_2 POSITION(33) DECIMAL EXTERNAL(15) NULLIF(32)='%', TOP_TEN_99 POSITION(49) INTEGER EXTERNAL(11) NULLIF(48)='%'); TMU LOAD 操作のパイプへのエクスポート 次の EXPORT 文の出力は、Aroma データベースにテーブルをロードする TMU 操作 にパイプを使用して送られます。 export to '| /redbrick/bin/rb_tmu -d aroma /data/test/pq_sales.TMU system manager' format external (select prod_name, qtr, sum(dollars) as sum_dols from product natural join sales natural join period group by prod_name, qtr); 8-198 SQL Reference Guide EXPORT 区切りフォーマットでのエクスポート 次の EXPORT 文の出力は、パイプを使用して区切りフォーマットで export_output_delimited ファイルに送られます。 export to 'export_output_delimited' format delimited (select dealkey, order_type, order_desc from orders where dealkey < 2) DEALKEY ORDER_TYPE ORDER_DESC ** INFORMATION ** (8755) EXPORT successfully completed; 1 data file(s) created in /local/spill/export_output_delimited*. 次のリザルト セットは、区切りフォーマットで表示された出力ファイルを示しま す。 00000000000|Hardware|Hardware, gifts, general merchandise| 00000000000|Hardware|Hardware, gifts, general merchandise| 00000000000|Clothing|Aroma t-shirts and baseball caps| 00000000000|Spice|Pre-packed spices, jars| 00000000000|Tea|Loose tea, bulk| 00000000000|Tea|Loose and packaged tea| 00000000001|Spice|Spices, bulk and pre-packed| 00000000001|Spice|Spices, bulk and pre-packed| 00000000001|Hardware|Hardware, gifts, general merchandise| XML フォーマットでのエクスポート 次の例は、EXPORT 文で 4 列のテーブルから 1 列を選んだときに作成される 3 つの XML 出力ファイルを示しています。最初にテーブルを作成し、次にエクスポート される列を挿入する DDL は次のとおりです。 RISQL> create table orders (order_no int, order_date date, cust_num int, dollars dec(13,2)); RISQL> insert into orders values(1,'01-01-01',1,100.00); ** INFORMATION ** (209) Rows inserted: 1. EXPORT コマンドは次のとおりです。 RISQL> export to 'test1_orders' > format xml > (select * from orders); ORDER_NO ORDER_DATE CUST_NUM DOLLARS ** INFORMATION ** (8755) EXPORT successfully completed; 1 data file(s) created in test1_orders*. RISQL> SQL 文と RISQL 拡張機能 8-199 EXPORT XML データ、DDL、TMU の 3 つの出力ファイルは次のとおりです。 brick % more test1_orders <?xml version="1.0" encoding="us-ascii"?> <!-- The Client Locale was "English_UnitedStates.USASCII@Binary" --> <!DOCTYPE GENERATED_x005f_TABLE [ <!ELEMENT ORDER_x005f_NO (#PCDATA)> <!ELEMENT ORDER_x005f_DATE (#PCDATA)> <!ELEMENT CUST_x005f_NUM (#PCDATA)> <!ELEMENT DOLLARS (#PCDATA)> <!ELEMENT ROW (ORDER_x005f_NO?,ORDER_x005f_DATE?,CUST_x005f_NUM?,DOLLARS?)> <!ELEMENT GENERATED_x005f_TABLE (ROW*)> ]> <!-- Begin Query Text export to 'test1_orders' format xml (select * from orders); **** End Query Text --> <GENERATED_x005f_TABLE> <ROW> <ORDER_x005f_NO>00000000001</ORDER_x005f_NO> <ORDER_x005f_DATE>2001-01-01</ORDER_x005f_DATE> <CUST_x005f_NUM>00000000001</CUST_x005f_NUM> <DOLLARS> 100.00</DOLLARS> </ROW> </GENERATED_x005f_TABLE> brick % more test1_orders.DDL CREATE TABLE GENERATED_TABLE ( ORDER_NO INTEGER, ORDER_DATE DATE, CUST_NUM INTEGER, DOLLARS DECIMAL(13,2)); % more test1_orders.TMU LOAD DATA INPUTFILE 'test1_orders' INSERT FORMAT XML NLS_LOCALE 'English_UnitedStates.US-ASCII@Binary' INTO TABLE GENERATED_TABLE ( ORDER_NO /GENERATED_x005f_TABLE/ROW/ORDER_x005f_NO/#PCDATA INTEGER EXTERNAL(11) , ORDER_DATE /GENERATED_x005f_TABLE/ROW/ORDER_x005f_DATE/#PCDATA DATE(10) 'YYYY-MM-DD' , CUST_NUM /GENERATED_x005f_TABLE/ROW/CUST_x005f_NUM/#PCDATA INTEGER EXTERNAL(11) , DOLLARS /GENERATED_x005f_TABLE/ROW/DOLLARS/#PCDATA DECIMAL EXTERNAL(15) ); 8-200 SQL Reference Guide GRANT ( 権限とロール ) GRANT (権限とロール) GRANT 文は、DBA システム ロール、RESOURCE システム ロール、ユーザが作成 したロール、または個別のタスク権限をデータベース ユーザまたはロールに付与し ます。 権限やロールが付与されるデータベース ユーザを GRANT CONNECT 文によって作 成し、パスワードを割り当てておく必要があります。 アクセス権 GRANT 文を使用するユーザは、次の中で少なくとも 1 つの条件を満たしている必 要があります。 ■ ■ DBA システム ロールのメンバーであること 明示的に付与されるかユーザが作成したロールのメンバーであることによ り、ROLE_MANAGEMENT 権限を持っていること DBA のメンバーと、ROLE_MANAGEMENT タスク権限を持っているユーザは、す べてのタスク権限を自分およびほかのユーザに付与することができます。 構文 次に、権限とロールを付与する GRANT 文の構文ダイアグラムを示します。 , GRANT DBA RESOURCE , TO <db_username> <role_name> <authorization> <role_name> SQL 文と RISQL 拡張機能 8-201 GRANT ( 権限とロール ) DBA TO 句に指定したデータベース ユーザまたはユーザが作成した ロールに、DBA システム ロールを付与します。指定したユー ザおよびロールは、DBA システム ロールのメンバーになり、 すべての DBA タスクを実行できるようになります。DBA シス テム ロールの詳細については、8-203 ページ「DBA タスク権 限」を参照してください。 RESOURCE TO 句に指定したデータベース ユーザまたはユーザが作成した ロールに、RESOURCE システム ロールを付与します。指定し たユーザおよびロールは、RESOURCE システム ロールのメン バーになり、すべての RESOURCE タスクを実行できるように なります。RESOURCE システム ロールの詳細については、 8-204 ページ「RESOURCE タスク権限」を参照してください。 <authorization> TO 句に指定したデータベース ユーザおよびロールに、タスク 権限を付与します。タスク権限はシステムが定義し、データ ベースに対して各操作を実行する権限を与えるものです。タス ク権限の一覧と定義については、8-202 ページ「システム ロー ルとタスク権限」を参照してください。 <role_name> TO 句に指定したデータベース ユーザとロールに付与する、 ユーザが作成したロールを指定します。指定したユーザおよび ロールには、付与するロールに定義されたすべてのタスク権限 が与えられます。 TO <db_username> 指定したタスク権限およびロールが付与される、既存のデータ ベース ユーザを指定します。直接のメンバーになれるのは、 データベース ユーザ当たり 16 個のロールまでです。ただし、 間接的に付与されるロールの数には制限がありません。 TO<role_name> 指定したタスク権限およびロールが付与される、ユーザが作成 したロールを指定します。システム ロール (DBA または RESOURCE) は、変更できないため指定できません。 システム ロールとタスク権限 システムには CONNECT、RESOURCE、および DBA という 3 つのシステム ロール があります。CONNECT システム ロールは、ユーザがデータベースに接続すること を許可し、限られた権限を与えます。RESOURCE および DBA のシステム ロール は、システムが定義した複数のタスクをユーザが実行することを許可します。 8-202 SQL Reference Guide GRANT ( 権限とロール ) DBA タスク権限 DBA システム ロールに定義されたタスク権限は、次のとおりです。各タスク権限 は個別に付与することができます。 タスク権限 定義 ACCESS_ANY すべてのデータベース オブジェクトからデータを検 索し、システム テーブルのプライベート マクロなど のプライベート ユーザ情報にアクセスできます。 ACCESS_SYSINFO 動的統計テーブル (DST) にある、データベース動作 のステータスを検索することができます。動的統計 テーブル (DST) については、『Administrator's Guide』 を参照してください。 ALTER_ANY 列、インデックス、マクロ、セグメント、シノニム、 テーブル、ビューを変更することができます。 ALTER_SYSTEM ALTER SYSTEM 文を実行し、データベース管理操作 を実行することができます。 CREATE_ANY 別のユーザのリソースを使用するオブジェクトなど、 任意のオブジェクトを作成することができます。た とえば、別のユーザのテーブルにインデックスを作 成したり、別のユーザのセグメントに常駐するテー ブルを作成したりできます。 DROP_ANY すべてのユーザが作成したオブジェクトを削除でき ます。 EXPORT 任意のクエリの結果をデータ ファイルにエクスポー トできます。 GRANT_TABLE データベース ユーザおよびロールに、オブジェクト 特権を付与することができます。 LOCK_DATABASE データベースをロックすることができます。 MODIFY_ANY データの挿入、更新、削除、ロードができます。 OFFLINE_LOAD 作業用セグメントを使用してオフライン ロードを行 い、セグメントを同期させることができます。 PUBLIC_MACROS PUBLIC マクロの作成と削除ができます。 REORG_ANY テーブルとインデックスの再編成ができます。 ( 1 of 2 ) SQL 文と RISQL 拡張機能 8-203 GRANT ( 権限とロール ) タスク権限 定義 ROLE_MANAGEMENT ロールの作成、削除、付与、取消、変更ができます。 UPGRADE_DATABASE データベースのアップグレードができます。 USER_MANAGEMENT GRANT CONNECT を使用してデータベース ユーザ を作成したり、パスワードを変更します。REVOKE CONNECT によるデータベース ユーザの削除、 ALTER USER または GRANT CONNECT によるユー ザ セッションのデフォルト優先順位の指定ができま す。 ( 2 of 2 ) RESOURCE タスク権限 RESOURCE システム ロールに定義されたタスク権限は、次のとおりです。各タス ク権限は個別に付与することができます。 タスク権限 定義 ALTER_OWN 自分の作成したインデックス、マクロ、セグメ ント、シノニム、テーブル、ビューを変更する ことができます。 ALTER_TABLE_INTO_ANY 自分の作成したテーブルをほかのユーザのセグ メントに変更できます。 CREATE_OWN 自分の作成したオブジェクト ( インデックス、 プライベート マクロ、セグメント、シノニム、 テーブル、ビュー ) を作成できます。 DROP_OWN 自分の作成したオブジェクトを削除できます。 GRANT_OWN 自分の作成したオブジェクトに対するオブジェ クト特権を、ほかのユーザに付与することがで きます。 8-204 SQL Reference Guide GRANT ( 権限とロール ) 使用上の注意 ■ ■ ■ ■ ■ ■ ■ ■ ■ GRANT 文でシステム ロールを付与されたデータベース ユーザは、その ロールの直接のメンバーになります。 システム ロールを、GRANT 文や REVOKE 文で変更または削除することは できません。 GRANT 文でロールを付与されたデータベース ユーザは、そのロールの直 接のメンバーになります。 CREATE ROLE 文に指定されたデータベース ユーザは、付与されたロール の直接のメンバーになります。 ほかのロールを付与されたロールのメンバーであるデータベース ユーザま たはユーザが作成したロールは、付与されたロールの間接的なメンバーに なります。 たとえば、Role1 が Role2 に付与されると、Role2 のメンバーは、Role1 の 間接的なメンバーになり、Role1 に定義されたすべてのタスク権限とオブ ジェクト特権を取得します。 データベース ユーザおよびユーザが作成したロールが、間接的なメンバー になれるロールの数には制限がありません。 データベース ユーザおよびユーザが作成したロールには、CREATE_ANY などのタスク権限を個別に付与することができます。 ユーザやロールが直接のメンバーになれるロールの数は 16 までです。TO 句に指定したユーザやロールが、すでに 16 個のロールの直接メンバーに なっている場合は、それ以上のメンバーにはなれません。 データベース ユーザは、直接または間接的にロールのメンバーになること により、タスク権限を付与されます。 ユーザが作成したロール、システム ロール、タスク権限は、1 つの GRANT 文で付与することができます。 SQL 文と RISQL 拡張機能 8-205 GRANT ( 権限とロール ) 例 次のステートメントは、RESOURCE システム ロールを tommy に付与します。 grant resource to tommy 次のステートメントは、CREATE_OWN タスク権限と ALTER_OWN タスク権限を cody、daisy、temp ロールに付与します。ユーザ cody、daisy、および temp ロールの 全メンバーは、自分のデータベース オブジェクトを作成したり変更できるようにな ります。 grant create_own, alter_own to cody, daisy, temp 次のステートメントは、dba_junior ロールを sonia に付与します。 grant dba_junior to sonia 次のステートメントは、temp ロールを kathy および dba_junior ロールに付与します。 ユーザ kathy は temp ロールのメンバーになり、temp ロールに付与されているすべて のタスク権限およびオブジェクト特権を取得します。dba_junior ロールのメンバー (sonia) は、temp ロールの直接のメンバーではありませんが、temp ロールに付与され ているすべてのタスク権限およびオブジェクト特権を間接的に取得します。 grant temp to kathy, dba_junior 各データベース ユーザおよびロールに付与されているロールは、次のステートメン トによって確認することができます。 select username, rolename, indirect from rbw_role_members order by username, rolename USERNAME ROLENAME INDI ---------------------DBA_JUNIOR TEMP N KATHY TEMP N SONIA DBA_JUNIOR N SONIA TEMP Y 上記の結果から、temp ロールが dba_junior および kathy に直接に付与され、 dba_junior ロールが sonia に直接に付与されていることがわかります。temp ロール は、sonia に間接的に付与されています。sonia は temp ロールを付与されている dba_junior のメンバーであるため、temp ロールが sonia に間接的に付与されているこ とになります。 次のステートメントは、RESOURCE システム ロールを management ロールに付与し ます。management ロールのメンバーは、RESOURCE システム ロールの間接的なメ ンバーになり、RESOURCE システム ロールのすべてのタスク権限を取得します。 grant resource to management 8-206 SQL Reference Guide GRANT CONNECT GRANT CONNECT GRANT CONNECT 文は、データベース ユーザ名の作成とパスワードの割り当てま たは変更を行い、オプションで、DBA システム ロール、RESOURCE システム ロー ル、ユーザが作成したロール、タスク権限をユーザに付与するステートメントで す。 アクセス権 データベース名の作成、パスワードの割り当て、ユーザ優先順位の割り当てを行う には、次の中で少なくとも 1 つの条件を満たしている必要があります。 ■ ■ DBA システム ロールのメンバーであること 明示的に付与されるかユーザが作成したロールのメンバーであることによ り、USER_MANAGEMENT 権限を持っていること システム ロールまたはユーザが作成したロールを付与するには、次の中で少なくと も 1 つの条件を満たしている必要があります。 ■ ■ DBA システム ロールのメンバーであること 明示的に付与されるかユーザが作成したロールのメンバーであることによ り、ROLE_MANAGEMENT 権限または USER_MANAGEMENT 権限を持っ ていること 自分のパスワードは、どのデータべース ユーザも変更することができます。 SQL 文と RISQL 拡張機能 8-207 GRANT CONNECT 構文 次に GRANT CONNECT 文の構文ダイアグラムを示します。 GRANT CONNECT , , DBA RESOURCE <authorization> <role_name> TO <db_username> WITH <password> '<password>' CONNECT PRIORITY <integer> 新規データベース ユーザ名の作成、パスワードの割り当て、既存 データベース ユーザのパスワードの変更を行います。新規ユーザ は、CONNECT システム ロールのメンバーになり、次の操作を行え るようになります。 ■ ■ ■ ■ 自分のパスワードを使ったデータべースへの接続 PUBLIC に SELECT 特権が付与されたテーブルからのデー タの抽出 自分のパスワードの変更 PUBLIC テーブルおよび PUBLIC マクロの使用 PUBLIC 以外のデータベース オブジェクトへのアクセス、データの 修正、データベース オブジェクトの作成を行うには、ユーザは対応 するオブジェクト特権、タスク権限、ロールを取得する必要があり ます。 オブジェクト特権の付与については 211 ページ「GRANT ( 特権 )」 を、権限とロールの付与については 201 ページ「GRANT ( 権限と ロール )」を参照してください。 8-208 SQL Reference Guide GRANT CONNECT DBA 指定したデータベース ユーザに、DBA システム ロールを付与する ように指定します。指定されたデータベース ユーザは、DBA シス テム ロールのメンバーになり、すべての DBA タスク権限を取得し ます。DBA タスク権限の一覧については、8-202 ページ「システム ロールとタスク権限」を参照してください。 RESOURCE 指定したデータベース ユーザに、RESOURCE システム ロールを付 与するように指定します。指定されたデータベース ユーザは、 RESOURCE システム ロールのメンバーになり、すべての RESOURCE タスク権限を取得します。RESOURCE タスク権限の一 覧については、8-202 ページ「システム ロールとタスク権限」を参 照してください。 <authorization> 指定したデータベース ユーザに、タスク権限を個別に付与します。 タスク権限はシステムが定義し、データベースに対して各操作を実 行する権限を与えるものです。タスク権限の一覧と定義について は、8-202 ページ「システム ロールとタスク権限」を参照してくだ さい。 <role_name> 指定したデータベース ユーザに付与するユーザ作成のロールを指定 します。指定されたユーザは、そのロールのメンバーになり、その ロールに付与されたすべてのタスク権限およびオブジェクト特権を 取得します。 TO データベース ユーザを指定します。データベース ユーザ名は有効 <db_username> な識別子とし、ほかのユーザ名と重複しない名前にしてください。 SQL 文と RISQL 拡張機能 8-209 GRANT CONNECT WITH <password> データベース パスワードを指定します。データべース パスワード は、ほかのパスワードと重複しないものにしてください。有効な SQL 識別子でないパスワードは、文字列定数を一重引用符で囲んで 指定します。 ユーザは、自分のパスワードしか変更できません。 GRANT CONNECT 文に指定したユーザ名が、ステートメントを実 行するユーザと同じ場合は、ユーザのパスワードが新規パスワード に変更されます。DBA システム ロールのメンバーを含め、 USER_MANAGEMENT タスク権限を持っているユーザは、任意の ユーザのパスワードを変更できます。パスワードは暗号化されて保 存され、DBA システム ロールのメンバーを含め、ユーザにはアク セスできません。 パスワードのセキュリティ パラメータは、IBM Red Brick Warehouse で利用できます。セキュリティ パラメータは rbw.config ファイルに 記述されており、次の項目を制限できます。 ■ ■ ■ 有効なパスワードの長さと文字タイプの組み合わせ パスワードの変更頻度 同じパスワードを繰り返し使用することを禁止するため の、旧パスワードの保存回数 パスワード セキュリティ パラメータの詳細については、 『Administrator's Guide』を参照してください。 ヒント : RISQL Entry Tool を使用するユーザのパスワードは 8 文字以下にすること をお勧めします。8 文字を超えると、パスワード プロンプトに入力できなくなり、 起動時にコマンド ライン オプションとして入力することになるため、セキュリ ティが損なわれます。 PRIORITY <integer> ユーザ セッションのデフォルトの優先順位を指定します。0 ∼ 100 の整数を指定できます。数字が大きくなるほど優先順位が低くなり ます。たとえば、優先順位が 0 のユーザのセッションの CPU 時間 は、優先順位が 1 ( または 0 より大きいほかの値 ) のユーザのセッ ションよりも優先されます。デフォルトは 50 です。 この句は、既存ユーザが実行中の現在のセッションには影響しませ ん。実行中のセッションの優先順位を変更する場合は、ALTER SYSTEM 文を使用してください。 ユーザが自分のパスワードを変更しているときにこの句を指定した 場合は、無視されます。 8-210 SQL Reference Guide GRANT ( 特権 ) 例 次のステートメントは、kathy というデータベース ユーザ名を作成し、dbexpert とい うパスワードを割り当てます。 grant connect to kathy with dbexpert 次のステートメントは、kathy のパスワードを gumshoe に変更します。このステー トメントが実行できるのは、kathy または DBA システム ロールを持っているユーザ です。 grant connect to kathy with gumshoe 次のステートメントは、alison というデータベース ユーザ名を作成し、acrobat とい うパスワードを割り当て、RESOURCE システム ロールを alison に付与します。 grant connect, resource to alison with acrobat GRANT (特権) GRANT 文は、任意の数のユーザまたはユーザが作成したロールに、特定のテーブ ルに対するオブジェクト特権を割り当てます。 アクセス権 テーブルに対するオブジェクト特権を付与するユーザは、次の中で少なくとも 1 つ の条件を満たしている必要があります。 ■ ■ ■ ■ DBA システム ロールのメンバーであること RESOURCE システム ロールのメンバーで、かつテーブルの作成者である こと テーブルの作成者で、明示的に付与されるかユーザが作成したロールのメ ンバーであることにより、GRANT_OWN タスク権限を持っていること 明示的に付与されるかユーザが作成したロールのメンバーであることによ り、GRANT_TABLE タスク権限を持っていること SQL 文と RISQL 拡張機能 8-211 GRANT ( 特権 ) 構文 次に、特権を付与する GRANT 文の構文ダイアグラムを示します。 , GRANT ON ALL <table_name> PRIVILEGES DELETE INSERT SELECT UPDATE , <db_username> TO <role_name> PUBLIC PRIVILEGES 指定したユーザ、ロール、すべてのユーザ (PUBLIC) に対し、オブ ジェクト特権を付与することができます。オブジェクト特権を付与 するユーザには、その前に CONNECT システム ロールを付与し、パ スワードを割り当てておく必要があります。オブジェクト特権が付 与されるロールは、CREATE ROLE 文で作成しておきます。 システム ロールには、オブジェクト特権を付与できません。 ユーザまたはロールに付与できるのは、指定したテーブルに対する 次のオブジェクト特権です。 8-212 SQL Reference Guide オブジェクト特権 説明 DELETE 行の削除 INSERT 行の挿入 SELECT 行の抽出 UPDATE 行の修正 ALL PRIVILEGES 上記のすべて GRANT ( 特権 ) テーブルに対する INSERT 特権を持っているユーザが行を挿入する には、そのテーブルに対する SELECT 特権も必要です。 テーブルを作成したユーザは、そのテーブルに対するすべてのオブ ジェクト特権を自動的に取得します。これらの特権は、テーブル作 成者が取り消すことはできません。DBA システム ロールのメン バーは、システム テーブル以外のデータベース テーブルについて、 すべてのオブジェクト特権を取得します。 <table_name> テーブル名を指定します。データベース カタログにあるテーブル か、ビューを指定してください。テーブルのシノニムは指定できま せん。ビューを指定した場合は、SELECT 特権しか付与されませ ん。テンポラリ テーブルに対して特権は付与できません。 TO 指定したすべてのオブジェクト特権が付与される、データベース <db_username> ユーザを指定します。データベース ユーザは、オブジェクト特権を 付与する前に作成しておく必要があります。 指定したすべてのオブジェクト特権が付与される、ユーザが作成し たロールを指定します。指定したロールのメンバー全員に、指定し たオブジェクト特権が付与されます。指定するロールは、オブジェ クト特権を付与する前に作成しておく必要があります。システム ロールは変更できないため、システム ロールをロール名に指定する ことはできません。 TO PUBLIC 指定したすべてのオブジェクト特権を、すべてのデータベース ユー ザに付与します。 例 次のステートメントは、Product テーブルに対する SELECT 特権をすべてのデータ ベース ユーザに付与します。 grant select on product to public 次のステートメントは、Sales テーブルに対する SELECT、INSERT、DELETE、お よび UPDATE 特権を alison に付与します。 grant all privileges on sales to alison 次のステートメントは、Market テーブルに対する SELECT、INSERT、および DELETE 特権を market_research ロールに付与します。market_research ロールの全メ ンバーは、Market テーブルでこれらの操作を実行できます。 grant select, insert, delete on market to market_research SQL 文と RISQL 拡張機能 8-213 INSERT INSERT INSERT 文は、指定した基本テーブルに任意の数の行を挿入します。 アクセス権 テーブルに行を挿入するユーザは、次の中で少なくとも 1 つの条件を満たしている 必要があります。 ■ ■ ■ ■ DBA システム ロールのメンバーであること 明示的に付与されるかユーザが作成したロールのメンバーであることによ り、MODIFY_ANY 権限を持っていること テーブルの作成者であること そのテーブルに対する SELECT 特権および INSERT 特権を持っていること 構文 次に INSERT 文の構文ダイアグラムを示します。 <table_name> INSERT INTO , <column_name> ( , VALUES ( <literal> NULL DEFAULT <select_statement> DEFAULT VALUES 8-214 SQL Reference Guide ) ) INSERT <table_name> 行を挿入するテーブルの名前またはシノニムを指定します。 <table_name> 変数にビュー名を指定することはできません。 <column_name> テーブルの列を指定します。 ■ ■ ■ 列名は、任意の順序で指定できます。 列名は、一度しか指定できません。 指定しなかった列には、デフォルト値が割り当てられ ます。テーブル作成時にデフォルト値を指定しなかっ た列には NULL が代入されます。 列を指定しなかった場合は、指定したテーブルの列の順番で、 すべての列を指定したとみなされます。 NOT NULL に設定されている列には、NULL 以外の値を INSERT 文に指定する必要があります。 VALUES VALUES 句を指定する場合は、列リストと同数の値を指定して ください。列リストを指定しなかった場合は、指定したテーブ ルの列数および列順に合わせて、VALUES 句の値を指定する必 要があります。 INSERT 文は、指定した最初の列に最初の値、2 番めの列に 2 番 めの値、という順に挿入していきます。 SQL 文と RISQL 拡張機能 8-215 INSERT SERIAL 列への挿入では次の結果が想定されます。 ■ ■ ■ ■ ■ シリアル (SERIAL) 型列を指定しなかった場合は、システ ムによって値が生成されます。システムに現在格納され ている最大のシリアル (SERIAL) 型値が増分されます。 シリアル (SERIAL) 型列にデフォルト値を指定した場合 は、値が生成されます。システムに現在格納されてい る最大のシリアル (SERIAL) 型値が増分されます。 シリアル (SERIAL) 型列に負の実数値または 0 を挿入し ようとした場合、行は挿入されません。挿入が失敗し、 エラー メッセージが表示されます。 シリアル (SERIAL) 型列に正の実数値を挿入する場合、 挿入する正の実数値とシステムに現在格納されている 最大のシリアル (SERIAL) 型値が比較されます。挿入す る値のほうが大きい場合、格納値が挿入する値で置き 換えられます。格納値以下であれば、格納されている シリアル (SERIAL) 型値は変更されません。 挿入操作中、シリアル (SERIAL) 型列の値が 0 または負 の値であった場合は、挿入操作が失敗し、エラー メッ セージが返されます。操作が失敗すると次の 2 つのど ちらかの結果になります。 ❑ バージョニングが有効な場合、すべての未確定の 行がロール バックされます。行は挿入されませ ん。システムに現在格納されているシリアル (SERIAL) 型値は変更されません。 ❑ バージョニングが無効の場合、INSERT 文が失敗す る前に適切な値を持っていた行が挿入されます。 挿入された値に基づいて、システムに現在格納さ れている最大のシリアル (SERIAL) 型値が調整され ます。 <literal> 文字定数または数値定数を指定します。 NULL 指定した列への NULL 値の挿入を指定します。NOT NULL に設 定されている列を指定した場合は、その行の挿入がエラーにな ります。 8-216 SQL Reference Guide INSERT DEFAULT 指定した列に、その列のデフォルト値を挿入します。デフォル ト値は、テーブルの作成時か、ALTER TABLE 文でそのテーブル に列を追加する時に指定します。 デフォルト値が設定されておらず、NULL 値が許可されている 列には、NULL が挿入されます。デフォルト値が設定されておら ず、NOT NULL が設定されている列の場合は、その行の挿入が エラーになります。 <select_statement> 7-54 ページに定義する標準 SQL の SELECT 文を指定します。た だし、ORDER BY 句に BREAK BY サブ句を指定することはでき ません。 行データの並び順に依存する一部の RISQL 表示関数を使用する 場合は、クエリの結果をソートしてからその行データをテーブ ルに挿入すると便利です。中間クエリ結果の順序、さらに RISQL 表示関数が返す値は、ORDER BY 句によって決まりま す。 クエリのリザルト テーブルの行データが、指定したテーブルに 挿入されます。クエリからは、1 行だけが返される場合もあれ ば、複数行が返されることもあります。1 行も返されないと、 次のメッセージが返されます。 ** INFORMATION ** (209) Rows inserted: 0. クエリが返す列の数は、列リストに指定した列の数と同じであ る必要があります。列リストに指定した最初の列にクエリのリ ザルト テーブルの先頭列の値、2 番めの列に 2 番めの値、とい う順に挿入されます。 DEFAULT VALUES テーブルに挿入するすべての行が、各列のデフォルト値を使用 します。テーブルの各列にデフォルト値が挿入されます。 DEFAULT VALUES は <column_name> リストと併用することはで きません。 デフォルトが設定されておらず、NOT NULL と設定されている 列がテーブルにある場合、DEFAULT VALUES サブ句を指定した INSERT 文はエラーになります。 SQL 文と RISQL 拡張機能 8-217 INSERT 使用上の注意 参照整合性を維持するため、対応するプライマリ キーの値がないフォーリン キー の値を指定した INSERT 文はエラーになります。 次のテーブルには、行は挿入できません。 ■ ■ プライマリ キーの B-TREE インデックスが削除された参照先テーブル。た だし、そのプライマリ キーに STAR インデックスが作成されている場合 は、行を挿入することができます。 プライマリ キーの B-TREE インデックスが削除されたテーブルを参照する 参照元テーブル。参照先テーブルのプライマリ キーに STAR インデックス が作成されていても、行は挿入できません。 数値定数の有効桁数が数値列のサイズを超える場合は、エラー メッセージが返され ます。浮動小数点数値は、その精度が数値列のサイズを超える場合は、スケール ( 小数点以下の桁数 ) が切り捨てられます。 INSERT 文を実行すると、事前計算ビューに対して集約保守が実行されることがあ ります。集約保守の詳細については、 『IBM Red Brick Vista User’s Guide』を参照して ください。 例 : INSERT 文 この例は、クエリの結果をテーブルに挿入する方法を示します。テーブル (Q1_00_Sales) には、2000 年の第 1 四半期に Los Gatos で販売された製品の売上を返 すクエリの結果が挿入されます。Q1_00_Sales の売上データは、Sales テーブルから 一部のデータを抽出したものです。Q1_00_Sales に対してクエリを実行すれば、 City と Period に対する制約を指定しなくてもデータを限定することができます。 クエリの結果をテーブルに挿入するには 1. Q1_00_Sales テーブルを作成します。 create table Q1_00_Sales (product char(30), month char(5), dollars dec(7,2)); 8-218 SQL Reference Guide INSERT 2. 2000 年の第 1 四半期に Los Gatos で販売された製品の売上データを返すク エリを使った INSERT 文を実行します。クエリの結果は、Q1_00_Sales テーブルに挿入されます。 insert into Q1_00_Sales (product, month, dollars) select prod_name, month, dollars from sales natural join product natural join period natural join store where qtr = 'Q1_00' and city like 'Los Gatos%' ** INFORMATION ** (209) Rows inserted: 390. 3. これで、売上データの一部が Q1_00_Sales テーブルに格納されました。 テーブルに挿入されたデータは、2000 年の第 1 四半期に Los Gatos で販売 された製品の売上に限定されています。 Q1_00_Sales テーブルに対して次のクエリを実行し、Veracruzano 製品の情 報だけを表示するようにデータをさらに限定します。 select * from q1_00_sales where product like 'Vera%' PRODUCT Veracruzano Veracruzano Veracruzano ... MONTH JAN JAN JAN DOLLARS 330.00 285.00 262.50 『SQL Self-Study Guide』に、上記と同様の INSERT INTO...SELECT 文の例がありま す。 次の INSERT 文は、新規のクラスを定義する 1 行を Class テーブルに挿入します。 insert into class (classkey, class_type, class_desc) values (13, 'Music', 'Aroma collection of compact discs and cassettes') CLASSKEY CLASS_TYPE CLASS_DESC 13 Music Aroma collection of compact discs and cassettes 列名を指定せずにこのステートメントを再書き込みできます。これは、テーブルの 各列に値が挿入され、テーブルで列を定義した順序で値が挿入されるという 2 つの 条件が満たされているためです。 insert into class values (13, 'Music', 'Aroma collection of compact discs and cassettes') SQL 文と RISQL 拡張機能 8-219 INSERT 次の例では、Store テーブルの作成時に、State 列のデフォルトに CA が設定されて いることを想定しています。次のステートメントは、State 列に CA を挿入します。 insert into store (custkey, mktkey, store_type, name, street, city, state, zip) values (20, 14, 'Small', 'Coffee Haven', '324 Ashby Avenue', 'Berkeley', default, 94707) 次の INSERT 文は、Market テーブルの作成時に、Mktkey 列のデフォルトに 1000、 Hq_City 列のデフォルトに Atlanta を設定し、その他の列にはデフォルトを設定 せず、NULL 値を許可していることを想定しています。 insert into market default values MKTKEY 1000 HQ_CITY Atlanta HQ_STATE NULL DISTRICT NULL REGION NULL 次の例では、シリアル (SERIAL) 型列を含むテーブルに行を挿入します。 create table serial_table (col1 serial not null, col_2 char(10) not null); insert into serial_table (col_2) values ('yes'); ** INFORMATION ** (209) Rows inserted: 1. select * from serial_table; COL1 1 8-220 SQL Reference Guide COL_2 yes LOCK ( テーブルのロック ) LOCK ( テーブルのロック ) LOCK 文は、ほかのユーザによるテーブルへのアクセスを禁止します。 アクセス権 テーブルをロックするユーザは、次の中で少なくとも 1 つの条件を満たしている必 要があります。 ■ ■ ■ ■ DBA システム ロールのメンバーであること 明示的に付与されるかユーザが作成したロールのメンバーであることによ り、MODIFY_ANY 権限を持っていること テーブルの作成者であること そのテーブルに対する INSERT、DELETE、UPDATE 特権を持っているこ と 構文 次に LOCK 文の構文ダイアグラムを示します。 LOCK <table_name> FOR DELETE <table_name> ロックするテーブルの名前を指定します。1 人のユーザがロック できるテーブルは、1 度に 1 つだけです。ロックされたテーブル には、ほかのユーザによるすべてのアクセスが禁止されます。 FOR DELETE 削除操作に対し、カスケード ロックをかけます。LOCK 文に指定 したテーブルへのフォーリン キー参照を行うテーブルがロックさ れます。こうしたほかのテーブルへのロックのタイプ ( 読み取り または書き込み ) は、テーブルの CREATE TABLE 文の FOREIGN KEY...ON DELETE 句によって決まります。 1 つのテーブルをロックすると、そのテーブルを参照するほかの テーブルにもロックがカスケードされます。 SQL 文と RISQL 拡張機能 8-221 LOCK DATABASE 使用上の注意 ロックされたテーブルには、ロックが解除されるまでほかのユーザはアクセスでき ません。ロックは、そのロックを保持しているユーザが UNLOCK 文を実行するか、 サーバ セッションを終了すると解除されます。 1 つ以上のテーブルを変更する複数の操作をする場合は、LOCK 文でほかのユーザ をロック アウトするとテーブルのアクセスが向上します。 テーブルをロックしたユーザがそのテーブルを変更するか、CREATE INDEX 文を実 行すると、ロックを保持した状態でインデックスが作成されます。 LOCK DATABASE LOCK DATABASE 文は、指定されたモード ( 読み取りまたは書き込み ) でデータ ベースをロックします。データベース内の各テーブルのロックが完了するまでは、 ユーザのアクセスが一時停止されます。システム テーブルもロックされます。 データベースのロックを解除する場合は、UNLOCK DATABASE 文を使用します。 アクセス権 データベースをロックするユーザは、次の中で少なくとも 1 つの条件を満たしてい る必要があります。 ■ ■ DBA システム ロールのメンバーであること 明示的に付与されるかユーザが作成したロールのメンバーであることによ り、LOCK_DATABASE 権限を持っていること 構文 次に LOCK DATABASE 文の構文ダイアグラムを示します。 LOCK DATABASE READ WRITE 8-222 SQL Reference Guide LOCK DATABASE READ 各テーブルに READ ロックをかけ、次にデータベースに READ ロッ クをかけます。 データベースを READ モードでロックすると、次のようになりま す。 ■ ■ データベースに WRITE ロックをかけることができなくな ります。 データベース サーバはデータベースへのクエリを許可しま すが、更新は許可しません。 WRITE モードでロックされているテーブルがある場合、LOCK DATABASE READ 文の実行は失敗します。 WRITE 各テーブルに WRITE ロックをかけます。データベースに WRITE ロックをかけ、次にテーブルにかけられている WRITE ロックを解 除します。READ、WRITE のどちらも指定されていない場合、 WRITE モードでデータベースがロックされます。 データベースを WRITE モードでロックすると、次のようになりま す。 ■ ■ データベースをほかのモードでロックすることができなく なります。 データベース サーバはデータベースへのクエリも更新も許 可しません。 LOCK TABLE 文でテーブルをロックしたユーザが LOCK DATABASE WRITE 文を発行した場合、そのステートメントは正常 に実行されます。このユーザが LOCK DATABASE READ 文を発行し た場合、そのステートメントの実行は失敗します。 ユーザがテーブルをロックしている場合、別のユーザが LOCK DATABASE READ 文または LOCK DATABASE WRITE 文を発行する と、どちらのステートメントの実行も失敗します。 使用上の注意 User1 がデータベースをロックしたとき User2 が接続中の場合、User2 はデータベー スを終了できますが、データベースのロックが解除されない限りほかの RISQL 文を 発行できません。 ロックは、そのロックの要求者が次の操作を行うことにより解除されます。 ■ ■ UNLOCK DATABASE 文の実行 データベース サーバ セッションの終了 SQL 文と RISQL 拡張機能 8-223 REVOKE ( 権限とロール ) 重要 : データベースをロックしたユーザがセッションを終了すると、データベー スのロックが自動的に解除されます。 REVOKE ( 権限とロール ) REVOKE 文は、DBA システム ロール、RESOURCE システム ロール、ユーザが作成 したロール、個別のタスク権限を、データベース ユーザおよびロールから取り除き ます。 アクセス権 REVOKE 文を使用するユーザは、次の中で少なくとも 1 つの条件を満たしている必 要があります。 ■ ■ DBA システム ロールのメンバーであること 明示的に付与されるかユーザが作成したロールのメンバーであることによ り、ROLE_MANAGEMENT 権限を持っていること 構文 次に REVOKE 文の構文ダイアグラムを示します。 , , DBA REVOKE RESOURCE FROM <db_username> <role_name> <authorization> <role_name> DBA 指定したデータベース ユーザまたはユーザが作成したロールから、 DBA システム ロールを取り除きます。 RESOURCE 指定したデータベース ユーザまたはユーザが作成したロールから、 RESOURCE システム ロールを取り除きます。 <authorization> 指定したデータベース ユーザまたはロールから取り除く個別のタス ク権限を指定します。 8-224 SQL Reference Guide REVOKE ( 権限とロール ) <role_name> 指定したデータベース ユーザまたはロールから取り除くユーザが作 成したロールを指定します。 FROM 指定したタスク権限およびロールを取り消すデータベース ユーザ名 <db_username> を指定します。 FROM <role_name> 指定したタスク権限およびロールが取り消されるロールの名前を指 定します。システム ロールは変更できないため、ロール名に指定で きません。 使用上の注意 システム ロールからタスク権限を取り除くことはできません。 データベース ユーザの権限を取り消しても、ロールを通じてその権限がユーザに 残っている場合があります。これを取り消すには、その権限を持つすべてのロール をデータベース ユーザから取り除いてください。 同様に、ロールから権限を取り除いても、その権限がロールのメンバーに残ってい る場合があります。その権限を直接に付与されたか、ほかのロールを通じて付与さ れた場合がこれにあたります。ロールの全メンバーから権限を取り除くには、その 権限を各メンバーから取り除いてください。 ユーザおよびロールに明示的に付与された権限と、ロールを通じて直接または間接 的に付与された権限を確認するには、RBW_USERAUTH システム テーブルに対し てクエリを実行します。 例 ユーザが権限を取り消された後も、ユーザがその権限にアクセスできる例を示しま す。 1. temp ロールを作成します。 create role temp 2. ユーザ tommy を作成し、パスワードを割り当て、temp ロールを付与しま す。 grant connect, temp to tommy with mysecret 3. CREATE_ANY タスク権限を tommy に付与します。 grant create_any to tommy SQL 文と RISQL 拡張機能 8-225 REVOKE CONNECT 4. CREATE_ANY タスク権限を temp ロールに付与します。 grant create_any to temp 5. tommy には、CREATE_ANY タスク権限が明示的に付与され、temp ロール のメンバーとして間接的にも付与されています。 tommy から CREATE_ANY タスク権限を取り消します。 revoke create_any from tommy tommy は temp ロールのメンバーであるため、データベース オブジェクト を作成する権限をまだ持っています。データベース オブジェクトの作成を tommy に対して禁止するには、CREATE_ANY タスク権限を temp ロールか ら取り除くか、temp ロールを tommy から取り除く必要があります。 revoke create_any from temp revoke temp from tommy REVOKE CONNECT REVOKE CONNECT 文は、データベースからユーザ名を削除します。 アクセス権 データベース ユーザ名を削除するユーザは、次の中で少なくとも 1 つの条件を満た している必要があります。 ■ ■ DBA システム ロールのメンバーであること 明示的に付与されるかユーザが作成したロールのメンバーであることによ り、USER_MANAGEMENT 権限を持っていること 構文 次に REVOKE CONNECT 文の構文ダイアグラムを示します。 REVOKE CONNECT 8-226 SQL Reference Guide FROM <db_username> REVOKE ( 特権 ) CONNECT データベースからユーザ名を削除します。 FROM データベース ユーザ名を指定します。指定されたユーザは、データ <db_username> ベースに接続できなくなり、タスク権限、オブジェクト特権、ロー ルが取り消されます。 使用上の注意 ロールを削除する場合は、DROP ROLE 文を使用してください。 REVOKE (特権) REVOKE 文は、データベース ユーザおよびユーザが作成したロールから、指定し たテーブルに対する指定したオブジェクト特権を取り除きます。 アクセス権 テーブルに対するオブジェクト特権を取り消すユーザは、次の中で少なくとも 1 つ の条件を満たしている必要があります。 ■ ■ ■ ■ DBA システム ロールのメンバーであること RESOURCE システム ロールのメンバーで、かつテーブルの作成者である こと テーブルの作成者で、明示的に付与されるかユーザが作成したロールのメ ンバーであることにより、GRANT_OWN タスク権限を持っていること 明示的に付与されるかユーザが作成したロールのメンバーであることによ り、GRANT_TABLE タスク権限を持っていること SQL 文と RISQL 拡張機能 8-227 REVOKE ( 特権 ) 構文 次に、特権を取り消す REVOKE 文の構文ダイアグラムを示します。 , REVOKE ON ALL <table_name> PRIVILEGES DELETE INSERT SELECT UPDATE , <db_username> FROM <role_name> PUBLIC <table_name> 取り消すオブジェクト特権の対象となるテーブルを指定します。テ ンポラリ テーブルに対して特権は付与できません。したがって、取 り消すこともできません。 FROM オブジェクト特権が取り消されるデータベース ユーザを指定しま <db_username> す。 FROM <role_name> オブジェクト特権が取り消される、ユーザが作成したロールを指定 します。 PUBLIC すべてのユーザから、指定したオブジェクト特権を取り除きます。 使用上の注意 データベース ユーザのオブジェクト特権を取り消しても、ユーザが作成したロール を通じてその特権がユーザに残っている場合があります。これを取り消すには、そ のオブジェクト特権を持つロールもユーザから取り除く必要があります。 同様に、ロールからオブジェクト特権を取り除いても、その特権がロールのメン バーに残っている場合があります。そのオブジェクト特権を直接に付与されたか、 ほかのロールを通じて付与された場合がこれにあたります。ロールの全メンバーか らオブジェクト特権を取り除くには、そのオブジェクト特権を各ユーザから取り除 いてください。 8-228 SQL Reference Guide SELECT 特定のテーブルについて、ユーザおよびロールに明示的に付与されたオブジェクト 特権と、ロールを通じて直接または間接的に付与されたオブジェクト特権を確認す るには、RBW_TABAUTH システム テーブルに対してクエリを実行します。 例 次のステートメントは、Product テーブルに対する SELECT 特権を、すべてのデー タベース ユーザから取り除きます。 revoke select on product from public すべてのユーザ (PUBLIC) について SELECT 特権が取り消されましたが、Product テーブルの所有者であるか次のいずれかを付与されたユーザは、まだ Product テー ブルに対する SELECT 特権を持っている場合があります。 ■ ■ ■ ■ そのテーブルに対する SELECT 特権 そのテーブルに対する SELECT 特権を持つロール ACCESS_ANY タスク権限 ACCESS_ANY タスク権限を持つロール SELECT SELECT 文は、データベース テーブルからデータ行を抽出します。次に SELECT 文 の構文ダイアグラムを示します。 <query_expression> <order_by_clause> <query_expression> <suppress_by_clause> 7-4 ページに定義する結合クエリ式または非結合クエリ式を指 定します。 SELECT 文の詳細については、7-54 ページを参照してください。 UNLOCK ( テーブルのロック解除 ) UNLOCK 文は、LOCK ( テーブルのロック ) 文で設定されたテーブルのロックを解 除します。 SQL 文と RISQL 拡張機能 8-229 UNLOCK DATABASE アクセス権 テーブルのロックを解除できるのは、そのロックをかけているユーザだけです。 構文 次に UNLOCK 文の構文ダイアグラムを示します。 UNLOCK <table_name> <table_name> ロックを解除するテーブルの名前を指定します。 使用上の注意 テーブルをロックしたユーザが、そのテーブルを修正するか、CREATE INDEX 文を 実行すると、ロックを保持した状態でインデックスが作成されます。 例 Product テーブルのロックを解除する例を示します。 unlock product UNLOCK DATABASE ユーザが設定したデータベースのロックを解除します。 アクセス権 データベースのロックを解除できるのは、そのロックをかけているユーザだけで す。 8-230 SQL Reference Guide UPDATE 構文 次に UNLOCK DATABASE 文の構文ダイアグラムを示します。 UNLOCK DATABASE 使用上の注意 データベースがロックされると、ロックが解除されるまでは、ほかのユーザがデー タベースのテーブルにアクセスすることはできません。データベースのロックを解 除する方法は 2 つあります。 ■ ■ そのユーザによる UNLOCK DATABASE 文の実行 そのユーザによるセッションの終了 UPDATE UPDATE 文は、指定したテーブルの行を修正します。 アクセス権 テーブルの行を更新するユーザは、次の中で少なくとも 1 つの条件を満たしている 必要があります。 ■ ■ ■ ■ DBA システム ロールのメンバーであること 明示的に付与されるかユーザが作成したロールのメンバーであることによ り、MODIFY_ANY 権限を持っていること テーブルの作成者であること そのテーブルに対する UPDATE 特権を持っていること 構文 次に UPDATE 文の構文ダイアグラムを示します。 SQL 文と RISQL 拡張機能 8-231 UPDATE , UPDATE <table_name> SET <column_name> = <expression> NULL , WHERE <search_condition> <table_reference> FROM <table_name> テーブルの名前、テンポラリ テーブルの名前、またはシノニムを指 定します。<table_name> にはビューを指定できません。 SET 任意の数の列名および式を指定します。UPDATE 文は、指定した列 の値を <expression> または NULL に設定します。 列名は、次の規則に従います。 ■ ■ ■ 指定したテーブルに、すでに定義されている必要がありま す。 重複して指定できません。 テーブル名または相関名で修飾できません。 UPDATE 文の SET 句には、集約関数 (COUNT、SUM など ) および RISQL 表示関数 (RANK、NTILE など ) は指定できません。 FROM 行の更新に使用する値が含まれる 1 つまたは複数のテーブルを追加 <table_reference> 指定します。<table_reference> で指定した複数のテーブルが結合さ れ、WHERE 句で指定したとおりに <table_name> 内の行が更新され ます。<table-reference> は table-name も含んでいる必要があります。 このセクションの末尾にある例を参照してください。 FROM <table-reference> 句は、より高い性能をもつサブクエリの代用 として使用します。 <table-reference> で指定されるテーブルは、基本テーブルまたはシ ノニムである必要があります。 8-232 SQL Reference Guide UPDATE 更新するテーブルに相関名が割り当てられている場合は、実際の テーブル名ではなく、その相関名を使用してテーブルを識別する必 要があります。 UPDATE 操作の FROM 句でターゲット テーブルに相関名が割り当て られている場合は、テーブル名そのものではなく相関名を使用して UPDATE 文のほかのテーブルを指定します。たとえば、次のように なります。 update sales_old set sales_old.quantity = 999 from sales as sales_old, period where sales_old.perkey = period.perkey and... FROM 句は、更新するテーブルのセグメント化の基準となった列の 更新には使用できません。たとえば、テーブル t が列 b の値を基準 にセグメント化された場合は、次のステートメントはエラーを返し ます。 UPDATE t SET t.b = 7 FROM t, s WHERE t.a = s.c <table_reference> 句の詳細については、7-13 ページ「テーブル参照」 を参照してください。 WHERE WHERE 句を省略すると、テーブルのすべての行が更新されます。 指定した場合は、検索条件を満たす行だけが更新されます。検索条 件には、サブクエリも使用できます。 検索条件については 3-10 ページ、WHERE 句については 7-36 ページ を参照してください。 SQL 文と RISQL 拡張機能 8-233 UPDATE 使用上の注意 次の操作を行う UPDATE 文は、エラーになります。 ■ ■ ■ ■ ■ ■ 参照先テーブルのプライマリ キー列を更新する。 参照先テーブルにプライマリ キー インデックス 1 がない場合に、参照元 テーブルのフォーリン キー列を更新する。 対応するプライマリ キー値を持たない値をフォーリン キーに挿入する。 この場合参照整合性は保持されます。 プライマリ キー値を既存の値に設定する。プライマリ キーは一意である 必要があります。 NOT NULL と設定されている列を NULL に設定する。 値が負または 0 であるシリアル (SERIAL) 列を更新する。8-215 ページの INSERT 値についての説明を参照してください。 上記の操作を行うと、対応するエラー メッセージが返されます。 SELECT 文とは異なり、UPDATE 文は、WHERE 句での外部結合をサポートしてい ません。外部結合が必要な場合は、FROM 句で指定してください。 FROM 句では、変更するテーブルの指定には次の制限があります。 ■ ■ ■ ライト外部結合で指定される右のテーブルとしては指定できません。 レフト外部結合で指定される左のテーブルとしては指定できません。 フル外部結合のどの場所にも指定できません。 次の例では、更新される Sales テーブルが外部結合の右側で指定されているため、 UPDATE 文が構文エラーを返します。 update sales set dollars = dollars * 1.1 from product left outer join sales on sales.prodkey = product.prodkey where product.prod_name = 'Veracruzano' 次の UPDATE 文は有効です。 update sales set dollars = dollars * 1.1 from sales left outer join product on sales.prodkey = product.prodkey where product.prod_name = 'Veracruzano' UPDATE 文を実行すると、事前計算ビューに対して集約保守が実行されることがあ ります。集約保守の詳細については、 『IBM Red Brick Vista User’s Guide』を参照して ください。 8-234 SQL Reference Guide UPDATE 例 次の UPDATE 文は、検索条件を満たす Product_Promo テーブルの行を更新します。 update product_promo set descript = 'Espresso NO!', promo = 'March Wind', subpro = NULL where prod_id between 1020 and 1040 次の例は、FROM 句の使い方を示しています。Sales テーブルを更新し、 「Veracruzano」という製品についての収益を 10% 増加させます。 update sales set dollars = dollars * 1.1 from sales, product where sales.prodkey = product.prodkey and sales.classkey = product.classkey and product.prod_name = 'Veracruzano' SQL 文と RISQL 拡張機能 8-235 第9章 文 この章について . . . . SET ADVISOR LOGGING . . . . . . . . . . . . . . . . 9-5 . . . . . . . . . . . . . . . . 9-5 . . . . . . . . 9-6 SET ADVISOR MAXIMUM CANDIDATE VIEWS SET ADVISOR SAMPLE SIZE . . . . . . . . . . . . . . 9-7 SET ARITHIGNORE、ARITHABORT . . . . . . . . . . . . 9-8 SET CHECK REPORT FILE PERMISSIONS . . . . . . . . . . 9-9 SET CHECK_TABLE_INDEX_DIRECTORY . . . . . . . . . . 9-10 SET COUNT RESULT . . . . . . . . . . . . . . . . . . 9-10 SET CROSS JOIN . . . . . . . . . . . . . . . . . 9-11 SET DEFAULT DATA SEGMENT . . . . . . . . . . . . . . 9-13 SET DEFAULT INDEX SEGMENT . . . . . . . . . . . . . . 9-15 SET DEFAULT PSU EXTENDSIZE . . . . . . . . . . . . . 9-16 . . . SET DEFAULT SEGMENT SIZE . . . . . . . . . . . . . . 9-18 SET EXPORT_DEFAULT_PATH . . . . . . . . . . . . . . 9-19 . . . . . . . . . . . . . . . 9-20 SET EXPORT_MAX_FILE_SIZE . . . . . . . . . . . . . . 9-21 SET FIRST DAYOFWEEK . . . . . . . . . . . . . . 9-22 . . . . . . 9-23 9-25 9-25 SET EXPORT_DELIMITER . . . SET FORCE TASKS . . . . . . . . . . . . . . . . FORCE_SCAN_TASKS . . . . . . . . . . . . . . FORCE_FETCH_TASKS と FORCE_JOIN_TASKS . . . . . FORCE_TARGETJOIN_TASKS . FORCE_HASHJOIN_TASKS . . FORCE_AGGREGATION_TASKS . SET IDLE TIMEOUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9-25 9-25 9-25 . . . . . . . . . . . . . . 9-26 SET IGNORE OPTICAL INDEXES . . . . . . . . . . . . . . 9-27 SET IGNORE PARTIAL INDEXES . . . . . . . . . . . . . . 9-28 . . . . . . 9-29 SET INDEX TEMPSPACE と SET QUERY TEMPSPACE SET INFO MESSAGE LIMIT . . . . . . . . . . . . . . . . 9-33 SET LOCK . . . . . . . . . . . . . . . . 9-34 SET OLAP APPROXIMATE NUMERIC FAST COMPUTATION . . . . 9-35 SET OPTICAL AVAILABILITY . . . . . . . . . . . . . . . 9-36 SET ORDER BY . . . . . . . . . . . . . . . 9-38 . . . . . . . . . . . . . 9-39 . . . . . . . . . . . SET PARALLEL SET_OPERATION SET PARALLEL_HASHJOIN . . . . . . . . . . . . . . . 9-40 SET PARTIAL AVAILABILITY . . . . . . . . . . . . . . . 9-41 SET PARTITIONED PARALLEL AGGREGATION . . . . . . . . . 9-43 SET PERFORMANCE MONITOR . . . . . . . . . . . . . . 9-44 SET PRECOMPUTED VIEW MAINTENANCE . . . . . . . . . . 9-46 . . . . . 9-47 SET PRECOMPUTED VIEW MAINTENANCE ON ERROR SET PRECOMPUTED VIEW QUERY REWRITE . . . . . . . . . 9-48 SET QUERY MEMORY LIMIT . . . . . . . . . . . . . . . 9-49 SET QUERYPROCS . . . . . . . . . . . . . . . . . . 9-50 SET REPORT_INTERVAL . . . . . . . . . . . . . . . . . 9-51 SET RESULT BUFFER と SET RESULT BUFFER FULL ACTION . . . 9-52 SET ROWCOUNT . . . . . . . . . . . . . . . . . 9-53 SET ROWS_PER...TASK . . . . . . . . . . . . . . . . . 9-54 9-2 SQL Reference Guide . . . ROWS_PER_SCAN_TASK . . . . . . . . . . . . . . . . 9-55 ROWS_PER_FETCH_TASK と ROWS_PER_JOIN_TASK . . . . . 9-55 ROWS_PER_TARGETJOIN_TASK . . . . . . . . . . . . . 9-56 SET SAMPLE MARGIN . . . . . . . . . . . . . . . . . . 9-57 SET SAMPLE SEED . . . . . . . . . . . . . . . . . . . 9-59 SET SEGMENTS . . . . . . . . . . . . . . . . . . . . 9-61 SET STATS . . . . . . . . . . . . . . . . . . . . 9-62 SET TARGETJOIN LOCAL PREDICATES . . . . . . . . . . . . 9-64 . . . . . . . . . 9-67 . . . . . . . . . . 9-68 SET UNIFORM PROBABILITY FOR ADVISOR . . . . . . . . . . 9-69 SET USE INVALID PRECOMPUTED VIEWS . . . . . . . . . . . 9-70 SET USE LATEST REVISION . . . . . . . . . . . . . . . . 9-71 SET VERSIONING . . . . . . . . . . . . . . . 9-72 . . SET TEMPORARY SEGMENT STORAGE PATH SET TRANSACTION ISOLATION LEVEL . . . . . . SET 文 9-3 9-4 SQL Reference Guide この章について この章では、現在のセッションにおけるデータベース サーバのデフォルト動作を変 更する SET 文をアルファベット順に説明します。SET 文と同等の機能を持つグロー バル パラメータを、すべてのセッションのデフォルトとして rbw.config ファイルで 指定できます。グローバル パラメータについては、『Administrator's Guide』を参照 してください。 RISQL Entry Tool、RISQL Reporter、および Table Management Utility (TMU) の動作を 制御する SET 文については、各プログラムのマニュアルを参照してください。 SET ADVISOR LOGGING SET ADVISOR LOGGING 文は、現在のセッションに対する Vista Advisor クエリのロ グ記録を有効または無効にします。SET ADVISOR LOGGING 文を有効にするには、 rbw.config ファイルの ADMIN ADVISOR_LOGGING ON 設定または ALTER SYSTEM START ADVISOR_LOGGING 文を使って、Advisor のログ記録を有効にする必要があ ります。 このステートメントを使用して、特定のクエリが Advisor ログにログ記録されるか されないかを制御します。 構文 次に SET ADVISOR LOGGING 文の構文ダイアグラムを示します。 SET ADVISOR LOGGING ON OFF ON_WITH_CORR_SUB SET 文 9-5 SET ADVISOR MAXIMUM CANDIDATE VIEWS このパラメータが ON_WITH_CORR_SUB に設定された場合は、相関サブクエリがほ かの書き換えられたクエリとともに記録されます。このパラメータが ON に設定さ れた場合、相関サブクエリは記録されません。rbw.config ファイルの OPTION ADVISOR_LOGGING パラメータを使用すると、すべてのセッションにこのパラ メータを設定できます。rbw.config ファイルのパラメータのデフォルトは ON です。 Advisor の詳細については、 『IBM Red Brick Vista User’s Guide』を参照してください。 SET ADVISOR MAXIMUM CANDIDATE VIEWS 候補ビューの解析を行うと、非常に多くの候補ビューが生成されることがありま す。このプロセスは、各候補のサイズを評価する際のオーバーヘッドによって、時 間がかかる可能性があります。SET ADVISOR MAXIMUM CANDIDATE VIEWS コマ ンドを使用すると、計算する候補の数を制限し、Advisor 解析にかかる時間を削減 することができます。このコマンドは、各解析で生成される候補の最大数を指定し ます。最大数を超える候補はそれらの参照カウントに基づいて除外されます。 このコマンドが設定されていない場合、生成できる候補ビューの数は rbw.config ファイルの OPTION ADVISOR_MAXIMUM_CANDIDATE_VIEWS パラメータによっ て決定されます。このパラメータのデフォルト値は 20 です。 構文 次に SET ADVISOR MAXIMUM CANDIDATE VIEWS 文の構文ダイアグラムを示しま す。 SET ADVISOR MAXIMUM CANDIDATE VIEWS <value> 9-6 SQL Reference Guide <value> Vista Advisor 候補の解析で生成できる候補ビューの最大数を正の整 数で指定します。 SET ADVISOR SAMPLE SIZE SET ADVISOR SAMPLE SIZE SET ADVISOR SAMPLE SIZE 文は Vista Advisor 候補ビュー解析のファクト テーブル の行のサンプルを自動的に生成します。ファクト テーブルの行のサンプルを生成す るには、rbw.config ファイル、または現行のセッションに、候補ビュー解析のデ フォルト サンプル サイズを指定します。 構文 次に SET ADVISOR SAMPLE 文の構文ダイアグラムを示します。 SET ADVISOR SAMPLE SIZE <size> <size> ファクト テーブル行の割合です。 set advisor sample size 10 デフォルト値は 5% です。 使用上の注意 Vista Advisor 候補ビュー解析は、指定された割合のファクト テーブルの行に対して 実行されます。手動で作成したビューを、候補クエリ ( 管理ツールを使用している 場合はウィザード ) で指定する必要はありません。 重要 : サンプリングを使用すると Vista Advisor 候補ビュー解析を高速化できます。 ただし、サンプリングを使用すると結果は近似値になるため、注意してその近似値 を解釈する必要があります。 ADVISOR_SAMPLE_SIZE パラメータを 100 に設定すると、この Advisor サンプリン グ方法は実質的に無効になります。自分で選択したサンプル ビューを候補クエリで 指定することにより、パラメータを無効にすることもできます。パラメータを 100 に設定してビューを指定しない場合、解析はファクト テーブル全体に対して実行さ れます。 このステートメントは、rbw.config ファイルの TUNE ADVISOR_SAMPLE_SIZE <size> パラメータとしても使用できます。 Advisor の詳細については、 『IBM Red Brick Vista User’s Guide』を参照してください。 SET 文 9-7 SET ARITHIGNORE、ARITHABORT SET ARITHIGNORE、ARITHABORT SET ARITHIGNORE 文は、現在のデータベース サーバ セッション中にゼロ除算エ ラーが発生した場合の処理方法を指示します。 構文 次に SET ARITHIGNORE 文の構文ダイアグラムを示します。 SET ARITHABORT ARITHIGNORE ARITHABORT クエリの実行中にゼロ除算エラーが発生した場合、クエリの処 理を中止してエラー メッセージを返すように指示します。 ARITHIGNORE クエリの実行中にゼロ除算エラーが発生した場合、NULL を返 すように指示します。 使用上の注意 ARITHABORT 文は、デフォルトの ARITHABORT、rbw.config ファイルの OPTION ARITHABORT および OPTION ARITHIGNORE パラメータの設定よりも優先されま す。 例 次のステートメントは、現在のセッションで実行中のクエリにゼロ除算エラーが発 生した場合に、NULL を返すように指示します。 set arithignore 9-8 SQL Reference Guide SET CHECK REPORT FILE PERMISSIONS SET CHECK REPORT FILE PERMISSIONS SET CHECK REPORT FILE PERMISSIONS 文は、CHECK TABLE 文と CHECK INDEX 文で作成された出力ファイルへのアクセスを制御します。このステートメントは、 rbw.config ファイルの OPTION CHECK_REPORT_FILE_PERMISSIONS パラメータよ りも優先されます。 構文 次に SET CHECK REPORT FILE PERMISSIONS 文の構文ダイアグラムを示します。 SET CHECK REPORT FILE PERMISSIONS SERVER_OWNER SERVER_GROUP ALL SERVER_OWNER CHECK TABLE 文と CHECK INDEX 文の出力を読み取るのは、 redbrick ユーザだけであることを指定します。これはデフォル トです。 SERVER_GROUP 指定したグループの UNIX ユーザに読み取り専用許可を与えま す。この設定は、UNIX プラットフォームだけで有効です。 ALL すべてのユーザに読み取り専用許可を与えます。 SET 文 9-9 SET CHECK_TABLE_INDEX_DIRECTORY SET CHECK_TABLE_INDEX_DIRECTORY SET CHECK_TABLE_INDEX_DIRECTORY 文は、CHECK TABLE、または CHECK INDEX 文にディレクトリ パスを指定していない場合に、サマリ ファイルのデフォ ルト ディレクトリを指定します。 構文 次に SET CHECK_TABLE_INDEX_DIRECTORY 文の構文ダイアグラムを示します。 SET CHECK_TABLE_INDEX_DIRECTORY '<directory_name>' <directory_name> サマリ ファイルが格納されるデフォルト ディレクトリの名前です。 使用上の注意 このステートメントは、rbw.config ファイルの OPTION CHECK_TABLE_INDEX_DIRECTORY パラメータとしても使用できます。 このオプションを、rbw.config ファイル、またはセッションの設定として指定する 場合、CHECK INDEX、または CHECK TABLE 文で、ディレクトリ名を指定する必 要はありません。 CHECK INDEX または CHECK TABLE 文でディレクトリを指定する場合、その指定 は SET と OPTION の設定よりも優先されます。 SET COUNT RESULT SET COUNT RESULT 文は、現在のセッション中に COUNT 関数が返す値のデータ 型を指定します。デフォルトは INTEGER で、格納行数が 232 行未満のテーブルに 適用します。232 行を超えるテーブルがある場合は COUNT RESULT パラメータを DECIMAL に設定し、行数を正しくカウントできるようにしてください。 すべてのデータベース サーバ セッションのデフォルトのデータ型を指定する場合 は、rbw.config ファイルの OPTION COUNT_RESULT パラメータを使用します。 9-10 SQL Reference Guide SET CROSS JOIN 構文 次に SET COUNT RESULT 文の構文ダイアグラムを示します。 SET COUNT RESULT INTEGER INT DECIMAL DEC 使用上の注意 COUNT RESULT パラメータを DECIMAL または DEC に設定すると、COUNT 関数の 結果が DECIMAL(15,0) データ型で表示されます。何も指定しないと、結果は INTEGER データ型で表示されます。 例 次の SET COUNT RESULT 文は、COUNT 関数の結果データ型を DECIMAL に設定し てから、大規模なファクト テーブルの行数をカウントするクエリを実行します。 set count result dec select count(*) from sales_us SET CROSS JOIN SET CROSS JOIN 文は、2 つのテーブルのクロス積 ( 直積 ) を算出するテーブル結合 の可否を設定します。たとえば、このステートメントを ON に設定すると、Market テーブルと Product テーブルの行の組み合わせすべてを返します。 select * from market, product デフォルトの動作は、クロス結合を禁止するように設定されており、意図しないク ロス結合 ( 結合指定の修飾が間違っている場合など ) の実行を防ぐことができます。 現在のセッションでクロス結合の実行を許可するには、このステートメントで ON を設定してください。rbw.config ファイルの OPTION CROSS_JOIN パラメータを変 更すると、すべてのデータベース サーバ セッションに適用されます。 SET 文 9-11 SET CROSS JOIN 構文 次に SET CROSS JOIN 文の構文ダイアグラムを示します。 SET CROSS JOIN OFF ON 使用上の注意 結合する列に定義されたインデックスの有効性によっては、非等価結合 ( 不等号な どで表した結合述部など ) を含むクエリにクロス結合が必要になる場合があります。 Aroma データベースを対象とした次のクエリには、クロス結合が必要です。これは Date 列と Start_Date 列にインデックスが設定されていないためです。 select date from period join promotion on date < start_date 次のクエリは上記と似ていますが、Classkey 列にインデックスが ( デフォルトでプ ライマリ キー列として ) 設定されているため、クロス結合は不要です。 select prod_name from product join class on product.classkey > class.classkey クロス結合の詳細については、7-12 ページを参照してください。 9-12 SQL Reference Guide SET DEFAULT DATA SEGMENT SET DEFAULT DATA SEGMENT SET DEFAULT DATA SEGMENT 文は、現在のセッションで作成されるデフォルト データ セグメントの物理格納ユニット (PSU) について、ディレクトリを指定しま す。 テンポラリ データ セグメントの格納先パスを設定する方法については、9-67 ペー ジ「SET TEMPORARY SEGMENT STORAGE PATH」を参照してください。 構文 次に SET DEFAULT DATA SEGMENT 文の構文ダイアグラムを示します。 SET DEFAULT DATA SEGMENT STORAGE PATH '<dir_name>' STORAGE デフォルト データ セグメントの PSU を格納するディレクトリの絶 PATH<dir_name> 対パス (<dir_name>) を指定します。このディレクトリは SET DEFAULT DATA SEGMENT 文の実行時に存在していなくてもかま いませんが、デフォルト セグメントにテーブルを作成する前に作 成してください。 使用上の注意 このステートメントは、rbw.config ファイルの OPTION DEFAULT_DATA_SEGMENT パラメータで指定されたデフォルトよりも優先されます。SET DEFAULT DATA SEGMENT 文、または rbw.config ファイルでデフォルト ディレクトリを設定しない と、デフォルト セグメントの PSU はデータベース ディレクトリに格納されます。 SET 文 9-13 SET DEFAULT DATA SEGMENT 複数のデータベースがあるデータベース サーバでは、データベースごとに別のデ フォルト ディレクトリを設定してください。このステートメントを使用する場合 は、ほかのデータベースのデフォルト ディレクトリを指定しないように注意してく ださい。次のようにすると、各データベースにそれぞれ別のディレクトリを確実に 指定できます。 ■ ■ OPTION DEFAULT_DATA_SEGMENT パラメータ、または SET DEFAULT DATA SEGMENT 文ではディレクトリを指定しないようにします。PSU は、 適切なデータベース ディレクトリに自動的に作成されます。 このステートメントを、各データベースの .rbwrc ファイルに挿入します。 各 .rbwrc ファイルでデフォルト データ セグメントをそれぞれ別のディレ クトリに指定します。 例 次のステートメントは、デフォルト データ セグメントの PSU を格納するディレク トリを指定します。 set default data segment storage path '/default/dataseg_dir' UNIX IUS ♦ set default data segment storage path 'c:¥dsk1¥dsegs' Windows ♦ 9-14 SQL Reference Guide SET DEFAULT INDEX SEGMENT SET DEFAULT INDEX SEGMENT SET DEFAULT INDEX SEGMENT 文は、現在のセッションで作成されるデフォルト インデックス セグメントの物理格納ユニット (PSU) について、ディレクトリを指定 します。 テンポラリ インデックス セグメントの格納先のパスを設定する方法については、 9-67 ページ「SET TEMPORARY SEGMENT STORAGE PATH」を参照してください。 構文 次に SET DEFAULT INDEX SEGMENT 文の構文ダイアグラムを示します。 SET DEFAULT INDEX SEGMENT STORAGE PATH '<dir_name>' STORAGE デフォルト インデックス セグメントの PSU を格納するディレクト PATH<dir_name> リの絶対パス (<dir_name>) を指定します。このディレクトリは SET DEFAULT INDEX SEGMENT 文の実行時に存在していなくて もかまいませんが、デフォルト セグメントにインデックスを作成 する前に作成してください。 使用上の注意 このステートメントは、rbw.config ファイルの OPTION DEFAULT_INDEX_SEGMENT パラメータで指定されたデフォルトよりも優 先されます。SET DEFAULT INDEX SEGMENT 文、または rbw.config ファイルでデ フォルト ディレクトリを設定しないと、デフォルト セグメントの PSU はデータ ベース ディレクトリに格納されます。 SET 文 9-15 SET DEFAULT PSU EXTENDSIZE 複数のデータベースがあるウェアハウスでは、データベースごとに別のデフォルト ディレクトリを設定してください。このステートメントを使用する場合は、ほかの データベースのデフォルト ディレクトリを指定しないように注意してください。次 のようにすると、各データベースにそれぞれ別のディレクトリを確実に指定できま す。 ■ ■ OPTION DEFAULT_INDEX_ SEGMENT パラメータ、または SET DEFAULT INDEX SEGMENT 文では ディレクトリを指定しないようにします。PSU は、適切なデータベース ディレクトリに自動的に作成されます。 このステートメントを、各データベースの .rbwrc ファイルに挿入します。 各 .rbwrc ファイルでデフォルト インデックス セグメントをそれぞれ別の ディレクトリに指定します。 例 次のステートメントは、デフォルト データ セグメントの PSU を格納するディレク トリを指定します。 Set default index segment storage path '/default/indexseg_dir' UNIX IUS ♦ Set default index segment storage path 'c:¥dsk1¥ixsegs' Windows ♦ SET DEFAULT PSU EXTENDSIZE SET DEFAULT PSU EXTENDSIZE 文は、データ セグメントがいっぱいになったとき に、PSU を拡張するための増分を指定します。 構文 次に SET DEFAULT PSU EXTENDSIZE 文の構文ダイアグラムを示します。 SET DEFAULT PSU EXTENDSIZE 9-16 SQL Reference Guide <value> SET DEFAULT PSU EXTENDSIZE <value> セグメントへのデータの追加に伴って、PSU のサイズを増加すると きの増分を指定します。 <value> には整数を指定し、その後ろに単位を指定します。単位は K、M、G で示します。デフォルトは K です。 デフォルトは 16KB です。 使用上の注意 SET DEFAULT PSU EXTENDSIZE 文で、DEFAULT PSU EXTENDSIZE を大きな値に 設定してサイズが大きいテーブルやインデックスの性能を向上させることができま す。 性能を向上させるために、デフォルトの PSU の拡張サイズを大きめの値 (8MB など ) に設定することをお勧めします。たとえば、2GB を超える大量のデータをセグメン トにロードする場合、PSU のサイズを 16KB だけ拡張しても、性能は低下します。 ただし、デフォルトの PSU の拡張サイズが大きすぎると、ファイル システム領域 が無駄になります。この問題を避ける方法の 1 つとして、PSU の拡張サイズを小さ くして (16KB など )、小さなテーブルを多く作成する方法があります。 SET DEFAULT PSU EXTENDSIZE 文の使用例については、8-158 ページを参照して ください。 このステートメントは、rbw.config ファイルの OPTION DEFAULT_PSU_EXTENDSIZE パラメータとしても使用できます。 SET 文 9-17 SET DEFAULT SEGMENT SIZE SET DEFAULT SEGMENT SIZE SET DEFAULT SEGMENT SIZE 文は、デフォルトのテーブルまたはインデックスに 割り当てる領域の容量を指定します。このステートメントを設定しない場合、デ フォルト テーブル サイズの上限は 2GB になります。 構文 次に SET DEFAULT SEGMENT SIZE 文の構文ダイアグラムを示します。 SET DEFAULT SEGMENT SIZE <value> <value> 整数を指定し、その後ろに単位を指定します。単位は K、M、G で 示します。デフォルトは K です。 使用上の注意 デフォルト セグメント サイズは 2GB です。2GB のデフォルト セグメントごとに、 1 つのデフォルト PSU が作成されます。たとえば、ユーザが SET DEFAULT SEGMENT SIZE 文を 4GB に設定すると、2 つのデフォルト PSU が作成されます。 このステートメントは、rbw.config ファイルの OPTION DEFAULT_SEGMENT_SIZE パラメータとしても使用できます。 SET DEFAULT SEGMENT SIZE 文の使用例については、8-158 ページを参照してくだ さい。 9-18 SQL Reference Guide SET EXPORT_DEFAULT_PATH SET EXPORT_DEFAULT_PATH SET EXPORT_DEFAULT_PATH 文は、EXPORT 文で作成したファイルのデフォルト のパスを定義します。 構文 次に SET EXPORT_DEFAULT_PATH 文の構文ダイアグラムを示します。 SET EXPORT_DEFAULT_PATH <path_ specification> <path_specification> 非修飾のファイル名に付加されるベース パス名を指定します。デ フォルトは、インストール時に指定されているプラットフォーム別 スピル ディレクトリの設定と同じです。 使用上の注意 このコマンドは、rbw.config ファイルの OPTION EXPORT_DEFAULT_PATH パラ メータとしても使用できます。 SET 文 9-19 SET EXPORT_DELIMITER SET EXPORT_DELIMITER SET EXPORT_DELIMITER 文は、EXPORT 内に区切り形式で出力ファイルを作成す る EXPORT 文で使用する区切り記号を指定します。デフォルトの区切り記号はパイ プ (|) です。 構文 次に SET EXPORT_DELIMITER 文の構文ダイアグラムを示します。 SET EXPORT_DELIMITER <delimiter_ character> '<delimiter_character>' エクスポートされたファイルの列を区切って区切りフォーマットに するシングルバイト文字またはマルチバイト文字を指定します。 使用上の注意 このコマンドは、rbw.config ファイルの OPTION EXPORT_DELIMITER パラメータと しても使用できます。 エクスポート区切り記号の詳細については、8-190 ページ「EXPORT」を参照して ください。 9-20 SQL Reference Guide SET EXPORT_MAX_FILE_SIZE SET EXPORT_MAX_FILE_SIZE SET EXPORT_MAX_FILE_SIZE 文は、EXPORT 文が使用するエクスポート データ ファイルの最大容量を設定します。データ量が設定値を超えた場合は、「.nnn」が ファイル名に付加された追加出力ファイルが作成されます。nnn の開始値は 000 で す。 構文 次に SET EXPORT_MAX_FILE_SIZE 文の構文ダイアグラムを示します。 SET EXPORT_MAX_FILE_SIZE <value> M K G <value> 正の整数です。デフォルトは 0 で、値の上限はありません。 M、K、G 単位として KB、MB、GB のいずれかを示します。デフォルトは M です。 使用上の注意 ファイルごとに完全なデータを含む追加ファイルは、最大 999 個まで作成できま す。行が完全となる前にオーバーフロー状態が検出されると、新しいファイルが作 成されるため、不完全な行が書き込まれることはありません。EXPORT 文のパイプ 書き込み時に制限が適用されることはありません。 このステートメントは、rbw.config ファイルの OPTION EXPORT_MAX_FILE_SIZE パラメータとしても使用できます。 SET 文 9-21 SET FIRST DAYOFWEEK SET FIRST DAYOFWEEK SET FIRST DAYOFWEEK 文は、曜日のデータベース サーバ ロケールによって定義 されているデフォルトのナンバリング システムを上書きします。このステートメン トは、<weekday> の引数が使用されたときに EXTRACT と DATENAME 関数が返す 結果に影響を与えます。これらの関数の詳細については、第 5 章「スカラ関数」を 参照してください。 すべてのデータベース サーバ セッションに適用する週の最初の曜日を指定する場 合は、rbw.config ファイルの NLS_LOCALE FIRST_DAYOFWEEK パラメータを使用 します。 構文 次に SET FIRST DAYOFWEEK 文の構文ダイアグラムを示します。 SET FIRST DAYOFWEEK DEFAULT <daynum> DEFAULT 週の最初の曜日を現在のデータベース サーバ ロケールのデフォル ト値に再設定します。たとえば、ドイツ語のデータベースのデフォ ルト値は 2 ( 月曜日 ) です。 <daynum> デフォルトのロケール U.S.-English の各曜日に対応する 1 ∼ 7 までの 整数値 (1 が日曜日、2 が月曜日など ) を指定します。 使用上の注意 このステートメントは曜日の名前に影響を与えません。週の最初の曜日を別の番号 に設定しても、データベース サーバが日付に割り当てる曜日の名前は変更されませ ん。週の最初の曜日を何曜日に設定しても、たとえば 1998 年 1 月 1 日は、英語の データベースでは必ず Thursday、ドイツ語のデータベースでは必ず Donnerstag です。 このパラメータの現在の値は、システム テーブル RBW_OPTIONS の中に FIRST_DAYOFWEEK というオプション名で格納されます。 9-22 SQL Reference Guide SET FORCE TASKS 例 次の文は週の最初の曜日を 7 ( 土曜日 ) に設定します。 set first dayofweek 7 SET FORCE TASKS このセクションでは、関連する 6 つの SET 文について説明します。 ■ ■ ■ ■ ■ ■ SET FORCE_SCAN_TASKS SET FORCE_FETCH_TASKS SET FORCE_JOIN_TASKS SET FORCE_TARGETJOIN_TASKS SET FORCE_HASHJOIN_TASKS SET FORCE_AGGREGATION_TASKS 最初の 4 つのステートメントは、ROWS_PER_TASK パラメータよりも優先され、行 数にかかわらず、クエリ処理に使用する並列タスク ( または並列プロセス ) の数を 指定します。これらのパラメータすべてにおいて、各パラメータの設定値は使用さ れる並列プロセスの数を保証するものではありません。プロセスを割り当てる基準 の詳細については、『Query Performance Guide』を参照してください。 また、1 つの並列タスクの行数を指定することで、並列性を制御することもできま す。詳細については、9-54 ページ「SET ROWS_PER...TASK」を参照してください。 SET 文 9-23 SET FORCE TASKS 構文 次の SET 文には、OFF ( デフォルト ) または数値を設定してください。OFF を設定 すると、並列性タスク数の明示的な制御が無効になります。 SET FORCE_SCAN_TASKS OFF <value> SET FORCE_FETCH_TASKS OFF <value> SET FORCE_JOIN_TASKS OFF <value> SET FORCE_TARGETJOIN_TASKS OFF <value> SET FORCE_HASHJOIN_TASKS OFF <value> SET FORCE_AGGREGATION_TASKS OFF <value> 数値や OFF を指定せずに上記の SET 文を実行すると、各パラメータの現在の設定値 が返されます。 set force_scan_tasks ** INFORMATION ** (1433) FORCE_SCAN_TASKS is currently set to 6. これらの設定は rbw.config ファイルの TUNE パラメータを使用して、すべてのデー タベース サーバ セッションに適用させることもできます。 9-24 SQL Reference Guide FORCE_SCAN_TASKS FORCE_SCAN_TASKS FORCE_SCAN_TASKS は、関係スキャンの並列タスク数を制御する設定です。 FORCE_FETCH_TASKS と FORCE_JOIN_TASKS FORCE_FETCH_TASKS と FORCE_JOIN_TASKS の設定値は、STAR インデックスを 使用するクエリにおいて、行のフェッチとテーブルの結合に使う並列タスクの数を 制御します。1 以上の値に設定した場合は、それぞれ、ROWS_PER_FETCH_TASK および ROWS_PER_JOIN_TASK の設定値よりも優先されます。 FORCE_TARGETJOIN_TASKS FORCE_SCAN_TASKS は、ローカル インデックスを使用する TARGETjoin の並列タ スク数を制御する設定です。 このパラメータは、ローカル インデックスに対して TARGETjoin 操作を行う場合に だけ適用されます。非ローカル インデックスを使用する TARGETjoin の場合は、 TARGETjoin の上にある Exchange 演算子の次数は常に 1 であり、 FORCE_TARGETJOIN_TASKS パラメータによる影響はありません。 FORCE_HASHJOIN_TASKS FORCE_HASHJOIN_TASKS の設定値は、ハイブリッド ハッシュ結合の並列タスク 数を制御します。 FORCE_AGGREGATION_TASKS FORCE_AGGREGATION_TASKS の設定値は 1 回のセッションで処理される集合タ スクの数を制御します。 SET 文 9-25 SET IDLE TIMEOUT SET IDLE TIMEOUT SET IDLE TIMEOUT 文は、データベースと ODBC または JDBC アプリケーションの アイドル状態の接続時間を指定します。アイドル時間が指定時間を経過すると、切 断されます。デフォルト設定は 0 で、この場合は切断されません。 構文 次に SET IDLE TIMEOUT 文の構文ダイアグラムを示します。 SET IDLE TIMEOUT <interval> ( <interval> ) アイドル タイムアウト値は、分単位で指定します。この時間内はア イドル状態で接続しておくことができますが、この時間が経過する と切断します。 使用上の注意 クライアントが、指定時間以上アイドル状態である場合、データベース サーバはソ ケットを閉じます。この場合、ユーザは再接続する必要があります。 アイドル タイムアウトの経過後に、何らかの操作を行おうとすると、クライアント に、次のエラー メッセージが表示されます。 **FATAL** (10409) Could not send to server or the server timed out.OS error: OS_error_message (erno error_number). このステートメントは、rbw.config ファイルの OPTION IDLE_TIMEOUT パラメータ としても使用できます。 9-26 SQL Reference Guide SET IGNORE OPTICAL INDEXES SET IGNORE OPTICAL INDEXES IGNORE_OPTICAL_INDEXES オプションは、クエリに最適なインデックスを選択 するときに、光ディスクに格納されている PSU のインデックスを考慮するかを指定 します。クエリの処理中に光インデックスが使用されたというエラー メッセージま たは警告メッセージが表示された場合、効率は低くても確実に利用できるインデッ クスがほかにあることがわかっていれば、IGNORE_OPTICAL_INDEXES オプショ ンを設定し、光ディスクにないインデックスの使用を強制することができます。 通常、使用頻度の高いインデックスは、光セグメントには格納しません。低速の光 ディスクにインデックスを格納すると、インデックスを使う意味がなくなります。 構文 次に、光ディスク上のセグメントに格納されたインデックスを現在のセッションに 使用するかどうかを指定する構文ダイアグラムを示します。 SET IGNORE OPTICAL INDEXES OFF ON OFF 光ディスク上のセグメントにあるインデックスを含め、すべてのイ ンデックスを考慮して最適なインデックスを選択します。光ディス ク上のインデックスが最適であると判断された場合は、OPTICAL AVAILABILITY オプションの設定によって処理方法が制御されま す。このオプションの詳細については、9-36 ページ「SET OPTICAL AVAILABILITY」を参照してください。OFF はデフォルトです。 ON 光ディスク以外の媒体に完全に格納されているインデックスのみか ら、最適なインデックスを選択します。この基準に合ったインデッ クスがなければエラーになり、操作は失敗します。 例 光ディスク以外の媒体に格納されているインデックスのみの使用を指定するには、 次のように入力します。 set ignore optical indexes on SET 文 9-27 SET IGNORE PARTIAL INDEXES SET IGNORE PARTIAL INDEXES SET IGNORE PARTIAL INDEXES 文は、現在のセッションでクエリを処理する最適 な実行プランをシステムが選択するときに、部分的に利用可能なインデックスを考 慮すべきかを指定します。部分的に利用可能なインデックスとは、オフライン イン デックス セグメントが 1 つ以上あるインデックスです。 構文 次に SET IGNORE PARTIAL INDEXES 文の構文ダイアグラムを示します。 SET IGNORE PARTIAL INDEXES OFF ON OFF 部分的に利用可能なインデックスを含め、すべてのインデックスを 考慮して最適なインデックスを選択します。部分的に利用可能なイ ンデックスが最適であると判断された場合は、rbw.config ファイル の OPTION PARTIAL_AVAILABILITY パラメータか、SET PARTIAL AVAILABILITY 文によって処理方法が制御されます。 ON 完全に利用可能なインデックスのみから、最適なインデックスを選 択します。完全に利用可能なインデックスがなければ、エラーにな りクエリは失敗します。 使用上の注意 このステートメントは、デフォルト設定の OFF または rbw.config ファイルの OPTION IGNORE_PARTIAL_INDEXES パラメータで指定したデフォルトよりも優先 されます。 例 このステートメントは、現在のセッションでクエリのインデックスを選択するとき に、完全に利用可能なインデックスだけを考慮します。 set ignore partial indexes on 9-28 SQL Reference Guide SET INDEX TEMPSPACE と SET QUERY TEMPSPACE SET INDEX TEMPSPACE と SET QUERY TEMPSPACE SET INDEX TEMPSPACE 文は、現在のセッションでインデックス作成、または CHECK INDEX... VALIDATE FULL 操作に使用するスピル ファイルのディレクトリ、 メモリ サイズのしきい値、最大ファイル サイズを指定します。 SET QUERY TEMPSPACE 文は、現在のセッションでクエリ処理に使用するスピル ファイルのディレクトリと最大ファイル サイズを指定します。 スピル ファイルはディスク上のファイルで、インデックスの作成中、インデックス 全体の検査中、または各クエリの処理中に中間結果を格納します。中間結果は当初 メイン メモリに格納されますが、しきい値に達するとディスクに書き出されます。 スピル ファイルの詳細については、『Administrator's Guide』を参照してください。 構文 次に、SET INDEX TEMPSPACE 文と SET QUERY TEMPSPACE 文の構文ダイアグラ ムを示します。 , SET QUERY TEMPSPACE DIRECTORIES '<dir_path>' MAXSPILLSIZE <size> RESET , SET INDEX TEMPSPACE DIRECTORIES '<dir_path>' THRESHOLD <value> MAXSPILLSIZE <size> RESET SET TEMPSPACE RESET SET 文 9-29 SET INDEX TEMPSPACE と SET QUERY TEMPSPACE DIRECTORIES <dir_path> 一時領域に使用するディレクトリまたはディレクトリの集合を指 定します。<dir_path> には、絶対パスを入力してください。 rbw.config ファイルのエントリに複数のディレクトリを定義する 場合は、複数行で入力します。一時領域ディレクトリを使用する 順序はランダムであり ( 内部で決定 )、ユーザー側から制御でき ないため、ディレクトリはどの順序で指定してもかまいません。 UNIX UNIX プラットフォームでは、一時領域ディレクトリを指定しな い場合、デフォルト ディレクトリは /tmp になります。♦ Windows Windows プラットフォームでは、一時領域ディレクトリを指定し ない場合、次の一時的なファイル パスがデフォルト ディレクト リとして指定されます。 ■ ■ ■ 9-30 SQL Reference Guide %TMP% で指定されるパス %TMP% が定義されていない場合は、%TEMP% で指定 されるパス %TMP% と %TEMP% が両者とも定義されていない場合 は、Windows ディレクトリ ♦ SET INDEX TEMPSPACE と SET QUERY TEMPSPACE THRESHOLD <value> インデックス作成、または CHECK INDEX... VALIDATE FULL 操 作の中間結果を書き込むメモリの最大許容量を指定します。指定 した量に達すると、中間結果はディスクに書き出されます。複数 のインデックスが関わる操作の場合は、指定したしきい値が作成 される各インデックスに均等分割されます。デフォルトは、 10MB (10M) です。 指定単位は、KB (K) でも MB (M) でもかまいません。それぞれ、 数値の後に K または M を付加してください。数値と単位識別子 (K、M) との間には、空白を入れないでください。たとえば、 1024K、500M のように記述します。 THRESHOLD オプションを使用するときには、次の条件に注意 してください。 ■ ■ しきい値は、必ずコンピュータの物理メモリ サイズよ りも小さくしてください。 コンピュータの物理メモリの 4 分 の 1 から 2 分の 1 まで の間で、操作に合わせてしきい値を設定することをお勧 めします。 ■ ロードや CREATE INDEX を実行する場合は、ほか のユーザーが同時にクエリを実行していることは少 ないため、しきい値を物理メモリの半分に設定して もかまいません。 ■ VALIDATE FULL オプションでの CHECK INDEX の 実行中に、ほかのユーザがデータベースにクエリを 実行する可能性がある場合は、しきい値を物理メモ リの 4 分の 1 以下に設定してください。 このしきい値は、対応する MAXSPILLSIZE の前に指定してくだ さい。つまり、rbw.config ファイルの MAXSPILLSIZE エントリ の前に入力する必要があります。 しきい値を 0 に設定すると、インデックス エントリが 200 に達し た時点でディスクに書き出されます。 クエリ処理については、THRESHOLD パラメータはありません。 SET 文 9-31 SET INDEX TEMPSPACE と SET QUERY TEMPSPACE MAXSPILLSIZE <size> 1 つの操作に使用する一時領域の最大サイズを指定します。複数 のインデックスを作成する場合は、指定したサイズが各インデッ クスに均等に分割されます。クエリ処理について、指定したサイ ズが各クエリおよびサブクエリ ( ある場合 ) にそれぞれ割り当て られます。 指定単位は、KB (K)、MB (M)、GB (G) のいずれでもかまいませ ん。それぞれ、数値の後に K、M、G を付加してください。数値 と単位識別子 (K、M) との間には、空白を入れないでください。 たとえば、1024K、500M、 8G のように記述します。 MAXSPILLSIZE のデフォルト値は 1GB です。MAXSPILLSIZE の 最大値は 2047GB です。 RESET クエリまたはインデックス TEMPSPACE パラメータを rbw.config ファイルで指定した値にリセットします。QUERY も INDEX も指 定しないと、すべての TEMPSPACE パラメータがリセットされま す。 例 現在のセッションで、パラメータを変更する SET 文の使用例を示します。 set index tempspace '/disk2/itemp', set index tempspace set index tempspace UNIX directories '/disk1/itemp', '/disk3/itemp' threshold 2M maxspillsize 3G ♦ set index tempspace directories 'd:¥itemp', 'e:¥itemp', 'f:¥itemp' set index tempspace threshold 2M set index tempspace maxspillsize 3G Windows ♦ 9-32 SQL Reference Guide SET INFO MESSAGE LIMIT SET INFO MESSAGE LIMIT INFO_MESSAGE_LIMIT パラメータは、SET STATS INFO 文の使用中、および相関 サブクエリの実行中に、膨大な数のメッセージが返されないようにします。デフォ ルト値は 1,000 です。9-62 ページを参照してください。通知メッセージ (STATISTICS、または INFORMATION というラベルの付いたメッセージ ) は、1 つ のクエリで最大 1,000 まで表示されます。このとき、すべてのクエリは完全に実行 されます。警告メッセージおよびエラー メッセージは通常どおり返されます。 メッセージの最大数を変更するには、DEFAULT INFO_MESSAGE_LIMIT の値を構 成ファイル (rbw.config) に追加するか、SET 文を使用します。通知メッセージは、 クエリの実行中にメモリに格納されるため、メッセージの可能な最大数は、システ ムで使用できるメモリの量に依存します。 構文 次に SET INFO MESSAGE LIMIT 文の構文ダイアグラムを示します。 SET INFO MESSAGE LIMIT <value> 1000 どちらの場合も、整数を指定してください。0 に設定すると、返されるメッセージ 数に制限がなくなります。 例 メッセージの最大数を 2000 に設定し、通常は 2000 以上の通知メッセージを返す相 関サブクエリを実行したとします。このとき 2000 までの通知メッセージが表示さ れます。 set info message limit 2000 続いて状況を説明する次のような警告メッセージが表示されます。 ** WARNING ** (1443) No more informational messages will be reported for this query due to the INFO_MESSAGE_LIMIT constraint.Informational messages generated: 2000. SET 文 9-33 SET LOCK SET LOCK SET LOCK 文は、ほかのユーザがテーブルにアクセスしている場合、またはすでに テーブルをロックしている場合のテーブル ロック、およびデータベース ロックの 動作を指定します。 構文 次に SET LOCK 文の構文ダイアグラムを示します。 SET LOCK WAIT NO WAIT WAIT ロックが必要な場合は、既存のロックが解除されるか、新規ロック を取得するまでデータベース サーバ セッションを中断します。 デッドロックが発生する可能性がある場合は、ロック要求が拒否さ れ、エラー メッセージが返されます。WAIT の設定は無視されま す。 NO WAIT すでにテーブルがロックされているか、ほかのユーザがテーブルに アクセスしている場合は、ロック要求を拒否し、エラー メッセージ を返します。 使用上の注意 このステートメントは、現在のセッションでユーザーが LOCK ( テーブルのロック ) 文または LOCK DATABASE 文を実行したときに有効になります。このステートメン トの設定は、NO WAIT オプションを指定した LOCK 文または LOCK DATABASE 文 で変更することができます。 9-34 SQL Reference Guide SET OLAP APPROXIMATE NUMERIC FAST COMPUTATION SET OLAP APPROXIMATE NUMERIC FAST COMPUTATION このコマンドは、ウィンドウ フレームに関する SQL OLAP 関数を使用している特定 のクエリにのみ適用されます。これらの関数については、第 6 章「分析関数」を参 照してください。 構文 次に SET OLAP APPROXIMATE NUMERIC FAST COMPUTATION 文の構文ダイアグ ラムを示します。 SET OLAP APPROXIMATE NUMERIC FAST COMPUTATION ON OFF このステートメントは、rbw.config ファイルの OPTION OLAP_APPROXIMATE_NUMERIC_FAST_COMPUTATION パラメータの設定よりも 優先されます。 このパラメータのデフォルトは ON です。このパラメータを OFF に設定した場合、 次の条件では OLAP クエリの性能が大きく低下する可能性があります。 ■ ■ OLAP SUM、AVG、RATIO_TO_REPORT 関数がおおよその数値列 (REAL、 DOUBLE PRECISION、FLOAT) に適用される場合 ウィンドウ フレームの下限が n PRECEDING、n FOLLOWING、CURRENT ROW のいずれかである場合 性能低下の程度はウィンドウ フレームのサイズに比例します。ウィンドウ フレー ムが大きくなるほど性能が低下します。 このコマンドが ON に設定されていれば、ウィンドウ パーティションが非常に大き な場合でも、クエリの性能は低下しません。各行についてウィンドウ フレームを再 計算するのではなく、付加的にウィンドウ フレームを保持する分、性能が向上しま す。ただし、この「クイック計算」の方法では、OLAP 関数について誤った結果が 返されることがあります。これは、数値列の値が大きく変化する場合は特に発生し やすくなります。 SET 文 9-35 SET OPTICAL AVAILABILITY つまり、OFF 設定では、性能が低下する代わりに、正確な結果が保証されます。一 方、デフォルトの ON 設定では、誤った結果を返すリスクはありますが、性能が向 上します。これに対応する RISQL MOVINGSUM クエリおよび MOVINGAVG クエリ を使用して、OLAP 関数のデフォルトの動作 ( 正しい結果が出ない場合もあるク イック計算 ) をエミュレートすることもできます。 SET OPTICAL AVAILABILITY 光ディスクのデータ、またはインデックスへのアクセスは、SET OPTICAL_AVAILABILITY 文の設定、およびデータへのアクセスに使用するステー トメントが、次の読み込み操作、および書き込み操作を必要とするかどうかに依存 します。 ■ ■ 読み込み操作 : SELECT 文および TMU UNLOAD 文 書き込み操作 : ❑ ALTER TABLE および DROP TABLE 文 ❑ CREATE INDEX および ALTER INDEX 文 ❑ ALTER SEGMENT 文 ❑ INSERT、UPDATE、DELETE 文 ❑ TMU LOAD DATA および REORG 文 次の構文ダイアグラムで使用される設定は、上記以外の操作には適用されません。 構文 次に光ディスクに格納されたデータまたはインデックスの有効性を現在のセッショ ンで指定する SET 文の構文を示します。 SET OPTICAL AVAILABILITY WAIT NONE WAIT INFO WAIT WARN SKIP INFO SKIP WARN PRECHECK ERROR 9-36 SQL Reference Guide SET OPTICAL AVAILABILITY WAIT NONE 光セグメントに格納された行データまたはインデックスにアクセス できるまで待機します。光媒体のアクセスに関するメッセージは表 示されません。WAIT_NONE はデフォルトです。 WAIT INFO 光セグメントに格納された行データまたはインデックスにアクセス できるまで待機します。光ディスクにアクセス中であることを示す 通知メッセージが表示されます。 WAIT WARN 光セグメントに格納された行データまたはインデックスにアクセス できるまで待機します。光ディスクにアクセス中であることを示す 警告メッセージが表示されます。 SKIP INFO 読み込み操作について、行データまたはインデックスを格納してい る光ディスクにアクセスしないことを指定します。光ディスクを操 作対象から除外したことを示す通知メッセージが表示されます。 書き込み操作ではこのオプションは無視され、PRECHECK を指定 した場合と同様にステートメントが処理されます。 SKIP WARN 読み込み操作について、行データまたはインデックスを格納してい る光ディスクにアクセスしないことを指定します。光ディスクを操 作対象から除外したことを示す警告メッセージが表示されます。 書き込み操作ではこのオプションは無視され、PRECHECK を指定 した場合と同様にステートメントが処理されます。 PRECHECK どの操作についても、操作前に光ディスクの有無をチェックしま す。光セグメントが検出された場合は、エラー メッセージを表示 し、処理を中止します。 ERROR 読み込み操作はステートメントを処理します。ただし、光ディスク が検出された時点でエラー メッセージを表示し、処理を中断しま す。すでに処理を開始した後に光セグメントが検出されるので注意 してください。 書き込み操作ではこのオプションは無視され、PRECHECK を指定 した場合と同様にステートメントが処理されます。 例 光媒体に格納されたデータまたはインデックスのアクセス動作を指定する例を示し ます。 set optical availability error SET 文 9-37 SET ORDER BY SET ORDER BY SET ORDER BY 文は、ソートする列でのデータベース サーバによる NULL 値の配 置を変更します。 SELECT 文の ORDER BY 句は、この設定よりも優先されます。このときの NULL の 配置については、7-55 ページを参照してください。 構文 次に SET ORDER BY 文の構文ダイアグラムを示します。 SET ORDER BY NULL ASC FIRST LAST DESC ASC、DESC 昇順ソートか降順ソートかを指定します。 FIRST、LAST NULL 値の位置を指定します。 使用上の注意 このステートメントは、現在のセッションで ORDER BY 句を指定した SELECT 文 をユーザが実行したときに有効になります。このステートメントで設定した内容 は、ORDER BY 句に NULL キーワードを指定したクエリで変更することができま す。 例 次のステートメントは、降順にソートした列の最後に NULL 値を配置するように指 示します。 set order by desc null last 9-38 SQL Reference Guide SET PARALLEL SET_OPERATION SET PARALLEL SET_OPERATION SET PARALLEL SET_OPERATION 文は、UNION、INTERSECT、EXCEPT の集約演 算子を使用しているクエリに対して、プラン レベルの並列処理を行なえるかどうか を決定します。rbw.config ファイルの TUNE PARALLEL_SET_OPERATION パラメー タを使用して、すべてのデータベース サーバ セッションに適用することもできま す。 構文 次に SET PARALLEL SET_OPERATION 文の構文ダイアグラムを示します。 SET PARALLEL SET_OPERATION OFF ON OFF、ON 並列処理を UNION、INTERSECT、EXCEPT クエリに適用するかど うかを指定します。デフォルトは OFF です。 このパラメータの現在の設定値を確認するには、OFF と ON のどちらも指定せずに 次のステートメントを実行します。 set parallel set_operation ** INFORMATION ** (1434) PARALLEL_SET_OPERATION is currently set to OFF. 使用上の注意 UNION、INTERSECT、EXCEPT の集約演算子を使用しているクエリには、操作レ ベルでの並列性だけでなくクエリ プラン レベルでの並列性の利点も得られます。 この 3 つの演算子がどのような組み合わせで指定されているクエリの場合でも、潜 在的な性能は同じように向上します。 設定パラメータ TUNE PARALLEL_SET_OPERATION が ON に設定されている場合 は、UNION クエリ内の各クエリ式のクエリ プランは順次ではなく同時に実行され ます。サーバは最初のクエリ式の実行が完了するのを待たずに、一部またはすべて のクエリ式の処理を同時に開始します。 SET 文 9-39 SET PARALLEL_HASHJOIN 次の簡略化したクエリを例に考えてみます。 select col1, col2, col3 from... union select col1, col2, col3 from... union select col1, col2, col3 from...; 十分な並列処理が指定されれば、3 つのクエリ式 (select...) に選択されたクエリ プラ ンは同時に実行を開始します。この種のクエリとその EXPLAIN 出力の詳しい例に ついては、 『Query Performance Guide』を参照してください。 PARALLEL_SET_OPERATION パラメータはデフォルトで OFF に設定されています。 これは、この特別な並列処理によって UNION クエリの処理速度が高まるものと低 下するものがあるためです。集約演算子を含まないクエリは影響を受けません。ク エリごとに次の SET コマンドを使用して、さまざまな UNION クエリをテストし、 性能を比較することをお勧めします。 set parallel set_operation on; クエリの性能とリソース割り当てという点から考えて、構成ファイル全体で PARALLEL_SET_OPERATION パラメータを ON にするよりも、このほうが安全で す。 推奨されるチューニング設定の詳細については、『Query Performance Guide』を参照 してください。 SET PARALLEL_HASHJOIN SET PARALLEL HASHJOIN 文は、現在のセッションでハイブリッド ハッシュ結合 に並列処理を許可するかどうかを指定します。rbw.config ファイルの TUNE パラ メータを使用して、すべてのデータベース サーバ セッションに適用することもで きます。 構文 次に SET PARALLEL HASHJOIN 文の構文ダイアグラムを示します。 SET PARALLEL_HASHJOIN OFF ON 9-40 SQL Reference Guide SET PARTIAL AVAILABILITY OFF、ON ハイブリッド ハッシュ結合に並列処理を許可するかどうかを指定し ます。デフォルトは OFF です。 このパラメータの現在の設定値を確認するには、OFF と ON のどちらも指定せずに 次のステートメントを実行します。 set parallel_hashjoin ** INFORMATION ** (1434) PARALLEL_HASHJOIN is currently set to OFF. 使用上の注意 SET FORCE_HASHJOIN_TASKS を使用してハイブリッド ハッシュ結合の並列プロ セス数を制御するには、このステートメントで ON を設定してください。 例 次のステートメントは、ハイブリッド ハッシュ結合に並列処理を許可するように指 示します。 set parallel_hashjoin on SET PARTIAL AVAILABILITY SET PARTIAL AVAILABILITY 文は、部分的に利用可能なテーブルに対するクエリの 現在のセッションでの動作を指定します。部分的に利用可能なテーブルとは、オフ ラインのデータ セグメントが 1 つ以上あるか、クエリに使用するインデックスにオ フライン インデックス セグメントが 1 つ以上あるテーブルです。 構文 次に SET PARTIAL AVAILABILITY 文の構文ダイアグラムを示します。 SET PARTIAL AVAILABILITY INFO WARN ERROR PRECHECK SET 文 9-41 SET PARTIAL AVAILABILITY INFO クエリに必要なデータ セグメントまたはインデックス セグメント の中に利用できないものがあっても、クエリを実行します。テーブ ル全体が利用可能な場合と結果が異なるときには、結果とともに通 知メッセージが表示されます。 WARN INFO と同じ動作をしますが、通知メッセージではなく警告メッ セージを返します。 ERROR クエリに必要なデータ セグメントまたはインデックス セグメント の中に利用できないものがあっても、クエリを実行します。テーブ ル全体が利用可能な場合と結果が異なるときには、結果を返さずに エラー メッセージを表示します。 PRECHECK クエリを処理する前に、クエリに必要なテーブルまたはインデック スの有効性をチェックします。テーブルが部分的にしか利用できな い場合は、エラー メッセージが実行され、クエリは実行されませ ん。 使用上の注意 複数の選択式 (UNION) または部分的な SELECT 文 ( サブクエリ ) を含むクエリの場 合は、最初の選択式を事前に検証および実行してから、その他の選択式を検証およ び実行します。 テーブルが部分的にしか利用できないために、2 番めの選択式でエラーが発生する 場合も、最初の選択式の処理が完了するまではエラー メッセージは返されません。 つまり、最初の選択式を処理してから 2 番めの選択式を検証するため、エラーを返 すまでに時間がかかることがあります。 部分的に利用可能なテーブルに対する動作設定とクエリに指定した選択式の内容に よって返される結果とメッセージが異なります。 このステートメントは、PRECHECK のデフォルトまたは rbw.config ファイルの OPTION PARTIAL_AVAILABILITY パラメータで指定したデフォルトよりも優先さ れます。 9-42 SQL Reference Guide SET PARTITIONED PARALLEL AGGREGATION SET PARTITIONED PARALLEL AGGREGATION SET PARTITIONED PARALLEL AGGREGATION 文は、現在のセッションでの集約操 作の並列処理を有効または無効にします。rbw.config ファイルの TUNE パラメータ を使用して、すべてのデータベース サーバ セッションに適用することもできます。 構文 次に SET PARTITIONED PARALLEL AGGREGATION 文の構文ダイアグラムを示しま す。 SET PARTITIONED PARALLEL AGGREGATION OFF ON OFF、ON 集約に並列処理を許可するかどうかを指定します。デフォルトは OFF です。 このパラメータの現在の設定値を確認するには、OFF と ON のどちらも指定せずに 次のステートメントを実行します。 set partitioned parallel aggregation; ** INFORMATION ** (1434) PARTITIONED_PARALLEL_AGGREGATION is currently set to OFF. 使用上の注意 rbw.config ファイルでは、この TUNE パラメータはデフォルトで OFF に設定されて います。パーティション化した並列集約は、非常に大きな数のグループを処理する 集約クエリへの使用を目的としています。詳細については、『Query Performance Guide』を参照してください。 SET 文 9-43 SET PERFORMANCE MONITOR SET PERFORMANCE MONITOR SET PERFORMANCE MONITOR 文は、現在のセッションにおけるクエリ パフォー マンス モニタの ON/OFF を設定します。 構文 次に SET PERFORMANCE MONITOR 文の構文ダイアグラムを示します。 SET PERFORMANCE MONITOR OFF '<user_comment>' ON OFF、ON 後続するクエリを監視するかどうかを指定します。デフォルトは OFF です。 <user_comment> オプションのコメントです。クエリが監視されているかどうか、ま た、特定の条件やパラメータがそのクエリに指定されているかどう かを識別するために使用できます。<user_comment> には 256 文字ま でを指定できます。 使用上の注意 パフォーマンス モニタ デーモン (rbwpmond) は、セッションのパフォーマンス モニ タをオンにする前に有効にしておく必要があります。rbwpmond デーモンを有効に するには、次のいずれかの方法に従います。 ■ ■ Red Brick Warehouse Administrator で、[Manage System Wizard] の [Enable Performance Monitor Daemon] ラジオ ボタンを選択する ALTER SYSTEM コマンドの START PERFORMANCE MONITOR オプション を実行する RISQL> alter system start performance monitor; パフォーマンス モニタの使用方法の詳細については、『Query Performance Guide』を 参照してください。 9-44 SQL Reference Guide SET PERFORMANCE MONITOR 例 次のステートメントでは、SET PERFORMANCE MONITOR '<comments>' コマンドを 複数使用して、同じクエリを異なる ROWS_PER_TARGETJOIN_TASK の値で実行す るときの識別を行っています。 SET ROWS_PER_TARGETJOIN_TASK 10000; SET PERFORMANCE MONITOR ON 'target8segs,10Krow join tasks'; SELECT ... SET ROWS_PER_TARGETJOIN_TASK 50000; SET PERFORMANCE MONITOR 'target8segs,50Krow join tasks'; SELECT ... SET PERFORMANCE MONITOR OFF; 最初の SET PERFORMANCE MONITOR コマンドの ON キーワードでセッションの 監視が ON に設定されます。したがって、2 番めの SET PERFORMANCE MONITOR コマンドには ON キーワードが必要ありません。 SET 文 9-45 SET PRECOMPUTED VIEW MAINTENANCE SET PRECOMPUTED VIEW MAINTENANCE SET PRECOMPUTED VIEW MAINTENANCE 文は、集約保守が可能なすべての事前 計算集約に対して、集約保守を有効にします。集約保守がサポートされない場合に ついては、『IBM Red Brick Vista User’s Guide』を参照してください。 構文 次に SET PRECOMPUTED VIEW MAINTENANCE 文の構文ダイアグラムを示しま す。 SET PRECOMPUTED VIEW MAINTENANCE ON OFF 使用上の注意 このステートメントは、SET PRECOMPUTED VIEW MAINTENANCE 文が設定され ているセッションだけに適用されます。デフォルトの設定は ON です。 重要 : 次の 2 つのことに注意してください。 ■ ■ ロード時に保守を実行すると、ロード処理が遅くなります。 集約を保守する既存のスクリプトがある場合、保守が重複することがあり ます。 このステートメントは、rbw.config ファイルの OPTION PRECOMPUTED_VIEW_ MAINTENANCE パラメータとしても使用でき、データベース サーバとローダの両 方で実装されています。 9-46 SQL Reference Guide SET PRECOMPUTED VIEW MAINTENANCE ON ERROR SET PRECOMPUTED VIEW MAINTENANCE ON ERROR SET PRECOMPUTED VIEW MAINTENANCE ON ERROR 文は、保守中のエラーによ り、保守できない集約テーブルが検出されたときに、バージョン管理されたデータ ベースがとる処置を指定します。このステートメントはバージョン管理されたデー タベースにだけ適用されます。 次に SET PRECOMPUTED VIEW MAINTENANCE ON ERROR 文の構文ダイアグラム を示します。 SET PRECOMPUTED VIEW MAINTENANCE ON ERROR ROLLBACK INVALIDATE 使用上の注意 このステートメントでは 2 つの結果が想定されます。保守できない集約テーブルを バージョン管理されたデータベースが検出した場合、次のようになります。 ■ ■ 問題となっている集約は無効とマークされます。 トランザクション全体がロールバックされるので、集約テーブルを含むす べてのテーブルが元の状態に戻ります。 この SET 文は、TMU とデータベース サーバの両方で実装されています。 このステートメントは、rbw.config ファイルの OPTION PRECOMPUTED_VIEW_MAINTENANCE_ON_ERROR パラメータとしても使用でき ます。 SET 文 9-47 SET PRECOMPUTED VIEW QUERY REWRITE SET PRECOMPUTED VIEW QUERY REWRITE SET PRECOMPUTED VIEW QUERY REWRITE 文を使用して、集約クエリ リライト システムを ON または OFF に設定できます。デフォルトの設定は ON です。 構文 次に SET PRECOMPUTED VIEW QUERY REWRITE 文の構文ダイアグラムを示しま す。 SET PRECOMPUTED VIEW QUERY REWRITE ON OFF このステートメントは、rbw.config ファイルの OPTION PRECOMPUTED_VIEW_ QUERY_ REWRITE パラメータでも指定できます。 9-48 SQL Reference Guide SET QUERY MEMORY LIMIT SET QUERY MEMORY LIMIT SET QUERY MEMORY LIMIT 文は、現在のセッションでクエリ、INSERT、 UPDATE、DELETE 文の実行に利用できる作業用メモリの最大量を指定します。指 定した値に達すると、中間結果がディスク領域に保存されます。メモリ調整パラ メータの詳細については、 『Administrator's Guide』および『Query Performance Guide』 を参照してください。 構文 次に SET QUERY MEMORY LIMIT 文の構文ダイアグラムを示します。 SET QUERY MEMORY LIMIT <value> DEFAULT <value> 利用可能なメモリの最大量を KB (K)、MB (M)、GB (G) で指定しま す。K、M、G のいずれかを入力し、2M ( または 2,048K) ∼ 4G の数 値を指定してください。単位を表す文字と数値との間には、空白を 入れてはいけません。 DEFAULT キーワードは、rbw.config ファイルに指定した値 ( ファイ ルに指定しなかった場合はデフォルトの 50M) を最大値に設定しま す。 使用上の注意 このステートメントは、rbw.config ファイルの TUNE QUERY_MEMORY_LIMIT パ ラメータの設定よりも優先されます。 例 次のスクリプトは、sales_report99 というクエリのメモリ最大量を 100MB に設定し、 クエリを実行してから、最大値をデフォルトにリセットします。 set query memory limit 100M run sales_report99 set query memory limit default ... SET 文 9-49 SET QUERYPROCS SET QUERYPROCS SET QUERYPROCS 文は、現在のセッションの 1 つのクエリで利用できる並列プロ セスの最大数を指定します。 構文 次に SET QUERYPROCS 文の構文ダイアグラムを示します。 <num_per_query> SET QUERYPROCS <num_per_query> 0 ∼ 32,767 の整数を指定します。 0 または 1 を指定すると、並列クエリ処理は行われません。 使用上の注意 0 から rbw.config ファイルの設定値まで、任意の値を指定できます。データベース サーバは 0 から rbw.config ファイルの設定値までの値を受け入れます。rbw.config ファイルの設定値を超える値と 0 未満の値は無視されます。 例 次のステートメントは、現在のデータベース サーバ セッションで実行する 1 つのク エリで利用できる最大プロセス数を 5 に設定します。 set queryprocs 5 9-50 SQL Reference Guide SET REPORT_INTERVAL SET REPORT_INTERVAL SET REPORT_INTERVAL 文は、rbwadmd デーモンにレポートを送る最大間隔時間 を指定します。rbwadmd デーモンは、この値に基づいて動的統計テーブル (DST) を 更新します。 指定した間隔時間が経過する前に、データベース イベントがレポートを送ることも あります。状態を変化させるステートメント、またはロックを要求、取得、解除す るセッションをデータベース サーバが検出すると、rbwadmd デーモン プロセスに レポートを送ります。状態とは、接続、アイドル、実行、コンパイル、演算、結果 行の抽出、ソート、インデックスの作成、挿入などです。 構文 次に SET REPORT_INTERVAL 文の構文ダイアグラムを示します。 SET REPORT_INTERVAL <value> <value> rbwadmd デーモンにレポートを送る分単位の最大間隔時間を、正 の整数で指定します。 使用上の注意 このステートメントは、デフォルトの 1 分および、rbw.config ファイルの ADMIN REPORT_INTERVAL パラメータのデフォルト設定値よりも優先されます。 このステートメントの引数として 0 を指定すると、rbwadmd デーモン プロセスに レポートを送る最大間隔時間が無制限になります。クエリの完了などのイベントが 発生するまで、レポートは送られません。 SET 文 9-51 SET RESULT BUFFER と SET RESULT BUFFER FULL ACTION SET RESULT BUFFER と SET RESULT BUFFER FULL ACTION クエリの結果をクライアントが取得するまで格納しておくバッファのサイズを指定 するには、次の構文で SQL SET 文を実行します。 SET RESULT BUFFER <value> ; K M G UNLIMITED <value> バッファのサイズを表す整数の値を指定します。指定単位は、KB、 MB、GB のいずれかで、数値の後にそれぞれ K、M、G を指定しま す。 UNLIMITED バッファのサイズに制限がないことを示します。バッファは、 QUERY TEMPSPACE MAXSPILLSIZE パラメータで割り当てられる 領域と同じ領域を使用するため、RESULT BUFFER パラメータを UNLIMITED に設定しても、QUERY TEMPSPACE MAXSPILLSIZE の値がサイズの上限となります。 RESULT BUFFER パラメータを 0 に設定すると、結果はバッファに 格納されません。 リザルト バッファのサイズが、SET RESULT BUFFER 文の設定値に達した時の動作 を指定するには、次の構文で SET 文を実行します。 SET RESULT BUFFER FULL ACTION ABORT ; PAUSE ABORT は、バッファのサイズが設定値に達した時点でクエリ処理を中止すること を指定します。PAUSE は、クライアントがデータを取得するまで、クエリの処理を 一時停止することを指定します。 9-52 SQL Reference Guide SET ROWCOUNT テーブルの Read ロックは、すべてのリザルト セットが Red Brick サーバから転送さ れるか、リザルト バッファに格納されるまで保持されます。一定量以上のデータ抽 出にユーザの要求を必要とするクライアント ツールの場合は、すべての結果がクラ イアントに送信されるか、リザルト バッファに格納されてクライアントの要求を待 機する状態になるまで、テーブルの Read ロックは解除されません。 例 次の SET 文は、現在のセッションについてリザルト バッファのサイズを 100MB に 設定し、設定値に達した時点でクエリ処理を中止することを指定します。 set result buffer 100M; set result buffer full action abort; SET ROWCOUNT SET ROWCOUNT 文を利用すると、誤って実行された「暴走クエリ」を制御できま す。このステートメントは、指定した行数が抽出されるとクエリの実行を停止しま す。システム リソースを有効に使用し、またユーザはリザルト セットの一部を確 認することができます。リザルト セットの後には、SET ROWCOUNT が有効である ことを示す通知メッセージが表示されます。 クエリから返された行数が、ROWCOUNT の設定値と一致した場合も、クエリ中断 メッセージが表示されます。 構文 SET 文は、現在のセッションの行カウントを設定します。すべてのデータベース サーバ セッションの行カウントを設定する場合は、DEFAULT ROWCOUNT パラ メータを構成ファイル (rbw.config) に追加します。 SET 文の構文は次のとおりです。 SET ROWCOUNT <number_of_rows> どちらの場合も、行数は正数に設定してください。デフォルトの設定値は 0 で、抽 出される行数の制限はなくなります。ROWCOUNT の設定値を確認するには、 RBW_OPTIONS システム テーブルにクエリを実行します。 SET 文 9-53 SET ROWS_PER...TASK 例 この例では、10 行だけを返してクエリの実行を停止します。 set rowcount 10 select prod_name, dollars from sales s join product p on s.prodkey = p.prodkey and s.classkey = p.classkey join period d on s.perkey = d.perkey where year = 1998 and month = 'JAN' PROD_NAME Veracruzano Veracruzano Veracruzano Veracruzano Veracruzano Veracruzano Veracruzano Veracruzano Veracruzano Veracruzano DOLLARS 96.00 17.25 31.50 40.00 51.75 69.00 337.50 69.00 36.75 135.00 ** INFORMATION ** (1436) Query terminated because ROWCOUNT number of rows have been fetched.Rows returned 10. SET ROWS_PER...TASK このセクションでは、関連する 4 つの SET 文について説明します。 ■ ■ ■ ■ SET ROWS_PER_SCAN_TASK SET ROWS_PER_JOIN_TASK SET ROWS_PER_FETCH_TASK SET ROWS_PER_TARGETJOIN_TASK 上記のステートメントは、並列タスクあたりの行数を指定することにより、クエリ の並列処理を制御します。SET FORCE TASK 文は、ROWS_PER_TASK パラメータ に優先し、タスクが処理する行数に関係なく並列タスク数を指定します。詳細につ いては、9-23 ページ「SET FORCE TASKS」を参照してください。 各パラメータの詳しい内容とタスク数を計算する式の例については、『Query Performance Guide』を参照してください。 9-54 SQL Reference Guide ROWS_PER_SCAN_TASK ROWS_PER_SCAN_TASK ROWS_PER_SCAN_TASK パラメータは、1 つのスキャン プロセスを生成するため に必要なリザルト行の最小数を設定し、関係スキャンの並列プロセス数を制限しま す。この値は、インデックスを使用せずテーブル全体をスキャンするクエリに影響 します。 構文 次に SET ROWS_PER_SCAN_TASK 文の構文ダイアグラムを示します。 SET ROWS_PER_SCAN_TASK <rows_per_process> <rows_per_process> 1 ∼ 231 の整数を指定できます。この値を大きくするほどク エリ先のテーブルから行が返されるときの並列度が低くな り、値を小さくするほど並列度が高くなります。5,000 以上 に設定することを推奨します。 実際に使用されるプロセス数は、TOTALQUERYPROCS パラメータおよび QUERYPROCS パラメータの設定値によっても制限されます。 ROWS_PER_FETCH_TASK と ROWS_PER_JOIN_TASK ROWS_PER_FETCH_TASK パラメータと ROWS_PER_JOIN_TASK パラメータは、 STAR インデックスを使用するクエリを処理するための並列プロセスの数を決定し ます。インデックス スキャン処理と行データ処理の作業量はクエリによって異なる ため、フェーズごとに最少処理行数を設定できるようになっています。たとえば、 行のフェッチ後に大量の処理を必要とするクエリ ( GROUP BY、SUM、MIN など ) の場合は、フェッチ タスクに割り当てる行数を結合操作に割り当てる行数より少な くし、フェッチ操作に使用されるプロセス数が多くなるようにします。 SET 文 9-55 ROWS_PER_TARGETJOIN_TASK 構文 次に、SET ROWS_PER_JOIN_TASK 文と SET ROWS_PER_FETCH_TASK 文の構文ダ イアグラムを示します。 SET ROWS_PER_JOIN_TASK <rows_per_process> SET ROWS_PER_FETCH_TASK <rows_per_process> <rows_per_process> 1 ∼ 231 の整数を指定できます。この値を大きくするほど並列度 が低くなり、値を小さくするほど並列度が高くなります利用可 能なプロセス数が 2 未満の場合、クエリの並列処理は行われま せん。 並列処理を効果的にするには、ROWS_PER_JOIN_TASK と ROWS_PER_FETCH_TASK の値を 5,000 以上に設定します。 ROWS_PER_TARGETJOIN_TASK ROWS_PER_TARGETJOIN_TASK パラメータは ローカルでセグメント化されたイン デックスを使用する TARGETjoin 操作の実行に、どれだけの並列プロセス数を使用 するかということを決定します。 構文 次に SET ROWS_PER_TARGETJOIN_TASK 文の構文ダイアグラムを示します。 SET ROWS_PER_TARGETJOIN_TASK <rows_per_process> <rows_per_process> 1 ∼ 231 の整数を指定できます。この値を大きくするほど並列度 が低くなり、値を小さくするほど並列度が高くなります利用可 能なプロセス数が 2 未満の場合、クエリの並列処理は行われま せん。 9-56 SQL Reference Guide SET SAMPLE MARGIN 使用上の注意 このパラメータは、ローカル インデックスに対して TARGETjoin 操作を行う場合に だけ適用されます。非ローカル インデックスを使用する TARGETjoin の場合は、 TARGETjoin の上にある Exchange 演算子の次数は常に 1 であり、 FORCE_TARGETJOIN_TASK パラメータによる影響はありません。 SET SAMPLE MARGIN SET SAMPLE MARGIN 文は、ランダム サンプリングを実行しながら、行サンプル のサイズの分散度を監視するためのマージン パラメータを設定します。 構文 次に SET SAMPLE MARGIN 文の構文ダイアグラムを示します。 SET SAMPLE MARGIN <value> ON OFF <value> 正の整数を指定します。 ON マージン値は、rbw.config ファイルから取得されます。rbw.config ファイルに値が指定されていない場合、デフォルト値が使用されま す。デフォルト値は 10% です。 OFF マージンは設定されません。 使用上の注意 行サンプリングで返されるサンプルの実際のサイズは、要求したサイズと異なるこ とがあります。SET SAMPLE MARGIN パラメータを設定することにより、行サンプ ルのサイズの分散度を監視できます。実際のサイズが、指定したマージンの 100 分 位数の範囲外になるたびに、警告メッセージが表示されます。 SET 文 9-57 SET SAMPLE MARGIN たとえば、マージンを 10 に設定した場合、サンプル クエリで返される行の量が、 要求した量よりも 10% を上回る、または下回るたびに、メッセージが表示されま す。マージン設定にかかわらず、クエリは完全に実行されます。 SET STATS INFO が実装されている場合に限り、クエリ結果の後にサンプル マージ ン情報が表示されます。 このステートメントは、rbw.config ファイルの TUNE SAMPLE_MARGIN パラメー タとしても使用できます。 例 set stats info; set sample margin 1; select quantity, dollars from sales sample 5 where dollars < 4; ** STATISTICS ** (500) Compilation = 00:00:00.00 cp time, 00:00:00.00 time, Logical IO count=10 QUANTITY DOLLARS 1 3.75 1 3.75 1 3.75 1 3.75 1 2.00 1 3.75 1 3.75 1 3.75 1 3.00 1 3.50 1 3.75 1 3.75 ** STATISTICS ** (1457) EXCHANGE (ID: 1) Parallelism over 1 times High: 4 Low: 4 Average: 4. ** INFORMATION ** (1466) SAMPLE SCAN (ID: 2) Sample Seed: 965929035. Sample Size specified 5.00000000 percent (3497) rows, returned 5.00278806 percent (3499) rows. ** STATISTICS ** (500) Time = 00:00:00.18 cp time, 00:00:00.15 time, Logical IO count=323 ** INFORMATION ** (256) 12 rows returned. 9-58 SQL Reference Guide SET SAMPLE SEED SET SAMPLE SEED SET SAMPLE SEED 文は、特定のクエリから得たサンプルを再生するために、現行 のセッションでクエリを実行するごとにシード値 ( 生成された値の擬似乱数列の開 始値 ) を設定します。 構文 次に SET SAMPLE SEED 文の構文ダイアグラムを示します。 <value> SET SAMPLE SEED <value> 一意の正の整数を指定します。 使用上の注意 シード値を指定すると、同じデータに対する同じクエリ用に、再生可能なサンプル を維持できます。指定するシード値は重要な問題とはなりませんが、一意である必 要があります。たとえば、シード値を 2 または 2000 に設定できますが、どちらに設 定しても、そのシードに基づく同一のサンプリング クエリでは同じリザルト セッ トが返されます。 シード値は次の 2 つの場所で設定できます。 ■ ■ SET SAMPLE SEED 文 クエリの FROM 句 select * from sales sample 20 seed 100 重要 : このシード値は、正の整数である必要があります。シード値を 0 にするとエ ラーが返されます。 あるセッションのサンプル シード値をリセットするには、値を含まない SET SAMPLE SEED 文を使用します。デフォルトの動作が回復して、その後の各クエリ には個別のランダムなシード値が割り当てられます。 EXACT 以外のモードの基本テーブルのサンプリング クエリは再生可能です。その 他のすべてのサンプリング クエリは、クエリの並列処理が無効な場合にのみ再生可 能です。 SET 文 9-59 SET SAMPLE SEED 重要 : 並列処理を無効にすると、サンプリング クエリの性能が大幅に低下するこ とがあるので注意してください。 SET STATS INFO が実装されている場合に限り、クエリ結果の後にサンプル マージ ン情報が表示されます。 例 set stats info; set sample seed 356; select quantity, dollars from sales sample 2 where quantity > 48; ** STATISTICS ** (500) Compilation = 00:00:00.01 cp time, 00:00:00.01 time, Logical IO count=10 QUANTITY DOLLARS 49 392.00 49 330.75 49 392.00 49 355.25 49 392.00 ** STATISTICS ** (1457) EXCHANGE (ID: 1) Parallelism over 1 times High: 4 Low: 4 Average: 4. ** INFORMATION ** (1466) SAMPLE SCAN (ID: 2) Sample Seed: 356. Sample Margin: 10.000000 percent.Sample Size specified 2.00000000 percent (1399) rows, returned 2.00025736 percent (1399) rows. ** STATISTICS ** (500) Time = 00:00:00.18 cp time, 00:00:00.11 time, Logical IO count=323 ** INFORMATION ** (256) 5 rows returned. 9-60 SQL Reference Guide SET SEGMENTS SET SEGMENTS SET SEGMENTS 文は、テーブルまたはインデックスを削除したときに、そのセグ メントを削除するかどうかを指定します。この指定は、名前付きセグメントにのみ 適用します。デフォルト セグメントは、必ず削除されます。 構文 次に SET SEGMENTS 文の構文ダイアグラムを示します。 SET SEGMENTS DROP KEEP DROP テーブルまたはインデックスを削除した時に、そのセグメントを削 除します。この指定はデフォルトです。 KEEP 名前付きセグメントが添付されているテーブルまたはインデックス を削除しても、その名前付きセグメントを削除せず、再使用できる ようにします。そのセグメントに割り当てられた物理格納領域には 変化がありません。セグメントは、ALTER SEGMENT 文によってほ かのテーブルまたはインデックスに添付するできます。 使用上の注意 このステートメントは、名前付きセグメントを削除するデフォルトまたは rbw.config ファイルの OPTION SEGMENTS パラメータで指定したデフォルトよりも 優先されます。DROP TABLE 文または DROP INDEX 文ですべての設定を無効にで きます。 例 このステートメントは、現在のセッションでテーブルまたはインデックスを削除す ると、そのテーブルまたはインデックスのセグメントも削除するように設定しま す。セグメントは、ほかのテーブルまたはインデックスには再使用できません。 set segments drop SET 文 9-61 SET STATS SET STATS SET STATS 文は、現在のセッションの統計報告を切り換えます。 構文 次に SET STATS 文の構文ダイアグラムを示します。 SET STATS ON INFO OFF ON 各クエリについて、統計情報を返します。統計報告の内容は、ス テートメントおよびプラットフォームごとに異なります。 通常、サポートされる統計情報は次のとおりです。 ■ ■ ■ ■ 9-62 SQL Reference Guide リザルト セットの行数 処理時間 CPU の使用時間 論理および物理 I/O カウント SET STATS INFO INFO に設定すると、ON と同様の統計情報に加え、クエリのコン パイル時間、クエリ実行プランの選択、使用された STAR インデッ クス、クエリ リライトの有無、統計情報のサンプリングなど、ク エリの実行方法に関する情報が返されます。 これらの状況メッセージに表示される ID および演算子は、 EXPLAIN 文で抽出できるクエリのコンパイルと処理に関する情報に 対応しています。このステートメントの簡単な例については、この マニュアルの 8-189 ページを参照してください。EXPLAIN 出力の詳 細については、『Query Performance Guide』を参照してください。 SQL クエリには、任意の数のサブクエリを指定できますが、 INFO_MESSAGE_LIMIT パラメータのデフォルトは 1 つのクエリで 1,000 に設定されており、複雑なクエリの実行中に膨大な数のメッ セージが返されることを防ぎます。このパラメータの詳細について は、9-33 ページ「SET INFO MESSAGE LIMIT」を参照してください。 OFF 統計報告を返しません。デフォルトは OFF です。 例 現在のセッションで実行したクエリの統計情報を得るには、次のように入力しま す。 set stats on 結果の後に、標準出力フォーマットで統計値が表示されます。 select promo_desc, sum(dollars) from sales natural join promotion natural join period where year = 2000 group by promo_desc PROMO_DESC No promotion 769209.70 Temporary price reduction 14398.75 Aroma catalog coupon 8440.00 Monthly coffee special 8420.45 Store display 6921.50 ** STATISTICS ** (500) Time = 00:00:00.39 cp time, 00:00:00.39 time, Logical IO count=275, IO count=0 ** INFORMATION ** (256) 5 rows returned. SET 文 9-63 SET TARGETJOIN LOCAL PREDICATES 上記のクエリを実行する前に SET STATS INFO 文を実行すると、さらに詳細な統計 情報が表示されます。 ** STATISTICS ** (1457) EXCHANGE (ID: 5) Parallelism over 1 times High: 4 Low: 4 Average: 4. ** STATISTICS ** (1457) EXCHANGE (ID: 9) Parallelism over 1 times High: 1 Low: 1 Average: 1. ** STATISTICS ** (1458) CHOOSE PLAN (ID: 1) Choice: 1 was chosen 1 times. ** STATISTICS ** (1459) CHOOSE PLAN (ID: 1) STARjoin on 1 tables was done 1 times. ** STATISTICS ** (1460) CHOOSE PLAN (ID: 1) used Index SALES_STAR_IDX of Table SALES 1 times for STARjoin. ** STATISTICS ** (500) Time = 00:00:00.35 cp time, 00:00:00.36 time, Logical IO count=220, IO count=0 ** INFORMATION ** (256) 5 rows returned. SET TARGETJOIN LOCAL PREDICATES SET TARGETJOIN LOCAL PREDICATES コマンドは、TARGETjoin 操作の一部とし て、非結合述部の処理を有効または無効にします。このコマンドは現在のセッショ ンのみに適用されます。TARGETJOIN_LOCAL_PREDICATES を OPTION パラメー タとして rbw.config ファイルに入力すると、設定はすべてのデータベース サーバ セッションに適用されます。 ローカル述部とは、結合されているテーブルの非結合述部です。この述部は結合す る列以外の列に制約を与えます。TARGETJOIN_LOCAL_PREDICATES パラメータ が OFF に設定されている場合、すべての非結合述部は結合操作の後に処理されま す。このパラメータが ON に設定されている場合、次の条件で、非結合述部がクエ リ プランの結合段階にまでプッシュ ダウンされます。 ■ ■ クエリ プランに TARGETjoin 選択プランが含まれており、実行時にそのプ ランが選択される。 結合されているテーブルの 1 つで、非結合述部によってインデックス付け された列が制約を受ける。インデックスは単一列の TARGET インデックス または複数列の B-TREE インデックスのどちらかである必要があります が、ローカルでセグメント化されている必要はありません。 9-64 SQL Reference Guide SET TARGETJOIN LOCAL PREDICATES 構文 次に SET TARGETJOIN LOCAL PREDICATES 文の構文ダイアグラムを示します。 SET TARGETJOIN LOCAL PREDICATES OFF ON OFF、ON TARGETjoin 操作の一部としての非結合述部の処理を有効または無 効にします。 このパラメータの現在の設定値を確認するには、OFF と ON のどちらも指定せずに 次のステートメントを実行します。 set targetjoin local predicates; ** INFORMATION ** (1434) TARGETJOIN_LOCAL_PREDICATES is currently set to OFF. 使用上の注意 rbw.config 内で、この OPTION パラメータはデフォルトで OFF に設定されていま す。比較的制約の厳しい非結合述部を含む特定のクエリにのみ、このパラメータを ON に設定することをお勧めします。ローカル述部の制約が緩い ( 多くの列値が制 約の条件を満たす ) 場合は、このパラメータを ON に設定しないでください。この ような場合、述部をプッシュ ダウンすると、TARGETjoin 操作の性能が大きく低下 する可能性があります。rbw.config ファイルでパラメータを ON に設定する場合は、 必ずクエリの性能を監視してください。 非結合述部は、前述のプランで結合段階に入る前に、すでに解決されていることも あります。この場合、TARGETJOIN_LOCAL_PREDICATES パラメータによる影響 はありません。 例 プッシュ ダウンできる非結合述部の例としては、TARGETjoin クエリにおいて、 ファクト テーブルが ( 結合述部以外に ) インデックス付けされた列に対して追加制 約を持つ場合があげられます。次に、その例を示します。 SET 文 9-65 SET TARGETJOIN LOCAL PREDICATES LOCAL_TARGET_PREDICATES が ON に設定されていて、TARGET インデックスが Sales.Quantity 列にある場合、次のクエリは Quantity 述部を結合段階にプッシュ ダ ウンして、TARGETjoin プランを生成します。 RISQL> explain select date, sum(dollars) > from sales natural join period > where year = 2000 > and quantity >100 > group by date > order by date; EXPLANATION [ .... Choice: 3; Choose Plan [id : 2] { HASH AVL AGGR (ID: 18) Log Advisor Info: FALSE, Grouping: TRUE, Distinct: FALSE; -- EXCHANGE (ID: 19) Exchange type: Functional Join ---- HASH AVL AGGR (ID: 20) Log Advisor Info: FALSE, Grouping: TRUE, Distinct: FALSE; ------ FUNCTIONAL JOIN (ID: 21) 1 tables: PERIOD -------- BTREE 1-1 MATCH (ID: 22) Join type: InnerJoin; Index(s): [Table: PERIOD, Index: PERIOD_PK_IDX] ---------- FUNCTIONAL JOIN (ID: 23) 1 tables: SALES ------------ EXCHANGE (ID: 24) Exchange type: TARGETjoin -------------- TARGET JOIN (ID: 25) Table: SALES, Predicate: (SALES.QUANTITY) > (100) ; Num indexes: 2 Index(s): Index: PERKEY_TGT ,Index: QTY_TGT ---------------- FUNCTIONAL JOIN (ID: 26) 1 tables: PERIOD ------------------ VIRTAB SCAN (ID: 27) ... 9-66 SQL Reference Guide SET TEMPORARY SEGMENT STORAGE PATH 同じクエリが同じインデックスで実行されても、LOCAL_TARGET_PREDICATES が OFF に設定されている場合は、Sales に対するファンクショナル結合によって Quantity 列の述部が解決されます (TARGETjoin の上 )。 ... Choice: 3; Choose Plan [id : 2] { HASH AVL AGGR (ID: 18) Log Advisor Info: FALSE, Grouping: TRUE, Distinct: FALSE; -- EXCHANGE (ID: 19) Exchange type: Functional Join ---- HASH AVL AGGR (ID: 20) Log Advisor Info: FALSE, Grouping: TRUE, Distinct: FALSE; ------ FUNCTIONAL JOIN (ID: 21) 1 tables: PERIOD -------- BTREE 1-1 MATCH (ID: 22) Join type: InnerJoin; Index(s): [Table: PERIOD, Index: PERIOD_PK_IDX] ---------- FUNCTIONAL JOIN (ID: 23) 1 tables: SALES ------------ EXCHANGE (ID: 24) Exchange type: TARGETjoin -------------- TARGET JOIN (ID: 25) Table: SALES, Predicate: <none> ; Num indexes: 1 Index(s): Index: PERKEY_TGT ---------------- FUNCTIONAL JOIN (ID: 26) 1 tables: PERIOD ------------------ VIRTAB SCAN (ID: 27) ... EXPLAIN 出力のファンクショナル結合には、解決する述部の情報が含まれないこ とに注意してください。ただし、この場合は TARGETjoin 操作に次のように読み込 まれます。 Predicate: <none> SET TEMPORARY SEGMENT STORAGE PATH SET TEMPORARY (DATA|INDEX) SEGMENT STORAGE PATH 文は、デフォルトの テンポラリ データおよびテンポラリ インデックス セグメントを格納する物理格納 ユニット (PSU) のディレクトリを指定します。このディレクトリが指定されない場 合は、テンポラリ セグメントの PSU はデータベース ディレクトリに格納されます。 多数のテンポラリ テーブルや複数の大きなテンポラリ テーブルが同時に作成され た場合は、一時格納セグメントの格納領域が足りなくなることがあります。 このステートメントは、rbw.config ファイルの OPTION TEMPORARY_DATA_SEGMENT および OPTION TEMPORARY_INDEX_SEGMENT パラメータとしても使用できます。 SET 文 9-67 SET TRANSACTION ISOLATION LEVEL 構文 次に SET TEMPORARY (DATA|INDEX) SEGMENT STORAGE PATH 文の構文ダイア グラムを示します。 SET TEMPORARY DATA SEGMENT STORAGE PATH <dir_name> INDEX <dir_name> すべてのデフォルト行データ セグメントまたはすべてのデフォル ト インデックス セグメントを格納するディレクトリの絶対パス (<dir_name>) を指定します。デフォルト ディレクトリを指定しない と、すべてのデフォルト セグメントは rbw.config ファイルで指定さ れたデータベース ディレクトリに格納されます。 SET TRANSACTION ISOLATION LEVEL SET TRANSACTION ISOLATION LEVEL 文は、あるテーブルを読み取り、別のテー ブルを変更する SQL 文で、2 つのテーブル間にキー関係がない場合に使用された Read ロックのタイプを制御します。このステートメントはバージョン管理された データベースにだけ適用されます。 構文 次に SET TRANSACTION ISOLATION LEVEL 文の構文ダイアグラムを示します。 SET TRANSACTION ISOLATION LEVEL SERIALIZABLE REPEATABLE READ 9-68 SQL Reference Guide SET UNIFORM PROBABILITY FOR ADVISOR SERIALIZABLE あるテーブルを読み取って別のテーブルを更新するトラン ザクションに対して、RD (read data) ロックが使用されるよ うにします。この RD ロックは、別のバージョニング トラ ンザクションが読み取り中のテーブルに対して、同時に バージョニング更新を実行することを禁止します。後から 開始されたトランザクションは、先行するトランザクショ ンが終了するまで待機してから、テーブルを読み取りま す。このロックは、制約が最も大きなモードです。 REPEATABLE READ RO (read only) ロックが使用されるようにします。RO ロッ クを使用すると、読み取り操作とテーブルに対するバー ジョニングを同時に実行できます。このロックは、トラン ザクションが、現在更新中のテーブルの古いバージョンを 読み取り、別のテーブルを変更すること ( たとえば、 INSERT INTO...SELECT 文 ) を可能にします。このロック は、SERIALIZABLE よりも制約が弱いモードです。 このステートメントは、rbw.config ファイルの OPTION TRANSACTION_ISOLATION_LEVEL パラメータとしても 使用できます。このパラメータの詳細と、2 つの設定の違 いを示す例については、 『Administrator's Guide』を参照して ください。 SET UNIFORM PROBABILITY FOR ADVISOR SET UNIFORM PROBABILITY FOR ADVISOR 文は RBW_PRECOMPVIEW_UTILIZATION および RBW_PRECOMPVIEW_ CANDIDATES Advisor システム テーブルを検索するときに、各ビューの参照回数を 計算するためにログ ファイルをスキャンするかどうかを指定します。このステート メントを ON に設定すると、基本テーブルのすべてのビューが同じ回数だけ参照さ れたとみなされます。デフォルトは OFF です。 このステートメントは、rbw.config ファイルの OPTION UNIFORM_PROBABILITY_ FOR_ADVISOR パラメータとしても使用できます。 SET 文 9-69 SET USE INVALID PRECOMPUTED VIEWS 構文 次に SET UNIFORM PROBABILITY FOR ADVISOR 文の構文ダイアグラムを示しま す。 SET UNIFORM PROBABILITY FOR ADVISOR OFF ON Advisor および事前計算ビューの詳細については、 『IBM Red Brick Vista User’s Guide』 を参照してください。 SET USE INVALID PRECOMPUTED VIEWS SET USE INVALID PRECOMPUTED VIEWS ON 文は、事前計算ビューの妥当性にか かわらず、すべての事前計算ビューをクエリ書き換えに使用できるようにします。 このステートメントを OFF に設定した場合、ビューがクエリ書き換えに使用される ようにしたり、RBW_PRECOMPVIEW_UTILIZATION テーブルの Advisor クエリ で指定されるようにするには、ビューを有効とマークする必要があります。 構文 次に SET USE INVALID PRECOMPUTED VIEWS 文の構文ダイアグラムを示します。 SET USE INVALID PRECOMPUTED VIEWS OFF ON このステートメントは、OPTION USE_ INVALID_PRECOMPUTED _VIEWS パラメー タとしても存在します。 Advisor および事前計算ビューの詳細については、 『IBM Red Brick Vista User’s Guide』 を参照してください。 9-70 SQL Reference Guide SET USE LATEST REVISION SET USE LATEST REVISION SET USE LATEST REVISION 文は、クエリ リビジョンが設定された場合に、RISQL セッションでは現在のリビジョンか、あるいはデフォルトのクエリ リビジョンのど ちらを使用するか設定します。 ALTER DATABASE FREEZE QUERY REVISION 文の実行によるクエリ リビジョンが 設定されていない場合、あるいは ALTER DATABASE UNFREEZE QUERY REVISION 文で、無更新に設定されている場合、SET USE LATEST REVISION 文で選択された 値にかかわらず、最新のクエリが使用されます。 構文 次に SET USE LATEST REVISION 文の構文ダイアグラムを示します。 SET USE LATEST REVISION OFF ON バージョン化されたデータベースの詳細については、 『Administrator's Guide』を参照 してください。 SET 文 9-71 SET VERSIONING SET VERSIONING SET VERSIONING 文は、データベース トランザクションをブロッキング トランザ クションとして実行するかバージョニング トランザクションとして実行するかを指 定します。 構文 次に SET VERSIONING 文の構文ダイアグラムを示します。 SET VERSIONING OFF ON OFF ステートメントがブロッキング トランザクションとして実行される よう指定します。 ON ステートメントがバージョニング トランザクションとして実行され るよう指定します。 接続中のデータベースにバージョン ログが存在しない場合に SET VERSIONING ON 文を実行すると、データベースを更新するトランザクション (INSERT、UPDATE、 DELETE 文 ) はエラーにより失敗します。 接続中のデータベースにバージョン ログが存在する場合も、(ALTER DATABASE STOP VERSIONING を使って ) バージョニングが停止中であれば、バージョニング トランザクションとして実行されるデータベースを更新するトランザクション (INSERT、UPDATE、DELETE 文 ) はエラーにより失敗します。 SET VERSIONING 文は、テンポラリ テーブルに対する DML 操作に影響を与えませ ん。これらの操作は、常にバージョン管理されない ( ブロッキング ) トランザク ションとして実行されます。 このステートメントは、rbw.config ファイルの OPTION VERSIONING パラメータと しても使用できます。これらのステートメントの詳細については、『Administrator's Guide』を参照してください。 9-72 SQL Reference Guide 付録 構文一覧 付録 A では、第 8 章「SQL 文と RISQL 拡張機能」で説明した SQL コ マンドおよび RISQL 拡張機能と各構文の一覧を示します。構文の一覧 は、クイック リファレンスとしてお使いください。 ここではコマンドを次の 4 種類に分類しています。 ■ ■ ■ ■ データベース制御コマンド データ定義コマンド データ操作コマンド その他の一般コマンド データベース制御コマンド ここでは次の操作を行うコマンドの一覧を示します。 ■ ■ ■ ■ ■ ■ ログ記録とアカウンティングの制御 ユーザ操作の制御 ユーザ優先順位の制御 データベース ユーザとパスワードの作成 データベース権限の付与と取消 データベース オブジェクトに対する特権の付与と取消 ALTER DATABASE ALTER DATABASE <version_log_specification> ALTER DATABASE DROP VERSION LOG START VERSIONING STOP VERSIONING START CLEANING STOP CLEANING CLEAN VERSION LOG REMOVE DAMAGED SEGMENTS FREEZE QUERY REVISION UNFREEZE QUERY REVISION TERMINATE DATABASE <database_logical_name> CREATE VERSION LOG IN <segment_name> DROP BACKUP DATA A-2 SQL Reference Guide ALTER SYSTEM ALTER SYSTEM ALTER SYSTEM RESET STATISTICS DATABASE ALL <logical_db_name> QUIESCE DATABASE ALL <logical_db_name> RESUME DATABASE START ALL <logical_db_name> ADVISOR_LOGGING STOP SWITCH ADVISOR_LOG FILE TERMINATE ADMIN DAEMON ADMINISTRATION <alter_user_activity> <alter_user_priority> <alter_logging> <alter_accounting> <alter_performance_monitor> <alter_clear_performance_stats> 構文一覧 A-3 ALTER SYSTEM alter_user_activity <db_username> CLOSE USER SESSION CANCEL USER COMMAND DATABASE ALL ALL <logical_db_name> ALL PROCESS <pid> alter_user_priority CHANGE USER <db_username> ALL SET PRIORITY <integer> ON DATABASE ALL <logical_db_name> PROCESS ALL <pid> A-4 SQL Reference Guide ALTER SYSTEM alter_logging START LOGGING STOP LOGGING SWITCH LOGGING FILE TERMINATE LOGGING DAEMON CHANGE LOGGING LEVEL AUDIT ERROR OPERATIONAL ROUTINE ALERT URGENT SCHEMA USAGE alter_accounting START ACCOUNTING STOP ACCOUNTING SWITCH ACCOUNTING FILE CHANGE ACCOUNTING LEVEL WORKLOAD JOB alter_performance_monitor START PERFORMANCE MONITOR SESSION <session_id> STOP DATABASE <logical_db_name> 構文一覧 A-5 ALTER USER alter_clear_performance_statistics CLEAR PERFORMANCE STATISTICS START_TIMESTAMP <timestamp> USERNAME <user_name> DATABASE <logical_db_name> ALTER USER ALTER USER <db_username> SET PRIORITY COMMENT <integer> '<character_string>' NULL GRANT (権限とロール) , GRANT DBA RESOURCE <authorization> <role_name> A-6 SQL Reference Guide , TO <db_username> <role_name> GRANT CONNECT GRANT CONNECT GRANT CONNECT , , DBA RESOURCE <authorization> <role_name> TO <db_username> WITH <password> '<password>' PRIORITY <integer> GRANT (特権) , GRANT ON ALL <table_name> PRIVILEGES DELETE INSERT SELECT UPDATE , TO <db_username> <role_name> PUBLIC 構文一覧 A-7 REVOKE ( 権限とロール ) REVOKE ( 権限とロール ) , , REVOKE FROM DBA <db_username> <role_name> RESOURCE <authorization> <role_name> REVOKE CONNECT FROM REVOKE CONNECT <db_username> REVOKE (特権) , REVOKE ON ALL PRIVILEGES DELETE INSERT SELECT UPDATE , FROM <db_username> <role_name> PUBLIC A-8 SQL Reference Guide <table_name> データ定義コマンド データ定義コマンド 次のコマンドは、インデックス、マクロ、ロール、セグメント、シノニム、テーブ ル、ビューの変更、作成、または削除を実行します。 ALTER INDEX ALTER INDEX <index_name> <integer> CHANGE FILLFACTOR SMALL CHANGE DOMAIN SIZE MEDIUM LARGE COMMENT '<character_string>' NULL ALTER MACRO MACRO ALTER <macro_name> TEMPORARY PUBLIC COMMENT '<character_string>' NULL ALTER ROLE ALTER ROLE <role_name> COMMENT '<character_string>' NULL 構文一覧 A-9 ALTER SEGMENT - ATTACH 句 ALTER SEGMENT - ATTACH 句 <segment_name> ALTER SEGMENT ATTACH TO RANGE TABLE <table_name> INDEX <index_name> ( <literal:literal> ) INVALIDATE ( <rownum:rownum> ) ) : <segname> ( <segname> <rownum> LIKE SEGMENT <rownum> <referencing_table_segname> RANGE 指定では、コロンの左側に MIN、右側に MAX と入力して、それぞれ最小 値と最大値を指定することもできます。 A-10 SQL Reference Guide ALTER SEGMENT - その他の句 ALTER SEGMENT - その他の句 <segment_name> ALTER SEGMENT OF TABLE <table_name> INDEX <index_name> <detach_clear_offline_online_specification> VERIFY FORCE INTACT <segmenting _column> SEGMENT BY RANGE ( <rangeval:rangeval> ) MOVE INVALIDATE ON OPTICAL OFF RENAME <new_seg_name> <psu_sequence_id> CHANGE MAXSIZE CHANGE EXTENDSIZE MIGRATE TO <max_size> TO <psu_sequence_id> <psu_sequence_id> CHANGE PATH TO TO <increment> '<new_filename>' '<dir_path>' DROPPING PSUS KEEPING COMMENT '<character_string>' NULL <add_storage_specification> RELEASE STORAGE DROP LAST STORAGE 構文一覧 A-11 ALTER SEGMENT - その他の句 detach_clear_offline_online_specification DETACH INVALIDATE <override_fullindexcheck_specification> OFFLINE OVERRIDE REFCHECK ONLINE CLEAR <override_fullindexcheck_specification> OVERRIDE REFCHECK override_fullindexcheck_specification OVERRIDE FULLINDEXCHECK ON SEGMENTS ( <index_segment> , add_storage specification ADD STORAGE INITSIZE A-12 SQL Reference Guide '<filename>' <init_size> MAXSIZE EXTENDSIZE <max_size> <increment> ) ALTER SYNONYM ALTER SYNONYM ALTER SYNONYM <synonym_name> <col_name> ALTER COLUMN COMMENT '<character_string>' NULL 構文一覧 A-13 ALTER TABLE ALTER TABLE , ALTER TABLE <table_name> <add_column> <drop_column> IN_PLACE <segment_name> IN , IN ( <segment_name> ) <alter_column> RESUME RESET NULL CHANGE MAXSEGMENTS TO <maxsegments> CHANGE MAXROWS PER SEGMENT TO NULL <maxrows> SET PRECOMPUTED VIEWS valid invalid COMMENT NULL '<character_string>' <add_constraint> <drop_constraint> <alter_constraint> RENAME AS A-14 SQL Reference Guide <new_name> ALTER TABLE add_column ADD <column_name> <datatype> NOT NULL COLUMN UNIQUE <literal> DEFAULT CURRENT_DATE WITH FILLFACTOR N CURRENT_TIME CURRENT_TIMESTAMP CURRENT_USER NULL drop_column DROP <column_name> RESTRICT COLUMN 構文一覧 A-15 ALTER TABLE alter_column <col_name> ALTER COLUMN RENAME AS <new_col_name> ON DELETE NO ACTION CASCADE SET DEFAULT <default_definition> DROP DEFAULT CHANGE FILLFACTOR n SET SERIAL START ( <value> ) SET SERIAL STEP ( <value> ) COMMENT NULL'<character_string>' NULL NOT NULL add_constraint , ADD FOREIGN KEY CONSTRAINT REFERENCES ( <column_name> <constraint_name> <table_name> , ( <primary_key_column> INITIALLY ON DELETE CASCADE NO ACTION A-16 SQL Reference Guide IMMEDIATE DEFERRED ) ) ALTER VIEW drop_constraint <constraint_name> DROP CONSTRAINT alter_constraint <constraint_name> ALTER CONSTRAINT REFERENCES <referenced_table_name> ON DELETE CASCADE NO ACTION ALTER VIEW ALTER VIEW <view_name> COMMENT ALTER COLUMN <col_name> set VALID INVALID SET MAINTENANCE ON REBUILD OFF 構文一覧 A-17 CREATE HIERARCHY CREATE HIERARCHY CREATE HIERARCHY <hierarchy_name> ( , <from_to_definition> ) <constraint_name> ON from_to_definition 句 FROM <table_name (column_name)> TO <table_name (column_name)> CREATE INDEX , INDEX CREATE STAR TARGET A-18 SQL Reference Guide <index_specifier> ON ERROR CONTINUE ABORT CREATE INDEX index_specifier , <index_name> ON <table_name> ( ) <column_name> <fkey_constraint_name> <segment_specification> IN <n> WITH FILLFACTOR DOMAIN SMALL SIZE MEDIUM LARGE segment_specification <segment_name> IN , ( <segment_name> SEGMENT LIKE DATA ) SEGMENT LOCAL SEGMENT LIKE REFERENCED TABLE <segment_range_spec> 構文一覧 A-19 CREATE INDEX segment_range_spec - B-TREE インデックスと TARGET イン デックス ( SEGMENT BY VALUES OF ( RANGES , MIN :<literal> ) <segmenting_column> <literal> :MAX <literal:literal> , MIN :MAX segment_range_spec - STAR インデックス ( SEGMENT BY VALUES OF RANGES ( <segmenting_column> ) MIN :MAX MIN :<rangeval> , <rangeval> :MAX <rangeval:rangeval> A-20 ) SQL Reference Guide , CREATE MACRO CREATE MACRO <macro_name> MACRO CREATE TEMPORARY PUBLIC , ( <parameter> <cat_val> CATEGORY ) () AS COMMENT <definition> '<character_string>' CREATE ROLE CREATE ROLE <role_name> , FOR <db_username> <role_name> CREATE SEGMENT , CREATE SEGMENT <segment_name> <storage_specification> 構文一覧 A-21 CREATE SYNONYM <storage_specification> '<filename>' STORAGE INITSIZE <init_size> MAXSIZE <max_size> EXTENDSIZE <increment> CREATE SYNONYM <synonym_name> CREATE SYNONYM FOR <table_name> CREATE TABLE CREATE TABLE ( <table_name> <column_definitions> ) <segment_specification> MAXROWS PER SEGMENT MAXSEGMENTS A-22 SQL Reference Guide <maxsegments> <maxrows> CREATE TABLE column_definitions , <column_name> <datatype> DEFAULT NOT NULL UNIQUE <literal> <function> NULL , <primary_key_reference> , <foreign_key_reference> primary_key_reference , PRIMARY KEY CONSTRAINT <column_name> ( ) <constraint_name> foreign_key_reference , FOREIGN KEY CONSTRAINT <constraint_name> REFERENCES <referenced_table> ( ) <column_name> , ( ON DELETE <primary_key_column> ) CASCADE NO ACTION 構文一覧 A-23 CREATE TABLE segment_specification DATA IN <segment_name> <segment_range_spec> SEGMENT BY HASH , ( ) <segment_name> <segment_range_spec> SEGMENT BY HASH <segment_name> PRIMARY INDEX IN <segment_range_spec> SEGMENT LIKE DATA , ( <segment_name> ) <segment_range_spec> SEGMENT LIKE DATA segment_range_spec ( SEGMENT BY VALUES OF RANGES ( MIN :<literal> <segmenting_column> , <literal> :MAX <literal : literal> MIN:MAX A-24 SQL Reference Guide ) , ) CREATE TEMPORARY TABLE CREATE TEMPORARY TABLE CREATE TEMPORARY TABLE <column_definitions> ( <table_name> ) CREATE VIEW CREATE VIEW <view_name> , ( AS <column_name> ) <query_expression> <precomputed_query_expression> <using_clause> DROP HIERARCHY DROP HIERARCHY <hierarchy_name> DROP INDEX DROP INDEX <index_name> DROPPING SEGMENTS KEEPING SEGMENTS 構文一覧 A-25 DROP MACRO DROP MACRO MACRO DROP <macro_name> TEMPORARY PUBLIC DROP ROLE DROP ROLE <role_name> DROP SEGMENT DROP SEGMENT <segment_name> DROP SYNONYM DROP SYNONYM <synonym_name> DROP TABLE <table_name> DROP TABLE <creator> DROPPING SEGMENTS KEEPING SEGMENTS A-26 SQL Reference Guide DROP VIEW DROP VIEW <view_name> DROP VIEW データ操作コマンド 次にデータベース テーブルの行データを修正するコマンドを示します。 DELETE DELETE FROM <table_name> , USING WHERE <search_condition> <table_reference> OVERRIDE REFCHECK 構文一覧 A-27 INSERT INSERT <table_name> INSERT INTO , <column_name> ( , VALUES <literal> ( ) NULL DEFAULT <select_statement> DEFAULT VALUES LOCK ( テーブルのロック ) LOCK <table_name> FOR DELETE LOCK DATABASE LOCK DATABASE READ WRITE A-28 SQL Reference Guide ) SELECT SELECT <query_expression> <suppress_by_clause> <order_by_clause> UNLOCK ( テーブルのロック解除 ) UNLOCK <table_name> UNLOCK DATABASE UNLOCK DATABASE UPDATE , UPDATE <table_name> SET <column_name> = <expression> NULL , FROM WHERE <search_condition> <table_reference> 構文一覧 A-29 その他の一般コマンド その他の一般コマンド EXPAND <SQL_statement> EXPAND ( <width> ) EXPLAIN <SQL_statement> EXPLAIN EXPORT <output_file_specification> EXPORT TO DDlFILE <file_specification> TMUFILE ( FORMAT EXTERNAL EXTERNAL Variable INTERNAL BINARY DELIMITED XML A-30 SQL Reference Guide <file_specification> <select_statement> ) 付録 予約語 SQL および RISQL の予約語は、データベース名や識別子としては使用 できません。この付録にリストされている語は予約語です。 次のフォーマットは、データベース オブジェクト名に使用しないでく ださい。 rbw_object_name dst_object_name rbw_ プレフィクスおよび dst _ プレフィクスは、IBM Red Brick Warehouse システムのテーブル、動的統計テーブル (DST)、およびイ ンデックスや列などのオブジェクトの命名に使用します。 A ADD AS ALL ASC ALTER ATTACH AND AUTHORIZATION ANY AVG B BACKUP BREAK BETWEEN BY BIT C CASE CONSTRAINT CHANGE CONSTRAINTS CHANGEPATH COUNT CHAR CREATE CHARACTER CROSS CHECK CUME CLOSE CURRENT COALESCE CURRENT_DATE COBOL CURRENT_TIME COLUMN CURRENT_TIMESTAMP COMMIT CURRENT_USER CONNECT CURSOR D DATA DELETE DATABASE DESC DBA DESCRIBE DEC DISTINCT DECIMAL DISTRIBUTED DECLARE DOUBLE DEFAULT DROP DEFERRED B-2 SQL Reference Guide E ELSE EXCLUSIVE END EXISTS ESCAPE EXPAND EXCEPT EXPLAIN EXCL EXTRACT F FETCH FOREIGN FILENAME FORTRAN FIRST FROM FLOAT FULL FOR FULLINDEXCHECK G GRANT GROUP H HAVING 予約語 B-3 I IMMEDIATE INNER IN INSERT INCL INT INCLUSIVE INTEGER INDEX INTERSECT INDICATOR INTO INITIALLY IS J JOIN K KEY L LANGUAGE LIKE LAST LOCK LEFT M MACRO MODEL MAPPING MODULE MAX MOVINGAVG MIN MOVINGSUM B-4 SQL Reference Guide N NATURAL NULL NO NULLIF NOT NUMERIC NTILE O OF OR OFF ORDER ON OUTER OPEN OVERRIDE OPTION P PASCAL PREPARE PERMANENT PRIMARY PL1 PRIVILEGES POSITION PROCEDURE POSITIONB PUBLIC PRECISION Q QUIT 予約語 B-5 R RANK RESOURCE RATIOTOREPORT RESUME REAL REVOKE RECOVER RIGHT REFERENCES ROLE RESET ROLLBACK S SCHEMA SQLCODE SEGMENT STAR SELECT SUM SERIAL SUMMING SET SUPPRESS SMALLINT SYNONYM SOME T TABLE THEN TEMPORARY TINYINT TERTILE TO TEXTSIZE TO_CHAR B-6 SQL Reference Guide U UNION UPDATE UNIQUE USER UNLOCK USING V VALUES VARYING VARCHAR VIEW W WAIT WITH WHEN WORK WHERE 予約語 B-7 付録 日付時間フォーマット IBM Red Brick Warehouse は、ANSI SQL-92 に定義されていない日付時 間フォーマットを使用するツールのために、次の非標準の日付時間 フォーマットをサポートします。 ■ ■ ■ ■ 日付フォーマット : 数字で表した月と、月名の両方が使用で きます。数字で表す場合は、DATEFORMAT 変数を使用する 必要があります。 時間フォーマット タイムスタンプ フォーマット : 日付フォーマットと時間 フォーマットで構成します。 ANSI SQL-92 EXTRACT 関数と類似の DATEPART スカラ関数 上記のフォーマットのサポートは、SQL サーバの日付フォーマットか ら ANSI SQL-92 標準型式への移行を目的としています。新たに開発 するデータベースやツールでは、ANSI SQL-92 に定義されたフォー マットを使用してください。 日付時間リテラルに DATE、TIME、TIMESTAMP のいずれかのキー ワードを指定しないと、非標準の日付時間フォーマットの使用を暗黙 的に指定したことになります。 付録 C では、次の項目について説明します。 ■ ■ ■ ■ 日付リテラル 時間リテラル タイムスタンプ リテラル 日付フィールドと DATEPART 関数 日付リテラル 日付リテラル 非標準の日付フォーマットでは、数字で表した月と月名の両方が使用でき、年は 2 桁か 4 桁で表すことができます。月を数字で表す場合は、あいまいさ ( たとえば、 7/4/99 は、1999 年 7 月 4 日なのか、1999 年 4 月 7 日なのかなど ) をなくすために、 DATEFORMAT 変数を設定して、日付エレメントの順序を定義しておく必要があり ます。 サーバ ロケールの言語が English、テリトリが United States でない場合は、指定した 言語および地域に対応するフォーマット規則が使用され、SET DATEFORMAT 文は 無視されます。ANSI SQL-92 に準拠しないリテラルは、アメリカ英語以外のロケー ルではサポートされません。 DATEFORMAT の設定 次に DATEFORMAT 変数の構文ダイアグラムを示します。 SET DATEFORMAT mdy myd ymd ydm dmy dym 使用上の注意 ■ ■ ■ DATEFORMAT 変数は、SQL 文または RISQL 文と同じように入力してくだ さい。 y は年、m は月、d は日を表します。 デフォルトは mdy です。つまり、月、日、年の順になります。 DATEFORMAT を使用するのは、月が数字で表され、DATE キーワードが 指定されていない場合だけです。 SET DATEFORMAT 文を使って日付の表示を変更することはできません。SET DATEFORMAT 文の目的は、ANSI SQL-92 に準拠しない日付フォーマットをサーバ の型式と対応付けることです。 C-2 SQL Reference Guide 数字で表した月の使用 数字で表した月の使用 次に、月を数字で表した日付リテラルの構文ダイアグラムを示します。 Date format set to: ' ymd ' <month>/<day> <year1>/ <year2>/ <year1>/ ydm <day>/<month> <year2>/ <month>/<day>/ mdy <year1>/ <year2> <month> myd <year1>/ <day> <year2>/ dmy <day>/<month> dym <day>/ <year1>/ <year2>/ <year1>/ <month> <year2>/ 使用上の注意 ■ ■ ■ 日付フォーマットは、DATEFORMAT 変数によって決定されます。 日付エレメントの区切り記号には、上図に示すスラッシュ (/)、ハイフン ()、ピリオド (.) を使用できます。日付エレメントと区切り記号との間には、 空白を入れてはいけません。 <year1>、<year2>、<month>、<day> は、次を有効範囲とする符号なし整数 です。 <year1> 1 ∼ 9999 <year2> 1 ∼ 99 00 ∼ 49 は 2000 ∼ 2049 年を表す 50 ∼ 99 は 1950 ∼ 1999 年を表す <month> 1 ∼ 12 <day> 1 ∼ 31 日付時間フォーマット C-3 月名の使用 例 次に月を数字で表した有効な日付リテラルの例を示します。いずれの場合も、ス ラッシュ (/)、ハイフン (-) またはピリオド (.) を区切り記号として使用できます。 DATEFORMAT の値 年が 4 桁の場合 年が 2 桁の場合 ymd ydm mdy myd dmy dym '1999/4/15' '1999/15/4' '4/15/1999' '4/1999/15' '15/4/1999' '15/1999/4' '99/4/15' '99/15/4' '4/15/99' '4/99/15' '15/4/99' '15/99/4' 次のクエリは、DATE 列の制約に日付リテラルを使用していますが、DATEFORMAT を ymd に設定しないと失敗します。 select * from period where date_col = '1999-12-25' DATEFORMAT を dmy に設定すれば、次のクエリは有効です。 select * from period where date_col = '25-12-1999' DATEFORMAT のデフォルト値は mdy なので、DATEFORMAT を明示的に設定しな くても次のクエリは有効になります。 select * from period where date_col = '12-25-1999' 月名の使用 次に、月名を使った日付リテラルの構文ダイアグラムを示します。 C-4 SQL Reference Guide 月名の使用 ' <year1> ' <month> <day> <year1> <month> <day> <year1> <month> <day>, <month> <year1> <month> <day> <day> <year2> <day>, <month> <day> <month>, <day> <month> <year1> <year2> <month>, <year1> <month> <year2> <month> <day> <day> 日付時間フォーマット C-5 月名の使用 使用上の注意 ■ ■ ■ ■ 各エレメント (year1、year2、month、day) と後続のエレメントは、1 つ以上 の空白で区切ります。 カンマを使用する場合は、エレメントとカンマの間に空白を入れてはいけ ません。カンマの後には、1 つ以上の空白を挿入してください。 <year1>、<year2>、<day> は、次を有効範囲とする符号なし整数です。 <year1> 1 ∼ 9999 <year2> 0 ∼ 99 00 ∼ 49 は 2000 ∼ 2049 年を表す 50 ∼ 99 は 1950 ∼ 1999 年を表す <day> 1 ∼ 31 ( デフォルトは 1) month は、月名のつづりをすべて指定するか、先頭の 3 文字を指定してく ださい。たとえば、January または Jan と表します。大文字と小文字の区別 はありません。 例 次に月名を使用した有効な日付の例を示します。April は Apr に置き換えることがで きます。 日あり、 年が 4 桁の場合 日あり、 年が 2 桁の場合 日なし、 年が 4 桁の場合 '1988 April 15' '1988 15 April' 'April 15 1988' 'April 15, 1988' 'April 1988 15' '15 April 1988' '15 April, 1988 'April 15 1988' 'April 15, 88' '15 April 88' '15 April, 88' '15 88 April' '1988 April' 'April, 1988' 'April 1988' C-6 SQL Reference Guide 時間リテラル 時間リテラル 次に時間の値の構文ダイアグラムを示します。 ' ' <hour> AM PM :<minute> :<second> . : <fraction> <all_numeric> 使用上の注意 ■ ■ ■ ■ AM/PM 指定子の前を除き、時間エレメントの間に空白を入れることはで きません。 <hour>、<minute>、<second>、<fraction> は、次を有効範囲とする符号なし 整数です。 <hour> 0 ∼ 23; AM/PM 指定子を使用する場合は 0 ∼ 12 <minute> 0 ∼ 59 <second> 0 ∼ 59 <fraction> 0 ∼ 999999 AM/PM 指定子は、大文字と小文字を区別しません。 秒未満の数値の前に小数点 (.) を入力した場合は、秒を単位とする 10 進小 数と見なされます。コロン (:) を入力した場合は、ミリ秒と見なされます。 例 次に有効な時間の値の例を示します。 '13:45:10:33 ' '13:45:10.33 ' '3AM ' '3PM ' '03pm ' (33 ミリ秒 ) (33/100 秒 ) 日付時間フォーマット C-7 タイムスタンプ リテラル タイムスタンプ リテラル 次にタイムスタンプ値の構文ダイアグラムを示します。 ' <date _value> ‘‘ <time _value> <time _value> ‘‘ <date _value> ' <all_numeric> 使用上の注意 ■ ■ ■ ■ <date_value> と <time_value> には、それぞれ日付フォーマットと時間 フォーマットに定義された任意の文字列を使用できます。 <date_value> と <time_value> の間には空白を 1 つ挿入します。 日付の値は、4 桁、6 桁、または 8 桁の数値フォーマットすべてで指定でき ますが、タイムスタンプ エレメントはサポートされません。 4 桁 : 1 月 1 日。4 桁は年と解釈されます。 6 桁 : 19YYMMDD、6 桁は YYMMDD と解釈されます。 8 桁 : YYYYMMDD。 日付と時間を指定しないと、デフォルトが使用されます。<date _value> の デフォルトは 1900 年 1 月 1 日、<time_value> のデフォルトは午前 0 時です。 例 次に有効なタイムスタンプの例を示します。 '1988 April 15 3:45am' '4/15/88 13:45:10:33' '13:45:10:33 4-15-88' '13:45:10 April 1988' 'April 15, 1988 3AM' 次に数字だけを使用した有効なタイムスタンプの例を示します。 '1234'(Jan 1, 1234) '780123'(Jan 23, 1978) '12340506'(May 6, 1234) C-8 SQL Reference Guide 日付フィールドと DATEPART 関数 日付フィールドと DATEPART 関数 スカラ関数の中には、日付時間データ型 (dateparts) を構成する個別のエレメントに 対して動作するものがあります。各エレメントの定義は、5-58 ページ「日付時間ス カラ関数」で説明されています。 DATEPART 関数は、ANSI SQL-92 の EXTRACT 関数と類似のスカラ関数であり、指 定された datepart エレメントを datetime の値から抽出します。次に DATEPART 関数 を使った日付時間式の構文ダイアグラムを示します。 DATEPART ( <datepart>, <datetime_expression> ) <datepart> <datepart> 引数は、日付エレメントの抽出元となる日付 フィールドを指定します。 <datetime_expression> DATE、TIME、TIMESTAMP のいずれかのデータ型である 必要があります。 結果 日付フィールドが <datetime_expression> に指定されていなければ、時間と日付には それぞれのデフォルトである午前 0 時と、1900 Jan 1 が入ります。各デフォル トは、文字列としても返されます。 <datepart> が週の場合は、指定した年の 1 月 1 日が何曜日かを考慮して関数が実行さ れます。たとえば、1 月 1 日が土曜の場合、1 月 2 日は第 2 週になります。 例 select datepart (year, date_col) from table_1 日付時間フォーマット C-9 日付フィールドと DATEPART 関数 datepart 関数は、表示する日付をデフォルトの YYYY/MM/DD フォーマット以外に 変更するのに使用することができます。 select date, concat (substr (string (datepart(month,date_col)), 10, 2), `/’, substr (string (datepart (day,date_col)), 10, 2), `/’, substr (string (datepart (year,date_col)), 10, 2)) as new_date from period; DATE NEW_DATE 1998-01-01 1/1/98 1998-01-02 1/2/98 1998-01-03 1/3/98 "/" は、必要に応じて省略することも、"-" に変更することもできます。 C-10 SQL Reference Guide 特記事項 特記事項 本書に記載されている製品、サービス、または機能は、国によっては 提供されない場合があります。各地域で現在利用可能な IBM 製品およ びサービスについては、該当地域の担当者にお問い合わせください。 IBM 製品、プログラム、またはサービスのすべての記述箇所は、対象 の IBM 製品、プログラム、またはサービスのみが使用されることを明 示的または暗示的に示すものではありません。IBM の知的所有権を侵 害しない、同等の機能を有する製品、プログラム、またはサービスを 使用できる場合があります。ただし、IBM 以外の製品、プログラム、 またはサービスの操作に関する評価および確認は、お客様の責任の元 に行ってください。 本書に記載の各事項は、特許または特許出願により保護されている場 合があります。本書の提供は、これらの特許の使用許諾をお客様に付 与するものではありません。使用許諾に関する質問は、下記に書面に てお問い合わせください。 IBM Director of Licensing IBM Corporation North Castle Drive Armonk, NY 10504-1785 U.S.A. ダブル バイト (DBCS) に関する使用許諾については、各国 IBM の知的 財産部門にお問い合わせいただくか、下記まで書面にてお問い合わせ をご送付ください。 IBM World Trade Asia Corporation Licensing 〒 106 - 0032 東京都港区六本木 3 丁目 2 - 31 以下の段落の記述は、英国、または記述の内容が地域法に合致しない国には適用さ れません。International Business Machines Corporation は、本書を「現状のまま」提供 し、明示的または黙示的を問わずいかなる保証の責任も負わないものとし、第三者 の権利侵害のないことへの保証、商品性の保証、または特定目的への適合性の保証 などを含み、かつこれらに限定されない、いかなる黙示的な保証の責任も負わない ものとします。特定の取引における明示的または黙示的な保証の制限が国または地 域によって禁じられる場合、この記述は適用されないものとします。 この情報には、技術上不正確な点や誤植が含まれている可能性があります。本書の 情報は定期的に見直され、必要な変更は本書の改訂版に反映されます。IBM は本書 に記載されている製品またはプログラムに対して、随時、予告なしに変更または改 良を加えることがあります。 本書において参照されている IBM 以外の Web サイトは、単に便宜上の理由で記載 されているだけであり、それらのサイトに対する IBM の保証または支持を示すもの ではありません。それらの Web サイトで提供される内容は、本 IBM 製品には関係 ありません。これらの利用は、お客様の責任の元で行ってください。 お客様により提供された情報は、IBM が適切と判断するすべての方法で、使用また は頒布される場合があります。これにより、お客様に責任が発生することはありま せん。 本プログラムのライセンス保持者で、次の事項を可能にするための情報を希望する 方は、下記にお問い合わせください。(i) 独自に作成されたプログラムと、他のプロ グラム ( 本製品を含む ) との間の情報交換、(ii) 交換された情報の共用 IBM Corporation J46A/G4 555 Bailey Avenue San Jose, CA 95141-1003 U.S.A. 上記の情報は、適切な使用条件の元で利用可能ですが、有償の場合もあります。 本書で説明されるライセンス プログラムおよびこれに関して利用できるライセンス 資料は、IBM Customer Agreement、IBM International Program License Agreement、また はそれと同等の合意の各条項に基づいて、IBM より提供されます。 2 SQL Reference Guide この文書に含まれるすべての実行データは、管理環境下で決定されたものです。こ のため、操作環境によって実行結果が大きく変化する場合があります。開発レベル のシステムで測定が行われた可能性がありますが、その測定値が一般に利用可能な システムのものと同じである保証はありません。さらに、一部の測定値には推定値 が含まれている場合があります。このため、実際の結果とは異なる可能性がありま す。本書を利用されるお客様は、それぞれの特定の環境に適したデータを検証する 必要があります。 IBM 以外の製品に関する情報は、各製品の供給者、出版物、または公的に入手可能 な情報源から取得されたものです。IBM ではこれらの製品をテストしておらず、 IBM 以外の製品のパフォーマンス、互換性、またはその他の要件については確認し ていません。IBM 以外の製品の機能に関する質問については、各製品の供給者にお 問い合わせください。 特記事項 3 商標 AIX、DB2、DB2 Universal Database、Distributed Relational Database Architecture、NUMA-Q、OS/2、OS/390、および OS/400、IBM Informix、Χ ΙΣΑΜ、 Foundation.2000TM、IBM Informix 4GL、IBM Informix DataBlade Module、Client SDKTM、CloudscapeTM、CloudsyncTM、 IBM Informix Connect、IBM Informix Driver for JDBC、Dynamic ConnectTM、IBM Informix Dynamic Scalable ArchitectureTM (DSA)、 IBM Informix Dynamic ServerTM、IBM Informix Enterprise Gateway Manager (Enterprise Gateway Manager)、IBM Informix Extended Parallel ServerTM、i.Financial ServicesTM、J/FoundationTM、MaxConnectTM、Object TranslatorTM、Red BrickTM、IBM Informix SE、IBM Informix SQL、InformiXMLTM、RedBack、SystemBuilderTM、U2TM、UniData、UniVerse、 wintegrate は、International Business Machines Corporation の商標または登録商標で す。 Java および Java ベースの商標およびロゴは、米国およびその他の国における Sun Microsystems, Inc の商標または登録商標です。 Windows、Windows NT、および Excel は、米国およびその他の国における Microsoft Corporation の商標または登録商標です。 UNIX は、米国およびその他の国における、X/Open Company Limited が独占的にラ イセンスしている登録商標です。 本書におけるその他の会社、製品およびサービスの名称は、それぞれ各社の商標ま たはサービス マークです。 4 SQL Reference Guide 記号 数字 A B C あ行 か行 さ行 D た行 E F な行 G H は行 I J ま行 K L や行 M N O ら行 P Q R S T U V W X Y Z わ行 索引 索引 記号 %、SQL ワイルドカード文字 3-16 *、検索項目リストでの省略 7-18 _、SQL ワイルドカード文字 3-16 数字 10 進数定数 2-13 3 値論理 2-25 A ABS 関数 5-16 ADD COLUMN 句、ALTER TABLE コマンド 8-78 ADD CONSTRAINT 指定、ALTER TABLE コマンド 8-86 ADD STORAGE 句、ALTER SEGMENT コマンド 8-52 ADVISOR_MAXIMUM_CANDIDA TE_VIEWS パラメータ 9-6 Advisor 候補ビュー 9-6 ALL PRIVILEGES、付与 8-212 ALL キーワード AVG 関数 4-5 検索項目リスト 7-17 ALL 比較述部 3-11 ALTER COLUMN 指定、ALTER TABLE コマンド 8-83 ALTER CONSTRAINT 指定、 ALTER TABLE コマンド 8-90 ALTER DATABASE コマンド 構文一覧 A-2 構文説明 8-7 説明 8-6 ALTER INDEX コマンド TARGET インデックス 8-17 構文一覧 A-9 構文説明 8-14 使用方法 8-16 例 8-17 ALTER MACRO コマンド 構文一覧 A-9 構文説明 8-17 ALTER ROLE コマンド 構文一覧 A-9 構文説明 8-19 ALTER SEGMENT コマンド ATTACH 句 8-21 ∼ 8-27 DETACH OVERRIDE FULLINDEXCHECK オプショ ン 8-37 DETACH 句 8-33 MIGRATE TO 句 8-51 SEGMENT BY、セグメント化の 基準列 8-44 SEGMENT BY 句 8-44 完全インデックス チェックの省 略 8-35, 8-42 構文一覧 A-10 構文説明 8-21 ∼ 8-53 参照整合性チェックの省略 8-40, 8-42 修正句 8-31 ∼ 8-53 例 8-39 ∼ 8-41 ALTER SEGMENT コマンド、 RANGE 句 8-45 ALTER SYNONYM コマンド 構文一覧 A-13 構文説明 8-55 ALTER SYSTEM コマンド 構文一覧 A-3 記号 数字 A B C あ行 か行 さ行 D た行 E な行 構文説明 8-58 ∼ 8-67 性能統計のクリア設定の変 更 8-70 ∼ 8-71 説明 8-57 パフォーマンス モニタの変 更 8-68 ユーザ操作の制御 8-60, 8-61 ∼ 8-63, 8-63 ∼ 8-64 ログ記録設定の変更 8-66 ALTER SYSTEM コマンド、アカウ ンティング設定の変更 8-67 ALTER TABLE コマンド 8-72, 8-142 ADD COLUMN 指定 8-78 ∼ 8-79 ADD CONSTRAINT 指定 8-86 ALTER COLUMN 指 定 8-82 ∼ 8-84 ALTER CONSTRAINT 指定 8-90 参照の変更 8-90 DROP COLUMN 指 定 8-81 ∼ 8-82 DROP CONSTRAINT 指定 8-89 MAXROWS PER SEGMENT 値 8-76 MAXSEGMENTS 値 8-76 RENAME AS 指定 8-77 構文説明 8-73 ∼ 8-84 参照整合性チェックの延期 8-87 ALTER USER コマンド 構文一覧 A-6 構文説明 8-93 使用上の注意 8-94 ALTER VIEW SET MAINTENANCE コマンド 8-96 ALTER VIEW コマンド 8-94 AND 接続詞 3-17 ANY 比較述部 3-11 ARITHIGNORE、ARITHABORT コ マンド 9-8 Aroma データベース 1-14 ASC キーワード GROUP BY 句 7-56 OLAP ORDER BY 句 6-17 AS キーワード、列エリアス 2-6, 7-19 AVG 関数 4-5, 8-166 OLAP 6-24 2 SQL Reference Guide F G H は行 I J ま行 K L や行 M N O ら行 P Q R S T U V W X Y わ行 B BETWEEN 述部 3-12 BREAK BY サブ句 INSERT 文では使用不可 7-55, 7-64 ORDER BY 句 7-63 構文説明 7-59 B-TREE インデックス、インデック ス、「B-TREE」を参照 C CASCADE キーワード ALTER TABLE コマンド 8-83, 8-87, 8-91 CREATE TABLE コマンド 8-148 CASE 式 NTILE 関数 6-60 構文説明 5-4 CATEGORY 句、CREATE MACRO コマンド 8-129 CEIL 関数 5-17 CHANGE ACCOUNTING LEVEL、ALTER SYSTEM コマンド 8-67 DOMAIN 句、ALTER INDEX コマ ンド 8-16 EXTENDSIZE 句、ALTER SEGMENT コマンド 8-50 FILLFACTOR 句、ALTER INDEX コマンド 8-15 LOGGING LEVEL 句、ALTER SYSTEM コマンド 8-66 MAXROWS 句、ALTER TABLE コマンド 8-76 MAXSIZE 句、ALTER SEGMENT コマンド 8-49 PATH 句、ALTER SEGMENT コ マンド 8-50 USER 句、ALTER SEGMENT コ マンド 8-64 CHECK INDEX コマンド 説明 8-96 SET CHECK REPORT FILE PERMISSIONS 9-9 構文一覧 8-96 構文説明 8-96 CHECK TABLE コマンド 8-99 SET CHECK REPORT FILE PERMISSIONS 9-9 構文一覧 8-99 構文説明 8-99 CLEAN VERSION LOG 指定、 ALTER DATABASE コマン ド 8-11 CLEAR PERFORMANCE STATISTICS 句、ALTER SYSTEM コマンド 8-70 CLEAR キーワード、ALTER SEGMENT コマンド 8-42 CLOSE USER COMMAND 句、 ALTER SYSTEM コマンド 8-62 CLOSE USER SESSION 句、ALTER SYSTEM コマンド 8-62 COALESCE 関数 5-8 COMMENT 句 8-76 インデックス 8-16 シノニム 8-56 セグメント 8-51 ビュー 8-96 マクロ 8-18, 8-130 ユーザ 8-93 列 8-85 ロール 8-19 CONCAT 関数 5-35, 5-36, 5-38 CONNECT システム ロール 付与 8-208 ユーザの削除 8-227 COUNT 関数 4-7, 6-48 OLAP 6-24 結果のデータ型 9-10 COUNT(*) 関数 4-7 CREATE HIERARCHY コマンド 説明 8-102 CREATE HIERARCHY コマンド 構文一覧 A-18 構文説明 8-103 CREATE INDEX コマンド B-TREE インデックス 8-107 B-TREE の例 8-117 STAR インデックス 8-106 STAR インデックスの例 8-117 TARGET インデックス 8-107 インデックス指定 8-110 構文一覧 A-18 構文説明 8-106 Z 記号 数字 A B C あ行 か行 さ行 D た行 E F な行 セグメント指定の例 8-122 セグメント定義 8-114 セグメント範囲指定 8-118 セグメント範囲の指定 8-121 説明 8-107 ドメイン サイズ 8-125 ローカル インデックスの 例 8-118 CREATE MACRO コマンド 構文一覧 A-21 構文説明 8-127 ∼ 8-130 例 8-130 CREATE ROLE コマンド 構文一覧 A-21 構文説明 8-132 使用方法 8-132 例 8-132 CREATE SEGMENT コマンド 格納領域の指定 8-134 構文一覧 A-21 構文説明 8-133 ∼ 8-135 例 8-135 CREATE SYNONYM コマンド 構文一覧 A-22 構文説明 8-136 例 8-137 CREATE TABLE コマンド FOREIGN KEY REFERENCES 句 8-146 ∼ 8-148 MAXROWS PER SEGMENT 値 8-139 MAXSEGMENTS 値 8-139 PRIMARY KEY REFERENCE 句 8-144 SEGMENT LIKE DATA 句 8-154 構文一覧 A-22 構文説明 8-138, 8-153 セグメント定義 8-150 ∼ 8-153 説明 8-142 プライマリ キー参照 8-144 例 8-153, 8-158 CREATE TEMPORARY TABLE コ マンド 構文一覧 A-25 構文説明 8-161 説明 8-160 CREATE VIEW コマンド クエリ式 8-164 構文一覧 A-25 G H は行 I J ま行 K L や行 M N O ら行 P Q R S T U V W X Y Z わ行 構文説明 8-163 事前計算ビュー 8-168 例 8-169 CURRENT_DATE 関数 5-60 CURRENT_TIMESTAMP 関数 5-60 CURRENT_TIME 関数 5-60 CURRENT_USER 関数 5-73 D DATABASE キーワード、ALTER SEGMENT コマンド 8-59 DATEADD 関数 5-62 DATEDIFF 関数 5-63 DATEFORMAT 変数 C-2 DATENAME 関数 5-64, 9-22 DATE 関数 5-61 DATE データ型 2-19 DBA システム ロール タスク権限のリスト 8-202 取消 8-224 付与 8-202 DEC、DECIMAL データ型 2-23 DECODE 関数 5-9 DEC 関数 5-19, 5-21 DEFAULT 句、CREATE TABLE コ マンド 8-143 DEFAULT VALUES サブ句、 INSERT コマンド 8-217 DELETE ( 特権 ) 8-212 DELETE コマンド 構文一覧 A-26, A-27, A-29 構文説明 8-171 ∼ 8-172 使用方法 8-173 例 8-174 ∼ 8-176 DENSE_RANK 関数 6-16 DESC キーワード OLAP ORDER BY 句 6-17 ORDER BY 句 7-56 DETACH 句、ALTER SEGMENT コ マンド 8-33 DISTINCT 関数 8-167 DISTINCT キーワード AVG 関数 4-5 COUNT 関数 4-8 OLAP 集約 6-24 検索項目リスト 7-18 DROP COLUMN 指定、ALTER TABLE コマンド 8-81 DROP CONSTRAINT 指定、ALTER TABLE コマンド 8-89 DROP DEFAULT 句、ALTER TABLE コマンド 8-84 DROP HIERARCHY コマンド 構文一覧 A-25 構文説明 8-176 説明 8-176 DROP INDEX コマンド 構文一覧 A-25 構文説明 8-177 挿入時の制約 8-179 例 8-178 DROP LAST STORAGE オプショ ン、ALTER SEGMENT コマン ド 8-54 DROP MACRO コマンド 構文一覧 A-26 構文説明 8-180 DROP ROLE コマンド 構文一覧 A-26 構文説明 8-181 例 8-182 DROP SEGMENT コマンド 8-12 構文一覧 A-26 構文説明 8-182 例 8-183 DROP SYNONYM コマンド 構文一覧 A-26 構文説明 8-184 DROP TABLE コマンド 構文一覧 A-26 構文説明 8-185 ∼ 8-186 例 8-187 DROP VERSION LOG 指定、 ALTER DATABASE コマン ド 8-9 DROP VIEW コマンド 構文一覧 A-27 構文説明 8-187 DROPPING SEGMENTS キーワード DROP INDEX コマンド 8-178 DROP TABLE コマンド 8-186 DST ( 動的統計テーブル ) 9-51 索引 3 記号 数字 A B C あ行 か行 さ行 D た行 E G な行 E EXCEPT 演算子 7-45 EXISTS 述部 3-13 EXPAND コマンド 構文一覧 A-30 構文説明 8-188 EXPLAIN コマンド 構文一覧 A-30 構文説明 8-189 EXPORT コマンド 構文説明 8-191 説明 8-190 EXTENDSIZE 句、ALTER SEGMENT コマンド 8-53, 8-135 EXTRACT 関数 5-66, 9-22 F FLOAT 関数 5-22 FLOAT データ型 2-24 FLOOR 関数 5-23 FOR DELETE オプション、LOCK コマンド 8-221 FORCE INTACT 句、ALTER SEGMENT コマンド 8-43 FORCE_AGGREGATION_TASKS パラメータ 9-23 FORCE_FETCH_TASKS パラメー タ 9-23 FORCE_HASHJOIN_TASKS パラ メータ 9-23 FORCE_JOIN_TASKS パラメー タ 9-23 FORCE_SCAN_TASKS パラメー タ 9-23 FORCE_TARGETJOIN_TASKS パラ メータ 9-23 FOREIGN KEY 句、CREATE TABLE コマンド 8-147 <frame_between> 句 6-27 <frame_end> 句 6-27 <frame_start> 句 6-26 FROM 句 7-22 NATURAL JOIN 構文 7-24 ON サブ句 7-24 USING サブ句 7-24 外部結合 7-23 4 SQL Reference Guide F H は行 I J ま行 K L や行 M N O ら行 P Q R S T U V W X Y わ行 クエリ式 7-15 クロス結合 7-24 結合指定 7-24 サブクエリ 7-15 サブクエリの性能 7-71 テーブル参照 7-23 内部結合および外部結合 7-23 FULLINDEXCHECK キーワード、 ALTER SEGMENT コマン ド 8-35, 8-42 G GRANT ( 権限とロール ) コマンド 構文一覧 A-6 構文説明 8-201 ∼ 8-206 使用方法 8-205 例 8-206 GRANT ( 特権 ) コマンド 構文一覧 A-7 構文説明 8-212 ∼ 8-213 例 8-213 GRANT CONNECT コマンド 構文一覧 A-7 構文説明 8-208 ∼ 8-210 例 8-211 GROUP BY 句 7-39, 7-55 H HAVING 句 7-41 I IFNULL 関数 2-25, 5-12 IGNORE_OPTICAL_INDEXES パラ メータ、構文 9-27 IN_PLACE キーワード、ALTER TABLE コマンド 8-74 INFO_MESSAGE_LIMIT パラメー タ、rbw.config ファイル 9-33 INITIALLY DEFERRED オプショ ン、ALTER TABLE ADD CONSTRAINT コマンド 8-87 INITSIZE 句、ALTER SEGMENT コ マンド 8-53, 8-135 INSERT ( 特権 ) 8-212 INSERT コマンド 値の代入 2-26 構文一覧 A-28 構文説明 8-214 ∼ 8-217 使用方法 8-218 挿入時の制約 8-179 例 8-218 ∼ 8-220 INTERSECT 演算子 7-45 INT 関数 5-25, 5-27, 5-30 INT データ型 2-20 IN 述部 3-14 IS NOT NULL 述部 2-25 IS NULL 述部 2-25, 3-15 K KEEPING SEGMENTS キーワード DROP INDEX コマンド 8-178 DROP TABLE コマンド 8-186 L LIKE 述部 3-16 LOCK ( テーブルのロック ) コマン ド 構文一覧 A-28 構文説明 8-221 LOCK DATABASE コマンド 構文説明 8-222 使用方法 8-223 説明 8-222 LOWER 関数 5-39 LTRIM 関数 5-40 M MAX、MIN キーワード、範 囲 8-119, 8-156 MAXROWS PER SEGMENT 値 CREATE TABLE コマンド 8-139 ALTER TABLE コマンド 8-76 MAXSEGMENTS 値 ALTER TABLE コマンド 8-76 CREATE TABLE コマンド 8-139 MAXSIZE パラメータ ALTER SEGMENT コマンド 8-52 Z 記号 数字 A B C あ行 か行 さ行 D た行 E F な行 CREATE SEGMENT コマン ド 8-135 MAXSPILLSIZE 値、SET INDEX/ QUERY TEMPSPACE コマン ド 9-32 MAX 関数 4-9 OLAP 6-24 MIGRATE TO 句、ALTER SEGMENT コマンド 8-51 MIN、MAX キーワード、範 囲 8-119, 8-156 MIN 関数 4-10 OLAP 6-24 MOVINGAVG 関数 6-52 MOVINGSUM 関数 6-55 N NO ACTION キーワード ALTER TABLE コマンド 8-83, 8-87, 8-91 CREATE TABLE コマンド 8-148 NO WAIT キーワード LOCK コマンド 8-221 SET LOCK コマンド 9-34 NOT NULL キーワード ALTER TABLE コマンド 8-79, 8-82 CREATE TABLE コマンド 8-142 NTILE 関数 6-58 OLAP 6-16 NULL SET ORDER BY コマンド 9-38 SUPPRESS BY 句による値の除 外 7-66 値の欠落 2-25 外部結合で表示される値 7-9 検索条件の評価 3-18 算術演算子 3-9 テーブル列の変更 8-82 配置 9-38 文字列 2-9 NULLIF 関数 5-13 NULLS FIRST、OLAP 結果 6-37 G H は行 I J ま行 K L や行 M N O ら行 P Q R S T U V W X Y Z わ行 O OFFLINE モード、ALTER SEGMENT コマンド 8-40 OLAP 関数 6-4 ∼ 6-46 AVG 6-24 COUNT 6-24 DENSE_RANK 6-16 MAX 6-24 MIN 6-24 NTILE 6-16 ORDER BY 句 6-7 OVER 句 6-7 RANK 6-16 RATIO_TO_REPORT 6-44 ROW_NUMBER 6-22 SUM 6-24 WHEN 句 6-19 <window_frame> 句 6-25 <window_order> 句 6-17 <window_partition> 句 6-17 一般的な使用方法 6-15 ウィンドウ パーティション 6-7 ウィンドウ フレーム 6-10 ウィンドウ フレームの 例 6-30 ∼ 6-37 式 6-15 集約関数 6-24 集約の例 6-40 順位付けの例 6-18 リード機能とラグ機能 6-36 ON DELETE 句 ALTER TABLE コマンド 8-83, 8-87, 8-91 CREATE TABLE コマンド 8-148 ON ERROR ABORT/CONTINUE 句、 CREATE INDEX コマンド 8-108 ONLINE モード、ALTER SEGMENT コマンド 8-41 ON サブ句、FROM 句中 7-24 OPTICAL_AVAILABILITY パラ メータ、構文 9-36 OPTICAL 指定、ALTER SEGMENT コマンド 8-49 Oracle 式の構文、外部結合 7-37 ORDER BY 句 BREAK BY サブ句 7-63 OLAP 6-7, 6-13, 6-17 RESET BY サブ句 7-59 UNION、EXCEPT、INTERSECT 式の制限 7-57 OR 接続詞 3-17 OVERRIDE REFCHECK 句 ALTER SEGMENT コマンド 8-40, 8-42 CREATE TABLE コマンド 8-148 DELETE コマンド 8-172 OVER 句、OLAP 関数 6-7 P PARALLEL_SET_OPERATION パラ メータ 9-39 POSITION 関数 5-42 POSITIONB 関数 5-44 PROCESS 句、ALTER SEGMENT コマンド 8-62 PROCESS 句、ALTER SYSTEM コ マンド 8-64 PSU、「物理格納ユニット」を参照 PSU シーケンス ID 8-49 PUBLIC アクセス 8-212 オブジェクト特権 8-213 Q QUIESCE 句、ALTER SYSTEM コ マンド 8-59 R RANGE 句、ALTER SEGMENT コ マンド 8-45 RANGE LIKE SEGMENT 句 ALTER SEGMENT コマンド 8-28 RANGE LIKE SEGMENT 句、 ALTER SEGMENT ATTACH 8-22 RANK 関数 NTILE と比較 6-58 OLAP 6-16 RISQL 6-62 上位 10 行 6-62 RATIOTOREPORT 関数 OLAP 6-44 索引 5 記号 数字 A B C あ行 か行 さ行 D た行 E な行 RISQL 6-66 rbwadmd デーモン 9-51 REAL 関数 5-28 RELEASE STORAGE 句、ALTER SEGMENT コマンド 8-54 RENAME 句、ALTER SEGMENT コ マンド 8-49 RENAME AS 句、ALTER TABLE コ マンド 8-83 replacement 値、DECODE 関数 5-9 RESET 句、ALTER TABLE コマン ド 8-75 RESET BY サブ句 WHEN 句 7-62 RESET STATISTICS 句、ALTER SEGMENT コマンド 8-59 RESOURCE システム ロール タスク権限のリスト 8-202 取消 8-224 付与 8-202 RESTRICT キーワード、ALTER TABLE コマンド 8-81 RESUME 句 ALTER SYSTEM コマンド 8-59 ALTER TABLE コマンド 8-75 REVOKE ( 権限とロール ) コマンド 構文一覧 A-8 構文説明 8-224 使用方法 8-225 例 8-225 REVOKE ( 特権 ) コマンド 構文一覧 A-8 構文説明 8-228 使用方法 8-228 例 8-229 REVOKE CONNECT コマンド 構文一覧 A-8 構文説明 8-226 RISQL 表示関数 入れ子 3-6 スカラ関数内での入れ子 5-26 CUME 6-48 MOVINGAVG 6-52 MOVINGSUM 6-55 NTILE 6-58 RANK 6-62 RATIOTOREPORT 6-66 TERTILE 6-58, 6-68 WHEN 句 7-62 6 SQL Reference Guide F G H は行 I J ま行 K L や行 M N O ら行 P SEGMENT BY HASH 句、CREATE TABLE コマンド 8-153 SEGMENT BY VALUES OF 句 CREATE INDEX コマンド 8-119 CREATE TABLE コマンド 8-154 SEGMENT BY 句、ALTER SEGMENT コマンド 8-44 SEGMENT LIKE DATA 句 CREATE INDEX コマンド 8-115 CREATE TABLE コマンド 8-154 SEGMENT LIKE REFERENCED TABLE 句 8-116 SEGMENT LOCAL 句、CREATE INDEX コマンド 8-116 SELECT ( 特権 ) 8-212 SELECT 文 構文一覧 A-29 BREAK BY サブ句 7-59, 7-63 EXCEPT 演算子 7-45 FROM 句 7-22 GROUP BY 句 7-39, 7-55 HAVING 句 7-41 INTERSECT 演算子 7-45 SUPPRESS BY 句 7-66 UNION 演算子 7-45 ∼ 7-53 WHEN 句 7-43 WHERE 句 7-36 検索項目リスト 7-17 構文説明 7-54, 8-229 サブクエリ 7-69 処理シーケンス 7-68 R S T U V W X Y わ行 式 3-5, 6-47 リザルト セットの並び順 6-50 ROW_NUMBER 関数 6-22 ROWS_PER_FETCH_TASK パラ メータ 9-55 ROWS_PER_JOIN_TASK パラメー タ 9-55 ROWS_PER_SCAN_TASK パラメー タ 9-55 ROWS_PER_TARGETJOIN_TASK パラメータ 9-56 ROWS_PER_TASK パラメー タ 9-23, 9-54 RTRIM 関数 5-45 S Q テーブル結合 7-23 SERIAL データ型 2-21 値の生成 2-22 値の挿入 8-216 SET ADVISOR LOGGING コマン ド 9-5 SET ADVISOR MAXIMUM CANDIDATE VIEWS コマン ド 9-6 SET ADVISOR SAMPLE コマン ド 9-7 SET ARITHIGNORE、 ARITHABORT コマンド 9-8 構文説明 9-8 SET CHECK REPORT FILE PERMISSIONS コマンド 9-9 SET CHECK_TABLE_INDEX_ DIRECTORY コマンド 9-10 SET COUNT RESULT コマン ド 9-10 SET CROSS JOIN コマンド 9-11 SET DATEFORMAT コマンド C-2 SET DEFAULT 句、ALTER TABLE コマンド 8-84 SET DEFAULT DATA SEGMENT コ マンド 9-13 SET DEFAULT INDEX SEGMENT コマンド 9-15 SET DEFAULT PSU EXTENDSIZE コマンド 9-16 SET DEFAULT SEGMENT SIZE コ マンド 9-18 SET EXPORT_DEFAULT_PATH コ マンド 9-19 SET EXPORT_DELIMITER コマン ド 9-20 SET EXPORT_MAX_FILE_SIZE コ マンド 9-21 SET FIRST DAYOFWEEK コマン ド 9-22 SET FORCE_AGGREGATION_ TASKS コマンド 9-23 SET FORCE_FETCH_TASKS コマン ド 9-23 SET FORCE_HASHJOIN_ TASKS コ マンド 9-23 SET FORCE_JOIN_TASKS コマン ド 9-23 Z 記号 数字 A B C あ行 か行 さ行 D た行 E F な行 SET FORCE_SCAN_TASKS コマン ド 9-23 SET FORCE_TARGETJOIN_TASKS コマンド 9-23 SET IDLE TIMEOUT コマンド 9-26 SET IGNORE OPTICAL INDEXES コマンド 9-27, 9-28 SET INDEX TEMPSPACE コマン ド 9-29 SET INFO MESSAGE LIMIT コマン ド 9-33 SET LOCAL TARGET PREDICATES コマンド 9-65 SET LOCK コマンド 9-34 SET OLAP APPROXIMATE NUMERIC コマンド 9-35 SET OPTICAL AVAILABILITY コマ ンド 9-36 SET ORDER BY コマンド NULL 評価 7-56 構文説明 9-38 SET PARALLEL SET_OPERATION コマンド 9-39 SET PARALLEL_HASHJOIN コマン ド 9-40 SET PARTIAL AVAILABILITY コマ ンド 9-41 SET PARTITIONED PARALLEL AGGREGATION コマンド 9-43 SET PERFORMANCE MONITOR コ マンド 9-44 SET PRECOMPUTED VIEW MAINTENANCE ON ERROR コ マンド 9-47 SET PRECOMPUTED VIEW MAINTENANCE コマンド 9-46 SET PRECOMPUTED VIEW QUERY REWRITE コマンド 9-48 SET PRIORITY 句、ALTER SYSTEM コマンド 8-64 SET QUERY MEMORY LIMIT コマ ンド 9-49 SET QUERY TEMPSPACE コマン ド 9-29 SET QUERYPROCS コマンド 9-50 SET REPORT_INTERVAL コマン ド 9-51 SET RESULT BUFFER FULL ACTION コマンド 9-52 G H は行 I J ま行 K L や行 M N O ら行 P Q R S T U V W X Y Z わ行 SET RESULT BUFFER コマン ド 9-52 SET ROWCOUNT コマンド 9-53 SET ROWS_PER_FETCH_TASK コ マンド 9-56 SET ROWS_PER_JOIN_TASK コマ ンド 9-56 SET ROWS_PER_SCAN_TASK コマ ンド 9-55 SET ROWS_PER_TARGETJOIN_ TASK コマンド 9-56 SET SAMPLE MARGIN コマン ド 9-57 SET SAMPLE SEED コマンド 9-59 SET SEGMENTS コマンド 9-61 SET SERIAL START 指定、ALTER COLUMN コマンド 8-83 SET SERIAL STEP 指定、ALTER COLUMN コマンド 8-84 SET STATS コマンド 構文説明 9-62 例 9-63 SET TARGETJOIN LOCAL PREDICATES コマンド 9-64 SET TEMPORARY SEGMENT STORAGE PATH コマンド 9-67 SET TRANSACTION ISOLATION LEVEL コマンド 9-68 SET UNIFORM PROBABILITY FOR ADVISOR コマンド 9-70 SET USE INVALID PRECOMPUTED VIEWS コマンド 9-70 SET VERSIONING コマンド 9-72 SET 句、UPDATE コマンド 8-231 SIGN 関数 5-29 SMALLINT データ型 2-22 SOME 数量述部 3-11 SQL OLAP 関数、「OLAP 関数」を 参照 SQL サーバの日付フォーマッ ト C-1 SQL コマンド ALTER DATABASE 8-6 ALTER INDEX 8-14 ALTER MACRO 8-17 ALTER ROLE 8-19 ALTER SEGMENT 8-20 ALTER SYNONYM 8-55 ALTER SYSTEM 8-57 ALTER TABLE 8-72, 8-142 ALTER USER 8-93 ALTER VIEW 8-94 CHECK INDEX 8-96 CHECK TABLE 8-99 CREATE HIERARCHY 8-102 CREATE INDEX 8-105 CREATE MACRO 8-127 CREATE ROLE 8-131 CREATE SEGMENT 8-133 CREATE SYNONYM 8-136 CREATE TABLE 8-137, 8-142 CREATE TEMPORARY TABLE 8-160 CREATE VIEW 8-163 DELETE 8-171 DROP HIERARCHY 8-176 DROP INDEX 8-177 DROP MACRO 8-180 DROP ROLE 8-181 DROP SEGMENT 8-182 DROP SYNONYM 8-184 DROP TABLE 8-185 DROP VIEW 8-187 EXPAND 8-188 EXPLAIN 8-189 EXPORT 8-190 GRANT ( 権限とロール ) 8-201 GRANT ( 特権 ) 8-211 GRANT CONNECT 8-207 INSERT 8-214 LOCK ( テーブルのロック ) 8-221 REVOKE ( 権限とロール ) 8-224 REVOKE ( 特権 ) 8-227 REVOKE CONNECT 8-226 SELECT 7-54, 8-229 UNLOCK ( テーブルのロック解除 ) 8-229 UNLOCK DATABASE 8-230 UPDATE 8-231 START、STOP ADVISOR LOGGING 句、ALTER SYSTEM コマンド 8-59 START、STOP PERFORMANCE MONITOR 句、ALTER SYSTEM コマンド 8-68 START ACCOUNTING 句、ALTER SYSTEM コマンド 8-67 索引 7 記号 数字 A B C あ行 か行 さ行 D E た行 な行 START LOGGING 句、ALTER SYSTEM コマンド 8-65 STAR インデックス SEGMENT LIKE DATA 8-117 作成例 8-113 セグメント化 8-118 セグメントのアタッチ 8-22 セグメントの変更 8-24 セグメント範囲指定 8-120 STOP ACCOUNTING 句、ALTER SYSTEM コマンド 8-67 STOP LOGGING 句、ALTER SYSTEM コマンド 8-65 STRING 関数 5-47 SUBSTR 関数 5-50, 5-52, 5-53 SUMMING 句、BREAK BY 7-63 SUM 関数 4-11 OLAP 6-24 SUPPRESS BY 句 7-66 SWITCH ACCOUNTING FILE 句、 ALTER SYSTEM コマンド 8-67 SWITCH ADVISOR LOG FILE 句、 ALTER SYSTEM コマンド 8-60 SWITCH LOGGING 句、ALTER SYSTEM コマンド 8-65 Sybase 式の構文、外部結合 7-37 T TARGET インデックス CREATE INDEX コマンド 8-107 UNLOAD 操作 8-107 作成 8-107 セグメント範囲指定 8-118 デフォルト ドメイン 8-125 ドメイン、定義 8-107 ドメイン サイズ 8-125 変更 8-17 target 値、DECODE 関数 5-9 TEMPSPACE パラメータのリセッ ト 9-32 TERMINATE LOGGING DAEMON 句、ALTER SYSTEM コマン ド 8-66 TERTILE 関数 6-58, 6-68 THRESHOLD 値 構文 9-31 TIMESTAMP 関数 5-69 8 SQL Reference Guide F G H は行 I J ま行 K L や行 M N O ら行 P Q R S T U V W X Y わ行 TIMESTAMP データ型 2-19 TIME 関数 5-68 TIME データ型 2-19 TINYINT データ型 2-22 TO_CHAR 関数 5-70 TRIM 関数 5-54 U UNION、INTERSECT、EXCEPT 式 7-45 ∼ 7-53, 7-57 UNIQUE キーワード 8-142 ALTER TABLE コマンド 8-79 UNLOAD 操作、TARGET インデッ クス 8-107 UNLOCK ( テーブルのロック解除 ) コマンド 構文一覧 A-29 構文説明 8-230 UNLOCK DATABASE コマンド 構文一覧 A-29 構文説明 8-231 UPDATE ( 特権 ) 8-212 UPDATE コマンド 8-231 値の代入 2-26 構文一覧 A-29 構文説明 8-231 使用方法 8-234 例 8-235 UPPER 関数 5-56 USER 関数 5-73 USING サブ句、FROM 句中 7-24 V VALUES 句、INSERT コマン ド 8-215 VARCHAR、「文字データ型」を参 照 VERIFY 句、ALTER SEGMENT コ マンド 8-43 W WAIT キーワード、SET LOCK コマ ンド 9-34 WHEN 句 OLAP の例 6-19 RISQL 表示関数 7-62 説明 7-43 WHERE 句 7-36 条件 3-10 内部結合 7-37 <window_order> 句、OLAP 6-17 WITH FILLFACTOR 句、CREATE INDEX コマンド 8-124 X XML フォーマット、エクスポー ト 8-195 あ アスタリスク、検索項目リス ト 7-18 値の欠落 3-9 NULL 2-25 評価 2-25 文字列 2-9 値の範囲 ALTER SEGMENT 8-23, 8-28, 8-45 CREATE INDEX 8-119, 8-121 CREATE TABLE コマンド 8-155 移動 8-46 セグメント化の基準列 8-45 値ベースのウィンドウ フレー ム 6-11 い 一重引用符、文字列定数 2-9 移動関数、OLAP 6-40 入れ子にされた集合 4-4 入れ子になった式 3-6 インデックス B-TREE 8-107 SEGMENT LOCAL 8-116 作成例 8-117 システム生成インデックスの削 除 8-179 SEGMENT LIKE DATA 8-115 SEGMENT LOCAL 8-118 STAR 8-179 Z 記号 数字 A B C あ行 か行 さ行 D た行 E な行 TARGET SEGMENT LOCAL 8-116 作成 8-107 デフォルト ドメイン 8-125 キー列の順序 8-179 コメント 8-16 削除 8-177 作成 8-106 作成、名前付きセグメン ト 8-114 ∼ 8-123 システム生成の名前 8-15 セグメントのアタッチ 8-22 タイプ 1-7 チェック 8-96, 9-9 ドメイン サイズ 8-125 名前 8-15, 8-111 光セグメントでの選択 9-27 フィル ファクタ 8-14, 8-124 部分的に利用可能 9-28 変更 8-14 命名 2-3 ユーザ作成 8-111 う ウィンドウ パーティション 6-7, 6-17 ウィンドウ フレーム OLAP 6-10 <window_frame> 句 6-25 値ベース 6-33 行ベース 6-30 リード機能とラグ機能 6-36 埋め込みマクロ 8-130 え エスケープ文字 LIKE 述部 3-16 マクロ名 8-130 エラー、ゼロ除算 9-8 エリアス 定義 2-6 列 7-19 演算子 NULL 値 3-9 算術演算子 3-7 エンティティの整合性 1-8 F G H は行 I J ま行 K L や行 M N O ら行 P 大文字と小文字 2-5, 2-9 大文字と小文字の区別 名称と識別子 2-5 文字列定数 2-9 オブジェクト、データベース 2-3 オブジェクト特権 取消 8-227 付与 8-211 主なテーブル、「参照元テーブル」 を参照 オンライン マニュアル 13 か 階層構造 削除 8-176 作成 8-102 外部結合 FROM 句 7-11 WHERE 句 7-37 定義 7-8 格納領域の指定、セグメン ト 8-134 下線記号のワイルドカード 3-16 かっこ、優先順位 3-7 間隔、日付時間 2-19 関係スキャン 9-25 関数、SQL OLAP 6-4 ∼ 6-46 RISQL 表示関数 6-47 ∼ 6-69 集約関数 4-4 ∼ 4-12 スカラ 5-3 ∼ 5-73 関数従属性、 「階層構造」を参照 完全インデックス チェック、 ALTER SEGMENT コマンドで の省略 8-35, 8-42 キー フォーリン キー 1-7 フォーリン キー参照 8-146 プライマリ キー 1-7, 8-145 キーワード 構文ダイアグラム 9 予約済み B-1 R S T U V W X Y Z わ行 お き Q 行 SET ROWCOUNT での表示制 限 9-53 テーブルから検索指定 7-36 行 ID、セグメントの変更 8-24 行サブクエリ 7-69 行ベースのウィンドウ フレー ム 6-10 く クエリ SET ROWCOUNT での実行停 止 9-53 記述 7-3 ∼ 7-75 並列プロセス 9-24 クエリ式 7-3 ∼ 7-75 UNION、INTERSECT、EXCEPT 式 7-6, 7-45 概要 7-4 クエリ指定 7-5, 7-16 構文 7-5 サブクエリ 7-69 事前計算 8-164 相関サブクエリ 7-72 単純なテーブル 7-6 テーブル結合 7-5, 7-7 ビュー 8-164 明示的なテーブル 7-6 例 7-26 クエリ指定 7-16 クエリ処理、操作順序 7-68 クエリの記述 7-3 ∼ 7-75 クエリ プロセス、クエリあたりの 数 9-50 区切り識別子 2-4 マクロ名 8-128 グループ関数、「集約関数」を参照 クロス結合 SET CROSS JOIN コマンド 9-11 構文 7-12 使用上の注意 7-24 け 結合クエリ式 7-4 権限と特権 索引 9 記号 数字 A B C あ行 か行 さ行 D た行 E な行 SQL の実行に必要な権限と特 権 1-9 検索条件 FROM 句 7-11 HAVING 句 7-41 WHEN 句 7-43 WHERE 句 7-36 定義 3-17 限定結合 7-24 使用上の注意 7-24 説明 7-7 こ 降順 6-62, 7-56 値ベースのウィンドウ フレー ム 6-13 構文ダイアグラム キーワード 9 表記規則 7 変数 9 候補ビュー 9-6 小文字と大文字 変換 2-5 リテラル 2-9 さ 作業用メモリの制限 9-49 削除トリガ動作 8-83, 8-87, 8-91, 8-148 サブクエリ FROM 句 7-15, 7-71 検索項目リスト 7-19 スカラ サブクエリとテーブル サ ブクエリ 7-69 相関サブクエリと GROUP BY サ ブクエリ 7-74 派生テーブル 7-23 部分 SELECT 文 7-69 例 7-26 列名の解決 7-73 算術演算子、優先順位 3-7 参照 テーブル 7-22 フォーリン キー 8-147 列エリアス 7-19 参照先テーブル 1-5 10 SQL Reference Guide F G H は行 I J ま行 K L や行 M N O ら行 参照先テーブル、インデックスを 同様にセグメント化 8-116 参照整合性 8-148, 8-172 ALTER SEGMENT でのチェック の省略 8-40, 8-42 チェックの延期 8-87 参照整合性サイクル ALTER TABLE ADD CONSTRAINT コマンド 8-88 無効 8-147 参照の整合性 定義 1-8 サンプリング 7-28 SET ADVISOR SAMPLE 9-7 行サンプル 7-30 シード 7-31 ブロック サンプル 7-31 マージン 7-32 サンプル データベース 1-14 サンプル データベース、インス トール スクリプト 4 し シード、サンプリング 7-31 時間リテラル ANSI SQL-92 標準 2-10 非標準 C-7 式 OLAP 関数 6-15 RISQL 表示関数 6-47 入れ子 3-6 クエリ 7-3 ∼ 7-75 結合の検索条件 7-11 算術式 3-7 多項式 3-5 単項式 3-4 評価 3-7 識別子 区切り識別子 2-4, 8-128 標準 2-4 システム カタログ 1-9 システム テーブル、結合 7-23, 7-27 システム ロール タスク権限のリスト 8-202 取消 8-224 付与 8-201, 8-208 P Q R S T U V W X Y わ行 事前計算クエリ式 8-164 事前計算ビュー 8-170, 9-48 SET コマンド 9-70 作成 8-163 説明 8-163 自然結合 7-10, 7-24 シノニム 8-90 コメントの割り当て 8-55 削除 8-184 作成 8-136 フォーリン キー参照 8-90 命名 2-3, 8-137 集合関数 集約関数 4-4 修飾列名 2-7, 7-24 ORDER BY 句 7-57 重複行 7-18 集約関数 8-166 ALL キーワード 4-5 AVG 4-5 COUNT 4-7 COUNT(*) 4-7 DISTINCT キーワード 4-5 MAX 4-9 MIN 4-10 OLAP 6-24 OLAP 集約とは異なる関数 6-24 SUM 4-11 入れ子 3-6, 4-4 検索項目リスト 7-20 事前計算ビュー定義 8-166 説明 4-3, 4-4 集約操作、並列 9-39 集約テーブル 8-167, 8-170, 8-187 集約列 8-166 述部 ALL 3-11 BETWEEN 3-12 EXISTS 3-13 IN 3-14 IS NULL 3-15 LIKE 3-16 SOME または ANY 3-11 構成 3-10 数量 3-11 比較 3-11 ローカル 9-64 上位 10 行 6-62 小計、BREAK BY 7-63 Z 記号 数字 A B C あ行 か行 さ行 D た行 E F な行 条件 3 値論理 2-25 HAVING 句 7-41 WHEN 句 7-43 検索 3-17 相関 2-6 相関サブクエリ 7-72 定義 3-10 条件付きスカラ関数 CASE 5-4 COALESCE 5-8 DECODE 5-9 IFNULL 5-12 NULLIF 5-13 照合シーケンス 7-57 昇順 7-56 値ベースのウィンドウ フレー ム 6-13 処理、SELECT 文 7-68 シンプル スター スキーマ 8-113 す 数値スカラ関数 ABS 5-16 CEIL 5-17 DEC 5-19, 5-21 FLOAT 5-22 FLOOR 5-23 INT 5-25, 5-27, 5-30 REAL 5-28 SIGN 5-29 数値定数 2-9 数量述部 3-10 スカラ関数 5-3 ABS 5-16 CASE 5-4 CEIL 5-17 COALESCE 5-8 CONCAT 5-35, 5-36, 5-38 CURRENT_DATE 5-60 CURRENT_TIME 5-60 CURRENT_TIMESTAMP 5-60 CURRENT_USER 5-73 DATE 5-61 DATEADD 5-62 DATEDIFF 5-63 DATENAME 5-64 G H は行 I J ま行 K L や行 M N O ら行 P 整数 INT 2-20 R S T U V W X Y Z わ行 DEC 5-19, 5-21 DECODE 5-9 EXTRACT 5-66 FLOAT 5-22 FLOOR 5-23 IFNULL 5-12 INT 5-25, 5-27, 5-30 LOWER 5-39 LTRIM 5-40 NULLIF 5-13 POSITION 5-42 POSITIONB 5-44 REAL 5-28 RTRIM 5-45 SIGN 5-29 STRING 5-47 SUBSTR 5-50, 5-52, 5-53 TIME 5-68 TIMESTAMP 5-69 TO_CHAR 5-70 TRIM 5-54 UPPER 5-56 入れ子 3-6, 5-3 テリトリによる指定の結果 5-59 分析関数内での入れ子 5-26 スカラ関数の入れ子 5-3 スカラ関数の出力のローカライ ズ 5-58 スカラ サブクエリ 7-69 スキーマ スター スキーマ 1-10 設計の柔軟性 1-10 スキーマ参照のループ、無効 8-88, 8-147 スケール 10 進数定数 2-13 10 進数データ型と数値データ 型 2-23 数値データ型 2-9 整数定数 2-12 倍精度 2-24 スター スキーマ 1-10 スピル ファイル 9-29 せ Q SMALLINT 2-22 TINYINT 2-22 定数 2-12 精度 10 進数値データ型 2-23 10 進数定数 2-13 数値データ型 2-9 整数定数 2-12 倍精度 2-24 制約、テーブルの変更 8-90 制約名 テーブルから削除 8-89 テーブルへの追加 8-86 フォーリン キー 8-146 フォーリン キー参照 8-111 フォーリン キー制約の変更 8-90 プライマリ キー 8-145 セキュリティ 1-9 セグメント SET SEGMENTS コマンド 9-61 値の範囲の変更 8-44, 8-45 オフライン モード 8-40 オンライン モード 8-41 クリア 8-42 検証 8-43 コメント 8-51 最大数の変更 8-76 削除 8-33, 8-182, 9-61 作成 8-133 修正 8-30 ∼ 8-53 正常化 8-43 セグメント化の基準列 8-154 セグメント範囲指定 8-118 セグメント範囲の指定 8-154 全移動 8-51 テーブルごとの最大数 8-139 デフォルト ディレクトリの設 定 9-15, 9-13 名前の変更 8-49 破損 8-186 ハッシュ 8-153 範囲 8-23, 8-28, 8-45, 8-119, 8-121 範囲の指定 8-155 物理格納ユニット 8-49, 8-134 部分的に利用可能なインデック ス 9-28 部分的に利用可能なテーブ ル 9-41 変更 8-20 索引 11 記号 数字 A B C あ行 か行 さ行 D た行 E な行 保持 9-61 命名 2-3, 8-115, 8-134 ローカル インデックス 8-116 セグメント ID、セグメントの変 更 8-24 セグメント化の基準列 ALTER SEGMENT コマンド 8-44 CREATE TABLE コマンド 8-154 セグメント定義、CREATE INDEX コマンド 8-114 セグメントの最大数、テーブ ル 8-139 セグメント範囲指定 B-TREE インデックスと TARGET インデックス 8-118 STAR インデックス 8-120 セグメント範囲の変更、STAR イン デックス 8-24 接続詞、論理 3-17 セルフ結合 説明 7-23 相関名 7-14 ゼロ除算 9-8 そ 相関サブクエリ 7-72 相関条件 2-6 相関名 7-73 セルフ結合 7-14 テーブル 2-6 相互参照、相関条件 7-72 ソフトウェア要件 4 た 代替テーブル名 7-14 代入 数値 2-27 日付時間 2-26 文字 2-26 タイムスタンプ リテラル 非標準 C-8 ANSI SQL-92 標準 2-10 多項式 3-5 タスク権限 SQL の実行に必要なタスク権 限 1-9 12 SQL Reference Guide F G H は行 I J ま行 K L や行 M N O ら行 P Q R S T U V W X Y わ行 定義 8-203 取消 8-224 付与 8-201 単項演算子 3-7 単項式 3-4 単純なテーブル 7-18 ち 直積 演算の防止 9-11 クロス結合による演算 7-12 つ 通知メッセージ、表示制限 9-33 て 定数 10 進数 2-13 数値 2-9 整数 2-12 浮動小数点値 2-14 文字 2-9 ディメンジョン テーブル、「参照先 テーブル」を参照 データ型 10 進数 2-23 CHARACTER 2-16 CREATE TABLE コマンド 8-141 一覧 2-15 互換性 2-26 数値 2-23 日付時間 2-19 浮動小数点 2-24 データ キューブ、シンプル スター スキーマを参照 データベース Aroma 1-14 オブジェクト名 2-3 パスワードの変更 8-207 ユーザの削除 8-226 ユーザの追加 8-207 データベース オブジェクトの命 名 2-3 テーブル 結合 7-7, 7-23 コメント 8-76 削除 8-185 作成 8-137 作成、名前付きセグメン ト 8-150 ∼ 8-153 参照先テーブル 1-5 参照元テーブル 1-5 システム 1-9 集約 8-167, 8-170, 8-187 代替テーブル名 7-14 チェック 8-99, 9-9 テンポラリ 8-160, 9-67 名前の変更 8-77 派生 7-23 変更 8-72 ∼ 8-84 命名 2-3 リレーショナル データベー ス 1-5 テーブル結合 7-7, 7-23 FROM 句指定 7-24 WHERE 句指定 7-37 外部結合 7-8 クロス結合 7-12 結合指定 7-7 構文 7-24 セルフ結合 7-14 直積 9-11 定義 7-23 テーブル参照 7-23 内部結合 7-7 テーブル サブクエリ、定義 7-69 テーブル参照 FROM 句 7-23 構文 7-13, 7-22 派生テーブル 7-23 テーブル式、クエリ式を参照 テーブルの行のソート 7-55 テーブル結合 システム テーブル 7-27 デフォルト ドメイン TARGET イン デックス 8-125 テリトリ、スカラ関数の結果 5-59 テンポラリ テーブル、作成 8-160 と 等価結合 7-7 Z 記号 数字 A B C あ行 か行 さ行 D た行 E F な行 動的統計テーブル (DST) 9-51 読者 対象読者 3 特権、「オブジェクト特権」を参照 ドメイン、定義 8-107 ドメイン サイズ、TARGET イン デックス 8-125 な 内部結合 7-7 長さ、文字列定数 2-9 は バージョン ログ CLEAN VERSION LOG 8-11 CREATE VERSION LOG 8-8 DROP VERSION LOG 8-9 パーセントのワイルドカード文 字 3-16 パーティション、OLAP 6-7 パーティション化した並列集 約 9-43 ハイブリッド ターゲット インデッ クス、「TARGET インデックス、 デフォルト ドメイン」を参照 ハイブリッド ハッシュ結合、並 列 9-40 パスワード 新規ユーザの追加 8-210 シングルバイト文字に制限 2-3 変更 8-210 派生ディメンジョン、事前計算 ビュー 8-170 派生テーブル 7-15 構文 7-23 例 7-26 破損したセグメント 8-186 ハッシュ結合、並列 9-40 パフォーマンス モニタ ON または OFF に設定 9-44 デーモンの開始と停止 8-68 統計のクリア 8-70 パラメータ、マクロ 8-128 範囲指定、「列参照の解決」を参照 G H は行 I J ま行 K L や行 M N O ら行 P Q R S T U V W X Y Z わ行 ひ 比較 述部 3-10, 3-11 数値 2-28 日付時間 2-27 文字 2-27 光ディスク アクセス 9-36 インデックスの選択 9-27 セグメントの移動 8-51 非結合クエリ式 7-4 左外部結合、構文 7-11 日付時間スカラ関数 CURRENT_DATE 5-60 CURRENT_TIME 5-60 CURRENT_TIMESTAMP 5-60 DATE 5-61 DATEADD 5-62 DATEDIFF 5-63 DATENAME 5-64 EXTRACT 5-66 TIME 5-68 TIMESTAMP 5-69 TO_CHAR 5-70 日付時間定数 ANSI SQL-92 標準 2-10 日付時間データ型 2-19 DATEPART 関数 C-9 日付時間リテラル 非標準 C-1 日付フィールド EXTRACT 5-66 定義 5-58 日付フィールドの抽出 (EXTRACT) 5-58 日付リテラル ANSI SQL-92 標準 2-10 非標準 C-2 非等価結合、クロス結合として実 行 9-12 ビュー 1-6 コメントの割り当て 8-94 削除 8-187 作成 8-163 事前計算 8-163, 8-168, 8-170, 9-70 命名 2-3 表記規則 構文ダイアグラム 7 構文の規則 6 マニュアル 5 表示関数、「RISQL 表示関数」を参 照 表領域、「セグメント」を参照 ふ ファイル名、シングルバイト文字 に制限 2-3 ファクト テーブル、「参照元テーブ ル」を参照 フィル ファクタ、CREATE INDEX コマンド 8-124 フォーリン キー 1-7 更新時の制約 8-234 制約名 8-111, 8-146 定義 8-147 物理格納ユニット 拡張サイズ 8-50, 8-135 最大サイズ 8-49, 8-135 シーケンス ID 8-49 初期サイズ 8-53, 8-135 名前 8-135 パス名 8-50 不定の値、評価 2-25 浮動小数点定数 2-14 プライベート マクロ 8-128 プライマリ キー 1-7, 8-144 REFERENCE 句、CREATE TABLE コマンド 8-144 更新時の制約 8-234 制約名 8-145 列の指定 8-145 フル外部結合、構文 7-11 プロセス クエリあたりのプロセス数 9-50 並列クエリへの割り当て 9-24 分析関数 6-3 ∼ 6-69 へ 平均、移動 6-52 並列クエリ、タスクの割り当 て 9-24 並列集約 9-43 並列集約操作 9-39 並列ハッシュ結合 9-40 索引 13 記号 数字 A B C あ行 か行 さ行 D た行 変数、構文ダイアグラム 9 ま マージン、サンプリング 7-32 マクロ PUBLIC 8-128 埋め込みマクロ 8-130 カテゴリ 8-129 コメント 8-17, 8-130 削除 8-128, 8-180 作成 8-127 定義 1-11 パラメータ 8-128 プライべート 8-128 命名 2-3 マニュアル IBM Red Brick Warehouse のリス ト 11 オンライン 13 み 右外部結合、構文 7-11 ミラー テーブル、「参照先テーブ ル」を参照 め E F な行 G H は行 I J ま行 K L や行 M N O ら行 POSITION 5-42 POSITIONB 5-44 RTRIM 5-45 STRING 5-47 SUBSTR 5-50, 5-52, 5-53 TRIM 5-54 UPPER 5-56 文字列定数 一重引用符 2-9 大文字と小文字の区別 2-9 長さ 2-9 ゆ ユーザ コメントの割り当て 8-93 セッション優先順位の割り当 て 8-93 データベースから削除 8-226 データベースへの追加 8-207 パスワードの変更 8-207 ユーザ作成ロール 削除 8-181 作成 8-131 取消 8-224 付与 8-201 ユーザ名、命名 2-3 優先順位 3-7 算術演算子 3-7 論理接続詞 3-18 よ 文字データ ESCAPE 3-16 空の文字列 2-9 シングルバイトとマルチバイ ト 2-3 長さ 2-16, 8-142 日付時間の変換 5-64 ワイルドカード 3-16 文字データ型 2-16, 2-26 文字列スカラ関数 CONCAT 5-35, 5-36, 5-38 LOWER 5-39 LTRIM 5-40 14 SQL Reference Guide Q R S T U V W X Y わ行 文字の長さ 2-9 リレーショナル データベースの テーブル 1-5 る 累積合計 OLAP の例 6-41 RISQL 6-48 れ 明示的なテーブル 7-18 メモリ調整パラメータ 9-49 も P 予想されるドメイン サイズ 8-107 予約語 B-1 ら ラグ機能、OLAP 6-36 り リテラル 10 進数 2-13 整数 2-12 日付時間 2-9, 2-10 文字 2-9 列 REFCHECK モードの変更 8-83, 8-87, 8-91 SET 値 8-231 エリアス 2-6, 7-19 既存列の変更 8-82 コメント 8-85 削除 8-74, 8-81 修飾名 2-7, 7-24 追加 8-74, 8-78 定義 8-138 テーブルから検索指定 7-17 名前 8-138 名前の変更 8-83 変更 8-82 列関数 4-4 列参照の解決 7-73 列指定による結合 7-12, 7-24 ろ ローカル インデックス RANGE LIKE SEGMENT 句 8-28 作成 8-116 セグメントのアタッチ 8-22 ローカル述部 9-64 ロール コメントの割り当て 8-19 削除 8-181 作成 8-131 取消 8-224 付与 8-201, 8-208 命名 2-3 ロール ベースのセキュリティ 1-9 論理、3 値 2-25 Z 記号 数字 A B C あ行 か行 さ行 D た行 E F な行 G H は行 I J ま行 K L や行 M N O ら行 P Q R S T U V W X Y Z わ行 論理接続詞 3-17 わ ワイルドカード文字 3-16 索引 15