Skip to main content
Bring your team and maximize your impact at Dreamforce. Register three or more to unlock $999 passes.

SOQL クエリ入門

学習の目的

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

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

<<a href="https://trailhead.salesforce.com/en/content/learn/trails/build-apex-coding-skills" rel="noreferrer noopener" target="_blank">>「Apex コーディングスキルの構築」</<a href="https://trailhead.salesforce.com/en/content/learn/trails/build-apex-coding-skills" rel="noreferrer noopener" target="_blank">>トレイルでいきなりこのモジュールに取り組むには少し無理があります。このモジュールの先に進む前に、<<a href="https://trailhead.salesforce.com/content/learn/modules/apex-basics-for-admins" rel="noreferrer noopener" target="_blank">>「システム管理者のための Apex の基本」</<a href="https://trailhead.salesforce.com/content/learn/modules/apex-basics-for-admins" rel="noreferrer noopener" target="_blank">>や<<a href="https://trailhead.salesforce.com/content/learn/modules/object-oriented-programming-for-admins" rel="noreferrer noopener" target="_blank">>「システム管理者のためのオブジェクト指向プログラミング」</<a href="https://trailhead.salesforce.com/content/learn/modules/object-oriented-programming-for-admins" rel="noreferrer noopener" target="_blank">>に戻ってバッジを獲得してください。

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

SOQL とは?

SOQL は、Salesforce データベースからレコードデータを取得する言語です。<<a href="https://trailhead.salesforce.com/en/content/learn/modules/object-oriented-programming-for-admins" rel="noreferrer noopener" target="_blank">>「システム管理者のためのオブジェクト指向プログラミング」</<a href="https://trailhead.salesforce.com/en/content/learn/modules/object-oriented-programming-for-admins" rel="noreferrer noopener" target="_blank">>で、データ操作言語 (DML) のステートメントを使用してレコードを挿入、更新、削除できることを学習しました。では、データベースにすでに存在するデータを取得したい場合はどうすればよいのでしょうか? SOQL を使用すればデータを簡単に取得できます。

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

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

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

<img alt="SELECT Name, Email FROM Contact. SELECT and FROM are SOQL keywords. Name and Email are fields, and Contact is a standard Salesforce object." class="image" src="images/kix.9ysc1ao7v2hl.png" width="486.49142857142857"/>

このクエリは SOQL キーワード (<<code>>SELECT</<code>> と <<code>>FROM</<code>>)、レコード項目 (<<code>>Name</<code>> と <<code>>Email</<code>>)、オブジェクト (<<code>>Contact</<code>> 標準オブジェクト) で構成されています。

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

必須の SOQL 句

SELECT

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

<img alt="SELECT Name, Email FROM Contact. SELECT Name, Email is the SELECT clause." class="image" src="images/kix.qyycs9n970xs.png" width="478.95652173913044"/>

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

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

FROM

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

<img alt="SELECT Name, Email FROM Contact. FROM Contact is the FROM clause." class="image" src="images/kix.52ope8bqbjq8.png" width="492.0"/>

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

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

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

SOQL を実際に使ってみる

このバッジでは、開発者コンソールのクエリエディターで SOQL クエリを構築する手順を説明します。このバッジにハンズオン Challenge はありませんが、以下の手順を実際に実行してみたい方のために Trailhead Playground の起動方法をご紹介します。まず、Trailhead にログインしていることを確認します。次に、このページの右上にあるユーザーアバターをクリックして、ドロップダウンから <<strong>>[ハンズオン組織]</<strong>> をクリックします。開く組織の横にある <<strong>>[起動]</<strong>> をクリックします。または、新しい Playground を作成する場合は、<<strong>>[Playground を作成]</<strong>> をクリックします。

Note

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

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

  1. Trailhead Playground で、<img alt="Setup" class="image" src="images/kix.j3v1r88g45zy.png" width="20.0"/> をクリックして <<strong>>[開発者コンソール]</<strong>> を選択します。
  2. <<strong>>[File (ファイル)] | [Open (開く)] | [Objects (オブジェクト)] | [Contact]</<strong>> をクリックします。

    エンティティ種別とそのエンティティがリストされている [Open (開く)] ウィンドウ。[Entity Type (エンティティ種別)] では [Objects (オブジェクト)]、[Entities (エンティティ)] では [Contact] が強調表示されています。
  1. <<strong>>[Open (開く)]</<strong>> をクリックします。
    [Contact (取引先責任者)] オブジェクトが開き、関連付けられているすべての項目の名前とデータ型がリストされます。
  2. 下部パネルで <<strong>>[Query Editor (クエリエディター)]</<strong>> タブを選択します。(タブが表示されていない場合は、ウィンドウの下部にある上矢印をクリックします。)

    3 つのウィンドウパネルからなる [Query Editor (クエリエディター)] タブ
    [Query Editor (クエリエディター)] には 3 つのセクションがあります。左上のセクション (1) にはクエリが表示されます。ここでクエリを編集できます。左下のセクション (2) にはエラーが表示されます。右側のセクション (3) には SOQL クエリの実行履歴が保存されます。
  1. Ctrl キーを押しながらクリックする操作 (Windows) または CMD キーを押しながらクリックする操作 (Mac) で、<<strong>>Email</<strong>>、<<strong>>Name</<strong>>、<<strong>>Languages__c</<strong>> の各項目を選択します。
  2. <<strong>>[Query (クエリ)]</<strong>> をクリックします。
    選択したオブジェクトと項目に基づいて、[Query Editor (クエリエディター)] に SOQL クエリが表示されます。クエリビルダーで項目を選択すると、SOQL クエリにその項目 API 参照名が自動的に挿入されます。つまり、このツールを使用すれば、API 参照名を記憶したり検索したりする必要がありません。
  3. <<strong>>[Execute (実行)]</<strong>> をクリックします。

    クエリで Id、Email、Name、Languages__c の各項目が返されます。

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

省略可能な SOQL 句

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

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

WHERE

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

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

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

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

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

ORDER BY

結果の件数を管理する方法はわかりましたが、結果を整理するにはどうすればよいのでしょうか? <<code>>ORDER BY</<code>> 句を使用して、特定の項目の値を基準に結果を並び替えます。必要に応じて、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 の例では、<<code>>SELECT Name, Email FROM Contact ORDER BY Name ASC LIMIT 5</<code>> で、名前を基準に昇順に並び替えられた 5 人の取引先責任者の <<code>>Name</<code>> 項目と <<code>>Email</<code>> 項目が返されます。

<img alt="Query Results listing the name (in ascending order) and email fields in the Contact object." class="image" src="images/kix.2urxg2feiyqm.png" width="362.6666666666667"/>

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

<img alt="Query Results listing the name and email fields." class="image" src="images/kix.74aygc1u3jt.png" width="476.0"/>

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

リソース

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

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

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