Suche…


Syntax

  • ID von Konto auswählen
  • SELECT ID, Name FROM Konto
  • SELECT ID FROM Konto WHERE Name = 'SomeAccountName'
  • SELECT ID, Name, (SELECT ID, Name FROM Kontakte) FROM Konto
  • SELECT ID, Name FROM Konto WHERE Id =: apexVariableName

Grundlegende SOQL-Abfrage

SELECT Id, Name FROM Account

Dadurch werden die Felder ID und Name aus der Account-Tabelle zurückgegeben. Es wird keine Filterung oder Sortierung angewendet.

SOQL-Abfrage mit Filterung

SELECT Name FROM User WHERE IsActive = true

Dies gibt den Namen aller aktiven Benutzer zurück.

SELECT Name, Phone FROM Contact WHERE CreatedDate >= 2016-01-01T00:00:00.000Z

Dadurch werden Kontakte zurückgegeben, die am oder nach dem 1. Januar 2016 erstellt wurden.

SELECT Id, Name FROM Account LIMIT 100

Dadurch werden die ersten 100 Konten aus einer ungeordneten Liste zurückgegeben.

SELECT Id, Name, Phone FROM Lead WHERE Phone LIKE '(%) %-%'

Dadurch werden Leads mit einer Telefonnummer zurückgegeben, die dem angegebenen Format entspricht. "%" fungiert als Platzhalter.

Die Verwendung von LIKE '% %' CONTAINS( ) LIKE '% %' ermöglicht es einem Entwickler auch, eine CONTAINS( ) Formel zu replizieren.

SELECT Email FROM Lead WHERE LeadSource LIKE '%Google%'

Gibt Leads mit einer Lead-Quelle zurück, die Google enthält, z. B. "Google AdWords" und "Google Natural Search".

SOQL-Abfrage mit Bestellung

SELECT Id, Name FROM User ORDER BY LastName

SELECT Id, Name FROM Contact ORDER BY LastModifiedDate DESC

SELECT Name, Title FROM User ORDER BY Title ASC NULLS FIRST

SELECT Id FROM Contact ORDER BY LastName ASC NULLS LAST, FirstName ASC NULLS FIRST

Verwenden von SOQL zum Erstellen einer Karte

Eine sehr nützliche Funktion, die viele Leute übersehen, ist die Möglichkeit, eine Map mit einer SOQL-Abfrage zu erstellen.

Map<Id, Account> accounts = new Map<Id, Account>([SELECT Id, Name FROM Account]);
System.debug(accounts);

Wenn Sie diesen Code ausführen, accounts enthält dann eine Karte von Ihrem Konto Objekte, verkeilt auf Id. Die Ausgabe in das Debug-Protokoll würde folgendermaßen aussehen:

11:15:10:025 USER_DEBUG [13]|DEBUG|{
    XXXXXXXXXXXXXXXXXX=Account:{Id=XXXXXXXXXXXXXXXXXX, Name=Account 1}, 
    YYYYYYYYYYYYYYYYYY=Account:{Id=YYYYYYYYYYYYYYYYYY, Name=Account 2}, 
    ZZZZZZZZZZZZZZZZZZ=Account:{Id=ZZZZZZZZZZZZZZZZZZ, Name=Account 3}, 
    ...
}

Sie können nun die Account-Objekte anhand ihrer ID suchen. Wenn Sie eine Sammlung eindeutiger IDs wünschen, können Sie außerdem die keySet() Funktion der Map-Klasse aufrufen:

System.debug(accounts.keySet());

was im Debug-Log ungefähr so ​​aussieht:

11:23:21:010 USER_DEBUG [15]|DEBUG|{XXXXXXXXXXXXXXXXXX, YYYYYYYYYYYYYYYYYY, ZZZZZZZZZZZZZZZZZZ, ...}

Dies ist sehr nützlich, wenn Sie abfragen müssen, um Datensätze abzurufen und wiederholt in Ihrem Code darauf zuzugreifen.

SOQL-Abfrage zum Verweisen auf Felder des übergeordneten Objekts

Wenn Objekte durch eine Lookup- oder Master-Detail-Beziehung verknüpft sind, können die Felder des übergeordneten Datensatzes aus dem untergeordneten Datensatz oder dem 'Basisobjekt' in einer Abfrage referenziert werden. Dies wird auch als Aufwärtsdurchquerung bezeichnet.

SELECT FirstName, Account.Name, Account.Category__c FROM Contact

Es ist möglich, fünf Datensätze nach oben zu durchlaufen.

SELECT Account.Owner.Profile.CreatedBy.Name FROM Contact

Wenn das Basisobjekt ein benutzerdefiniertes Suchfeld ist, wird beispielsweise der Name __c im Feld Primary_Influencer__c in __r geändert.

SELECT Primary_Influencer__r.Nickname__c FROM Contact

SOQL-Abfrage, um untergeordnete Datensätze abzurufen

SELECT Id, Name, (SELECT Id, FirstName, LastName FROM Contacts) FROM Account

SOQL-Abfragen in Apex

Um eine Abfrage in Apex auszuführen, umgeben Sie die Abfrage mit eckigen Klammern. Das Ergebnis kann einer Liste oder einem einzelnen Objekt zugeordnet werden.

List<Account> allAccounts = [SELECT Id, Name FROM Account];
Account oldestAccount = [SELECT Id, Name FROM Account ORDER BY CreatedDate LIMIT 1];

Variablenreferenzen in Apex-SOQL-Abfragen

Um auf eine Variable in einer Abfrage zu verweisen, fügen Sie vor dem Variablennamen einen Doppelpunkt (:)

Datetime targetDate = Datetime.now().addDays(-7);
List<Lead> recentLeads = [SELECT Id FROM Lead WHERE CreatedDate > :targetDate];

string targetName = 'Unknown';
List<Contact> incompleteContacts = [SELECT Id FROM Contact WHERE FirstName = :targetName];

Mögliche Ausnahmen in Apex-SOQL-Abfragen

Beim Zuordnen zu einem einzelnen Objekt QueryException eine Abfrage, die etwas anderes als eine einzelne Zeile QueryException , eine QueryException .

try {
    Account a = [SELECT Id FROM Account WHERE Name = 'Non-existent Account'];  
} catch (QueryException e) {
    // List has no rows for assignment to SObject
}

try {
    Account a = [SELECT Id FROM Account];  
} catch (QueryException e) {
    // List has more than 1 row for assignment to SObject
}

SObjectException Sie versuchen, ein Feld zu verwenden, das Sie nicht in die Abfrage aufgenommen haben, wird eine SObjectException

Account a = [SELECT Id FROM Account LIMIT 1];
try {
    System.debug( a.Name );
} catch (SObjectException e) {
    // SObject row was retrieved via SOQL without querying the requested field: Name
}

Verwenden eines Semi-Joins

Alle Konten auswählen, unter denen offene Opportunity-Datensätze liegen

SELECT Id, Name FROM Account WHERE AccountId IN 
    (SELECT Id FROM Opportunity WHERE IsClosed = false)

Dynamisches SOQL

Sie können eine Datenbankabfrage aus einem String anstelle eines regulären SOQL-Ausdrucks ausführen:

String tableName = 'Account';
String queryString = 'SELECT Id FROM ' + tableName + ' WHERE CreatedDate >= YESTERDAY';
List<SObject> objects = Database.query(queryString);

Da dynamische SOQL-Abfragen nicht kompiliert werden, werden ihre Schemabezüge nicht validiert. Daher ist es bevorzugt, die Apex-Variableninterpolation mit der :variable sofern möglich.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow