2021/06/28

SalesforceのSOQL Queryとは?使用例や注意点をご紹介

 
  

SalesforceのSOQL Queryとは?

SOQLとは、Salesforce Object Query Languageの略で、Salesforceのオブジェクトクエリ言語です。 SOQLを使えば、組織のデータベースに保存された情報を読み込めます。SQL言語に近いので、SQLに見識のある方は取っつきやすいでしょう。似たようなものにSalesforce Object Search Language、略してSOSLと呼ばれるものもあります。 どちらを使用するかは、検索したいオブジェクトや項目を認識しているかどうか、何の操作をするかで決まります。 もし数値、日付、またはチェックボックス項目からデータを取りたい、そしてデータがどのオブジェクトにあるかを認識しているのであれば、SOQLを利用しましょう。

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

SOQLはApex ステートメントやVisualforceコントローラおよびgetterメソッドで使用でき、他にもSalesforce CLIまたはVisual Studio Code向けの拡張機能などでも使用できます。 どの環境で使用した場合も、SQL言語のSELECTコマンドと同じように条件を指定して使用します。しかしSOQLでSQLと同じような機能のすべてが使用できるわけではありません。 たとえば、計算式を使用することはSQLではできてもSOQLではできません。

SOQL Query構文について

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

SOQL Queryの使用例

SalesforceにおいてSOQL Queryを使用する場合には、ApexからSalesforceのデータを取得する場合や、Visualforceでのクエリの実行を行う場合があります。 下記にてそれぞれ紹介いたします。

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 Queryは使いこなせればとても便利なツールですが、処理速度やjoinがほぼ使えない点に注意が必要です。 下記にてそれぞれ紹介する内容を参考に、今後の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=1

joinがほぼ使えない

SOQLではjoinして簡単にデータを取得できません。 joinしたい場合は、リレーションクエリを使用する必要があります。 たとえば、
SELECT Id, Name, Account.Name
FROM Contact
WHERE Account.Industry = 'IT'
こちらのコードでは、業種が「IT」の取引先責任者に関してのみIDと名前を返し、返された各取引先責任者に関しては取引先名を返します。

SOQL Queryを駆使して、スマートに情報を扱いましょう!

SOQL Queryは、Salesforce内のデータを検索、参照するのに最適なQueryです。 スマートにデータを扱い、作業の効率化を図るためにも、SOQLをぜひマスターしましょう。]]>

ITエンジニアへのキャリアチェンジならキャリアチェンジアカデミー

この記事の監修者・著者

株式会社オープンアップITエンジニア
株式会社オープンアップITエンジニア
未経験からITエンジニアへのキャリアチェンジを支援するサイト「キャリアチェンジアカデミー」を運営。これまで4500人以上のITエンジニアを未経験から育成・排出してきました。
・AWS、salesforce、LPICの合計認定資格取得件数:2100以上(2023年6月時点)
・AWS Japan Certification Award 2020 ライジングスター of the Year 受賞

おすすめの動画

  • 【未経験からIT業界へ転職するなら】相談窓口とスキルの獲得はここで解決!IT転職が一気に有利に!【キャリアチェンジアカデミー】

  • 【費用一切不要】未経験からIT業界へ転職するならまずはここへ相談!【キャリアチェンジアカデミー】

  • 【何のエンジニアになれるのか?】未経験からITエンジニアを目指すとこんな道がある【キャリアチェンジアカデミー】