Elke query kan een overeenkomstige "tellingenquery" hebben. Een tellingenquery retourneert het aantal rijen in de oorspronkelijke query. Om een telquery uit een bestaande query te verkrijgen (die een select-queryobject is dat SelectInterface implementeert), gebruik je de methode countQuery().
Sommige SQL-query’s kunnen dubbele resultaten opleveren. In zulke gevallen kunnen dubbele rijen worden gefilterd met het sleutelwoord DISTINCT in een statische query. In een dynamische query gebruik je de methode distinct().
Om te groeperen op een bepaald veld gebruik je de methode groupBy().
$query->groupBy('uid');
Bovenstaande code geeft aan dat de query moet groeperen op het veld uid. Merk op dat de veldnaam hier een alias moet zijn die is aangemaakt met de methoden addField() of addExpression(). In de meeste gevallen wil je daarom de returnwaarde van die methoden gebruiken om zeker te zijn dat de juiste alias wordt gebruikt.
Om een WHERE-clausule toe te voegen aan een dynamische query, gebruik je de methode condition():
$query->condition('bundle', 'article', '=');
Bovenstaande code instrueert de query om de resultaten te filteren op het bundletype article. Merk op dat de veldnaam hier een alias moet zijn die is aangemaakt met de methoden addField() of addExpression().
Parameters van condition()
De methode condition() accepteert drie parameters:
Een SELECT-query retourneert altijd een resultset-object dat nul of meer records bevat. Er zijn verschillende manieren om gegevens uit deze resultset te halen, afhankelijk van het gebruiksscenario. Records worden standaard opgehaald als objecten, tenzij je de fetch-modus wijzigt (zie: setFetchMode).
Het meest voorkomende geval is het doorlopen van de resultset met een foreach()-lus.
Query’s kunnen worden opgehaald als objecten op basis van aangepaste klassen. Bijvoorbeeld, als we een klasse hebben met de naam ExampleClass, dan retourneert de volgende query objecten van het type ExampleClass.
Invoegquery’s moeten altijd gebruikmaken van het query builder-object. In sommige databases is speciale verwerking vereist voor LOB-velden (Large OBject, bijvoorbeeld TEXT in MySQL) en BLOB’s (Binary Large OBject), dus is er een abstractielaag nodig zodat afzonderlijke databasedrivers eventuele speciale verwerking kunnen implementeren die zij nodig hebben.
Insert-query’s worden uitgevoerd met de methode insert() als volgt:
Samenvoegingsquery’s zijn een speciaal type hybride query. Hoewel de syntaxis hiervoor is gedefinieerd in de SQL 2003-specificatie, ondersteunt vrijwel geen enkele database de standaardsyntaxis. De meeste databases bieden echter een alternatieve implementatie met een database-specifieke syntaxis. De merge query builder in Drupal abstraheert het concept van een samenvoegingsquery naar een gestructureerd object dat kan worden gecompileerd naar de juiste syntaxis voor elke database. Ze worden soms ook wel "UPSERT"-query’s genoemd, een combinatie van UPDATE en INSERT.
Verwijderingsquery’s moeten altijd gebruikmaken van het query builder-object. Ze worden uitgevoerd met de methode delete() als volgt:
$query = $connection->delete('mytable', $options);
Dit maakt een delete-queryobject aan dat records uit de tabel mytable verwijdert. Merk op dat er geen accolades nodig zijn rond de tabelnaam, omdat de query builder dit automatisch afhandelt.
Drupal ondersteunt ook transacties, inclusief een transparant fallback-mechanisme voor databases die geen transacties ondersteunen. Transacties kunnen echter vrij complex zijn als je probeert twee transacties tegelijkertijd te starten. Het gedrag in dat geval hangt ook af van de gebruikte database.