Gerencie suas informações através de instruções SQL com selects turbinados (para leigos e experts)

Para programadores e DBAs pode não ser muita novidade, mas certamente é uma reflexão de que a gestão da informação não seria a mesma sem ele. E para o usuário menos experiente a mensagem é de que SQL não é coisa de outro mundo e pode fazer parte e facilitar sua vida.

[ Hits: 21.841 ]

Por: Perfil removido em 09/04/2010


Do dBASE ao Firebird



Apesar dos pontos técnicos e práticos deste artigo que servem de dicas para ajudar no nosso trabalho do dia-a-dia, ele traz um pouco de nostalgia recente e destaca a admiração que a linguagem SQL provoca ao conciliar recursos poderosos com a simplicidade e intuitividade.

Para programadores e DBAs pode não ser muita novidade, mas certamente é uma reflexão de que a gestão da informação não seria a mesma sem ele. E para o usuário menos experiente a mensagem é de que SQL não é coisa de outro mundo e pode fazer parte e facilitar sua vida.

Do dBASE ao Firebird

Quando eu comecei a trabalhar com web em 2003 e conheci o MySQL, não imaginava do que uma simples query é capaz (era minha primeira experiência profissional como programador depois que eu troquei radicalmente a imprensa pela informática, e apesar de eu praticamente ter nascido um nerd, meu sonho era ser jornalista, o que não deixa de ser coisa de nerd, fiz até vestibular e fiquei por 3 classificações de ser chamado na UFMT em Cuiabá em 2002, voltei pro interior do estado, trabalhei na área da comunicação social, até que então, dentre outras coisas, eu passei a ter a função de atualizar as notícias do site da rádio onde eu era apresentador, aí resolvi topar o desafio do webmaster e fui trabalhar com ele).

Não foi fácil, custei pra desenvolver uma lógica de programação dentro do meu cérebro, sempre fui um usuário muito curioso e aplicado, mas ser programador, mesmo que começando com coisas simples, era um grande passo.

Nessa nova etapa, pra desenvolver páginas em PHP usávamos recursos muito simples de banco de dados, mas um dia começamos a desenvolver um painel de controle centralizado pra administrar de forma integrada no mesmo servidor todos os sites desenvolvidos pela empresa na época, e daí surgiu a necessidade de explorar um pouco mais a ferramenta de banco de dados: foi o meu primeiro "inner join".

De lá pra cá eu mudei duas vezes de emprego, passei até pelo MS Access, e hoje trabalho mais com aplicações desktop e uso Firebird (e mais recentemente o SQLite em algumas aplicaçõezinhas open source com as quais me divirto em casa e que em breve estarão disponíveis pra comunidade, tudo bem modesto).

Voltando à história, meu primeiro contato com banco de dados (e programação em si) foi ainda na infância com o dBASE III Plus, acho que isso foi em 1995 ou 1996. O dBASE é considerado o primeiro SGDB utilizado em grande escala, eu o conheci quando fazia em curso de MS-DOS, Lotus 123, WordStar e o maravilhoso, na época, Windows 3.11.

O dBASE não fazia parte da ementa do curso, mas meu tio era instrutor naquela escola, eu tinha visto ele fazer uns cadastros no tal do dBASE, e como eu já era um projeto de nerd e vivia por lá, um dia achei um disquete de 5¼" com o tal programa, resolvi instalar e fiquei a tarde inteira fazendo um cadastro de fitas de vídeo fictício.

Eu, claro, não sabia muito bem o que estava fazendo, nem imaginava que um dia conheceria o tal do select (e também nem sei se o dBASE tem esse recurso), era pela curiosidade mesmo. Hoje o que eu sei do dBASE são vaguíssimas lembranças dessa época além de há uns meses atrás (quando estava trabalhando no Paraná) ter baixado uma versão dele pra DOS/Windows pra uma apresentação nostálgica pra um colega de profissão que começou a dar seus primeiros cliques na era pós Windows 98.

Um bom tempo depois, em 2002, influenciado por aquele mesmo tio (que hoje trocou a informática pelo direito e agora é advogado), comecei um curso de Delphi 6 e então conheci o Paradox. O curso era meio fraquinho, e eu fui aprendendo de novo pela curiosidade. O primeiro programinha que fiz foi pra registrar as inscrições do pessoal que veio participar de uma convenção da igreja que eu participava. Pois é, só que meus posts e applyupdates não deram muito certo (o Paradox até que tem uns recursos de consultas SQL facilitados pelos componentes do Delphi, mas eu não sabia usar), as tabelas ficaram cheias de registros em branco, e sorte que eu consegui resgatar todos os dados e importei pra um planilha do Excel.

Mas os bons tempos começaram mesmo quando, como dito no início do artigo, eu comecei a trabalhar com web e usar o MySQL. Programador jovem em início de carreira, eu ficava encantado ao abrir uma tag PHP, dar um mysql_query, fazer um loop com com o mysql_fetch_array e ver os dados depois sendo exibidos em tabelas no HTML que eu desenhava com precisão milimétrica.

