Skip to main content

SOQL クエリと SOSL クエリの実行

学習の目的

この単元を完了すると、次のことができるようになります。
  • クエリエディターを使用して、または Apex コードで SOQL クエリを実行する。
  • クエリエディターを使用して、または Apex コードで SOSL 検索を実行する。
メモ

メモ

このバッジのハンズオン Challenge は日本語、スペイン語 (LATAM)、ポルトガル語 (ブラジル) に対応しています。Playground の言語を変更するには、こちらの指示に従ってください。日本語等、翻訳された言語と英語に差異がある可能性があります。英語以外の言語での指示に従って Challenge に合格できなかった場合は、[言語] と [地域] をそれぞれ [English]、[アメリカ合衆国] に切り替えてからもう一度お試しください。

翻訳版 Trailhead を活用する方法の詳細は、自分の言語の Trailhead バッジを参照してください。

SOQL クエリとは?

SOQL とは、Salesforce オブジェクトクエリ言語のことです。SOQL を使用して、組織のデータベースに保存された情報を読み込むことができます。SOQL の構文は SQL (構造化クエリ言語) と似ています。

Apex コードまたは開発者コンソールのクエリエディターで SOQL クエリを記述して実行できます。

SOQL クエリの実行

クエリを記述して実行し始める前に、Salesforce 組織内に検索する一定のデータが必要です。では、宇宙船を小惑星 2014 QO441 に近づけないよう誘導するために飛行管制センターから派遣された 3 名の制御エンジニアの連絡先の詳細を追加してみましょう。
  1. [Debug (デバッグ)] | [Open Execute Anonymous Window (実行匿名ウィンドウを開く)] を選択します。
  2. 次のコードをコピーして貼り付けてから、実行します。このコードは、3 名の制御エンジニアの連絡先の詳細をデータベースの Contact (連絡先) オブジェクトに追加するものです。
    // Add first contact and related details
    Contact contact1 = new Contact(
       Firstname='Quentin',
       Lastname='Foam',
       Phone='(415)555-1212',
       Department= 'Specialty Crisis Management',
       Title='Control Engineer - Specialty - Solar Arrays',
       Email='qfoam@trailhead.com');
    insert contact1;
    // Add second contact and related details
    Contact contact2 = new Contact(
       Firstname='Vega',
       Lastname='North',
       Phone='(416)556-1312',
       Department= 'Specialty Crisis Management',
       Title='Control Engineer - Specialty - Propulsion',
       Email='vnorth@trailhead.com');
    insert contact2;
    // Add third contact and related details
    Contact contact3 = new Contact(
       Firstname='Palma',
       Lastname='Sunrise',
       Phone='(554)623-1212',
       Department= 'Specialty Crisis Management',
       Title='Control Engineer - Specialty - Radiators',
       Email='psunrise@trailhead.com');
    insert contact3;
    追加したら、クエリエディターを使用して、これらの制御エンジニアを検索する SOQL クエリを記述して実行できます。SOQL クエリは、特定のオブジェクトのデータを検索します。WHERE 句に任意の条件を追加すれば、検索を絞り込むことができます。
  3. 次のクエリを [Query Editor (クエリエディター)] タブに入力します。
    SELECT Name, Phone, Email, Title FROM Contact
                                     WHERE (Department = 'Specialty Crisis Management')
  4. [Execute (実行)] をクリックします。

結果に、特殊危機管理部門に属する 3 名の連絡先の詳細が表示されます。

SOQL クエリの結果

別の SOQL クエリを使用して、他の部門の連絡先を検索したり、誰かが他の制御エンジニアのレコードを作成していないかどうかを確認したりすることもできます。クエリを再実行するには、[Query Results (クエリ結果)] パネルの [Refresh Grid (グリッドを更新)] をクリックします。

Apex コードを使用して実行する SOQL クエリを、インライン SOQL クエリといいます。次に開発者コンソールで、インライン SOQL クエリを使用して、特殊危機管理部門に属する連絡先を検索する方法を見てみましょう。

