खोज…


वाक्य - विन्यास

  • खाता से आईडी का चयन करें
  • सेलेक्ट आईडी, अकाउंट से नाम
  • खाता का चयन करें जहां से नाम = 'SomeAccountName'
  • सेलेक्ट आईडी, नाम, (सेलेक्ट आईडी, संपर्क से नाम) अकाउंट से
  • Id का चयन करें, खाता से नाम जहां Id =: apexVariableName

बेसिक SOQL क्वेरी

SELECT Id, Name FROM Account

यह खाता तालिका से आईडी और नाम फ़ील्ड लौटाएगा। कोई फ़िल्टरिंग या सॉर्टिंग लागू नहीं की जाएगी।

छानने के साथ SOQL क्वेरी

SELECT Name FROM User WHERE IsActive = true

यह सभी सक्रिय उपयोगकर्ताओं का नाम लौटाएगा।

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

यह 1 जनवरी 2016 को या उसके बाद बनाए गए संपर्कों को लौटाएगा।

SELECT Id, Name FROM Account LIMIT 100

यह पहले 100 खातों को एक अनियंत्रित सूची से वापस कर देगा।

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

यह निर्दिष्ट प्रारूप से मेल खाते फ़ोन नंबर के साथ लीड्स लौटाएगा। "%" एक वाइल्ड कार्ड वर्ण के रूप में कार्य करता है।

LIKE '% %' का उपयोग करने से भी डेवलपर को CONTAINS( ) फॉर्मूला को दोहराने में सक्षम बनाता है।

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

Google या 'Google AdWords' और 'Google प्राकृतिक खोज' वाले लीड स्रोत के साथ लीड्स लौटाएगा।

आदेश देने के साथ SOQL क्वेरी

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

मानचित्र का निर्माण करने के लिए SOQL का उपयोग करना

एक बहुत ही उपयोगी सुविधा जो कई लोगों को नजरअंदाज करती है, वह SOQL क्वेरी का उपयोग करके मैप बनाने की क्षमता है।

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

जब आप इस कोड को चलाते हैं, तो accounts में आपकी खाता वस्तुओं का एक मानचित्र होता है, जिसे Id पर रखा जाता है। डीबग लॉग के लिए आउटपुट इस तरह दिखाई देगा:

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}, 
    ...
}

अब आप अपने आईडी का उपयोग करके खाता वस्तुओं को देख सकते हैं। इसके अलावा, यदि आप यूनिक आईडी का संग्रह चाहते हैं, तो आप मानचित्र कक्षा के keySet() फ़ंक्शन को कॉल कर सकते हैं, जैसे:

System.debug(accounts.keySet());

जो डीबग लॉग में कुछ इस तरह दिखता है:

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

यह बहुत उपयोगी है जब आपको रिकॉर्ड प्राप्त करने और अपने कोड में उन्हें बार-बार एक्सेस करने के लिए क्वेरी करने की आवश्यकता होती है।

SOQL संदर्भ माता-पिता के ऑब्जेक्ट फ़ील्ड के संदर्भ में

जब ऑब्जेक्ट किसी लुकअप या मास्टर-डिटेल रिलेशनशिप से जुड़े होते हैं, तो पेरेंट रिकॉर्ड फ़ील्ड को चाइल्ड रिकॉर्ड या क्वेरी में 'बेस ऑब्जेक्ट' से संदर्भित किया जा सकता है। इसे ऊपर की ओर ट्रैवर्सल के रूप में भी जाना जाता है।

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

पांच रिकॉर्डों को ऊपर की ओर ले जाना संभव है।

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

जब आधार ऑब्जेक्ट एक कस्टम लुकअप फ़ील्ड है, तो फ़ील्ड का नाम Primary_Influencer__c, उदाहरण के लिए, __r में बदल दिया जाएगा।

SELECT Primary_Influencer__r.Nickname__c FROM Contact

SOQL प्रश्न बच्चे के रिकॉर्ड प्राप्त करने के लिए

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

एपेक्स में SOQL प्रश्न

एपेक्स में एक क्वेरी करने के लिए, वर्ग कोष्ठक के साथ क्वेरी को घेरें। परिणाम एक सूची, या एक ही वस्तु को सौंपा जा सकता है।

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

सर्वोच्च SOQL क्वेरी में परिवर्तनीय संदर्भ

किसी क्वेरी में एक चर का संदर्भ देने के लिए, एक चर (:) चर नाम से पहले जोड़ें।

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];

शीर्ष SOQL क्वेरी में संभावित अपवाद

किसी एकल ऑब्जेक्ट को असाइन करते समय, एक क्वेरी जो एकल पंक्ति के अलावा कुछ भी लौटाती है, वह QueryException को फेंक 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 को फेंक 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
}

सेमी-जॉइन का उपयोग करना

उन सभी खातों का चयन करना जिनके अंतर्गत खुले अवसर रिकॉर्ड हैं

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

गतिशील SOQL

आप एक नियमित SOQL अभिव्यक्ति के बजाय एक स्ट्रिंग से डेटाबेस क्वेरी निष्पादित कर सकते हैं:

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

चूंकि डायनेमिक SOQL प्रश्न संकलित नहीं किए जाते हैं, उनके स्कीमा संदर्भों को मान्य नहीं किया जाता है, इसलिए जहां संभव हो :variable सिंटैक्स का उपयोग करते हुए एपेक्स चर प्रक्षेप का उपयोग करना बेहतर होता है।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow