/** * BASIC SOQL QUERY PATTERNS * * This file contains common SOQL patterns for everyday queries. * Each pattern includes the query and usage notes. */ // ═══════════════════════════════════════════════════════════════════════════ // SIMPLE SELECT QUERIES // ═══════════════════════════════════════════════════════════════════════════ -- Get accounts with specific fields SELECT Id, Name, Industry, AnnualRevenue, Phone FROM Account LIMIT 100 -- Get contacts with email SELECT Id, FirstName, LastName, Email, Phone FROM Contact WHERE Email != null LIMIT 100 -- Get opportunities by stage SELECT Id, Name, Amount, StageName, CloseDate FROM Opportunity WHERE StageName = 'Prospecting' ORDER BY Amount DESC // ═══════════════════════════════════════════════════════════════════════════ // DATE FILTERING // ═══════════════════════════════════════════════════════════════════════════ -- Records created today SELECT Id, Name FROM Account WHERE CreatedDate = TODAY -- Records created this week SELECT Id, Name FROM Lead WHERE CreatedDate = THIS_WEEK -- Records created in last 30 days SELECT Id, Name, CreatedDate FROM Contact WHERE CreatedDate = LAST_N_DAYS:30 ORDER BY CreatedDate DESC -- Records modified this month SELECT Id, Name, LastModifiedDate FROM Account WHERE LastModifiedDate = THIS_MONTH -- Opportunities closing this quarter SELECT Id, Name, Amount, CloseDate FROM Opportunity WHERE CloseDate = THIS_QUARTER AND IsClosed = false -- Records created in specific date range SELECT Id, Name, CreatedDate FROM Account WHERE CreatedDate >= 2024-01-01T00:00:00Z AND CreatedDate < 2024-04-01T00:00:00Z // ═══════════════════════════════════════════════════════════════════════════ // TEXT FILTERING // ═══════════════════════════════════════════════════════════════════════════ -- Exact match SELECT Id, Name FROM Account WHERE Name = 'Acme Corporation' -- Case-insensitive exact match (default behavior) SELECT Id, Name FROM Account WHERE Name = 'acme corporation' -- Starts with pattern SELECT Id, Name FROM Account WHERE Name LIKE 'Acme%' -- Contains pattern SELECT Id, Name FROM Account WHERE Name LIKE '%Corp%' -- Ends with pattern (NOT indexed - use sparingly) SELECT Id, Name FROM Account WHERE Name LIKE '%Inc.' -- Multiple values SELECT Id, Name, Industry FROM Account WHERE Industry IN ('Technology', 'Finance', 'Healthcare') -- Exclude values SELECT Id, Name, Industry FROM Account WHERE Industry NOT IN ('Other', 'Unknown') // ═══════════════════════════════════════════════════════════════════════════ // NUMERIC FILTERING // ═══════════════════════════════════════════════════════════════════════════ -- Greater than SELECT Id, Name, AnnualRevenue FROM Account WHERE AnnualRevenue > 1000000 -- Range SELECT Id, Name, Amount FROM Opportunity WHERE Amount >= 10000 AND Amount <= 100000 -- Not equal SELECT Id, Name, Amount FROM Opportunity WHERE Amount != 0 // ═══════════════════════════════════════════════════════════════════════════ // NULL HANDLING // ═══════════════════════════════════════════════════════════════════════════ -- Find records with null value SELECT Id, Name FROM Contact WHERE Email = null -- Find records with non-null value SELECT Id, Name, Email FROM Contact WHERE Email != null -- Find accounts without opportunities (using NOT IN) SELECT Id, Name FROM Account WHERE Id NOT IN (SELECT AccountId FROM Opportunity) // ═══════════════════════════════════════════════════════════════════════════ // SORTING // ═══════════════════════════════════════════════════════════════════════════ -- Sort ascending (default) SELECT Id, Name FROM Account ORDER BY Name ASC -- Sort descending SELECT Id, Name, AnnualRevenue FROM Account ORDER BY AnnualRevenue DESC -- Multiple sort fields SELECT Id, Name, Industry, AnnualRevenue FROM Account ORDER BY Industry ASC, AnnualRevenue DESC -- Nulls last SELECT Id, Name, AnnualRevenue FROM Account ORDER BY AnnualRevenue DESC NULLS LAST // ═══════════════════════════════════════════════════════════════════════════ // PAGINATION // ═══════════════════════════════════════════════════════════════════════════ -- First page (records 1-100) SELECT Id, Name FROM Account ORDER BY Name LIMIT 100 -- Second page (records 101-200) SELECT Id, Name FROM Account ORDER BY Name LIMIT 100 OFFSET 100 -- Note: OFFSET max is 2000. For larger datasets, use query locator in Apex. // ═══════════════════════════════════════════════════════════════════════════ // COMBINED PATTERNS // ═══════════════════════════════════════════════════════════════════════════ -- Active technology accounts with high revenue created this year SELECT Id, Name, Industry, AnnualRevenue, CreatedDate FROM Account WHERE Industry = 'Technology' AND AnnualRevenue > 500000 AND IsActive__c = true AND CreatedDate = THIS_YEAR ORDER BY AnnualRevenue DESC LIMIT 50 -- Contacts with Gmail addresses at accounts in California SELECT Id, FirstName, LastName, Email, Account.Name FROM Contact WHERE Email LIKE '%@gmail.com' AND Account.BillingState = 'CA' ORDER BY LastName -- Open cases older than 7 days SELECT Id, CaseNumber, Subject, Status, CreatedDate, Owner.Name FROM Case WHERE IsClosed = false AND CreatedDate < LAST_N_DAYS:7 ORDER BY CreatedDate ASC