Skip to main content

SOQL クエリ入門

学習の目的

この単元を完了すると、次のことができるようになります。

  • 必須の句を使用して有効な SOQL クエリを構成する。
  • 複数の条件でクエリ結果を絞り込む。
  • クエリ結果を並び替える。

「Apex コーディングスキルの構築」トレイルでいきなりこのモジュールに取り組むには少し無理があります。このモジュールの先に進む前に、「システム管理者のための Apex の基本」「システム管理者のためのオブジェクト指向プログラミング」に戻ってバッジを獲得してください。

この 2 つのバッジをすでに獲得している場合は 先に進みましょう! クラス、変数、sObject の作成方法の基本事項を習得しているため、Salesforce オブジェクトクエリ言語、略して SOQL (「ソクル」と発音します) について学習する下地ができています。

SOQL とは?

SOQL は、Salesforce データベースからレコードデータを取得する言語です。「システム管理者のためのオブジェクト指向プログラミング」で、データ操作言語 (DML) のステートメントを使用してレコードを挿入、更新、削除できることを学習しました。では、データベースにすでに存在するデータを取得したい場合はどうすればよいのでしょうか? SOQL を使用すればデータを簡単に取得できます。

SOQL クエリの作成は、レポートの作成とよく似ています。レポートを作成するときは、次の点を自問します。

  1. どのような項目を表示したいか?
  2. どこに項目を配置するか?

SOQL クエリを作成するときも同じことを自問します。クエリの場合、こうした質問に対する答えが項目やオブジェクトになります。

「SELECT Name, Email FROM Contact」の場合、 SELECT と FROM が SOQL キーワードで、 Name と Email が項目、Contact が Salesforce の標準オブジェクトです。

このクエリは SOQL キーワード (SELECTFROM)、レコード項目 (NameEmail)、オブジェクト (Contact 標準オブジェクト) で構成されています。

このクエリは何をするのでしょうか? データベースの取引先責任者レコードに関する特定の情報を取得します。では、こうした要素がどのように組み合わせられるのかを検証し、実際にクエリをいくつか記述してみましょう。まず、SOQL クエリの必須の要素から見ていきます。

必須の SOQL 句

SELECT

どの SOQL クエリも、SELECT 句 と FROM 句 という 2 つの句が基盤になります。句はパズルのピースと考えることができます。完全なクエリを構成する要素です。

「SELECT Name, Email FROM Contact」の場合、 「SELECT Name, Email」が SELECT 句です。

どの SOQL クエリにも、SELECT キーワードで始まる SELECT 句があります。SELECT 句は、Salesforce レコードの 1 つ以上の項目を (カンマ区切りで) 指定します。この例のクエリは NameEmail の 2 つの項目を返します。

項目名に関する注意事項: システム管理者が他のシステム管理者との会話で「項目」と言う場合、「項目の表示ラベル」を指しているものと思われます。他方、開発者はコードで「API 参照名」を使用します。そのため、SOQL クエリにおける項目は、「項目の表示ラベル」ではなく、常に「項目の API 参照名」です。項目の API 参照名がわからなくても心配することはありません。調べる方法があります。この点は、モジュールの後半で説明します。

FROM

SOQL クエリの作成に欠かせない 2 つ目の句が FROM 句です。

「SELECT Name, Email FROM Contact」の場合、 「FROM Contact」が FROM 句です。

FROM キーワードから始まる FROM 句は、Salesforce データベースのオブジェクトを指定します。この場合は、Contact オブジェクトからデータを取得します。では、クエリを実行するとデータがどのように表示されるのか見てみましょう。

一緒にトレイルを進みましょう

エキスパートと一緒にこの手順を進めますか? 次の動画をご覧ください。これは Trailhead Live の「Trail Together」(一緒にトレイル) シリーズの一部です。完全なセッションへのリンクは、「リソース」セクションを参照してください。

SOQL を実際に使ってみる

