1917 votes

Quelle est la différence entre INNER JOIN, LEFT JOIN, RIGHT JOIN et FULL JOIN ?

Quelle est la différence entre INNER JOIN , LEFT JOIN , RIGHT JOIN et FULL JOIN sur MySQL ?

2 votes

L'explication de Jeff Attwood avec les diagrammes de Venn pourrait vous aider. Une explication visuelle des jointures SQL

18 votes

FULL outer JOIN n'existe pas sur MySQL

3608voto

Pranay Rana Points 69934

En lisant cet article original sur Le projet Code vous aidera beaucoup : Représentation visuelle des jointures SQL .

alt text

Consultez également ce post : SQL SERVER - Meilleures performances - LEFT JOIN ou NOT IN ? .

Retrouvez l'original sur le site : Différence entre JOIN et OUTER JOIN dans MySQL .

277 votes

Ces photos ne me plaisent pas. Pourquoi l'image en haut à droite n'est pas simplement SELECT * FROM TableA; ? Pourquoi l'image en haut à gauche n'est-elle pas simplement SELECT * FROM TableB; ? Pourquoi la photo du haut et du milieu n'est-elle pas SELECT * FROM A INTERSECT SELECT * FROM B ? etc

138 votes

J'ai un problème avec l'ensemble du concept : ce sont des représentations visuelles d'union, d'intersection, d'exception, etc. Ils n'ont pas de représentation visuelle de la projection et ne peuvent donc pas être joints. Je pense qu'il y aura plus de confusion que d'avantages lorsque le contexte est celui des jointures.

195 votes

Je ne suis pas d'accord. Je pense que ce sont de bonnes visualisations. En un coup d'œil, vous pouvez voir ce qui sera sélectionné dans les deux tables lorsque vous utilisez une certaine jointure. "onedaywhen" a commenté "pourquoi ne pas simplement dire select * from table a".... bien parce que c'est une jointure et qu'elle nécessite deux tables lol.

766voto

Brian Leeming Points 2292

INNER JOIN récupère tous les enregistrements qui sont communs aux deux tables en fonction de la clause ON fournie.

JOINT GAUCHE récupère tous les enregistrements de la table GAUCHE et les enregistrements liés de la table DROITE, mais si vous avez sélectionné certaines colonnes de la table DROITE, s'il n'y a pas d'enregistrements liés, ces colonnes contiendront NULL.

JOINT DROIT est similaire à la méthode ci-dessus mais récupère tous les enregistrements de la table DROITE.

FULL JOIN récupère tous les enregistrements des deux tables et met NULL dans les colonnes où les enregistrements liés n'existent pas dans la table opposée.

17 votes

C'est techniquement incorrect : "INNER JOIN récupère tous les enregistrements d'une table qui ont une entrée connexe dans une deuxième table" - INNER JOIN ne renvoie pas seulement les enregistrements d'une table.

7 votes

@nietaki quelle est la différence entre " "INNER JOIN obtient tous les enregistrements d'une table qui ont une entrée liée dans une deuxième table"" et "INNER JOIN obtient tous les enregistrements qui sont communs aux deux tables" ? ET "INNER JOIN récupère tous les enregistrements qui sont communs aux deux tables" ? Remarquez qu'il n'a jamais dit qu'il ne retournait que les enregistrements d'une seule table.

1 votes

@barlop OK je vois que le commentateur Nietaki pense que dans la première déclaration, l'affirmation était que cela renvoie juste les enregistrements d'une table . La dernière déclaration est beaucoup plus ambiguë et n'explique pas ce que fait la jointure interne. Donc c'est également faux.

21voto

Abdul Saboor Points 775

8voto

Cups Points 3929

L'explication de Jeff Attwood avec les diagrammes de Venn pourrait vous aider.

Une explication visuelle des jointures SQL

7voto

Charlie Martin Points 62306

Ce que tu dois faire, c'est lire des articles sur l'algèbre relationnelle. Voici l'article de Wiki sur rejoint mais lisez l'article de Wnole.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X