Ordre des opérations SQL (2024)

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 :

Ordre des opérations SQL (1)

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 :

Ordre des opérations SQL (2)

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 > 80000GROUP BY DEPARTMENTORDER 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 :

Ordre des opérations SQL (3)

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 :

Ordre des opérations SQL (4)

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 :

Ordre des opérations SQL (5)

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 :

Ordre des opérations SQL (6)

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 !

Ordre des opérations SQL (2024)
Top Articles
6 Financial Pitfalls of Rich People Who Became Poor
Useful Balance Sheet Metrics
Spasa Parish
The Machine 2023 Showtimes Near Habersham Hills Cinemas
Gilbert Public Schools Infinite Campus
Rentals for rent in Maastricht
159R Bus Schedule Pdf
11 Best Sites Like The Chive For Funny Pictures and Memes
Finger Lakes 1 Police Beat
Craigslist Pets Huntsville Alabama
Paulette Goddard | American Actress, Modern Times, Charlie Chaplin
Red Dead Redemption 2 Legendary Fish Locations Guide (“A Fisher of Fish”)
What's the Difference Between Halal and Haram Meat & Food?
Rugged Gentleman Barber Shop Martinsburg Wv
Jennifer Lenzini Leaving Ktiv
Havasu Lake residents boiling over water quality as EPA assumes oversight
Justified - Streams, Episodenguide und News zur Serie
Epay. Medstarhealth.org
Olde Kegg Bar & Grill Portage Menu
Half Inning In Which The Home Team Bats Crossword
Four-Legged Friday: Meet Tuscaloosa's Adoptable All-Stars Cub & Pickle
Harvestella Sprinkler Lvl 2
Is Slatt Offensive
Storm Prediction Center Convective Outlook
Experience the Convenience of Po Box 790010 St Louis Mo
modelo julia - PLAYBOARD
Poker News Views Gossip
Abby's Caribbean Cafe
Joanna Gaines Reveals Who Bought the 'Fixer Upper' Lake House and Her Favorite Features of the Milestone Project
Pull And Pay Middletown Ohio
Tri-State Dog Racing Results
Navy Qrs Supervisor Answers
Trade Chart Dave Richard
Sweeterthanolives
How to get tink dissipator coil? - Dish De
Lincoln Financial Field Section 110
1084 Sadie Ridge Road, Clermont, FL 34715 - MLS# O6240905 - Coldwell Banker
Kino am Raschplatz - Vorschau
Classic Buttermilk Pancakes
Pick N Pull Near Me [Locator Map + Guide + FAQ]
'I want to be the oldest Miss Universe winner - at 31'
Gun Mayhem Watchdocumentaries
Ice Hockey Dboard
Infinity Pool Showtimes Near Maya Cinemas Bakersfield
Dermpathdiagnostics Com Pay Invoice
A look back at the history of the Capital One Tower
Alvin Isd Ixl
Maria Butina Bikini
Busted Newspaper Zapata Tx
2045 Union Ave SE, Grand Rapids, MI 49507 | Estately 🧡 | MLS# 24048395
Upgrading Fedora Linux to a New Release
Latest Posts
Article information

Author: Nicola Considine CPA

Last Updated:

Views: 5953

Rating: 4.9 / 5 (49 voted)

Reviews: 88% of readers found this page helpful

Author information

Name: Nicola Considine CPA

Birthday: 1993-02-26

Address: 3809 Clinton Inlet, East Aleisha, UT 46318-2392

Phone: +2681424145499

Job: Government Technician

Hobby: Calligraphy, Lego building, Worldbuilding, Shooting, Bird watching, Shopping, Cooking

Introduction: My name is Nicola Considine CPA, I am a determined, witty, powerful, brainy, open, smiling, proud person who loves writing and wants to share my knowledge and understanding with you.