この単元では、開発者コンソールのクエリエディターで SOQL クエリを構築する手順を説明します。この単元にハンズオン Challenge はありませんが、以下の手順を一緒に実行してみたい方は、この時点で新しい Trailhead Playground を作成します。「Trailhead Playground の管理」モジュールで詳細を確認してください。Trailhead Playground を作成するには、通常 3、4 分かかります。このモジュールの後半でハンズオン Challenge に取り組むときもこの Playground を使用します。

Note

必ず新しい Trailhead Playground を使用してください。既存の組織や Playground を使用すると、Challenge に取り組んでいるときに問題が発生することがあります。

クエリエディターを使用してクエリを構築する

  1. Trailhead Playground で、[Setup (設定)] をクリックして [開発者コンソール] を選択します。
  2. [File (ファイル)] | [Open (開く)] | [Objects (オブジェクト)] | [Contact] をクリックします。
    エンティティ種別とそのエンティティがリストされている [Open (開く)] ウィンドウ。[Entity Type (エンティティ種別)] では [Objects (オブジェクト)]、[Entities (エンティティ)] では [Contact] が強調表示されています。
  3. [Open (開く)] をクリックします。
    [Contact (取引先責任者)] オブジェクトが開き、関連付けられているすべての項目の名前とデータ型がリストされます。
  4. 下部パネルで [Query Editor (クエリエディター)] タブを選択します。(タブが表示されていない場合は、ウィンドウの下部にある上矢印をクリックします。)
    3 つのウィンドウパネルからなる [Query Editor (クエリエディター)] タブ
    [Query Editor (クエリエディター)] には 3 つのセクションがあります。左上のセクション (1) にはクエリが表示されます。ここでクエリを編集できます。左下のセクション (2) にはエラーが表示されます。右側のセクション (3) には SOQL クエリの実行履歴が保存されます。
  5. Ctrl キーを押しながらクリックする操作 (Windows) または CMD キーを押しながらクリックする操作 (Mac) で、EmailNameLanguages__c の各項目を選択します。
  6. [Query (クエリ)] をクリックします。
    選択したオブジェクトと項目に基づいて、[Query Editor (クエリエディター)] に SOQL クエリが表示されます。クエリビルダーで項目を選択すると、SOQL クエリにその項目 API 参照名が自動的に挿入されます。つまり、このツールを使用すれば、API 参照名を記憶したり検索したりする必要がありません。
  7. [実行] をクリックします。
    クエリで Id、Email、Name、Languages__c の各項目が返されます。

クエリが実行されると、結果に要求したとおりの内容が示されます。さらに、クエリエディターを使用した場合は、自動的に Id も返されます。便利ですよね?

省略可能な SOQL 句

SELECT 句 と FROM 句は必須ですが、SOQL にはクエリを絞り込むことを目的とする省略可能な句もあります。

Trailhead Playground で作成するサンプルクエリでは、返されるレコードがごく少数です。上記のクエリでは 20 件のレコードが返されました。けれども、レコードが何千件もある場合にはどうなるでしょうか? それほどのデータを処理するには相当のコンピューティング機能が必要です。SOQL に全レコードのサブセットを返す方法があればよいと思いませんか? 実際、その方法が存在します。

WHERE

WHERE 句は、レコードが選択されて返されるために満たすべき条件を設定します。WHERE 句の使い方は、リストビューやレポートで検索条件を使用して表示されるデータを制限する場合と同じです。たとえば、Stella という名の取引先責任者を探している場合、次のとおり、クエリの末尾に WHERE FirstName = 'Stella' を追加できます。

SELECT Name, Email FROM Contact WHERE FirstName = 'Stella'

また、1 つ以上の条件を使用して、WHERE 句による絞り込みを定義することもできます。AND、OR、IN という 3 つの演算子を使用すれば、数通りの方法で絞り込みを実行できます。では、いくつかの例を見てみましょう。

