Como usar limitada FETCH em SQL

Sempre que o padrão SQL ISO / IEC é alterado, geralmente é para expandir as capacidades da linguagem. Isto é uma coisa boa. No entanto, às vezes, quando você faz uma tal mudança não pode antecipar todas as possíveis consequências. Isso aconteceu com a adição de limitada BUSCAR capacidade em SQL: 2008.

A ideia da limitada BUSCAR é que, embora um SELECIONAR declaração pode retornar um número indeterminado de linhas, talvez você só se preocupa com os três ou talvez o top ten. Em conformidade com esta ideia, SQL: sintaxe mostrada no exemplo a seguir 2,008 acrescentou:

Vendedor SELECT, AVG (TotalSale) FROM SalesGroup POR SalespersonORDER pelo AVG (TotalSale) DESCFETCH PRIMEIRO 3 linhas só-

Isso parece bem. Você deseja ver que seus três principais vendedores são, em termos de aqueles que estão vendendo principalmente produtos de alto preço. No entanto, há um pequeno problema com este. E se três pessoas são amarradas com o mesmo total da venda média, abaixo dos dois melhores vendedores? Apenas um dos três será devolvido. Qual? É indeterminado.

Indeterminação é intolerável para qualquer pessoa do banco de dados auto-respeito pelo que esta situação foi corrigida no SQL: 2011. Nova sintaxe foi adicionada para incluir laços, desta maneira:

Vendedor de SELECT, AVG (TotalSale) FROM SalesGroup POR SalespersonORDER pelo AVG (TotalSale) DESCFETCH primeiros 3 linhas com TIES-

Agora, o resultado é determinado completamente: Se houver um empate, você obtém todas as linhas amarradas. Como antes, se você deixar de fora a COM LAÇOS modificador, o resultado é indeterminado.

Um par de melhorias adicionais foram feitas para a limitada BUSCAR capacidade em SQL: 2011.

Em primeiro lugar, as percentagens são tratadas, bem como apenas um número específico de linhas. Considere o seguinte exemplo:

Vendedor SELECT, AVG (TotalSale) FROM SalesGroup POR SalespersonORDER pelo AVG (TotalSale) DESCFETCH primeiras filas 10 por cento só-

É concebível que pode haver um problema com laços ao lidar com percentagens, assim como não é com um simples número de registros, de modo que o COM LAÇOS sintaxe também podem ser usados ​​aqui. Você pode incluir laços ou não, dependendo do que você quer em qualquer situação particular.

Em segundo lugar, suponhamos que você não quer que os três primeiros ou os dez por cento, mas em vez disso quer a segunda cento três ou segunda dez? Talvez você queira pular diretamente para algum ponto no fundo do conjunto de resultados. SQL: 2011 cobre esta situação também. O código seria semelhante a este:

Vendedor SELECT, AVG (TotalSale) FROM SalesGroup POR SalespersonORDER pelo AVG (TotalSale) DESCOFFSET 3 ROWSFETCH próximos 3 ROWS só-

o DESVIO palavra-chave informa quantas linhas a serem saltadas antes de buscar. A palavra-chave PRÓXIMO especifica que as linhas de ser obtida são os imediatamente após o deslocamento. Agora os vendedores com o quarto, quinto e sexto maior média total da venda é devolvido.

Como você pode ver, sem a COM LAÇOS sintaxe, ainda há um problema de indeterminação. Se o terceiro, quarto, quinto e vendedores estão ligados, é indeterminado quais dois serão incluídas neste segundo lote e qual terão sido incluído no primeiro lote.

Pode ser o melhor para evitar o uso da capacidade de buscar limitado. É muito provável que entregar resultados enganosos.

menu