0% ont trouvé ce document utile (0 vote)
33 vues12 pages

Cours Partie 1 SQL

Transféré par

Hm Kd
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)
33 vues12 pages

Cours Partie 1 SQL

Transféré par

Hm Kd
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

Parte 1

Langage de programmaton procédural de MySQL


1. Déclaraton de variables locales (dans un bloc ou une procédure)
Les variables locales son ulisées dans les blocs de code els que les procédures sockées, les oncons, ou les
déclencheurs. Elles son déclarées avec la commande DECLARE e ne son disponibles que dans le conexe où
elles son créées.
Exemple 1 d'utlisaton dans une procédure sockée :
DELIMITER //

CREATE PROCEDURE exemple_procedure()


BEGIN
DECLARE ma_variable INT; -- Déclaration d'une variable locale
SET ma_variable = 10; -- Affectation d'une valeur à la variable

-- Utilisation de la variable dans une requête


SELECT ma_variable;
END //

DELIMITER ;
Dans ce exemple, ma_variable es une variable locale qui n'es accessible qu'à l'inérieur de la procédure
exemple_procedure.

Exemple 2 d'utlisaton dans une procédure sockée :


DELIMITER $$

CREATE PROCEDURE calcul_salaire_total()


BEGIN
-- Déclaration de variables locales
DECLARE salaire_base DECIMAL(10, 2);
DECLARE bonus DECIMAL(10, 2);
DECLARE salaire_total DECIMAL(10, 2);

-- Initialisation des variables


SET salaire_base = 2000.00;
SET bonus = 500.00;

-- Calcul du salaire total


SET salaire_total = salaire_base + bonus;

-- Affichage du résultat
SELECT CONCAT('Le salaire total est : ', salaire_total) AS resultat;
END $$

DELIMITER ;

SQUALLI MED 1
2. Déclaraton de variables utlisaeur (variables de session)
Les variables ulisaeur son des variables que vous pouvez déclarer au niveau de la session MySQL. Elles
persisen an que la session es acve, e peuven êre ulisées dans plusieurs requêes dans la même
session.
Exemple d'utlisaton des variables utlisaeur :
SET @ma_variable_utilisateur = 25; -- Déclaration et affectation de la variable
SELECT @ma_variable_utilisateur; -- Utilisation de la variable

Les variables ulisaeur commencen oujours par le symbole @ e peuven êre ulisées dans des requêes
ulérieures au sein de la même session.
Diérences :
• Les variables locales ne son valides qu'à l'inérieur du bloc de code où elles son déclarées, comme les
procédures ou les déclencheurs.
• Les variables utlisaeur peuven êre ulisées enre diérenes requêes, mais seulemen pendan la
durée de vie de la session.
Ces deux ypes de variables permeten de gérer des données emporaires e d'améliorer la fexibilié dans les
requêes SQL.

3. IF e ELSEIF dans une procédure sockée


L'insrucon IF perme de gérer des condions, andis que ELSEIF perme d'ajouer des condions
supplémenaires. Voici un exemple dans une procédure sockée où on ulise IF...ELSEIF...ELSE.
Exemple : Utlisaton de IF...ELSEIF...ELSE
DELIMITER //

CREATE PROCEDURE verifier_age(IN age INT)


BEGIN
IF age < 18 THEN
SELECT 'Vous êtes mineur.' AS resultat;
ELSEIF age >= 18 AND age < 65 THEN
SELECT 'Vous êtes adulte.' AS resultat;
ELSE
SELECT 'Vous êtes senior.' AS resultat;
END IF;
END //

DELIMITER ;

EXECUTION :
SET @p0='16'; CALL `verifier_age`(@p0);
SET @p0='50'; CALL `verifier_age`(@p0);

