はじめに
Salesforceでデータを検索しようとしたとき、「SOQLとSOSLどっちを使えばいいの?」と悩んだことはありませんか?
この記事では、SOQLとSOSLの違いを初心者にも分かりやすく解説していきます。
SOQLとSOSLの違いを表で比較
比較項目 | SOQL | SOSL |
---|---|---|
主な用途 | 特定のオブジェクトからデータを取得 | 複数オブジェクトから横断的に検索 |
検索範囲 | 単一のオブジェクトとその関連オブジェクト | 複数のオブジェクトを同時に検索可能 |
検索方法 | 項目の完全一致や前方一致など | キーワードによる部分一致検索 |
戻り値 | 単一のリスト | リストのリスト |
使用頻度 | より頻繁に使用 | 特定の用途で使用 |
それぞれはどんなときに使うの?
SOQLを使うのはこんなとき 👉
- 取引先の一覧を取得したい
- 特定の商談に関連する商談商品を全て取得したい
- 今月作成された取引先責任者を取得したい
- 金額が100万円以上の商談を取得したい
SOSLを使うのはこんなとき 👉
- "Tokyo"という文字列を含むレコードを全てのオブジェクトから探したい
- 顧客名を複数のオブジェクトから検索したい
- 商品名やその説明文から特定のキーワードを検索したい
- メールアドレスやドメインで横断的に検索したい
具体例で理解するSOQLとSOSL
SOQLの例
例1:今月作成された取引先を取得
List<Account> accounts = [
SELECT Id, Name, Phone
FROM Account
WHERE CreatedDate = THIS_MONTH
];
👉 ポイント:特定のオブジェクト(ここではAccount)から条件に合うレコードを取得
例2:取引先とその関連する取引先責任者を一緒に取得
List<Account> accountsWithContacts = [
SELECT Id, Name,
(SELECT Name, Email FROM Contacts)
FROM Account
WHERE Name LIKE 'ABC%'
];
👉 ポイント:親子関係のあるオブジェクトのデータを一度に取得できる
SOSLの例
例1:全オブジェクトから"Smith"を検索
List<List<SObject>> results = [
FIND 'Smith'
IN ALL FIELDS
RETURNING Account(Name), Contact(Name), Lead(Name)
];
👉 ポイント:複数のオブジェクトから同時に検索できる
例2:名前フィールドから特定のキーワードを検索
List<List<SObject>> results = [
FIND 'Tanaka OR Suzuki'
IN NAME FIELDS
RETURNING Account(Name), Contact(FirstName, LastName)
];
👉 ポイント:OR検索など、柔軟な検索条件を指定できる
初心者がつまずきやすいポイント
1. SOQLでよくあるミス
- 関連オブジェクトのフィールドを直接指定してしまう
- WHEREの条件指定で型が合っていない
- 必要以上のフィールドを取得している
2. SOSLでよくあるミス
- 検索文字列が短すぎる(最低2文字必要)
- 戻り値の取り扱いを間違える
- 検索範囲の指定を忘れる
まとめ:使い分けのコツ
SOQLを使う場合
- 特定のオブジェクトから確実にデータを取得したい
- 関連オブジェクトのデータも必要
- 条件指定を細かく行いたい
SOSLを使う場合
- 複数のオブジェクトを横断して検索したい
- キーワードでの検索が必要
- あいまい検索をしたい
さいごに
SOQLとSOSLは、それぞれの特徴を理解して使い分けることで、効率的なデータ検索が可能になります。
まずは簡単な検索から始めて、徐々に複雑な検索にチャレンジしていくことをお勧めします。