L'application des instructions conditionnelles dans / OÙ
Ici, j'ai expliqué au sujet de la requête logique des étapes de traitement.
Référence : à l'Intérieur de Microsoft® SQL Server™ 2005 T-SQL d'Interrogation
Editeur: Microsoft Press
Pub Date: 07 Mars 2006
Imprimer ISBN-10: 0-7356-2313-9
Imprimer ISBN-13: 978-0-7356-2313-2
Pages: 640
À l'intérieur de Microsoft® SQL Server™ 2005 T-SQL d'Interrogation
(8) SELECT (9) DISTINCT (11) TOP <top_specification> <select_list>
(1) FROM <left_table>
(3) <join_type> JOIN <right_table>
(2) ON <join_condition>
(4) WHERE <where_condition>
(5) GROUP BY <group_by_list>
(6) WITH {CUBE | ROLLUP}
(7) HAVING <having_condition>
(10) ORDER BY <order_by_list>
Le premier aspect notable de SQL qui est différent des autres langages de programmation est l'ordre dans lequel le code est traité. Dans la plupart des langages de programmation, le code est traité dans l'ordre dans lequel il est écrit. En SQL, la première clause qui est traité dans la clause from, tandis que la clause SELECT, qui apparaît d'abord, est traité presque en dernier.
Chaque étape génère une table virtuelle qui est utilisée comme entrée pour l'étape suivante. Ces tables virtuelles ne sont pas disponibles à l'appelant (le client demande ou de la requête externe). Seul le tableau généré par la dernière étape est retourné à l'appelant. Si une clause n'est pas spécifié dans une requête, l'étape correspondante est simplement ignorée.
Brève Description de la Logique de Traitement de Requête Phases
Ne vous inquiétez pas trop si la description des étapes ne semble pas faire beaucoup de sens pour l'instant. Ces sont fournies à titre de référence. Les Sections qui viennent après le scénario d'exemple, permettra de couvrir les étapes plus en détail.
DE: UN produit Cartésien (cross join) est réalisée entre les deux premières tables dans la clause from, et comme un résultat, table virtuelle VT1 est généré.
SUR: Le filtre est appliqué à VT1. Seules les lignes pour lesquelles la est VRAI, sont insérés pour VT2.
EXTÉRIEURS (à joindre): Si une JOINTURE EXTERNE est indiqué (par opposition à une JOINTURE CROISÉE ou une JOINTURE INTERNE), les lignes de la préservés de la table ou les tables pour lesquelles un match n'a pas été trouvé, sont ajoutés les lignes de VT2 que les rangées extérieures, générant VT3. Si plus de deux tables apparaissent dans la clause from, les étapes 1 à 3 sont applicables à plusieurs reprises entre le résultat de la jointure dernière et de la prochaine table dans la clause from jusqu'à ce que toutes les tables sont traitées.
OÙ: La OÙ le filtre est appliqué à VT3. Seules les lignes pour lesquelles la est VRAI, sont insérés sur VT4.
GROUPE PAR: Les lignes de VT4 sont disposées par groupes en fonction de la liste des colonnes spécifiées dans la clause GROUP BY. VT5 est généré.
CUBE | CUMULATIF: super-groupes (groupes de groupes) sont ajoutés les lignes de VT5, générant VT6.
DEVOIR: Le DEVOIR filtre est appliqué à VT6. Seuls les groupes pour qui la est VRAI, sont insérés pour VT7.
SÉLECTIONNEZ: La liste de sélection est traitée, générant VT8.
DISTINCTES: les Doublons sont supprimés à partir de VT8. VT9 est généré.
COMMANDE PAR: Les lignes de VT9 sont triés en fonction de la liste des colonnes spécifiées dans la clause ORDER BY. Un curseur est généré (VC10).
En HAUT: Le nombre ou le pourcentage spécifié de lignes est sélectionné à partir du début de VC10. Tableau VT11 est généré et est retourné à l'appelant.
Par conséquent, (INNER JOIN) SUR filtre les données (les données de comptage de VT sera réduit ici même) avant d'appliquer la clause where. Les ultérieur des conditions de jointure sera exécuté avec les données filtrées qui permet de meilleures performances. Après cela seulement si la condition s'appliquera conditions de filtre.
(Application des instructions conditionnelles dans / OÙ ne fera pas beaucoup de différence dans quelques cas. Cela dépend du nombre de tables que vous avez rejoint et le nombre de lignes disponibles dans chacune des tables de jointure)