Complete Guide to Salesforce Object Query Language (SOQL)
Introduction
Salesforce Object Query Language (SOQL) is used to query records from a single Salesforce object or multiple related objects. It is similar to SQL (Structured Query Language) but is optimized for Salesforce’s database structure.
This guide covers:
✔ What is SOQL?
✔ SOQL Syntax & Basic Queries
✔ Filtering Data with WHERE Clause
✔ Using Aggregate Functions
✔ Best Practices for Optimized Queries
1. What is SOQL?
SOQL allows you to retrieve, filter, and analyze Salesforce data using structured queries. Unlike SOSL (which searches multiple objects at once), SOQL only queries specific objects but offers more powerful filtering and sorting options.
Key Features of SOQL:
✅ Works with Standard & Custom Objects – Query any Salesforce data.
✅ Supports Relationship Queries – Fetch related records in a single query.
✅ Can Be Used in Apex, APIs, and Developer Console.
✅ More Efficient than SOSL for Structured Queries.
2. Basic SOQL Syntax & Example Queries
A basic SOQL query follows this structure:
SELECT field1, field2 FROM ObjectName WHERE conditions
Example: Fetching All Contacts
SELECT Id, Name, Email FROM Contact
✔ Retrieves Id, Name, and Email from all Contact records.
3. Filtering Data with WHERE Clause
You can filter records using conditions with the WHERE
clause.
🔹 Query Contacts with a Specific Last Name
SELECT Id, Name FROM Contact WHERE LastName = 'Sharma'
✔ Returns Contacts where LastName is ‘Sharma’.
🔹 Query Accounts Created in the Last 30 Days
SELECT Id, Name FROM Account WHERE CreatedDate = LAST_N_DAYS:30
✔ Fetches recently created Accounts.
🔹 Query Opportunities with Amount Greater than 10,000
SELECT Id, Name, Amount FROM Opportunity WHERE Amount > 10000
✔ Retrieves high-value deals.
4. Using Relationship Queries
SOQL supports Parent-to-Child and Child-to-Parent queries to fetch related data.
🔹 Fetch All Contacts Related to Accounts (Parent-to-Child)
SELECT Name, (SELECT LastName FROM Contacts) FROM Account
✔ Returns Accounts along with their related Contacts.
🔹 Fetch Account Name for Each Contact (Child-to-Parent)
SELECT Name, Account.Name FROM Contact
✔ Retrieves Contacts and their associated Account Names.
5. Sorting & Limiting Results
Use ORDER BY
to sort results and LIMIT
to control the number of records returned.
🔹 Fetch the Latest 5 Created Accounts
SELECT Id, Name FROM Account ORDER BY CreatedDate DESC LIMIT 5
✔ Returns the 5 most recently created Accounts.
🔹 Fetch Top 10 Contacts Alphabetically
SELECT Name FROM Contact ORDER BY Name ASC LIMIT 10
✔ Returns Contacts sorted in A-Z order.
6. Using Aggregate Functions in SOQL
SOQL supports SUM, AVG, COUNT, MIN, MAX for data analysis.
🔹 Count Total Number of Contacts
SELECT COUNT(Id) FROM Contact
✔ Returns total number of Contacts.
🔹 Find Maximum Opportunity Amount
SELECT MAX(Amount) FROM Opportunity
✔ Fetches the highest Opportunity Amount.
🔹 Find Average Annual Revenue of All Accounts
SELECT AVG(AnnualRevenue) FROM Account
✔ Calculates the average revenue across Accounts.
7. Best Practices for SOQL Queries
✅ Use Selective Filters – Avoid querying large datasets without conditions.
✅ Limit the Number of Records – Use LIMIT
to optimize performance.
✅ Use Relationship Queries – Minimize API calls with Parent-Child queries.
✅ **Avoid Using SELECT *** – Always specify only required fields.
✅ Use Indexed Fields in WHERE Clause – Queries run faster with indexed fields.
8. When to Use SOQL Over SOSL?
🚀 Use SOQL when:
✔ You need structured queries with filters and sorting.
✔ You’re fetching related records using relationships.
✔ Querying a specific object or small set of objects.
🛑 Use SOSL when:
✔ Searching across multiple objects.
✔ Looking for records without knowing exact object locations.
✔ Searching text fields like Name, Description, or Email.
Conclusion
SOQL is a powerful tool for querying Salesforce data efficiently. By using proper filtering, relationships, and best practices, you can optimize data retrieval, improve performance, and enhance Apex-based applications.
🔹 Need help with advanced queries? Let me know! 😊