セーブポイントが見つからない

【Salesforce】SOQLとSOSLクエリについて

こんにちは、にいるです

そろそろデベロッパー試験へ注力しようと思います
まずは簡単そうなTrailheadのモジュールを参考に、「SOQLとSOSLクエリについて」について見ていきます

【モジュール】データベースと.NETの基本

1.SOQL

SOQLはForce.comプラットフォームで使用するクエリです
Oracleなどはテーブルにレコードが格納されますが、Salesforceではオブジェクトに格納されます
下記の例では、取引先のIDと名前が返されます

SQLではSELECT項目を*にすれば全項目を引っ張れるのですが、SOQLでは1つずつ指定していくしかありません
下記のSELECT文は怒られ、コンパイルが通りません

1-1.リレーションクエリ

SQLではJOIN句が使用できますが、Salesforceでは使用できず、その代わりにオブジェクトのリレーションクエリを使用します
リレーションクエリには、「子-親」、「親-子」があります

例えば、取引先に紐づく取引先責任者をクエリで取得する場合は、「親-子」を使用します
この結果で、取引先に紐づく全ての取引先責任者が取得できます
※取引先に紐づいていない取引先責任者は取得されないので、注意しましょう
()内はサブクエリと呼ばれ、FROM句で指定するオブジェクトは標準オブジェクトであれば複数形(s)で、カスタムオブジェクトであれば__cではなく__rになります

■親-子

「子-親」は簡単です
■子-親

サブクエリはありませんし、FROM句もオブジェクトのAPI名を指定するだけでここも変更はありません
あとは子オブジェクトの項目名を指定するときに、「.」で子オブジェクト名と子項目名を指定するだけです

1-2.集計関数

最後にSOQLの集計関数について、まとめました
これらの結果はsObjectでなく、AggregateResult型で返され参照のみの権限になります

集計関数 内容
AVG 数値項目の平均値を取得します
COUNT レコード数を返します
MIN 項目の最小値を返します
MAX 項目の最大値を返します
SUM 項目の合計値を返します

SOQLをまとめていますので、よければこちらもご覧ください
【まとめ】Salesforceよく使うSOQL!

2.SOSL

続いてSOSLです
SOSLはSalesforce Object Search Languageの略称で、テキストベースの検索クエリになります
SELECT句は使用せずに、下記のようにFIND句を使用します

※大文字と小文字は区別しないです
例えば、「TEST」、「Test」、「test」なら同じ結果を返します

このクエリの検索語はFIND区の後にある「grand*」です
IN区では探す対象項目を示しますが、ALL FIELDSであれば全ての項目を探すという意味になります
そして RETURNNINGはクエリ結果で返るレコードの項目を表示します

このクエリ結果は取引先の名前と取引先責任者の姓、名、メールアドレスを返すという意味になります

SOSLはSOQLと違い、検索対象のオブジェクトや条件があいまいな場合に使用するといいと思います

3.効率的なクエリ

ここではクエリを書く時の注意事項をまとめておきます

3-1.セレクティブクエリを心がける

NameやId、CreatedDate、参照項目、主従関係項目をWHERE句に使用することは良いとされています
ただその反面、非セレクティブは避けた方がいいです

非セレクティブとは、!=やNULL指定、先頭のワイルドカード、テキスト項目に対する比較演算子などを差します

3-2.非決定性数式項目を使わない

数式項目などの流動的な項目を条件に使用することは、システム負荷を考慮すると避けた方がいいです

3.まとめ

いかがでしたでしょうか

開発をしていれば、必ず検索ロジックの組み立てが必要になってきます
SOQLかSOSLかはその時の要件で変わってくるかと思いますが、どちらもマスターしておいた方がいいです
苦手な人はまずはレポートの検索条件でANDやOR条件を使用してみるといいかもしれません

ぜひ皆さんもコード書いたりロジックを考えてみてください

他にも色々と標準機能やSalesforce機能について紹介しています
そのまとめ一覧ページはこちらになりますので、よければ見てみてください

ではでは!


ぺx