2021/04/23

SalesforceにおけるSQLとは?詳細や注意点についてご紹介

 
  

SalesforceにおけるSQLとは?

Salesforceからレコードを読み込むためには、クエリを作成しなければなりません。 Salesforceでは、保存したレコードの読み込みために使える「Salesforce Object Query Language (SOQL) 」を提供しています。SOQLとは、標準のSQL言語を「Lightning Platform」用にカスタマイズしているものです。 Apexはデータベース上のSalesforceレコードに直接アクセスできます。そのため、SOQLクエリをApexコードに埋め込み、結果を取得できます。 例)
Account[] accts = [SELECT Name,Phone FROM Account];

SQL SELECT構文

SQL構文はSELECTステートメントとそれに続く1つ以上の省略可能な「TYPEOF」、「WHERE」、「WITH」、「GROUP BY」、「ORDER BY」などによって構成されます。 ステートメントには文字数制限があります。デフォルトでは、SOQLステートメントの長さは10万文字までです。10万文字を超えるSOQLステートメントでは、APIは「MALFORMED_QUERY」の例外コードを返します。結果行は返しません。 長く複雑なSOQLステートメントだと、「QUERY_TOO_COMPLICATEDエラー」が発生することがあります。Salesforceによって処理される際にステートメントが内部展開されるため発生しますが、SOQLステートメントの複雑さを軽減すると、エラーを避けることができます。

ステートメントが多数の結果を返す場合

レコードごとにSELECT文が大量のデータを返す際、SOQLで自動的に結果の数が減らされます。 リストビューを検索する場合、検索結果に表示されるのはリストの最初の2,000 件のレコードだけです。オブジェクトに「数式項目」、「派生項目」、「CLOB項目」、「BLOB項目」が含まれる場合、大量のデータが返されることがあります。 Bulk API 2.0は、ジョブの結果から返される「Sforce-Locatorresponseヘッダー」を使います。 REST APIでは、「/queryand/queryAll」で返される「nextRecordsUrl」を使います。 SOAP APIでは、「queryMore()」を使います。 SOQLでは、SOQL クエリで「OFFSET」と「LIMIT」を使う際は、返されるレコード数がLIMITよりも少なくなる場合があります。

その他の注意点

SQL構文のその他の注意点について説明します。 SELECTステートメントには、ローカライズされた項目をサポートする、返されたSOQL結果の翻訳および「convertCurrency()」、「FORMAT() 関数」を含められます。 Apexでは、使っているステートメントで「SOQL」「SOSLステートメント」を使用するには、角括弧で囲まなければなりません。前にコロンがある場合は、Apexスクリプト変数および式が使えます。 クエリでは「ORDER BY句」を使わない限り、結果の順序が保証されません。 APIバージョン39.0以降において、値のAPI参照名で選択リスト値を照会するので、実際の値と違う可能性があります。

SQLの使用

SQLを使うことで、組織のSalesforceデータから特定の情報を検索することができます。 SQLを使うと、「query() コールの queryString パラメータ」、「Apex ステートメント」、「Visualforce コントローラおよび getter メソッド」、「Salesforce CLI、または Visual Studio Code 向け Salesforce 拡張機能」で、シンプルかつ強力なクエリ文字列を作ることができます。 SOQLでは、取得する項目のリスト、ソースオブジェクトなどから行を選択するための条件指定が可能です。ただし、SQLのSELECT コマンドの高度な機能がすべてサポートされているわけではありません。 例)
SELECT one or more fields
FROM an object
WHERE filter statements and, optionally, results are ordered 

SalesforceにおけるSQLの注意点

SalesforceにおけるSQLの注意点について説明します。 注意点は「*で全カラム抽出が出来ない」、「join全般が使えない」、「salesforce内設定に依存する」ことです。 通常のRDBでOSSのRDBなら、「select * from table_name」で容易に全体のカラム確認が行えます。しかしSalesforceでは、全カラムを記述しない限り、出力することができません。 また、用意にオブジェクトをjoinしてのデータの取得ができません。joinが全てできないわけではなく、Salesforce内で定義した親・子が存在し、そのつながりを用いて取得する方法があります。 さらに、Salesforceからデータを取得するために、Salesforceの設計にかなり多く依存してしまうことも注意点しておきましょう。

SQL使用の具体例

関数を用いたSQL構文の具体的な使い方について説明します。 Where句を使用して取得するレコードの制限の具体例です。 これを使うと、Name項目がTestレコードの全てを取得できます。 例)
SELECT Id,Name FROM Account WHERE Name = 'Test'
親から子を参照する場合は、下記例を使うことができます。 サブクエリ内においてコールされるクエリのFROMの後ろは「子リレーション名」です。 例)
SELECT Id,(SELECT Id,Name FROM Contacts) FROM Account
SOQLで項目に値が入っていないものを検索するときは、Nullを使います。 例)
SELECT Id,Name,MobilePhone FROM Account WHERE MobilePhone = Null

SQLの基礎

SQLの基礎について説明します。 Apexにおいては[ ]句で静的なSOQLを記載できます。[ ]句の中では、 バインド変数を使うことで条件を指定できます。 例)
String searchfor = 'SalesforceKid' ;
Contact[] Contacts = [SELECT xyz__c, Firstname, Lastname FROM Contact WHERE Lastname = :searchfor]; 
Apexの処理では、実行するSOQLを動的に編集することが可能です。実行するSOQL文を「String」で「Database.query」に渡せます。 例)
String myTestString = 'TestName';
List sobjList = Database.query('SELECT Id FROM MyCustomObject__c WHERE Name = :myTestString');

SalesforceでSQLを活用しよう!

今回はSalesforceの機能の1つである「SQL」について紹介しました。 SQLの使い方を理解することは、Salesforceで仕事をしていく上で欠かせません。SQLといっても使用範囲は非常に幅広いです。今回は初級の内容について説明してきましたが、中級レベル、上級レベルと、SQLをより幅広く使えるようになればなるほど、Salesforceでできることが大きく増えていきます。 SQLの使い方をイメージ、理解して、転職活動につなげていきましょう。]]>

ITエンジニアへのキャリアチェンジならキャリアチェンジアカデミー

この記事の監修者・著者

株式会社オープンアップITエンジニア
株式会社オープンアップITエンジニア
未経験からITエンジニアへのキャリアチェンジを支援するサイト「キャリアチェンジアカデミー」を運営。これまで4500人以上のITエンジニアを未経験から育成・排出してきました。
・AWS、salesforce、LPICの合計認定資格取得件数:2100以上(2023年6月時点)
・AWS Japan Certification Award 2020 ライジングスター of the Year 受賞

おすすめの動画

  • 【未経験からIT業界へ転職するなら】相談窓口とスキルの獲得はここで解決!IT転職が一気に有利に!【キャリアチェンジアカデミー】

  • 【費用一切不要】未経験からIT業界へ転職するならまずはここへ相談!【キャリアチェンジアカデミー】

  • 【何のエンジニアになれるのか?】未経験からITエンジニアを目指すとこんな道がある【キャリアチェンジアカデミー】