afv-library/skills/platform-soql-query/assets/basic-queries.soql

189 lines
7.4 KiB
Plaintext

/**
* 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