Académique Documents
Professionnel Documents
Culture Documents
I- Les fonctions :
1-Définition :
Une fonction stockée est une collection d’instructions Sql stockée sous un nom au niveau de la base de
données permettant de retourner une valeur. On distingue deux types de fonctions à savoir : les fonctions
systèmes et les fonctions définies par les utilisateurs.
2- Les fonctions systèmes :
Elles sont déjà prédéfinies par le système ceci lors de l’installation du SGBD. Elles sont découpées en sous-
groupe. Nous avons examiné quelques sous-groupes dans le cadre de ce cours.
2-1 Les fonctions d’agrégation statistiques
Les fonctions d’agrégation sont des fonctions idéales pour effectuer quelques statistiques de bases sur des
tables. Les principales fonctions sont les suivantes :
AVG() pour calculer la moyenne sur un ensemble d’enregistrement
COUNT() pour compter le nombre d’enregistrement sur une table ou une colonne distincte
MAX() pour récupérer la valeur maximum d’une colonne sur un ensemble de ligne. Cela s’applique à la
fois pour des données numériques ou alphanumérique
MIN() pour récupérer la valeur minimum de la même manière que MAX()
SUM() pour calculer la somme sur un ensemble d’enregistrement
curtime() / current_time(): Retourne l'heure courante . Exemple : select curtime() ou Select current_time() ;
DATEDIFF(date1,date2) : retourne le nombre de jours entre la date1 et la date2 . Date1 et date2 sont des
expressions de type DATE ou DATETIME . Seule la partie DATE est utilisée dans le calcul.
Exemples : select datediff(‘2023-01-10’,’2023-01-01’) ; // Renvoie 9 comme différence de jours ;
select datediff(‘2023-01-10’,’2022-01-01’) ; // Renvoie 374 comme différence de jours ;
SELECT DATE_ADD('2023-01-01 23:59:59',INTERVAL 1 minute); // Retourne Comme résultat 2023-01-02 00 :00 :59
SELECT DATE_SUB('2023-01-01 23:59:59',INTERVAL 1 minute); // Retourne comme résultat 2023-01-01 23:58 :59
SELECT DATE_ADD('2023-01-01 23:59:59',INTERVAL 1 day); // Retourne Comme résultat 2023-01-02 23 :59 :59
SELECT DATE_SUB('2023-01-01 23:59:59',INTERVAL 1 day); // Retourne Comme résultat 2022-12-31 23:59:59
SELECT DATE_ADD('2023-01-01 23:59:59',INTERVAL 1 week); // Retourne Comme résultat 2023-01-08 23 :59 :59
SELECT DATE_SUB('2023-01-01 23:59:59',INTERVAL 1 week); // Retourne Comme résultat 2022-12-25 23:59:59
SELECT DATE_ADD('2023-01-01 23:59:59',INTERVAL 1 month); // Retourne Comme résultat 2023-02-01 23 :59 :59
SELECT DATE_SUB('2023-01-01 23:59:59',INTERVAL 1 month); // Retourne Comme résultat 2022-12-01 23:59:59
- La fonction Dateadd fait l’ajout d’une date sur la base d’un intervalle, la syntaxe est :
DATEADD (param_interval, number , date_depart)
Exemples :
select Getdate() as DateDuJour; --- Renvoie la date et l'heure du jour en SQL Server;
select NOW() as DateDuJour; --- Renvoie la date et l'heure du jour avec MySQL;
Select Day(Getdate()) as Jour; --- Renvoie le jour en cours en chiffre
Select MONTH(Getdate()) as MoisEnCours;-- Renvoie le mois encours en chiffre;
Select Year(Getdate()) as MoisEnCours;-- Renvoie l'année encours en chiffre;
--- La requête ci-dessous renvoie le résultat se trouvant dans la deuxième ligne du tableau --
SELECT DATEDIFF(minute, '2023-01-03 23:59:59', '2023-01-04 00:59:59') as DifEnMinute,
DATEDIFF(second, '2023-01-03 23:59:59', '2023-01-04 00:59:59') as DifEnSeconde,
DATEDIFF(hour, '2023-01-03 23:59:59', '2023-01-04 05:59:59') as DifEnHeure,
DATEDIFF(day, '2023-01-03', '2023-01-10') as DifEnJour,
DATEDIFF(week, '2023-01-03', '2023-01-10') as DifEnSemaine,
DATEDIFF(MONTH, '2022-12-03', '2023-01-10') as DifEnMois,
DATEDIFF(year, '2022-12-03', '2023-01-10') as DifEnAnnee;
--- La requête ci-dessous renvoie le résultat se trouvant dans la deuxième ligne du tableau --
SELECT '2023-01-10' as DateDeDepart,
DATEADD(minute,1,'2023-01-10') as AjoutDuneMinute,
DATEADD(hour,1,'2023-01-10') as AjoutDuneHeure,
DATEADD(day,1,'2023-01-10') as AjoutDunJour,
DATEADD(week,1,'2023-01-10') as AjoutUneSemaine,
DATEADD(month,1,'2023-01-10') as AjoutDunMois,
DATEADD(year,1,'2023-01-10') as AjoutDuneAnnee ;
3
- la fonction ci-dessous renvoie le nbre des Employés - - la fonction ci-dessous renvoie le nbre des enfants -
Create FUNCTION F_TotalEmploye() Returns integer Create FUNCTION F_TotalEnfants() Returns integer
As As
Begin Begin
Return ( Select count(*) From T_Employe) ; Return ( Select count(*) From T_Enfant) ;
End End
//*** Cette fonction renvoie le nombre total des enfants d’un Employé ***//
Create FUNCTION F_TotalDesEnfants(@MatriculeEmp varchar(6)) Returns integer
As
Begin
Return ( Select count(*) From T_EnfantEmploye where MatriculeEmp =@MatriculeEmp ) ;
End
DELIMITER |
Create FUNCTION F_TotalDesEnfants(NumMatricule varchar(6)) Returns integer
Begin
Return ( Select count(*) From T_EnfantEmploye where MatriculeEmp = NumMatricule) ;
End |
DELIMITER ;
4
II- Les procédures stockées:
1- Définition :
Une procédure stockée est une collection précompilée d'instructions SQL stockée sous un nom et traitée
comme une unité.
Une procédure est également un objet de base de données, regroupant un ensemble de commandes qui
effectuent une tâche particulière le plus souvent, récurrente.
A la différence d’une fonction, une procédure stockée ne renvoie pas de valeur.
---- La procédure ci-dessous permettra l’insertion des données dans la table T_Employe ----
CREATE PROCEDURE P_AjoutEmploye (@MatriculeEmp varchar(6),@NomsEmp varchar(40),
@PrenomsEmp varchar(40),@DateNaissEmp date, @DateEmbaucheEmp date)
AS
BEGIN
INSERT INTO T_Employe(MatriculeEmp, NomsEmp,PrenomsEmp,DateNaissEmp,DateEmbaucheEmp)
VALUES (@MatriculeEmp,@NomsEmp,@PrenomsEmp,@DateNaissEmp, @DateEmbaucheEmp) ;
END
---- La procédure ci-dessous permettras l’affichage des enfants d’un employé ----
CREATE PROCEDURE P_AfficheEnfantSalarie (@MatriculeEmp varchar(6))
AS
BEGIN
Select Noms, Prenoms, Age
From T_EnfantEmploye where MatriculeEmp=@MatriculeEmp;
END
5
Les différents modes de transmission des paramètres en SQL :
Dans MySQL, un paramètre a l’un des trois modes suivants: IN, OUT ou INOUT.
Paramètre in :
IN est le mode par défaut. la valeur d’un paramètre IN est protégée. Cela signifie que même si la valeur du
paramètre IN est modifiée dans la procédure stockée, sa valeur d’origine est maintenue à la fin de la
procédure stockée. En d’autres termes, la procédure stockée ne fonctionne que sur la copie du paramètre
IN.
Paramètres OUT
La valeur d’un paramètre OUT peut être modifiée dans la procédure stockée et sa nouvelle valeur est
renvoyée au programme appelant. Notez que la procédure stockée ne peut pas accéder à la valeur initiale
du paramètre OUT au démarrage.
Paramètres INOUT
Un paramètre INOUT est une combinaison de paramètres IN et OUT. Cela signifie que le programme
appelant peut passer l’argument et que la procédure stockée peut modifier le paramètre INOUT et renvoyer
la nouvelle valeur au programme appelant.
Exemple1 : ---- La procédure ci-dessous permettra l’affichage de tous les employés ----
DELIMITER |
CREATE PROCEDURE P_AfficheEmploye()
BEGIN
Select * from T_Employe ;
END |
Delimiter ;
Exemple2 : ---- La procédure ci-dessous permettra l’insertion des données dans la table T_Employe ----
DELIMITER |
CREATE PROCEDURE P_AjoutEmploye ( in pMatriculeEmp varchar(6), in pNomsEmp varchar(40),
In pPrenomsEmp varchar(40),in pDateNaissEmp date, in pDateEmbaucheEmp date)
AS
BEGIN
INSERT INTO T_Employe(MatriculeEmp, NomsEmp,PrenomsEmp,DateNaissEmp,DateEmbaucheEmp)
VALUES (pMatriculeEmp,pNomsEmp,pPrenomsEmp,pDateNaissEmp, pDateEmbaucheEmp) ;
End |
Delimiter ;
Exemple3 : ---- La procédure ci-dessous permettra l’insertion des données dans la table T_EnfantEmploye ----
DELIMITER |
CREATE PROCEDURE P_AjoutEnfant(in pNomsEnf varchar(40), in pPrenomsEnf varchar(40),in pAge integer,
in pMatriculeEmp varchar(40))
AS
BEGIN
INSERT INTO T_EnfantEmploye(Noms,Prenoms,Age,MatriculeEmp)
VALUES (pNomsEnf, pPrenomsEnf, pAge, pMatriculeEmp) ;
End |
Delimiter ;
Exemple4 : Procédure permettant de renvoyer le nombre des Employés enregistrés dans la table T_Employe
DELIMITER |
CREATE PROCEDURE P_GetNbreEmploye(out NbreEmploye integer)
Begin
Select count(*)
into NbreEmploye
from T_Employe;
End |
Delimiter ;
6
Exemple5 : Procédure permettant de renvoyer le nombre des enfants d’un employé
DELIMITER |
CREATE PROCEDURE P_GetNbreEnfEmp(in pMatriculeEmp varchar(6),out NbrEnf integer)
Begin
Select count(*)
into NbrEnf
from T_EnfantEmploye
where MatriculeEmp = pMatriculeEmp;
End |
Delimiter ;
CALL P_GetNbreEmploye(@NbEmp);
Select @NbEmp as [Nombre des employés disponible dans la base de données];
CALL P_GetNbreEnfEmp('EMP001',@NbEnf) ;
Select @NbEnf as [Nombre des enfant de l’employé EMP001];
4- Modification d’une procédure stockée :
4-1 Syntaxe SQL Server
Alter Proc[edure] Nom_Proc ( [ @Param1 as type1, @Param2 as type2,………., @Paramn typen])
As
Begin
Intructions SQL
End
Exemple:
On ajoute la colonne sexe de Employe, voici à quoi va correspondre la nouvelle procedure.
---- Ci-dessous la procédure modifiée qui permettra l’insertion des données dans la table T_Employe en tenant
compte de la nouvelle colonne----
Alter PROCEDURE P_AjoutEmploye (@MatriculeEmp varchar(6),@NomsEmp varchar(40),
@PrenomsEmp varchar(40),@DateNaissEmp date, @DateEmbaucheEmp date,@Sexe varchar(10))
AS
BEGIN
INSERT INTO T_Employe(MatriculeEmp, NomsEmp,PrenomsEmp,DateNaissEmp,DateEmbaucheEmp,Sexe)
VALUES (@MatriculeEmp,@NomsEmp,@PrenomsEmp,@DateNaissEmp, @DateEmbaucheEmp,@Sexe) ;
END
7
4-2 Syntaxe My SQL
DELIMITER SymboleDuDelimiter
Alter Procedure NomDeLaProcedure([ Param1 type1, Param2 type2,………., Paramn typen]))
Begin
Instructions SQL
End SymboleDuDelimiter
DELIMITER ;
Exemple:
On ajoute la colonne sexe de Employe, voici à quoi va correspondre la nouvelle procedure.
---- Ci-dessous la procédure modifiée qui permettra l’insertion des données dans la table T_Employe en tenant
compte de la nouvelle colonne----
DELIMITER |
Alter PROCEDURE P_AjoutEmploye ( in pMatriculeEmp varchar(6), in pNomsEmp varchar(40),
In pPrenomsEmp varchar(40),in pDateNaissEmp date, in pDateEmbaucheEmp date, in pSexe varchar(10))
AS
BEGIN
INSERT INTO T_Employe(MatriculeEmp, NomsEmp,PrenomsEmp,DateNaissEmp,DateEmbaucheEmp,Sexe)
VALUES (pMatriculeEmp,pNomsEmp,pPrenomsEmp,pDateNaissEmp, pDateEmbaucheEmp,) ;
End |
Delimiter ;
Use NomBDD : permet de préciser sur quelle Print : est une instruction permettant d’afficher
base de données vont porter les instructions qui les données.
suivent. Exemple : Use Master ;
Ex: print @@version ;
GO : c’est un signal donné par le Sql server pour Exec[ute] : est utilisée pour exécuter une
l’exécution des instructions. fonction ou une procédure stockée.
La commande go termine un lot d’instruction.
Ex : use BDTest Ex : Exec getdate() ;
Select * from T_Nomtable
Go;
2- Les éléments de syntaxe :
2-0 : Les commentaires :
Commentaires sur une seule ligne : On utilise une succession des tirets (barre de 6) pour le faire :
Exemple : ---- Votre commentaire ici ----
Commentaires sur plusieurs lignes : ils sont encadrés par la barre oblique suivie du caractère *
Exemple : /**** Début du commentaire
Continuité du commentaire
Fin du commentaire ***/
2-1 : Type de données : Voir les types de données offert par Sql server.
8
2-2 : Les identificateurs :
Ce sont les noms des objets de la base de données (base de données, tables, vues, triggers, procédures stockées,
fonctions, index, contrainte, …). On distingue :
Les identificateurs standards : ils peuvent contenir 1 à 128 caractères, notamment des lettres, des symboles (_,
@,#) et des nombres. La première lettre doit être alphabétique et aucun espace n’est autorisé dans le nom. Ils
ne doivent correspondre à aucun mot-clé du langage T-Sql.
Les identificateurs délimités :
Un identificateur qui ne respecte pas une ou plusieurs des règles de mise en forme des identificateurs standard
doit toujours être délimité. Les délimiteurs sont [ ] et les doubles quotes.
Le symbole @ commence le nom d’une variable locale et le symbole @@ commence le nom d’une variable
système. Le symbole # commence le nom d’une table temporaire.
2-3 Les variables :
Les variables utilisateur :
Une variable est une zone mémoire caractérisée par un type et un nom, et permettant de stocker une valeur
respectant le type. Dans SQL Server, les variables doivent être obligatoirement déclarées avant d’être utilisée.
Syntaxe : DECLARE @Nomvar typevar ;
Affectation d’une variable :
Syntaxe1 : Set @Nomvar= expresion ;
Syntaxe2 : Select @Nomvar=expression ;
Ex 1: voici la déclaration d’une variable nommée Id_Client de type Int :
DECLARE @IdClient int.
L’instruction suivante permet de valoriser cette variable via l’exécution d’une requête scalaire :
SELECT @IdClient = (SELECT Id_Client FROM Motors.dbo.Client WHERE Id_Client=1);
Ex2: Use BDANA3
Declare @EmpID int, @Name char(20)
Set @EmpID=100;
Select @Name=’NKELETELA’;
9
2-6 Instruction Case :
Case Simple :
CASE input_expression
WHEN when_expression THEN result_expression [ ...n ]
[ ELSE else_result_expression ]
END
Exemple:
USE AdventureWorks2013;
GO
SELECT ProductNumber, Category =
CASE ProductLine
WHEN 'R' THEN 'Road'
WHEN 'M' THEN 'Mountain'
WHEN 'T' THEN 'Touring'
WHEN 'S' THEN 'Other sale items'
ELSE 'Not for sale'
END,
Name
FROM Production.Product
ORDER BY ProductNumber;
GO
Case Recherche
CASE
WHEN Boolean_expression THEN result_expression [ ...n ]
[ ELSE else_result_expression ]
END
Exemple :
USE GLA3;
GO
SELECT Matricule, Noms+Prenoms as [Noms et Prénoms], "Mention"=
CASE
WHEN MoyEtu between 10 and 11 THEN 'Passable'
WHEN MoyEtu between 12 and 13 THEN 'Assez bien'
WHEN MoyEtu between 14 and 15 THEN 'Bien'
WHEN MoyEtu between 16 and 17 THEN 'TB'
WHEN MoyEtu between 18 and 19 THEN 'Excellent'
ELSE 'Inssuffisant'
END, Adresse
FROM Etudiant
ORDER BY Mention ;
GO
2-7 La boucle WHILE
L’instruction WHILE est une structure algorithmique permettant d’exécuter un bloc d’instructions de manière
répétitive, en fonction d’une condition.
Exemple : /* recherche de tous les nombres multiples de 13 compris entre 1 à 1000 */
/* version ensembliste (requêtes) */
DECLARE @max int -- boucle d'insertion de 0 à 1000 nbres impaires
SET @max = 1000 DECLARE @i int,@max int
-- table temporaire de stockage des entiers de 1 à SET @i = 0
5000 WHILE @i < @max
CREATE TABLE #n (n int) BEGIN
INSERT INTO #n VALUES (@i)
SET @i = @i + 13
END ;
10
III- Langage de Programmation avec MySQL :
1- La fonction use :
Elle permet de se positionner sur la base de données sur laquelle on veut travailler, ceci pour ne pas de
tromper de base de données lorsqu’on manipule plusieurs bases de données sur son SGBD.
Syntaxe1 : Use NomBDD ;
Exemple :
Use BD_GestionComptesClients;
Select count(*) From T_Client;
On peut également utiliser directement le nom de la base de données suivi du point puis du nom de la
table.
Exemple :
Select count(*) FROM BD_GestionComptesClients.T_Client ;
Exemples :
Pour voir les valeurs actuelles utilisées par un serveur en cours d’exécution, utilisez l’instruction
SHOW VARIABLES //** Renvoie la liste des variables.
Select @@version ; //*** Renvoie la version courante installée sur la machine.
Select @@auto_increment_increment ; // ** Renvoie la valeur de l’auto_increment
11
On peut également consister une variable à partir d’une requête.
Syntaxe 2 : Select @NomVar := expression ;
Exemple :
Select @TotLigne :=(select count(*) from T_Client) ; Set @NumEmp=2 ;
Select * from T_Emprunt
Select @MaxEmprunt :=(select Max(MontantEmprunt) where NumEmprunt=@NumEmp;
from T_Emprunt) ;
CALL aujourdhui_demain () ;
CALL test_portee1() ;
12
Exemple :
DELIMITER // CREATE FUNCTION VerboseCompare (n INT, m
CREATE FUNCTION SimpleCompare(n INT, m INT)
INT) RETURNS VARCHAR(50)
RETURNS VARCHAR(20) BEGIN
BEGIN DECLARE s VARCHAR(50);
DECLARE s VARCHAR(20); IF n = m THEN SET s = 'equals';
IF n > m THEN SET s = '>'; ELSE
ELSEIF n = m THEN SET s = '='; IF n > m THEN SET s = 'greater';
ELSE SET s = '<'; ELSE SET s = 'less';
END IF; END IF;
SET s = CONCAT(n, ' ', s, ' ', m); SET s = CONCAT('is ', s, ' than');
RETURN s; END IF;
END // SET s = CONCAT(n, ' ', s, ' ', m, '.');
DELIMITER ; RETURN s;
END //
DELIMITER ;
Exemple2 :
SELECT NumCli, MontantEmprunt,CodPer, DureeRemboursement,
CASE
WHEN DureeRemboursement between 0 and 9 THEN ' Prêt Court Terme'
WHEN DureeRemboursement between 10 and 120 THEN 'Prêt Moyen Terme'
ELSE 'Prêt Long Terme'
END AS CategoriePret
FROM T_Emprunt ;
13
3-3- La boucle While :
Syntaxe : Exemple :
WHILE condition DO DELIMITER |
Instructions ; CREATE PROCEDURE dowhile()
END WHILE BEGIN
DECLARE v1 INT DEFAULT 5;
WHILE v1 > 0 DO
SET v1 = v1 - 1;
Select v1 as valeuractuelle ;
END WHILE;
END |
DELIMITER ;
14