Tenho que destacar também que foi nessa época que eu comecei a descobrir o mundo GNU/Linux através do Kurumin (programador PHP que se preze tem que conhecer o Pinguim, e outra motivação foi o lançamento do Firefox) - o processo de de migração foi lento, mesmo porque desde que passei de programador web pra desktop eu sempre trabalhei em empresas que têm sua base sobre a plataforma Win32, ganho meu salário honestamente, mas depois que eu troquei de vez pro GNU/Linux Ubuntu em casa posso garantir que o que eu aprendi nestes últimos dois anos com ele supera toda uma vida em que usei Windows.

Do básico ao inacreditável

Vamos ao que interessa. Primeiro, hoje eu sou programador, mas você não precisa necessariamente ser um programador ou alguém com profundo conhecimento técnico pra tirar proveito dos recursos do SQL. Você pode criar bases de dados simples para gerenciar informações em sua casa ou empresa; há muito tempo o pacote MS Office tem o Access, eu o cito a título de informação [inclusive] histórica, mas eu indico o BrOffice Base (versão brasileira do OpenOffice) - ele tem versão pra Windows, Linux, Mac e Solaris.
Linux: Gerencie suas informações através de instruções SQL com selects turbinados (para leigos e experts)
Nele você pode criar tabelas, fazer consultas, criar formulários personalizados para edição com regras de negócio específicas, emitir relatórios, tudo com a facilidade de uma interface gráfica padronizada e intuitiva. E você pode executar consultas de níveis variados de complexidade, com ordenações, condições, agrupamentos etc usando as nossas queridas instruções SQL. Ele permite inclusive conexões externas via JDBC.
Linux: Gerencie suas informações através de instruções SQL com selects turbinados (para leigos e experts)
Hoje também a maioria dos softwares de automação comercial, gestão empresarial, ERPs etc oferecem a opção de relatórios personalizados, geralmente usando geradores de terceiros como Crystal Reports, Fast Report, e temos excelentes opções open source como o Jasper Reports (em Java) e o Agata Report (pra GNU/Linux e Windows, e em português), dentre outros.

Muitos destes mesmos sistemas, que trabalham com recursos do tipo dicionário de dados, oferecem a usuários, consultores, gestores (desde que capacitados para isso) a opção de criar tabelas, cadastros e rotinas personalizadas em telas dentro do próprio sistema; geralmente eles possuem recursos gráficos pra isso ou trabalham com scripts em linguagem portugol em alto nível para fácil compreensão, e muitos destes recursos podem ser otimizados na manipulação dos dados com a ajuda do SQL, economizando códigos e recursos de programação mais complexos, ou antes, nem precisamos ir tão fundo, a exemplo dos relatórios, muitas consultas em tela podem ser personalizadas com instruções SQL para trazer as informações que o usuário precisa, tanto pra incrementar quanto pra enxugar os resultados, assim, se o sistema oferece o recurso e você está gabaritado a fazer, pode ganhar tempo e economizar uma visita do suporte técnico.

Pra quem não é programador tudo pode parecer meio complexo, mas a verdade é que (e isso é uma das coisas que mais admiro no SQL) ele é de uma objetividade e intuitividade ímpar no meio das linguagens de programação (somando as compiláveis e não-compiláveis, digamos assim, já que, como o próprio nome que vem do inglês diz, o SQL é mesmo uma Linguagem de Consulta Estruturada, ou Structured Query Language).

A sintaxe dele tem uma sequência super objetiva e pode ser claramente lida e compreendida, é só traduzir do inglês para o português. Veja:

select NOME, TELEFONE, CIDADE, ENDERECO from CLIENTES where NOME like '%Pedro%' and CIDADE = 'Sinop' order by NOME

Ou seja:

selecionar NOME, TELEFONE, CIDADE, ENDERECO de CLIENTES onde NOME parece 'Pedro' e CIDADE = 'Sinop' ordenado por NOME

O símbolo % antes e ao fim do parâmetro diz que 'Pedro' pode ser qualquer parte do NOME, se fosse 'Pedro%' seriam todos cujo NOME começa com 'Pedro', independente do que vem depois, e assim, voltando ao nosso caso, teremos como resultado da consulta os dados dos clientes cujos nomes podem ser 'Pedro Araújo', 'João Pedro', 'Pedro Paulo', 'José Pedro da Silva' e que são da CIDADE de 'Sinop', tudo em ordem alfabética por NOME.

Qualquer programador sabe disso desde o começo, principalmente a maioria da nova geração que está se levantando aí no mercado e já aprendeu com coisas mais novas. Isso é trivial, mas já pensou o que seria de nós sem o SQL.

