Maison >base de données >tutoriel mysql >Comment utiliser la jointure interne et la jointure gauche dans MySQL

Comment utiliser la jointure interne et la jointure gauche dans MySQL

WBOY
WBOYavant
2023-06-01 19:37:251008parcourir

Différences

Les retours sont différents
1. La jointure interne renvoie uniquement les lignes avec des champs de jointure égaux dans les deux tables
2. Le nombre de jointures gauches est inférieur ou égal au nombre d'enregistrements dans les tables de gauche et de droite.

Numéros différents
1. La jointure interne renvoie tous les enregistrements de la table de gauche et les enregistrements égaux au champ de jointure de la table de droite.
2. Le nombre de jointures gauches est le même que le nombre d'enregistrements dans le tableau de gauche.

Les attributs d'enregistrement sont différents
1 Les attributs d'enregistrement insuffisants pour la jointure interne seront directement supprimés.

Scénario de jointure interne

Concevez deux tables :

  • table de canal de canal : identifiant de canal, nom de canal, etc.

  • table de module de module : identifiant du module, nom du module, channel_id.

Lorsque la page affiche des chaînes, il peut y avoir une nouvelle chaîne mais pas de module. Pour le moment, la jointure interne ne peut pas être utilisée, sinon le module nouvellement ajouté ne peut pas être interrogé, utilisez donc la jointure gauche

 select channel.* from  channel left join modules on channel.id = modules.channel_id
 where page_id=1
 group by channel.id order by channel.new_sort asc , channel.id desc

1. page_id fait-il référence ? Sous le type de page, il est défini dans la table des canaux pour distinguer le type de page 2. Un ID de canal peut avoir plusieurs modules à associer, il doit donc être regroupé en fonction de l'ID de canal. 3. new_sort peut. définir l'affichage de tri des chaînes. De plus, le tri doit afficher en premier la chaîne créée en premier.


Dans les cas suivants, les chaînes nouvellement créées ne seront pas affichées, et les chaînes sans modules ne seront pas non plus affichées.

select channel.*  from channel inner join modules on channel.id=modules.channel_id
where page_id=1 group by channel.id order by channel.new_sort asc , channel.id desc

Enfin : j'ai quelques doutes. La chaîne n'affiche que les informations liées à la chaîne et n'utilise pas les informations du module associé, j'estime donc que cela peut répondre aux besoins. Je mettrai à jour si je rencontre des problèmes plus tard

 select channel.* from  channel
 where page_id=1 order by channel.new_sort asc , channel.id desc

Euh~ Pour ajouter à la question, le problème restant ci-dessus est que l'ID du module doit être interrogé sur la page, il est donc lié.

J'ai déjà rencontré un scénario de jointure interne, et je l'ajouterai plus tard~

scénario de jointure interne

Ajoutez une nouvelle table de stratégie Policy_lib, puis créez une table intermédiaire Channel_policy pour enregistrer l'association entre le canal Channel et Policy_lib table politique.

Alors évidemment, le SQL est écrit comme ceci

select policy_lib.id,channel_policy.policy_id,channel_policy.channel_id,channel.id  from policy_lib inner join channel_policy on channel_policy.policy_id=policy_lib.id 
inner join channel on channel.id=channel_policy.channel_id

En utilisant la jointure interne, évidemment la requête de résultat ne sera pas vide. Si vous utilisez la jointure gauche, au cas où il y aurait des données sales dans la table, il y aurait des données à gauche et à droite. est l'espace-temps, vous devez vous demander si c'est pendant le traitement que la disponibilité est clairement déraisonnable.

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer