Maison >base de données >tutoriel mysql >requête conjointe multi-tables mysql
INNER JOIN Dans MySQL, INNER JOIN est appelé une équijointure, ce qui signifie que vous devez spécifier les conditions d'équijoin. CROSS et INNER JOIN sont divisés ensemble dans MySQL.
Type de jointure de tables multiples
1 Le produit cartésien (jointure croisée) dans MySQL peut être CROSS JOIN ou omettre CROSS C'est-à-dire. , JOIN ou utilisez ',' tel que :
SELECT * FROM table1 CROSS JOIN table2 SELECT * FROM table1 JOIN table2 SELECT * FROM table1,table2
Étant donné que le résultat renvoyé est le produit des deux tables de données connectées, il n'est généralement pas recommandé de l'utiliser lorsqu'il y a des conditions WHERE, ON ou USING , car lorsqu'il y a trop d'éléments de table de données, cela sera très lent. Utilisez généralement LEFT [OUTER] JOIN ou RIGHT [OUTER] JOIN
2. INNER JOIN Dans MySQL, INNER JOIN est appelé une équijoin, c'est-à-dire que vous devez spécifier les conditions d'équijoin CROSS et INNER JOIN dans MySQL. divisés ensemble. join_table: table_reference [INNER | CROSS] JOIN table_factor [join_condition]
3. Les jointures externes dans MySQL sont divisées en jointures externes gauche et jointures droites, c'est-à-dire qu'en plus de renvoyer des résultats qui répondent aux conditions de jointure, les résultats qui ne remplissent pas les conditions de jointure dans la table de gauche (jointure gauche) ou de droite (jointure droite), NULL est utilisé en conséquence.
Exemple :
user表: id | name ——— 1 | libk 2 | zyfon 3 | daodao user_action表: user_id | action ————— 1 | jump 1 | kick 1 | jump 2 | run 4 | swim
instruction SQL :
select id, name, action from user as uleft join user_action a on u.id = a.user_id
Résultat :
id | name | action ——————————– 1 | libk | jump 结果1 1 | libk | kick 结果2 1 | libk | jump 结果3 2 | zyfon | run 结果4 3 | daodao | null 结果5 ---------------------
Analyse :
Remarquez qu'il existe également user_action Il existe un enregistrement de user_id=4, action=swim, mais il n'apparaît pas dans les résultats
Et l'utilisateur avec id=3, name=daodao dans la table user n'a pas d'enregistrement correspondant. dans user_action, mais il apparaît dans le jeu de résultats
Comme il s'agit désormais d'une jointure à gauche, tout le travail est basé sur la gauche.
Les résultats 1, 2, 3 et 4 sont tous les enregistrements dans la table de gauche et dans la table de droite, 5 est un enregistrement qui se trouve uniquement dans la table de gauche mais pas dans la table de droite
Principe de fonctionnement :
Lisez un enregistrement dans la table de gauche et sélectionnez toutes les tables de droite qui correspondent aux enregistrements (n) qui sont connectés pour former n enregistrements (y compris les lignes répétées, telles que le résultat 1 et le résultat 3). S'il n'y a pas de table à droite qui corresponde. à la condition, les champs connectés sont tous nuls. Continuez ensuite à lire le suivant.
Extension :
Nous pouvons utiliser la règle selon laquelle s'il n'y a pas de correspondance dans la table de droite, null sera affiché pour trouver tous les enregistrements qui sont dans la table de gauche mais pas dans le tableau de droite Faites attention au jugement utilisé. Cette colonne doit être déclarée non nulle.
Tels que :
select id, name, action from user as uleft join user_action a on u.id = a.user_idwhere a.user_id is NULL
(Remarque : 1. Si la valeur de la colonne est nulle, elle doit être utilisée à la place de =NULL
2. Ici, le a.user_id la colonne doit être déclarée comme NON NULL.)
Le résultat du sql ci-dessus :
id | name | action ————————– 3 | daodao | NULL
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!