Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
0% found this document useful (0 votes)
2 views

SQL_Advanced_Exercises

Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
2 views

SQL_Advanced_Exercises

Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 4

SQL Advanced Exercises and Solutions

-- Advanced SQL Exercises

-- Exercice 1: Recursive Factorial Calculation

DELIMITER //

CREATE FUNCTION CalculerFactoriel(n INT) RETURNS INT

DETERMINISTIC

BEGIN

IF n <= 1 THEN

RETURN 1;

ELSE

RETURN n * CalculerFactoriel(n - 1);

END IF;

END //

DELIMITER ;

-- Exercice 2: Generate List of Clients with Age Evaluation

DELIMITER //

CREATE PROCEDURE GenererListeClientsAvecEvaluation()

BEGIN

CREATE TEMPORARY TABLE ClientsEvaluation AS

SELECT

Nom,

Age,

CASE
WHEN Age < 18 THEN 'Jeune'

WHEN Age BETWEEN 18 AND 65 THEN 'Mature'

ELSE 'Senior'

END AS Evaluation

FROM Clients;

SELECT * FROM ClientsEvaluation;

END //

DELIMITER ;

-- Exercice 3: Transactions with Error Handling

DELIMITER //

CREATE PROCEDURE TransfertClients(IN clientID INT)

BEGIN

DECLARE EXIT HANDLER FOR SQLEXCEPTION

BEGIN

ROLLBACK;

SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Transaction failed';

END;

START TRANSACTION;

INSERT INTO ClientsArchive SELECT * FROM Clients WHERE ID = clientID;

DELETE FROM Clients WHERE ID = clientID;

COMMIT;

END //

DELIMITER ;

-- Exercice 4: Advanced Client Statistics

DELIMITER //
CREATE PROCEDURE CalculerStatistiquesClients()

BEGIN

SELECT

AVG(Age) AS AgeMoyen,

MIN(Age) AS AgeMinimum,

MAX(Age) AS AgeMaximum,

COUNT(CASE WHEN Age < 18 THEN 1 END) AS NombreMineurs,

COUNT(CASE WHEN Age BETWEEN 18 AND 65 THEN 1 END) AS NombreAdultes,

COUNT(CASE WHEN Age > 65 THEN 1 END) AS NombreSeniors

FROM Clients;

END //

DELIMITER ;

-- Exercice 5: Complex Subqueries

DELIMITER //

CREATE PROCEDURE ClientsAvecPlusDeClients()

BEGIN

SELECT c1.Nom, c1.Age

FROM Clients c1

WHERE (

SELECT COUNT(*)

FROM Clients c2

WHERE (c2.Age < 18 AND c1.Age < 18)

OR (c2.Age BETWEEN 18 AND 65 AND c1.Age BETWEEN 18 AND 65)

OR (c2.Age > 65 AND c1.Age > 65)

) > 5;

END //
DELIMITER ;

You might also like