0% ont trouvé ce document utile (0 vote)
5 vues7 pages

Exercices TSQL Complet

Ce document présente un programme T-SQL structuré en plusieurs modules, chacun contenant des exercices pratiques avec leurs corrections. Les modules couvrent des sujets tels que les requêtes simples, les jointures, les agrégations, les sous-requêtes, les vues, la manipulation de données, les transactions, les tables temporaires, les procédures et fonctions, les triggers, et l'optimisation. Chaque exercice est accompagné d'une requête SQL correspondante pour illustrer les concepts abordés.

Transféré par

cayrol dairas Abouri
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
5 vues7 pages

Exercices TSQL Complet

Ce document présente un programme T-SQL structuré en plusieurs modules, chacun contenant des exercices pratiques avec leurs corrections. Les modules couvrent des sujets tels que les requêtes simples, les jointures, les agrégations, les sous-requêtes, les vues, la manipulation de données, les transactions, les tables temporaires, les procédures et fonctions, les triggers, et l'optimisation. Chaque exercice est accompagné d'une requête SQL correspondante pour illustrer les concepts abordés.

Transféré par

cayrol dairas Abouri
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

PROGRAMME T-SQL — EXERCICES + CORRIGÉS

MODULE 1 — Bases & Requêtes simples

Exercice 1 :

Écrire une requête qui affiche tous les clients inscrits après 2023-01-01.

Correction :

SELECT * FROM Clients WHERE date_inscription > '2023-01-01';

Exercice 2 :

Afficher les clients dont le nom commence par A.

Correction :

SELECT * FROM Clients WHERE nom LIKE 'A%';

Exercice 3 :

Afficher id, nom et ancienneté en années.

Correction :

SELECT id, nom, DATEDIFF(YEAR, date_inscription, GETDATE()) AS Anciennete FROM Clients;

---

MODULE 2 — Jointures

Exercice 1 :

Afficher le nom du client + le montant de chaque commande.

Correction :

SELECT [Link], [Link] FROM Clients c INNER JOIN Commandes cmd ON [Link] = cmd.client_id;

Exercice 2 :

Afficher tous les clients même sans commandes.

Correction :

SELECT [Link], [Link] FROM Clients c LEFT JOIN Commandes cmd ON [Link] = cmd.client_id;
Exercice 3 :

Nom client + pays + montant commande.

Correction :

SELECT [Link] AS Client, [Link] AS Pays, [Link]

FROM Clients c

JOIN Pays p ON c.pays_id = [Link]

LEFT JOIN Commandes cmd ON [Link] = cmd.client_id;

---

MODULE 3 — Agrégations

Exercice 1 :

Total des montants par client.

Correction :

SELECT client_id, SUM(montant) AS Total FROM Commandes GROUP BY client_id;

Exercice 2 :

Clients ayant un total > 10 000.

Correction :

SELECT client_id, SUM(montant) AS Total

FROM Commandes GROUP BY client_id HAVING SUM(montant) > 10000;

Exercice 3 :

Nombre de clients par pays.

Correction :

SELECT pays_id, COUNT(*) AS NbClients FROM Clients GROUP BY pays_id;

---

MODULE 4 — Sous-requêtes & CTE


Exercice 1 :

Clients ayant au moins une commande.

Correction :

SELECT * FROM Clients WHERE id IN (SELECT client_id FROM Commandes);

Exercice 2 :

Pays ayant au moins un client.

Correction :

SELECT * FROM Pays p WHERE EXISTS (SELECT 1 FROM Clients c WHERE c.pays_id = [Link]);

Exercice 3 :

CTE hiérarchie employés.

Correction :

WITH Hierarchie AS (

SELECT id, nom, manager_id, 0 AS Niveau

FROM employes WHERE manager_id IS NULL

UNION ALL

SELECT [Link], [Link], e.manager_id, [Link] + 1

FROM employes e JOIN Hierarchie h ON e.manager_id = [Link]

SELECT * FROM Hierarchie;

---

MODULE 5 — Vues

Exercice :

Créer une vue total commandes par client.

Correction :

CREATE VIEW v_CommandesClients AS


SELECT [Link], SUM([Link]) AS TotalCommandes

FROM Clients c LEFT JOIN Commandes cmd ON [Link] = cmd.client_id

GROUP BY [Link];

---

MODULE 6 — Manipulation (INSERT / UPDATE / MERGE)

Exercice 1 :

Ajouter un client.

Correction :

INSERT INTO Clients(nom, pays_id, date_inscription)

VALUES ('Paul', 2, GETDATE());

Exercice 2 :

Changer pays d’un client.

Correction :

UPDATE Clients SET pays_id = 3 WHERE id = 10;

Exercice 3 :

MERGE Clients / NouveauxClients.

Correction :

MERGE Clients AS cible

USING NouveauxClients AS src ON [Link] = [Link]

WHEN MATCHED THEN UPDATE SET [Link] = [Link]

WHEN NOT MATCHED THEN INSERT (id, nom) VALUES ([Link], [Link]);

---

MODULE 7 — Transactions

Exercice :
Tester ROLLBACK avec erreur.

Correction :

BEGIN TRY

BEGIN TRAN

UPDATE Clients SET pays_id = 1 WHERE id = 7;

UPDATE Commandes SET montant = montant + 100 WHERE client_id = 7;

INSERT INTO Clients(id) VALUES (NULL); -- erreur

COMMIT;

END TRY

BEGIN CATCH

ROLLBACK;

END CATCH;

---

MODULE 8 — Tables temporaires

Exercice :

Clients avec ≥ 2 commandes.

Correction :

SELECT client_id, COUNT(*) AS NbCmd INTO #ClientsActifs

FROM Commandes GROUP BY client_id HAVING COUNT(*) >= 2;

---

MODULE 9 — Procédures & Fonctions

Exercice 1 :

Procédure commandes d’un client.

Correction :

CREATE PROCEDURE sp_GetCommandes @ClientID INT AS


BEGIN SELECT * FROM Commandes WHERE client_id = @ClientID; END;

Exercice 2 :

Fonction commandes montant minimal.

Correction :

CREATE FUNCTION f_CommandesMin(@MontantMin DECIMAL(10,2))

RETURNS TABLE AS RETURN (

SELECT * FROM Commandes WHERE montant > @MontantMin

);

---

MODULE 10 — Triggers

Exercice :

Trigger journal modifications Clients.

Correction :

CREATE TRIGGER trg_LogModifClients ON Clients AFTER UPDATE AS

BEGIN

INSERT INTO LogClients(client_id, ancien_nom, nouveau_nom, date_modif)

SELECT [Link], [Link], [Link], GETDATE()

FROM deleted d JOIN inserted i ON [Link] = [Link];

END;

---

MODULE 11 — Optimisation

Exercice :

Index pour requête filtrant client_id + montant.

Correction :
CREATE INDEX idx_Commandes_Client_Montant

ON Commandes(client_id, montant);

Vous aimerez peut-être aussi