Uma postagem rápida simples porém considero bastante interessante devido ao conteúdo teórico. Nesta lição o livro foca em explicar como o SQL processa a execução de uma query.
O negócio funciona mais ou menos assim:
Escrevermos querys nesta ordem, certo?
1. SELECT
2. FROM
3. WHERE
4. GROUP BY
5. HAVING
6. ORDER BY
Porém o processamento é feito nesta ordem:
1. FROM
2. WHERE
3. GROUP BY
4. HAVING
5. SELECT
6. ORDER BY
Cada etapa de processamento gera como saída uma tabela virtual que serve de entrada para a próxima etapa. Esta ordem de execução pode explicar algumas coisas para um olhar mais atento. Um exemplo é este abaixo:
Por que o SQL não consegue identificar a coluna ano_nascimento? Justamente pela ordem de processamento que descrevi, ao processar a cláusula WHERE o SQL não tem conhecimento das colunas no SELECT.
Outro item interessante é com relação a seguinte situação:
Diferente da grande parte das linguagens de programação o SQL não processa instrução da esquerda para a direta como lemos. O SQL conceitualmente processa toda a instrução de uma fase de processamento de uma só vez. Digo conceitualmente porque seria impossível executar duas coisas ao mesmo tempo. Sendo assim a coluna ano_nascimento pode não existir ao realizar o processamento da coluna geracao.
Então é isso, por hoje é só! Apesar de serem situações simples, que todo mundo sabe que é errado, achei interessante pois aqui explica-se "o por que".
Pesquisar este blog
domingo, 23 de fevereiro de 2014
terça-feira, 18 de fevereiro de 2014
Chapter 1 - Lesson 1: Understanding the Foundations of T-SQL
Vamos lá, eu gostei muito dessa primeira lição porque menciona bastante aspectos conceituais do uso de banco de dados. Muitas pessoas não são muito ligadas nisso, preferem saber qual o comando faz tal coisa e ponto, porém eu costumo ter esta curiosidade com relação ao por que as coisas são de tal forma e tudo mais. Nada contra quem procura um conhecimento mais direto, afinal em certas situações focar no que é preciso para realizar determinada entrega é algo realmente mais sensato.
Vou mencionar em itens o que mais me chamou atenção nesta primeira lição:
Vou mencionar em itens o que mais me chamou atenção nesta primeira lição:
- Apesar da prova ser da Microsoft, do livro ser da Microsoft e da tecnologia abordada ser também da Microsoft, a boa prática é sempre utilizar comandos padrões SQL Standard. Exemplo, ao invés de usar convert, use cast, a não ser que você venha fazer uso do terceiro parâmetro da função convert. Sim, isso é uma recomendação do livro.
- Uma coisa que eu achei legal e vejo ser pouco comentado é esclarecer que banco de dados relacional não significa relacional por permitir juntar várias tabelas e criar foreign keys. O nome banco de dados relacional tem este nome pois foi construído com base em um conceito matemático chamado relation. O livro não faz uma referência profunda a estes conceitos, porém exemplifica que tabelas com suas colunas e linhas são uma tentativa de representar\implementar este conceito matemático.
- Considerando então que o banco de dados foi construído baseado em um conceito matemático, o modo de interagir com ele pede que tenhamos conhecimento de alguns itens básicos deste conceito.
- Diferente de qualquer linguagem comum de programação, a linguagem SQL leva em consideração que você está trabalhando com um conjunto de dados e não apenas com um dado de cada vez. Ou seja, resolva a maioria dos seus problemas com SELECT e não com cursores pois o banco de dados foi feito principalmente para trabalhar com conjuntos de dados.
- Por definição do conceito, um conjunto de dados não deve possuir dados repetidos. O SQL não força esta situação, porém quando criamos uma tabela por exemplo, a recomendação é que esta sempre tenha uma chave primária. Trabalhar com dados únicos respeita a definição do conceito e por consequência o banco de dados trabalha de melhor forma.
- Outro item que por definição é desconsiderado pelo banco de dados é a ordem de apresentação dos dados. Ou seja, apresentar {A,B,C} é igual a {C,B,A}. Forçar a ordenação dos dados não vai de encontro ao conceito, por isso em muitas situações a ordenação de dados custa caro no processamento. Outra coisa com relação a ordenação de dados e que sempre gera confusão, caso não explícito a cláusula ORDER BY, o SQL não garante o retorno de dados em uma determinada ordem. Isso mesmo, nunca tem-se essa garantia.
- Todo atributo de um modelo relacional também deve ter um nome único, uma boa prática sempre é dar um nome único as colunas a serem retornadas em um SQL.
- Para finalizar, o último item abordado é com relação aos 3 possíveis retornos em uma comparação. Os 3 possíveis retornos são verdadeiro, falso e desconhecido. O desconhecido em SQL é representado pelo NULL. Exemplo, JOAO, MARIA e NULL. Se quiséssemos selecionar todos os nomes que não sejam iguais a JOAO, quais teríamos como retorno? O retorno seria apenas MARIA, pois o NULL representa o desconhecido, ou seja, não se pode afirmar que é igual nem diferente a JOAO. Das "dicas" aqui mencionadas, acredito que essa seja a mais importante. Fiquem ligados quando trabalharem com colunas que permitem marca nulo, você pode estar desconsiderando resultados que talvez não seja essa a sua verdadeira intenção.
- O último tópico teórico de hoje é com relação a nomenclatura. O livro menciona que o termo correto para nos dirigirmos ao que normalmente chamamos de registro é na verdade linha. E o que chamamos de campo é na verdade coluna. Outro item é chamarmos o NULL de valor, o correto seria chamar de "NULL mark" que em uma tradução direta para o português seria "marca NULL" ou simplesmente chamar de NULL.
Nossa, era pra ser um post rápido, porém com tanto conteúdo teórico ficou difícil. Da próxima tentarei um post mais direto.
Até mais...
Antes de começar, quem sou eu? Qual meu objetivo?
Bom, primeiramente vou me apresentar até para você ter uma ideia do que poderá comentar em relação aos posts e talvez pedir alguma ajuda ou mesmo compartilhar conhecimento.
Meu nome é Murilo Carlos Cardoso eu moro em Joinville-SC e trabalho com SQL Server aproximadamente 8 anos, desde sua versão 2005. Atualmente trabalho em uma empresa de desenvolvimento de software de gestão empresarial chamada TOTVS na área de customização para cliente nos produtos Logix WMS¹, e SARA². No produto SARA onde eu atuo com mais frequência, é muito forte a utilização dos recursos de programação em SQL Server utilizando stored procedures, triggers, views, functions entre outros.
Estou criando este blog com o objetivo de me preparar para a prova 70-461-Querying Microsoft SQL Server 2012. Pretendo fazer pequenos posts que fujam do conhecimento trivial e abordem também aspectos teóricos e conceituais. Todos os posts serão relacionados ao livro da prova fornecido pela Microsoft e ilustrado abaixo. Para quem não conhece o funcionando das certificações Microsoft segue o link para obter mais informações -> http://www.microsoft.com/learning/pt-br/certification-overview.aspx
Espero que gostem!
WMS - Warehouse Management SystemSARA - Sistema de Armazenamento para Recintos Alfandegados.
Assinar:
Comentários (Atom)


