Créa-blog

Ressources pour développeur web

La requête JOIN en SQL avec PHP pour une BDD relationnelle

Accueil PHP 8 La requête JOIN en SQL avec PHP pour une BDD relationnelle

Les bases de données relationnelles sont au cœur de nombreuses applications web modernes, et les requêtes SQL permettent de manipuler ces données efficacement. L’une des fonctionnalités les plus puissantes est l’opération JOIN en SQL, qui permet de combiner des données de plusieurs tables. Dans ce tutoriel, nous allons vous détailler comment utiliser les JOIN en SQL avec PHP de manière simple et avec des exemples concrets.

Qu’est-ce qu’un JOIN en SQL ?

Un JOIN est une opération SQL qui permet de combiner des lignes de deux ou plusieurs tables en utilisant une colonne commune entre elles. Il existe plusieurs types de JOIN :

  • INNER JOIN : Renvoie les enregistrements qui ont des valeurs correspondantes dans les deux tables.
  • LEFT JOIN (ou LEFT OUTER JOIN) : Renvoie tous les enregistrements de la table de gauche et les enregistrements correspondants de la table de droite. Si aucune correspondance n’est trouvée, les résultats de la table de droite seront NULL.
  • RIGHT JOIN (ou RIGHT OUTER JOIN) : Renvoie tous les enregistrements de la table de droite et les enregistrements correspondants de la table de gauche. Si aucune correspondance n’est trouvée, les résultats de la table de gauche seront NULL.
  • FULL JOIN (ou FULL OUTER JOIN) : Renvoie tous les enregistrements lorsqu’il y a une correspondance dans une des tables. Si aucune correspondance n’est trouvée, les résultats seront NULL de la table non correspondante.

Exemple Concret avec PHP

Imaginons une base de données simple pour une boutique en ligne qui possèdent deux tables : clients qui contient les informations des clients et commandes qui contient les informations des commandes passées par les clients.
Voici les structures simplifiées de ces tables :

Table clients

id_client nom
1 Alice
2 Jean
3 Michel

Table commandes

id_commande id_client produit
1 1 Ordinateur
2 1 Souris
3 2 Clavier

Utilisation de INNER JOIN en SQL avec PHP

Nous voulons afficher une liste des commandes avec le nom des clients. Pour cela, nous allons utiliser un INNER JOIN.
Voici comment écrire cette requête SQL et l’exécuter en PHP :

Pour rappel, INNER JOIN renvoie les enregistrements qui ont des valeurs correspondantes dans les deux tables.

// Connexion à la base de données
$host = 'localhost';
$db = 'ma_boutique';
$user = 'root';
$pass = '';

try {
    $pdo = new PDO("mysql:host=$host;dbname=$db;charset=utf8", $user, $pass);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    die("Erreur de connexion : " . $e->getMessage());
}

// Requête SQL avec INNER JOIN
$sql = "
    SELECT clients.nom, commandes.produit
    FROM clients
    INNER JOIN commandes ON clients.id_client = commandes.id_client
";

