SOQL query language syntax, clauses, operators, and functions. Use when writing or debugging SOQL queries.
View on GitHubgrailautomation/claude-plugins
salesforce-soql
salesforce-soql/skills/soql-syntax/SKILL.md
February 3, 2026
Select agents to install to:
npx add-skill https://github.com/grailautomation/claude-plugins/blob/main/salesforce-soql/skills/soql-syntax/SKILL.md -a claude-code --skill soql-syntaxInstallation paths:
.claude/skills/soql-syntax/# SOQL Syntax Reference
Salesforce Object Query Language (SOQL) for querying Salesforce data.
## Basic Query Structure
```sql
SELECT field1, field2, ...
FROM ObjectName
[WHERE conditions]
[ORDER BY field [ASC|DESC] [NULLS FIRST|LAST]]
[LIMIT n]
[OFFSET n]
```
## Clauses
### SELECT
```sql
-- Specific fields
SELECT Id, Name, CreatedDate FROM Account
-- Parent fields (dot notation)
SELECT Id, Name, Account.Name FROM Contact
-- Child records (subquery)
SELECT Id, Name, (SELECT Id, Name FROM Contacts) FROM Account
-- Aggregate functions
SELECT COUNT(Id), SUM(Amount), AVG(Amount) FROM Opportunity GROUP BY StageName
```
### WHERE
See [clauses.md](clauses.md) for complete WHERE clause reference.
```sql
-- Comparison
WHERE Amount > 10000
WHERE Name = 'Acme'
WHERE CloseDate < 2024-01-01
-- Null checks (use <> not != for CLI compatibility)
WHERE AccountId <> null
WHERE AccountId = null
-- LIKE (wildcards: % = any chars, _ = single char)
WHERE Name LIKE 'Acme%'
WHERE Email LIKE '%@gmail.com'
-- IN list
WHERE Status IN ('New', 'Working', 'Qualified')
WHERE Id IN ('001xxx', '001yyy')
-- AND/OR/NOT
WHERE Amount > 1000 AND StageName = 'Closed Won'
WHERE (Status = 'New' OR Status = 'Working')
WHERE NOT Status = 'Closed'
```
### ORDER BY
```sql
ORDER BY Name -- Ascending (default)
ORDER BY Amount DESC -- Descending
ORDER BY CloseDate DESC NULLS LAST
ORDER BY Account.Name, Name -- Multiple fields
```
### LIMIT and OFFSET
```sql
LIMIT 100 -- Return max 100 records
LIMIT 10 OFFSET 20 -- Skip 20, return 10 (pagination)
```
## Functions
See [functions.md](functions.md) for complete function reference.
### Aggregate Functions
```sql
SELECT COUNT(Id) FROM Account
SELECT SUM(Amount), AVG(Amount), MIN(Amount), MAX(Amount) FROM Opportunity
SELECT COUNT(Id), StageName FROM Opportunity GROUP BY StageName
SELECT StageName, COUNT(Id) FROM Opportunity GROUP BY StageName HAVING COUNT(Id) > 5
```
### Dat