Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Quelle est la différence entre l'utilisation d'une jointure croisée et l'insertion d'une virgule entre les deux tables ?

Ils renvoient les mêmes résultats car ils sont sémantiquement identiques. Ceci :

select * 
  from A, B

...est (wince) la syntaxe ANSI-89. Sans clause WHERE pour lier les tables entre elles, le résultat est un produit cartésien. C'est exactement ce que propose l'alternative :

    select * 
      from A 
cross join B

...mais le CROSS JOIN est la syntaxe ANSI-92.

À propos des performances

Il n'y a pas de différence de performances entre eux.

Pourquoi utiliser ANSI-92 ?

La raison d'utiliser la syntaxe ANSI-92 est pour le support OUTER JOIN (IE:LEFT, FULL, RIGHT)--la syntaxe ANSI-89 n'en a pas, donc beaucoup de bases de données ont implémenté leur propre (qui ne porte pas sur d'autres bases de données ). IE :(+) d'Oracle , =* de SQL Server