Maison >base de données >tutoriel mysql >requête conjointe multi-tables mysql

requête conjointe multi-tables mysql

(*-*)浩
(*-*)浩original
2019-05-09 16:15:2524529parcourir

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.

requête conjointe multi-tables 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn