SOQL SELECT の構文
SOQL クエリ構文は、必須の SELECT ステートメントとそれに続く 1 つ以上の省略可能な句 (TYPEOF、WHERE、WITH、GROUP BY、ORDER BY など) で構成されます。
SOQL SELECT ステートメントでは、次の構文を使用します。
1SELECT fieldList [subquery][...]
2[TYPEOF typeOfField whenExpression[...] elseExpression END][...]
3FROM objectType[,...]
4 [USING SCOPE filterScope]
5[WHERE conditionExpression]
6[WITH [DATA CATEGORY] filteringExpression]
7[GROUP BY {fieldGroupByList|ROLLUP (fieldSubtotalGroupByList)|CUBE (fieldSubtotalGroupByList)}
8 [HAVING havingConditionExpression] ]
9[ORDER BY fieldOrderByList {ASC|DESC} [NULLS {FIRST|LAST}] ]
10[LIMIT numberOfRowsToReturn]
11[OFFSET numberOfRowsToSkip]
12[FOR {VIEW | REFERENCE}[,...] ]
13 [ UPDATE {TRACKING|VIEWSTAT}[,...] ]| 構文 | 説明 |
|---|---|
| fieldList subquery | 指定した object から取得する、1 つ以上の項目のカンマ区切りのリストを指定します。次の例の太字の要素が fieldlist です。
クエリでリレーションをトラバースする場合は、fieldList にサブクエリを含めることができます。次に例を示します。
fieldlist は、COUNT() や COUNT(fieldName) などの集計関数とすることも、toLabel() 内でラップすることもできます。 |
| typeOfField | 複数のオブジェクト種別を参照できる、objectType の多態的なリレーション項目、または objectType の親の多態的な項目。たとえば、Event の What リレーション項目には Account、Campaign、Opportunity のいずれかを使用できます。typeOfField は、fieldList でも参照されるリレーション項目を参照できません。詳細は、「TYPEOF」を参照してください。 |
| whenExpression | WHEN whenObjectType THEN whenFieldList という形式の句。TYPEOF 式内には、1 つ以上の whenExpression 句を使用できます。詳細は、「TYPEOF」を参照してください。 |
| elseExpression | ELSE elseFieldList という形式の句。これは、TYPEOF 式内の省略可能な句です。詳細は、「TYPEOF」を参照してください。 |
| objectType | query() の対象オブジェクトの種別を指定します。Account など、有効なオブジェクトを指定し、そのオブジェクトの参照レベルの権限を持っている必要があります。 |
| filterScope | API バージョン 32.0 以降で利用できます。filterScope は、クエリの結果を制限するために指定します。 |
| conditionExpression | WHERE が指定されている場合は、指定したオブジェクト (objectType) 内で絞り込みをする行と値が判断されます。指定されていない場合、query() はオブジェクト内でユーザが参照可能なすべての行を取得します。 |
| filteringExpression |
WITH DATA CATEGORY が指定されている場合、query() は指定したデータカテゴリに関連付けられていて、ユーザが参照可能な、条件に一致するレコードのみを返します。指定されていない場合、query() はユーザが参照可能な、条件に一致するレコードを返します。WITH DATA CATEGORY 句は次の種別のオブジェクトのみを絞り込みます。
WITH DATA CATEGORY 句についての詳細は、「WITH DATA CATEGORY filteringExpression」を参照してください。 |
| fieldGroupByList | API バージョン 18.0 以降で利用できます。クエリ結果をグループ化するために使用される 1 つ以上の項目のカンマ区切りのリストを指定します。GROUP BY 句は、コード内で個々のレコードを処理せずに、データを集計してクエリ結果を積み上げ集計するために、集計関数と共に使用します。「GROUP BY」を参照してください。 |
| fieldSubtotalGroupByList | API バージョン 18.0 以降で利用できます。クエリ結果をグループ化するために使用される項目を最大 3 つまでカンマで区切って指定します。結果にはグループ化されたデータの小計行が含まれます。「GROUP BY ROLLUP」および「GROUP BY CUBE」を参照してください。 |
| havingConditionExpression | API バージョン 18.0 以降で利用できます。クエリに GROUP BY 句が含まれている場合、この条件式では GROUP BY によって返されるレコードが絞り込まれます。「HAVING」を参照してください。 |
| fieldOrderByList | クエリ結果を並び替えるために使用される 1 つ以上の項目のカンマ区切りのリストを指定します。たとえば、取引先責任者をクエリし、結果を姓、次に名の順に並び替えることができます。 |
次の実装のヒントに注意してください。
- ステートメントの文字数制限 — デフォルトでは、SOQL ステートメントの長さは 20,000 文字を超えることができません。この最大長を超える SOQL ステートメントでは、API は MALFORMED_QUERY 例外コードを返します。結果の行は返されません。
- 結果のローカライズ — SELECT ステートメントには、ローカライズされた項目をサポートする toLabel()、convertCurrency()、および FORMAT() 関数を含めることができます。
- Apex の動的 SOQL — Apex では、SOQL ステートメントや SOSL ステートメントをその場で使用するには、角括弧で囲む必要があります。前にコロン (:) がある場合は、Apex スクリプト変数と式を使用できます。
- 結果の並び替え — クエリで ORDER BY 句を使用しない限り、結果の順序は保証されません。