この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

SOQL SELECT の構文

SOQL SELECT ステートメントでは、次の構文を使用します。

1SELECT fieldList [ subquery ]
2[TYPEOF typeOfField whenExpression elseExpression END]
3FROM objectType[,objectType...][USING [SCOPE filterScope]]
4[WHERE conditionExpression]
5[WITH [DATA CATEGORY] filteringExpression]
6[GROUP BY fieldGroupByList | ROLLUP (fieldSubtotalGroupByList) | CUBE (fieldSubtotalGroupByList) [HAVING havingConditionExpression]] 
7[ORDER BY fieldOrderByList ASC | DESC ? NULLS FIRST | LAST ?]
8[LIMIT ?]
9[OFFSET ?]
10[FOR VIEW] | [FOR REFERENCE]
11[ UPDATE [TRACKING], [VIEWSTAT] ]

TYPEOF は、現在 SOQL 多態性機能の一部の開発者プレビューとして利用可能です。組織での TYPEOF の有効化については、salesforce.com にお問い合わせください。

メモ

構文 説明
fieldList subquery 指定した object から取得する、1 つ以上の項目のカンマ区切りのリストを指定します。次の例の太字の要素が fieldlist です。
  • SELECT Id, Name, BillingCity FROM Account
  • SELECT count() FROM Contact
  • SELECT Contact.Firstname, Contact.Account.Name FROM Contact
有効な項目名を指定する必要があり、各指定項目の参照レベルの権限を持っている必要があります。fieldList はクエリ結果内の項目の順序を定義します。
クエリでリレーションをトラバースする場合は、fieldList にサブクエリを含めることができます。次に例を示します。
1SELECT Account.Name, (SELECT Contact.LastName FROM Account.Contacts)
2FROM Account

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 句は次の種別のオブジェクトのみを絞り込みます。
  • Question — 質問をクエリします。
  • KnowledgeArticleVersion — 記事をクエリします。

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 つ以上の項目のカンマ区切りのリストを指定します。たとえば、取引先責任者をクエリし、結果を姓、次に名の順に並び替えることができます。
1SELECT Id, LastName, FirstName
2FROM Contact
3ORDER BY LastName, FirstName
次の実装のヒントに注意してください。
  • ステートメントの文字数制限デフォルトでは、SOQL ステートメントの長さは 20,000 文字を超えることができません。この最大長を超える SOQL ステートメントでは、APIMALFORMED_QUERY 例外コードを返します。結果の行は返されません。

    多数の数式項目を含むステートメントなど、長くて複雑な SOQL ステートメントでは、QUERY_TOO_COMPLICATED エラーが発生する場合があります。これは、元の SOQL ステートメントが上限の 20,000 文字未満であっても、Salesforce によって処理されるときにステートメントが内部展開されるために発生します。これを避けるには、SOQL ステートメントの複雑さを軽減します。

    メモ

  • 結果のローカライズ — SELECT ステートメントには、ローカライズされた項目をサポートする toLabel() および convertCurrency() 関数を含めることができます。
  • Apex の動的 SOQLApex では、SOQL ステートメントや SOSL ステートメントをその場で使用するには、大括弧で囲む必要があります。さらに、前にコロン (:) がある場合は、Apex スクリプト変数と式を使用できます。
  • 結果の並び替え — クエリで ORDER BY 句を使用しない限り、結果の順序は保証されません。