Contrôler l'ordre des opérations dans une requête SQL
Lors de l’exécution des requêtes SQL, il est important de comprendre et de gérer l’ordre dans lequel les clauses sont évaluées afin d’obtenir les résultats attendus.
Dans ce scénario, imaginez que vous utilisez une base de données démographiques mondiales et que vous souhaitez identifier toutes les villes de Chine d’au moins 100 000 habitants ou qui sont des capitales provinciales.
Association et dissociation de clauses
Dans une requête avec plusieurs clauses, vous pouvez grouper et dissocier les clauses pour contrôler l’ordre des opérations. Pour associer au moins deux clauses, appuyez sur la touche Maj tout en cliquant sur les clauses pour les sélectionner, puis cliquez sur Group Clauses (Associer les clauses)
. Pour dissocier des clauses, sélectionnez une clause dans un groupe, puis cliquez sur Ungroup Clauses (Dissocier les clauses)
.
Voici deux exemples de la même requête. Dans le premier exemple, le groupement des clauses n’est pas utilisé, et les résultats obtenus ne correspondent pas aux prévisions. Dans le deuxième exemple, les clauses sont groupées de manière à forcer l’ordre correct des opérations à produire les résultats escomptés.
Clauses dissociées
Cette requête de dissociation recherche d’abord toutes les villes de Chine, puis les filtre pour identifier les villes de plus de 100 000 habitants. Ensuite, selon l’opérateur Or (Ou), tout le jeu de données est évalué afin de trouver les capitales provinciales. Les résultats finaux sont composés des villes chinoises de plus de 100 000 habitants et des villes du monde entier qui sont des capitales provinciales, ce qui ne correspond pas aux prévisions. En effet, l’opérateur And (Et) a une priorité plus élevée que l’opérateur Or (Ou). Par conséquent, l’opérateur And (Et) est évalué en premier.

Clauses associées
Dans ce deuxième exemple, pour obtenir les résultats escomptés, l’opérateur Or (Ou) doit être évalué en premier. Pour ce faire, vous pouvez grouper les clauses pour forcer l'ordre des opérations. Les clauses d’un groupe sont évaluées avant les clauses qui se trouvent en dehors du groupe.

Une fois le groupement appliqué, la requête commence par évaluer les clauses du groupe : une ville compte au moins 100 000 habitants ou est une capitale provinciale. Ensuite, elle évalue si cette ville se trouve en Chine. L’opérateur And (Et) permet de vérifier que la requête renvoie correctement les villes correspondant aux deux critères : les villes chinoises qui comptent au moins 100 000 habitants ou qui sont des capitales provinciales.
Le regroupement des clauses équivaut à les entourer de parenthèses. En mode SQL Editor (Éditeur SQL), cette requête a l’apparence suivante :
CNTRY_NAME = 'China' And (POP > 100000 Or STATUS = 'Provincial capital')
Hiérarchiser les clauses attributaires
Lorsque vous effectuez une requête sur une classe d’entités de géodatabase d’entreprise, le client (ArcGIS Pro) accède à la base de données à l’aide de la requête SQL, s’exécute sur la source de données dans la base de données et renvoie un résultat. Depuis la vue cartographique, vous pouvez choisir d’exécuter la clause spatiale dans le cadre de l’exécution de la requête sur la classe d’entités dans la base de données (par défaut) ou de retarder son exécution dans le client jusqu’à ce que les clauses attributaires de la requête soient traitées. En mode de mise à jour de la requête, cliquez sur l’icône de menu
et sélectionnez l’option Prioritize attribute clauses (Hiérarchiser les clauses attributaires) pour appliquer la clause spatiale dans le client une fois que la base de données a filtré les entités. Vous pouvez ainsi améliorer les performances de dessin.
Remarque :
L’option n’est disponible que si la source de données de la couche est une classe d’entités de géodatabase d’entreprise.