29th Mar 2022 7 minutes de lecture Ordre des opérations SQL Ignacio L. Bisso sql apprendre sql bases du sql Table des matières Six opérations à ordonner : SELECT, FROM, WHERE, GROUP BY, HAVING et ORDER BY La base de données des employés Changements dans l'ordre des opérations si nous ajoutons ORDER BY Ajout de clauses GROUP BY et HAVING à la requête Ajout d'une nouvelle opération : la clause JOIN Mot de la fin SQL n'est pas un langage de programmation traditionnel dans lequel vous écrivez une séquence d'instructions dans un ordre d'exécution donné. Au lieu de cela, SQL est un langage "déclaratif", ce qui signifie qu'en écrivant une requête SQL, vous déclarez quelles données vous attendez comme résultat de la requête, mais vous n'indiquez pas comment les obtenir. Six opérations à ordonner : SELECT, FROM, WHERE, GROUP BY, HAVING et ORDER BY À l'aide d'exemples, nous allons expliquer l'ordre d'exécution des six opérations ou éléments les plus courants d'une requête SQL. Comme la base de données exécute les composants de la requête dans un ordre spécifique, il est utile pour le développeur de connaître cet ordre. C'est un peu comme suivre une recette : vous devez connaître les ingrédients et ce qu'il faut faire avec les ingrédients, mais vous devez aussi savoir dans quel ordre effectuer les tâches. Si la base de données suit un ordre d'opérations différent, les performances de la requête peuvent diminuer considérablement. La meilleure façon d'apprendre l'ordre des opérations SQL est de s'exercer. Je recommande la piste de LearnSQL.fr La pratique du SQL de LearnSQL.fr. Il contient plus de 600 exercices pratiques pour mettre en pratique vos compétences en SQL. Vous pouvez également choisir le cours qui vous convient le mieux parmi plus de 30 cours SQL interactifs que nous proposons à différents niveaux de compétence. La base de données des employés Dans cet article, nous allons travailler avec la base de données d'une entreprise typique dont les employés sont répartis dans différents départements. Chaque employé a un ID, un nom, un salaire et appartient à un département, comme nous pouvons le voir dans les tables suivantes. Exemple de table EMPLOYEE : EMPLOYEE_IDFIRST_NAMELAST_NAMESALARYDEPARTMENT 100James Smith 78,000 ACCOUNTING 101Mary Sexton82,000 IT 102Chun Yen 80,500 ACCOUNTING 103Agnes Miller95,000 IT 104DmitryKomer 120,000SALES Exemple de table DEPARTMENT : DEPT_NAMEMANAGERBUDGET ACCOUNTING100300,000 IT 101250,000 SALES 104700,000 Dans cet article, nous utiliserons également des requêtes SQL fréquemment utilisées dans une entreprise : "Obtenir les noms des employés travaillant pour le département informatique" ou "Obtenir le nombre d'employés de chaque département dont le salaire est supérieur à 80.000". Pour chacune de ces requêtes, nous allons analyser l'ordre d'exécution de ses composants. Commençons par une requête simple pour obtenir les noms des employés du département informatique : SELECT LAST_NAME, FIRST_NAME FROM EMPLOYEE WHERE DEPARTMENT = 'IT' Tout d'abord, nous exécutons FROM EMPLOYEEqui récupère ces données : EMPLOYEE_IDFIRST_NAMELAST_NAMESALARYDEPARTMENT 100James Smith 78,000 ACCOUNTING 101Mary Sexton82,000 IT 102Chun Yen 80,500 ACCOUNTING 103Agnes Miller95,000 IT 104DmitryKomer 120,000SALES Ensuite, nous exécutons WHERE DEPARTMENT = 'IT', qui réduit le résultat de la requête à ceci : EMPLOYEE_IDFIRST_NAMELAST_NAMESALARYDEPARTMENT 101Mary Sexton82,000IT 103AgnesMiller95,000IT Enfin, nous appliquons SELECT FIRST_NAME, LAST_NAME, ce qui produit le résultat final de la requête : FIRST_NAMELAST_NAME Mary Sexton AgnesMiller Super ! Après avoir terminé notre première dissection de requête, nous pouvons conclure que l'ordre d'exécution des requêtes simples avec SELECT, FROM, et WHERE est le suivant : Changements dans l'ordre des opérations si nous ajoutons ORDER BY Supposons que votre patron reçoive un rapport basé sur la requête de l'exemple précédent et le rejette, car les noms des employés ne sont pas dans l'ordre alphabétique. Pour résoudre ce problème, vous devez ajouter une clause ORDER BY à la requête précédente : SELECT LAST_NAME, FIRST_NAME FROM EMPLOYEE WHERE DEPARTMENT = 'IT' ORDER BY FIRST_NAME Le processus d'exécution de cette requête est presque le même, que dans l'exemple précédent. Le seul changement se situe à la fin, lorsque la clause ORDER BY est traitée. Le résultat final de cette requête ordonne les entrées par FIRST_NAME, comme indiqué ci-dessous : FIRST_NAMELAST_NAME AgnesMiller Mary Sexton Ainsi, si nous avons SELECT avec FROM, WHERE, et ORDER BY, l'ordre d'exécution est le suivant : Ajout de clauses GROUP BY et HAVING à la requête Dans cet exemple, nous allons utiliser une requête avec GROUP BY. Supposons que nous voulions obtenir le nombre d'employés de chaque département qui ont un salaire supérieur à 80 000, et que nous voulions le résultat dans l'ordre décroissant du nombre de personnes dans chaque département. La requête pour cette situation est la suivante : SELECT DEPARTMENT, COUNT(*) FROM EMPLOYEES WHERE SALARY > 80000 GROUP BY DEPARTMENT ORDER BY COUNT(*) DESC De nouveau, nous exécutons d'abord FROM EMPLOYEE qui récupère ces données : EMPLOYEE_IDFIRST_NAMELAST_NAMESALARYDEPARTMENT 100James Smith 78,000 ACCOUNTING 101Mary Sexton82,000 IT 102Chun Yen 80,500 ACCOUNTING 103Agnes Miller95,000 IT 104DmitryKomer 120,000SALES Deuxièmement, nous exécutons WHERE SALARY > 80000, qui réduit le résultat à ceci : EMPLOYEE_IDFIRST_NAMELAST_NAMESALARYDEPARTMENT 101Mary Sexton82,000 IT 102Chun Yen 80,500 ACCOUNTING 103Agnes Miller95,000 IT 104DmitryKomer 120,000SALES Troisièmement, GROUP BY est appliqué, générant un enregistrement pour chaque valeur distincte dans les colonnes de GROUP BY. Dans notre exemple, nous créons un enregistrement pour chaque valeur distincte dans DEPARTMENT: DEPARTMENT ACCOUNTING IT SALES Quatrièmement, nous appliquons SELECT avec COUNT(*), produisant ce résultat intermédiaire : DEPARTMENTCOUNT(*) ACCOUNTING1 IT 2 SALES 1 Enfin, nous appliquons la clause ORDER BY, produisant le résultat final de la requête : DEPARTMENTCOUNT(*) IT 2 ACCOUNTING1 SALES 1 L'ordre d'exécution dans cet exemple est : Dans le prochain exemple, nous allons ajouter la clause HAVING. HAVING n'est pas aussi couramment utilisée en SQL que les autres clauses que nous avons examinées jusqu'à présent. La meilleure façon de décrire HAVING est de dire que c'est comme la clause WHERE pour GROUP BY. En d'autres termes, c'est un moyen de filtrer ou d'écarter certains des groupes d'enregistrements créés par GROUP BY. Supposons maintenant que nous voulions obtenir tous les départements, sauf le département SALES, dont le salaire moyen est supérieur à 80 000. La requête pour cette situation est la suivante : SELECT DEPARTMENT FROM EMPLOYEES WHERE DEPARTMENT <> 'SALES' GROUP BY DEPARTMENT HAVING AVG(SALARY) > 80000 Encore une fois, nous exécutons d'abord FROM EMPLOYEE qui récupère ces données : EMPLOYEE_IDFIRST_NAMELAST_NAMESALARYDEPARTMENT 100 James Smith 78,000 ACCOUNTING 101 Mary Sexton 82,000 IT 102 Chun Yen 80,500 ACCOUNTING 103 Agnes Miller 95,000 IT 104 Dmitry Komer 120,000 SALES Deuxièmement, la clause WHERE, excluant les enregistrements SALES, est traitée : EMPLOYEE_IDFIRST_NAMELAST_NAMESALARYDEPARTMENT 100 James Smith 78,000 ACCOUNTING 101 Mary Sexton 82,000 IT 102 Chun Yen 80,500 ACCOUNTING 103 Agnes Miller 95,000 IT Troisièmement, GROUP BY est appliqué, générant les enregistrements suivants : DEPARTMENTAVG(SALARY) ACCOUNTING 79,250 IT 88,500 Quatrièmement, HAVING AVG(SALARY) > 80000 est appliqué pour filtrer le groupe d'enregistrements générés par GROUP BY: DEPARTMENTAVG(SALARY) IT 88,500 Enfin, la clause SELECT est appliquée, produisant le résultat final de la requête : DEPARTMENT IT L'ordre d'exécution dans cet exemple est le suivant : Ajout d'une nouvelle opération : la clause JOIN Les exemples précédents portaient sur une seule table. Ajoutons une deuxième table à l'aide de la clause JOIN. Supposons que nous voulions obtenir les noms de famille et les identifiants des employés travaillant pour des départements dont le budget est supérieur à 275 000. La requête pour cette situation est la suivante : SELECT EMPLOYEE_ID, LAST_NAME FROM EMPLOYEES JOIN DEPARTMENT ON DEPARTMENT = DEPT_NAME WHERE BUDGET > 275000 Encore une fois, nous exécutons d'abord FROM EMPLOYEE qui récupère ces données : EMPLOYEE_IDFIRST_NAMELAST_NAMESALARYDEPARTMENT 100James Smith 78,000 ACCOUNTING 101Mary Sexton82,000 IT 102Chun Yen 80,500 ACCOUNTING 103Agnes Miller95,000 IT 104DmitryKomer 120,000SALES Deuxièmement, nous appliquons la clause JOIN générant un nouveau résultat intermédiaire combinant les deux tables : EMPLOYEE_IDFIRST_NAMELAST_NAMESALARYDEPARTMENTDEPT_NAMEMANAGERBUDGET 100James Smith 78,000 ACCOUNTINGACCOUNTING100300,000 101Mary Sexton82,000 IT IT 101250,000 102Chun Yen 80,500 ACCOUNTINGACCOUNTING100300,000 103Agnes Miller95,000 IT IT 101250,000 104DmitryKomer 120,000SALES SALES 104700,000 Troisièmement, on applique WHERE BUDGET > 275000: EMPLOYEE_IDFIRST_NAMELAST_NAMESALARYDEPARTMENTDEPT_NAMEMANAGERBUDGET 100James Smith78,000 ACCOUNTINGACCOUNTING100300,000 102Chun Yen 80,500 ACCOUNTINGACCOUNTING100300,000 104DmitryKomer120,000SALES SALES 104700,000 Enfin, SELECT EMPLOYEE_ID, LAST_NAME sont exécutés, produisant le résultat final de la requête : EMPLOYEE_IDLAST_NAME 100Smith 102Yen 104Komer L'ordre d'exécution dans cet exemple est le suivant : Mot de la fin Dans cet article, nous avons couvert l'ordre d'exécution dans les requêtes SQL à travers des exemples. Ces exemples montrent qu'il existe un ordre d'exécution, mais que cet ordre peut varier en fonction des clauses présentes dans la requête. En règle générale, l'ordre d'exécution est le suivant : Cependant, si l'une de ces clauses n'est pas présente, l'ordre d'exécution sera différent. SQL est un langage d'abord facile, mais une fois que vous avez commencé, il y a beaucoup de concepts passionnants à explorer. Consultez ce cours en ligne pour entrer dans le monde fascinant de SQL et voir où il peut vous mener ! Tags: sql apprendre sql bases du sql