किसी भी क्वेरी का एक संबंधित "काउंट क्वेरी" हो सकता है। काउंट क्वेरी मूल क्वेरी में पंक्तियों की संख्या लौटाता है। किसी मौजूदा क्वेरी (जो कि select क्वेरी ऑब्जेक्ट है और SelectInterface को लागू करता है) से काउंट क्वेरी प्राप्त करने के लिए countQuery() मेथड का उपयोग करें।
कुछ SQL क्वेरीज़ डुप्लीकेट परिणाम लौटा सकती हैं। ऐसे मामलों में, डुप्लीकेट पंक्तियों को स्थिर (static) क्वेरी में DISTINCT कीवर्ड का उपयोग करके फ़िल्टर किया जा सकता है। डायनामिक क्वेरी में distinct() मेथड का उपयोग करें।
किसी दिए गए फ़ील्ड पर ग्रुप करने के लिए groupBy() मेथड का उपयोग करें।
$query->groupBy('uid');
ऊपर दिया गया कोड क्वेरी को uid फ़ील्ड पर ग्रुप करने का निर्देश देगा। ध्यान दें कि यहाँ फ़ील्ड का नाम वही उपनाम (alias) होना चाहिए जो addField() या addExpression() मेथड्स द्वारा बनाया गया हो। इसलिए अधिकतर मामलों में आप इन मेथड्स से लौटाए गए मान का उपयोग करेंगे ताकि सही उपनाम का उपयोग हो सके।
डायनामिक क्वेरी में WHERE क्लॉज़ जोड़ने के लिए condition() मेथड का उपयोग करें:
$query->condition('bundle', 'article', '=');
ऊपर दिया गया कोड क्वेरी को आर्टिकल बंडल में फ़िल्टर करने का निर्देश देगा। ध्यान दें कि यहाँ फ़ील्ड का नाम वही उपनाम (alias) होना चाहिए जो addField() या addExpression() मेथड्स द्वारा बनाया गया हो।
Condition पैरामीटर्स
condition() मेथड तीन पैरामीटर्स स्वीकार करता है:
SELECT क्वेरी हमेशा एक रिज़ल्ट सेट ऑब्जेक्ट लौटाती है, जिसमें शून्य या अधिक रिकॉर्ड हो सकते हैं। इस रिज़ल्ट सेट से डेटा प्राप्त करने के कई तरीके हैं, जो आपके उपयोग के मामले पर निर्भर करते हैं। यदि आप फ़ेच मोड नहीं बदलते, तो रिकॉर्ड्स डिफ़ॉल्ट रूप से ऑब्जेक्ट्स के रूप में प्राप्त किए जाते हैं (देखें: setFetchMode)।
सबसे सामान्य मामला foreach() लूप का उपयोग करके रिज़ल्ट सेट को इटरेट करना है।
क्वेरीज़ को कस्टम क्लासेस के आधार पर ऑब्जेक्ट्स में प्राप्त किया जा सकता है। उदाहरण के लिए, यदि हमारे पास ExampleClass नामक क्लास है, तो निम्नलिखित क्वेरी ExampleClass प्रकार के ऑब्जेक्ट्स लौटाएगी।
इन्सर्ट क्वेरीज़ हमेशा क्वेरी बिल्डर ऑब्जेक्ट का उपयोग करके लिखी जानी चाहिए। कुछ डेटाबेस में LOB (Large OBject, जैसे MySQL में TEXT) और BLOB (Binary Large OBject) फ़ील्ड्स की विशेष हैंडलिंग की आवश्यकता होती है, इसलिए एक एब्स्ट्रैक्शन लेयर की ज़रूरत होती है ताकि अलग-अलग डेटाबेस ड्राइवर्स अपनी आवश्यक विशेष हैंडलिंग लागू कर सकें।
इन्सर्ट क्वेरीज़ insert() मेथड का उपयोग करके इस प्रकार चलाई जाती हैं:
मर्ज क्वेरीज़ (Merge Queries) एक विशेष प्रकार की हाइब्रिड क्वेरी होती हैं। यद्यपि इनके लिए सिंटैक्स SQL 2003 स्पेसिफिकेशन में परिभाषित किया गया है, लेकिन लगभग कोई भी डेटाबेस मानक सिंटैक्स को सपोर्ट नहीं करता। हालाँकि, उनमें से अधिकांश एक वैकल्पिक इम्प्लीमेंटेशन प्रदान करते हैं जो डेटाबेस-विशिष्ट सिंटैक्स का उपयोग करता है। Drupal में मर्ज क्वेरी बिल्डर मर्ज क्वेरी की अवधारणा को एक स्ट्रक्चर्ड ऑब्जेक्ट में एब्स्ट्रैक्ट करता है, जिसे प्रत्येक डेटाबेस के लिए उपयुक्त सिंटैक्स में कम्पाइल किया जा सकता है। इन्हें कभी-कभी "UPSERT" क्वेरीज़ भी कहा जाता है, जो UPDATE और INSERT का संयोजन है।
डिलीट क्वेरीज़ हमेशा क्वेरी बिल्डर ऑब्जेक्ट का उपयोग करके लिखी जानी चाहिए। इन्हें delete() मेथड का उपयोग करके इस प्रकार चलाया जाता है:
$query = $connection->delete('mytable', $options);
यह एक डिलीट क्वेरी ऑब्जेक्ट बनाता है, जो तालिका mytable से रिकॉर्ड्स को हटाता है। ध्यान दें कि टेबल के नाम के लिए आकृति ब्रेसेस (curly braces) की आवश्यकता नहीं होती, क्योंकि क्वेरी बिल्डर इसे स्वचालित रूप से संभाल लेता है।
Drupal ट्रांज़ैक्शन्स को भी सपोर्ट करता है, जिसमें उन डेटाबेस के लिए पारदर्शी (transparent) बैकअप विकल्प शामिल है जो ट्रांज़ैक्शन्स को सपोर्ट नहीं करते। हालांकि, यदि आप एक ही समय पर दो ट्रांज़ैक्शन्स चलाने की कोशिश करते हैं तो ट्रांज़ैक्शन्स काफी जटिल हो सकते हैं। इस स्थिति में व्यवहार भी डेटाबेस पर निर्भर करता है।