[MySQL] Requête de jointure externe

Si nous 内连接interrogeons les données en utilisant :

Use inner join - onclause : afficher toutes les informations correspondantes

select * 
from emp e
inner join dept d
on e.deptno = d.deptno;

insérez la description de l'image ici

inner join - onInconvénients de la clause :

  1. Si le numéro de département est 40, aucune information sur l'employé n'est affichée et elle ne sera pas affichée dans la requête
  2. Un employé n'a pas d'informations sur le numéro de service et ne sera pas affiché dans la requête

Par conséquent, si vous utilisez une connexion interne pour interroger, les données affichées sont parfois incomplètes . Si nous voulons afficher des informations qui ne correspondent pas dans les deux tables, nous pouvons utiliser 外连接une requête.

Les jointures externes incluent :

  • Jointure externe gauche :left outer join
  • Jointure externe droite :right outer join

PS : En cours d'utilisation,outeril peut être omis.

En utilisant la jointure externe gauche, les informations de la table de gauche peuvent afficher les données même si elles ne correspondent pas ;
en utilisant la jointure externe droite, les informations de la table de droite peuvent afficher les données même si elles ne correspondent pas.

Jointure externe complète :full outer join

Cette syntaxe affichera toutes les données non concordantes dans les tables de gauche et de droite , mais mysqlelle n'est pas prise en charge dans , mais oracleelle l'est dans .

select *
from emp e
full outer join dept d
on e.deptno = d.deptno;

Renvoie une erreur de syntaxe 1064 :

1064 - Vous avez une erreur dans votre syntaxe SQL ; consultez le manuel correspondant à la version de votre serveur MySQL pour connaître la bonne syntaxe à utiliser près de 'full outer join dept d on
e.deptno = d.deptno' à la ligne 3

unionCependant, cette logique peut être implémentée à l'aide de la syntaxe , et le mot-clé unionreprésente l'union des requêtes de jointure externe gauche et droite.

1. L'utilisation de fetch union dédupliqueraunion automatiquement , donc l'efficacité est faible .

select *
from emp e
left outer join dept d
on e.deptno = d.deptno
union -- 并集-去重-效率低
select * 
from emp e
right outer join dept d
on e.deptno = d.deptno;

2. union allL'union est utilisée sans déduplication , donc l'efficacité est élevée .

select *
from emp e
left outer join dept d
on e.deptno = d.deptno
union all -- 并集-不去重-效率高
select * 
from emp e
right outer join dept d
on e.deptno = d.deptno;

mysqlLa prise en charge des opérations d'ensemble est faible, seules les opérations d'union sont prises en charge, les opérations d'intersection et de différence ne sont pas prises en charge ( oraclele support est pris en charge).

Je suppose que tu aimes

Origine blog.csdn.net/hold_on_qlc/article/details/130460584
conseillé
Classement