Depuis les versions récentes de QGIS (à partir de QGIS 3.42), une nouvelle fonctionnalité a discrètement fait son apparition dans le menu contextuel des couches vectorielles : l’option « Requête SQL… ».
Cette amélioration, bien que discrète, offre un accès immédiat et puissant aux fonctionnalités SQL, sans passer par les outils plus complexes de traitements ou le gestionnaire de base de données.
Une nouveauté discrète mais utile
En effectuant un clic droit sur une couche vectorielle (issue d’une base de données ou non), une nouvelle entrée apparaît : Requête SQL…

Elle ouvre une interface simplifiée pour écrire des requêtes SQL sur la couche active. Cela permet, entre autres :
- de filtrer spatialement ou attributairement la couche,
- de générer de nouvelles géométries (buffers, intersections, simplifications…),
- ou d’agréger des données (regroupements, moyennes, comptages, etc.).
Cette fonctionnalité repose sur le moteur QGIS SQL, capable de travailler aussi bien sur des couches spatiales locales (shapefiles, GeoPackage, etc.) que sur des bases PostgreSQL/PostGIS.
Le résultat de la requête s’affiche dans une fenêtre dédiée sous forme de liste des enregistrements correspondant aux critères spécifiés. Vous pouvez les consulter immédiatement, mais surtout, grâce à l’option « Charger en tant que nouvelle couche », le résultat peut être ajouté directement comme couche virtuelle dans le panneau Couches de QGIS. Cela permet de réutiliser les résultats sans duplication de données, avec un accès instantané à une sélection filtrée et dynamique.
Cette couche est temporaire et non enregistrée par défaut. Si vous souhaitez la conserver ou l’utiliser dans un autre projet, vous pouvez ensuite l’enregistrer manuellement dans un format de votre choix (GeoPackage, Shapefile, etc.) via un clic droit > « Exporter ».
Exemple simple : filtrer les parcelles de plus d’un hectare
Voici une requête directe sur une couche de type parcellaire :
SELECT *
FROM cadastre_rodrigues
WHERE ST_Area(geometry) > 10000
Elle renverra uniquement les entités dont la superficie est supérieure à 10 000 m².
Exemple spatial : parcelles à moins de 200 m des rivières
Si vous avez une couche rivieres_rodrigues
chargée, la requête suivante calcule l’intersection entre les parcelles et un buffer de 200 m autour des rivières :
SELECT
p.id,
ST_Intersection(p.geometry, ST_Union(ST_Buffer(r.geometry, 200))) AS geometry
FROM cadastre_rodrigues AS p,
rivieres_rodrigues AS r
WHERE ST_Intersects(p.geometry, ST_Buffer(r.geometry, 200))
Cette requête renvoie les géométries intersectées réelles, et non la parcelle entière.

Astuces pratiques
- Le moteur SQL prend en charge de nombreuses fonctions spatiales (
ST_Buffer
,ST_Intersection
,ST_Union
,ST_Area
, etc.). - Le champ
geometry
est obligatoire dans les résultats pour que la couche issue de la requête soit visualisable sur la carte. - Vous pouvez sauvegarder le résultat de la requête comme couche virtuelle, nouvelle couche GeoPackage, ou l’ajouter au projet.
Un gain de temps considérable pour les utilisateurs avancés
Auparavant, il fallait soit :
- utiliser le gestionnaire de base de données (limité aux bases comme PostgreSQL),
- soit créer une couche virtuelle à la main via le menu des sources de données,
- ou encore utiliser un traitement de type “Requête SQL” via le module “Base de données”.
La nouvelle commande contextuelle Requête SQL… simplifie et accélère la démarche pour tous les utilisateurs familiers du SQL, sans nécessiter d’ouvrir d’autres boîtes de dialogue.
En résumé
L’ajout de cette option dans le menu contextuel des couches vectorielles est une excellente initiative pour rendre plus accessible l’usage du SQL dans les projets QGIS, sans sacrifier la puissance.
Elle permet d’explorer, filtrer, transformer et croiser les données en quelques clics, et s’inscrit pleinement dans la logique “low-code” vers laquelle évolue QGIS.