とある日
Qiitaのトレンドを、見ててをある記事1があった。
その記事のタイトルにSOQLってあって、
なにこれSQLに似てる。関係あるのかなと思いクリック。
え。これはもうSQLじゃん。はじめてみた。ってことでググっみた。
SOQLとは
ググった結果、一番上2に出てきたものをとりあえず見てみた。
SOQL および SOSL の概要
Salesforce のカスタム UI を作成している場合、Salesforce Object Query Language (SOQL) と Salesforce Object Search Language (SOSL) の API を使用して、組織の Salesforce データを検索できます。 Salesforce 専用に設計された類似の言語って感じらしいが、Salesforceってなにとなった。
SOQLとは
ググった結果、一番上[^2]に出てきたものをとりあえず見てみた。
SOQL および SOSL の概要
Salesforce のカスタム UI を作成している場合、Salesforce Object Query Language (SOQL) と Salesforce Object Search Language (SOSL) の API を使用して、組織の Salesforce データを検索できます。 Salesforce 専用に設計された類似の言語って感じらしいが、Salesforceってなにとなった。
Salesforceとは
顧客管理ソリューションを行っていて、SaaS型のアプリケーションとなってようです。
様々なサービスを展開してる。ただお金がかかるので自分には使えない。
SOQLとSQLどこが似てるのか
まず、どちらともデータベースに対して操作を行う際に使用される。
様々な点において酷似している点があるのだが、 今回は個人的に気になった3つを挙げます。
1.SELECT
SELECTはテーブルからデータを取得する際に使用される。
SQL SELECT句
SELECT * FROM dual;
SOQL SELECTステートメント
SELECT CreatedDate, Name, Phone, Type FROM Account
SELECTで取得する列名を記述してFROMでどのテーブルから取得するか記述されている。
ホント見た目は、SQLとSOQLそっくりですね。
2.集計関数
COUNTで個数、AVGで平均値、SUMで合計値を集計する関数である。
SQL集計関数
SELECT id, COUNT(*) , AVG(age), SUM(salary) FROM employees;
SOQL 集計関数
SELECT COUNT(Id) FROM Account
SOQLには、他にも集計関数が用意されている。
関数 | 説明 |
---|---|
AVG | 数値項目の平均値を返します。 |
MAX | 項目の最大値を返します。 |
MIN | 項目の最小値を返します。 |
SUM | 数値項目の合計を返します。 |
COUNT | クエリ条件に一致する行数を返します。 |
説明もSQLとSOQLには変わりはない。
基本的な集計関数だけが用意されている感じ。
STDDEV関数(標準偏差)やVARIANCE関数(分散)など計算を行う関数は調べた感じなさそうです。複雑な処理を行う関数は実装してなさそうですね。
3.比較演算子
=、<、>のことを指しSQLだけでなくプログラミング言語等にも存在する。比較された値に対する評価を返す。 他にもINやLIKEなどが存在する。
SELECT * FROM employees WHERE id = 5 AND salary > 1520 AND manager_id <= 3306; SELECT * FROM employees WHERE manager_id IN (SELECT id FROM employees);
SOQLの比較演算子
SELECT Name FROM Account WHERE BillingState IN ('California', 'New York')
比較演算子に関しても同じ動きをするようです。 ただ、LIKEやINに関してはSQLとは違う動きをする場合があるようなので注意が必要。
SOQLとSQLどこが違うのか
違う点については、かなり多いのですが面白いと思った3つをあげます。
1.DMLの種類
SQLでは、DMLはSELECT INSERT DELETE UPDATE などがありますが、SOQLではSELECTのクエリのみしかないそうです。
それと、SELECT句でワイルドカードの*もSOQLでは存在しない。使用した場合問題が発生するらしいので怖いですな。
2.NULL比較
このNULLに対する扱い方がSQLとSOQLでは大きく違います。
SELECT * FROM dual WHERE id IS NULL;
SOQL
SELECT AccountId FROM Event WHERE ActivityDate != null
SQLだとNULL比較する際に、IS NULLという述語を使う必要がありますが、SOQLだと数値リテラルや文字リテラルと同じように比較演算子の=と!=を使ってNULLを比較する。
3.日付形式と日付リテラル
DBMSには、様々な日付を扱う関数が存在します。
add_months :数ヵ月後の日付を求める
months_between:2つの日付の間に何ヵ月あるか求めるには
SOQL
TODAY :本日の 00:00:00 から、その 24 時間後までが指定されます。
THIS_MONTH:今月の最初の日の 00:00:00 から、その月のすべての日が指定されます。
SQLは、日付を使って演算をする関数があるですが、SOQLには指定された範囲の中から日付・時刻を返す関数しかないです。
どうやら、SOQLには日付リテラルや数値リテラルの演算を行う関数などは実装されていないらしい。
まとめ
SQLとSOQLは確かに似てはいたのだが、使える機能の範囲や値に対する細かい仕様が違った。
SOQL新しい機能があるのかと期待したがそんなのものは特になく、使える機能が少なく少し残念だった。
まぁ、SOQLを使う予定はないですが、面白い新発見でした。
更に詳しい内容は、公式のリファレンスをどうぞ。