Benefícios do uso de notação de posição Ordinal SQL?
Informação Geral
a notação da posição Ordinal, também conhecida por ordinais, é a abreviatura da coluna baseada na ordem da coluna na lista de colunas da cláusula SELECT
, em vez do nome da coluna ou do nome da coluna. Comumente suportado na cláusula ORDER BY
, algumas bases de dados (MySQL 3.23+, PostgreSQL 8.0+) suportam a sintaxe para a cláusula GROUP BY
também.
Aqui está um exemplo de usar ordinais:
GROUP BY 1, 2
ORDER BY 1, 2
Não é bom usar porque faz a consulta brittle-se a ordem da coluna mudar, os ordinais precisam ser atualizados ou sua consulta não retornará o que você pensou que seria. Muito provavelmente, você obterá um erro quando usado em GROUP BY
se as colunas nesses locais estão embrulhadas em agregados...
A Pergunta
o único benefício que me ocorre é menos dados para enviar através do fio, se você não estiver usando procedimentos armazenados ou funções (que fazem com que o uso de ordinal não tenha importância, para mim de qualquer maneira). Há outros benefícios que eu ... desaparecido?
divulgação
Isto pode parecer um trabalho de casa, mas é pesquisa para um almoço educacional que o escritório faz todos os meses. Eles pagam o almoço, nós temos que fornecer um pequeno tópico de interesse.6 answers
Eu usaria:
- Se gostas de resolução de problemas Criando perguntas adhoc sem intellisense
O servidor SQL só suporta na ordem de qualquer forma. Em qualquer outro lugar é uma expressão a ser avaliada.
Muitas vezes quando estou a questionar uma tabela com muitas colunas (em terra ad-hoc apenas para exploração de dados... Eu nunca faria um código como este para um ambiente de PROD) eu faço algo assim para obter campos que eu gosto perto juntos:
select top 1000
Col_1, Col_18, Col_50, Col_117, *
from
TableWithTonsOfCols
order by
1, 4 desc, 3
Se eu dissesse order by Col_1, Col_117 desc, Col_50
a minha pergunta iria vomitar porque a declaração não saberia que colunas eu pretendia encomendar devido à duplicação"*". Não é muito comum, mas ainda é uma característica útil.
Os dois casos de uso para mim são:
- Estou com pressa e não quero dactilografar, por isso uso o ordinal. Eu iria sempre Converter isto para o nome da coluna para qualquer uso não temporário
- a coluna pela qual estou a encomendar é uma declaração longa {[[0]}; em vez de escrever a declaração {[[0]} para a cláusula
ORDER BY
, Uso o ordinal que a mantém seca . Existem maneiras de contornar isso, por exemplo, usando CTEs, subqueries, ou view, mas eu frequentemente acho que o ordinal é o mais simples solucao.
Tenho tendência a usar vistas em Linha:
select col_a, count(*) from
(select case ...... end col_a from ...)
group by col_a
order by col_a;
Mas nos dias antes de serem uma sintaxe válida, ajudou a reescrever o texto completo da coluna. Com funções complicadas você tinha o potencial para discrepâncias entre o valor na seleção e ordem por tais como
select ltrim(col_name,'0123456789')
from table
order by ltrim(col_name,'123456789')
O ' 0 ' na selecção significa que não está a pedir pelo que selecciona.
Tenho um algoritmo gerador de consultas - o SQL é gerado automaticamente. Usar o ordinal significa que posso me referir ao campo gerado sem ter que buscar o nome do campo novamente. O usuário pode se referir ao nome do campo em uma tabela, selecionando-o de uma lista na tela. Desde que eu faça a lista corresponder com o sql, eu nunca precisaria saber os nomes dos Campos, se os itens selecionados fossem ordinais, também.
A memória diz que isto estava no padrão SQL no final dos anos 70.Se bem me lembro, o uso de ordinais como o Senhor descreve está a ser desactualizado pela Microsoft numa versão futura do SQL Server. Posso estar enganado, mas acho que é esse o caso. Eu sempre gostei de usá-los em certos casos, porque envolve menos digitação quando você está lidando com colunas derivadas que contêm uma consulta longish.