Les requêtes récursives (partie 1/3)

Logo SQL Server

L’objet de ces trois articles est d’aborder un problème qui ne semble pas possible de réaliser simplement avec une requête SQL, la récursivité. La solution réside dans les expressions CTE (expressions de tables communes).

Dans le premier article, nous posons les bases du problème. Dans le deuxième article, nous expliquons ce que sont les expressions CTE. Enfin, le dernier article montre comment la récursivité est traitée avec les expressions CTE.

Description du problème

Dans une table, nous avons une liste de salariés dans une entreprise avec leur manager direct respectif. Voici un exemple de l’organigramme qui nous intéressera dans cet exercice :

Cet organigramme est stocké dans une base de données SQL Server. Voici d’abord le script de création de la table :

CREATE TABLE [dbo].[MyEmployees] (
[EmployeeID] SMALLINT NOT NULL,
[FirstName] NVARCHAR(30) NOT NULL,
[LastName] NVARCHAR(40) NOT NULL,
[Title] NVARCHAR(50) NOT NULL,
[DeptID] SMALLINT NOT NULL,
[ManagerID] SMALLINT NULL,
CONSTRAINT [PK_MyEmployees_EmployeeID] PRIMARY KEY CLUSTERED ([EmployeeID]),
CONSTRAINT [FK_MyEmployees_ManagerID] FOREIGN KEY ([ManagerID]) REFERENCES [dbo].[MyEmployees]([EmployeeID]));

Donc, la représentation de la table avec sa contrainte d’intégrité circulaire ressemble à ceci :

L’étape suivante est donc de remplir la table avec les données qui nous intéresse :

INSERT INTO [dbo].[MyEmployees]([EmployeeID], [FirstName], [LastName], [Title], [DeptID], [ManagerID]) VALUES
(1, N'Ken', N'Sanchez', N'Chief Executive Officer', 16, NULL),
(273, N'Brian', N'Welcker', N'Vice President of Sales', 3, 1),
(274, N'Stephen', N'Jiang', N'North American Sales Manager', 3, 273),
(275, N'Michael', N'Blythe', N'Sales Representative', 3, 274),
(276, N'Linda', N'Mitchell', N'Sales Representative', 3, 274),
(285, N'Syed', N'Abbas', N'Pacific Sales Manager', 3, 273),
(286, N'Lynn', N'Tsoflias', N'Sales Representative', 3, 285),
(287, N'David',N'Bradley', N'Marketing Manager', 4, 273),
(288, N'Mary', N'Gibson', N'Marketing Specialist', 4, 287);

Maintenant, si nous interrogeons la table :

SELECT [EmployeeID], [FirstName], [LastName], [Title], [DeptID], [ManagerID] FROM [dbo].[MyEmployees] ORDER& BY [EmployeeID];

Voici le résultat que nous obtenons :

EmployeeIDFirstNameLastNameTitleDeptIDManagerID
1KenSanchezChief Executive Officer16NULL
273BrianWelckerVice President of Sales31
274StephenJiangNorth American Sales Manager3273
275MichaelBlytheSales Representative3274
276LindaMitchellSales Representative3274
285SyedAbbasPacific Sales Manager3273
286LynnTsofliasSales Representative3285
287DavidBradleyMarketing Manager4273
288MaryGibsonMarketing Specialist4287

Nous sommes loin d’obtenir une requête récursive.

C’est ce que nous allons voir en détail dans les deux prochains articles, maintenant que les bases du problème sont posées.

Bien à vous.

3 réponses à « Les requêtes récursives (partie 1/3) »

  1. Avatar de Sébastien Pertus

    CTE mon ami 🙂

    J’aime

  2. Avatar de Les requêtes récursives (partie 2/3) « SQL Server dans le détail

    […] SQL, la récursivité. La solution réside dans les CTE (expressions de tables communes). Dans le premier article, nous posons les bases du problème. Dans le deuxième article, nous expliquons ce que sont les […]

    J’aime

  3. Avatar de Les requêtes récursives (partie 3/3) « SQL Server dans le détail

    […] le premier article, nous posons les bases du problème. Dans le deuxième article, nous expliquons ce que sont les […]

    J’aime

Rechercher

A propos de l’auteur

Spécialiste certifié Microsoft BI (SQL Server et Azure), Philippe Geiger accompagne aussi bien les professionnels en infrastructure que les développeurs BI. Maîtrisant tous les aspects de la plateforme Data de Microsoft, il assure également, en sa qualité de formateur certifié, les formations officielles de Microsoft. Par ailleurs, il est Directeur des Activités Grand-Est chez Metsys, société « Pure Player » Microsoft.

Les derniers tweets

Certifications

Microsoft Certified: Power BI Data Analyst Associate
Microsoft Certified: Azure AI Engineer Associate
Microsoft Certified: Azure Fundamentals
Microsoft Certified: Azure Data Fundamentals
MCSE: Data Management and Analytics — Certified 2018
MCSA: SQL 2016 Database Administration - Certified 2016
MCSA: SQL Server 2012/2014 - Certified 2016
Microsoft Certified: Azure Data Engineer Associate
Microsoft Certified: Azure Database Administrator Associate
Microsoft Certified: Power Platform Fundamentals
Microsoft Certified Trainer 2022-2023
MCSE: Data Management and Analytics — Certified 2016
MCSA: SQL 2016 Database Development - Certified 2016
MTA: Database Fundamentals - Certified 2016
Microsoft Certified: Azure Data Scientist Associate
Microsoft 365 Certified: Fundamentals
Microsoft Certified: Azure AI Fundamentals
Exam 473: Designing and Implementing Cloud Data Platform Solutions
MCSA: SQL 2016 Business Intelligence Development - Certified 2016
MCSA: BI Reporting - Certified 2018

Archives