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

SOQL SELECT の構文

SOQL クエリ構文は、必須の SELECT ステートメントとそれに続く 1 つ以上の省略可能な句 (TYPEOFWHEREWITHGROUP BYORDER 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 です。
  • 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) などの集計関数とすることも、結果の翻訳内でラップすることもできます。

typeOfField 複数のオブジェクト種別を参照できる、objectType の多態的なリレーション項目、または objectType の親の多態的な項目。たとえば、Task の Who リレーション項目には、Contact または Lead のいずれかを使用できます。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 ステートメントでは、API は MALFORMED_QUERY 例外コードを返します。結果の行は返されません。

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

    Lightning のページレイアウトに 250 個を超える項目が含まれている場合も QUERY_TOO_COMPLICATED エラーが発生することがあります。Lightning ではレコードページレイアウトの項目を取得するために自動生成された SOQL が使用されるため、お客様が記述した SOQL がなくてもこのエラーが発生する場合があります。

    含まれている通貨項目が多すぎる場合にも、文字数の制限に達することがあります。通貨項目では、format メソッドを使用するために SOQL が必要であるため、各通貨項目の API 参照名の長さがおよそ 2 倍になります。

    メモ

  • 結果のローカライズ — SELECT ステートメントには、ローカライズされた項目をサポートする 結果の翻訳convertCurrency()、および FORMAT() 関数を含めることができます。
  • Apex の動的 SOQL Apex では、SOQL ステートメントや SOSL ステートメントをその場で使用するには、角括弧で囲む必要があります。前にコロン (:) がある場合は、Apex スクリプト変数と式を使用できます。
  • 結果の並び替え — クエリで ORDER BY 句を使用しない限り、結果の順序は保証されません。
  • 選択リスト値API バージョン 39.0 以降では、値の API 参照名で選択リスト値を照会するため、実際の値とは異なる可能性があります。