Vous êtes sur la page 1sur 11

Contraintes d’intégrité : in the creation

create table produit3 (id3 int unique auto_increment,marque varchar(10),prix float, idc int,
constraint fk_cat2 foreign key (idc) references categorie2(idcat) on update cascade on delete set
null);

Contraintes d’intégrité : if you want to add it

Ajouter clé primaire dans la table catégorie :

MariaDB [ecole]> alter table categorie modify id_cat int primary key;

Rendre le champ id_cat indexé :

MariaDB [ecole]> alter table categorie add index (id_cat);

Supprimer les données depuis la table produit :

MariaDB [ecole]> delete from produit;

Ajouter la contrainte d’intégrité Foreign key dans la table produit :

MariaDB [ecole]> alter table produit add constraint key_cat foreign key (id_cat) references
categorie(id_cat);

Modification d’une contrainte Foreign Key :

La modification d’une contrainte Foreign Key passe par la suppression et recréation.

Vérification de la configuration actuelle :

MariaDB [ecole]> show create table produit2;

Le résultat de cette requête nous indique tous les champs et les contraintes créées.

Suppression de la contrainte existante :

MariaDB [ecole]> Alter table produit2 drop constraint fk_cat ; | pour Foreign key : Alter table
produit2 drop foreign key fk_cat;

Redéfinition de la contrainte avec les nouveaux paramètres :

MariaDB [ecole]> alter table produit2 add constraint fk_cat2 foreign key(idc) references
categorie2(idcat) on delete restrict on update cascade;

Les fonctions prédéfinies du système (caractère,date,numérique)

1- Fonctions chaines de caractères :


 La fonction Concat :

Fonction permettant de combiner les informations de plusieurs champs en une seule chaine.

Exemple : select concat(‘’L’employé ‘’, Nom , ‘’ ‘’,prenom, ‘’ touche ‘’, salaire) from emp ;

 La fonction Concat_ws :

Même principe que contact, c’est juste que ws permet de mettre un caractère séparateur prédéfini :

Exemple : select concat_ws(‘@’,nom,prenom) from employe ;


 La fonction SUBSTRING:

Substring permet de couper une chaine de caractères et de renvoyer les caractères qui nous
intéresse :

Exemple : select substring(nom,3) from employes;

Renvoi les caractères à partir du 3ème caractère du nom.

Exemple 2 : select substring(nom,-3) from employes;

Renvoi les caractères à partir du 3éme caractère du nom à compter de la fin du nom.

Exemple 3 : select substring(nom,2,3) from employes;

Renvoi 3 caractères à partir du 2ème caractère de la chaine.

Exercices :

MariaDB [ecole]> select concat(substring(prenom,1,1),".",nom,"@Estem.ma") from employes where


id = 1;

+-------------------------------------------------------------------------------+

| concat(substring(prenom,1,1),".",nom,"@Estem.ma") |

+-------------------------------------------------------------------------------+

| W.ROUCADI@Estem.ma |

+-------------------------------------------------------------------------------+

 La fonction Lenght ou char_length :

Cette fonction permet de renvoyer la longueur d’une chaine de caractère.

Exemple : select nom, lenght(nom) from employes ;

 La fonction Upper et Lower :

Permettant de mettre en majuscule ou en minuscule une chaine.

Select upper(nom),lower(prenom) from employes;

 La fonction Locate :

Permet de localiser la position d’un caractère dans une chaine.

select locate ("a",nom) from etudiant;

 La fonction Replace :

Remplace une chaine par une autre :

Select Nom, replace(nom,’a’,’b’) from employes;


Exercice 2:

On veut afficher “Long” quand le nom de l’employé dépasse 5 caractères et ‘’Court’’ quand c’est le
contraire.

Avec Case :

MariaDB [ecole]> select nom,case when length(nom) >= 5 then "Long" when length(nom) < 5 then
"Court" END as longueur from etudiant;

OR select nom,case when length(nom) >= 5 then "Long" else "Court" END as longueur from
etudiant;

+---------+--------------+

| nom | longueur |

+---------+--------------+

| Roucadi | Long |

| MAN | Court |

+---------+-------------+

Avec IF :

select nom,if(length(nom) >= 5,"Long","Court") as longueur from etudiant;

1- Fonctions de Date :

 La fonction Now() :

Permet de renvoyer la date et l’heure système.

 La fonction Curdate() :

Permet de renvoyer la date système.

 La fonction Curtime() :

Permet de renvoyer l’heure système.

Exemple : select now(),curdate(),curtime();

 La fonction Day() : Le numéro du jour : select day(now()) ;


 La fonction Dayname() : Le nom du jour : select dayname(now()) ;
 La fonction Month() : Le numéro du mois : select month(now()) ;
 La fonction Monthname() : Le nom du mois : select monthname(now()) ;
 La fonction Year() : l’année ; select year(now()) ;
 La fonction hour() : l’heure : select hour(now()) ;
 La fonction minute() : la minute : select minute(now()) ;
 La fonction second() : la seconde : select second(now()) ;
 La fonction AddDate() : Ajouter un nombre de à une date : select adddate(now(),50) ;
 La fonction Date_ADD : fonction permettant d’ajouter une durée à une date mais avec
une precision supérieur à ADDDATE
Exemple : select Date_ADD(now(),interval 1 week);
 La fonction Date_Sub : permet de retrancher une durée d’une date.
Exemple : select Date_Sub(now(),interval 1 week);
 La fonction Date_Diff : permet de retourner la différence entre deux date
Exemple : select datediff(now(),’2022-03-01’);
 La fonction Date_format : permet de retourner une date selon un format souhaité
Exemple : select Date_format(now(),’%W%M%e%Y’);
Tableau des options utilisées avec Date_format :

