segunda-feira, 26 de novembro de 2012

Sintaxe alternativa ao Select * From

Salve salve colegas.

O comando mais utilizado pelos analistas de banco de dados sem sombra de dúvidas é o Select * From, este comando até pode ser muito criticado, pois, existem estudos que comprovam a queda de performance em seu uso em relação a especificação dos campos no select.

Mas pensando na economia de linhas de códigos digitados, nosso colega elefante disponibiliza nativamente o comando Table, que pode substituir o Select * From.

Vejamos um exemplo de uso do comando table:
 Table paposql.pessoa;  
 id nome sobrenome dt_nascimento  
  1 Papo Sql       2012-01-01  

Veja que o resultado é o mesmo do comando Select * From. O uso do comando não reflete ganho de performance (Ao menos nos testes com o explain que fiz), é somente um 'economizador de código' que pode ajudar muito, imagina quem digita 50 vezes por dia Select * From? São 400 caracteres digitados a menos por dia.

Um observação a ser feita é que, o comando é nativo somente a partir da versão 8.4 do PostgreSQL

Fica a dica, abraços a todos e até a próxima.

Clique aqui e veja todas as matérias sobre PostgreSQL

2 comentários:

  1. Olá pessoal, tudo bem? Sou novo por aqui mais já utilizo bastante as dicas postadas e sempre tem me salvado. Agora estou em um dilema onde eu tenho uma coluna de valor que preciso preencher com 0 a esquerda e com zero a direita (decimais) mais o comando que estou fazendo ou consigo um ou outro.

    to_char (F.vltitulo, '9G999G990D9999') as vltitulo, desta forma sai com os 4 decimais mais não preenche os zeros a esquerda e se eu colocar lpad (F.vltitulo,14,'0') as vltitulo, sai com os zeros a esquerda

    Select

    '002001' as Ident , --Identificador 1,6 N--
    lpad (F.idempresa,6,'0') as empresa, --CodigoEmpresa 7,6 N--
    lpad (P.cdchamada,6,'0') as pessoa, --CodigoPessoa 13,6 N--
    rpad (F.nrtitulo,20,' ') as nrtitulo, --NrTitulo 19,20 C--
    rpad (F.nmtitulo,50,' ') as nome, --Nomedotitulo 39,50 C--
    to_char (F.dtemissao,'DDMMYYYY') as emissao, --DataEmissao 89,8 D--
    to_char (F.dtvencimento,'DDMMYYYY') as venc, --DataVencimento 97,8 D--
    to_char (F.dtbaixa,'DDMMYYYY') as baixa, --DataDisponivel 105,8 D--
    to_char (F.vltitulo, '9G999G990D9999') as vltitulo, --VlTitulo 113,14 N--
    lpad ('1',6,'0') as natureza, --CdChamada 127,6 N--
    lpad (TR.cdtiporec,6,'0') as fmapag, --FormaPagamento 133,6 N--
    lpad (FB.cdbanco,3,'0')as bco, --CodigoBanco 139,3 N--
    lpad (B.codigoagencia,6,'0') as agencia, --CodigoAgencia verificar 142,6 N--
    '000001' as cdcontabc, --CodigoChamadaContaBancaria 148,6 N--
    rpad (FB.nossonumero,50,' ')NossoNumero, --Nosso Numero 154,50 C--
    '000001' as tipocb, --CodigoTipoCobranca 204,6 N--
    '00000000' as DtBaixa, --DataBaixa2 210,8 D--
    '00000000000000' as vlpg, --VlBaixadotitulo 210,14 N--
    ' ' as tpbaixa, --TipodeBaixa 232,1 C--
    rpad (F.nmobservacao,200,' ') as observacao, --Observacoes 233,200 C--
    rpad (F.idfluxo,10,' ') as idfluxo, --IdentificadorTitulo 433,10 C--
    rpad (B.codigoagencia,10,' ') as agencia, --CodigoAgencia 443,10 C--
    (FB.numeroconta,20,' ') as contabc, --NumeroContaBancaria 453,20 C--
    rpad (P.sttipopessoa,1,' '), --CategoriaPessoaTitulo 473,1 C--
    rpad (P.stpessoa,1,' '), --TipodePessoa 474,1 C--
    REPLACE(REPLACE(REPLACE(P.nrcgc_cic,'.', '' ),'/',''),'-','') as CNPJ, --CPF/CNPJ 475,18 N--
    '000000' as StAdm, --CodigoChamadaSitAdminist 493,6 N--
    to_char (F.dtexclusao,'DDMMYYYY') as DtExcl, --DataExclusaoTitulo 499,8 D--
    rpad (D.nrdocumento,50,' ') as NrDoc, --NrDocumentonaBaixa 507,50 C--
    '000000' as CCusto, --CodigoChamadaCentroCusto 557,6 N--
    ' ' as Cancel, --StatusCancelamentoBaixa 563,1 C--
    '000000' as ItemTi, --NúmerodeItensTitulo 564,6 N--
    ' ' as NrChec, --NumerodoCheque 570,20 C--
    '1' as StatusTU, --StatusIdentTituloUnico 590,1 C--
    'N' --StatusTituloPrevisao 591,1 C--


    FROM ishop.fluxo F inner Join ishop.fluxobanco FB On (F.idfluxo=FB.idfluxo)
    left join ishop.pessoas P On (P.Idpessoa=F.idpessoa)
    left join ishop.movcaix MC On (MC.idmovimentocaixa=F.idmovimentocaixa)
    left join ishop.natlanc NL On (NL.idnatlanc=F.idnatlanc)
    left join ishop.tprec TR On (TR.idtprecebimento=MC.idtprecebimento)
    left join ishop.bancocob B On (B.numeroconta=FB.numeroconta)
    left join ishop.documen D On (D.iddocumento=F.iddocumento)
    where tptitulo='R'and dtbaixa is null and dtexclusao is null
    order by f.vltitulo;


    ResponderExcluir
    Respostas
    1. Dá forma que está o vltitulo sai 99,0000 quando eu precisava que saísse 0000000099,0000

      Excluir