データベース内のテーブルから行を検索します。
Synopsis
SELECT [ALL | DISTINCT] [TOP {parameter | literal}]
  select-item
  [INTO host-variable-list]
  FROM table-reference
  [WHERE condition-expression]
  [GROUP BY scalar-expression-commalist]
  [HAVING condition-expression]

  Where select-item may be:

  [range-variable .] * 

  	scalar-expression [[AS] column]
引数
TOP parameter  オプション — TOP キーワードのコンテンツを指定する変数 
TOP literal  オプション — 表示する TOP キーワードのリテラル行数 
select-item  検索する列 (「説明」 参照)。複数の列はコンマで区別されたリストで指定。 * シンボルですべての列を検索することも可能。 
INTO host-variable-list  オプション — 値を格納する 1 つ以上のホスト変数 
FROM table-reference  データを検索するテーブル。 2 つ以上のテーブルの検索が可能です。複数のテーブルに JOIN を実行して、JOIN 処理の結果テーブルからデータを取得します。 %INORDER キーワードや %FULL キーワードも指定できます。 詳細は FROM を参照してください。 
WHERE condition-expression  オプション — 検索するデータにパラメータを指定する修飾子 
GROUP BY scalar-expression-commalist  オプション — 検索したデータをどのように格納するかを指定するスカラ式。 を含む場合もあります。 
HAVING condition-expression  オプション — 検索するデータにパラメータを指定する修飾子 
range-variable  テーブル名の定義済みエイリアス 
scalar-expression  フィールド識別子 
column  フィールドのエイリアス 
概要
SELECT 文は Caché データベースのデータを検索します。最も単純な形式では、1 つ以上の項目を検索します。この場合、それらの項目は select-item リストで指定し、テーブルは FORM table-reference 節で指定します。
SELECT 文は独立したクエリとして使用することも、大きな文の一部、つまりサブクエリとして使用することもできます。
Caché は、SELECT の成功か失敗かを示した、ステータス変数 SQLCODE を返します。また、SELECT 演算は %ROWCOUNT ローカル変数を、選択された行の番号に設定します。
UNION 文で、単一もしくは複数の SELECT 文を単独のクエリに結合できます。クエリが単独の SELECT 文から構成されている場合、SELECT 文は ORDER BY 文で完了でき、クエリが複数の SELECT 文の UNION である場合、UNION 文は ORDER BY 文で完了できます。
以下は、SELECT 文のオプションです。
以下は必要なFROM 節です。検索される行から 1 つ以上のテーブル、ビューまたは JOIN 式を指定します。
以下のオプション要素は、FORM 節が返す仮想テーブルで動作します。すべてオプションですが、使用する場合は正しい順序で指定する必要があります。
SELECT コマンドが Caché のデータベースからデータを検索する場合、単独または複数の select-item のコンマで区切られたリストで実行されます (select-item-commalist 引数の形式)。
select-item は、ベーステーブル (オプションで range-variable で変更されたもの) のすべての列を参照するアスタリスク (*) と、スカラ式 (オプションで AS 節で変更されたもの) のいずれかで構成されています。
select-item がアスタリスク構文を使用する場合、テーブルのすべての列の参照を指定します。オプションの range-variable とピリオド (“.”) は、select-item を限定して、特定のテーブルのすべての列 (Students.* など) を指定するようにします。select-item が特に限定されておらず、アスタリスクがあるだけの場合、それがリストの唯一の項目になります。
select-item がスカラ式である場合は、識別子、値、演算子を組み合わせます。指定したタイプのスカラ値の特定の結果に評価します。最も単純な select-item は列の名前で、数字のスカラ式です。
スカラ式を指定する場合、オプションの AS 節はクエリから返される列の名前を指定します。 AS それ自体は必須項目ではありませんが、構文を明確にします。
以下のセクションは、SELECT 文の要素を説明します。
Select-item
これは、SELECT 文の主要な要素です。一般的には以下のようになります。
FROM table-reference-list
table-reference-list は、コンマで区切られたテーブル名やビュー名 (もしくは両方) のリストです。以下はその例です。
SELECT fields
FROM patients,states 
WHERE search-condition 
この例では、WHERE 節はクエリ選択から特定の行を認証するか、もしくは認証を取り消します。認証する行は、検索条件が真であるとするものです。検索条件は、AND、OR、NOT 演算子からリンク可能な、論理テスト (述語) のリストです。
SQL の述語は以下のカテゴリーに分類されます。
比較述語
以下は、使用できる比較述語です。
SQL 比較述語
述語 演算
等しい 
<>  等しくない 
より大きい 
より小さい 
>=  以上 
<=  以下 
以下はその例です。
SELECT fields FROM MyTable
WHERE birthdate < '01/01/60'
Caché の %STARTSWITH 拡張子も利用できるので、部分的一致も実行できます。以下はその例です。
SELECT fields FROM MyTable
WHERE Name %STARTSWITH 'SM'
SQL は照合 (値がソートされる順番) という点から比較演算子を定義します。まったく同様の方法で照合する場合の 2 つの値は等しくなります。2 つ目の値の後に照合される場合、値は別の値よりも大きくなります。例えば、文字列値に対する既定照合は大文字と小文字を区別しません。 例えば以下のようになります。
'AAA' = 'AAA'  真 
'AAA' = 'aaa'  真 
'AAA' = 'Aaa'  真 
'BBB' > 'aaa'  真 
BETWEEN 述語
これは、「より少ない」 と 「より大きい」 の組み合わせと同じ働きをします。以下はその例です。
SELECT fields FROM MyTable
WHERE Balance BETWEEN 100 AND 999
これは、100 から 999 の間のすべてのバランスを返します。
LIKE述語
これにより、以下のワイルドカード文字を使用してパターン・マッチングを実行できます。
LIKE ワイルドカード文字
文字 以下と一致
“_”  単独の文字 
“%”  0 かそれ以上の文字のシーケンス 
以下はその例です。
SELECT fields FROM MyTable
WHERE city_state LIKE '%MA%'
上記の文は、'MA' 文字列を含むすべての city_states を検索します。
LIKE 比較演算子は大文字と小文字を区別します。%SQLUPPERを使用し、上記例の 'Ma' のように文字列を受け取ります。
SELECT fields FROM MyTable
WHERE %SQLUPPER(city_state) LIKE '%MA%'
Note:
LIKE は照合を使用しません
LIKE ESCAPE は、LIKE 述語のエスケープ文字として任意の 1 文字の定義をサポートします。 このエスケープ文字は、直後の文字をワイルドカードやフォーマッティング文字ではなくリテラル文字として解釈するよう指示します。 以下の例では、LIKE ESCAPE を使用して '%_' の値を返しています。
SELECT * FROM MyTable
WHERE symbol_field LIKE '#%#_' ESCAPE '#'
NULL 述語
定義されていない値を見つけます。以下はその例です。
SELECT fields FROM MyTable
WHERE name IS NOT NULL 
IN 述語
IN には 2 つのフォーマットがあります。 1 つ目は、OR 演算子で複数の等値比較を結合する省略表現として使用します。以下はその例です。
SELECT fields FROM MyTable
WHERE state IN ('CA','NY','TX','FL','PA') 
以上の文は、state が括弧のリスト内の値と等しい場合、真と評価します。 リストの要素は定数または式です。 等式テストと同様に、照合が IN 比較に適用されます。
サブクエリで IN を使用し、列の値 (あるいは他の式) がサブクエリの行の値と等しいかどうかをテストできます。 例えば以下のようになります。
SELECT fields FROM MyTable
WHERE state IN 
 (SELECT state FROM state_tab 
 HAVING population > AVG(population)) 
