1632
IBM ® DB2 ® ユニバーサル・データベース SQL 解説書 バージョン 7 SC88-8540-01 (英文原典:SC09-2974-01)

SQL 解説書 - TOK2SQL 解説書 - TOK2 ... 2

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

  • IBM®

    DB2®

    ユニバーサル・データベース

    SQL 解説書

    バージョン 7

    SC88-8540-01

    (英文原典:SC09-2974-01)

    ���

  • IBM®

    DB2®

    ユニバーサル・データベース

    SQL 解説書

    バージョン 7

    SC88-8540-01

    (英文原典:SC09-2974-01)

    ���

  • ご注意!本書、および本書がサポートする製品をご使用になる前に、 1571ページの『付録S. 特記事項』にある一般的な情報を必ずお読みください。

    本書には、IBM の専有情報が含まれています。その情報は、使用許諾条件に基づき提供され、著作権により保護されています。本書に記載される情報には、いかなる製品の保証も含まれていません。また、本書で提供されるいかなる記述も、製品保証として解釈すべきではありません。

    本マニュアルに関するご意見やご感想は、次の URL からお送りください。今後の参考にさせていただきます。

    http://www.ibm.com/jp/manuals/main/mail.html

    なお、日本 IBM 発行のマニュアルはインターネット経由でもご購入いただけます。詳しくは

    http://www.ibm.com/jp/manuals/ の「ご注文について」をご覧ください。

    (URL は、変更になる場合があります)

     原 典: SC09-2974-01IBM® DB2® Universal Database

    SQL Reference

    Version 7

     発 行: 日本アイ・ビー・エム株式会社

     担 当: ナショナル・ランゲージ・サポート

    第1刷 2001.8

    この文書では、平成明朝体™W3、平成明朝体™W9、平成角ゴシック体™W3、平成角ゴシック体™W5、および平成角ゴシック体™W7を使用しています。この(書体*)は、(財) 日本規格協会と使用契約を締結し使用しているものです。フォントとして無断複製することは禁止されています。

    注* 平成明朝体™W3、平成明朝体™W9、平成角ゴシック体™W3、平成角ゴシック体™W5、平成角ゴシック体™W7

    © Copyright International Business Machines Corporation 1993, 2001. All rights reserved.

    Translation: © Copyright IBM Japan 2001

    注注注注: この PDFは同じ資料番号のドキュメントを日本語検索可能にしたものです。以前のものと内容に違いはありません。

  • 目次

    第1章 入門 . . . . . . . . . . . . 1本書の対象読者 . . . . . . . . . . . 1本書の使用法 . . . . . . . . . . . . 1本書の構成 . . . . . . . . . . . . 1

    構文図の見方 . . . . . . . . . . . . 3本書の表記規則 . . . . . . . . . . . 5エラー条件 . . . . . . . . . . . . 5強調表記の規則 . . . . . . . . . . 5

    関連資料 . . . . . . . . . . . . . 5

    第2章 概念 . . . . . . . . . . . . 9リレーショナル・データベースの定義 . . . . 9構造化照会言語 (SQL) . . . . . . . . . 9許可と特権 . . . . . . . . . . . . 10スキーマ . . . . . . . . . . . . . 12スキーマの使用の制御. . . . . . . . 12

    表 . . . . . . . . . . . . . . . 13視点. . . . . . . . . . . . . . . 14別名. . . . . . . . . . . . . . . 15索引. . . . . . . . . . . . . . . 15キー. . . . . . . . . . . . . . . 15固有キー . . . . . . . . . . . . 16基本キー . . . . . . . . . . . . 16外部キー . . . . . . . . . . . . 16区分化キー . . . . . . . . . . . 16

    制約. . . . . . . . . . . . . . . 16固有制約 . . . . . . . . . . . . 17参照制約 . . . . . . . . . . . . 17表検査制約 . . . . . . . . . . . 20

    分離レベル . . . . . . . . . . . . 21反復可能読み取り (RR) . . . . . . . 22読み取り固定 (RS) . . . . . . . . . 22カーソル固定 (CS) . . . . . . . . . 23非コミット読み取り (UR) . . . . . . 23分離レベルの比較 . . . . . . . . . 24

    照会. . . . . . . . . . . . . . . 24表式. . . . . . . . . . . . . . . 24共通表式 . . . . . . . . . . . . 24

    アプリケーションのプロセス、並行性、およびリカバリー. . . . . . . . . . . . 24対話式 SQL . . . . . . . . . . . . 27

    組み込み SQL . . . . . . . . . . . 27静的 SQL . . . . . . . . . . . . 27動的 SQL . . . . . . . . . . . . 28

    DB2 コール・レベル・インターフェース(CLI) と Open Database Connectivity (ODBC) . 28JDBC (Java Database Connectivity) と JavaEmbedded SQL (SQLJ) プログラム . . . . 29パッケージ . . . . . . . . . . . . 29カタログ視点. . . . . . . . . . . . 30文字変換 . . . . . . . . . . . . . 30文字セットとコード・ページ . . . . . 31コード・ページ属性 . . . . . . . . 32

    イベント・モニター . . . . . . . . . 33トリガー . . . . . . . . . . . . . 34表スペースおよび他のストレージ構造 . . . 35複数の区分にわたるデータの区分化 . . . . 37区分化マップ. . . . . . . . . . . 38表の連結 . . . . . . . . . . . . 38

    分散リレーショナル・データベース . . . . 39アプリケーション・サーバー . . . . . 40CONNECT (タイプ 1) と CONNECT (タイプ 2) . . . . . . . . . . . . . 41リモート作業単位 . . . . . . . . . 41アプリケーション制御の分散作業単位 . . 46データの表現についての考慮事項 . . . . 51

    DB2 連合システム . . . . . . . . . . 51統合サーバー、連合データベース、およびデータ・ソース . . . . . . . . . . 51DB2 連合システムで実行されるタスク . . 52ラッパーおよびラッパー・モジュール . . 54サーバー定義とサーバー・オプション . . 54ユーザー・マッピングとユーザー・オプション. . . . . . . . . . . . . . 57データ・タイプ・マッピング . . . . . 58関数マッピング、関数テンプレート、および関数マッピング・オプション. . . . . 58ニックネームと列オプション . . . . . 59索引指定 . . . . . . . . . . . . 60分散要求 . . . . . . . . . . . . 61補償. . . . . . . . . . . . . . 62パススルー . . . . . . . . . . . 62

    © Copyright IBM Corp. 1993, 2001 iii

    |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

    ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

  • 第3章 言語エレメント . . . . . . . . 65文字. . . . . . . . . . . . . . . 65

    MBCS についての考慮事項 . . . . . . 66トークン . . . . . . . . . . . . . 66

    MBCS についての考慮事項 . . . . . . 67ID . . . . . . . . . . . . . . . 67

    SQL ID . . . . . . . . . . . . 67ホスト ID . . . . . . . . . . . . 68

    命名規則および暗黙的オブジェクト名の修飾 68別名. . . . . . . . . . . . . . . 73許可 ID と許可名 . . . . . . . . . . 74実行時における動的 SQL の特性 . . . . 75許可 ID とステートメントの準備 . . . . 77

    データ・タイプ . . . . . . . . . . . 77ヌル値 . . . . . . . . . . . . . 78ラージ・オブジェクト (LOB) . . . . . 78文字ストリング . . . . . . . . . . 80漢字ストリング . . . . . . . . . . 822 進ストリング . . . . . . . . . . 83数値. . . . . . . . . . . . . . 83日付 / 時刻の値 . . . . . . . . . . 84DATALINK 値 . . . . . . . . . . 87ユーザー定義タイプ . . . . . . . . 89

    データ・タイプのプロモーション . . . . . 92データ・タイプ間のキャスト . . . . . . 93割り当てと比較 . . . . . . . . . . . 96数値の割り当て . . . . . . . . . . 97ストリング割り当て . . . . . . . . 98日付 / 時刻の割り当て . . . . . . . 101DATALINK の割り当て . . . . . . . 101ユーザー定義タイプの割り当て . . . . 103参照タイプの割り当て . . . . . . . 104数値の比較 . . . . . . . . . . . 104ストリング比較 . . . . . . . . . 104日付 / 時刻の比較 . . . . . . . . 108ユーザー定義タイプの比較 . . . . . . 108参照タイプの比較 . . . . . . . . . 109

    結果データ・タイプの規則 . . . . . . . 110文字ストリング . . . . . . . . . 110漢字ストリング . . . . . . . . . 1112 進ラージ・オブジェクト (BLOB) . . . 111数値 . . . . . . . . . . . . . 112DATE (日付) . . . . . . . . . . 112TIME (時刻) . . . . . . . . . . 112TIMESTAMP (タイム・スタンプ) . . . 113DATALINK (データ・リンク) . . . . . 113

    ユーザー定義タイプ . . . . . . . . 113結果のヌル可能属性 . . . . . . . . 113

    ストリング変換の規則 . . . . . . . . 114区分の互換性 . . . . . . . . . . . 116定数 . . . . . . . . . . . . . . 117整数定数 . . . . . . . . . . . . 118浮動小数点定数 . . . . . . . . . 11810 進定数 . . . . . . . . . . . 118文字ストリング定数 . . . . . . . . 11816 進定数 . . . . . . . . . . . 119漢字ストリング定数 . . . . . . . . 119ユーザー定義タイプを伴う定数の使用 . . 120

    特殊レジスター . . . . . . . . . . 120CLIENT ACCTNG. . . . . . . . . 120CLIENT APPLNAME. . . . . . . . 121CLIENT USERID . . . . . . . . . 121CLIENT WRKSTNNAME . . . . . . 122CURRENT DATE . . . . . . . . . 122CURRENT DEFAULT TRANSFORMGROUP . . . . . . . . . . . . 123CURRENT DEGREE . . . . . . . . 123CURRENT EXPLAIN MODE . . . . . 124CURRENT EXPLAIN SNAPSHOT . . . 125CURRENT NODE . . . . . . . . . 126CURRENT PATH . . . . . . . . . 127CURRENT QUERY OPTIMIZATION . . 128CURRENT REFRESH AGE. . . . . . 128CURRENT SCHEMA . . . . . . . . 129CURRENT SERVER . . . . . . . . 129CURRENT TIME . . . . . . . . . 129CURRENT TIMESTAMP . . . . . . 130CURRENT TIMEZONE . . . . . . . 130USER . . . . . . . . . . . . . 131

    列名 . . . . . . . . . . . . . . 131修飾子付き列名 . . . . . . . . . 132相関名 . . . . . . . . . . . . 132あいまいさを避けるための列名修飾子 . . 134相関参照における列名修飾子 . . . . . 136

    ホスト変数の参照 . . . . . . . . . . 138動的 SQL におけるホスト変数 . . . . 138BLOB、CLOB、および DBCLOB のホスト変数の参照 . . . . . . . . . . 141ロケーター変数の参照 . . . . . . . 141BLOB、CLOB、および DBCLOB ファイル参照変数の参照 . . . . . . . . . 142構造タイプ・ホスト変数の参照 . . . . 145

    iv SQL 解説書

    ||||||||

  • 関数 . . . . . . . . . . . . . . 146外部、SQL およびソース・ユーザー定義関数 . . . . . . . . . . . . . 146スカラー、列、行、および表のユーザー定義関数 . . . . . . . . . . . . 147関数シグニチャー . . . . . . . . . 147SQL パス . . . . . . . . . . . 148関数解決 . . . . . . . . . . . . 148関数の呼び出し . . . . . . . . . 152

    メソッド . . . . . . . . . . . . . 153外部および SQL ユーザー定義メソッド 154メソッド・シグニチャー . . . . . . 154メソッドの呼び出し . . . . . . . . 155メソッド解決 . . . . . . . . . . 155最適な選択をするための方式 . . . . . 157メソッド解決の例 . . . . . . . . . 157メソッドの呼び出し . . . . . . . . 158

    保守的バインド・セマンティクス . . . . 159式 . . . . . . . . . . . . . . . 161演算子を使用しない式 . . . . . . . 162連結演算子 . . . . . . . . . . . 162算術演算子を使用する式 . . . . . . 1652 つの整数オペランド . . . . . . . 166整数と 10 進数オペランド . . . . . . 1662 つの 10 進数オペランド . . . . . . 166SQL での 10 進数演算 . . . . . . . 167浮動小数点オペランド . . . . . . . 167オペランドとしてのユーザー定義タイプ 167スカラー全選択 . . . . . . . . . 168日付 / 時刻演算と期間 . . . . . . . 168SQL における日付 / 時刻の算術演算 . . 169演算の優先順位 . . . . . . . . . 174CASE 式 . . . . . . . . . . . . 174CAST 指定 . . . . . . . . . . . 176参照解除操作 . . . . . . . . . . 179OLAP 関数 . . . . . . . . . . . 181メソッドの呼び出し . . . . . . . . 187サブタイプの扱い . . . . . . . . . 188シーケンス参照 . . . . . . . . . 189

    述部 . . . . . . . . . . . . . . 194基本述部 . . . . . . . . . . . . 195比較述部 . . . . . . . . . . . . 196BETWEEN 述部 . . . . . . . . . 199EXISTS 述部 . . . . . . . . . . 201IN 述部 . . . . . . . . . . . . 202LIKE 述部 . . . . . . . . . . . 205

    NULL 述部 . . . . . . . . . . . 210TYPE 述部 . . . . . . . . . . . 211

    検索条件 . . . . . . . . . . . . . 213例 . . . . . . . . . . . . . . 215

    第4章 関数 . . . . . . . . . . . . 217列関数 . . . . . . . . . . . . . 234

    AVG . . . . . . . . . . . . . 235CORRELATION . . . . . . . . . 237COUNT . . . . . . . . . . . . 238COUNT_BIG . . . . . . . . . . 240COVARIANCE . . . . . . . . . . 242GROUPING . . . . . . . . . . . 243MAX . . . . . . . . . . . . . 245MIN . . . . . . . . . . . . . 247REGRESSION 関数 . . . . . . . . 249STDDEV . . . . . . . . . . . . 252SUM . . . . . . . . . . . . . 253VARIANCE . . . . . . . . . . . 254

    スカラー関数 . . . . . . . . . . . 255ABS または ABSVAL . . . . . . . 256ACOS . . . . . . . . . . . . . 257ASCII . . . . . . . . . . . . . 258ASIN . . . . . . . . . . . . . 259ATAN. . . . . . . . . . . . . 260ATAN2 . . . . . . . . . . . . 261BIGINT . . . . . . . . . . . . 262BLOB . . . . . . . . . . . . . 263CEILING または CEIL . . . . . . . 264CHAR. . . . . . . . . . . . . 265CHR . . . . . . . . . . . . . 270CLOB . . . . . . . . . . . . . 271COALESCE . . . . . . . . . . . 272CONCAT. . . . . . . . . . . . 273COS . . . . . . . . . . . . . 274COT . . . . . . . . . . . . . 275DATE . . . . . . . . . . . . . 276DAY . . . . . . . . . . . . . 277DAYNAME . . . . . . . . . . . 278DAYOFWEEK . . . . . . . . . . 279DAYOFWEEK_ISO . . . . . . . . 280DAYOFYEAR . . . . . . . . . . 281DAYS . . . . . . . . . . . . . 282DBCLOB . . . . . . . . . . . . 283DECIMAL . . . . . . . . . . . 284DECRYPT_BIN および DECRYPT_CHAR 287

    目次 v

    ||

    ||

    ||

  • DEGREES . . . . . . . . . . . 289DEREF . . . . . . . . . . . . 290DIFFERENCE . . . . . . . . . . 291DIGITS . . . . . . . . . . . . 292DLCOMMENT . . . . . . . . . . 293DLLINKTYPE . . . . . . . . . . 294DLURLCOMPLETE . . . . . . . . 295DLURLPATH . . . . . . . . . . 296DLURLPATHONLY . . . . . . . . 297DLURLSCHEME . . . . . . . . . 298DLURLSERVER . . . . . . . . . 299DLVALUE . . . . . . . . . . . 300DOUBLE . . . . . . . . . . . . 302ENCRYPT . . . . . . . . . . . 304EVENT_MON_STATE . . . . . . . 307EXP . . . . . . . . . . . . . 308FLOAT . . . . . . . . . . . . 309FLOOR . . . . . . . . . . . . 310GETHINT . . . . . . . . . . . 311GENERATE_UNIQUE . . . . . . . 312GRAPHIC . . . . . . . . . . . 314HEX . . . . . . . . . . . . . 315HOUR. . . . . . . . . . . . . 317IDENTITY_VAL_LOCAL . . . . . . 318INSERT . . . . . . . . . . . . 323INTEGER . . . . . . . . . . . 325JULIAN_DAY . . . . . . . . . . 326LCASE または LOWER . . . . . . . 327LCASE (SYSFUN スキーマ) . . . . . 328LEFT . . . . . . . . . . . . . 329LENGTH . . . . . . . . . . . . 330LN . . . . . . . . . . . . . . 332LOCATE . . . . . . . . . . . . 333LOG . . . . . . . . . . . . . 334LOG10 . . . . . . . . . . . . 335LONG_VARCHAR. . . . . . . . . 336LONG_VARGRAPHIC . . . . . . . 337LTRIM . . . . . . . . . . . . 338LTRIM (SYSFUN スキーマ) . . . . . 339MICROSECOND . . . . . . . . . 340MIDNIGHT_SECONDS . . . . . . . 341MINUTE . . . . . . . . . . . . 342MOD . . . . . . . . . . . . . 343MONTH . . . . . . . . . . . . 344MONTHNAME . . . . . . . . . . 345MQPUBLISH . . . . . . . . . . 346

    MQREAD . . . . . . . . . . . 349MQRECEIVE . . . . . . . . . . 351MQSEND . . . . . . . . . . . 353MQSUBSCRIBE . . . . . . . . . 355MQUNSUBSCRIBE . . . . . . . . 357MULTIPLY_ALT . . . . . . . . . 359NODENUMBER . . . . . . . . . 361NULLIF . . . . . . . . . . . . 363PARTITION . . . . . . . . . . . 364POSSTR . . . . . . . . . . . . 366POWER . . . . . . . . . . . . 368QUARTER . . . . . . . . . . . 369RADIANS . . . . . . . . . . . 370RAISE_ERROR . . . . . . . . . . 371RAND. . . . . . . . . . . . . 373REAL . . . . . . . . . . . . . 374REC2XML . . . . . . . . . . . 375REPEAT . . . . . . . . . . . . 380REPLACE . . . . . . . . . . . 381RIGHT . . . . . . . . . . . . 382ROUND . . . . . . . . . . . . 383RTRIM . . . . . . . . . . . . 385RTRIM (SYSFUN スキーマ) . . . . . 386SECOND . . . . . . . . . . . . 387SIGN . . . . . . . . . . . . . 388SIN . . . . . . . . . . . . . 389SMALLINT . . . . . . . . . . . 390SOUNDEX . . . . . . . . . . . 391SPACE . . . . . . . . . . . . 392SQRT . . . . . . . . . . . . . 393SUBSTR . . . . . . . . . . . . 394TABLE_NAME . . . . . . . . . . 398TABLE_SCHEMA . . . . . . . . . 400TAN . . . . . . . . . . . . . 402TIME . . . . . . . . . . . . . 403TIMESTAMP . . . . . . . . . . 404TIMESTAMP_ISO . . . . . . . . . 406TIMESTAMPDIFF . . . . . . . . . 407TRANSLATE . . . . . . . . . . 409TRUNCATE または TRUNC . . . . . 412TYPE_ID . . . . . . . . . . . . 413TYPE_NAME . . . . . . . . . . 414TYPE_SCHEMA . . . . . . . . . 415UCASE または UPPER . . . . . . . 416VALUE . . . . . . . . . . . . 417VARCHAR . . . . . . . . . . . 418

    vi SQL 解説書

    ||

    ||

    ||

    ||

    ||||||||||||

    ||

    ||

  • VARGRAPHIC . . . . . . . . . . 420WEEK . . . . . . . . . . . . 422WEEK_ISO . . . . . . . . . . . 423YEAR . . . . . . . . . . . . . 424

    表関数 . . . . . . . . . . . . . 425MQREADALL . . . . . . . . . . 426MQRECEIVEALL . . . . . . . . . 428SQLCACHE_SNAPSHOT . . . . . . 431

    プロシージャー . . . . . . . . . . 432GET_ROUTINE_SAR . . . . . . . . 433PUT_ROUTINE_SAR . . . . . . . . 434

    ユーザー定義関数 . . . . . . . . . . 436

    第5章 照会 . . . . . . . . . . . . 439副選択 . . . . . . . . . . . . . 440

    SELECT 文節 . . . . . . . . . . 441FROM 文節 . . . . . . . . . . . 445表参照 . . . . . . . . . . . . 446結合表 . . . . . . . . . . . . 450WHERE 文節 . . . . . . . . . . 452GROUP BY 文節 . . . . . . . . . 453HAVING 文節 . . . . . . . . . . 460

    副選択の例 . . . . . . . . . . . . 461結合の例 . . . . . . . . . . . . . 464グループ化集合、CUBE、および ROLLUPの例 . . . . . . . . . . . . . . 468全選択 . . . . . . . . . . . . . 477全選択の例 . . . . . . . . . . . 480

    選択ステートメント . . . . . . . . . 482共通表式 . . . . . . . . . . . . 483ORDER BY 文節 . . . . . . . . . 486UPDATE 文節 . . . . . . . . . . 489READ ONLY 文節 . . . . . . . . 490FETCH FIRST 文節 . . . . . . . . 491OPTIMIZE FOR 文節 . . . . . . . 492選択ステートメントの例 . . . . . . 493

    第6章 SQL ステートメント . . . . . . 495SQL ステートメントの呼び出し方法 . . . 499アプリケーション・プログラムへのステートメントの組み込み . . . . . . . . 500動的な準備と実行 . . . . . . . . . 501選択ステートメントの静的呼び出し . . . 502選択ステートメントの動的呼び出し . . . 502対話式呼び出し . . . . . . . . . 503他のホスト・システムでの SQL の使用 503

    SQL 戻りコード . . . . . . . . . . 504SQLCODE . . . . . . . . . . . 504SQLSTATE . . . . . . . . . . . 505

    SQL コメント . . . . . . . . . . . 506ALTER BUFFERPOOL . . . . . . . . 507ALTER NICKNAME . . . . . . . . . 509ALTER NODEGROUP . . . . . . . . 513ALTER SEQUENCE . . . . . . . . . 517ALTER SERVER . . . . . . . . . . 521ALTER TABLE . . . . . . . . . . 525ALTER TABLESPACE . . . . . . . . 554ALTER TYPE (構造化) . . . . . . . . 560ALTER USER MAPPING . . . . . . . 567ALTER VIEW . . . . . . . . . . . 570BEGIN DECLARE SECTION . . . . . . 572CALL . . . . . . . . . . . . . . 575CLOSE . . . . . . . . . . . . . 583COMMENT . . . . . . . . . . . . 585COMMIT. . . . . . . . . . . . . 596複合 SQL (動的) . . . . . . . . . . 598複合 SQL (組み込み) . . . . . . . . 604CONNECT (タイプ 1) . . . . . . . . 609CONNECT (タイプ 2) . . . . . . . . 618CREATE ALIAS . . . . . . . . . . 626CREATE BUFFERPOOL. . . . . . . . 629CREATE DISTINCT TYPE . . . . . . . 632CREATE EVENT MONITOR . . . . . . 639CREATE FUNCTION. . . . . . . . . 649CREATE FUNCTION (外部スカラー) . . . 650CREATE FUNCTION (外部表) . . . . . 675CREATE FUNCTION (OLE DB 外部表) . . 691CREATE FUNCTION (ソースまたはテンプレート) . . . . . . . . . . . . . . 699CREATE FUNCTION (SQL スカラー、表、または行) . . . . . . . . . . . . 709CREATE FUNCTION MAPPING . . . . . 716CREATE INDEX . . . . . . . . . . 721CREATE INDEX EXTENSION . . . . . 728CREATE METHOD . . . . . . . . . 735CREATE NICKNAME . . . . . . . . 740CREATE NODEGROUP . . . . . . . . 746CREATE PROCEDURE . . . . . . . . 749CREATE SCHEMA . . . . . . . . . 766CREATE SEQUENCE . . . . . . . . 770CREATE SERVER . . . . . . . . . 775CREATE TABLE . . . . . . . . . . 779

    目次 vii

    ||||

    ||||

    ||

    ||

    ||

    ||

  • CREATE TABLESPACE . . . . . . . . 830CREATE TRANSFORM . . . . . . . . 840CREATE TRIGGER . . . . . . . . . 846CREATE TYPE (構造化) . . . . . . . 858CREATE TYPE MAPPING . . . . . . . 883CREATE USER MAPPING . . . . . . . 888CREATE VIEW . . . . . . . . . . 890CREATE WRAPPER . . . . . . . . . 906DECLARE CURSOR . . . . . . . . . 908DECLARE GLOBAL TEMPORARY TABLE 914DELETE . . . . . . . . . . . . . 923DESCRIBE . . . . . . . . . . . . 929DISCONNECT . . . . . . . . . . . 934DROP . . . . . . . . . . . . . . 937END DECLARE SECTION . . . . . . . 964EXECUTE . . . . . . . . . . . . 966EXECUTE IMMEDIATE. . . . . . . . 971EXPLAIN . . . . . . . . . . . . 974FETCH . . . . . . . . . . . . . 979FLUSH EVENT MONITOR. . . . . . . 982FREE LOCATOR . . . . . . . . . . 983GRANT (データベース権限) . . . . . . 984GRANT (索引特権) . . . . . . . . . 987GRANT (パッケージ特権) . . . . . . . 989GRANT (スキーマ特権) . . . . . . . . 992GRANT (シーケンス特権) . . . . . . . 995GRANT (サーバー特権) . . . . . . . . 996GRANT (表、視点、またはニックネーム特権) . . . . . . . . . . . . . . . 998GRANT (表スペース特権). . . . . . . 1006INCLUDE . . . . . . . . . . . . 1008INSERT . . . . . . . . . . . . . 1010LOCK TABLE . . . . . . . . . . 1019OPEN . . . . . . . . . . . . . 1021PREPARE . . . . . . . . . . . . 1026REFRESH TABLE . . . . . . . . . 1037RELEASE (接続) . . . . . . . . . . 1038RELEASE SAVEPOINT . . . . . . . 1040RENAME TABLE . . . . . . . . . 1041RENAME TABLESPACE . . . . . . . 1043REVOKE (データベース権限) . . . . . 1045REVOKE (索引特権) . . . . . . . . 1049REVOKE (パッケージ特権) . . . . . . 1051REVOKE (スキーマ特権) . . . . . . . 1054REVOKE (サーバー特権) . . . . . . . 1056

    REVOKE (表、視点、またはニックネーム特権) . . . . . . . . . . . . . . 1058REVOKE (表スペース特権) . . . . . . 1064ROLLBACK . . . . . . . . . . . 1066SAVEPOINT . . . . . . . . . . . 1069SELECT. . . . . . . . . . . . . 1071SELECT INTO . . . . . . . . . . 1072SET CONNECTION . . . . . . . . . 1074SET CURRENT DEFAULT TRANSFORMGROUP . . . . . . . . . . . . . 1076SET CURRENT DEGREE . . . . . . . 1078SET CURRENT EXPLAIN MODE . . . . 1080SET CURRENT EXPLAIN SNAPSHOT . . 1083SET CURRENT PACKAGESET . . . . . 1085SET CURRENT QUERY OPTIMIZATION 1087SET CURRENT REFRESH AGE . . . . 1090SET ENCRYPTION PASSWORD . . . . 1092SET EVENT MONITOR STATE. . . . . 1094SET INTEGRITY. . . . . . . . . . 1096SET PASSTHRU . . . . . . . . . . 1106SET PATH . . . . . . . . . . . . 1108SET SCHEMA . . . . . . . . . . 1111SET SERVER OPTION. . . . . . . . 1113SET 変数 . . . . . . . . . . . . 1115UPDATE . . . . . . . . . . . . 1120VALUES . . . . . . . . . . . . 1130VALUES INTO . . . . . . . . . . 1131WHENEVER . . . . . . . . . . . 1133

    第7章 SQL 制御ステートメント . . . . 1135SQL プロシージャー・ステートメント . . 1136ALLOCATE CURSOR ステートメント . . 1138割り当てステートメント . . . . . . . 1140ASSOCIATE LOCATORS ステートメント 1142CASE ステートメント . . . . . . . . 1144FOR ステートメント . . . . . . . . 1147GET DIAGNOSTICS ステートメント . . . 1149GOTO ステートメント . . . . . . . . 1151IF ステートメント . . . . . . . . . 1153ITERATE ステートメント. . . . . . . 1155LEAVE ステートメント . . . . . . . 1156LOOP ステートメント . . . . . . . . 1158複合ステートメント (プロシージャー) . . 1160REPEAT ステートメント . . . . . . . 1166RESIGNAL ステートメント . . . . . . 1168RETURN ステートメント . . . . . . . 1171

    viii SQL 解説書

    ||

    ||

    ||

    ||

    ||

    ||

  • SIGNAL ステートメント . . . . . . . 1173WHILE ステートメント . . . . . . . 1176

    付録A. SQL の制限値 . . . . . . . 1179

    付録B. SQL 連絡 (SQLCA). . . . . . 1187SQLCA の対話式表示 . . . . . . . . 1187SQLCA のフィールドの説明 . . . . . . 1187エラー報告の順序 . . . . . . . . . 1191DB2 エンタープライズ拡張エディションでの SQLCA の使用 . . . . . . . . . 1192

    付録C. SQL 記述子域 (SQLDA) . . . . 1193フィールドの説明 . . . . . . . . . 1194

    SQLDA ヘッダーのフィールド . . . . 1195基本 SQLVAR のオカレンスのフィールド. . . . . . . . . . . . . . 1196副次 SQLVAR のオカレンスのフィールド. . . . . . . . . . . . . . 1198

    SQLDA に対する DESCRIBE の効果 . . . 1201SQLTYPE と SQLLEN . . . . . . . . 1203認識されない非サポート SQLTYPE . . 1204パック 10 進数 . . . . . . . . . 120510 進数の SQLLEN フィールド. . . . 1206

    付録D. カタログ視点 . . . . . . . . 1207更新可能なカタログ視点 . . . . . . . 1208カタログ視点の「ロードマップ」 . . . . 1208更新可能なカタログ視点の「ロードマップ」 . . . . . . . . . . . . . . 1210SYSIBM.SYSDUMMY1. . . . . . . . 1212SYSCAT.ATTRIBUTES . . . . . . . . 1213SYSCAT.BUFFERPOOLNODES . . . . . 1215SYSCAT.BUFFERPOOLS . . . . . . . 1216SYSCAT.CASTFUNCTIONS . . . . . . 1217SYSCAT.CHECKS . . . . . . . . . 1218SYSCAT.COLAUTH . . . . . . . . . 1219SYSCAT.COLCHECKS . . . . . . . . 1220SYSCAT.COLDIST . . . . . . . . . 1221SYSCAT.COLOPTIONS. . . . . . . . 1222SYSCAT.COLUMNS. . . . . . . . . 1223SYSCAT.CONSTDEP . . . . . . . . 1228SYSCAT.DATATYPES . . . . . . . . 1229SYSCAT.DBAUTH . . . . . . . . . 1231SYSCAT.EVENTMONITORS . . . . . . 1233SYSCAT.EVENTS . . . . . . . . . 1235SYSCAT.FULLHIERARCHIES . . . . . 1236

    SYSCAT.FUNCDEP . . . . . . . . . 1237SYSCAT.FUNCMAPOPTIONS . . . . . 1238SYSCAT.FUNCMAPPARMOPTIONS . . . 1239SYSCAT.FUNCMAPPINGS . . . . . . 1240SYSCAT.FUNCPARMS . . . . . . . . 1241SYSCAT.FUNCTIONS . . . . . . . . 1243SYSCAT.HIERARCHIES . . . . . . . 1248SYSCAT.INDEXAUTH . . . . . . . . 1249SYSCAT.INDEXCOLUSE . . . . . . . 1250SYSCAT.INDEXDEP . . . . . . . . 1251SYSCAT.INDEXES . . . . . . . . . 1252SYSCAT.INDEXOPTIONS . . . . . . . 1255SYSCAT.KEYCOLUSE . . . . . . . . 1256SYSCAT.NAMEMAPPINGS . . . . . . 1257SYSCAT.NODEGROUPDEF . . . . . . 1258SYSCAT.NODEGROUPS . . . . . . . 1259SYSCAT.PACKAGEAUTH. . . . . . . 1260SYSCAT.PACKAGEDEP . . . . . . . 1261SYSCAT.PACKAGES . . . . . . . . 1262SYSCAT.PARTITIONMAPS . . . . . . 1266SYSCAT.PASSTHRUAUTH . . . . . . 1267SYSCAT.PROCEDURES . . . . . . . 1268SYSCAT.PROCOPTIONS . . . . . . . 1271SYSCAT.PROCPARMOPTIONS . . . . . 1272SYSCAT.PROCPARMS . . . . . . . . 1273SYSCAT.REFERENCES. . . . . . . . 1275SYSCAT.REVTYPEMAPPINGS . . . . . 1276SYSCAT.SCHEMAAUTH . . . . . . . 1278SYSCAT.SCHEMATA . . . . . . . . 1279SYSCAT.SEQUENCES . . . . . . . . 1280SYSCAT.SERVEROPTIONS . . . . . . 1282SYSCAT.SERVERS . . . . . . . . . 1283SYSCAT.STATEMENTS . . . . . . . 1284SYSCAT.TABAUTH . . . . . . . . . 1285SYSCAT.TABCONST . . . . . . . . 1287SYSCAT.TABLES . . . . . . . . . 1288SYSCAT.TABLESPACES . . . . . . . 1292SYSCAT.TABOPTIONS. . . . . . . . 1294SYSCAT.TBSPACEAUTH . . . . . . . 1295SYSCAT.TRIGDEP . . . . . . . . . 1296SYSCAT.TRIGGERS. . . . . . . . . 1297SYSCAT.TYPEMAPPINGS. . . . . . . 1298SYSCAT.USEROPTIONS . . . . . . . 1300SYSCAT.VIEWDEP . . . . . . . . . 1301SYSCAT.VIEWS . . . . . . . . . . 1302SYSCAT.WRAPOPTIONS . . . . . . . 1303

    目次 ix

    ||

  • SYSCAT.WRAPPERS . . . . . . . . 1304SYSSTAT.COLDIST . . . . . . . . . 1305SYSSTAT.COLUMNS . . . . . . . . 1306SYSSTAT.FUNCTIONS . . . . . . . . 1308SYSSTAT.INDEXES . . . . . . . . . 1310SYSSTAT.TABLES . . . . . . . . . 1313

    付録E. 構造タイプで使用するカタログ視点 1315カタログ視点の「ロードマップ」 . . . . 1316OBJCAT.INDEXES . . . . . . . . . 1318OBJCAT.INDEXEXPLOITRULES . . . . 1321OBJCAT.INDEXEXTENSIONDEP . . . . 1322OBJCAT.INDEXEXTENSIONMETHODS 1323OBJCAT.INDEXEXTENSIONPARMS . . . 1324OBJCAT.INDEXEXTENSIONS . . . . . 1325OBJCAT.PREDICATESPECS . . . . . . 1326OBJCAT.TRANSFORMS . . . . . . . 1327

    付録F. 連合システム . . . . . . . . 1329サーバー・タイプ . . . . . . . . . 1329連合システム用の SQL オプション . . . 1330列オプション . . . . . . . . . . 1331関数マッピング・オプション. . . . . 1332サーバー・オプション . . . . . . . 1333ユーザー・オプション . . . . . . . 1339

    デフォルト・データ・タイプ・マッピング 1340DB2 と DB2 ユニバーサル・データベース (OS/390 版) (および DB2 (MVS/ESA版)) のデータ・ソース間のデフォルト・タイプ・マッピング. . . . . . . . 1340DB2 と DB2 ユニバーサル・データベース (AS/400 版) (および DB2 (AS/400版)) のデータ・ソース間のデフォルト・タイプ・マッピング. . . . . . . . 1340DB2 と Oracle のデータ・ソース間のデフォルト・タイプ・マッピング . . . . 1341DB2 と DB2 (VM および VSE 版) (および SQL/DS) のデータ・ソース間のデフォルト・タイプ・マッピング . . . . 1341

    パススルー機能の処理 . . . . . . . . 1341パススルー・セッションにおける SQL処理 . . . . . . . . . . . . . 1342考慮事項と制約事項. . . . . . . . 1342

    付録G. サンプル・データベース表 . . . 1345サンプル・データベース . . . . . . . 1346

    サンプル・データベースの作成 . . . . 1346サンプル・データベースの消去 . . . . 1347CL_SCHED 表 . . . . . . . . . 1347DEPARTMENT 表 . . . . . . . . 1347EMPLOYEE 表 . . . . . . . . . 1347EMP_ACT 表 . . . . . . . . . . 1350EMP_PHOTO 表 . . . . . . . . . 1352EMP_RESUME 表 . . . . . . . . 1352IN_TRAY 表 . . . . . . . . . . 1353ORG 表 . . . . . . . . . . . . 1353PROJECT 表 . . . . . . . . . . 1353SALES 表 . . . . . . . . . . . 1354STAFF 表 . . . . . . . . . . . 1355STAFFG 表 . . . . . . . . . . 1356

    BLOB および CLOB データ・タイプを含むサンプル・ファイル. . . . . . . . . 1357

    Quintana の写真 . . . . . . . . . 1357Quintana の履歴書 . . . . . . . . 1358Nicholls の写真 . . . . . . . . . 1359Nicholls の履歴書 . . . . . . . . 1359Adamson の写真 . . . . . . . . . 1360Adamson の履歴書 . . . . . . . . 1361Walker の写真 . . . . . . . . . 1362Walker の履歴書 . . . . . . . . . 1362

    付録H. 予約スキーマ名と予約語 . . . . 1365予約スキーマ . . . . . . . . . . . 1365予約語 . . . . . . . . . . . . . 1365IBM SQL の予約語 . . . . . . . . . 1366ISO/ANS SQL92 の予約語 . . . . . . 1368

    付録I. 分離レベルの比較 . . . . . . . 1369

    付録J. トリガーと制約の相互作用. . . . 1371

    付録K. Explain 表と定義 . . . . . . 1375EXPLAIN_ARGUMENT 表 . . . . . . 1376EXPLAIN_INSTANCE 表 . . . . . . . 1379EXPLAIN_OBJECT 表 . . . . . . . . 1382EXPLAIN_OPERATOR 表 . . . . . . . 1384EXPLAIN_PREDICATE 表 . . . . . . 1386EXPLAIN_STATEMENT 表 . . . . . . 1388EXPLAIN_STREAM 表. . . . . . . . 1390ADVISE_INDEX 表 . . . . . . . . . 1392ADVISE_WORKLOAD 表 . . . . . . . 1394Explain 表の定義 . . . . . . . . . . 1395

    EXPLAIN_ARGUMENT 表の定義 . . . 1396

    x SQL 解説書

  • EXPLAIN_INSTANCE 表の定義 . . . . 1397EXPLAIN_OBJECT 表の定義 . . . . . 1398EXPLAIN_OPERATOR 表の定義 . . . 1399EXPLAIN_PREDICATE 表の定義 . . . 1400EXPLAIN_STATEMENT 表の定義 . . . 1401EXPLAIN_STREAM 表の定義 . . . . 1402ADVISE_INDEX 表の定義 . . . . . 1403ADVISE_WORKLOAD 表の定義 . . . 1405

    付録L. Explain レジスターの値 . . . . 1407

    付録M. 再帰の例: 部品構成表 . . . . . 1411例 1: 単一レベルの展開 . . . . . . . 1411例 2: 合計型展開 . . . . . . . . . 1413例 3: 深さの制御 . . . . . . . . . 1414

    付録N. 例外表 . . . . . . . . . . 1417例外表の作成規則 . . . . . . . . . 1417例外表の行の処理 . . . . . . . . . 1419例外表の照会 . . . . . . . . . . . 1420

    付録O. 日本語および繁体字中国語 EUCについての考慮事項 . . . . . . . . 1423言語エレメント . . . . . . . . . . 1423文字 . . . . . . . . . . . . . 1423トークン . . . . . . . . . . . 1423ID . . . . . . . . . . . . . 1424データ・タイプ . . . . . . . . . 1424割り当てと比較 . . . . . . . . . 1424結果データ・タイプの規則 . . . . . 1425ストリング変換の規則 . . . . . . . 1425定数 . . . . . . . . . . . . . 1426関数 . . . . . . . . . . . . . 1426式. . . . . . . . . . . . . . 1427

    述部 . . . . . . . . . . . . . 1427関数 . . . . . . . . . . . . . . 1428

    LENGTH . . . . . . . . . . . 1428SUBSTR . . . . . . . . . . . 1428TRANSLATE . . . . . . . . . . 1428VARGRAPHIC . . . . . . . . . 1429

    ステートメント . . . . . . . . . . 1429CONNECT . . . . . . . . . . . 1429PREPARE . . . . . . . . . . . 1429

    付録P. DATALINK での BNF 指定 . . . 1431

    付録Q. 用語集 . . . . . . . . . . 1435

    付録R. DB2 ライブラリーの使用法 . . . 1549DB2 PDF ファイルおよびハードコピー版資料. . . . . . . . . . . . . . . 1549

    DB2 情報 . . . . . . . . . . . 1549PDF 資料の印刷 . . . . . . . . . 1561印刷資料の注文方法. . . . . . . . 1561

    DB2 オンライン文書 . . . . . . . . 1561オンライン・ヘルプへのアクセス . . . 1561オンライン情報の表示 . . . . . . . 1564DB2 ウィザードの使用 . . . . . . 1566文書サーバーのセットアップ. . . . . 1568オンライン情報の検索 . . . . . . . 1569

    付録S. 特記事項 . . . . . . . . . 1571商標 . . . . . . . . . . . . . . 1574

    索引. . . . . . . . . . . . . . 1577

    IBM と連絡をとる . . . . . . . . . 1615製品情報 . . . . . . . . . . . . 1615

    目次 xi

  • xii SQL 解説書

  • 第1章 入門

    この序章では、以下について説明します。

    v 本書の目的と対象読者v 本書の使用法と構成v 本書全体で使用する構文図の表記法、命名規則、および強調表記の規則v 関連資料v 製品ファミリーの概要

    本書の対象読者本書は、構造化照会言語 (SQL) を使用してデータベースにアクセスする方々を対象にしています。主にプログラマーとデータベース管理者の方々を対象にしていますが、コマンド行プロセッサーを使う一般ユーザーの方々にも役立ちます。

    本書は学習用ではなく、参照資料です。読者がアプリケーション・プログラムを作成することを前提にしており、したがって、 データベース・マネージャーの機能を詳細に説明しています。

    本書の使用法本書は、DB2 ユニバーサル・データベース バージョン 7 によって使用される SQL 言語を定義しています。本書は、リレーショナル・データベースの概念、言語エレメント、関数、照会の形式、および SQL ステートメントの構文やセマンティクスに関する情報についての解説書としてご使用ください。重要なコンポーネントに関する情報や制限事項については、付録を参照してください。

    本書の構成以下のセクションが含まれています。

    v 『第1章 入門』では、本書の目的、対象読者、および使用法を説明します。v 9ページの『第2章 概念』では、リレーショナル・データベースと SQL の基本概念について説明します。

    v 65ページの『第3章 言語エレメント』では、多くの SQL ステートメントに共通するSQL および言語エレメントの基本的な構文を説明します。

    v 217ページの『第4章 関数』では、SQL の列およびスカラー関数の構文図、セマンティックの説明、規則、および使用例について説明します。

    v 439ページの『第5章 照会』では、様々な形式の照会について説明します。

    © Copyright IBM Corp. 1993, 2001 1

  • v 495ページの『第6章 SQL ステートメント』では、すべての SQL ステートメントの構文図、セマンティックの説明、規則、および例について説明します。

    v 1135ページの『第7章 SQL 制御ステートメント』では、SQL プロシージャー・ステートメントの構文図、セマンティックの説明、規則、および例について説明します。

    付録には、以下の情報が収められています。

    v 1179ページの『付録A. SQL の制限値』では、SQL の制限事項を示します。v 1187ページの『付録B. SQL 連絡 (SQLCA)』では、SQLCA の構造を示します。v 1193ページの『付録C. SQL 記述子域 (SQLDA)』では、SQLDA の構造を示します。v 1207ページの『付録D. カタログ視点』では、データベースのカタログ視点について説明します。

    v 1315ページの『付録E. 構造タイプで使用するカタログ視点』では、データベースの構造タイプのカタログ視点について説明します。

    v 1329ページの『付録F. 連合システム』では、連合システムのオプションとタイプ割り当てについて説明します。

    v 1345ページの『付録G. サンプル・データベース表』には、例として使用するサンプル表を示します。

    v 1365ページの『付録H. 予約スキーマ名と予約語』では、 IBM SQL および ISO/ANSSQL92 標準規格の予約スキーマ名と予約語について示します。

    v 1369ページの『付録I. 分離レベルの比較』では、分離レベルについて要約しています。

    v 1371ページの『付録J. トリガーと制約の相互作用』では、トリガーと参照制約の相互作用について説明します。

    v 1375ページの『付録K. Explain 表と定義』では、Explain 表とその定義について説明します。

    v 1407ページの『付録L. Explain レジスターの値』では、 CURRENT EXPLAIN MODEと CURRENT EXPLAIN SNAPSHOT の特殊レジスター値の相互作用、および PREPコマンドと BIND コマンドの相互作用について説明します。

    v 1411ページの『付録M. 再帰の例: 部品構成表』では、再帰的照会の例を示します。v 1417ページの『付録N. 例外表』では、SET INTEGRITY ステートメントで使用する、ユーザー作成の表に関する情報を示します。

    v 1423ページの『付録O. 日本語および繁体字中国語 EUC についての考慮事項』には、EUC 文字セット使用時の考慮事項を示します。

    v 1431ページの『付録P. DATALINK での BNF 指定』では、DATALINK の BNF 仕様について説明します。

    2 SQL 解説書

  • 構文図の見方本書を通じて、構文の説明には次のように定義される構造の図が使用されます。

    構文図は、左から右、上から下に、線に沿って読みます。

    記号 ��─── は、ステートメントの始まりを示します。

    記号 ───� は、ステートメントの構文が次の行に続くことを示します。

    記号 �─── は、ステートメントが前の行から続いていることを示します。

    記号 ──�� は、ステートメントの終わりを示します。

    必須項目は、横線 (メインパス) 上に示されます。�� STATEMENT 必須項目 ��

    オプション項目は、メインパスの下に示されます。�� STATEMENT

    オプション項目��

    オプション項目をメインパスの上に示すこともありますが、それは構文図を見やすくするためであり、ステートメントの実行には関係しません。

    �� STATEMENTオプション項目

    ��

    複数の項目からの選択が可能な場合、それらの項目を縦に並べて (スタックに) 示しています。

    項目から 1 つを選択しなければならない 場合、スタックの項目の 1 つはメインパス上に示されます。�� STATEMENT 必須選択項目 1

    必須選択項目 2��

    項目も何も選択しなくてもよい場合、スタック全体がメインパスよりも下に示されます。�� STATEMENT

    オプション項目 1オプション項目 2

    ��

    第1章 入門 3

  • 項目の 1 つがデフォルト値の場合、その項目はメインパスより上に示され、残りの選択項目はメインパスよりも下に示されます。

    �� STATEMENTデフォルト選択項目

    オプション項目オプション項目

    ��

    メインパスの上に、左へ戻る矢印がある場合には、項目を繰り返して指定できることを示しています。このような場合、繰り返す項目相互の間は、1 つ以上のブランクで区切らなければなりません。

    �� STATEMENT � 繰り返し可能項目 ��

    繰り返しの矢印にコンマが示されている場合は、繰り返し項目をコンマで区切らなければなりません。

    �� STATEMENT �

    ,

    繰り返し可能項目 ��

    スタックの上部の反復の矢印の記号は、そのスタックの中から複数の項目を選択できること、または 1 つの選択項目を繰り返して選択できることを示します。

    キーワードは英大文字で示してあります (例: FROM)。示されているとおりに入力することが必要です。変数は英小文字で示しています (例: column-name)。このような変数は、構文にユーザーが指定する名前や値を示しています。

    句読点、括弧、算術演算子、その他の記号が示されている場合には、それらを構文の一部として入力する必要があります。

    場合によっては、1 つの変数が一連の複数のパラメーターを表すことがあります。たとえば次の図で、変数 parameter-block は、 parameter-block というヘッダーの図の当てはまるもので置き換えることができます。�� STATEMENT parameter-block ��

    parameter-block:パラメーター 1パラメーター 2 パラメーター 3

    パラメーター 4

    4 SQL 解説書

  • 『黒丸』 (*) ではさまれて隣接しているセグメントは、任意の順序で指定することができます。�� STATEMENT 項目 1 * 項目 2 * 項目 3 * 項目 4 ��

    上記の図は、項目2 と 項目3 をどのような順序で指定しても構わないことを示しています。以下はいずれも有効です。

    STATEMENT item1 item2 item3 item4STATEMENT item1 item3 item2 item4

    本書の表記規則この項では、本書全体で使用する表記規則について説明します。

    エラー条件本書の本文中で、エラー条件は、そのエラーに対応する SQLSTATE を括弧で囲んで示します。たとえば、シグニチャーが重複していると、SQL エラー (SQLSTATE 42723)になります。

    強調表記の規則本書では、以下の規則を使用しています。

    太字 コマンド、キーワード、およびその名前がシステムによって事前定義されているその他の項目を示します。

    イタリック(Italic)

    次のいずれかを示します。v ユーザーが指定する名前または値 (変数)v 一般的な強調v 初出の新しい用語v 他の情報源への参照

    モノスペース 次のいずれかを示します。v ファイルおよびディレクトリーv コマンド・プロンプトまたはウィンドウで入力するよう指示される情報

    v 特定のデータ値の例v システムが表示するテキストの例v システム・メッセージの例

    関連資料アプリケーションの作成には、以下の資料が役立ちます。

    v 管理の手引き

    第1章 入門 5

  • – ローカルに、またはクライアント / サーバー環境でアクセスされるデータベースの設計、実現、および保守を行うのに必要な情報が記載されています。

    v アプリケーション開発の手引き– アプリケーションの開発プロセスについて述べ、組み込み SQL と API を使用してデータベースにアクセスするアプリケーション・プログラムをコーディング、コンパイル、および実行する方法について説明しています。

    v DB2 Universal Database for iSeries SQL Reference– iSeries (AS/400) 上で DB2 Query Manager および SQL Development Kit によってサポートされる構造化照会言語 (SQL) を定義しています。システム管理、データベース管理、アプリケーション・プログラミング、および操作に関するタスクについての参照情報が記載されています。 DB2 を実行している iSeries (AS/400) システムで使用される SQL ステートメントごとに、構文、使用上の注意、および例が記述されています。

    v DB2 ユニバーサル・データベース (OS/390 版および z/OS 版) SQL 解説書– DB2 (z/OS 版) (OS/390) で使用される構造化照会言語 (SQL) を定義しています。

    DB2 を実行している z/OS (OS/390) システムにおける照会の形式、SQL ステートメント、 SQL プロシージャー・ステートメント、DB2 の制限、SQLCA、SQLDA、カタログ表、および SQL 予約語が記載されています。

    v DB2 地理情報エクステンダー 使用者の手引きおよび解説書– 地理情報システム (GIS) を作成して使うアプリケーションを作成する方法を説明しています。 GIS を作成して使用することには、データベースにリソースを提供し、そのデータを照会して、区域内の位置、距離、および分布などの情報を入手することが関係しています。

    v IBM SQL 解説書– この資料は、データベース製品の IBM ライブラリー全般に共通するすべての

    SQL エレメントについて説明しています。 IBM のデータベースを使用して可搬プログラムを作成するのに役立つ制約事項と規則が示されています。さまざまな規格や製品 (SQL92E、XPG4-SQL、IBM-SQL および IBM リレーショナル・データベースの製品) の間での SQL の拡張機能や非互換性について、リストの形で示されています。

    v American National Standard X3.135-1992, Database Language SQL– SQL の ANSI 規格の定義について説明しています。

    v ISO/IEC 9075:1992, Database Language SQL– SQL の 1992 ISO 規格の定義について説明しています。

    v ISO/IEC 9075-2:1999, Database Language SQL - Part 2: Foundation(SQL/Foundation)

    – SQL の 1999 ISO 規格の定義についてその大部分を網羅しています。

    v ISO/IEC 9075-4:1999, Database Language SQL - Part 4: Persistent Stored Modules(SQL/PSM)

    6 SQL 解説書

    |

    ||||||

    |

    ||||

  • – SQL プロシージャー制御ステートメントの 1999 ISO 規格の定義について説明しています。

    v ISO/IEC 9075-5:1999, Database Language SQL - Part 4: Host Language Bindings(SQL/Bindings)

    – ホスト言語バインディングと動的 SQL の 1999 ISO 規格の定義について説明しています。

    第1章 入門 7

  • 8 SQL 解説書

  • 第2章 概念

    この章では、構造化照会言語 (SQL) で使用される共通の概念について概説します。この章の目的は、高いレベルの視点から諸概念について説明することです。より詳細な内容については、次章以降で説明します。

    リレーショナル・データベースの定義リレーショナル・データベース は、表の集まりとして扱われるデータベースで、データのリレーショナル・モデルに従って操作することができます。リレーショナル・データベースには、データの保管、管理、およびアクセスに使用される一連のオブジェクトが含まれます。そのようなオブジェクトの例として、表、視点、索引、関数、トリガー、パッケージなどがあります。

    区分 リレーショナル・データベースとは、複数の区分 (ノードともいう) にわたってデータが管理されるリレーショナル・データベースです。このように複数の区分にまたがってデータを分離しても、大部分の SQL ステートメントのユーザーには影響ありません。ただし、DDL ステートメント1 によっては、区分情報が関係する場合があります(たとえば、CREATE NODEGROUP)。

    統合 データベースとは、データが複数のデータ・ソース (別個のリレーショナル・データベースなど) に格納されるリレーショナル・データベースです。データは、すべて 1つの大規模なデータベースに含まれているかのように扱うことができ、従来の SQL 照会でアクセスすることができます。データに対する変更は、該当するデータ・ソースへ明示的に送られます。詳細は、51ページの『DB2 連合システム』を参照してください。

    構造化照会言語 (SQL)SQL は、リレーショナル・データベースのデータの定義と操作を行うための標準化された言語です。データのリレーショナル・モデルに従って、データベースは表の集まりとして扱うことができ、関係は表の中の各値で表され、データは 1 つまたは複数の基礎表から派生する結果表を指定することによって検索されます。

    SQL ステートメントは、データベース・マネージャーによって実行されます。データベース・マネージャーの機能の 1 つは、結果表の仕様を、データ検索を最適化する一連の内部命令に変換することです。この変換は、準備処理およびバインドの 2 つのフェーズで行われます。

    1.データ定義言語 (DDL) とは、データベース中のデータの関係を記述するのに使用する SQL ステートメントのサブセットです。

    © Copyright IBM Corp. 1993, 2001 9

    |||

    ||

    |||||

    |||||

    |||||

    ||

    ||||

    ||||

  • 実行可能な SQL ステートメントはすべて、その実行に先立って準備しておく必要があります。その準備の結果は、ステートメントの実行可能形式または操作可能形式です。SQL ステートメントを準備する方式とその操作可能形式の持続の程度の違いによって、静的 SQL と動的 SQL とがあります。

    許可と特権許可 とは、あるユーザーまたはグループに対し、データベースへの接続、表の作成、システムの管理などの一般的なタスクを実行することを認めるものです。特権 とは、あるユーザーまたはグループに対し、ある特定のデータベース・オブジェクトに指定した方法でアクセスする権利を与えるものです。

    データベース・マネージャーでは、ユーザーが特定のタスクの実行に必要な個々のデータベース機能を使用するための権限を、暗黙にまたは明示的に与えられていることが必要です。明示的な 権限または特権はユーザーに付与されます (GRANTEETYPE は U)。暗黙的な 権限または特権は、ユーザーが属しているグループに付与されます(GRANTEETYPE は G)。このため、ユーザーには、表を作成するには表を作成するための権限が、表を変更するには表を変更するための権限が与えられていなければなりません。他の処理についても同様です。

    管理権限を有するユーザーは、データベース・マネージャーの制御を担当し、データの安全性や保全性に関する責任を負います。このようなユーザーは、誰がデータベース・マネージャーへアクセスできるか、また各ユーザーがどの程度アクセスできるかを制御します。

    データベース・マネージャーは、2 つの管理権限を提供しています。

    v SYSADM - システム管理者権限

    図 1. 権限と特権の階層

    10 SQL 解説書

    |

    |||

    ||||

    ||

    ||||

    ||||||||

    ||||

    |

    |

  • v DBADM - データベース管理者権限

    データベース・マネージャーは、2 つのシステム制御権限も提供しています。

    v SYSCTRL - システム制御権限v SYSMAINT - システム保守権限

    SYSADM 権限は、最高位の権限であり、データベース・マネージャーによって作成および管理されるすべてのリソースを制御します。 SYSADM 権限には、DBADM、SYSCTRL、および SYSMAINT のすべての特権と、 DBADM 権限の付与または取り消しを行う権限が含まれています。

    DBADM 権限は、単一のデータベースに固有の管理権限です。この権限には、オブジェクトを作成したり、データベース・コマンドを実行したり、データベースの表に含まれるデータに SQL ステートメントによってアクセスしたりする特権が含まれています。また DBADM 権限には、CONTROL および個々の特権を付与したり、取り消したりする権限も含まれています。

    SYSCTRL 権限は、高水準のシステム制御権限であり、システム・リソースに影響を与える操作にのみ適用されます。データへの直接アクセスは許されていません。この権限には、データベースの作成、更新、または除去を行う特権、インスタンスまたはデータベースを停止させる特権、および表スペースの除去または作成を行う特権が含まれています。

    SYSMAINT 権限は、2 次レベルのシステム制御権限です。 SYSMAINT 権限を与えられたユーザーは、あるインスタンスに関連したすべてのデータベースに対して保守操作を実行することができます。データへの直接アクセスは許されていません。この権限には、データベース構成ファイルの更新、データベースまたは表スペースのバックアップ、既存のデータベースの復元、データベースのモニターを行う特権が含まれています。

    データベース権限は、管理者がデータベース内でユーザーが実行することを許可する活動で、データベース・オブジェクトの特定のインスタンスに適用されない活動に適用されます。たとえば、パッケージの作成はできるが表の作成はできない権限がユーザーに与えられることがあります。

    特権は、管理者またはオブジェクト所有者によって、ユーザーがデータベース・オブジェクトで実行を許されている活動に適用されます。特権が付与されたユーザーは、種々のオブジェクトを作成できますが、 SYSADM または DBADM などの権限をもつユーザーとは異なり、いくつかの制約があります。たとえば、ユーザーは表の視点は作成できるが、同じ表でトリガーは作成できない特権を与えられることがあります。特権を与えられたユーザーは、自分の所有するオブジェクトにアクセスでき、自分の所有するオブジェクトに対する特権を GRANT ステートメントによって他のユーザーに付与することができます。

    第2章 概念 11

    |

    |

    |

    |

    ||||

    |||||

    |||||

    ||||||

    ||||

    ||||||||

  • CONTROL 特権の与えられたユーザーは、必要に応じて特定のデータベース・オブジェクトにアクセスしたり、そのオブジェクトに関する特権を他のユーザーに付与したり(GRANT)、取り消したり (REVOKE) できます。 CONTROL 特権を付与するには、DBADM 権限が必須です。

    個々の特権およびデータベース権限は、特定の機能を許可するものですが、これと同じ特権もしくは権限を他のユーザーに付与する権利は含まれていません。表、視点、またはスキーマの特権を他のユーザーに付与する権利は、 GRANT ステートメントの WITHGRANT OPTION を使って他のユーザーに広げることができます。

    スキーマスキーマ とは、名前を持つオブジェクトの集合です。スキーマは、データベースのオブジェクトを論理的に区分します。表、視点、ニックネーム、トリガー、関数、パッケージ、および他のオブジェクトをスキーマに入れることができます。

    スキーマはデータベースのオブジェクトでもあります。スキーマは、現行ユーザーをスキーマ所有者として記録する CREATE SCHEMA ステートメントを使用して、明示的に作成されます。また、他のオブジェクトを作成する際に、ユーザーがIMPLICIT_SCHEMA 権限を持っている場合には、暗黙的に作成することもできます。

    スキーマ名 は、 2 つの部分から成るオブジェクト名の高位の部分として使用されます。オブジェクトを作成する際にスキーマを使用して固有に修飾すると、オブジェクトはこのスキーマに割り当てられます。オブジェクトを作成する際にスキーマ名を指定しないと、デフォルトのスキーマ名が使用されます。

    たとえば、DBADM 権限を有するユーザーが、ユーザー A に対して C と呼ばれるスキーマを作成するとします。

    CREATE SCHEMA C AUTHORIZATION A

    ユーザー A は、以下のステートメントを出して、スキーマ C に X という名前の表を作成することができます。

    CREATE TABLE C.X (COL1 INT)

    スキーマの使用の制御データベースが作成される場合に、すべてのユーザーが IMPLICIT_SCHEMA 権限を持ちます。これにより、すべてのユーザーが、まだ存在しない任意のスキーマにオブジェクトを作成することができます。暗黙的に作成されたスキーマに対して、どのようなユーザーも、そのスキーマに他のオブジェクトを作成することができます。別名、特殊タ

    12 SQL 解説書

    ||||

    ||||

    ||

    |||

    ||||

    ||||

    ||

    ||

    ||

    ||

    |

    ||||

  • イプ、関数、およびトリガーの作成は、暗黙的に作成されるスキーマにまで拡張されます。暗黙的に作成されるスキーマについてのデフォルトの特権には、旧バージョンとの後方互換性があります。

    IMPLICIT_SCHEMA 権限が PUBLIC から取り消される場合、スキーマは、 CREATESCHEMA ステートメントを使用して明示的に作成されるか、またはIMPLICIT_SCHEMA 権限が与えられているユーザー (たとえば、 DBADM 権限のあるユーザー) によって暗黙的に作成されます。 PUBLIC から IMPLICIT_SCHEMA 権限を取り消すことは、スキーマ名の使用に対する制御が増す一方で、既存のアプリケーションでオブジェクトの作成を試みる時に許可エラーが生じる可能性があります。

    スキーマには関連特権もあり、スキーマ所有者がこれらの特権を使用すると、どのようなユーザーがスキーマ中のオブジェクトを作成、変更、および除去する権限をもつかを制御できます。当初、スキーマの所有者にはスキーマに関するこれらのすべての特権が与えられ、それらの特権を他のユーザーに付与することもできます。暗黙的に作成されたスキーマはシステムによって所有され、当初、そのようなスキーマにオブジェクトを作成する権限がすべてのユーザーに与えられます。 DBADM または SYSADM 権限を有するユーザーは、任意のスキーマでユーザーが保持する特権を変更することができます。したがって、任意のスキーマ (暗黙的に作成されたスキーマであっても) のオブジェクトを作成、変更、および除去するためのアクセスを制御することができます。

    表表は、データベース・マネージャーが管理する論理構造です。表は列と行で構成されます。表の内部で行の順序を整えることは必要ではありません (行の順序はアプリケーション・プログラムが決定します)。 1 つの列と 1 つの行が交差する箇所は、値 と呼ばれる特定のデータ項目です。 列 は、同じタイプあるいはそのいずれかのサブタイプの値の集まりです。行 は、その n 番目の値が表の n 番目の列の値であるように配置された値の並びです。

    基礎表 は、CREATE TABLE ステートメントを使用して作成され、永続的なユーザー・データを保持するのに使用されます。結果表 は、照会の要求に応じるためにデータベース・マネージャーが 1 つ以上の基礎表から選択または生成した行の集まりです。

    要約表 は、照会によって定義される表です。この照会は、要約表のデータを判別するのにも使用されます。要約表を使用すると、照会のパフォーマンスが向上します。要約表を使用して照会の一部を解決することができると判別した場合、データベース・マネージャーは、要約表を使用するようその照会を書き換えることがあります。この決定は、CURRENT REFRESH AGE および CURRENT QUERY OPTIMIZATION 特殊レジスターなどの、データベース構成の設定値に基づいてなされます。

    表では、列ごとにデータ・タイプを個別に定義する (つまり、列のタイプをユーザー定義の構造タイプの属性に基づいたものにする) ことができます。このような表は、タイプ付き表 と呼ばれます。ユーザー定義の構造タイプは、タイプ階層の一部にすることが

    第2章 概念 13

    |||

    ||||||

    |||||||||

    ||

    ||||||

    |||

    ||||||

    |||

  • できます。サブタイプ は、スーパータイプ から属性を継承します。同様に、タイプ付き表はタイプ階層の一部にすることができます。副表 は、スーパー表 から列を継承します。サブタイプ という用語は、タイプ階層において 1 つのユーザー定義の構造タイプおよびその下にあるすべてのユーザー定義の構造タイプを指して用いられることに注意してください。構造タイプ T の厳密な意味でのサブタイプ とは、タイプ階層で Tの下にある構造タイプのことです。同様に、副表 という用語は、表階層において 1 つのタイプ付き表およびその下にあるすべてのタイプ付き表を指して用いられます。表 Tの厳密な意味での副表 とは、表階層において T の下にある表のことです。

    宣言済み一時表 は、DECLARE GLOBAL TEMPORARY TABLE ステートメントで作成され、 1 つのアプリケーションのために一時データを保持するときに使います。この表は、アプリケーションがデータベースから切断されるときに、暗黙的に除去されます。

    視点視点 は、 1 つまたは複数の表にあるデータを見るためのもう 1 つの方法を提供するものです。

    視点は、結果表に名前を付けて指定したものです。その指定は、SQL ステートメントで視点が参照されるたびに実行される SELECT ステートメントです。視点は、基礎表と同じく列と行をもつものであると見なしてください。検索作業では、すべての視点を基礎表とまったく同じように使用することができます。 CREATE VIEW ステートメントの説明の中で示されているように、挿入、更新、または削除の操作に視点を使用できるかどうかは、その定義によって異なります。詳細については、890ページの『CREATEVIEW』 を参照してください。

    視点の列が基礎表の列から直接に派生している場合、その列は基礎表の列に適用されるあらゆる制約を継承します。たとえば、視点にその基礎表の外部キーが含まれている場合は、その視点を使用する INSERT および UPDATE 操作は基礎表と同じ参照制約に従います。また、視点の基礎表が親表である場合、その視点を使用する DELETE およびUPDATE 操作は、基礎表の DELETE および UPDATE 操作と同じ規則に従います。

    視点では、列ごとにデータ・タイプを結果表から派生させる (つまり、列のタイプをユーザー定義の構造タイプの属性に基づいたものにする) ことができます。このような視点を、タイプ付き視点 といいます。タイプ付き表と同様に、タイプ付き視点は視点階層の一部にすることができます。副視点 は、スーパー視点 から列を継承します。副視点という用語は、視点階層において 1 つのタイプ付き視点およびその下にあるすべてのタイプ付き視点を指して用いられます。視点 V の厳密な意味での副視点 とは、タイプ付き視点階層で V の下にある視点のことです。

    視点は作動不能になることがあります (基礎表が除去された場合など)。その場合、それ以後 SQL ステートメントで使用することはできません。

    14 SQL 解説書

    ||||||||

    |||

    ||

    ||

    |||||||

    |||||

    |||||||

    ||

  • 別名別名 とは、表または視点の代替名のことです。別名は、既存の表や視点を参照できるロケーションで、表や視点を参照するために使用できます。別名はあらゆるコンテキストで使用できるわけではありません。たとえば、検査制約の検査条件の中では使用できません。同様に、別名で宣言済み一時表を参照することはできません。

    表や視点と同様に、別名は作成や除去が可能であり、コメントを付けることもできます。ただし、表とは異なり、チェーニング と呼ばれるプロセスの中で相互に参照し合うことが可能です。別名は広く参照される名前であり、このため別名の使用には特別な許可や特権などは必要ありません。しかし、別名が参照する表や視点にアクセスするには、やはり現行のコンテキストに応じた適切な権限が必要です。

    表の別名のほかにも、データベース別名やネットワーク別名など各種の別名があります。 ニックネーム (連合システム上のデータ表や視点) に別名を作成することもできます。

    別名の詳細については、73ページの『別名』および 626ページの『CREATE ALIAS』を参照してください。

    索引索引 とは、基礎表の行へのポインターに順序を付けた集合のことです。それぞれの索引は、1 つ以上の表列のデータ値に基づいています。索引は、表のデータとは別個の 1 つのオブジェクトです。索引を作成すると、データベース・マネージャーによって、自動的に索引の構造が作成されて保守されます。

    索引は、以下の目的でデータベース・マネージャーが使用します。

    v パフォーマンスの改善。ほとんどの場合、索引のある方がデータへのアクセスが速くなります。

    視点に対して索引を作成することはできません。しかし、視点の元の表に索引を作成すると、視点の操作のパフォーマンスが向上する可能性があります。

    v 固有性の保証。固有索引をもつ表では、複数の行のキーを同じにすることができません。

    キーキー は、特定の行または行の集まりの識別やアクセスのために使用する列の集合です。キーは、表、索引、または参照制約の記述において指定されます。同じ列が複数のキーを構成することも可能です。

    2 つ以上の列から成るキーは、複合キー と呼ばれます。複合キーのある表では、複合キー内の列の順序は表内の列の順序の制約を受けません。複合キーの値 は、複合値を示し

    第2章 概念 15

    ||

    ||||

    |||||

    |||

    ||

    ||

    ||||

    |

    ||

    ||

    ||

    ||

    |||

    ||

  • ます。したがって、「外部キーの値は基本キーの値に等しくなければならない」という規則の場合、外部キーの値の各コンポーネントが、基本キーの値のコンポーネントのうちのそれぞれ対応するものと等しくなければならないことを意味します。

    固有キー固有キー は、キーのどのような 2 つの値も等しい値であってはならないという制約のあるキーです。固有キーの列の内容を NULL 値にすることはできません。この制約は、データ値を変更する任意の操作 (たとえば、 INSERT や UPDATE など) の実行の過程でデータベース・マネージャーによって課せられます。制約を課すために使用されるメカニズムは、固有索引 と呼ばれます。つまり、固有キーは固有索引のキーであるということです。このような索引は UNIQUE 属性があるとも言われます。詳細については、17ページの『固有制約』を参照してください。

    基本キー基本キー は、固有キーの特殊なケースです。表は、複数の基本キーを持つことはできません。詳細については、『固有キー』を参照してください。

    外部キー外部キー とは、参照制約の定義で指定されているキーです。詳細については、17ページの『参照制約』を参照してください。

    区分化キー区分化キー とは、区分データベースの表の定義の一部であるキーです。区分化キーは、データの行が保管される区分を判別するのに使用されます。区分化キーが定義される場合、固有キーおよび基本キーには、区分化キーと同じ列が含まれていなければなりませんが、それに加えて他の列が含まれている場合もあります。表は、複数の区分化キーを持つことはできません。

    制約制約 とは、データベース・マネージャーによって課せられる規則のことです。

    制約には次の 3 つのタイプがあります。

    v 固有制約。これは、表の 1 つまたは複数の列に重複する値を指定することを禁止する規則です。固有キーおよび基本キーは、サポートされている固有制約です。たとえば、固有制約を納入業者の表の納入業者 ID に定義すると、同一の納入業者 ID を 2つの納入業者に指定することを避けることができます。

    v 参照制約。これは 1 つまたは複数の表の 1 つまたは複数の列の値に関する論理的な規則です。たとえば、ある表の集合で、納入業者に関する情報を共用している場合に、納入業者の名前が変わることがあります。参照制約を定義して、表の納入業者の

    16 SQL 解説書

    |||

    |

    |||||||

    |

    ||

    |

    ||

    |

    |||||

    ||

    |

    |

    ||||

    |||

  • ID が納入業者情報の納入業者 ID と一致するように指定することができます。この制約は、納入業者情報の脱落を招く挿入、更新、または削除を防止します。

    v 表検査制約 は、特定の表に追加されるデータに対して制限を設定するものです。たとえば、この制約により、従業員情報を含む表に給与データを追加もしくは更新する際に、必ず従業員の給与レベルが $20,000 以上になるよう制限することができます。

    参照制約および表検査制約はオン / オフの切り換えが可能です。一般に、大量のデータをデータベースにロードする場合には、制約の実施検査をオフにします。制約のオン /オフの切り換えについては、1096ページの『SET INTEGRITY』を参照してください。

    固有制約固有制約 は、表内でその値が固有である場合にのみキーの値を有効とする規則です。固有制約はオプションであり、 PRIMARY KEY 文節または UNIQUE 文節を使用して、CREATE TABLE または ALTER TABLE ステートメントで定義することができます。固有制約に指定される列は、NOT NULL として定義する必要があります。データベース・マネージャーは、固有索引を使用して、固有制約の列の変更時にキーの固有性を実現します。

    表には任意の数の固有制約を指定することができますが、基本キーとして定義されるのは最大 1 つの固有制約です。表には、同一の一連の列に複数の固有制約を指定することはできません。

    参照制約の外部キーによって参照される固有制約は、親キー と呼ばれます。

    CREATE TABLE ステートメントで固有制約が定義される場合に、固有索引がデータベース・マネージャーによって自動的に作成され、システムに必須の基本索引または固有索引として指定されます。

    固有制約が ALTER TABLE ステートメントで定義され、しかも同一列に索引が存在する場合、その索引は固有かつシステム必須として指定されます。このような索引が存在しない場合、固有索引がデータベース・マネージャーによって自動的に作成され、システムに必須の基本索引または固有索引として指定されます。

    固有制約の定義と固有索引の作成とは明らかに異なることに注意してください。いずれも固有性を実現しますが、固有索引はヌル可能列を使用することができ、通常、親キーとして使用することはできません。

    参照制約参照保全 とは、すべての外部キーのすべての値が有効であるデータベースの状態のことです。外部キー とは、その値が親表の行の基本キーまたは固有キーの少なくとも 1 つの値と一致する必要がある表内の列または列の集合です。参照制約 は、以下の条件のいずれかが満たされる場合にのみ外部キーの値を有効とする規則です。

    v 外部キーの値が親キーの値として現れる場合

    第2章 概念 17

    ||

    |||

    |||

    |

    ||||||

    |||

    |

    |||

    ||||

    |||

    |

    ||||

    |

  • v 外部キーのコンポーネントの一部がヌル値の場合

    親キーを含む表は参照制約の親表 と呼ばれ、外部キーを含む表はその表の従属 表と呼ばれます。

    参照制約はオプションであり、 CREATE TABLE ステートメントおよび ALTERTABLE ステートメントで定義することができます。参照制約は、データベース・マネージャーによって、 INSERT、UPDATE、DELETE、ALTER TABLE、ADDCONSTRAINT、および SET INTEGRITY ステートメントの実行の過程で課せられます。これが有効に実施されるのは、ステートメントの完了時です。

    RESTRICT の削除または更新規則を伴う参照制約は、他のすべての参照制約より先に課せられます。 NO ACTION の削除または更新規則を伴う参照制約は、ほとんどの場合、RESTRICT と同じように動作します。ただし、特定の SQL ステートメントでは異なる場合があります。

    参照保全、検査制約、およびトリガーは実行時に結合されることがあります。これらのエレメントの結合については、1371ページの『付録J. トリガーと制約の相互作用』を参照してください。

    参照保全の規則に関係した概念および用語には、次のものがあります。

    親キー 参照制約の基本キーまたは固有キー。

    親行 少なくとも 1 つの従属行をもつ行。

    親表 参照制約の親キーを含む表。表は、任意の数の参照制約に関して親として定義することができます。ある参照制約で親となっている表が、他の参照制約の従属となる場合もあります。

    従属表 最低限 1 つの参照制約が定義に含まれている表。表は、任意の数の参照制約に関して従属として定義することができます。ある参照制約で従属となっている表が、他の参照制約の親となる場合もあります。

    下層表 ある表が T の従属であるか、または T の従属の下層である場合、その表は表T の下層です。

    従属行 少なくとも 1 つの親行をもつ行。

    下層行 ある行が行 r の子孫であるのは、その行が r の従属行である場合、または rの従属行の子孫である場合です。

    参照循環参照制約の集合で、その集合内のそれぞれの表がそれ自身の下層であるもの。

    自己参照行自分の親である行。

    18 SQL 解説書

    |

    ||

    |||||

    ||||

    |||

    |

    ||

    ||

    ||||

    ||||

    |||

    ||

    |||

    ||

    ||

  • 自己参照表同じ参照制約の中で親であり従属でもある表。この場合の制約は自己参照制約と呼ばれます。

    挿入規則参照制約の挿入規則は、外部キーのヌル値以外の挿入値が親表の親キーの何らかの値と一致していなければならない、というものです。複合外部キーの場合、値がヌル値であるのは、そのコンポーネントのどれかがヌル値である場合です。この規則が暗黙的であるのは、外部キーが指定されている場合です。

    更新規則参照制約の更新規則は、参照制約の定義時に指定されます。選択項目には NO ACTIONと RESTRICT があります。更新規則は、親の行または従属表の行が更新されるときに適用されます。

    親行の場合、親キーの列の値が更新されると、次の規則が適用されます。

    v 従属表の行がキーの元の値と一致し、しかも更新規則が RESTRICT である場合には、その更新は拒否されます。

    v 更新ステートメントの完了時に (トリガー後を除く)、従属表の行に対応する親キーがなく、しかも更新規則が NO ACTION である場合には、その更新は拒否されます。

    従属行の場合、外部キーを指定した際の暗黙的な更新規則は NO ACTION です。 NOACTION は、更新ステートメントの完了時に、外部キーのヌル値以外の更新値が親表の親キーの何らかの値に一致していなければならないことを意味します。

    複合外部キーの場合、値がヌル値であるのは、そのコンポーネントのどれかがヌル値である場合です。

    削除規則参照制約の削除規則は、参照制約の定義時に指定されます。選択項目としては、NOACTION、RESTRICT、CASCADE、または SET NULL があります。 SET NULL を指定できるのは、外部キーの列の中にヌル値が可能なものがある場合だけです。

    参照制約の削除規則は、親表の行が削除されるときに適用されます。もっと正確に言い換えれば、この規則は、親表の行が削除または (後で定義する) 伝搬した削除操作の対象となっており、参照制約の従属表の中にその行の従属行がある場合に適用されます。例として、P が親表、D が従属表、そして p が削除または伝搬削除操作の対象である親行を指す場合を考えます。この場合の削除規則は以下のとおりです。

    v 削除規則が RESTRICT または NO ACTION の場合、エラーになり、行は削除されません。

    v CASCADE の場合、削除規則は表 D 内の p の従属行へ伝搬します。v 削除規則が SET NULL の場合、表 D にある p の各従属行の外部キーのうち、ヌル値可の各列はヌル値に設定されます。

    第2章 概念 19

    |||

    |||||

    ||||

    |

    ||

    ||

    |||

    ||

    ||||

    |||||

    ||

    |

    ||

  • 表が親となっている参照制約にはそれぞれ独自の削除規則があり、適用可能な削除規則のすべてを使用して削除操作の結果が決められます。したがって、ある行の従属行が削除規則 RESTRICT か NO ACTION の参照制約になっている場合、または、削除規則RESTRICT か NO ACTION の参照制約の従属である子孫のどれかに対して削除がカスケードしている場合、その行を削除することはできません。

    親表 P から行を削除すると、他の表もこの操作に関係し、その表の行に以下のような影響が出る場合があります。

    v D が P の従属表で削除規則が RESTRICT か NO ACTION の場合、 D はこの操作に関係しますが、操作の影響は受けません。

    v D が P の従属表で削除規則が SET NULL の場合、D はこの操作に関係し、操作中に D の行が更新される場合があります。

    v D が P の従属表で削除規則が CASCADE の場合、D はこの操作に関係し、操作中に D の行が削除される可能性があります。

    D の行が削除される場合、P の削除操作が D に伝搬する、といいます。 D が親表でもある場合は、このリストで説明した動作は D の従属表にも順に適用されていきます。

    P での削除操作に関係する可能性のある表は、 P に連結削除 されている、と言われます。 したがって、ある表が P の従属表であるか、または P からの削除操作のカスケード先の表の従属表である場合、この表は表 P に対して連結削除されることになります。

    表検査制約表検査制約 とは、表の各行の 1 つ以上の列について可能な値を指定する規則のことです。制約はオプションであり、 SQL ステートメントの CREATE TABLE およびALTER TABLE を使用して定義されます。表検査制約は、ある制限された形の検索条件で指定されます。その制限の 1 つは、表 T の表検査制約に含まれる列名は T の列を指定したものでなければならない、ということです。

    表には、任意の数の表検査制約を指定することができます。表検査制約が実施されるのは、表に行が挿入されるときか、または表の行が更新されるときです。

    表検査制約は、挿入または更新される各行に対してその検索条件を適用することによって実施されます。検索条件の結果が行のどれかに対して偽となった場合は、エラーになります。

    既存データの含まれている表に対する ALTER TABLE ステートメントの中に表検査制約が定義されている場合、その ALTER TABLE ステートメントの実行に先立って、その既存のデータが新しい条件に基づいて検査されます。表を検査保留状態 にすることができます。検査保留状態では、データを検査しなくても ALTER TABLE ステートメン

    20 SQL 解説書

    |||||

    ||

    ||

    ||

    ||

    |||

    ||||

    |

    |||||

    ||

    |||

    ||||

  • トを実行することができます。表を検査保留状態にするには、SET INTEGRITY ステートメントを使用します。 SET CONSTRAINT ステートメントは、制約に基づく各行の検査を再開するときにも使用されます。

    分離レベルアプリケーション・プロセスに関連する分離レベル は、並行して実行している他のアプリケーション・プロセスからそのアプリケーション・プロセスを分離する度合いを定義します。したがって、アプリケーション・プロセスの分離レベルは、以下を指定します。

    v アプリケーションによって読み取られ更新される行を、並行して実行される他のアプリケーション・プロセスから使用できる度合い。

    v 並行して実行される他のアプリケーション・プロセスの更新活動によってアプリケーションが影響を受ける度合い。

    分離レベルは、パッケージの属性として指定され、そのパッケージを使用するアプリケーション・プロセスに適用されます。分離レベルは、プログラム準備処理で指定されます。これによって、並行アプリケーション・プロセスによるデータ・アクセスは、ロックの種類に応じて制限または禁止されます。各種ロックのタイプおよび属性の詳細については、管理の手引き を参照してください。宣言済み一時表と宣言済み一時表の行は、一時表を宣言したアプリケーションによってのみアクセス可能なものなので、ロックされることはあ