yujiroのプログラミング

勉強内容をアウトプットし、サボらないようにする為のブログ

<DAY212>SOQLについて

\ Follow me!! /

●9/21(土)
●学習日数 212日
●学習時間(本日)2時間
●累計学習時間 903.0時間
●一日あたりの平均学習時間 4.28時間

f:id:yujiro0320:20190904163314p:plain

SOQLとは

Lightning Platform 用にカスタマイズされたSQL言語。

Salesforce Object Query Languageが正式な名称。

SOQL クエリを Apex コード内に含めるには、SOQL ステートメントを角括弧でラップして、戻り値を sObject の配列に割り当てます。
たとえば、次のコードでは、2 つの項目 (名前と電話) を持つすべての取引先レコードを取得し、Account sObject の配列を返します。

Account[] accts = [SELECT Name,Phone FROM Account];

簡単な構文

WHERE句は省略可能です。

fields項目を取得します、ObjectNameから。WHEREで条件を指定

SELECT fields FROM ObjectName [WHERE Condition]

ID項目について

ID 項目をクエリに指定する必要はありません。Apex クエリでは、指定されたかどうかに関係なく常に ID 項目が返されます。

同等の結果が返ってくる。

SELECT Id,Phone FROM Account
SELECT Phone FROM Account

AND.OR

WHERE 句には、論理演算子 (AND、OR) と括弧を使用してグループ化した複数の条件を含めることができます。たとえば、次のクエリは名前が SFDC Computing で、従業員数が 25 より多い取引先をすべて返します。

SELECT Name,Phone FROM Account WHERE (Name='SFDC Computing' AND NumberOfEmployees>25)

LIKE 演算子

比較に等号演算子 (=) を使用する代わりに、LIKE 演算子を使用してあいまい一致検索を実行することができます。たとえば、条件 WHERE Name LIKE 'SFDC%' を使用して、名前が SFDC で開始する取引先をすべて取得できます。% ワイルドカード文字は、0 個以上の文字に一致します。_ 文字を使用して 1 文字のみに一致させることもできます

 WHERE Name LIKE 'SFDC%'

ORDER BY 句

デフォルトはASC順

SELECT Name,Phone FROM Account ORDER BY Name

DESC

Z→A

SELECT Name,Phone FROM Account ORDER BY Name DESC

LIMIT

1件で指定すると配列で返って来ないので注意

Account oneAccountOnly = [SELECT Name,Phone FROM Account LIMIT 1];

SOQL クエリでの変数へのアクセス

Apex の SOQL ステートメントは、前にコロン (:) が付けられた Apex コードの変数と式を参照できます。SOQL ステートメント内でローカル変数を使用することを、バインドと呼びます。

String targetDepartment = 'Wingo';
Contact[] techContacts = [SELECT FirstName,LastName 
                          FROM Contact WHERE Department=:targetDepartment];

関連レコードのクエリ

親レコードに関連する子レコードを取得

親オブジェクト作成しているときに子供データーが欲しくなった時

SELECT Name, (SELECT LastName FROM Contacts) FROM Account 

f:id:yujiro0320:20190921183050p:plain

子レコードに関連する親レコードを取得

子供のオブジェクトからデーター拾っている時に親のデータが欲しくなった時

f:id:yujiro0320:20190921183325p:plain

SELECT Account.Name FROM Contact 

カスタムオブジェクトの場合

このセクションの例は、標準オブジェクトに基づいてます。カスタムオブジェクトも、カスタムリレーションを使用して一緒にリンクできます。カスタムリレーション名は __r サフィックスで終わります。たとえば、請求書明細は、Invoice_Statement__c カスタムオブジェクトの Line_Items__r リレーションを介して品目名にリンクします

カンマが必要です。

SELECT 	Account__r.Name, Name FROM store_power__c