SQL: Quelle est la différence entre une table temporaire et une sous-requête?


Réponse 1:

Une table temporaire est un stockage physique, en mémoire et sur disque. Une requête est une requête. C'est à peu près la différence. Dans un processus par lots, une table temporaire, en raison de sa nature physique, peut être référencée plusieurs fois dans le lot. Une sous-requête ne peut être référencée que dans sa requête. Oh bien sûr, vous pouvez l'écrire plusieurs fois, mais il doit être résolu à chaque fois qu'il est écrit. Alors que la table temporaire est du stockage, elle n'est donc pas reconstituée chaque fois que vous la référencez.

Demandé de répondre.


Réponse 2:

Une table temporaire est une table basée sur la session en cours en mémoire (temporaire). Après la session, la table temporaire disparaît, semblable à une expression de table commune (CTE) utilisée pour produire des résultats en mémoire (non permanente).

Considérez une sous-requête comme deux requêtes réunies pour produire des résultats. Les sous-requêtes ont deux types différents, une sous-requête corrélée où la requête externe dépend de la requête interne et une sous-requête non corrélée qui peut être exécutée sur l'une ou l'autre partie ou sur les deux parties de la sous-requête. Selon l'endroit où se trouve la deuxième partie de la sous-requête, la clause est basée sur les résultats de production.

Veuillez noter que la clause SELECT peut produire des résultats sur plusieurs lignes, FROM ne peut produire que des résultats sur une seule ligne et WHERE est basé sur le filtrage de plusieurs lignes sur les résultats pour la sortie.

Je ne recommanderais pas de faire une sous-requête à moins que ce soit le seul moyen, car SQL Server est optimisé pour faire des jointures, pas des sous-requêtes et de nombreuses sous-requêtes peuvent devenir des jointures à la place, ce qui accélère les performances. Les tables temporaires sont idéales lorsque vous n'avez pas besoin d'une table permanente pour collecter des données dans l'affichage des résultats.


Réponse 3:

La table @temp peut être interrogée / insérée / mise à jour plusieurs fois dans un code T-SQL (proc ou func). sous le capot, c'est une table #temp dans une base de données temporaire

les sous-requêtes sont efemeral vs @temp table. Il s'agit simplement d'une déclaration déclarée du point de vue T-SQL ou d'un ensemble de lignes non modifiable du point de vue des données.

Vous ne pouvez pas insérer / mettre à jour / supprimer dans la sous-requête mais pouvez le faire dans la table @temp

Vous devez utiliser CTE pour multiplier la sélection dans la sous-requête.