InterSystems SQL の基礎
この章では、InterSystems SQL の機能の概要を示します。特に SQL 標準では取り上げられていないものや InterSystems IRIS® データ・プラットフォームの統一データ・アーキテクチャに関連する情報を示します。この章では、SQL について事前の知識があることが前提となっており、SQL の概念や構文の概要は対象外となっています。
テーブル
InterSystems SQL では、データはテーブル内に存在します。各テーブルには、多数の列が定義されます。各テーブルには、0 行以上のデータ値が含まれます。以下の用語は、ほぼ同じ意味となります。
データ用語 |
リレーショナル・データベース用語 |
InterSystems IRIS 用語 |
database (データベース) |
schema (スキーマ) |
package (パッケージ) |
table (テーブル) |
persistent class (永続クラス) |
field (フィールド) |
column (列) |
property (プロパティ) |
record (レコード) |
row (行) |
|
詳細は、"クラスの定義と使用" の “永続オブジェクトの概要” の章にある “既定の SQL プロジェクションの概要” を参照してください。
テーブルには、基本テーブル (データを含むテーブルで、通常は単にテーブルと呼ばれます) とビュー (1 つまたは複数のテーブルに基づいた論理ビューを表します) という、2 種類の基本となるタイプがあります。
テーブルを定義する方法の詳細は、“テーブルの定義” の章を参照してください。
ビューを定義する方法の詳細は、“ビューの定義” の章を参照してください。
テーブルに対するクエリをより効率的にするには、テーブルにインデックスを定義します。"SQL 最適化ガイド" の “インデックスの定義と構築” の章を参照してください。
参照の整合性を強化するには、テーブルに外部キーとトリガを定義します。“外部キーの定義” および “トリガの定義” の章を参照してください。
スキーマ
SQL スキーマによって、関連する一連のテーブル、ビュー、ストアド・プロシージャ、およびクエリ・キャッシュをグループ分けすることができます。テーブル名、ビュー名、およびストアド・プロシージャ名はスキーマ内で一意である必要があるため、スキーマを使用することで、テーブル・レベルでの名前の競合を防ぐことができます。アプリケーションは、複数のスキーマでテーブルを指定できます。
SQL スキーマは、永続クラスのパッケージに対応しています。一般的に、スキーマの名前は、それが対応しているパッケージの名前と同じですが、スキーマ名前付け規約が異なることにより、または異なる名前が意図的に指定されていることにより、これらの名前が異なる場合があります。スキーマからパッケージへのマッピングについては、"SQL からクラス名への変換" で詳しく説明します。
スキーマは特定のネームスペースに対して定義されます。スキーマ名は、そのネームスペース内で一意である必要があります。スキーマ (および対応パッケージ) は、最初の項目が割り当てられると自動的に作成され、最後の項目が削除されると自動的に削除されます。
SQL 名は、修飾、未修飾のどちらも指定できます。修飾名では、スキーマを指定します (schema.name)。未修飾名では、スキーマを指定しません (name)。スキーマを指定しない場合、InterSystems IRIS は以下のようにスキーマを提供します。
ネームスペース内のすべての既存のスキーマを表示するには、以下の操作を実行します。
-
管理ポータルで、[システム・エクスプローラ]、[SQL] の順に選択します。ページ上部の [切り替え] オプションを使ってネームスペースを選択します。利用可能なネームスペースのリストが表示されます。ネームスペースを選択します。
-
画面の左側にある [スキーマ] ドロップダウン・リストを選択します。これによって、現在のネームスペース内のスキーマのリストが表示されます。このリストからスキーマを選択します。選択した名前が [スキーマ] ボックスに表示されます。
-
[適用先] ドロップダウン・リストを使用すると、スキーマに属するテーブル、ビュー、プロシージャ、またはクエリ・キャッシュ、あるいはこれらすべてを選択できます。このオプションを設定したら、三角形をクリックして、項目のリストを表示します。項目がない場合は、三角形をクリックしても何も表示されません。
特権
InterSystems SQL では、特権を使用して、テーブルやビューなどへのアクセスを制限できます。一連のユーザおよびロールを定義して、それぞれに対し (読み取り、書き込みなど) 特権を付与できます。“SQL のユーザ、ロール、および特権” の章を参照してください。
データ表示オプション
InterSystems SQL では、SelectMode オプションを使用して、データの表示方法や保存方法を指定します。使用可能なオプションは、Logical、Display、および ODBC です。データは、内部的には Logical モードで保存されますが、上記のどのモードでも表示できます。データ型クラスはすべて、LogicalToDisplay()、LogicalToODBC()、DisplayToLogical()、および ODBCToLogical() メソッドを使用することで、内部の Logical 形式と、Display 形式または ODBC 形式間の変換を定義できます。SQL SelectMode が Display である場合、LogicalToDisplay 変換が適用され、返り値は表示用にフォーマットされます。既定の SQL SelectMode は Logical です。そのため、既定では、返り値は、そのストレージ形式で表示されます。
SelectMode は、クエリ結果セットのデータを表示する形式に影響し、WHERE 節などでデータ値を指定する形式にも影響します。InterSystems IRIS では、保存モードおよび指定された SelectMode に基づいて、適切な変換方式が適用されます。指定されたデータ値と SelectMode が一致しないと、エラーが生じるか誤った結果となる可能性があります。例えば、DOB が $HOROLOG 論理形式で格納される日付であり、WHERE 節で WHERE DOB > 2000–01–01 (ODBC 形式) と指定されている場合は、SelectMode = ODBC ならば、意図した結果が返されます。SelectMode = Display ならば、SQLCODE -146 [入力された日付を妥当な日付論理値に変換できません] が返されます。SelectMode = Logical ならば、2000–01–01 を論理データ値として解釈しようとするため、0 行が返されます。
ほとんどのデータ型で、3 つの SelectMode モードは、同じ結果を返します。以下のデータ型は、SelectMode オプションによる影響を受けます。
以下のように SQL SelectMode を指定します。
データ照合
照合は、値を並べる方法と比較する方法を指定するもので、InterSystems SQL と InterSystems IRIS オブジェクトのどちらにも欠かせない要素です。
照合タイプは、フィールド/プロパティ定義の一部として指定できます。特に指定がない場合、文字列フィールド/プロパティは、ネームスペースのデフォルトの照合に設定されます。デフォルトでは、文字列に対するネームスペースのデフォルトの照合は SQLUPPER に設定されています。SQLUPPER 照合では、並べ替えと比較のために文字列は大文字に変換されます。そのため、特に指定がない場合、文字列の並べ替えと比較では大文字と小文字が区別されません。
照合タイプはインデックス定義の一部として指定できます。また、インデックス付きフィールドの照合タイプを使用することもできます。
SQL クエリでは、フィールド名に照合関数を適用することで、フィールド/プロパティに定義されている照合タイプをオーバーライドできます。ORDER BY 節では、クエリの結果セットの順序を指定できます。指定した文字列フィールドが SQLUPPER として定義されている場合、クエリ結果の順序では大文字と小文字が区別されなくなります。
詳細は、"InterSystems SQL の使用法" の “照合” の章を参照してください。
SQL の実行
InterSystems IRIS は、SQL コードを記述し、実行する多くの方法をサポートしています。これには、以下のものがあります。
InterSystems IRIS オブジェクト (クラスおよびメソッド) は、以下の作業に使用できます。