Bem, eu particularmente sei, profissionalmente trabalhei por mais de 3 anos em VB6 com Access em um sistema que já tinha uma década de vida quando eu entrei na jogada. Apesar de ser baseado em uma plataforma gráfica, as coisas não eram muito diferentes da época do COBOL, por exemplo.

A gente tinha que fazer os históricos malabarismos dando open em tabelas inteiras, fazendo cada if enorme dentro dos loops de leitura da tabela pra filtrar os resultados um a um, sem contar que era goto pra todo lado.

O MS Access tem suporte a SQL, mas ele não funciona como algo nativo, é como se fosse um plugin, uma adaptação, porém ele é um banco de dados para uso bem limitado em ambiente local, mas muitas empresas por falta de tempo, informação ou planejamento acabaram o adotando em larga escala, usando-o em sistemas em rede e com um grande volume de informações armazenadas e processadas nele mesmo, o que por si só já compromete seu desempenho, e usar um SQL 'adaptado' nesse cenário compromete mais ainda o desempenho de um sistema (simplesmente porque o Access não foi feito pra isso tudo).

Agora, nos bancos de dados relacionais, robustos, enxutos porém cheios de recursos, feitos com capacidade e qualidade pra isso, a importância do SQL traz consigo a admiração de como algo aparentemente tão simples pode ter em suas engrenagens internas algo tão poderoso.

Algumas vezes tem coisas que seriam praticamente impossíveis de serem feitas se não existisse SQL, ainda mais quando nos deparamos com uma estrutura de banco de dados orientada ao caos (até que daria pra fazer, mas seria a custo de muitas linhas de programação ninja e neurônios queimados).

E nas mãos de um programador ou DBA criativo o SQL faz mágica. Como eu falei de SQL no Access, reproduzindo um exemplo que postei no meu blog lá em 2008 ainda, temos uma demonstração disso. Basicamente o que a gente precisava fazer era tirar um relatório das contas a receber que estavam pendentes em uma determinada data, para isso precisaríamos relacionar a tabela dos títulos com a tabela dos lançamentos e verificar o que tinha sido pago até aquela data - o que é melhor é que as tabelas estavam em arquivos separados e o Access não conseguia resolver algumas instruções básicas do padrão SQL numa operação com datas.

Tivemos que adaptar e ser mais espertos que ele, e o código da façanha foi mais ou menos este (espero que compreenda e atenção para a linha 11):

* O código a seguir é só um exemplo para fins 'didáticos'.

SELECT
  Rec.*,
  Lcto.*,
  Cli.Nome,
  (Rec.Desconto + Rec.Abatimento) AS Descontos,
  (Rec.Juros + Rec.Despesas + Lcto.Inflacao) AS Acrescimos
FROM
  ((Receber AS Rec
    LEFT JOIN Lancamentos AS Lcto
      ON (Rec.IdTitulo = Lcto.IdTitulo)
          AND (Lcto.Data = (Rec.Emissao * 0) + #2008-11-07#))
    INNER JOIN [\Dados\Clientes.mdb].Cliente AS Cli
      ON (Cli.Codigo = Rec.Cliente))
WHERE
  Not(Rec.Cancelado) AND Not(Cli.Desativado)
HAVING
  (Rec.Vencimento = #2008-11-07#
  AND Rec.Vencimento = #2008-11-30#)
ORDER BY
  Rec.Empresa, Rec.Titulo,
  Rec.Parcela, Rec.TipoTitulo

    Próxima página

Páginas do artigo
   1. Do dBASE ao Firebird
   2. "Isso é simples, é só fazer um select"
   3. Só mais uma e vamos concluir
Outros artigos deste autor

Decodificando filmes do programa "3w player"

OSS & ALSA - A História

OcoMon 2.0RC6 no OpenSUSE 11.2 com PHP5 + MySQL5 + Apache2 com correção de acentuação

ArchLinux, uma distro de expressão aqui no VOL

Uma geral pela configuração pós-instalação do Slackware

Leitura recomendada

Instalação da Plataforma Hadoop

OpenAI - Como usar uma Inteligência Artificial a seu favor

Implementação LDAP e Java

Injeção de SQL

MongoDB Aggregation

  
Comentários
[1] Comentário enviado por dastyler em 14/04/2010 - 11:30h

Apesar da minha humilde pessoa já conhecer SQL e estar até meio "enjoado " de trabalhar com a mesma (apesar que me ajuda muuuuitissimo até hoje), o artigo ficou muito bom.
Serve até como um guia de referencia para quando esquecer alguma regra...heheheheh!

abraço!



[2] Comentário enviado por grandmaster em 03/05/2010 - 17:14h

Exato dastyler, server como um guia.

Ficou realmente muito didático, pelo menos para mim que já tenho alguma noção.

--
Renato de Castro Henriques
ITILv3 Foundation Certified
CobiT Foundation 4.1 Certified ID: 90391725
http://www.renato.henriques.nom.br


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts