Quelle est la différence entre CROSS JOIN et FULL OUTER JOIN dans SQL Server?
Sont-ils identiques ou pas? S'il vous plaît, expliquez. Quand utiliserait-on l'un ou l'autre?
la source
Quelle est la différence entre CROSS JOIN et FULL OUTER JOIN dans SQL Server?
Sont-ils identiques ou pas? S'il vous plaît, expliquez. Quand utiliserait-on l'un ou l'autre?
Une jointure croisée produit un produit cartésien entre les deux tables, renvoyant toutes les combinaisons possibles de toutes les lignes. Il n'a pas de on
clause parce que vous joignez simplement tout à tout.
A full outer join
est une combinaison de a left outer
et right outer
join. Il renvoie toutes les lignes des deux tables qui correspondent à la where
clause de la requête , et dans les cas où la on
condition ne peut pas être satisfaite pour ces lignes, il met des null
valeurs pour les champs non renseignés.
Cet article de wikipedia explique les différents types de jointures avec des exemples de sortie à partir d'un exemple d'ensemble de tables.
FROM t1 FULL OUTER JOIN t2 ON t1.id=t2.id
sera toujours plus rapide queFROM t1,t2 WHERE t1.id=t2.id
?outer join
plus rapide oucross join
?Une chose qui n'est pas toujours évidente pour certains est qu'une jointure croisée avec une table vide (ou un jeu de résultats) aboutit à une table vide (M x N; d'où M x 0 = 0)
Une jointure externe complète aura toujours des lignes à moins que M et N ne soient tous deux égaux à 0.
la source
J'aimerais ajouter un aspect important à d'autres réponses, qui m'ont en fait expliqué ce sujet de la meilleure façon:
Si 2 tables jointes contiennent M et N lignes, la jointure croisée produira toujours (M x N) lignes, mais la jointure externe complète produira de MAX (M, N) à (M + N) lignes (selon le nombre de lignes réellement correspond au prédicat "on").
ÉDITER:
Du point de vue du traitement logique des requêtes, CROSS JOIN produit en effet toujours M x N lignes. Ce qui se passe avec FULL OUTER JOIN, c'est que les tables de gauche et de droite sont "préservées", comme si les jointures GAUCHE et DROITE se produisaient. Ainsi, les lignes, qui ne satisfont pas au prédicat ON, des tables de gauche et de droite sont ajoutées au jeu de résultats.
la source
cross join
multiplie les tables; a lesfull outer join
ajoute dans le pire des cas, en fonction du nombre de lignes qui correspondent.Jointure croisée: les jointures croisées produisent des résultats constitués de chaque combinaison de lignes de deux tables ou plus. Cela signifie que si la table A a 3 lignes et la table B a 2 lignes, un CROSS JOIN donnera 6 lignes. Il n'y a pas de relation établie entre les deux tables - vous ne produisez littéralement que toutes les combinaisons possibles.
Jointure externe complète: Une jointure externe complète n'est ni «gauche» ni «droite» - c'est les deux! Il inclut toutes les lignes des deux tables ou ensembles de résultats participant à JOIN. Lorsqu'aucune ligne correspondante n'existe pour les lignes sur le côté «gauche» de la jointure, vous voyez les valeurs Null du jeu de résultats sur la «droite». Inversement, lorsqu'aucune ligne correspondante n'existe pour les lignes du côté «droit» de la jointure, vous voyez des valeurs Null du jeu de résultats sur la «gauche».
la source
Pour SQL Server,
CROSS JOIN and FULL OUTER JOIN
sont différents.CROSS JOIN
est simplement un produit cartésien de deux tables, indépendamment de tout critère de filtre ou de toute condition.FULL OUTER JOIN
donne un ensemble de résultats uniqueLEFT OUTER JOIN and RIGHT OUTER JOIN
de deux tables. Il a également besoin de la clause ON pour mapper deux colonnes de tables.la source
Ce sont les mêmes concepts, mis à part la valeur NULL renvoyée.
Voir ci-dessous:
la source
Jointure croisée : http://www.dba-oracle.com/t_garmany_9_sql_cross_join.htm
TLDR; Génère toutes les combinaisons possibles entre 2 tables (produit carthésien)
(Complète) Jointure externe : http://www.w3schools.com/Sql/sql_join_full.asp
TLDR; Renvoie toutes les lignes des deux tables ainsi que les résultats qui ont les mêmes valeurs (correspond à CONDITION)
la source
Une jointure externe complète combine une jointure externe gauche et une jointure externe droite. L'ensemble de résultats renvoie les lignes des deux tables dans lesquelles les conditions sont remplies, mais renvoie des colonnes nulles là où il n'y a pas de correspondance.
Une jointure croisée est un produit cartésien qui ne nécessite aucune condition pour joindre des tables. Le jeu de résultats contient des lignes et des colonnes qui sont une multiplication des deux tables.
la source
Voici un exemple où FULL OUTER JOIN et CROSS JOIN renvoient le même jeu de résultats sans NULL retourné. Veuillez noter le 1 = 1 dans la clause ON pour la FULL OUTER JOIN:
la source
JOINTURE EXTÉRIEURE COMPLÈTE SQL
La FULL OUTER JOIN renvoie toutes les lignes de la table de gauche (table1) et de la table de droite (table2) quelle que soit la correspondance.
Le mot clé FULL OUTER JOIN combine le résultat de la fois LEFT OUTER JOIN et RIGHT OUTER JOIN
Référence: http://datasciencemadesimple.com/sql-full-outer-join/
JOINTURE CROISÉE SQL
Dans SQL CROSS JOIN Chaque ligne de la première table est mappée avec chaque ligne de la deuxième table.
Le nombre de lignes produites par un jeu de résultats de l'opération CROSS JOIN est égal au nombre de lignes de la première table multiplié par le nombre de lignes de la seconde table.
CROSS JOIN est également connu sous le nom de produit cartésien / jointure cartésienne
Le nombre de lignes dans la table A est m, le nombre de lignes dans la table B est n et la table résultante aura m * n lignes
Référence: http://datasciencemadesimple.com/sql-cross-join/
la source