SQLに慣れた開発者にとって、SOQL(Salesforce Object Query Language)は一見よく似た構文を持っていますが、実際にはルールや使用目的が異なります。そのため、初めてSOQLに触れたときには少し戸惑うかもしれません。
このページでは、SQLとの違いを整理しながら、SOQLの特徴や注意点を解説していきます。


目次
🆚 SOQLとSQLの違い
❓ SOQLとは?
SOQL(Salesforce Object Query Language)は、Salesforce内のデータを検索するための専用言語です。
データの「取得」に特化しており、SQLのように「追加」「更新」「削除」はできません。
📊 SQLとSOQLの機能比較
項目 | 🌐 SQL | 🌐 SOQL |
---|---|---|
データ取得 | SELECT | SELECT (*は使用不可) |
データ追加 | INSERT | ❌(SOQLでは不可、DMLを使用) |
データ更新 | UPDATE | ❌(SOQLでは不可、DMLを使用) |
データ削除 | DELETE | ❌(SOQLでは不可、DMLを使用) |
対象 | テーブル | オブジェクト |
全カラム取得 | SELECT * | ❌(フィールドを明示) |
JOIN | 可能 | ❌(サブクエリや参照で代用) |
WHERE句 | 使用可能 | 使用可能 |
ORDER BY, LIMIT | 使用可能 | 使用可能 |
GROUP BY | 使用可能 | 使用可能(制限あり) |
❗ INSERT・UPDATEなどが使えない!
SOQLはデータの取得専用です。SQLでよく使われる以下のような構文は、SOQLでは使用できません。
-- SQLの例 INSERT INTO customers (name, email) VALUES ('Taro', 'taro@example.com'); UPDATE customers SET email = 'new@example.com' WHERE id = 123; DELETE FROM customers WHERE id = 123;
Salesforceでこれらの操作を行いたい場合は、ApexのDML文や、データローダー/フローなどの機能を使用します。
❓ JOINはできないの?
SOQLではSQLのようなテーブルJOINは使えません。
その代わりに、親子関係や参照関係を使ってデータを取得します。
👪 親→子のサブクエリ例:
SELECT Name, (SELECT LastName FROM Contacts) FROM Account
👪 子→親のドット記法例:
SELECT FirstName, Account.Name FROM Contact
🧪 サンプル比較(SQLとSOQL)
SQLの例:
SELECT name, email FROM customers WHERE country = 'Japan';
SOQLの例:
SELECT Name, Email FROM Contact WHERE MailingCountry = 'Japan';
構文は似ていますね。「Contact」はオブジェクト名、「MailingCountry」は項目名です。
🎯 まとめ
- SOQLは検索専用。INSERTやUPDATEは使えません。
SELECT *
は使えず、フィールド名を明示的に指定する必要があります。- JOINは使えない代わりに、リレーション構造によるサブクエリや参照記法で対応します。
- Salesforceの構造に合った形でデータを扱うための言語として、SOQLは非常に効率的です。
では、また次回の 異星人Salesforce講座 でお会いしましょう!👽✨