Common SOQL Query Examples
A comprehensive collection of SOQL query examples for everyday Salesforce tasks. Copy, modify, and use these queries in the Query Tool.
Simple Queries
Basic Record Retrieval
Get first 10 accounts:
SELECT Id, Name, Type, Industry
FROM Account
LIMIT 10Get specific record by ID:
SELECT Id, Name, Email, Phone
FROM Contact
WHERE Id = '003xx000003DH1QAAW'Get records by name:
SELECT Id, Name, Type
FROM Account
WHERE Name = 'Acme Corporation'Get all active users:
SELECT Id, Username, Name, Email, IsActive
FROM User
WHERE IsActive = true
ORDER BY NameQueries with WHERE Clauses
Text Filters
Contains:
SELECT Id, Name, Email
FROM Contact
WHERE Name LIKE '%Smith%'Starts with:
SELECT Id, Name, Website
FROM Account
WHERE Name LIKE 'Acme%'Ends with:
SELECT Id, Name, Email
FROM Contact
WHERE Email LIKE '%@acme.com'Not equal:
SELECT Id, Name, Type
FROM Account
WHERE Type != 'Prospect'Number Filters
Greater than:
SELECT Id, Name, AnnualRevenue
FROM Account
WHERE AnnualRevenue > 1000000Less than or equal:
SELECT Id, Name, Amount
FROM Opportunity
WHERE Amount <= 50000Between (using AND):
SELECT Id, Name, Amount
FROM Opportunity
WHERE Amount >= 10000
AND Amount <= 100000Date Filters
Today:
SELECT Id, Subject, CreatedDate
FROM Case
WHERE CreatedDate = TODAYThis week:
SELECT Id, Name, CloseDate
FROM Opportunity
WHERE CloseDate = THIS_WEEKLast 30 days:
SELECT Id, Name, CreatedDate
FROM Lead
WHERE CreatedDate = LAST_N_DAYS:30Date range:
SELECT Id, Name, CloseDate, Amount
FROM Opportunity
WHERE CloseDate >= 2025-01-01
AND CloseDate <= 2025-12-31This month:
SELECT Id, CaseNumber, CreatedDate
FROM Case
WHERE CreatedDate = THIS_MONTHBoolean Filters
Is true:
SELECT Id, Name, Email
FROM Contact
WHERE HasOptedOutOfEmail = falseIs false:
SELECT Id, Name, Amount, IsClosed
FROM Opportunity
WHERE IsClosed = falseNULL Checks
Is null:
SELECT Id, Name, Phone
FROM Contact
WHERE Phone = nullIs not null:
SELECT Id, Name, Email
FROM Contact
WHERE Email != nullQueries with Relationships
Parent Relationships
Single parent field:
SELECT Id, FirstName, LastName, Account.Name
FROM Contact
ORDER BY Account.Name, LastNameMultiple parent fields:
SELECT Id, Name, Account.Name, Account.Type, Account.Industry, Owner.Name
FROM Opportunity
WHERE Account.Type = 'Customer'Nested relationships (up to 5 levels):
SELECT Id, Name, Owner.Name, Owner.Manager.Name, Owner.Manager.Manager.Name
FROM Account
LIMIT 10Parent field in WHERE clause:
SELECT Id, FirstName, LastName, Email, Account.Name
FROM Contact
WHERE Account.Industry = 'Technology'
AND Account.AnnualRevenue > 5000000Child Relationships (Subqueries)
Single child relationship:
SELECT Id, Name,
(SELECT Id, FirstName, LastName, Email FROM Contacts)
FROM Account
WHERE Type = 'Customer'
LIMIT 10Multiple child relationships:
SELECT Id, Name,
(SELECT Id, FirstName, LastName FROM Contacts),
(SELECT Id, Subject, Status FROM Cases)
FROM Account
LIMIT 5Child relationship with filters:
SELECT Id, Name,
(SELECT Id, FirstName, LastName, Email
FROM Contacts
WHERE Email != null
ORDER BY LastName)
FROM Account
WHERE Industry = 'Technology'
LIMIT 10Counting child records:
SELECT Id, Name,
(SELECT COUNT() FROM Opportunities)
FROM Account
ORDER BY Name
LIMIT 20Aggregate Queries
COUNT
Count all records:
SELECT COUNT()
FROM ContactCount with filter:
SELECT COUNT()
FROM Opportunity
WHERE StageName = 'Closed Won'
AND CloseDate = THIS_YEARCount with GROUP BY:
SELECT StageName, COUNT(Id)
FROM Opportunity
GROUP BY StageName
ORDER BY COUNT(Id) DESCCount by type:
SELECT Type, COUNT(Id) recordCount
FROM Account
GROUP BY Type
ORDER BY recordCount DESCSUM
Sum amounts:
SELECT SUM(Amount)
FROM Opportunity
WHERE StageName = 'Closed Won'
AND CloseDate = THIS_QUARTERSum by owner:
SELECT Owner.Name, SUM(Amount) totalAmount
FROM Opportunity
WHERE StageName = 'Closed Won'
GROUP BY Owner.Name
ORDER BY totalAmount DESCSum by stage:
SELECT StageName, SUM(Amount) totalRevenue
FROM Opportunity
GROUP BY StageName
ORDER BY totalRevenue DESCAVG, MIN, MAX
Average amount:
SELECT AVG(Amount) avgDealSize
FROM Opportunity
WHERE StageName = 'Closed Won'
AND CloseDate = THIS_YEARMin, Max, Avg together:
SELECT MIN(Amount) minAmount,
MAX(Amount) maxAmount,
AVG(Amount) avgAmount
FROM Opportunity
WHERE StageName = 'Closed Won'
AND CloseDate = THIS_YEARGroup by with aggregates:
SELECT LeadSource,
COUNT(Id) dealCount,
SUM(Amount) totalRevenue,
AVG(Amount) avgDealSize,
MAX(Amount) largestDeal
FROM Opportunity
WHERE StageName = 'Closed Won'
AND CloseDate = THIS_YEAR
GROUP BY LeadSource
ORDER BY totalRevenue DESCHAVING Clause
Filter aggregated results:
SELECT Account.Name, COUNT(Id) opportunityCount
FROM Opportunity
GROUP BY Account.Name
HAVING COUNT(Id) > 5
ORDER BY opportunityCount DESCMultiple HAVING conditions:
SELECT Owner.Name, COUNT(Id) wonDeals, SUM(Amount) totalRevenue
FROM Opportunity
WHERE StageName = 'Closed Won'
AND CloseDate = THIS_YEAR
GROUP BY Owner.Name
HAVING COUNT(Id) >= 10
AND SUM(Amount) > 500000
ORDER BY totalRevenue DESCDate Queries
Date Literals
Today, Yesterday, Tomorrow:
SELECT Id, Subject, CreatedDate
FROM Case
WHERE CreatedDate = TODAY
SELECT Id, Subject, CreatedDate
FROM Case
WHERE CreatedDate = YESTERDAY
SELECT Id, Subject, ActivityDate
FROM Task
WHERE ActivityDate = TOMORROWThis Week, Last Week:
SELECT Id, Name, CloseDate
FROM Opportunity
WHERE CloseDate = THIS_WEEK
SELECT Id, Subject, CreatedDate
FROM Case
WHERE CreatedDate = LAST_WEEKThis Month, Last Month:
SELECT Id, Name, CreatedDate
FROM Account
WHERE CreatedDate = THIS_MONTH
SELECT Id, CaseNumber, CreatedDate
FROM Case
WHERE CreatedDate = LAST_MONTHThis Quarter, Last Quarter:
SELECT Id, Name, CloseDate, Amount
FROM Opportunity
WHERE CloseDate = THIS_QUARTER
AND StageName = 'Closed Won'
SELECT Id, Name, CloseDate, Amount
FROM Opportunity
WHERE CloseDate = LAST_QUARTERThis Year, Last Year:
SELECT Id, Name, CloseDate, Amount
FROM Opportunity
WHERE CloseDate = THIS_YEAR
SELECT Id, Name, AnnualRevenue, CreatedDate
FROM Account
WHERE CreatedDate = LAST_YEARRelative Date Literals
Last N Days:
SELECT Id, Name, CreatedDate
FROM Lead
WHERE CreatedDate = LAST_N_DAYS:7
SELECT Id, Subject, CreatedDate
FROM Case
WHERE CreatedDate = LAST_N_DAYS:30Next N Days:
SELECT Id, Subject, ActivityDate
FROM Task
WHERE ActivityDate = NEXT_N_DAYS:7
AND Status != 'Completed'
SELECT Id, Name, CloseDate
FROM Opportunity
WHERE CloseDate = NEXT_N_DAYS:30
AND IsClosed = falseLast N Months:
SELECT Id, Name, CloseDate, Amount
FROM Opportunity
WHERE CloseDate = LAST_N_MONTHS:6
AND StageName = 'Closed Won'Queries with ORDER BY and LIMIT
Sorting
Ascending order:
SELECT Id, Name, CreatedDate
FROM Account
ORDER BY Name ASC
LIMIT 50Descending order:
SELECT Id, Name, Amount, CloseDate
FROM Opportunity
WHERE StageName = 'Closed Won'
ORDER BY Amount DESC
LIMIT 20Multiple sort fields:
SELECT Id, FirstName, LastName, Account.Name
FROM Contact
ORDER BY Account.Name ASC, LastName ASC, FirstName ASC
LIMIT 100Sort by date:
SELECT Id, Subject, CreatedDate, Priority
FROM Case
WHERE Status != 'Closed'
ORDER BY CreatedDate DESC, Priority ASC
LIMIT 50LIMIT and OFFSET
First 100 records:
SELECT Id, Name FROM Account
ORDER BY Name
LIMIT 100Next 100 records (pagination):
SELECT Id, Name FROM Account
ORDER BY Name
LIMIT 100 OFFSET 100Third page of 100:
SELECT Id, Name FROM Account
ORDER BY Name
LIMIT 100 OFFSET 200Complex Queries
Multiple Conditions with AND/OR
AND conditions:
SELECT Id, Name, Type, Industry, AnnualRevenue
FROM Account
WHERE Type = 'Customer'
AND Industry = 'Technology'
AND AnnualRevenue > 10000000
ORDER BY AnnualRevenue DESCOR conditions:
SELECT Id, Name, StageName
FROM Opportunity
WHERE StageName = 'Closed Won'
OR StageName = 'Closed Lost'
ORDER BY CloseDate DESC
LIMIT 100Combined AND/OR with parentheses:
SELECT Id, FirstName, LastName, Email, Account.Name
FROM Contact
WHERE (Account.Type = 'Customer' OR Account.Type = 'Partner')
AND (LeadSource = 'Web' OR LeadSource = 'Referral')
AND Email != null
ORDER BY LastNameIN Clause
IN with list:
SELECT Id, Name, StageName
FROM Opportunity
WHERE StageName IN ('Prospecting', 'Qualification', 'Needs Analysis', 'Value Proposition')
ORDER BY CreatedDate DESCIN with IDs:
SELECT Id, Name, Email
FROM Contact
WHERE Id IN ('003xx001', '003xx002', '003xx003')NOT IN:
SELECT Id, Name, StageName
FROM Opportunity
WHERE StageName NOT IN ('Closed Won', 'Closed Lost')
ORDER BY CloseDate ASCIN with subquery:
SELECT Id, Name, Email
FROM Contact
WHERE AccountId IN (
SELECT Id FROM Account WHERE Type = 'Customer'
)
ORDER BY LastNameSubqueries in WHERE
Find contacts of high-value accounts:
SELECT Id, FirstName, LastName, Email, Account.Name
FROM Contact
WHERE AccountId IN (
SELECT Id FROM Account WHERE AnnualRevenue > 10000000
)
ORDER BY Account.NameFind opportunities for accounts with open cases:
SELECT Id, Name, StageName, Account.Name
FROM Opportunity
WHERE AccountId IN (
SELECT AccountId FROM Case WHERE Status != 'Closed'
)
ORDER BY Account.NameCommon Business Queries
Sales Queries
Pipeline by stage:
SELECT StageName, COUNT(Id) count, SUM(Amount) total
FROM Opportunity
WHERE IsClosed = false
GROUP BY StageName
ORDER BY COUNT(Id) DESCTop 20 opportunities:
SELECT Id, Name, Amount, StageName, CloseDate, Account.Name, Owner.Name
FROM Opportunity
WHERE IsClosed = false
ORDER BY Amount DESC
LIMIT 20Won opportunities this quarter:
SELECT Id, Name, Amount, CloseDate, Account.Name, Owner.Name
FROM Opportunity
WHERE StageName = 'Closed Won'
AND CloseDate = THIS_QUARTER
ORDER BY Amount DESCStale opportunities (no activity):
SELECT Id, Name, Amount, StageName, LastActivityDate, Owner.Name
FROM Opportunity
WHERE LastActivityDate < LAST_N_DAYS:30
AND IsClosed = false
ORDER BY LastActivityDate ASCService Queries
Open cases by priority:
SELECT Priority, COUNT(Id) caseCount
FROM Case
WHERE Status != 'Closed'
GROUP BY Priority
ORDER BY Priority ASCCases created today:
SELECT Id, CaseNumber, Subject, Priority, Status, Owner.Name
FROM Case
WHERE CreatedDate = TODAY
ORDER BY Priority ASC, CreatedDate ASCUnassigned cases:
SELECT Id, CaseNumber, Subject, Priority, CreatedDate
FROM Case
WHERE OwnerId = null
AND Status != 'Closed'
ORDER BY Priority ASC, CreatedDate ASCCases by type:
SELECT Type, COUNT(Id) count
FROM Case
WHERE Status != 'Closed'
GROUP BY Type
ORDER BY COUNT(Id) DESCMarketing Queries
Leads by source:
SELECT LeadSource, COUNT(Id) leadCount
FROM Lead
WHERE CreatedDate = THIS_MONTH
GROUP BY LeadSource
ORDER BY leadCount DESCConverted leads:
SELECT Id, Name, Company, Email, ConvertedDate, ConvertedAccountId
FROM Lead
WHERE IsConverted = true
AND ConvertedDate = THIS_QUARTER
ORDER BY ConvertedDate DESCUncontacted leads:
SELECT Id, Name, Company, Email, LeadSource, CreatedDate
FROM Lead
WHERE Status = 'Open - Not Contacted'
AND CreatedDate >= LAST_N_DAYS:7
ORDER BY CreatedDate ASCData Quality Queries
Accounts without contacts:
SELECT Id, Name, Type, Industry
FROM Account
WHERE Id NOT IN (SELECT AccountId FROM Contact WHERE AccountId != null)
AND Type = 'Customer'
ORDER BY NameContacts without email:
SELECT Id, FirstName, LastName, Account.Name, Phone
FROM Contact
WHERE Email = null
AND Account.Type = 'Customer'
ORDER BY Account.Name, LastNameDuplicate emails:
SELECT Email, COUNT(Id) duplicateCount
FROM Contact
WHERE Email != null
GROUP BY Email
HAVING COUNT(Id) > 1
ORDER BY duplicateCount DESCRecords with missing required fields:
SELECT Id, Name, Phone, Email, Website
FROM Account
WHERE (Phone = null OR Email = null OR Website = null)
AND Type = 'Customer'
ORDER BY NameQuery Templates with Variables
Parameterized account query:
-- Variables
:let ^accountType = 'Customer'
:let ^minRevenue = 5000000
:let ^industry = 'Technology'
-- Query
SELECT Id, Name, Type, Industry, AnnualRevenue, Owner.Name
FROM Account
WHERE Type = ^accountType
AND AnnualRevenue > ^minRevenue
AND Industry = ^industry
ORDER BY AnnualRevenue DESC
LIMIT 100Date-based opportunity query:
-- Variables
:let ^startDate = 2025-01-01
:let ^endDate = 2025-12-31
:let ^stage = 'Closed Won'
-- Query
SELECT Id, Name, Amount, CloseDate, Account.Name, Owner.Name
FROM Opportunity
WHERE StageName = ^stage
AND CloseDate >= ^startDate
AND CloseDate <= ^endDate
ORDER BY CloseDate DESC, Amount DESCNext Steps
- Query Basics - Learn SOQL fundamentals
- Query Variables - Use variables in queries
- Workflows - Real-world query workflows
Building Your Query Library
Save these queries as templates (:savequery [name]) for quick access. Modify them for your specific use cases. Build a personal library of queries you use regularly.