If you want all the child *metadata*, you can loop through the `getChildRelationships` results like so: for (ChildRelationship relation : SObjectType.Opportunity.getChildRelationships()) { String relationshipName = relation.getRelationshipName(); // the above value is what you would use in a SOQL sub-query // e.g. SELECT Id, (SELECT Id FROM Children) FROM MyObject SObjectType childType = relation.getChildSObject(); // the above value is the token for the child object SObjectField lookupField = relation.getField(); // the above value is the token for the lookup field on the child object } If you want to get the child *data*, you'll need to build a dynamic query using the above results from the `getRelationshipName` method. Building dynamic queries in an elegant way is perhaps beyond the scope of this question. Below is a simple example of what it might look like. List<String> subqueries = new List<String>(); for (ChildRelationship relation : SObjectType.Opportunity.getChildRelationships()) subqueries.add('(SELECT Id FROM ' + relation.getRelationshipName() + ')'); String query = 'SELECT ' + String.join(subQueries, ',') + ' FROM Opportunity';