try {
    $stmt = $pdo->prepare($sql);
    $stmt->execute();

    $resultats = $stmt->fetchAll(PDO::FETCH_ASSOC);

    foreach ($resultats as $ligne) {
        echo "Client: " . $ligne['nom'] . " - Produit: " . $ligne['produit'] . "
"; } } catch (PDOException $e) { echo "Erreur de requête : " . $e->getMessage(); }

Explication du Code

  • Connexion à la base de données : Utilisation de PDO pour se connecter à la base de données MySQL.
  • Requête SQL : La requête sélectionne le nom du client et le produit commandé en utilisant un INNER JOIN. Cette opération combine les tables clients et commandes sur la colonne id_client commune.
  • Exécution de la requête : Préparation et exécution de la requête avec PDO.
  • Affichage des résultats : Parcours des résultats et affichage des informations.
SELECT clients.nom, commandes.produit
FROM clients
INNER JOIN commandes ON clients.id_client = commandes.id_client;

SELECT clients.nom, commandes.produit :
Nous sélectionnons la colonne nom de la table clients. Nous sélectionnons également la colonne produit de la table commandes.

FROM clients : Cette clause spécifie la table principale à partir de laquelle les données seront sélectionnées.

INNER JOIN commandes : Ce type de jointure retourne uniquement les enregistrements qui ont des valeurs correspondantes dans les deux tables. La table que nous voulons joindre à la table principale clients.

ON clients.id_client = commandes.id_client :
Cette clause spécifie la condition de jointure, c’est-à-dire la colonne sur laquelle les deux tables seront liées. La condition de jointure est que la colonne id_client de la table clients doit correspondre à la colonne id_client de la table commandes.

L’INNER JOIN combine les lignes des deux tables uniquement lorsque la condition spécifiée est remplie. Dans cet exemple, la condition est que la valeur de id_client dans la table clients doit être égale à la valeur de id_client dans la table commandes. Seules les lignes pour lesquelles cette condition est vraie seront incluses dans le résultat final.

Résultat

Alice a deux commandes (Ordinateur et Souris), donc elle apparaît deux fois dans le résultat, une fois pour chaque commande. Jean a une commande (Clavier), donc il apparaît une fois dans le résultat. En revanche, Michel n’a pas de commandes, donc il n’apparaît pas dans le résultat.

Utilisation de LEFT JOIN en SQL avec PHP

Voici un exemple de LEFT JOIN pour inclure tous les clients, même ceux qui n’ont pas passé de commande :

SELECT clients.nom, commandes.produit
FROM clients
LEFT JOIN commandes ON clients.id_client = commandes.id_client

Cette requête LEFT JOIN sert à combiner les tables clients et commandes. Cette opération sélectionne le nom des clients de la table clients et les produits associés de la table commandes, liant les deux tables sur la colonne commune id_client.

Le LEFT JOIN inclut toutes les lignes de la table clients, même si certaines n’ont pas de correspondance dans la table commandes. Ainsi, si un client n’a pas passé de commande, son nom apparaîtra toujours dans les résultats, mais la colonne produit sera remplie avec une valeur NULL. Par exemple, un client nommé Michel, qui n’a pas passé de commande, sera listé avec une valeur NULL pour le produit, tandis que des clients comme Alice et Jean, ayant passé des commandes, apparaîtront avec les produits qu’ils ont achetés.

Utilisation de RIGHT JOIN en SQL avec PHP

RIGHT JOIN retourne tous les enregistrements de la table de droite (commandes) et les enregistrements correspondants de la table de gauche (clients). Si aucune correspondance n’est trouvée, les résultats de la table de gauche seront NULL.

SELECT clients.nom, commandes.produit
FROM clients
RIGHT JOIN commandes ON clients.id_client = commandes.id_client

Dans cet exemple, nous allons obtenir une liste de tous les produits commandés, même si certains clients n’ont pas de nom associé (dans le cas où le client aurait été supprimé de la table clients).

Utilisation de FULL JOIN en SQL avec PHP

FULL JOIN combine les résultats de LEFT JOIN et RIGHT JOIN. MySQL ne supporte pas directement FULL JOIN, mais on peut le simuler en combinant LEFT JOIN et RIGHT JOIN avec une union.

SELECT clients.nom, commandes.produit
FROM clients
LEFT JOIN commandes ON clients.id_client = commandes.id_client
UNION
SELECT clients.nom, commandes.produit
FROM clients
RIGHT JOIN commandes ON clients.id_client = commandes.id_client

La requête SQL combine un LEFT JOIN et un RIGHT JOIN avec une union pour simuler un FULL JOIN.

La première partie utilise un LEFT JOIN pour sélectionner tous les clients et leurs commandes, incluant les clients sans commande, qui auront une valeur NULL pour les produits.

La seconde partie utilise un RIGHT JOIN pour inclure toutes les commandes, même celles sans clients, où les noms des clients seront NULL si aucune correspondance n’est trouvée.

L’union des résultats des deux jointures garantit que toutes les lignes de chaque table sont incluses, simulant ainsi un FULL JOIN.

Les JOIN en SQL sont essentiels pour travailler avec des bases de données relationnelles, et leur utilisation avec PHP est courante dans le développement d’applications web. En comprenant et en maîtrisant les différents types de JOIN (INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN), vous pouvez créer des requêtes puissantes pour extraire et manipuler des données efficacement. Utilisez ce tutoriel comme référence pour vos futurs projets et expérimentez avec différentes requêtes pour mieux comprendre leur fonctionnement.