web-dev-qa-db-fra.com

Est-ce que join interne est identique à equi-join?

Pouvez-vous me dire si inner join et equi-join sont identiques ou non

32
user578816

Une "jointure interne" n'est pas la même chose qu'une "équi-jointure" en termes généraux.

'equi-join' signifie que les tables sont jointes à l'aide de l'opérateur d'égalité ou équivalent. J'appellerais encore une jointure externe une équi-jointure si elle utilise uniquement l'égalité (d'autres peuvent ne pas être d'accord).

'joint interne' s'oppose à 'jointure externe' et détermine comment joindre deux ensembles lorsqu'il n'y a pas de valeur correspondante.

39
user533832

J'ai trouvé cet article à ce sujet, suppose qu'il répond à votre question.

Ils ne sont pas liés.

Presque chaque jointure est une équijoin, parce que la condition pour l'appariement les lignes sont basées sur l'égalité de deux valeurs - une de chaque table être rejoint. C'est donc ce qui le rend un equijoin: la condition ON est égalité. Cela inclut les jointures internes et tous les trois types de jointures externes.

Les jointures internes, par contre, peuvent être basé sur l'égalité pour faire correspondre les lignes, ou sur une autre condition entièrement. Si c'est pas une équijointure, alors c'est habituellement appelé un theta rejoindre, bien que pour être Précis, l'équijoin n'est qu'un exemple parmi le thêta possible rejoint; autre thêta les jointures utilisent moins que, moins que ou égal, etc., comme comparaison opérateur.

Lire l'intégralité de l'article

28
CloudyMarble

La réponse est non.

Une équi-jointure est utilisée pour faire correspondre deux colonnes de deux tables en utilisant l'opérateur explicite = :

Exemple:

select *
  from table T1, table2 T2
  where T1.column_name1 = T2.column_name2

Une jointure interne est utilisée pour obtenir le produit croisé entre deux tables, en combinant tous les enregistrements des deux tables. Pour obtenir le bon résultat, vous pouvez utiliser une équi-jointure ou une jointure naturelle (les noms de colonne entre les tables doivent être identiques).

Utiliser equi-join (explicite et implicite)

select *
  from table T1 INNER JOIN table2 T2
  on T1.column_name = T2.column_name

select *
  from table T1, table2 T2
  where T1.column_name = T2.column_name

Ou en utilisant une jointure naturelle

select *
  from table T1 NATURAL JOIN table2 T2

HTH

7
Osy

Autrement dit: une équi-jointure est un type possible de jointures internes

Pour une explication plus détaillée:

Une jointure interne est une jointure qui renvoie uniquement les lignes des tables jointes dans lesquelles une certaine condition est remplie. Cette condition peut être d'égalité, ce qui signifie que nous aurions un equi-join ; si la condition n'est pas celle de l'égalité - qui peut être une non-égalité, supérieure à, inférieure à, entre, etc. - nous avons un nonequi-join , appelé plus précisément theta-join. 

Si nous ne voulons pas que ces conditions soient nécessairement remplies, nous pouvons avoir jointures externes (toutes les lignes de toutes les tables renvoyées), jointure de gauche (toutes les lignes de la table de gauche renvoyée, ne correspondant que pour la table de droite), jointure droite (toutes les lignes de la table de droite sont renvoyées, ne correspondant qu'à la table de gauche).

4
Luca Tampellini

La réponse est non, voici le genre et simple pour les lecteurs.

Jointure interne peut avoir une égalité (=) et d'autres opérateurs (comme <,>, <>) dans la condition de jointure.

Equi join n'a que l'opérateur d'égalité (=) dans la condition de jointure.

Equi rejoindre peut être une jointure intérieure, une jointure gauche extérieure, une jointure droite extérieure

2
Shumi Gupta

S'il y a une différence à faire, je pense que c'est ici que je l'ai testée avec DB2 . Dans 'equi join'. Vous devez sélectionner la colonne de comparaison de la table en cours de jointure, elle n'est pas obligatoire tu fais ça. Exemple :-

Select k.id,k.name FROM customer k
inner join  dealer on(
k.id =dealer.id
)

ici les lignes résultantes ne sont que deux lignes de colonnes

id    name

Mais je pense que dans Equi Join, vous devez également sélectionner les colonnes de l’autre tableau.

Select k.id,k.name,d.id FROM customer k,dealer d
where
k.id =d.id

et cela entraînera des lignes avec trois colonnes, il n’ya aucun moyen de ne pas avoir ici la colonne de revendeur non désirée comparée (même si vous ne le voulez pas), les lignes ressembleront à 

 id(from customer) name(from Customer) id(from dealer)

Peut-être que ce n'est pas vrai pour votre question.Mais cela pourrait être une des différences majeures.

1
Abhishek Bhandari

La réponse est OUI, mais en tant que résultat . Donc, voici un exemple.

Considérez trois tables: 

ordres (ord_no, purch_amt, ord_date, customer_id, salesman_id)

client (client_id, cust_name, ville, grade, salesman_id)

salesman (salesman_id, nom, ville, commission)

Maintenant, si j'ai une requête comme celle-ci:

Trouver les détails d'une commande.

Utilisation de INNER JOIN:

SELECT * FROM orders a INNER JOIN customer b ON a.customer_id=b.customer_id 
INNER JOIN salesman c ON a.salesman_id=c.salesman_id;

Utilisation d'EQUI JOIN:

SELECT * FROM orders a, customer b,salesman c where 
a.customer_id=b.customer_id and a.salesman_id=c.salesman_id;

Exécutez les deux requêtes. Vous obtiendrez le même résultat. 

En venant à votre question Il n'y a aucune différence dans la sortie de l'équijoin et de la jointure interne. Mais il pourrait y avoir une différence dans les exécutions internes des deux types.  

0
Heli Shah