version 11.3 (Modified)
SELECT [ALL | DISTINCT]
{* | select_item, ..., select_item}
FROM table_reference, ..., table_reference
[WHERE search_condition]
[ORDER BY sort_list]
[GROUP BY sort_list]
[HAVING search_condition]
[OFFSET 4d_language_reference |int_number]
[LIMIT {4d_language_reference |int_number | ALL}]
[INTO {4d_language_reference, ..., 4d_language_reference | LISTBOX 4d_language_reference}]
[FOR UPDATE]
説明
SELECTコマンドは一つ以上のテーブルからデータを取得するために使用します。
*を渡すと、すべてのカラムを取得します。そうでなければ、取得するカラムを個々に指定するために、select_itemを (コンマで区切って) 渡すことができます。オプションのキーワードDISTINCTをSELECT文に渡すと、重複データは返されません。
"*"とフィールドを混在させたクエリを行うことはできません。例えば、以下の文:
SELECT *, SALES, TARGET FROM OFFICES
は許可されません。
SELECT * FROM OFFICES
が可能です。
FROM節は、データを取得するテーブルをtable_referenceで指定するために使用します。標準のSQL名または文字列を渡すことができます。テーブル名の場所にクエリ式を渡すことはできません。オプションのキーワードASを渡して、カラムにエイリアスを割り当てることもできます。このキーワードが渡す際は、エイリアス名を続けます。SQL名または文字列を使用できます。
オプションのWHERE節は、データを選択するための条件を指定します。これはsearch_conditionを渡すことで行われ、FROM節により取得されるデータに適用されます。search_conditionは常にブールタイプの値を返します。
オプションのORDER BY節は、選択されたデータにsort_list条件を適用するために使用します。ASCやDESCキーワードを追加して、並び替えの昇順・降順を指定することもできます。デフォルトで昇順が適用されます。
オプションのGROUP BY節は、渡されたsort_list条件に基づいて、同じデータをグループ化するために使用します。複数のグループカラムを渡すことができます。この節は冗長を避けたり、集約関数 (Sum、Count、Min、Max) を計算するために使用できます。これらはグループに対して適用されます。ORDER BY節と同様、ASCやDESCキーワードを追加できます。
オプションのHAVING節は、これらのグループのひとつにsearch_conditionを適用するために使用します。HAVING節はGROUP BY節なしで渡すこともできます。
オプションのOFFSET節は、LIMIT節のカウントを開始する前にスキップするデータの数 (4d_language_reference変数またはint_number) を指定するために使用します。
オプションのLIMIT節は、返されるデータ数を4d_language_reference変数またはint_numberに制限するために使用します。
オプションのINTO節は、データを格納する変数4d_language_referenceを指定します。LISTBOXキーワードを渡して、4d_language_referenceリストボックスにデータを置くこともできます。
FOR UPDATE節が指定されたSELECTコマンドは、選択されたすべてのレコードへの排他的な書き込みロックを試みます。ロックできないレコードがあると、コマンドの実行に失敗し、エラーが生成されます。すべてのレコードがロックされると、カレントのトランザクションがコミットされるかロールバックされるまで、レコードはロックされたままとなります。
例題
1. 映画のタイトル、公開年、チケット販売数が登録された一つのテーブルからなるデータベースがあります。
1979年以降の映画において、チケット販売総数が年合計1000万未満の年とそのチケット販売総数を取得します。最初の5年をスキップし、その後の10年間のみを表示し、年で並び替えます.
C_LONGINT($MovieYear;$MinTicketsSold;$Offset;$Limit) ARRAY INTEGER(aMovieYear;0) ARRAY LONGINT(aTicketsSold;0) $MovieYear:=1979 $MinTicketsSold:=10000000 $Offset:=5 $Limit:=10 Begin SQL SELECT Year_of_Movie, Sum(Tickets_Sold) FROM MOVIES WHERE Year_of_Movie >= :$MovieYear GROUP BY Year_of_Movie HAVING Sum(Tickets_Sold) < :$MinTicketsSold OFFSET :$Offset LIMIT :$Limit ORDER BY 1 INTO :aMovieYear, :aTicketsSold; End SQL
2. これは複合検索条件を使用する例です:
SELECT supplier_id FROM suppliers WHERE (name = 'CANON') or (name = 'Hewlett Packard' and city = 'New York') or (name = 'Firewall' and status = 'Closed' and city = 'Chicago');
3. SALES_PERSONSテーブルから売り上げ情報を取得します。QUOTAは売り上げ目標、SALESは実際の売り上げです:
ARRAY REAL(Min_Values;0) ARRAY REAL(Max_Values;0) ARRAY REAL(Sum_Values;0) Begin SQL SELECT Min ( ( SALES * 100 ) / QUOTA ), Max ( ( SALES * 100 ) / QUOTA ), Sum ( QUOTA ) - Sum ( SALES ) FROM SALES_PERSONS INTO :Min_Values, :Max_Values, :Sum_Values; End SQL
4. これは指定した都市が出身地の俳優を検索する例です:
ARRAY TEXT(aActorName;0) ARRAY TEXT(aCityName;0) Begin SQL SELECT ACTORS.FirstName, CITIES.City_Name FROM ACTORS AS 'Act', CITIES AS 'Cit' WHERE Act.Birth_City_ID=Cit.City_ID ORDER BY 2 ASC INTO : aActorName, : aCityName; End SQL
参照
4d_language_reference, search_condition, select_item, sort_list, subquery, table_reference.