Je connais les jointures dans SQL Server.
Par exemple. Il existe deux tableaux Tableau1, Tableau2.
Leurs structures de table sont les suivantes.
create table Table1 (id int, Name varchar (10))
create table Table2 (id int, Name varchar (10))
Données du tableau 1 comme suit:
Id Name
-------------
1 A
2 B
Données du tableau 2 comme suit:
Id Name
-------------
1 A
2 B
3 C
Si j'exécute les deux instructions SQL mentionnées ci-dessous, les deux sorties seront les mêmes
select *
from Table1
left join Table2 on Table1.id = Table2.id
select *
from Table2
right join Table1 on Table1.id = Table2.id
Veuillez expliquer la différence entre la jointure gauche et droite dans les instructions SQL ci-dessus.
sql
sql-server
join
left-join
right-join
Pankaj Agarwal
la source
la source
RIGHT JOIN
si nous pouvons atteindre le résultat souhaité avec justeLEFT JOIN
? : PSelect * from Table1 left join Table 2
renverra TOUS les enregistrements du tableau 1 plus les enregistrements coïncidents du tableau 2. L'inverseSelect * from Table1 right join Table 2
retournera TOUS les enregistrements du tableau 2 et les enregistrements coïncidents du tableau 1. J'espère que cela aide.Codeproject a cette image qui explique les bases simples des jointures SQL, tirée de: http://www.codeproject.com/KB/database/Visual_SQL_Joins.aspx
la source
JOIN Table_B b ON A.Key = B.Key
. La condition OU fonctionne très bien.Le tableau à partir duquel vous prenez des données est «GAUCHE».
La table que vous rejoignez est «DROITE».
JOINT GAUCHE: Prenez tous les éléments du tableau de gauche ET (uniquement) les éléments correspondants du tableau de droite.
JOINT DROIT: Prenez tous les éléments du tableau de droite ET (uniquement) les éléments correspondants du tableau de gauche.
Alors:
donne:
mais:
donne:
vous avez rejoint la table à droite avec moins de lignes sur la table avec plus de lignes
ET
encore une fois, vous avez rejoint la table à gauche avec moins de lignes sur la table avec plus de lignes
Essayez:
la source
(INNER) JOIN: renvoie les enregistrements qui ont des valeurs correspondantes dans les deux tables.
LEFT (OUTER) JOIN: Renvoie tous les enregistrements de la table de gauche et les enregistrements correspondants de la table de droite.
RIGHT (OUTER) JOIN: renvoie tous les enregistrements de la table de droite et les enregistrements correspondants de la table de gauche.
FULL (OUTER) JOIN: renvoie tous les enregistrements en cas de correspondance dans le tableau de gauche ou de droite
Par exemple, supposons que nous ayons deux tables avec les enregistrements suivants:
Jointure interne
Syntaxe
Appliquez-le dans votre exemple de table:
Le résultat sera:
Joint gauche
Appliquez-le dans votre exemple de table
Le résultat sera:
Jointure droite
Syntaxe:
Appliquez-le dans votre table samole:
Le résultat sera bw:
Jointure complète
Syntaxe:
Appliquez-le dans votre samp [le tableau:
Le résultat sera:
Pour INNER rejoint la commande n'a pas d'importance
Pour les jointures (GAUCHE, DROITE ou COMPLÈTE) EXTÉRIEURES, l'ordre importe
En savoir plus sur w3schools
la source
Le tableau dans le
from
dans cet exempletableA
, est sur le côté gauche de la relation.Donc, si vous voulez prendre toutes les lignes de la table de gauche (
tableA
), même s'il n'y a pas de correspondance dans la table de droite (tableB
), vous utiliserez la "jointure gauche".Et si vous voulez prendre toutes les lignes de la table de droite (
tableB
), même s'il n'y a pas de correspondance dans la table de gauche (tableA
), vous utiliserez leright join
.Ainsi, la requête suivante est équivalente à celle utilisée ci-dessus.
la source
Vous semblez demander: "Si je peux réécrire une syntaxe d'
RIGHT OUTER JOIN
utilisation,LEFT OUTER JOIN
alors pourquoi avoir uneRIGHT OUTER JOIN
syntaxe?" Je pense que la réponse à cette question est, parce que les concepteurs du langage ne voulaient pas imposer une telle restriction aux utilisateurs (et je pense qu'ils auraient été critiqués s'ils l'avaient fait), ce qui obligerait les utilisateurs à changer l'ordre des tableaux dans laFROM
clause dans certaines circonstances lorsque vous modifiez simplement le type de jointure.la source
Vos deux déclarations sont équivalentes.
La plupart des gens l'utilisent uniquement
LEFT JOIN
car cela semble plus intuitif et sa syntaxe universelle - je ne pense pas que tout le support SGBDRRIGHT JOIN
.la source
LEFT
mais pas,RIGHT
veuillez indiquer lesquels.RIGHT
etFULL OUTER JOIN
: sqlite.org/omitted.htmlJe pense que nous pouvons exiger une
AND
condition dans lawhere
clause du dernier chiffre deOuter Excluding JOIN
sorte que nous obtenions le résultat souhaitéA Union B Minus A Interaction B
. Je pense que la requête doit être mise à jour pourSi nous utilisons
OR
, nous obtiendrons tous les résultats deA Union B
la source
sélectionnez * dans le tableau 1, joignez à gauche le tableau 2 sur le tableau1.id = tableau2.id
Dans la première requête, la jointure gauche compare la table gauche table table1 à la table droite table table2 .
Dans lequel toutes les propriétés de table1 seront affichées, tandis que dans table2 seules ces propriétés seront affichées dans quelle condition se vérifie.
sélectionnez * dans le tableau 2, joignez à droite le tableau 1 sur le tableau1.id = tableau2.id
Dans la première requête, la jointure droite compare la table droite1 table table à gauche table table2 .
Dans lequel toutes les propriétés de table1 seront affichées, tandis que dans table2 seules ces propriétés seront affichées dans quelle condition se vérifie.
Les deux requêtes donneront le même résultat car l'ordre de déclaration de table dans la requête est différent comme vous déclarez table1 et table2 respectivement à gauche et à droite dans la première requête de jointure gauche , et déclarez également table1 et table2 à droite et à gauche respectivement dans la deuxième jointure droite requete.
C'est la raison pour laquelle vous obtenez le même résultat dans les deux requêtes. Donc, si vous voulez un résultat différent, exécutez respectivement ces deux requêtes,
sélectionnez * dans le tableau 1, joignez à gauche le tableau 2 sur le tableau1.id = tableau2.id
sélectionnez * dans le tableau 1, joignez à droite le tableau 2 sur le tableau1.id = tableau2.id
la source
Select * from Table1 t1 Left Join Table2 t2 on t1.id=t2.id
Par définition: Left Join sélectionne toutes les colonnes mentionnées avec le mot clé "select" du tableau 1 et les colonnes du tableau 2 qui correspondent aux critères après le mot clé "on".De même, Par définition: Right Join sélectionne toutes les colonnes mentionnées avec le mot-clé "select" du tableau 2 et les colonnes du tableau 1 qui correspondent aux critères après le mot-clé "on".
En se référant à votre question, les identifiants dans les deux tableaux sont comparés à toutes les colonnes nécessaires pour être jetées dans la sortie. Ainsi, les identifiants 1 et 2 sont communs dans les deux tables et, par conséquent, dans le résultat, vous aurez quatre colonnes avec les colonnes id et name des première et deuxième tables dans l'ordre.
*select * from Table1 left join Table2 on Table1.id = Table2.id
L'expression ci-dessus, elle prend tous les enregistrements (lignes) du tableau 1 et des colonnes, avec les identifiants correspondants du tableau 1 et du tableau 2, du tableau 2.
select * from Table2 right join Table1 on Table1.id = Table2.id**
De même, à partir de l'expression ci-dessus, il prend tous les enregistrements (lignes) du tableau 1 et des colonnes, avec les identifiants correspondants des tableaux 1 et 2, du tableau 2. (rappelez-vous, il s'agit d'une jointure droite, donc toutes les colonnes du tableau2 et non du tableau 1 sera considéré).
la source