SOQL / SOSL
1. How many triggers can we have on one object?
Answer :
Salesforce allows multiple triggers per object, but best practice is one trigger per object. When there are multiple triggers, the order of execution is not guaranteed between triggers (though within a single trigger, order of execution applies). Managed packages have their own separate governor limit set for their triggers.
2. Difference between SOQL and SOSL?
Answer :
SOQL (Salesforce Object Query Language): Queries a single object and its related objects. Returns sObject records. Used when you know which object to query.
SOSL (Salesforce Object Search Language): Searches across multiple objects simultaneously using full-text search index. Returns List<List<SObject>>. Used when you don't know which object has the data or need cross-object search.
// SOSL example
List<List<SObject>> results = [FIND 'Acme' IN ALL FIELDS RETURNING Account(Id, Name), Contact(Id, Name)];
3. What is Semi-join and Anti-join in SOQL?
Answer :
Semi-join: Returns records where a field value EXISTS in a subquery. Example: SELECT Id FROM Account WHERE Id IN (SELECT AccountId FROM Contact WHERE Email != null)
Anti-join: Returns records where a field value does NOT EXIST in a subquery. Example: SELECT Id FROM Account WHERE Id NOT IN (SELECT AccountId FROM Contact)
4. SOQL: Fetch Account with most number of Contacts.
Answer :
SELECT AccountId, COUNT(Id) cnt FROM Contact GROUP BY AccountId ORDER BY COUNT(Id) DESC LIMIT 1
5. SOQL: Fetch Accounts with no related Contacts.
Answer :
SELECT Id, Name FROM Account WHERE Id NOT IN (SELECT AccountId FROM Contact WHERE AccountId != null)
6. SOQL: Count of Opportunity Stages.
Answer :
SELECT StageName, COUNT(Id) cnt FROM Opportunity GROUP BY StageName
7. SOQL: Accounts with more than 3 Contacts.
Answer :
SELECT AccountId, COUNT(Id) cnt FROM Contact GROUP BY AccountId HAVING COUNT(Id) > 3
8. SOQL: Second highest Opportunity amount.
Answer :
SELECT Amount FROM Opportunity ORDER BY Amount DESC LIMIT 1 OFFSET 1
9. SOQL: Parent-to-child and Child-to-parent queries.
Answer :
// Parent-to-child (inner query - standard objects use relationship name)
SELECT Id, Name, (SELECT Id, FirstName, LastName FROM Contacts) FROM Account
// Child-to-parent (dot notation)
SELECT Id, FirstName, Account.Name, Account.BillingCity FROM Contact
// Custom object child-to-parent (use __r instead of __c)
SELECT Id, Name, Account__r.Name FROM Invoice__c
10. SOQL: Count duplicate Leads by Phone.
Answer :
SELECT Phone, COUNT(Id) cnt FROM Lead GROUP BY Phone HAVING COUNT(Id) > 1
11. SOQL: Role of a user.
Answer :
SELECT UserRole.Name FROM User WHERE Id = :userId
12. SOQL: UserRoles not assigned to any User.
Answer :
SELECT Id, Name FROM UserRole WHERE Id NOT IN (SELECT UserRoleId FROM User WHERE UserRoleId != null)
13. SOQL: Get deleted records from Recycle Bin.
Answer :
SELECT Id, Name FROM Account WHERE IsDeleted = true ALL ROWS
14. SOQL: Records created in last 4 years.
Answer :
SELECT Id FROM Lead WHERE CreatedDate >= LAST_N_YEARS:4
15. How to query both Contacts and Leads with same email?
Answer :
SOSL is the best approach — it can search across multiple objects in one query:
List<List<SObject>> results = [FIND 'manjunath@gmail.com' IN EMAIL FIELDS RETURNING Contact(Id, Email), Lead(Id, Email)];
16. What is an External ID field? Why use it?
Answer :
An External ID is a custom field marked as an External ID — it gets indexed and can be used for upsert operations by matching the external system's identifier. Use cases: (1) Upsert records using an external key instead of Salesforce Id; (2) Mapping records during data migration from external systems; (3) Can be used in relationship fields for foreign key lookups in Data Loader.
💬 Community Chatter
Loading...🔐
Join the Community Discussion
Login to ask questions, share answers, and connect with other Salesforce professionals.