この記事の目次
SalesforceのSOQL Queryとは?

SalesforceのSOQL Queryが使用できる環境

SOQL Query構文について
SELECT fields FROM ObjectName [WHERE Condition]
から始まり、必要に応じて
[TYPEOF typeOfField whenExpression[...] elseExpression END][...]
また
[WHERE conditionExpression]
などの構文を追加します。
もしSOQLステートメントの長さが10万字を超える場合、例外コードを返され結果は返ってこないのでご注意ください。
SOQL Queryの使用例

ApexからSalesforceのデータを取得
Apexはレコードに直接アクセス可能なので、SOQL QueryをApexコードに書き込めば結果を取得できます。 その際、SOQLステートメントを角括弧でラップして戻り値をsObjectの配列に割り当てます。 たとえば、Account[] accts = [SELECT Name,Phone FROM Account];
上記コードで名前と電話の項目を持つすべての取引先レコードを取得できます。
Visualforceでのクエリの実行
VisualforceではSOQL Queryを使用してクエリを実行し、結果を取得できます。 SOQLはApexで使用されますが、他のSalesforceAPIと併用も可能です。 たとえば、新しいクラスを定義し、コンストラクタメソッドを追加したい場合、global with sharing class WarehouseUtils {
public WarehouseUtils(ApexPages.StandardSetController controller) { }
// findNearbyWarehouses method goes here
}
こちらのSOQLコードで可能です。
SOQL Queryの注意点

処理速度
SOQLは、取得項目が複数になればその分処理速度は遅くなります。 処理速度の低速化を防ぎたい場合の方法は、不要な項目取得のコードは削除することや数式項目を取得しないこと、そしてインデックスを使用するようにするなどです。インデックスを使用すれば、テーブルを完全にスキャンすることがなくなるので処理が高速化されます。 Salesforceでは、クエリの処理速度短縮のため標準インデックスとカスタムインデックスをサポートしています。 標準インデックスは付与されている項目において検索条件が合計レコード数の30%未満でかつ最大で1,000,000件であれば使用され、カスタムインデックスは検索条件が合計レコード数の10%未満かつ最大で333,333件であれば使用されます。 もし1,000,000件以上の項目がある場合はインデックスを使用できないので、その場合はコードの改善で対処を試みましょう。 出典:SOQL クエリの処理速度への考慮事項について 参照:https://help.salesforce.com/articleView?id=000336897&type=1&mode=1joinがほぼ使えない
SOQLではjoinして簡単にデータを取得できません。 joinしたい場合は、リレーションクエリを使用する必要があります。 たとえば、SELECT Id, Name, Account.Name
FROM Contact
WHERE Account.Industry = 'IT'
こちらのコードでは、業種が「IT」の取引先責任者に関してのみIDと名前を返し、返された各取引先責任者に関しては取引先名を返します。
SOQL Queryを駆使して、スマートに情報を扱いましょう!