SQUALLI MED 2
4. L'insructon CASE
CASE es une aure srucure condionnelle qui perme de simplier plusieurs condions dans une seule
expression. Elle peu êre ulisée soi dans une requêe SQL, soi dans un bloc de code comme une procédure.
Exemple 1 : Utlisaton de CASE dans une requêe SQL
Voici un exemple d'ulisaon de CASE pour acher un message selon la noe d'un éudian.
1--
CREATE TABLE etudiants (
id INT AUTO_INCREMENT PRIMARY KEY,
nom VARCHAR(100) NOT NULL,
age INT NOT NULL,
note DECIMAL(5,2) NOT NULL
);

2--
INSERT INTO etudiants (nom, age, note)
VALUES
('Alice Dupont', 20, 85.50),
('Bob Martin', 22, 78.75),
('Charlie Durand', 19, 92.00),
('Diane Bernard', 21, 45.00),
('Eve Leroy', 23, 60.25);

--3
SELECT nom,
note,
CASE
WHEN note >= 90 THEN 'Excellent'
WHEN note >= 75 THEN 'Bien'
WHEN note >= 50 THEN 'Passable'
ELSE 'Échec'
END AS evaluation
FROM etudiants;

Exemple 2 : Utlisaton de CASE dans une procédure sockée


Voici un exemple similaire dans une procédure :
CREATE PROCEDURE evaluer_note(IN note INT)
BEGIN
SELECT CASE
WHEN note >= 90 THEN 'Excellent'
WHEN note >= 75 THEN 'Bien'
WHEN note >= 50 THEN 'Passable'
ELSE 'Échec'
END AS evaluation;
END //
EXECUTION :
SET @p0='80'; CALL `evaluer_note`(@p0);

SQUALLI MED 3
SET @p1='33'; CALL `evaluer_note`(@p1);

5. Les insructons iérats (Boucle)


En MySQL, il n'y a pas de boucle FOR direcemen comme dans d'aures langages de programmaon, mais
vous pouvez uliser les boucles WHILE, REPEAT, e LOOP dans des procédures sockées ou des oncons pour
exécuer des insrucons répéées.
5.1. Boucle WHILE
La boucle WHILE répèe les insrucons an qu'une condion es vraie. Voici un exemple de procédure
ulisan une boucle WHILE pour acher les nombres de 1 à 5.
Exemple1 : Ulisaon de la boucle WHILE
DELIMITER //

CREATE PROCEDURE boucle_while()


BEGIN
DECLARE i INT DEFAULT 1; -- Déclaration et initialisation de la variable

WHILE i <= 5 DO
SELECT CONCAT('i = ', i); -- Affiche la valeur de i
SET i = i + 1; -- Incrémentation de i
END WHILE;
END //

DELIMITER ;

5.2. Boucle REPEAT


