Si nous 内连接
interrogeons les données en utilisant :
Use inner join - on
clause : afficher toutes les informations correspondantes
select *
from emp e
inner join dept d
on e.deptno = d.deptno;
inner join - on
Inconvénients de la clause :
- 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
- 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,outer
il 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 mysql
elle n'est pas prise en charge dans , mais oracle
elle 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
union
Cependant, cette logique peut être implémentée à l'aide de la syntaxe , et le mot-clé union
repré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 all
L'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;
mysql
La 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 ( oracle
le support est pris en charge).