サブクエリは、SELECT リスト内に必ず 1 項目のみ持ちます。
EXISTS述語
サブクエリが空のセットを評価するか否かをテストするために、サブクエリを使用して処理します。
SELECT t1.disease FROM illness_tab t1 WHERE EXISTS 
 (SELECT t2.disease FROM disease_registry t2 
 WHERE t1.disease = t2.disease 
 HAVING COUNT(t2.disease) > 100) 
GROUP BY column-list
GROUP BY 節はクエリの結果行をとり、単独または複数のデータベース列によって結果行を個別のグループに分割します。SELECT を GROUP BY 節と併せて使用するとき、GROUP BY フィールドの個別の各値に対して、1 行が検索されます。GROUP BY 節は概念的には Caché の拡張子である %FOREACH と似ていますが、%FOREACH はクエリ全体を制約することなく、サブ母集団で集約の選択を許可するのに対し、GROUP BY はクエリ全体で実行します。以下はその例です。
SELECT Department,Manager 
 FROM Employees 
 WHERE Department_Status <> 'Closed' 
 GROUP BY Department 
このクエリは各個別の部署に対し 1 行を返します。
HAVING search-condition
HAVING 節はグループで実行する WHERE 節と同じ働きをします。サブ母集団の集約と、全体の母集団の集約とを頻繁に比較します。以下はその例です。
SELECT Name,Salary,AVG(Salary), 
 AVG(Salary %AFTERHAVING) 
 FROM Employees 
 WHERE City = 'Boston' 
 HAVING Salary > AVG(Salary)
このクエリは、Boston の全従業員の名前や平均給与と、同じく Boston で給与が平均以上である従業員の給与の平均を検索します。
関連項目