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