Merise - SQL - SQL Procedural (MySQL) - TSQL (SQL Server) - PLSQL (Oracle) - NOSQL (MongoDB)
Merise - SQL - SQL Procedural (MySQL) - TSQL (SQL Server) - PLSQL (Oracle) - NOSQL (MongoDB)
Merise - SQL - SQL Procedural (MySQL) - TSQL (SQL Server) - PLSQL (Oracle) - NOSQL
(MongoDB)
1
1. Définition d’un Système :
Un Système : Désigne un ensemble de parties similaires qui participent à une activité commune. C’est
un dispositif formé par la réunion d’éléments analogues.
Combinaison de parties qui se coordonnent pour donner un résultat, de manière à former un ensemble
Tous Système fonctionne en transformant des flux d’entrée en flux de sortie selon des processus plus
ou moins complexe.
a. Système de pilotage :
Définit les missions, les objectifs, organise l’emploi les moyens, contrôle l’exécution des travaux,
Contrôle le système opérant.
Il est relié aux autres systèmes par des flux d’informations internes.
b. Système information :
C’est l’ensemble des ressources humaines, techniques et financières qui fournissent, utilisent,
compilent, traitent et distribuent l’information de l’organisation
c. Système opérant
C’est l’ensemble des moyens humains, matériels, organisationnels qui exécutent les ordres du système
de pilotage.
Il assure le fonctionnement du système global, son activité est contrôlée par le système de pilotage.
2
- Partie Statique: Informations associées aux activités de l’organisation
- Partie Dynamique: manipulation des données, aide à la décision
Le logiciel a besoin d’un plan de conception, C’est pourquoi un logiciel doit avoir une étude préalable,
une méthodologie.
La méthode existant dite : Merise (Méthode d’Etude et de Réalisation Informatique par les Sous-
Ensembles ou pour les Système d’Entreprise).
a. Les informations :
L’information est l’émission ou la réception de signaux qui provoque l’échange et l’animation dans une
organisation.
- Les informations élémentaires : sont des informations dont les valeurs ne peuvent pas
être inventées, elles ne sont pas déductibles d’autres informations, dite atomique non
divisible.
- Les information Calculées : Les informations calculées sont déductibles des informations
élémentaires.
b. Les traitements :
Les opérations peuvent être de deux sortes automatiques ou manuels. Ils sont déclenchés par l’arrivée
d’évènements.
La méthode Merise a comme objectif d’aider, de guider les Ssii (Société de service et d'ingénierie
informatique), dans leurs phases d’analyses, de conception et le développement de l’applicatif.
3
6. Cahier de charge :
Décrit les éléments du projet par une analyse complète des Besoins Fonctionnelles, Opérationnels,
Non Fonctionnelles et Les Contraintes. Il s’agit d’une référence ou bien un document contractuel sur
lequel les développeurs se basent pour concevoir et implémenter une base de données.
Nom de la donnée : Cette cellule recevra une donnée par exemple : Nom client.
Format : Ici sera indiqué le format de la donnée, par exemple : alphabétique, alphanumérique,
numérique, date, logique.
Longueur : La longueur approximative ou exacte de la donnée sera indiquée, par exemple : 30.
Type : Une croix sera inscrite dans la colonne pour indiquer si la donnée est élémentaire ou
calculée.
Règle de calcule : Ici sera indiquée de manière claire la formule ou le calcul nécessaire à appliquer
pour obtenir la donnée.
4
Règle de gestion : Dans cette zone sera indiquée, si nécessaire, la règle de gestion inhérente à la
donnée.
Document : La rubrique document permet de saisir le document dans lequel a été trouvée la
donnée
a. Définition :
Par exemple :
La connaissance de la valeur d’un numéro de client nous permet de connaître sans ambiguïté la valeur
d’un et d’un seul nom de client. Dans la fiche d’adhérent, l’adhérent numéro 1 a pour nom Hassan.
Numéro client →Nom client,
Numéro client → prénom,
Numéro client → adresse, Numéro client → (Nom client, prénom, adresse, code
Numéro client → code postal, postal, ville, téléphone, mail)
Numéro client → ville,
Numéro client → téléphone,
Numéro client → mail Source But
b. Dépendances fonctionnelle composées :
Une dépendance fonctionnelle qui comporte plusieurs attributs est dite composée.
5
Exemple :
NumClasse → NumElève
NumEleve → NomElève
NumClasse → NomElève
La troisième dépendance fonctionnelle n’est pas directe car nous pourrions écrire :
NumClasse → NumElève → NomElève
a. Entité :
Concept concret ou abstract identifié du monde réel caractérisé par un nom et une liste de propriétés.
L’entité se représente par un cadre contenant le nom de l’entité.
b. Les attributs :
Propriété d’une entité ou d’une association caractérisée par un nom et un type élémentaire.
C’est un élément d’une entité :
- A un nom unique.
- Permet de mémoriser une valeur ou bien une donnée élémentaire.
- Doit avoir un sens (donc une valeur) pour chacune des occurrences de la composante.
6
Une entité il peut avoir au moins un identifiant. Cet identifiant est unique permet d’identifier chaque
occurrence de l’entité.
En peut créer plusieurs Occurrences à partir d’une entité, une occurrence est un objet ou bien une
instance d’une entité. Deux occurrences de l’entité ne peuvent avoir la même valeur d’identifiant
c. Association :
Lien logique entre entités dont le type est défini par un verbe et une liste éventuelle de propriétés.
On appelle collection de l’association l’ensemble des entités qu’elle relie.
Un attribut peut être placé dans une association uniquement lorsqu’il dépend de toutes les entités
liées par l’association.
La concaténation des identifiant des entités liés à une association constitue l’identifiant de cette
association (cet identifiant n’est pas mentionné sur le modèle).
d. Les cardinalités :
Contrainte inscrite à chaque extrémité d’une association comportant un couple de valeurs (min - max)
qui établit, pour chaque entité de l’association, le nombre minimum et maximum d’occurrences d’une
association auxquelles elle peut participer.
Exemple : Un client peut effectuer de 0 à n commande, mais une commande ne peut être effectuer
que par un seul client.
7
Les seules cardinalités admises sont:
Cardinalités Signification
0…1 Au plus un
1…n Au moins un
Les associations réflexives : Une association réflexive est une association reliant des occurrences de
la même entité
Les associations ternaires: Une association ternaire est une association qui décrit un lien sémantique
entre trois entités.
8
11. La normalisation :
a. Première forme normale (1FN ou 1NF) :
- Attribut élémentaire.
- Tous les attributs ne contiennent qu’une seule valeur atomique (non divisible).
- Les attributs ne contiennent pas de valeurs répétitives.
- Tous les attributs en dépendance fonctionnelle avec l’identifiant de cette relation.
Exemple :
Clients (NumCli, Nom, Prénom, Adresse, Téléphone)
Cette relation n’est pas en première forme normale, car Adresse n’est pas atomique.
Exemple :
Commande (Numcli, CodeArticle, Date, Qté commandée, Désignation)
Cette relation est-elle en première forme normale ? Oui.
Est-elle en deuxième forme normale ? Non, car la propriété Désignation ne dépend pas
Intégralement de la clé (Numcli, CodeArticle, Date).
Exemple :
La relation Commande(NuméroCommande, #CodeClient, Nom client, #RefArticle)
est elle en troisième forme normale ?
Est elle en première forme normale ? Oui
Est elle en deuxième forme normale ? Oui
Est elle en troisième forme normale ? Non !
En effet Nom client dépend d’une propriété non clé : CodeClient
Exemple :
La relation Commune(commune, ville, région, population) n'est pas en forme normale de
Boyce-Codd (FNBC ou BCNF)
- (commune, ville) → région et (commune, ville) → population : Cela signifie que la
combinaison d'une commune et d'une ville détermine la région ainsi que la population.
- ville → région : Cela signifie que la ville détermine également la région. Ici, cette dépendance
crée une violation de la BCNF, car ville n'est pas une superclé (la superclé est (commune,
ville)).
9
- Solution est la Décomposition : Commune (commune, ville, population) et Ville (ville,
région) :
Une table est une relation comportant des ligne (tuples) et des colonnes.
Clé primaire : Ensemble minimal de colonne qui permet d’identifier de manière unique tuple dans une
table, peut être Pk simple ou bien composé.
Clé étrangère: Une ou plusieurs colonnes dans une table qui a pour but d’assurer une liaison entre
deux tables la clef primaire de la première table est dupliquer dans la deuxième on l’appelle aussi clef
externe (Foreign key), il fait précéder par # la clef étrangère
10
c. Conversion de MCD vers MLD :
Comparaison des notions entre MCD et MLD dite aussi modelé relationnel:
Toute entité dans un MCD devient une table dans un MRD dans laquelle les attributs deviennent les
colonnes et l’identifiant de l’entité constitue la clef primaire de la table.
11
Association réflexive:
Contrainte d’entité : Contrainte imposant que toute relation possède une clef primaire et tout attribut
participent à cette clef primaire est non nul.
Contrainte de domaine : Contrainte imposant que la colonne d’une relation doit comporter des valeurs
vérifiant une assertion logique. Par exemple l’âge d‘une personne est compris entre 1 et 150.
Contrainte référentielle (clef étrangère): Contrainte d’intégrité portant sur une relation R1, consistent
à imposer que la valeur connue d’un groupe d’attributs (appelé clef étrangère) apparaisse comme
valeur de clef dans une autre relation R2.
Lors d’une insertion d’une valeur dans une relation, la valeur des attributs doit exister dans la
relation référencée.
Lors d’une suppression dans la relation référencée, les tuples référençant ne doivent pas
exister
12
Matiére(No_matiere)
Professeur(No_prof)
Classe(No_class)
Assure(#No_class, #No_Prof,#No_matiere, codsalle)
Def2 : C’est un ensemble structuré de données enregistrées sur des supports accessibles par
l’ordinateur pour plusieurs utilisateurs.
DB permet:
- L’Organisation et la description de données.
- Le Stockage sur disque.
- Le Partage des données.
- La Confidentialité.
- La Performance.
Un SGBD (Système de
Un Système de Gestion de bases de Données (SGBD) :
Gestion de Bases de Données) est un ensemble logiciel qui permet la structuration, le stockage, et la
manipulation d'une base de données.
13
16. Algèbre Relationnel :
Union A={1,2,3} B={3,4,5} A∪B={1,2,3,4,5}
π (Nom, Ville)
(Nom: Alice, Ville: Paris)
(Nom: Bob, Ville: Lyon)
σ(Age>=22)
(ID: 2, Nom: Bob, Âge: 22, Ville: Lyon)
Inéqui-jointure "Employés" :
(Num: 1, Nom: Alice, Projet: 101)
(Num: 2, Nom: Bob, Projet: 102)
(Num: 3, Nom: Claire, Projet: 101)
"Projets" :
(NC: 101, Nom_Projet: Projet A)
(NC: 102, Nom_Projet: Projet B)
Num != NC
(Num: 1, Nom: Alice, Projet: 102)
(Num: 2, Nom: Bob, Projet: 101)
(Num: 3, Nom: Claire, Projet: 102)
semi-jointure "Clients" :
14
(ID_Client: 1, Nom: Alice)
(ID_Client: 2, Nom: Bob)
"Commandes" :
(ID_Commande: 101, ID_Client: 1)
(ID_Commande: 102, ID_Client: 3)
intersection Ensemble A
(Num: 1, Nom: Alice)
(Num: 2, Nom: Bob)
(Num: 3, Nom: Claire)
Ensemble B
(Num: 2, Nom: Bob)
(Num: 4, Nom: David)
(Num: 5, Nom: Eva)
A⋂B
(Num: 2, Nom: Bob)
Division M={Math,Science}
I={(Alice,Math),(Alice,Science),(Bob,Math),(Charlie,Math),(Charlie,Science)}
Résultat=I÷M
Résultat={(Alice),(Charlie)}
17. SQL :
a. LDD (MySQL)
Vérifier les valeurs des ports :
Direction du client au serveur MySQL
SHOW VARIABLES LIKE 'port';
Direction du serveur au client MySQL
show VARIABLES like 'mysqlx_port'; Valeur retourne : 33060
15
CREATE DATABASE [if not exists ] show create DATABASE test;
MaBase
[CHARACTER SET utf8mb4]
[COLLATE utf8mb4_general_ci];
Utilisation d’une base de donné :
use test;
Supprimer une DataBase:
DROP DATABASE test
Afficher les moteurs de stockage :
show ENGINES;
16
Type de données (colonne)
Numériques : TINYINT, SMALLINT, MEDIUMINT, INT ou INTEGER, BIGINT, FLOAT, DOUBLE,
DECIMAL
Les Contraintes
NOT NULL : Obligation de donner nom_colonne type_donnee NOT NULL;
une valeur
UNIQUE : Interdit deux même nom_colonne type_donnee UNIQUE;
valeurs pour une même colonne )
Ou bien:
nomCol1 type_donnee,
nomCol2 type_donnee,
UNIQUE(nomCol1 , nomCol2 );
Ou bien :
[CONSTRAINT nomContra] UNIQUE(nomCol1 , nomCol2 );
Example:
CONSTRAINT fk1_cin FOREIGN KEY (numCIN)
REFERENCES users(numCIN)
Example :
Cout DECIMAL(10,2 ) NOT NULL CHECK (cout>= 0),
17
Ajouter une ou plusieurs colonnes à ALTER TABLE nom_table
une table: ADD nouvelleCol1 [definition1],
ADD nouvelleCol2 [definition2],
changer le nom d’une colonnes d’une ALTER TABLE nom_table CHANGE COLUMN
table: nom_original nouveau_nom[definition];
Exemple:
ALTER TABLE users
CHANGE COLUMN prenom last_name
VARCHAR(40);
Supprimer une colonne d’une table : ALTER TABLE nom_table DROP COLUMN
nom_colonne;
Exemple:
ALTER TABLE users DROP COLUMN age;
18
ADD CONSTRAINT constraint_name
FOREIGN KEY (column_name, ...)
REFERENCES parent_table(colname,..);
Supprimer une table ou plusieurs DROP [TEMPORARY] TABLE [IF EXISTS] nom_table1,
nom_table2,…
b. LMD (MySQL)
Insertion d’une ou plusieurs lignes : INSERT INTO
nom_table(col1,col2,...)
VALUES(val1,val2,...);
Example:
INSERT INTO users(num,nom,prenom)
VALUES(120,’maryem’,’saidi’);
Example:
UPDATE users SET age=31,
nom=’laila’ WHERE Num=12;
Example:
DELETE FROM users WHERE Num=12;
La sélection des données : SELECT [DISTINCT] Liste_Select | * FROM
Liste_Tables
19
INNER JOIN Table AS T1 ON T1.ID = T2.ID
WHERE Liste_Conditions_Recherche
GROUP BY Liste_regroupement
HAVING Liste_Conditions_regroupement
ORDER BY liste_Tri
LEFT JOIN (OU LEFT OUTER JOIN): Select e.nom, d.nom FROM employés e LEFT JOIN
Cette jointure renvoie toutes les départements d ON e.id = d.id;
lignes de la table de gauche, même
s'il n'y a pas de correspondance dans Remarque : LEFT OUTER et RIGHT OUTER n’est pas
la table de droite. Si aucune supporté par MYSQL
correspondance n'est trouvée, les
valeurs de la table de droite seront
NULL.
RIGHT JOIN (OU RIGHT OUTER JOIN): Select e.nom, d.nom FROM employés e RIGHT JOIN
Cette jointure renvoie toutes les départements d ON e.id = d.id;
lignes de la table de droite, même s'il
n'y a pas de correspondance dans la
table de gauche. Si aucune
correspondance n'est trouvée, les
valeurs de la table de gauche seront
NULL.
CROSS JOIN : Cette jointure renvoie Exemple : Cette requête renverra toutes les
le produit cartésien des deux tables, combinaisons possibles de noms d'employés et de
c'est-à-dire toutes les combinaisons noms de projets, créant un tableau avec toutes les
possibles de lignes entre les deux associations possibles
tables. Sans ON
SELECT e.nom, p.nom FROM employés e CROSS JOIN
projets p;
20
SELF JOIN ( table réflexive) : Cette Exemple : Cette requête sélectionne le nom d'un
jointure renvoie le produit cartésien employé et le nom de son manager. (inner join , left
des deux tables, c'est-à-dire toutes join , right join)
les combinaisons possibles de lignes
entre les deux tables. SELECT e1.nom AS employé, e2.nom AS manager
FROM employés e1 INNER JOIN employés e2 ON
e1.manager_id = e2.id;
Les requêtes préparées : (pour tous les -- Préparation de la requête
requête : select, insert, delete, update) PREPARE reqt FROM
'SELECT id, nom FROM client WHERE id = ?';
-- utilisation de la requête prépare plusieurs foi :
SET @id = 1;
EXECUTE reqt USING @id;
-- Libération de la requête préparée
DEALLOCATE PREPARE reqt;
Requetés de l’union :
requete Explication
UNION : combiner les résultats de deux ou SELECT id, name FROM employees
plusieurs requêtes SELECT en une seule, en UNION
supprimant les doublons. SELECT id, name FROM managers;
21
UNION ALL (avec doublons) SELECT id, name FROM employees
UNION ALL
SELECT id, name FROM managers;
INTERSECT renvoie les valeurs communes (ou SELECT column_name(s) FROM table1
l'intersection) entre deux ensembles de résultats INTERSECT
de requêtes SELECT SELECT column_name(s) FROM table2;
AND : TRUE si les deux expressions Exemple : Sélectionne les employés dont le salaire est
booléennes sont TRUE. supérieur à 50 000 et qui travaillent dans le
département 'Informatique'.
ANY (sous_requete) : TRUE si n'importe Exemple : Sélectionne les produits dont le prix est
quel élément d'un jeu de comparaisons supérieur à n'importe quel prix des produits de la
est TRUE. catégorie 'Électronique'.
BETWEEN : TRUE si l'opérande est situé Exemple : Sélectionne les produits dont le prix est
dans une certaine plage. compris entre 100 et 500
EXISTS (sous_requete) : TRUE si une Exemple : sélectionne les clients qui ont passé au
sous-requête contient des lignes. moins une commande
22
SELECT * FROM clients WHERE EXISTS (SELECT *
FROM commandes WHERE clients.id =
commandes.client_id);
IN (sous_requete) : TRUE si l'opérande Exemple : sélectionne les employés qui travaillent dans
est égal à un élément d'une liste les départements 'Informatique' ou 'Marketing'.
d'expressions. NOT IN dans le cas
contraire SELECT * FROM employés WHERE département IN
('Informatique', 'Marketing');
LIKE : TRUE si l'opérande correspond à un Exemple : sélectionne les clients dont le nom
modèle. Not Like dans le cas contraire. commence par 'Jean'.
Les Jocker : % plusieurs caractères.
_ un seul caractère. SELECT * FROM clients WHERE nom LIKE 'Jean%';
Les regex : [ ], [^]
NOT : Inverse la valeur de tout autre Exemple : sélectionne les produits dont le prix n'est pas
opérateur booléen. inférieur à 50.
OR : TRUE si l'une ou l'autre expression Exemple : sélectionne les employés qui travaillent soit
booléenne est TRUE. dans le département 'Informatique', soit dans le
département 'Ventes'.
SOME (sous_requete) : TRUE si certains Exemple : sélectionne les produits dont le prix est
éléments d'un jeu de comparaisons sont supérieur à certains des prix des produits de la
TRUE catégorie 'Jouets'.
23
Les fonctions de CDC:
CONCAT() : Concaténer deux ou SELECT CONCAT('Hello', ' ', 'World') AS Hello World
plusieurs chaînes en une seule resultat;
chaîne.
UPPER() : Convertir une chaîne SELECT UPPER('hello world') AS majuscule; HELLO
en majuscule. WORLD
LENGTH() : Obtenir la longueur SELECT LENGTH('Bonjour') AS longueur; 7
d'une chaîne en octets.
LEFT() : Obtient un nombre SELECT LEFT('Hello World', 5) AS Hello
spécifié de caractères les plus à partie_gauche;
gauche d'une chaîne.
LOWER() : Convertir une chaîne SELECT LOWER('HELLO WORLD') AS hello world
en minuscule. minuscule;
LTRIM() : Supprimer tous les SELECT LTRIM(' Hello World') AS resultat; Hello World
espaces du début d'une chaîne.
REPLACE() : Recherche et SELECT REPLACE('Hello World', 'World', 'SQL') Hello SQL
remplace une sous-chaîne dans AS resultat;
une chaîne.
RIGHT() : Retourne un nombre SELECT RIGHT('Hello World', 5) AS World
spécifié de caractères les plus à partie_droite;
droite d'une chaîne.
RTRIM() : Supprime tous les SELECT RTRIM('Hello World ') AS resultat; Hello World
espaces de la fin d'une chaîne.
SUBSTRING() : Extraire une sous- SELECT SUBSTRING('Hello World', 7, 5) AS World
chaîne à partir d'une position sous_chaine;
avec une longueur spécifique.
TRIM() : Supprime les caractères SELECT TRIM(' Hello World ') AS resultat; Hello World
indésirables d'une chaîne
(espaces au début et à la fin)
FORMAT() : Mettre en forme un SELECT FORMAT(12345.678, 2) AS 12,345.68
nombre avec une locale nombre_formate;
spécifique, arrondi au nombre de
décimales
INSTR() : Renvoie la position de la SELECT INSTR('Hello World', 'World') AS 7
première occurrence d'une sous- position;
chaîne dans une chaîne.
FIND_IN_SET() : Rechercher une SELECT FIND_IN_SET('orange', 2
chaîne dans une liste de chaînes 'apple,orange,banana') AS position;
séparées par des virgules
SUBSTRING_INDEX() : Renvoie SELECT SUBSTRING_INDEX apple,orange
une sous-chaîne à partir d'une ('apple,orange,banana', ',', 2) AS sous_chaine;
chaîne avant un nombre spécifié
d'occurrences d'un délimiteur.
24
DATEDIFF() : Calcule le nombre de SELECT DATEDIFF('2024-12-31', '2024-10- 78
jours entre deux dates 14');
DAY() : Obtient le jour du mois d'une SELECT DAY('2024-10-14'); 14
date spécifiée
DATE_ADD() : Ajoute une valeur de SELECT DATE_ADD('2024-10-14', 2024-10-24
temps à une date INTERVAL 10 DAY);
DATE_SUB() : Soustrait une valeur de SELECT DATE_SUB('2024-10-14', 2024-10-07
temps d'une date INTERVAL 7 DAY);
DATE_FORMAT() : Formate une date SELECT DATE_FORMAT('2024-10-14', Monday,
en fonction d'un format spécifié '%W, %M %d, %Y'); October 14,
2024
DAYNAME() : Renvoie le nom du jour SELECT DAYNAME('2024-10-14'); Monday
de la semaine pour une date
DAYOFWEEK() : Renvoie l'index du SELECT DAYOFWEEK('2024-10-14'); 2 (Lundi)
jour de la semaine (1 = Dimanche, 7 =
Samedi)
EXTRACT() : Extrait une partie d'une SELECT EXTRACT(YEAR FROM '2024-10- 2024
date, par exemple l'année 14');
LAST_DAY() : Renvoie le dernier jour SELECT LAST_DAY('2024-10-14'); 2024-10-31
du mois pour une date donnée
NOW() : Renvoie la date et l'heure SELECT NOW(); 2024-10-14
actuelles 14:35:21
MONTH() : Renvoie le mois d'une date SELECT MONTH('2024-10-14'); 10
(en entier)
STR_TO_DATE() : Convertit une chaîne SELECT STR_TO_DATE('14-10-2024', '%d- 2024-10-14
de caractères en date selon un format %m-%Y');
SYSDATE() : Renvoie la date et l'heure SELECT SYSDATE(); 2024-10-14
au moment où la requête est exécutée 14:35:21
TIMEDIFF() : Calcule la différence SELECT TIMEDIFF('12:00:00', '09:30:00'); 02:30:00
entre deux heures
TIMESTAMPDIFF() : Calcule la SELECT TIMESTAMPDIFF(MONTH, '2024- 9
différence entre deux dates (en mois 01-01', '2024-10-14');
dans cet exemple)
WEEK() : Renvoie le numéro de la SELECT WEEK('2024-10-14'); 41
semaine dans l'année
WEEKDAY() : Renvoie l'index du jour SELECT WEEKDAY('2024-10-14'); 0 (Lundi)
de la semaine (0 = Lundi, 6 =
Dimanche)
YEAR() : Renvoie l'année d'une date SELECT YEAR('2024-10-14'); 2024
spécifiée
25
de caractères selon le format de date SELECT TO_CHAR(SYSDATE, 'Month DD, October 14,
spécifié YYYY') FROM dual; 2024
c. LCD (MySQL)
Globale : *.* ;
DB : dbtest.*
Table : dbtest.Produits
Colonne : SELECT (Num_Produit,Description
Routine : GRANT EXECUTE ON PROCEDURE CPrix
Proxy : GRANT PROXY ON root
Créer un utilisateur :
CREATE USER 'alice'@'localhost' IDENTIFIED BY 'motdepasse';
Modifier un utilisateur :
ALTER USER 'alice'@'localhost' IDENTIFIED BY 'nouveaumotdepasse';
Renommer un utilisateur :
26
RENAME USER 'alice'@'localhost' TO 'bob'@'localhost';
Supprimer un utilisateur :
DROP USER 'bob'@'localhost';
Syntaxe des privilèges :
GRANT privilege1 [(liste_colonnes)], [privilege2 [(liste_colonnes)], ...] ON [type_objet]
niveau_privilege TO utilisateur [IDENTIFIED BY mot_de_passe];
Exemple :
GRANT SELECT, UPDATE (nom, prenom, adresse), DELETE, INSERT ON eshop_app_db.clients
TO 'saadi'@'localhost';
Accorder des privilèges
GRANT SELECT, INSERT ON ma_base.ma_table TO 'alice'@'localhost';
Accorder tous les privilèges
GRANT ALL PRIVILEGES ON ma_base.* TO 'alice'@'localhost';
Syntaxe pour Révoquer les privilèges (retirer le privilège)
REVOKE privilege [, privilege2, ...] ON niveau_privilege FROM utilisateur;
Exemple
REVOKE INSERT ON ma_base.ma_table FROM 'alice'@'localhost';
Créer un rôle :
CREATE ROLE 'manager';
Accorder des privilèges à un rôle :
GRANT SELECT, INSERT, UPDATE ON eshop_app_db.clients TO 'manager';
Attribuer un rôle à un utilisateur :
GRANT 'manager' TO 'alice'@'localhost';
Afficher les rôles d'un utilisateur :
SHOW GRANTS FOR 'alice'@'localhost';
Attirer un rôle a un utilisateur :
REVOKE '<role>' FROM '<user>'@'<host>';
Supprimer un rôle :
DROP ROLE 'manager';
BEGIN
SELECT 'Bloc instructions1;
BEGIN
SELECT 'Bloc d''instructions2;
END;
BEGIN
SELECT 'Bloc d''instructions3';
27
END;
END;
Les variables :
DECLARE nomVar [,nomVar2...] typeMySQL [DEFAULT expression];
Exemple:
DECLARE DateNai DATE;
DECLARE statut BOOLEAN DEFAULT TRUE;
DECLARE x,y,z INT;
Les fonctions
Peut renvoyer caractère, entier…et non pas une table. Pour renvoyer une table il faut utiliser les
procédures stockées.
La syntaxe : Example:
DROP FUNCTION IF EXISTS nom_fonction;
CREATE FUNCTION nom_fonction (parameter) DROP FUNCTION IF EXISTS nbrclient;
RETURNS type_retour DELIMITER $$
BEGIN CREATE FUNCTION nbrclient (v VARCHAR(255))
-- Déclaration informative RETURNS INT
DECLARE variable_example TYPE; READS SQL DATA
BEGIN
-- Instructions DECLARE nombre INT;
SELECT 'Exécution des instructions ici'; -- Calcul du nombre de clients par ville
SET nombre = (SELECT COUNT(*)
RETURN type_retour; FROM clients
END; WHERE adresse = v);
RETURN nombre;
READS SQL DATA : lire les données END $$
MODIFIES SQL DATA : modifie les données DELIMITER ;
CONTAINS SQL : elles ne lisent ni ne modifie
DELIMITER $$ : c’est comme point-virgule à la Appel de la fonction:
fin d’une instruction il permet l’exécution des
instructions comme un seul bloc SELECT nbrclient ('Rabat');
28
CREATE PROCEDURE nom_procedure (param1 CREATE PROCEDURE ps_client(IN ville
INT, param2 VARCHAR(50)) VARCHAR(255))
BEGIN BEGIN
-- Code SQL à exécuter SELECT * FROM clients
SELECT * FROM table WHERE colonne1 = WHERE UPPER(adresse) = UPPER(ville);
param1 AND colonne2 = param2; END $$
END $$ DELIMITER ;
Appel de la PS:
DELIMITER ; CALL ps_client ('Rabat');
Lister les procedures stockée: SHOW PROCEDURE STATUS [LIKE 'pattern' | WHERE condition]
29
Structure de contrôle itératives
LEAVE : Qui sort d’une boucle (ou d’un bloc étiqueté)
ITERATE : Qui force le programme à refaire un tour de boucle depuis le début
LOOP WHILE REPEAT
[label_debut:] LOOP [label_debut:] WHILE condition DO REPEAT
statement_list list_of_instructions list_of_instructions
END LOOP [label_fin] END WHILE [label_fin] UNTIL condition
Les exceptions
En MySQL, les exceptions sont gérées à travers des conditions et des gestionnaires d'exceptions
(handlers) dans les procédures stockées.
Syntaxe 1:
DECLARE handler_action HANDLER
FOR condition_value [, condition_value ...]
statement;
Handler_action: {
CONTINUE
| EXIT
| UNDO
}
Condition_value: {
mysql_error_code
| SQLSTATE [VALUE] sqlstate_value
| condition_name
| SQLWARNING
| NOT FOUND
| SQL EXCEPTION
}
Explication :
handler_action : C'est l'action à entreprendre si la condition est rencontrée.
CONTINUE : Continue l'exécution après le gestionnaire.
EXIT : Termine l'exécution du bloc ou de la procédure après avoir exécuté le gestionnaire.
UNDO : Non supporté dans MySQL (présent dans la documentation SQL standard, mais
non implémenté dans MySQL).
Syntaxe 2:
30
DECLARE nomException CONDITION FOR
SQLSTATE 'valeur_sqlstate' | code_erreur_mysql;
Syntaxe 3 :
L'instruction SIGNAL peut être utilisée pour lever des exceptions personnalisées en MySQL avec
des informations supplémentaires.
SIGNAL SQLSTATE 'sqlstate_value' SET info_1 = valeur_1, info_2 = valeur_2, ...;
L'instruction RESIGNAL en MySQL est utilisée pour relancer une exception qui a été capturée dans
un gestionnaire d'exceptions
RESIGNAL [SQLSTATE 'sqlstate_value'] [SET MESSAGE_TEXT = 'message_text', info_1 = val_1, ..]
Example 1 :
CREATE PROCEDURE insert_with_continue()
BEGIN
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
BEGIN
SELECT 'Une erreur est survenue, mais l\'exécution continue.';
END;
SELECT 'Suite de l\'exécution après l\'erreur.';
END;
Example 2 :
CREATE PROCEDURE insert_with_exit()
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
SELECT 'Une erreur est survenue. L\'exécution est interrompue.';
END;
SELECT 'Cette ligne ne sera pas exécutée si une erreur se produit.';
END;
Example 3 :
CREATE PROCEDURE insert_with_named_exception()
BEGIN
DECLARE duplicate_key CONDITION FOR SQLSTATE '23000';
DECLARE EXIT HANDLER FOR duplicate_key
BEGIN
SELECT 'Erreur : Violation de clé unique, insertion échouée.';
END;
INSERT INTO employees (id, name) VALUES (1, 'John');
SELECT 'Cette ligne ne sera pas exécutée si une erreur se produit.';
END;
Example 4 :
CREATE PROCEDURE ErreurA()
BEGIN
SELECT 'Une autre erreur est survenue';
END; //
DELIMITER ;
CREATE PROCEDURE ErreurB()
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
CALL ErreurA ();
31
END;
DELIMITER ;
Example 5 :
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Erreur personnalisée levée', error_code = 1001,
error_details = 'Détails supplémentaires sur l\'erreur.';
Example 6 :
RESIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Une erreur SQL a été capturée et relancée.',
custom_info = 'Informations supplémentaires sur l\'erreur.';
32
NEW.prenom), NOW(), 'INSERT');
END;
Les Curseurs
Un curseur est un objet utilisé dans les systèmes de gestion de bases de données (SGBD) pour traiter
et manipuler des ensembles de résultats de requêtes de manière plus contrôlée.
Syntaxe :
DECLARE nom_curseur CURSOR FOR instruction_SELECT;
OPEN nom_curseur;
FETCH nom_curseur INTO liste_variables;
CLOSE nom_curseur;
- DECLARE : Cette ligne déclare un curseur nommé nom_curseur pour une instruction SELECT
spécifiée (remplacez instruction_SELECT par votre requête SQL).
- OPEN : Cette commande ouvre le curseur, exécutant ainsi l'instruction SELECT et préparant
l'ensemble des résultats à être parcouru.
- FETCH : Cette instruction récupère la prochaine ligne de l'ensemble des résultats du curseur et
l'affecte aux variables spécifiées dans liste_variables.
- CLOSE : Cette commande ferme le curseur, libérant ainsi les ressources associées.
- DEALLOCATE : Les ressources sont libérées
Example:
DECLARE @nom VARCHAR(50);
DECLARE @prenom VARCHAR(50);
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT 'Nom: ' + @nom + ', Prénom: ' + @prenom;
FETCH NEXT FROM mon_curseur INTO @nom, @prenom;
END;
CLOSE mon_curseur;
DEALLOCATE mon_curseur;
Les transactions
Voici comment gérer les transactions dans SQL :
- Démarrer une Transaction : Utilisez START TRANSACTION ou BEGIN pour initier une
transaction.
- Effectuer des Opérations : Exécutez vos commandes SQL (INSERT, UPDATE, DELETE, etc.).
33
- Valider la Transaction : Utilisez COMMIT pour valider les modifications et les rendre
permanentes.
- Annuler la Transaction : Si une erreur se produit ou si vous souhaitez annuler les modifications,
utilisez ROLLBACK.
Syntaxe et exemple :
Les variables
- Le symbole @ commence le nom de toute variable.
- Le symbole dédoublé @@ commence le nom des variables globales du SGBDR.
- Le symbole # commence le nom de toute table temporaire.
- Le symbole dédoublé ## commence le nom de toute table temporaire globale.
- Une Variable est déclarée dans tous les endroits de code par l’instruction : DECLARE
DECLARE @nom varchar(32)
- Pour Assignée une variable en utilise l’instruction : SET
SET @nom = ‘alami’
- Pour Assignée une variable ou bien plusieurs en peuvent utiliser aussi SELECT de SQL
34
Declare @nom varchar(20), @prenom varchar(20)
Select @nom=nom, @prenom=prenom from client where idClt = 1
35
Appel d’une procédure Stockée: avec exec Alter procedure GetProductId As Select @prodid,
ou execute @prodName from product
Définition de fonction:
Syntaxe d’une Fonction Scalaire Syntaxe d’une Fonction multi-lignes
create function Nom-fonction (para1 type1 create function Nom-fonction (para1 type1
,..., paraN typeN) ,..., paraN typeN)
returns type-resultat return @nom-table table (col1 type1,
as begin col2 type2,...)
...... as begin
return valeur-resultante ....
end return
end
example
Create function nbr-stg (@id-class int) example
returns int create function stg-M
as begin returns @stg table (id-stg int, nom
declare @nbr int varchar, prenom varchar)
select @nbr = count(*) from stagiaire as begin
where id-class = @id-class insert into @stg select * from
return @nbr stagiaire where nom like 'M%'
end return
end
Appel de la fonction : Appel de la fonction :
select dbo.nbr-stg(3) select select * from dbo.stg()
Curseurs
Types : Plusieurs types existent
• Curseurs à défilement en avant (Forward Only)
• Curseurs statiques (Static)
• Curseurs d'ensemble de valeurs clés (Keyset)
• Curseurs dynamiques (Dynamic)
• Déclaration d’un curseur:
Un curseur se définit dans une instruction DECLARE possédant une requête de type SELECT.
Il convient de définir pour chaque colonne renvoyé une variable de type approprié.
DECLARE @Col1 Type1, @Col2 Type2, @Col3 Type3 ...
DECLARE MyCursor CURSOR static | keyset | dynamic | For
SELECT COL1, COL2, COL3 …. FROM MyTable
• Ouvrir un curseur:
Pour lancer la requête associée (et donc placer les données dans les buffers appropriés) il
faut utiliser l'instruction OPEN.
36
OPEN MyCursor
• Boucle de traitement:
WHILE @@fetch_Status = 0
BEGIN
traitement
-- lecture de l'enregistrement suivant
FETCH MyCursor INTO @Col1, @Col2, @Col3...
END
• Fermeture du curseur
CLOSE myCursor
• Libération de la mémoire
DEALLOCATE myCursor
Triggers (Déclencheurs)
Créer trigger
CREATE TRIGGER <nom_trigger> ON <table_ou_vue>
FOR | AFTER | INSTEAD OF [ INSERT ] [ , ] [ UPDATE ] [ , ] [DELETE]
AS
<code>
Supprimer trigger
DROP TRIGGER nom-trigger
Activer et désactiver trigger
Alter table nom_table
Disable /Enable trigger nom_trigger
37
Exceptions
Lever une exception Raiserror : RAISERROR (message_string, severity, state)
severity : Le niveau de gravité de l'erreur. Il s'agit d'une valeur numérique comprise entre 0 et 25.
0 à 10 : Messages d'information ou d'avertissement.
11 à 16 : Erreurs qui peuvent être corrigées par l'utilisateur.
17 à 25 : Erreurs graves nécessitant une intervention administrative.
state : Un code de retour qui aide à identifier où l'erreur s'est produite. Il doit être compris entre 0
et 255.
Exemple :
RAISERROR ('les salaires pour job_id :%d doivent être entre %d et %d.', 16, 1, @JOB_ID,
@MIN_sal, @MAX_sal)
Transaction
- BEGIN TRANSACTION : Démarre une nouvelle transaction.
- COMMIT TRANSACTION : Valide toutes les modifications effectuées dans la transaction.
- ROLLBACK TRANSACTION : Annule toutes les modifications effectuées depuis le début de la
transaction.
BEGIN TRANSACTION;
-- Instructions SQL (INSERT, UPDATE, DELETE, etc.)
IF (/* condition pour valider */)
COMMIT TRANSACTION;
ELSE
ROLLBACK TRANSACTION;
20. PLSQL
PL/SQL (Procedural Language/SQL) est une extension procédurale de SQL, utilisée principalement dans
les bases de données Oracle.
38
Les variables : es variables sont déclarées dans la section DECLARE, et vous pouvez leur assigner
des valeurs via l'opérateur :=
DECLARE
my_string VARCHAR2(100) := 'Hello, World!';
BEGIN
DBMS_OUTPUT.PUT_LINE(my_string);
END;
Structures de contrôle : IF...THEN...ELSE
DECLARE
num NUMBER := 5;
BEGIN
IF num > 10 THEN
DBMS_OUTPUT.PUT_LINE('Greater than 10');
ELSE
DBMS_OUTPUT.PUT_LINE('10 or less');
END IF;
END;
Boucles (LOOP, WHILE, FOR) :
BEGIN
FOR i IN 1..5 LOOP
DBMS_OUTPUT.PUT_LINE('Iteration: ' || i);
END LOOP;
END;
Procédures stockées :
CREATE OR REPLACE PROCEDURE greet_user (name IN VARCHAR2) AS
BEGIN
DBMS_OUTPUT.PUT_LINE('Hello, ' || name);
END;
Appel de la procédure :
BEGIN
greet_user('Alice');
END;
Fonctions stockées :
CREATE OR REPLACE FUNCTION add_numbers (a IN NUMBER, b IN NUMBER) RETURN NUMBER AS
BEGIN
RETURN a + b;
END;
Appel de la fonction :
DECLARE
result NUMBER;
BEGIN
result := add_numbers(10, 20);
DBMS_OUTPUT.PUT_LINE('Result: ' || result);
END;
Gestion des exceptions
BEGIN
DBMS_OUTPUT.PUT_LINE(10 / 0);
EXCEPTION
WHEN ZERO_DIVIDE THEN
DBMS_OUTPUT.PUT_LINE('Cannot divide by zero');
END;
39
Curseurs :
DECLARE
CURSOR my_cursor IS SELECT name FROM employees;
employee_name employees.name%TYPE;
BEGIN
OPEN my_cursor;
LOOP
FETCH my_cursor INTO employee_name;
EXIT WHEN my_cursor%NOTFOUND;
DBMS_OUTPUT.PUT_LINE('Employee: ' || employee_name);
END LOOP;
CLOSE my_cursor;
END;
Triggers
CREATE OR REPLACE TRIGGER trigger_name
{BEFORE | AFTER} {INSERT | UPDATE | DELETE} ON table_name
[FOR EACH ROW]
DECLARE
-- Déclaration de variables (optionnelle)
BEGIN
-- Corps du trigger
-- Code PL/SQL à exécuter
END;
Transactions
DECLARE
v_employee_id employees.employee_id%TYPE := 100;
v_salary employees.salary%TYPE := 60000;
BEGIN
-- Démarrer une transaction
INSERT INTO employees (employee_id, salary) VALUES (v_employee_id, v_salary);
-- Imaginons qu'une condition doit être vérifiée avant de valider
IF v_salary > 50000 THEN
-- Valider la transaction
COMMIT;
DBMS_OUTPUT.PUT_LINE('Transaction committed successfully.');
ELSE
-- Annuler la transaction
ROLLBACK;
DBMS_OUTPUT.PUT_LINE('Transaction rolled back.');
END IF;
EXCEPTION
WHEN OTHERS THEN
-- En cas d'erreur, annuler la transaction
ROLLBACK;
DBMS_OUTPUT.PUT_LINE('An error occurred, transaction rolled back.');
END;
40
21. NoSQL avec MongoDB:
a. Définition de NoSQL:
Le SGBDR est un système limité face au donnée massive (Big Data) qui se caractérise par les 3V (Volum,
Velocity et Veracity). C’est pourquoi le NoSQL (Not Only SQL) permet de gérer ce type des données.
Les serveurs de données NoSQL se caractérisent par des architectures distribuées pour répondre aux
problématiques du Big Data.
c. Installation de Mongo DB :
Etape 1 : Télécharger le serveur depuis l’adresse suivante
https://www.mongodb.com/try?jmp=nav#community
Etape 2 : Lancer le serveur avec le service mongod.exe qui existe dans le fichier suivant :
C:\Program Files\MongoDB\Server\6.0\bin
Etape 3 : Sous Windows en va installer l’interface utilisateur : Studio 3T
Etape 4 : En teste le service Mongodb est en cours d’exécution sur le port 27017
Etape 5 : En lance l’ILE IntelliShell de Studio 3T
Etape 6 : En exécute la commande : db.help()
Etape 7 : En teste la commande : show dbs pour afficher les bases de donnée existent dans MongoDB
41
d. Les notions NoSQL :
Une base de donnée contient une collection des documents.
Une collection est comme une table dans une BD relationnel sauf la collection n’a pas de
schéma et contient un ensemble des documents.
Un document est équivalent à un enregistrement dans une table, il est ce format Json et
caractérise par un champ _id c’est un champ obligatoire.
Une collection peut avoir des documents de même schéma ou bien des schémas différents
42
"amount": 99.99
},
{
"order_id": 5678,
"date": "2023-10-01",
"amount": 149.99
}
]
}
Notion de Linking (Référencement) {
"_id": ObjectId("6347a9f7f0834a0011fa9f33"),
"name": "John Doe",
"email": "[email protected]"
}
{
"_id": ObjectId("8767a9f7f0834a0011fa9f57"),
"order_id": 1234,
"user_id": ObjectId("6347a9f7f0834a0011fa9f33"),
"date": "2023-09-25",
"amount": 99.99
},
{
"_id": ObjectId("8777a9f7f0834a0011fa9f59"),
"order_id": 5678,
"user_id": ObjectId("6347a9f7f0834a0011fa9f33"),
"date": "2023-10-01",
"amount": 149.99
}
43
{"_id":"ID", "intitule":"Infrastructure digitale", "nbOptions":3} ,
{multi: true}
) //pour une modification multiple
modification db.Filieres.update(
{"intitule" : "Developpement digital"},
{$set: {"organisme": "OFPPT"}},
{multi: true}
)
44
ET Logique $and Exemple:
OU Logique $or s = { "$or": [ { "note" : { "$gte" : 10 } }, {"option":"A"} ] }
Not (OU Logique) $nor db.Etudiants.find(s,{"nom":1,"prenom":1,"_id":0})
Les Opérateurs Ce calcul s’effectue avec la fonction aggregate() qui prend en paramètre
d’agrégation : un tableau d’opérations (pipeline).
db. NomCollection.aggregate([operateur1,operateur2,..])
example:
db.Etudiants.aggregate([{$match: {"filiere.intitule" : "arabe" }}])
On peut faire tous les calculs d’agrégats classique en utilisant les fonctions
d’agrégation suivantes: $sum (somme), $avg (moyenne), $min
(minimum), $max (maximum)
example:
db.Etudiants.aggregate ([
{$group: {_id: "$filiere.intitule", total : {$sum:"$note"}}} ])
db.Etudiants.aggregate ([
{$group: {_id: "$filiere.intitule", maximum : {$max:"$note"}}} ])
db.Etudiants.aggregate([
{$group: {_id: "$filiere.intitule", maximum :{$max:"$note"}}},
{$sort: { maximum:1}} ])
45
i. Les requetés via python:
Pour travailler les requetés NoSQL dans MongoDB avec python il faut installer la bibliothèque
PyMongo. C’est une librairie Python native.
Etape3 : saisir la commande suivante dans un terminal (invité de commande par exemple)
pip install pymongo
Etape4 : Créer la connexion avec le serveur MongoDB Pour effectuer cette connexion on utilise
MongoClient, qui se connecte, par défaut, à l'instance MongoDB s'exécutant sur
localhost:27017. Pour lancer la commande : mongod
db.Stagiaires.find()
Retourne un curseur (type Cursor) sur les données
46
selection={}
selection["option"]="Mobile"
resultat =db.Etudiants.find(selection)
for i in resultat[:]:
print(i)
projection={"nom":1,"prenom":1,"_id":0}
selection={}
selection["filiere.intitule"]="DD"
r =db.Etudiants.find(selection,projection)
for i in resultat[:]:
print(i)
r = db.Etudiants.find().sort("nom",-1)
for i in r[:]:
print(i)
47
delete_one() - Suppression d’un
document
delete_many() - Suppression d’une
liste de documents
update_one() - Modification d’un
document
resultat = db.Etudiants.aggregate([
{"$group":{"_id":"$filiere.intitule",
"moyenne":{"$avg":"$moy1A"}}
}])
for i in resultat:
print(i["moyenne"],"moyenne de ",
i["_id"])
Exemple :
use Examples
db.createUser( {
user: "UserAdmin",
pwd: "password" ,
"roles" : [{ "role" : "userAdmin",
"db" : "Examples" }]
})
48
k. Importation et exportations:
Importer data base : l’importation peut être sous format JSON ou bien CSV
mongoimport -d nomBaseDonnees -c nomDeLaCollection fichier.json
mongoimport -d nomBaseDonnees -c nomDeLaCollection --type csv, --file fichier.csv
Exemple :
mongoimport -d Examples -c Etudiants -type csv –file C:/data/Etudiants.csv
mongoimport -d Examples -c Etudiants -o C:/data/ Etudiants.json
Exporter data base : l’exportation peut être sous format JSON ou bien CSV
mongoexport -d nomBaseDonnees -c nomDeLaCollection -o fichier.json
mongoexport -d nomBaseDonnees -c nomDeLaCollection -f
champ_1,champ_2,champ_3 --csv -o fichier.csv
Exemple :
mongoexport -d Examples -c Etudiants -o C:/data/etudiants.json
mongoexport -d Examples -c Etudiants -f _id,nom,prenom,niveau,option --csv -o
C:/data/etudiants.csv
49
50