Comment utiliser limitée chercher dans SQL

Chaque fois que la norme SQL ISO / CEI est modifié, il est généralement d'étendre les capacités de la langue. C'est une bonne chose. Cependant, parfois, quand vous faites un tel changement que vous ne pouvez pas anticiper toutes les conséquences possibles. Ce qui est arrivé avec l'ajout de limitée FETCH capacité dans SQL: 2008.

L'idée de l'limitée FETCH est que, bien qu'un SELECT déclaration peut retourner un nombre indéterminé de lignes, peut-être vous ne se soucient que le top trois ou peut-être le top dix. Conformément à cette idée, SQL: syntaxe présentée dans l'exemple suivant 2008 a ajouté:

Salesperson SELECT, AVG (TotalSale) DE SALESGROUP PAR SalespersonORDER par AVG (TotalSale) DESCFETCH PREMIERS RANGS uniquement- 3

Cela ressemble bien. Vous voulez voir qui sont vos trois meilleurs vendeurs sont en termes de ceux qui vendent principalement des produits à prix élevé. Cependant, il ya un petit problème avec cela. Que faire si trois personnes sont à égalité avec la même vente totale moyenne, ci-dessous les deux meilleurs vendeurs? Un seul de ces trois sera retourné. Lequel? Il est indéterminée.

Indétermination est intolérable pour toute personne de base de données qui se respecte donc cette situation a été corrigé dans SQL: 2011. Nouvelle syntaxe a été ajouté à inclure des liens, de cette manière:




Salesperson SELECT, AVG (TotalSale) DE SALESGROUP PAR SalespersonORDER par AVG (TotalSale) DESCFETCH PREMIERS 3 lignes avec ties-

Maintenant, le résultat est complètement déterminée: Si il ya un lien, vous obtenez toutes les lignes liées. Comme précédemment, si vous ne mettez pas la AVEC TIES modificateur, le résultat est indéterminé.

Un couple d'améliorations supplémentaires ont été apportées au limitée FETCH capacité dans SQL: 2011.

Tout d'abord, les pourcentages sont traitées, ainsi que juste un nombre déterminé de lignes. Prenons l'exemple suivant:

Salesperson SELECT, AVG (TotalSale) DE SALESGROUP PAR SalespersonORDER par AVG (TotalSale) DESCFETCH PREMIERS RANGS Les 10 POURCENTAGE uniquement-

Il est concevable qu'il pourrait y avoir un problème avec les liens lorsqu'ils traitent avec des pourcentages, tout comme il est avec un simple numéro de dossiers, de sorte que le AVEC TIES syntaxe peut également être utilisée ici. Vous pouvez inclure des liens ou non, en fonction de ce que vous voulez dans une situation particulière.

Deuxièmement, supposons que vous ne voulez pas les trois ou le top dix pour cent, mais voulez la deuxième ou de la deuxième de trois dix pour cent? Peut-être que vous voulez sauter directement à un certain point de profondeur dans le jeu de résultats. SQL: 2011 couvre cette situation aussi. Le code serait semblable à ceci:

Salesperson SELECT, AVG (TotalSale) DE SALESGROUP PAR SalespersonORDER par AVG (TotalSale) DESCOFFSET 3 ROWSFETCH PROCHAINE 3 rangées uniquement-

La OFFSET mot-clé indique le nombre de lignes à sauter avant de récupérer. Le mot-clé PROCHAINE précise que les lignes à lire sont ceux qui suivent immédiatement le décalage. Maintenant, les vendeurs à la quatrième, cinquième et sixième plus haut total de la vente moyenne est retourné.

Comme vous pouvez le voir, sans le AVEC TIES la syntaxe, il ya encore un problème d'indétermination. Si le troisième, quatrième, cinquième et vendeurs sont liés, il est indéterminée dont deux seront inclus dans ce deuxième lot et qui on ont été inclus dans le premier lot.

Il peut être préférable d'éviter d'utiliser le récuperer la capacité limitée. Il est trop susceptible de donner des résultats trompeurs.


» » » » Comment utiliser limitée chercher dans SQL