web-dev-qa-db-fra.com

Joindre plusieurs tables en SQL

Can sombody m'explique sur les jointures?

La jointure interne sélectionne des données communes en fonction de la condition where.

La jointure externe gauche sélectionne toutes les données de gauche indépendamment de la commune, mais prend les données communes de la table de droite et inversement pour Droite externe 

Je connais les bases mais la question reste posée quand il s’agit de rejoindre 5, 8, 10 tables. 

Supposons que j'ai 10 tables à rejoindre. Si j'ai une jointure interne avec les 5 premières tables et que j'essaie maintenant d'appliquer une jointure gauche avec la 6ème table, comment fonctionnera la requête? 

Je veux dire maintenant le jeu de résultats des 5 premières tables sera considéré comme une table de gauche et la 6ème sera considéré comme une table de droite? Ou seulement la cinquième table sera considérée comme étant à gauche et la 6ème à droite? S'il vous plaît aidez-moi à ce sujet.

14
Prince

Lorsque vous joignez plusieurs tables, la sortie de chaque jointure forme logiquement une table virtuelle qui entre dans la jointure suivante.

Ainsi, dans l'exemple de votre question, le résultat composite de la réunion des 5 premières tables serait traité comme la table de gauche.

Voir Affiche sur le traitement des requêtes logiques d'Itzik Ben-Gan pour plus d'informations à ce sujet. 

Les tables virtuelles impliquées dans les jointures peuvent être contrôlées en positionnant la clause ON. Par exemple

SELECT *
FROM   T1
       INNER JOIN T2
         ON T2.C = T1.C
       INNER JOIN T3
                  LEFT JOIN T4
                    ON T4.C = T3.C
         ON T3.C = T2.C 

est équivalent à (T1 Inner Join T2) Inner Join (T3 Left Join T4)

20
Martin Smith

Il est utile de penser à JOIN dans l'ordre, le premier est correct.

SELECT *
  FROM a
  INNER JOIN b ON b.a = a.id
  INNER JOIN c ON c.b = b.id
  LEFT JOIN d ON d.c = c.id
  LEFT JOIN e ON e.d = d.id

Seraient tous les champs de a et b et c où tous les critères ON correspondent, plus les valeurs de d où ses critères correspondent, ainsi que tout le contenu de e lorsque tous ses critères correspondent.

Je sais que RIGHT JOIN est tout à fait acceptable, mais j’ai constaté dans mon expérience que c’est inutile - je ne fais presque que joindre les choses de gauche à droite. 

6
Colselaw

> Simple INNER JOIN VIEW code ...

CREATE VIEW room_view
AS SELECT a.*,b.*
FROM j4_booking a INNER JOIN j4_scheduling b
on a.room_id = b.room_id;
1
Manu R S

Vous pouvez appliquer rejoindre comme ça ..

select a.*,b.*,c.*,d.*,e.*  
from [DatabaseName].[Table_a] a 
INNER JOIN [DatabaseName].[Table_b] b ON a.id = b.id 
INNER JOIN [DatabaseName].[Table_c] c ON b.id=c.id 
INNER JOIN [DatabaseName].[Table_d] d on c.id=d.id 
INNER JOIN [DatabaseName].[Table_e] e on d.id=e.id where a.con=5  and 
b.con=6

Ici, à la place d'un. * Et dans quelle condition, vous pouvez afficher la colonne (classée) que vous aimez et la condition correspondante dans la condition où. Vous pouvez insérer plus de table et de base de données selon votre choix. Mais attention, vous devez mentionner le nom de la base de données et son alias si vous travaillez dans une base de données différente. 

0
Bha15