oujood.com

MySQL Joindre deux ou plusieurs tables avec le mot clé JOIN

Dans MySQL quand vous divisez les données en deux tables ou plus, vous pouvez récupérer les enregistrements combinés de ces tables en utilisant des jointures.
Les jointures MySQL sont utilisées avec l'instruction SELECT. Ils sont utilisés pour récupérer des données de plusieurs tables. On l'exécute chaque fois que l'on a besoin d'extraire des enregistrements de deux tables ou plus.

chercher |

L'instruction JOIN por joindre deux tables ou plus

Vous pouvez combiner les enregistrements de deux ou plusieurs tables, sur la base d'une colonne commune entre elles, en utilisant l'instruction JOIN.

Il existe trois types de jointures MySQL:

INNER JOIN (ou plutôt on utilise simplement JOIN )
LEFT OUTER JOIN (ou plutôt on utilise simplement LEFT JOIN)
RIGHT OUTER JOIN (ou plutôt on utilise simplement RIGHT JOIN)

Les jointures MySQL sont utilisées avec l'instruction SELECT. Ils sont utilisés pour récupérer des données de plusieurs tables. On l'exécute chaque fois que l'on a besoin d'extraire des enregistrements de deux tables ou plus.

Le INNER JOIN de MySQL

Le INNER JOIN est utilisée pour renvoyer toutes les lignes de plusieurs tables pour lesquelles la condition de jointure est satisfaite. Il s'agit du type de jointure le plus courant. La syntaxe de la "jointure interne" est la suivante :

SELECT colonnes FROM table1 INNER JOIN table2 ON table1.colonne_commune = table2.colonne_commune

Exemple : Supposons que nous avons créé une table sous le nom CLIENTS et que nous y avons introduit des données comme indiqué ci-dessous.

 CREATE TABLE  IF NOT EXISTS CLIENTS(
	ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
	PRENOM CHAR(20) NOT NULL,
	NOM CHAR(20),
	ADRESSE CHAR(200)),
	PHONE LONG,
	EMAIL CHAR(100),
	FAVORI INT
)
requete_sql = "INSERT INTO CLIENTS(ID,PRENOM, NOM, ADRESSE, PHONE, EMAIL, FAVORI) 
	VALUES (%s, %s, %s, %s, %s, %s, %s)"
    valeur = [ (101,'Marcus','Mohanus', '40 lot 1 paris','0676160137','marcus@mon_mail.com',  201),
      (102,'Peter', 'Neel', '43 rue 1 quartier B ville G', '0522722976','Peter@mon_mail.com', 202),
      (103,'Amy', 'Barik', '35 Av B bloc 7 ville C', '0742553500','amy@mon_mail.com',''),
      (104,'Raja', 'Moufid', '32 BV L ville D', '0645782206','raja@mon_mail.com','')
      ]
Puis une table sous le nom PRODUITS et que nous y avons introduit des données comme indiqué ci-dessous.

CREATE TABLE  IF NOT EXISTS PRODUITS(
	ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
	PRODUIT(20) NOT NULL,
	PRIX FLOAT
)
requete_sql = "INSERT INTO PRODUITS(ID,PRODUIT, PRIX) 
	VALUES (%s, %s, %s)"
    valeur = [ (201,'Chocolat',15.00),
      (202,'Bombon',5.25 ),
      (203,'Huile', 10.75 ),
      (204,'Lait écrémé', 1.25 )]
Dans la colonne FAVORI bous avons introduit le ID du Produit favori du CLIENTS.
Doncles deus tables sont jointes par une colonne commune soit:
la colonne FAVORI de la table CLIENTS et la colonne ID de la table PRODUITS.

Même si les deux colonnes portent chacune un nom différent dans chaque table mais il s'agit d'une colonne commune vu la nature de leur contenu.

  Copier le code

# Importation des module nécessaires
import mysql.connector

try:
#Créer une connexion à la base de données
    conn = mysql.connector.connect(
    host = "localhost",
    user = "votre nom utilisateur",
	passwd = "votre mot de passe",
    database="oujood_py"
    )
# préparation d'un objet curseur
    curseurObjet = conn.cursor()
#Suppression de la table EMPLOYEE si elle existe déjà.
    curseurObjet.execute("DROP TABLE IF EXISTS CLIENTS")
    #Creation de la  table CLIENTS
    requete ='''CREATE TABLE CLIENTS(
        ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
        PRENOM CHAR(20) NOT NULL,
        NOM CHAR(20),
        ADRESSE CHAR(200),
        PHONE LONG,
        EMAIL CHAR(50) NOT NULL,
        FAVORI INT
        )'''

    curseurObjet.execute(requete)
    
    requete_sql = "INSERT INTO CLIENTS(ID,PRENOM, NOM, ADRESSE, PHONE, EMAIL, FAVORI) VALUES (%s, %s, %s, %s, %s, %s, %s)"
    valeur = [ (101,'Marcus','Mohanus', '40 lot 1 paris','0676160137','marcus@mon_mail.com',201),
      (102,'Peter', 'Neel', '43 rue 1 quartier B ville G', '0522722976','Peter@mon_mail.com',202),
      ]
#  Exécution de la commande SQL
    curseurObjet.executemany(requete_sql, valeur)
    conn.commit()
    
    requete_sql1 = "INSERT INTO CLIENTS(PRENOM, NOM, ADRESSE, PHONE, EMAIL) VALUES ( %s, %s, %s, %s, %s)"
    valeur = [ ('Amy', 'Barik', '35 Av B bloc 7 ville C', '0742553500','amy@mon_mail.com'),
      ('Raja', 'Moufid', '32 BV L ville D', '0645782206','raja@mon_mail.com'),
      ]   