La boucle REPEAT onconne de manière similaire à WHILE, mais la condion es vériée à la fn de chaque
iéraon (donc la boucle s'exécue au moins une ois).
Exemple : Utlisaton de la boucle REPEAT
DELIMITER //

CREATE PROCEDURE boucle_repeat()


BEGIN
DECLARE i INT DEFAULT 1; -- Initialisation de la variable

REPEAT
SELECT CONCAT('i = ', i); -- Affiche la valeur de i
SET i = i + 1; -- Incrémente la variable i
UNTIL i > 5 -- Condition d'arrêt : quand i dépasse 5
END REPEAT;
END //

DELIMITER ;

SQUALLI MED 4
5.3. Boucle LOOP
La boucle LOOP es une srucure de boucle générale dans MySQL, qui connue jusqu'à ce qu'une commande
explicie LEAVE soi exécuée.
Exemple : Utlisaton de la boucle LOOP
DELIMITER //

CREATE PROCEDURE boucle_loop()


BEGIN
DECLARE i INT DEFAULT 1; -- Initialisation de la variable

boucle: LOOP
IF i > 5 THEN -- Condition d'arrêt de la boucle
LEAVE boucle;
END IF;

SELECT CONCAT('i = ', i); -- Affiche la valeur de i


SET i = i + 1; -- Incrémentation de la variable i
END LOOP;
END //

DELIMITER ;

6. Le ypes de paramères
En MySQL, une procédure peu avoir diérens ypes de paramères qui déerminen commen les données
son passées à la procédure e commen elles son manipulées. Les rois principaux ypes de paramères son :
1. IN : Paramère d'enrée. Il passe une valeur à la procédure, mais cete valeur ne peu pas êre modiée
à l'inérieur de la procédure.
2. OUT : Paramère de sore. Il perme à la procédure de renvoyer une valeur modiée.
3. INOUT : Paramère d'enrée e de sore. Il passe une valeur à la procédure, mais la procédure peu
égalemen la modier e la renvoyer.

1. Paramère IN
Le paramère IN es ulisé pour ournir des valeurs à une procédure. Ces valeurs ne peuven pas êre
modiées dans la procédure.
Exemple avec IN
Supposons que nous ayons une able éudiane, e nous voulons créer une procédure qui ache les
inormaons d'un éudian en oncon de son id.

SQUALLI MED 5
DELIMITER //

CREATE PROCEDURE afficher_etudiant(IN etudiant_id INT)


BEGIN
SELECT nom, age, note
FROM etudiants
WHERE id = etudiant_id;
END //

DELIMITER ;

SET @p0='2'; CALL `afficher_etudiant`(@p0);

2. Paramère OUT
Le paramère OUT perme à une procédure de renvoyer une valeur. Conrairemen à IN, vous ne passez pas de
valeur au paramère lors de l'appel, mais vous pouvez récupérer une valeur à la n de l'exécuon de la
procédure.
Exemple avec OUT
Créons une procédure qui reourne la noe d'un éudian en oncon de son id.
DELIMITER //

CREATE PROCEDURE obtenir_note(IN etudiant_id INT, OUT etudiant_note DECIMAL(5,2))


BEGIN
SELECT note INTO etudiant_note
FROM etudiants
WHERE id = etudiant_id;
END //

DELIMITER ;

EXECUTION:
SET @p0='2'; SET @p1=''; CALL `obtenir_note`(@p0, @p1);
SELECT @p1 AS `etudiant_note`;

3. Paramère INOUT
Le paramère INOUT agi à la ois comme un paramère d'enrée e un paramère de sore. Vous passez une
valeur à la procédure e la procédure peu modier cete valeur e la renvoyer.
Exemple avec INOUT
Créons une procédure qui augmene la noe d'un éudian de 10%, puis reourne la nouvelle noe.

SQUALLI MED 6
DELIMITER //

CREATE PROCEDURE augmenter_note(INOUT etudiant_note DECIMAL(5,2))


BEGIN
SET etudiant_note = etudiant_note * 1.10;
END //

DELIMITER ;

EXECUTION :
SET @p0='10'; CALL `augmenter_note`(@p0);
SELECT @p0 AS `etudiant_note`;

7. Les Fonctons
En MySQL, les oncons son des blocs de code réulisables qui prennen des argumens, exécuen une série
d'insrucons, e reournen une valeur. Conrairemen aux procédures, les oncons doiven reourner une
valeur e elles peuven êre ulisées direcemen dans des requêes SQL, comme dans les clauses SELECT,
WHERE, ou ORDER BY.
Srucure d'une Foncon en MySQL
Voici la synaxe générale pour créer une oncon en MySQL :
CREATE FUNCTION nom_de_la_fonction (paramètre1 TYPE, paramètre2 TYPE, ...)
RETURNS TYPE
BEGIN
-- corps de la fonction
RETURN valeur;
END;

7.1. Exemple simple : Foncton pour ajouer deux nombres


Créons une oncon qui prend deux nombres e reourne leur somme.
DELIMITER //

CREATE FUNCTION additionner_deux_nombres(a INT, b INT)


RETURNS INT
BEGIN
RETURN a + b;
END //

DELIMITER ;

EXECUTION:
SELECT additionner_deux_nombres(10, 20) AS somme;

SQUALLI MED 7
7.2. Exemple : Foncton pour calculer une moyenne
Cete oncon calcule la moyenne de deux nombres.
DELIMITER //
CREATE FUNCTION moyenne_deux_nombres(a DECIMAL(5,2), b DECIMAL(5,2))
RETURNS DECIMAL(5,2)
BEGIN
RETURN (a + b) / 2;
END //
DELIMITER ;
EXECUTION :
SELECT moyenne_deux_nombres(75.5, 88.0) AS moyenne;

7.3. Exemple : Foncton pour récupérer un éudian par son ID


Imaginons que vous ayez une able eudians (comme dans les exemples précédens) e que vous souhaiez
récupérer le nom d'un éudian en oncon de son ID.
Créaton de la able eudians pour l'exemple :
CREATE TABLE etudiants (
id INT AUTO_INCREMENT PRIMARY KEY,
nom VARCHAR(100) NOT NULL,
age INT NOT NULL,
note DECIMAL(5,2) NOT NULL
);

INSERT INTO etudiants (nom, age, note)


VALUES
('Alice Dupont', 20, 85.50),
('Bob Martin', 22, 78.75),
('Charlie Durand', 19, 92.00),
('Diane Bernard', 21, 45.00);

DELIMITER //
CREATE FUNCTION obtenir_nom_etudiant(etudiant_id INT)
RETURNS VARCHAR(100)
BEGIN
DECLARE nom_etudiant VARCHAR(100);

SELECT nom INTO nom_etudiant


FROM etudiants
WHERE id = etudiant_id;

RETURN nom_etudiant;
END //
DELIMITER ;
EXECUTION:
SELECT obtenir_nom_etudiant(1) AS nom;

SQUALLI MED 8
7.4. Exemple : Foncton pour augmener la noe d'un éudian
Voici une oncon qui prend la noe acuelle d'un éudian e l'augmene de 10%.
DELIMITER //

CREATE FUNCTION augmenter_note(note_actuelle DECIMAL(5,2))


RETURNS DECIMAL(5,2)
BEGIN
RETURN note_actuelle * 1.10;
END //

DELIMITER ;

EXECUTION:
SELECT augmenter_note(75.50) AS nouvelle_note;

7.5. Exemple : Foncton pour vérifer si une noe es valide


Cete oncon vérie si une noe es valide (enre 0 e 100).
DELIMITER //

CREATE FUNCTION note_valide(note DECIMAL(5,2))


RETURNS BOOLEAN
BEGIN
IF note >= 0 AND note <= 100 THEN
RETURN TRUE;
ELSE
RETURN FALSE;
END IF;
END //

DELIMITER ;

EXECUTION :
SELECT note_valide(85.50) AS est_valide;

7.6. La déclaraton inormatve


Elle peu prendre l’une des valeurs :

1. DETERMINISTIC / NOT DETERMINISTIC :


o DETERMINISTIC : Indique que la oncon renverra oujours le même résula lorsqu'elle es
appelée avec les mêmes argumens.
o NOT DETERMINISTIC : Indique que la oncon pourrai reourner des résulas diérens pour
les mêmes argumens, par exemple si elle ulise une oncon non déerminise comme RAND()
ou NOW().
2. READS SQL DATA :
o Indique que la oncon li des données SQL (via des requêes SELECT par exemple) mais ne
modie pas la base de données.
SQUALLI MED 9
3. MODIFIES SQL DATA :
o Indique que la oncon peu modier la base de données (par exemple en ulisan INSERT,
UPDATE, DELETE, ec.).
4. CONTAINS SQL :
o Indique que la oncon conen des insrucons SQL, mais ne li ni ne modie les données de
la base (cela peu inclure des requêes qui n’ineragissen pas direcemen avec les données,
comme SET).

Exemples pour chaque cas :

1. Foncton DETERMINISTIC
Une oncon déerminise reourne oujours le même résula pour les mêmes argumens.

Exemple :

DELIMITER //

CREATE FUNCTION ajouter_cinq(valeur INT)


RETURNS INT
DETERMINISTIC
BEGIN
RETURN valeur + 5;
END //

DELIMITER ;

Cete oncon es DETERMINISTIC parce que pour un même argumen, elle renverra oujours le même
résula. Par exemple, si vous passez 10 à cete oncon, elle reournera oujours 15.

2. Foncton NOT DETERMINISTIC


Si la oncon ulise une oncon comme RAND() ou NOW(), elle sera considérée comme NOT
DETERMINISTIC.

Exemple :

DELIMITER //

CREATE FUNCTION obtenir_nombre_aleatoire()


RETURNS DECIMAL(5,2)
NOT DETERMINISTIC
BEGIN
RETURN RAND();
END //

DELIMITER ;

SELECT obtenir_nombre_aleatoire()

Cete oncon es NOT DETERMINISTIC parce que la oncon RAND() reourne un nombre aléaoire à chaque
appel, même si les argumens son les mêmes.

SQUALLI MED 10
3. Foncton READS SQL DATA
Une oncon qui li les données d'une able sans les modier doi êre marquée comme READS SQL DATA.

Exemple :

DELIMITER //
CREATE FUNCTION obtenir_nom_etudiant1(etudiant_id INT)
RETURNS VARCHAR(100)
READS SQL DATA
BEGIN
DECLARE nom_etudiant VARCHAR(100);

SELECT nom INTO nom_etudiant


FROM etudiants
WHERE id = etudiant_id;

RETURN nom_etudiant;
END //
DELIMITER ;

select obtenir_nom_etudiant1(2) nom_etutiant;

Cete oncon li les données de la able eudians (via SELECT), mais ne modie pas la base de données. Elle
es donc marquée comme READS SQL DATA.

4. Foncton MODIFIES SQL DATA


Si la oncon eecue une modicaon sur la base de données, elle doi êre marquée comme :
MODIFIES SQL DATA.

Exemple :

DELIMITER //
CREATE FUNCTION augmenter_note_etudiant(etudiant_id INT, pourcentage
DECIMAL(5,2))
RETURNS BOOLEAN
MODIFIES SQL DATA
BEGIN
UPDATE etudiants
SET note = note * (1 + pourcentage / 100)
WHERE id = etudiant_id;

RETURN TRUE;
END //
DELIMITER ;

SELECT augmenter_note_etudiant(1,20);

Cete oncon modie la base de données en metan à jour la colonne noe de la able eudians. Elle es
donc marquée comme MODIFIES SQL DATA.

SQUALLI MED 11
5. Foncton CONTAINS SQL
Si une oncon conen des insrucons SQL mais n'ineragi pas avec les données de la base (elle ne li ni ne
modie des données), elle es marquée comme CONTAINS SQL.

