Combiner les informations provenant de plusieurs tables de MySQL, avec les rejoindre

Vous pouvez utiliser un INSCRIPTION SELECT interroger de combiner des informations de plus d'une table MySQL. Avec JOIN, les tables sont combinés côte à côte, et les informations sont extraites des deux tables.

Les tables sont combinés par correspondance des données dans une colonne - la colonne qu'ils ont en commun. Le tableau des résultats combinée produite par une jointure contient toutes les colonnes des deux tables. Par exemple, si Tableau 1 comporte deux colonnes (ID membres et hauteur), Et table2 comporte deux colonnes (ID membres et poids), Une jointure résultats dans un tableau avec quatre colonnes: ID membres (de Tableau 1), hauteur, ID membres (de table2), Et poids.

Les deux types les plus courants de jointures sont un jointure interne Et un jointure externe. La différence entre un intérieur et jointure externe est dans le nombre de lignes inclus dans le tableau des résultats.

  • Jointure interne: Le tableau des résultats produits par une jointure interne ne contient que des lignes qui existaient dans les deux tables.

  • Jointure externe: Le tableau combinée produite par une jointure externe contient toutes les lignes qui existaient dans une table avec des blancs dans les colonnes pour les lignes qui ne existaient dans le deuxième tableau.

Par exemple, si Tableau 1 contient une ligne pour Joe et une rangée pour Sally, et table2 contient seulement une ligne pour Sally, une jointure interne devrait contenir une seule ligne: la ligne de Sally. Cependant, une jointure externe devrait contenir deux rangées - une rangée pour Joe et une rangée pour Sally - même si la ligne de Joe aurait un champ vide pour poids.

Le tableau des résultats pour la jointure externe contient toutes les lignes pour une table. Si l'une des lignes de cette table ne existent pas dans le deuxième tableau, les colonnes de la deuxième table sont vides. De toute évidence, le contenu de la table de résultats sont déterminés par la table qui contribue toutes ses lignes, nécessitant le deuxième tableau de l'égaler.

Deux sortes de jointures externes de contrôle qui définit les lignes de table et qui doit correspondre: un LEFT JOIN et un RIGHT JOIN.

Vous utilisez différente SELECT requêtes pour une jointure interne et les deux types de jointures externes. La requête suivante est une jointure interne:

Columnnamelist SELECT FROM table1, table2WHERE table1.col2 = table2.col2

Et ces requêtes sont jointures externes:

Columnnamelist SELECT FROM table1 LEFT JOIN table2ON table1.col1 = table2.col2SELECT columnnamelist FROM table1 RIGHT JOIN table2ON table1.col1 = table2.col2



Dans les trois requêtes, Tableau 1 et table2 sont les tables à assembler. Vous pouvez vous joindre plus de deux tables. Dans les deux requêtes, col1 et col2 sont les noms des colonnes étant adaptés pour joindre les tables. Les tableaux sont mis en correspondance sur la base des données contenues dans ces colonnes. Ces deux colonnes peuvent avoir le même nom ou des noms différents, mais ils doivent contenir le même type de données.

Comme un exemple de jointures internes et externes, envisager un catalogue de vêtements avec deux tables. Une table est Produit, avec les deux colonnes Nom et Type maintenir les données suivantes:

Nom TypeT-shirt shirtdress chemise ShirtJeans Pantalons

Le deuxième tableau est Couleur, avec deux colonnes Nom et Couleur maintenir les données suivantes:

Nom ColorT-shirt whiteT-shirt redLoaferblack

Vous avez besoin de poser une question qui nécessite des informations des deux tables. Si vous faites une jointure interne avec la requête suivante:

SELECT * FROM product, couleurs où Product.Name = Color.Name

vous obtenez le tableau des résultats suivants avec quatre colonnes: Nom (de Produit), Type, Nom (de Couleur), Et Couleur.

Nom TypeName ColorT-shirt shirt T-shirt whiteT-shirt shirt T-shirt rouge

Notez que seul T-shirt apparaît dans le tableau des résultats - parce que T-shirt était à la fois dans des tables d'origine, avant la jonction. D'autre part, supposons que vous faites une jointure externe gauche avec la requête suivante:

SELECT * FROM GAUCHE DE PRODUITS SE JOINDRE ColorON produit. Name = couleur. Nom

Vous obtenez le tableau des résultats ci-dessous, avec les quatre mêmes colonnes - Nom (de Produit), Type, Nom (de Couleur), Et Couleur - mais avec des lignes différentes:

Nom TypeName ColorT-shirt shirt T-shirt whiteT-shirt shirt T-shirt redDress shirt Chemise Pantalons Jeans 

Ce tableau a quatre rangées. Il a les mêmes deux premières lignes de jointure que l'intérieur, mais il comporte deux rangées supplémentaires - les lignes qui sont dans le Produit table sur la gauche mais pas dans le Couleur table. Notez que les colonnes de la table Couleur sont vides pour les deux dernières lignes.

Et, sur la troisième main, supposons que vous faites une jointure externe droite avec la requête suivante:

SELECT * FROM product RIGHT JOIN ColorON Product.petName = couleur. Nom

Vous obtenez le tableau des résultats ci-dessous, avec les quatre mêmes colonnes, mais avec encore des lignes différentes:

petname petType petname petColorT-shirt shirt T-shirt whiteT-shirt shirt T-shirt rougeMocassins noirs

Notez que ces résultats contiennent toutes les lignes pour le Couleur tableau de droite, mais pas pour le Produit table. Remarquez les blancs dans les colonnes de la Produit table, qui ne possède pas une ligne pour Mocassins.

Parfois, il est utile de savoir quelles lignes d'une table ont pas d'entrées correspondantes dans une autre table. Par exemple, supposons que vous voulez savoir qui n'a jamais connecté à votre section réservée aux membres. Supposons que vous avez une table avec le nom de connexion du membre (Membres) Et une autre table avec les dates d'ouverture de session (S'identifier).

Vous pouvez poser cette question en choisissant parmi les deux tableaux. Vous pouvez trouver les noms de connexion qui ne possèdent pas une entrée dans le S'identifier table avec la requête suivante:

LoginName SELECT DE GAUCHE membres INSCRIPTION LoginON Member.loginName = Login.loginNameWHERE Login.loginName IS NULL

Cette requête vous donne une liste de tous les noms de connexion dans le Membres table qui ne sont pas dans le S'identifier table.


» » » Combiner les informations provenant de plusieurs tables de MySQL, avec les rejoindre