✅ 1.
RÈGLES DE PASSAGE DU MLD (Modèle Logique des Données) AU MPD
(Modèle Physique des Données) EN MERISE
Ce passage consiste à adapter le MLD à un SGBD réel comme MySQL, PostgreSQL,
Oracle, etc., en tenant compte des contraintes techniques (types de données, index,
performance…).
🔹 Règles générales :
➤ 1.1 Choisir les types physiques des attributs :
Passer des types logiques aux types physiques du SGBD choisi.
Type logique MySQL (MPD)
Texte VARCHAR(n)
Entier INT, SMALLINT
Décimal DECIMAL(p, s)
Date DATE, DATETIME
Booléen BOOLEAN (alias de TINYINT)
Code CHAR(n)
➤ 1.2 Créer les clés primaires et étrangères :
Utiliser PRIMARY KEY (colonne) pour les identifiants.
FOREIGN KEY (colonne) REFERENCES autre_table(colonne) pour les relations.
➤ 1.3 Gérer les index :
Ajouter des INDEX ou UNIQUE si nécessaire pour optimiser les performances.
➤ 1.4 Implémenter les contraintes :
NOT NULL pour les attributs obligatoires.
DEFAULT pour une valeur par défaut.
CHECK pour une contrainte de domaine (selon SGBD, peu supporté dans
MySQL avant v8).
➤ 1.5 Gérer les noms physiques :
Respecter la convention de nommage du SGBD (minuscules, pas d’espaces, pas
d’accents…).
➤ 1.6 Créer les tables, relations, et éventuellement des vues, procédures
stockées, triggers, etc.
✅ 2. TOUTES LES PRINCIPALES REQUÊTES SQL EN MySQL
Voici les principales commandes que tu dois connaître pour créer, manipuler et
interroger une base de données MySQL :
🔸 2.1 DDL (Data Definition Language) – Structure de la base
sql
CopierModifier
-- Créer une base
CREATE DATABASE nom_base;
-- Utiliser une base
USE nom_base;
-- Créer une table
CREATE TABLE client (
id_client INT PRIMARY KEY AUTO_INCREMENT,
nom VARCHAR(50),
email VARCHAR(100) NOT NULL UNIQUE
);
-- Modifier une table
ALTER TABLE client ADD colonne_age INT;
ALTER TABLE client DROP COLUMN colonne_age;
-- Supprimer une table
DROP TABLE client;
🔸 2.2 DML (Data Manipulation Language) – Manipulation des données
sql
CopierModifier
-- Insérer des données
INSERT INTO client (nom, email) VALUES ('Jean', 'jean@[Link]');
-- Mettre à jour
UPDATE client SET nom = 'Jean Dupont' WHERE id_client = 1;
-- Supprimer
DELETE FROM client WHERE id_client = 1;
🔸 2.3 DQL (Data Query Language) – Requêtes
sql
CopierModifier
-- Sélection simple
SELECT * FROM client;
-- Sélection avec condition
SELECT nom FROM client WHERE email LIKE '%@[Link]';
-- Trier
SELECT * FROM client ORDER BY nom ASC;
-- Limiter le nombre
SELECT * FROM client LIMIT 10;
-- Agrégation
SELECT COUNT(*) FROM client;
SELECT AVG(age) FROM client;
🔸 2.4 Requêtes avec jointures
sql
CopierModifier
-- Jointure interne
SELECT [Link], commande.date_commande
FROM client
JOIN commande ON client.id_client = commande.id_client;
-- Jointure externe gauche
SELECT [Link], commande.date_commande
FROM client
LEFT JOIN commande ON client.id_client = commande.id_client;
🔸 2.5 Contraintes et clés
sql
CopierModifier
-- Ajouter une clé étrangère
ALTER TABLE commande
ADD CONSTRAINT fk_client
FOREIGN KEY (id_client) REFERENCES client(id_client);
🔸 2.6 Vues
sql
CopierModifier
-- Créer une vue
CREATE VIEW vue_clients_gmail AS
SELECT * FROM client WHERE email LIKE '%@[Link]';
-- Utiliser une vue
SELECT * FROM vue_clients_gmail;
🔸 2.7 Autres (index, procédures…)
sql
CopierModifier
-- Créer un index
CREATE INDEX idx_nom ON client(nom);
-- Procédure stockée simple
DELIMITER //
CREATE PROCEDURE liste_clients()
BEGIN
SELECT * FROM client;
END;
//
DELIMITER ;
CALL liste_clients();
Bien sûr ! Voici une explication claire et illustrée des jointures internes et externes
en SQL, utilisées pour combiner des données provenant de plusieurs tables.
🔷 1. JOINTURE INTERNE (INNER JOIN)
📌 Définition :
La jointure interne (INNER JOIN) ne garde que les lignes qui ont des
correspondances dans les deux tables.
🔧 Syntaxe :
sql
CopierModifier
SELECT *
FROM tableA
INNER JOIN tableB ON [Link] = [Link];
📊 Exemple :
Table Client :
id_client nom
1 Alice
2 Bob
3 Charly
Table Commande :
id_commande id_client date
101 1 2024-01-01
102 2 2024-01-02
103 4 2024-01-03
Requête :
sql
CopierModifier
SELECT [Link], [Link]
FROM Client
INNER JOIN Commande ON Client.id_client = Commande.id_client;
Résultat :
nom date
Alice 2024-01-01
Bob 2024-01-02
🔎 Le client Charly (id=3) est exclu car il n’a pas passé de commande. Et la commande
103 (id_client=4) est exclue car ce client n'existe pas dans la table Client.
🔷 2. JOINTURE EXTERNE (OUTER JOIN)
📌 Définition :
La jointure externe garde toutes les lignes d’au moins une des deux tables, même
si elles n’ont pas de correspondance dans l’autre.
🔹 a) LEFT JOIN (Jointure externe gauche)
Garde toutes les lignes de la table de gauche, même sans correspondance
dans la droite.
Les colonnes de la droite seront NULL s’il n’y a pas de correspondance.
Requête :
sql
CopierModifier
SELECT [Link], [Link]
FROM Client
LEFT JOIN Commande ON Client.id_client = Commande.id_client;
Résultat :
nom date
Alice 2024-01-01
Bob 2024-01-02
Charly NULL
🔎 Charly apparaît même s’il n’a pas passé de commande.
🔹 b) RIGHT JOIN (Jointure externe droite)
Garde toutes les lignes de la table de droite, même sans correspondance dans
la gauche.
Requête :
sql
CopierModifier
SELECT [Link], [Link]
FROM Client
RIGHT JOIN Commande ON Client.id_client = Commande.id_client;
Résultat :
nom date
Alice 2024-01-01
Bob 2024-01-02
NULL 2024-01-03
🔎 La commande 103 apparaît même si son client (id=4) n'existe pas.
🔹 c) FULL OUTER JOIN (Jointure externe complète)
Garde toutes les lignes des deux tables, même sans correspondance.
🛑 ⚠️MySQL ne supporte pas FULL OUTER JOIN directement, mais on peut le
simuler :
sql
CopierModifier
SELECT [Link], [Link]
FROM Client
LEFT JOIN Commande ON Client.id_client = Commande.id_client
UNION
SELECT [Link], [Link]
FROM Client
RIGHT JOIN Commande ON Client.id_client = Commande.id_client;
🔍 Résumé des différences
Type de jointure Données conservées
INNER JOIN Lignes communes (match dans les deux tables)
LEFT JOIN Toutes les lignes de gauche + match dans la droite
RIGHT JOIN Toutes les lignes de droite + match dans la gauche
FULL OUTER JOIN Toutes les lignes de gauche et de droite
Si tu veux, je peux te montrer un exemple complet avec code SQL et jeu de données à
tester dans MySQL. Tu veux que je te le prépare ?
Vous avez dit :
c'est quoi la table gauche et droite exactement
ChatGPT a dit :
Très bonne question 👇
✅ C’est quoi la table de gauche et la table de droite dans une jointure SQL ?
Dans une requête SQL avec jointure, la table de gauche est simplement la première
table que tu mentionnes après le FROM, et la table de droite est celle que tu
mentionnes après le JOIN.
🔷 Exemple simple :
sql
CopierModifier
SELECT *
FROM Client
LEFT JOIN Commande ON Client.id_client = Commande.id_client;
Table de gauche → Client (car elle vient après FROM)
Table de droite → Commande (car elle vient après LEFT JOIN)
🔷 Visuellement :
text
CopierModifier
FROM JOIN
Client ← Commande
↑ gauche ↑ droite
✅ Pourquoi c’est important ?
Parce que dans une LEFT JOIN, MySQL :
Prend toutes les lignes de la table de gauche
Et y associe les lignes correspondantes de la table de droite
S’il n’y a pas de correspondance, les colonnes de la table de droite seront
NULL
🔸 Autre exemple avec RIGHT JOIN :
sql
CopierModifier
SELECT *
FROM Client
RIGHT JOIN Commande ON Client.id_client = Commande.id_client;
Ici, Commande est la table de droite
Donc on garde toutes les commandes, même si aucun client correspondant
n’existe
🔍 Astuce pour ne jamais te tromper :
Lis ta requête comme une phrase :
LEFT JOIN → garde tout ce qu’il y a à gauche (dans le FROM)
RIGHT JOIN → garde tout ce qu’il y a à droite (dans le JOIN)