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 escomptés.

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.

Dans ce cas de figure, imaginez que vous utilisez une base de données démographiques mondiales et que vous souhaitez trouver toutes les villes de Chine ayant au moins 100 000 habitants ou qui sont des capitales provinciales.

Exemple 1 : Sans groupement

Vous pouvez générer cette requête avec trois clauses, comme illustré dans l’image ci-dessous. Lorsque vous exécutez cette requête, toutes les villes de Chine sont d’abord trouvées, puis elles sont filtrées pour trouver 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. Cela tient au fait que l’opérateur And (Et) a une priorité plus élevée que l’opérateur Or (Ou). En conséquence, l’opérateur And (Et) est évalué en premier.

Requête à trois clauses, non groupées

Exemple 2 : Avec groupement

Dans ce cas précis, vous souhaitez que l’opérateur Or (Ou) soit évalué en premier afin d’obtenir les résultats escomptés. 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.

Requête à trois clauses, les deux dernières étant groupées

Pour grouper deux clauses ou plus, appuyez sur la touche Maj en même temps que vous cliquez sur les clauses à sélectionner, puis cliquez sur Group Clauses (Associer les clauses) Associer les clauses. Pour dissocier des clauses, sélectionnez une clause dans un groupe, puis cliquez sur Ungroup Clauses (Dissocier les clauses) Dissocier les clauses.

Une fois le groupement appliqué, la requête commence par évaluer les clauses du groupe : si 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, cette requête a l'apparence suivante :

CNTRY_NAME = 'China' And (POP > 100000 Or STATUS = 'Provincial capital')

Rubriques connexes