この場合も、結果に名前をアルファベット順に並べます。
  1. [Debug (デバッグ)] | [Open Execute Anonymous Window (実行匿名ウィンドウを開く)] を選択します。
  2. 次のコードを入力します。
    Contact[] theseContacts = [SELECT Name, Phone, Email, Description FROM Contact
                               WHERE (Department='Specialty Crisis Management')
                               ORDER BY Name];
    // Log a count of how many contacts were found
    System.debug(theseContacts.size() + ' contact(s) returned.');
    // Log all values in the array of contacts
    System.debug(theseContacts);
  3. コードが実行された後にログが開きます。
  4. USER_DEBUG メッセージのみを表示する場合は、[Debug Only (デバッグのみ)] を選択します。結果に、返された取引先の数と連絡先の詳細がアルファベット順に表示されます。

SOQL クエリについての詳細は、「Apex の基礎とデータベース」モジュールを参照してください。

SOSL (Salesforce オブジェクト検索言語) は、レコード内のテキスト検索を実行する言語です。SOSL は、SOQL とは異なり、同時に複数の種別のオブジェクトにクエリを実行できます。また、SOSL は単語の一致を使用して項目の一致を見つけるのに対し、SOQL は語句が完全に一致している必要があります。

「Crisis (危機)」という単語を使用して連絡先レコードに対する SOSL 検索を実行した場合、すべての連絡先項目が検索され、この単語を含むすべてのレコードが返されます。他方、SOQL クエリで同じ検索をする場合は、検索対象の項目と検索する完全な単語または語句を指定する必要があります。SOQL 検索でも SOSL 検索でも、LIKE やワイルドカードを使用して絞り込むことができます。

  1. [Query Editor (クエリエディター)] タブに、次の SOSL クエリを入力します。クエリには Specialty Crisis Management (特殊危機管理) 部門の名称の一部しか示されていません。
    FIND {Crisis} IN ALL FIELDS RETURNING Contact(FirstName, LastName, Phone, Email, Title)
  2. クエリを実行して、[Search Results (検索結果)] ペインの結果を確認します。 SOSL のクエリ結果
SOQL クエリを実行した場合と同様に、Apex コード内で SOSL 検索を実行できます。
  1. [Debug (デバッグ)] | [Open Execute Anonymous Window (実行匿名ウィンドウを開く)] を選択します。
  2. 次のコードを実行します。
    List<List<sObject>> searchList = [FIND 'Crisis' IN ALL FIELDS 
                                      RETURNING Contact(FirstName, LastName,
                                      Phone, Email, Description)];
    Contact[] searchContacts = (Contact[])searchList[0];
    System.debug('Found the following contacts:');
    for (Contact c : searchContacts) {
       System.debug(c.LastName + ', ' + c.FirstName);
    }
  3. ログを開き、[Debug Only (デバッグのみ)] オプションを選択します。

実行ログに制御エンジニアの氏名がリストされます。

SOSL 検索の活用についての詳細は、「Apex の基礎とデータベース」モジュールを参照してください。

SOQL と SOSL を試しながらレコードを検索している間に、検索していた当の制御エンジニアが宇宙船を小惑星の軌道に近づかないように操縦していました。結局のところ、宇宙船の指揮を執るというのはさほど難しいことではないようです。必要なものは適切なコンソールと、部下に任せる能力の習得です!

小惑星 2014 QO441 との衝突を回避したところで、海王星宇宙ステーションに着陸して待ち望んだ休憩を取ることにします。開発者コンソールの各種機能に関する知識があれば、数々の任務をこなしながら組織を成功へと導くことができます。

無料で学習を続けましょう!
続けるにはアカウントにサインアップしてください。
サインアップすると次のような機能が利用できるようになります。
  • 各自のキャリア目標に合わせてパーソナライズされたおすすめが表示される
  • ハンズオン Challenge やテストでスキルを練習できる
  • 進捗状況を追跡して上司と共有できる
  • メンターやキャリアチャンスと繋がることができる