%a Les jours de la semaine sur trois lettres


%b Les mois en 3 lettres : jan/fev
%c Les mois en numérique 1,2 … 12 : without leading zeros
%d Les jours en numérique 1… 31 sur with leading zeros / e% : without leading
zeros
%W Les jours en caractères : Lundi, mardi …
%M Les mois en caractères : Janvier…
%m Les mois en numérique : with leading zeros
%y L’année sur deux chiffres 22,23…
%Y L’année sur 4 chiffres 2023
%H L’heure en mode 24
%h L’heure en mode AM PM
%i Les minutes
%s Les secondes

Exercice :

 Ecrivez une requête qui permet de renvoyer le nombre de jour que vous avez vécu ?
Select datediff(now(),’1992-04-08’);
 Combien de mois,de semaine, et d’heure avez-vous vécu ?
Select TimeStampDiff(month,’1992-04-08’,now()), TimeStampDiff(week,’1992-04-
08’,now()),TimeStampDiff(hour,’1992-04-08’,now());
 Afficher au format Samedi 13 Decembre 2023 la date de votre premier anniversaire.
Select date_format(date_add(‘1992-04-08’,interval 1 year),’%W%d%M%Y’)
 Même chose que la question 3, on veut connaitre la date de votre 100éme anniversaire.
Select date_format(date_add(‘1992-04-08’,interval 100 year),’%W%d%M%Y’)

2- Fonctions numériques :

Les fonctions numériques sont créées pour nous aider à faire des traitements sur des champs
numériques avec un minimum d’effort.

 Count : permet de renvoyer le nombre de lignes que nous avons dans une table ou une
sélection.
Exemple 1 : Renvoyer le nombre de produit que nous avons en stock
Select count(*) from produit ;
Exemple 2 : Renvoyer le nombre de marque hp que nous avons en stock
Select count(*) from produit where marque = ‘hp’;
 Max/Min : Renvoie la valeur max ou min d’un champ numérique
Exemple 1: select Max(prix) from produit;
Exemple 2: select Min(prix) from produit;

 Sum : calcul la somme des valeurs d’un champ numérique


Exemple : select sum(prix) from produit;

 AVG : calcul la moyenne des valeurs d’un champ numérique :


Exemple : select avg(prix) from produit;

 Groupement :

L’utilisation des fonctions sera plus significative quand on arrive à grouper les résultats en fonction
d’un ou plusieurs critères.

Exemple 1 : On veut calculer la somme des salaires en fonction des services :

select id_depart,sum(salaire) from employes group by id_depart;

Exemple 2 : On veut calculer la somme des salaires par services et par type de contrat (cdi, cdd...) :

select id_depart,id_manager,sum(salaire) from employes group by id_depart,id_manager;

30/12/2023

- Filtrage des résultats des fonctions de groupement

Ce filtre permettra de cibler les valeurs souhaitées après calcul de la somme, moyenne ,etc…

Exemple : on veut afficher la somme des salaires par services, on veut garder uniquement les
supérieures à 10000.

- Pour cela nous utiliserons Having


Select sum(salaire), code_service from employes group by code_service Having
sum(salaire) > 10000

- Différence entre Where et Having

Where c’est pour un filtrage avant calcul et groupement

Having c’est pour un filtrage après calcul et groupement.

Exemple :

On veut calculer la somme des salaires par service, ce calcul doit inclure seulement ceux qui ont un
salaire supérieur à 3000.

Select sum(salaire), id_depart from employes where salaire > 3000 group by id_depart;

Exemple : On veut calculer la somme des salaires par service, ce calcul doit inclure uniquement ceux
qui ont un salaire supérieur à 3000 et afficher uniquement les sommes inférieures à 10000.

Select sum(salaire), id_depart from employes where salaire > 3000 group by id_depart
having sum(salaire) < 10000;
- Fonctions de calcul et valeurs Nulle

Exemple : Dans votre table des employes, affecter à l’un de vos salariés un salaire null

Update employes set salaire = null where id = 1;

Calculer ensuite la Moyenne et la somme , qu’est que vous remarquez ?

Calculer la moyenne en utilisant ifnull

- Le calcul de la somme n’est pas impacté par les valeurs nulles, le système les traites
automatiquement.
- Mais pour la moyenne le résultat est erroné, donc, il faut utiliser ifnull.

Select avg(ifnull(salaire,0)) from employes.

Correction DS:
Stocked procedure :

MariaDB [ecole]> delimiter //

MariaDB [ecole]> create procedure get_employes() begin select * from employes; end //

Query OK, 0 rows affected (0.004 sec)

MariaDB [ecole]> delimiter ;

MariaDB [ecole]> call get_employes();

- Procedure avec variable interne

delimiter //

create procedure ps1(in code int)

Begin

Declare nb_lignes int default 0;

select count(*) into nb_lignes from produit where id_cat = code;

select nb_lignes;

END//

delimiter ;

call ps(1);

- Procédure avec paramètre d’entrée et paramètre de sortie

delimiter //

create procedure ps(in code int,out p2 int) Begin select count(*) into p2 from produit where id_cat =
code; END//

delimiter ;

call ps(1,@nbr);

select @nbr;

Function :

MariaDB [ecole]> delimiter //

MariaDB [ecole]> create function get_salairenet(salaire_brut decimal(10,2),prime decimal(10,2))


returns decimal(10,2) begin declare salaire_net decimal(10,2); set salaire_net = salaire_brut + prime;
return salaire_net; end //

Query OK, 0 rows affected (0.006 sec)


MariaDB [ecole]> delimiter ;

MariaDB [ecole]> select get_salairenet(5000,1200) as salaire_net;

Vous aimerez peut-être aussi