AND

AND を使用すると、2 つの条件を満たすレコードが返されます。このクエリでは、名が Stella で姓が Pavlova のすべてのレコードが返されます。

SELECT Name, Email
FROM Contact
WHERE FirstName = 'Stella' AND LastName = 'Pavlova'

OR

OR を使用すると、2 つの条件の 1 つを満たすレコードが返されます。このクエリでは、姓が James または Barr のレコードが返されます。

SELECT Name, Email
FROM Contact
WHERE LastName = 'James' OR LastName = 'Barr'

IN

IN を使用すると、3 つ以上の条件の 1 つ以上を満たすレコードが返されます。IN 句は通常、選択リストの値または LIST や SET の値を返す場合に使用します。OR 条件が多数あるため複雑になる可能性がある場合、IN を使用すればクエリが簡潔になります。このクエリでは、姓が James、Barr、Nedaerk、Forbes のいずれかであるすべてのレコードが返されます。

SELECT Name, Email FROM Contact
WHERE LastName IN ('James', 'Barr', 'Nedaerk', 'Forbes')

LIMIT

LIMIT キーワードは、返されるレコードの最大数を設定します。LIMIT を使えば、テスト時にクエリが大量のデータセットを処理する間待っている必要がなくなります。SOQL の使い方を学んでいくうちに、多数のレコードが返されないようにする適切な方法がわかってきますが、それまでは LIMIT が簡単な解決策です。では、この例のクエリに LIMIT を追加してみましょう。

  1. 開発者コンソールのクエリエディターに戻ります。
  2. 次のとおり、クエリの末尾に LIMIT 5 と入力します。
    SELECT Email, Name FROM Contact LIMIT 5
  3. [実行] をクリックします。

[Query Results (クエリ結果)] ペインに 5 件の結果が示されます。

ORDER BY

結果の件数を管理する方法はわかりましたが、結果を整理するにはどうすればよいのでしょうか? ORDER BY 句を使用して、特定の項目の値を基準に結果を並び替えます。必要に応じて、ORDER BY 句に修飾子を使用し、昇順 (デフォルト) または降順を指定します。このやり方はスプレッドシートと同じです。最後に、空の項目が多数ある場合は、NULLS 修飾子を使用して NULL 値を最初 (デフォルト) または最後にまとめます。

構文

説明

ASC

結果を昇順で返します。

SELECT Name, Email FROM Contact
ORDER BY Name ASC
LIMIT 5

DESC

結果を降順で返します。

SELECT Name, Email FROM Contact
ORDER BY Email DESC
LIMIT 5

NULLS

FIRST | LAST

null レコードを最初 (NULLS FIRST) または最後 (NULLS LAST) に返します。

SELECT Name, Email FROM Contact
ORDER BY Email
NULLS LAST

ASC の例では、SELECT Name, Email FROM Contact ORDER BY Name ASC LIMIT 5 で、名前を基準に昇順に並び替えられた 5 人の取引先責任者の Name 項目と Email 項目が返されます。

取引先責任者オブジェクトの名前項目 (昇順) とメール項目をリストするクエリ結果

NULLS の例として、SELECT Name, Email FROM Contact ORDER BY Email NULLS LAST を実行すると、メールを基準に名前とメールが昇順で返されます (昇順がデフォルトの並び替え順であるため)。メールアドレスのないレコードは最後にまとめられます。

名前項目とメール項目をリストしたクエリ結果

SOQL の優れた機能の基本事項を学習しただけで、大量のデータセットを取得して結果を絞り込み、各自のニーズに合わせて返されたデータを整理できるようになりました。★

リソース

Salesforce ヘルプで Trailhead のフィードバックを共有してください。

Trailhead についての感想をお聞かせください。[Salesforce ヘルプ] サイトから新しいフィードバックフォームにいつでもアクセスできるようになりました。

詳細はこちら フィードバックの共有に進む