Sortie de requête SQL Server?

Il y a deux tables dans SQL Server

table1 (Id INT) table2 (Id INT) 

dans la table1 il y a dix loggings et dans la table2 contient 0 logging

quand je choisis des deux tables

 Select * from table1, table2 

dans la window de sortie, il n'y a pas d'affichage des résultats.

mais quand j'ai inséré un nouvel logging dans la table 2 et que j'exécute à nouveau l'instruction select ci-dessus, il affichera l'logging table1 avec les loggings table2.

Je suis confus pourquoi la première sélection ne montre aucun logging?

10 * 0 = 0. Ce siple. Comme la table 2 contient 0 loggings, le jeu d'loggings résultant est vide = 0 lignes.

La requête produit quelque chose appelé produit cartésien, qui est fondamentalement chaque logging d'une table jointe à une autre d'un autre. Par conséquent, le nombre total d'loggings renvoyés est

 (records in Table1) x (records in Table2) 

Mais puisque Table2 a 0 loggings, le produit Cross a 0 loggings – parce qu'il n'a pas pu find d'logging dans l'autre table à join avec chaque logging dans la première table.

Lorsque vous select plusieurs tables séparées par des virgules, vous requestz un "produit cartésien" (voir https://secure.wikimedia.org/wikipedia/en/wiki/Cartesian_product ) des deux tables. Si la table table1 a des loggings X et que table2 a des loggings Y, alors le résultat contiendra des loggings X * Y. C'est zéro loggings si l'une des tables contient zéro loggings.

 FROM table1, table2 

est un produit cartésien des deux tables, le même que

 FROM table1 CROSS JOIN table2 

Les deux montreront chaque combinaison d'une ligne de table1 avec une ligne de table2.

Donc, 10 x 0 = 0 combinaisons.

L'opération que vous faites s'appelle une jointure cartésienne (multiplication multiset): elle va afficher toutes les combinaisons d'loggings possibles dans les tables.

Comme il n'y a pas d'loggings dans la seconde table, il n'y a pas de combinaisons possibles.

Si vous voulez concaténer les multisets (faire une addition multiset), utilisez UNION ALL place:

 SELECT id FROM table1 UNION ALL SELECT id FROM table2