#  Exécution de la commande SQL
    curseurObjet.executemany(requete_sql1, valeur)
    conn.commit()

#Suppression de la table EMPLOYEE si elle existe déjà.
    curseurObjet.execute("DROP TABLE IF EXISTS PRODUITS")

    sql = '''CREATE TABLE  IF NOT EXISTS PRODUITS(
        ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
        PRODUIT CHAR(20),
        PRIX INT
    )''' 

    curseurObjet.execute(sql)
    conn.commit()

    sql1 = """INSERT INTO PRODUITS(ID,PRODUIT, PRIX) VALUES 
     (201, 'Chocolat', 15),
     (202, 'Bombon', 5),
     (203, 'Huile', 10),
     (204, 'Lait écrémé', 1)
    """
    curseurObjet.execute(sql1)
    conn.commit()

#  Récupérer du résultat
    sql2 = "SELECT * from CLIENTS INNER JOIN PRODUITS ON CLIENTS.FAVORI = PRODUITS.ID"

# Exécution de la commande SQL
    curseurObjet.execute(sql2)

# Affichage du résultat
    resultat = curseurObjet.fetchall();
    for x in resultat:
      print(x)
	  
except mysql.connector.Error as error:
    print("Échec : {}".format(error),"\n")
finally:
    if conn.is_connected():
        curseurObjet.close()
        conn.close()
        print("\n La connexion MySQL est fermée")
Nous reprenons le même exemple mais cette fois au lieu de sélectionner toutes les colonnes, nous pouvons ne sélectionner que les colonnes dont nous avons besoin.
Par exemple nous choisissons la colonne PRENOM dans la table CLIENTS et le colonne PRODUIT dans la TABLE PRODUITS comme le montre l'exemple suivant:

  Copier le code

# Importation des module nécessaires
import mysql.connector

try:
#Créer une connexion à la base de données
    conn = mysql.connector.connect(
    host = "localhost",
    user = "votre nom utilisateur",
	passwd = "votre mot de passe",
    database="oujood_py"
    )
# préparation d'un objet curseur
    curseurObjet = conn.cursor()

#  Récupérer du résultat
    sql2 = "SELECT CLIENTS.PRENOM , PRODUITS.PRODUIT from CLIENTS INNER JOIN PRODUITS ON CLIENTS.FAVORI = PRODUITS.ID"

# Exécution de la commande SQL
    curseurObjet.execute(sql2)

# Affichage du résultat
    resultat = curseurObjet.fetchall();
    for x in resultat:
      print(x)

except mysql.connector.Error as error:
    print("Échec : {}".format(error),"\n")
finally:
    if conn.is_connected():
        curseurObjet.close()
        conn.close()
        print("\n La connexion MySQL est fermée")

Note : Les clients qui n'ont pas de produit favori, ne sont pas inclus dans le résultat, à savoir : Amy et raja

MySQL Left Outer Join

La jointure LEFT OUTER renvoie toutes les lignes de la table de gauche spécifiée dans la condition ON et seulement les lignes de l'autre table où la condition de jointure est remplie.
Exemple : Ici nous reprenons le même exemple ci-dessus en utilisant : LEFT OUTER

  Copier le code

# Importation des module nécessaires
import mysql.connector

try:
#Créer une connexion à la base de données
    conn = mysql.connector.connect(
    host = "localhost",
    user = "votre nom utilisateur",
	passwd = "votre mot de passe",
    database="oujood_py"
    )
# préparation d'un objet curseur
    curseurObjet = conn.cursor()

#  Récupérer du résultat
    sql2 = "SELECT CLIENTS.PRENOM , PRODUITS.PRODUIT from CLIENTS LEFT JOIN PRODUITS ON CLIENTS.FAVORI = PRODUITS.ID"

# Exécution de la commande SQL
    curseurObjet.execute(sql2)

# Affichage du résultat
    resultat = curseurObjet.fetchall();
    for x in resultat:
      print(x)
    
except mysql.connector.Error as error:
    print("Échec : {}".format(error),"\n")
finally:
    if conn.is_connected():
        curseurObjet.close()
        conn.close()
        print("\n La connexion MySQL est fermée")

MySQL RIGHT OUTER JOIN

RIGHT OUTER JOIN retourne toutes les lignes de la table à DROITE spécifiée dans la condition ON et seulement les lignes de l'autre table où la condition de jointure est remplie.

  Copier le code

# Importation des module nécessaires
import mysql.connector

try:
#Créer une connexion à la base de données
    conn = mysql.connector.connect(
    host = "localhost",
    user = "votre nom utilisateur",
	passwd = "votre mot de passe",
    database="oujood_py"
    )
# préparation d'un objet curseur
    curseurObjet = conn.cursor()

#  Récupérer du résultat
    sql2 = "SELECT CLIENTS.PRENOM , PRODUITS.PRODUIT from CLIENTS RIGHT JOIN PRODUITS ON CLIENTS.FAVORI = PRODUITS.ID"

# Exécution de la commande SQL
    curseurObjet.execute(sql2)

# Affichage du résultat
    resultat = curseurObjet.fetchall();
    for x in resultat:
      print(x)
  
except mysql.connector.Error as error:
    print("Échec : {}".format(error),"\n")
finally:
    if conn.is_connected():
        curseurObjet.close()
        conn.close()
        print("\n La connexion MySQL est fermée")


Voir aussi nos tutoriel :

fonction stripos, stripos

Recherche la première occurrence dans une chaîne, sans tenir compte de la casse

jQuery Liste des méthodes AJAX

jQuery Liste des méthodes AJAX

Balise small

Définit le texte plus petit