SQL の概要
構造化問い合わせ言語(SQL)および SQL に対する Zen サポートの概要
以下のトピックでは、SQL の概要を提示し、SQL に対する Zen サポートの詳細について説明します。
SQL 構文リファレンスへ移動して、Zen でサポートされる特定の SQL 文法を調べることもできます。
Zen で SQL を使用した作業
構造化問い合わせ言語(SQL)は、英語に似たステートメントを使用してデータベース操作を実行します。ANSI(American National Standards Institute)と IBM は、それぞれ独自の SQL 標準を定義しています。IBM の標準は SAA(Systems Application Architecture)と呼ばれます。Zen は、ANSI SQL と IBM SAA SQL の両方の機能をほとんど実装しているほか、これらの標準では定義されていない独自の拡張機能も提供しています。次の表に、Zen で作成できる SQL ステートメントと、その各種類のステートメントを使って実現できるタスクの一覧を示します。
表 1 SQL ステートメントの種類と関連タスク
SQL ステートメントの種類 | 各種作業 |
---|
データ定義 | テーブルの作成、変更、および削除 ビューの作成と削除 インデックスの作成と削除 ストアド SQL プロシージャの作成と削除 トリガーの作成と削除 ユーザー定義関数の作成と削除 |
データ処理 | テーブル内のデータの取得、挿入、更新、および削除 トランザクションの定義 ビューの定義と削除 ストアド SQL プロシージャの実行 トリガーの実行 |
データ制御 | 辞書のセキュリティの有効化と無効化 ユーザーの作成と削除 グループに対するユーザーの追加と削除 ユーザー パスワードの変更 テーブルのアクセス権の付与と取り消し |
このトピックの残り部分では、各種類の SQL ステートメントに関する一般情報を提供します。各ステートメントの詳細については、
SQL 構文リファレンスを参照してください。
メモ:ほとんどの SQL エディターは、複数のステートメントを実行するためにステートメント区切り文字を使用しませんが、ZenCC の SQL Editor は区切り文字を必要とします。ここで提供する例をほかの環境で実行するには、シャープ記号またはセミコロンの区切り文字を取り除く必要があります。
データ定義ステートメント
データ定義ステートメントではデータベースの特性を指定できます。これを使ってデータ定義ステートメントを実行すると、Zen によってデータベースの記述がデータ辞書に格納されます。情報の格納や取得を行う前に、辞書内でデータベースを定義する必要があります。
Zen では、データ定義ステートメントを作成して、次のタスクを実行できます。
•テーブルの作成、変更、および削除
•ビューの作成と削除
•インデックスの作成と削除
•トリガーの作成と削除
•ストアド プロシージャの作成と削除
•ユーザー定義関数の作成と削除
以下のトピックでは、これらのタスクに関連する SQL ステートメントの概要について説明します。データベースの特性の定義に関する一般的な情報については、『Zen Programmer's Guide』を参照してください。
テーブルの作成、変更、および削除
データベースのテーブルを作成、変更、および削除するには、次の SQL ステートメントを使用します。
表 2 データ定義ステートメント - テーブル
| テーブルを定義し、オプションで対応するデータ ファイルを作成します。 |
| テーブル定義に変更を 1 つ追加します。ALTER TABLE ステートメントを使用すると、テーブル定義への列の追加、テーブル定義からの列の削除、列のデータ型やデータ長(あるいは、それ以外の特性)の変更、主キーまたは外部キーの追加や削除、および別のデータ ファイルとテーブル定義との関連付けを行うことができます。 |
| データ辞書からテーブルを削除し、オプションで関連するデータ ファイルを削除します。 |
ビューの作成と削除
データベースのビューを作成および削除するには、次の SQL ステートメントを使用します。
表 3 データ定義ステートメント - ビュー
| 新規ビューを定義します。 |
| ビューを削除します。 |
インデックスの作成と削除
データベースのインデックスを作成および削除するには、次の SQL ステートメントを使用します。
表 4 データ定義ステートメント - インデックス
| 既存のテーブルに新しいインデックス(名前付きインデックス)を定義します。 |
| 名前付きインデックスを削除します。 |
トリガーの作成と削除
データベースのトリガーを作成および削除するには、次の SQL ステートメントを使用します。
表 5 データ定義ステートメント - トリガー
| 既存のテーブルにトリガーを定義します。 |
| トリガーを削除します。 |
Zen は、その他の SQL 制御ステートメントも提供しています。これらのステートメントは、トリガー本体内でのみ使用できます。トリガーでは次のステートメントを使用できます。
表 6 データ定義ステートメント - トリガー制御
BEFORE | INSERT、UPDATE、または DELETE オペレーションの前に実行するトリガーを定義します。 |
AFTER | INSERT、UPDATE、または DELETE オペレーションの後で実行するトリガーを定義します。 |
ストアド プロシージャの作成と削除
ストアド プロシージャは、あらかじめコンパイルして辞書に保存されている複数のステートメントから成っています。ストアド プロシージャを作成および削除するには、次の SQL ステートメントを使用します。
表 7 データ定義ステートメント - ストアド プロシージャ
| 新しいプロシージャをデータ辞書に保管します。 |
| データ辞書からストアド プロシージャを削除します。 |
Zen は、その他の SQL 制御ステートメントも提供しています。これらのステートメントは、ストアド プロシージャ本体内でのみ使用できます。ストアド プロシージャでは次のステートメントを使用できます。
表 8 データ定義ステートメント - ストアド プロシージャ制御
| 条件の真偽値に基づいたステートメントの実行制御を可能にします。 |
| ブロックまたはループ ステートメントを抜けて実行を継続します。 |
| ステートメントのブロックの実行を繰り返します。 |
| 指定した条件が True である間、ステートメントのブロックの実行を繰り返します。 |
ユーザー定義関数(UDF)の作成と削除
組み込み関数に加えて、Zen では独自にユーザー定義関数(UDF)を作成し、それを SQL クエリで使用することができます。
ユーザー定義関数は一種のデータベース オブジェクトで、再使用できる 1 つ以上の SQL ステートメントをカプセル化したものです。ユーザー定義関数は 0 個以上の入力引数を取り、スカラー戻り値を評価します。
ユーザー定義関数はデータベースのコンテキスト内に定義されます。CREATE FUNCTION ステートメントの実行が成功すると、それが実行されたデータベース内に UDF 定義が格納されます。格納された UDF を変更、呼び出し、削除することができます。
UDF では、1 つ以上の SQL ステートメントを使用して単一のスカラー値を出力することができます。この値のデータ型は、CREATE FUNCTION ステートメントの RETURNS 句で指定されます。サポートされるデータ型の一覧については、
サポートされるスカラー入力パラメーターおよび戻り値のデータ型を参照してください。
ユーザー定義関数を作成および削除するには、次の表にあるステートメントを使用します。
表 9 データ定義ステートメント - ユーザー定義関数
| スカラー ユーザー定義関数をデータベースに作成します。 |
| データベースからスカラー ユーザー定義関数を削除します。 |
データ操作ステートメント
データ操作ステートメントを使用すると、データベースの内容にアクセスして変更を加えることができます。Zen ではデータ操作ステートメントを構築して、次のタスクを実行できます。
•テーブルからのデータの取得
•テーブル内のデータの変更
•トランザクションの定義
•ビューの作成と削除
•ストアド プロシージャの実行
•トリガーの実行
次のセクションでは、これらのタスクに関連する SQL ステートメントの概要について説明します。
データの取得
データベースから情報を取得するために使用するステートメントはすべて SELECT ステートメントに基づきます。
表 10 データ操作ステートメント - データの取得
| データベース内の 1 つまたは複数のテーブルからデータを取得します。 |
SELECT ステートメントを作成する場合、さまざまな句を使って異なるオプションを指定できますSELECT ステートメントで使用する句の種類は次のとおりです。
表 11 データ操作ステートメント - データの取得オプション
FROM | データを取得するテーブルまたはビューを指定します。 |
WHERE | SELECT ステートメントで取得するデータを修飾する検索条件を定義します。 |
| 指定した条件に従って行のセットを組み合わせ、グループ内の 1 つ以上の列を対象に集計値を取得できるようにします。 |
| グループの集計値が満たさなければならない条件を指定して、ビューの内容を制限します。 |
ORDER BY | Zen が選択した行を返す順序を決定します。 |
また、UNION キーワードを使って、複数の SELECT クエリから 1 つの結果テーブルを取得することもできます。
データの変更
テーブルやビューのデータを追加、変更、または削除するには、以下の各ステートメントを使用します。
表 12 データ操作ステートメント - データの変更
| 1 つ以上のテーブルまたは 1 つのビューに行を追加します。 |
| テーブルまたはビューのデータを変更します。 |
| テーブルまたはビューから行を削除します。 |
DELETE または UPDATE ステートメントを作成する場合、WHERE 句を使って、目的のデータを制限する検索条件を定義することもできます。
ビューの作成と削除
ビューを作成および削除するには、次の SQL ステートメントを使用します。
表 13 データ操作ステートメント - ビュー
| データベース ビューを定義し、辞書にその定義を格納します。 |
| データ辞書からビューを削除します。 |
ストアド プロシージャの作成
ストアド プロシージャは、あらかじめコンパイルして辞書に保存されている複数のステートメントから成っています。ストアド プロシージャを実行するには、次の SQL ステートメントを使用します。
表 14 データ操作ステートメント - ストアド プロシージャ
| あらかじめコンパイルされたプロシージャを呼び出して実行します。 |
システム ストアド プロシージャの実行
システム ストアド プロシージャは、データ定義言語(DDL)では取り扱われない管理タスクや情報タスクの遂行に利用できます。システム ストアド プロシージャには psp_ プレフィックスが付きます。ストアド プロシージャを実行するには、次の SQL ステートメントを使用します。
表 15 データ操作ステートメント - システム ストアド プロシージャ
| システム ストアド プロシージャを呼び出して実行します。 |
詳細については、
システム ストアド プロシージャを参照してください。
トリガーの実行
トリガーは、あらかじめコンパイルして辞書に保存されている複数のステートメントから成っています。トリガーは、指定した条件になると、エンジンにより自動的に実行されます。
データ制御ステートメント
データ制御ステートメントではデータベースのセキュリティを定義できます。辞書を作成する場合、その辞書のセキュリティを明示的に有効にするまで、その辞書のセキュリティは定義されません。Zen では、データ制御ステートメントを構築して、次のタスクを実行できます。
•セキュリティの有効化または無効化
•ユーザーとグループの作成と削除
•アクセス権の付与と取り消し
メモ:保護されたデータベース内のテーブルであるファイルに Btrieve オーナー ネームが設定されている場合、データベースの Master ユーザーは、そのテーブルに対するアクセス許可を任意のユーザー(Master ユーザーを含む)に与える場合、GRANT ステートメントにオーナー ネームを含める必要があります。
次のセクションでは、これらのタスクに関連する SQL ステートメントの概要について説明します。
セキュリティの有効化と無効化
データベースのセキュリティを有効または無効にするには、次のステートメントを使用します。
表 16 データ制御ステートメント - セキュリティ
| データベースのセキュリティを有効または無効にし、Master パスワードを設定します。 |
ユーザーとグループの作成と削除
データベースのユーザーとユーザー グループを作成または削除するには、次の SQL ステートメントを使用します。
表 17 データ制御ステートメント - ユーザーとグループ
ALTER USER | ユーザーの名前を変更したり、パスワードを変更したりします。 |
CREATE USER | パスワードまたはメンバーシップを持つかまたは持たない新規ユーザーをグループに作成します。 |
DROP USER | ユーザーを削除します。 |
ALTER GROUP | ユーザーをグループに追加します。グループからユーザーを削除します。 |
CREATE GROUP | 新しいユーザーのグループを作成します。 |
DROP GROUP | ユーザーのグループを削除します。 |
GRANT LOGIN TO | ユーザーとパスワードを作成するか、ユーザーをグループに追加します。 |
REVOKE LOGIN FROM | 辞書からユーザーを削除します。 |
アクセス権の付与と取り消し
ユーザーやグループにアクセス権を付与または取り消すには、次のステートメントを使用します。
表 18 データ制御ステートメント - アクセス権
GRANT(アクセス権) | 指定した種類のアクセス権をユーザーまたはグループに付与します。GRANT(アクセス権)ステートメントで付与できるアクセス権は、All、Insert、Delete、Alter、Select、Update、および References です。 |
GRANT CREATETAB TO | テーブルを作成するためのアクセス権をユーザーまたはグループに付与します。 |
REVOKE(アクセス権) | アクセス権をユーザーまたはグループから取り消します。 |
REVOKE CREATETAB FROM | テーブルを作成するためのアクセス権をユーザーまたはグループから取り消します。 |
Zen メタデータ
Zen のリレーショナル インターフェイスでは、メタデータでバージョン 1(V1)とバージョン 2(V2)という 2 つのバージョンをサポートします。
メタデータのバージョンはデータベース プロパティの 1 つで、データベースの作成時に指定します。デフォルトは "メタデータ バージョン 1" です。"メタデータ バージョン 2" にする場合は、データベースを作成する際に指定する必要があります。
メタデータのバージョンは、そのデータベース内のすべてのデータ辞書ファイル(DDF)に適用されます。単独のデータベースで、メタデータ バージョン 1 を使用する DDF とメタデータ バージョン 2 を使用する DDF を一緒に使用することはできません。2 つのバージョンの DDF はそれぞれ情報をやり取りすることができません。
ただし、データベース エンジンで複数のデータベースへ同時にアクセスすれば、そのデータベースごとにメタデータ バージョン 1 またはメタデータ バージョン 2 を使用することができます。
PSQL v10 より前の Zen バージョンで作成されたデータベースはすべてメタデータ バージョン 1 を使用します。PSQL v10 以降を使って作成されたデータベースは、データベース作成時の設定に応じてどちらかのメタデータ バージョンを使用しています。
メタデータのバージョンの比較
メタデータ バージョン 2 では、多くの識別子名に最大 128 バイトの名前を付けることができます。追加情報については、
Zen 機能の制限/条件を参照してください。またメタデータ バージョン 2 では、ビューおよびストアド プロシージャに対する権限が認められます。
ビューおよびストアド プロシージャに対する権限を参照してください。
メタデータ バージョン 2 の DDF 名はバージョン 1 用とは異なります。バージョン 2 の DDF には、追加フィールドやバージョン 1 のフィールドへの変更が含まれています。
システム テーブルを参照してください。
リレーショナル エンジンの制限
次の表は、リレーショナル エンジンの機能に適用される制限または条件を示します。Zen データベースには、40 億のオブジェクトをさまざまに組み合わせて含むことができます。オブジェクトはデータ辞書ファイルに保存されます。
『
Zen Programmer's Guide』の
名前付け規則も参照してください。
表 19 Zen 機能の制限/条件
Zen 機能 | 制限または条件 | メタデータ |
---|
| | V1 | V2 |
---|
ストアド プロシージャのパラメーター リスト内の引数の数 | 300 | X | X |
CHAR 列のサイズ | 8,000 バイト1 | X | X |
文字列リテラル | | X | X |
テーブル内の列数 | 1536 | X | X |
トリガーまたはストアド プロシージャで使用可能な列数 | 300 | X | X |
列名2 | 20 バイト | X | |
128 バイト | | X |
列のサイズ | 2 GB | X | X |
相関名 | メモリによる制限 | X | X |
カーソル名 | 18 バイト | X | X |
データベース名2 | 20 バイト | X | X |
データベース セッション数 | メモリによる制限 | X | X |
データ ファイル パス名 | 64 バイト(データ ファイル パス名の最大長は Xf$Loc パスおよびデータ ファイル パスの組み合わせです) | X | |
250 バイト(データ ファイル パス名の最大長は Xf$Loc パスおよびデータ ファイル パスの組み合わせです) | | X |
関数(ユーザー定義)名2 | 30 バイト | X | |
128 バイト | | X |
グループ名2 | 30 バイト | X | |
128 バイト | | X |
インデックス名2 | 20 バイト | X | |
128 バイト | | X |
キー名2 | 20 バイト | X | |
128 バイト | | X |
ラベル名 | メモリによる制限 | X | X |
NCHAR 列のサイズ | 4,000 UCS-2 単位(8,000 バイト1) | X | X |
NVARCHAR 列のサイズ | 4,000 UCS-2 単位(8,000 バイト1) | X | X |
AND および OR でつないだ述部の数 | 3000 | X | X |
データベース オブジェクトの数 | 65536 | X | |
40 億 | | X |
パラメーター名 | 126 バイト | X | X |
パスワード2 | 8 バイト | X | |
128 バイト | | X |
プロシージャ名2 | 30 バイト | X | |
128 バイト | | X |
参照整合性(RI)の制約名 | 20 バイト | X | |
128 バイト | | X |
一重引用符の表記 | 2 つの連続した一重引用符('') | X | X |
結果名 | メモリによる制限 | X | X |
セーブポイント名 | メモリによる制限 | X | X |
クエリ内の SELECT リストの列数 | 1600 | X | X |
SQL ステートメント内の単独項目(引用符で囲まれたリテラル文字列)のサイズ | ヌル終端文字と引用符を除き、14,997(合計 15,000) | X | X |
SQL ステートメントの長さ | 512 KB | X | X |
セッションあたりの SQL ステートメント数 | メモリによる制限 | X | X |
ストアド プロシージャのサイズ | 64 KB | X | X |
テーブル名2 | 20 バイト | X | |
128 バイト | | X |
テーブルの行数 | 13.0 形式:9,223,372,036,854,775,807(~920 京) 古いファイル形式:2,147,483,647(~21 億) | X | X |
クエリあたりの結合テーブル数 | メモリによる制限 | X | X |
トリガー名2 | 20 バイト | X | |
128 バイト | | X |
ユーザー名2 | 30 バイト | X | |
128 バイト | | X |
VARCHAR 列のサイズ | 8,000 バイト1 | X | X |
変数名 | メモリによる制限 | X | X |
ビュー名2 | 20 バイト | X | |
128 バイト | | X |
1 CHAR、NCHAR、VARCHAR、または NVARCHAR 列で、完全にインデックス化できる列の最大サイズは 255 バイトです。 2 『 Advanced Operations Guide』の 識別子の制限も参照してください。 |
完全修飾オブジェクト名
完全修飾されたオブジェクト名は、ドット表記を使用してデータベース名とオブジェクト名を結合します。たとえば、データベース mydbase に myview というビューがある場合、完全修飾オブジェクト名は mydbase.myview となります。
完全修飾オブジェクト名はデータベース内で一意である必要があります。たとえば、データベース mydbase にテーブル acctpay とユーザー定義関数 acctpay がある場合、Zen は名前 mydbase.acctpay を解決できません。
SQL ステートメント内のデリミター付き識別子
テーブル、列、およびインデックスにスペースや非標準の文字が含まれている場合や、識別子がキーワードである場合は、デリミターを付ける必要があります。デリミター文字は二重引用符です。
例
SELECT "last-name" FROM "non-standard-tbl"
ハイフンは標準文字ではありません。
SELECT "password" FROM my_pword_tbl
"password" は SET PASSWORD ステートメントのキーワードです。