Exemple :

DELIMITER //
CREATE FUNCTION multiplier_par_deux(valeur INT)
RETURNS INT
CONTAINS SQL
BEGIN
RETURN valeur * 2;
END //
DELIMITER ;

select multiplier_par_deux(15);

Cete oncon conen du SQL (dans ce cas, elle ulise une simple opéraon arihméque), mais elle ne ai ni
SELECT, ni INSERT, ni UPDATE. Elle es donc marquée comme CONTAINS SQL.

Synhèse des déclaratons inormatves :

Déclaraton Explicaton
DETERMINISTIC Reourne oujours le même résula pour les mêmes argumens.
NOT Peu reourner un résula diéren pour les mêmes argumens (ulise des oncons
DETERMINISTIC non déerminises comme RAND(), NOW(), ec.).
READS SQL DATA Li des données de la base sans les modier.
MODIFIES SQL
Modie les données de la base de données.
DATA
Conen des insrucons SQL mais n'ineragi pas direcemen avec les données (ne
CONTAINS SQL
ai ni SELECT, ni INSERT, ni UPDATE, ec.).

Ces déclaraons aiden MySQL à opmiser l'exécuon des oncons, à garanr l'inégrié des ransacons, e
à améliorer la geson des requêes.

SQUALLI MED 12

Vous aimerez peut-être aussi