MENU

sábado, 9 de junho de 2012

Existe diferença de desempenho entre instruções SQL escritas no padrão ANSI ou no padrão Oracle?



Antes de dar a resposta, vamos entender primeiro o que é SQL e o que são os padrões ANSI SQL Oracle

     Resumindo, a Structured Query Language, mais conhecida pela sigla SQL, é uma linguagem que foi desenvolvida no início dos anos 70, pela IBM, para manipular bancos de dados relacionais. A partir de então, diversos fabricantes de Sistemas Gerenciadores de Bancos de Dados relacionais (SGBDRs), como por exemplo a Oracle, começaram a desenvolver versões próprias da linguagem SQL (chamadas de dialetos ou extensões), e isso levou a necessidade da criação de uma linguagem SQL padronizada.

     Com a sua popularização e sucesso, organizações como o Instituto Americano Nacional de Padrões (ANSI) e a Organização Internacional de Padronização (ISO), resolveram padronizar a linguagem SQL. Em 1986 foi criado um padrão ANSI e em 1987 foi criado um padrão ISO. A partir de então, surgiram várias versões do padrão SQL, onde cada versão acrescenta novos comandos ou funcionalidades. As versões do padrão ANSI existentes até a presente data são:
   
          - SQL-86
               - Primeira versão da linguagem, lançada em 1986, consiste basicamente na versão inicial da linguagem criada pela IBM.
   
          - SQL-92
              - Lançada em 1992, inclui novos recursos tais como tabelas temporárias, novas funções, expressões nomeadas, valores únicos etc.

          - SQL:1999 (SQL3)
               - Lançada em 1999, foi a versão que teve mais recursos novos significativos, entre eles: a implementação de expressões regulares, recursos de orientação a objetos, queries recursivas, triggers, novos tipos de dados (boolean, LOB, array e outros), novos predicados etc.
  
          - SQL:2003
               - Lançada em 2003, inclui suporte básico ao padrão XML, sequências padronizadas, instrução MERGE, colunas com valores auto-incrementais etc.

          - SQL:2006:
               - Lançada em 2006, não inclui mudanças significativas para as funções e comandos SQL. Contempla basicamente a interação entre SQL e XML

  

     Atualmente, os principais fabricantes de SGBDRs, implementam em seus Bancos de Dados, além das instruções SQL referentes ao seu "dialeto", as instruções SQL do padrão ANSI mais recente. No caso de instruções SQL no SGBD Oracle, o que o pessoal costuma chamar de padrão Oracle, é o dialetoSQL da Oracle. As instruções dos dialetos normalmente surgem quando o fabricamente necessita implementar recursos no SGBD, que ainda não possuem instruções correspondentes no padrão ANSI . 

     Um exemplo muito utilizado de comando SQL do dialeto Oracle, é a ligação OUTER JOIN, que o pessoal costuma escrever utilizando o caractere +. Vejam a diferença nos exemplos abaixo e na imagem 01:
   
          Instrução SQL com ligação representando LEFT JOIN utilizando o dialeto Oracle:

          SELECT      e.first_name || e.last_name NAME, 
                              D.DEPARTMENT_NAME 
          FROM         HR.EMPLOYEES E,
                              HR.DEPARTMENTS D
          WHERE      E.DEPARTMENT_ID = D.DEPARTMENT_ID (+);

    
          Instrução SQL com ligação representando LEFT JOIN utilizando o padrão ANSI

          SELECT        E.FIRST_NAME || E.LAST_NAME NAME, 
                                D.DEPARTMENT_NAME 
          FROM          HR.EMPLOYEES E
          LEFT JOIN  HR.DEPARTMENTS D
                   ON      E.DEPARTMENT_ID = D.DEPARTMENT_ID;




Imagem 01 - Instrução SQL no padrão Oracle e padrão ANSI
   

     Agora que já sabemos o que é o padrão Oracle e o que é o padrão ANSI, vou explicar qual desses padrões pode proporcionar melhor performance às instruções SQL, no caso do Banco de Dados Oracle. Antes ainda, de falar sobre a performance dos 2 padrões, vou comentar sobre outros itens, que me fazem defender o uso do padrão ANSI. 

     Entre eles, vou destacar os seguintes:

             - Permite que você migre a aplicação contendo as instruções SQL para outro BD sem ter que fazer qualquer alteração;

             - As ligações entre colunas são mais fáceis de ser identificadas, pois ficam fora da cláusula WHERE (separadas das condições de filtro). Essa facilidade pode muitas vezes facilitar manutenção futura e evitar queries ruins. Já vi muita gente escrever queries no padrão oracle e esquecer de incluir uma coluna necessária para a ligação correta entre 2 tabelas. Para evitar linhas duplicadas, resultantes do produto cartesiano gerado pela falta da coluna necessária na ligação, o desenvolvedor incluía a instrução DISTINCT"Uma tremenda gambiarra para corrigir um erro de programação, que gerava degradação da performance da query";
   
            - Permitem fazer OUTER JOIN com parâmetros de stored procedures. No padrão Oracle você não consegue fazer isso. Eu comecei a escrever instruções SQL no padrão ANSI em 2005, quando percebi que somente o padrão ANSI permitia isso;
  
     Bom... agora quanto à performance: utilize o padrão ANSI! Desde a implantação do otimizador baseado em custo (CBO) no Oracle Database, a Oracle recomenda a utilização do padrão ANSI, pois o CBO foi desenvolvido com base neste padrão. Deste modo, as instruções SQL escritas no padrão ANSI podem gerar planos de execução melhores, e consequentemente, serão executadas mais rapidamente! 
     
     Na prática, dificilmente você encontrará diferenças no plano de execução gerado entre os 2 padrões, mas um dia você encontrará.

Média salarial (2012) das 15 principais áreas de TI no Brasil



Antes de iniciar a leitura, saiba que parte deste material foi retirado do site da revista Veja no artigo “Quer ganhar mais? Seja um craque de TI“.
As médias salariais apresentadas estão disponíveis na 38° edição da Pesquisa Salarial e de Benefícios da empresa Catho Online, grande empresa da área de recrutamento e seleção. Segundo a Catho, os dados são atualizados a cada 3 meses e a pesquisa utiliza-se de uma metodologia exclusiva, sendo a única respondida por profissionais de todo Brasil. Esta edição conta com mais de 260 mil respondentes de mais de 21 mil empresas em mais de 4 mil cidades.
Atenção:
  • A reportagem da Veja não deixa claro (pelo menos não encontrei) quais os portes de empresas foram considerados para chegarem aos números abaixo, portanto, novamente, reforço que se trata de uma média salarial que pode envolver pequenas, médias e grandes empresas.
  • Antes de sair xingando e dizendo que é um absurdo, que não se paga isso e etc,pare um instante e avalie se o que você ganha não faz jus ao que sabe ou o que produz. Avalie se você tem vontade de crescer, se corre atrás do conhecimento, se não fica parado esperando as coisas cairem do céu…
  • Se for comentar algo, não mencione nomes de empresas. No máximo, se quiser comentar, fale de sua remuneração, o que conhece, como chegou lá e etc.
Abaixo seguem as médias das 15 principais áreas de TI nas cinco regiões brasileiras: norte, nordeste, centro-oeste, sudeste e sul.
Administração de Banco de Dados
Administração de Redes
Arquitetura da Informação
Conteúdo Web
Criação Web
E-commerce
Negócios web
Processamento de Dados
Programação
Qualidade de Software
Segurança da Informação
SistemasResponsável pelo planejamento, desenvolvimento e implantação de projetos de TI dentro de uma empresa
Suporte Técnico em Informática
Tecnologia da Informação (subárea)Engloba as divisões de informática, implantação de sistemas da informação, consultoria de sistemas da informação, planejamento, organização e controle administrativo.
Web Development
Por  | 5 de março de 2012 

O que é um Banco de Dados?





BD (Banco de Dados): é uma coleção de dados interligados, representando informações sobre um domínio específico.
Exemplos: lista telefônica, acervo de uma biblioteca.

O que é um SGBD?

SGBD (Sistema Gerenciador de Banco de Dados): é um software com recursos específicos para facilitar a manipulação das informações de um BD e o desenvolvimento de programas aplicativos.
Exemplos: Oracle, DB2, MySQL, SQL Server, Sybase e outros. 

 Quais são os modelos existentes?

- Modelo Relacional
- Modelo organizado por Rede
- Modelo organizado por Hierarquia
- Modelo orientado a objetos

Qual é o Modelo Mais utilizado?

- Modelo Relacional

Introduzido em 1970, possui como características:

- Base de dados visualizada como um conjunto de tabelas, cada uma representando uma relação
- Relacionamentos representados por valores de dados simetria nas consultas
- Várias linguagens definidas (álgebra relacional, DDL e DML em SQL).
- É uma desvantagem do modelo relacional a representação não natural de objetos complexos. (Exemplo: textos, gráficos, imagens, etc)




O que é um modelo Lógico de Dados?

Modelo Lógico de Dados:
É o conjunto de ferramentas conceituais para a descrição dos dados, dos relacionamentos entre os mesmos e das restrições de consistência e integridade.
Em outras palavras, é o conjunto de conceitos que podem ser usados para descrever a estrutura de um banco de dados (tipos de dados, relacionamentos e restrições que devem ser mantidas sobre os dados).

Podem-se dividir em 2 grupos:

1 - Baseado em Objetos
Código executável é parte integrante do Modelo de Dados

2 - Baseado em Registros
Código executável é desenvolvido no Banco de Dados


 O que é um modelo Físico de Dados?

Modelo Físico de Dados:
O Modelo físico de dados é um dos artefatos para a construção de um banco dados, e baseia-se em um diagrama derivado do diagrama lógico de dados, onde são implementados recursos específicos de um banco de dados.
As entidades representadas no modelo lógico poderão se converter ou não em uma ou mais tabelas e ou visões de banco de dados. Alem disso o modelo físico irá contemplar a criação de regras denominadas “Constraints” , listadas abaixo:

- Chaves Primárias (PK)
- Chaves Únicas (UK)
- Chaves Estrangeiras (FK)
- Not NULL
- Check



 O que é um modelo Organizado por Rede?

Apresenta como características os dados organizados em vários tipos de registros e tipos de sets (estabelecem os relacionamentos) é um problema de estratégia de acesso aos registros “filhos”.



O que é um modelo Organizado por Hierarquia?

Da mesma forma que o modelo de redes, no modelo hierárquico os dados são organizados em vários tipos de registros e o relacionamento dos registros “pai” e “filho” são explícitos. Apresenta como vantagens a simplicidade de processamento e o uso natural para organizações hierárquicas de dados.



 Quais os benefícios de se utilizar um Banco de Dados?

- Rapidez na manipulação e no acesso à informação;
- Redução do esforço humano no desenvolvimento e utilização das 
  aplicações;
- Disponibilização da informação no tempo necessário;
- Controle integrado de informações distribuídas fisicamente;
- Redução da redundância e de inconsistência de informações;
- Compartilhamento de dados;
- Aplicação automática de restrições de segurança;
- Redução de problemas de integridade.


terça-feira, 5 de junho de 2012

SQL 11g stricting and Sorting Data





Este Post trata de duas clausulas do SELECT, o WHERE (restrição) e o ORDER BY (ordenação);


Curiosidades:
  • O WHERE também pode/deve ser usado com o UPDATE e o DELETE;
  • O WHERE pode referenciar qualquer coluna da tabela, mesmo não estando no SELECT;
  • Na clausula WHERE podemos usar comparação com expressões, dois campos da própria tabela junto com os operadores ( = , >= , > , <= , < , != OU OU ^= , IN , LIKE);
  • As buscas em Oracle são Case Sentive, ou seja, ‘Teste’ ‘TESTE’;
  • Nas buscas com LIKE podemos usar dois simbolos: % e o _, o primeiro pega tudo após a utilização e o segundo somente uma posição, exemplo: LIKE ‘TE%’ / LIKE ‘TEST_’, em ambos traz o resultado (se tiver na tabela) TESTE;
  • Select 'TESTE'
    From Dual
    Where 'TESTE' Like 'TEST_';
    Select 'TESTE'
    From Dual
    Where 'TESTE' Like 'T_';
    -- Vazio
    Select 'TESTE'
    From Dual
    Where 'TESTE' Like 'T%';
  • Os operadores logicos do WHERE são as condições AND e OR, que ainda podem ser acrescidas de NOT, negação;
  • A ordem de precedência dos operadores logicos são: NOT, AND e OR;
    Se existir os parentestes ( ) ele será o primeiro de todos na ordem de precedência;
  • O NULL é a ausência de valor, as clusulas para serem usadas com NULL são IS NULL ou IS NOT NULL, exemplo:
  • Select 'TESTE'
    From Dual
    Where '' Is Null;
    Select 'TESTE'
    From Dual
    Where '' Is Not Null;
  • O ORDER BY pode ser referenciado pelo NOME_DA_COLUNA ou mais de um separado por virgula, pode ou não utilizar ASC ou DESC (default é ASC);
  • Dentro do ORDER BY pode ser utilizado Expressões ou ALIAS ou Posição e/ou a combinação desses;
  • Select 'TESTE'
    From Dual
    Order By 1;
    Select 'TESTE' As a
    From Dual
    Order By a Desc;
    Select 'TESTE'
    From Dual
    Order By 'TESTE' Asc;
  • O ORDER BY com Null sempre que ele existir será no final do SELECT, exemplo:
  • Select *
    From (Select 'TESTE'
    From Dual
    Union All
    Select ''
    From Dual
    Union All
    Select ''
    From Dual
    Union All
    Select 'TESTE2'
    From Dual)
    Order By 1 Asc;

Criação de bancos de dados e tabelas em SQL




Criando o banco de dados

_______________________________________________________________
Diagrama Entidade-Relacionamento
Diagrama Entidade-Relacionamento
 Neste artigo, vamos explorar o processo de criação de tabelas manualmente com o CREATE DATABASE e CREATE TABLE comandos. 

Requisitos de Negócio

Antes de sentar-se no teclado, precisamos garantir que temos uma sólida compreensão das necessidades do cliente. Qual é a melhor maneira de obter esse conhecimento? Conversando com o cliente, é claro! Após sentar-se com o diretor de Recursos Humanos da XYZ, aprendemos que eles são um widget empresa de vendas e estão principalmente interessados ​​em acompanhar informações sobre o seu pessoal de vendas. Empresa XYZ divide sua força de vendas nas regiões leste e oeste, cada uma delas é dividida em muitos territórios abrangidos pelos representantes de vendas individuais. O departamento de RH gostaria de controlar o território abrangido por cada empregado, bem como informações de cada funcionário salário e estrutura de supervisão. Para atender a esses requisitos, nós criamos um banco de dados composto de três tabelas, mostrado no diagrama de Entidade-Relacionamento nesta página .



Escolhendo uma plataforma de banco de dados

Decidimos usar um sistema de gerenciamento de banco de dados (ou DBMS) que é construído sobre a Structured Query Language (SQL). Portanto, todo o nosso banco de dados e comandos de criação de tabela deve ser escrito com o padrão ANSI SQL em mente. Como um benefício adicional, usando ANSI-compliant SQL irá garantir que estes comandos irão funcionar em qualquer SGBD que suporta o padrão SQL, incluindo Oracle e Microsoft SQL Server. Se você não tiver selecionado uma plataforma para o seu banco de dados, no entanto, o artigoOpções de software de banco de dados orienta o processo de seleção.

Criando o banco de dados

Nosso primeiro passo é criar o próprio banco de dados. Muitos sistemas de gerenciamento de banco de dados oferecem uma série de opções para personalizar os parâmetros do banco de dados nesta etapa, mas o nosso banco de dados só permite que a simples criação de um banco de dados. Tal como acontece com todos os nossos comandos, você pode querer consultar a documentação do seu SGBD para determinar se todos os parâmetros avançados suportados pelo seu sistema específico atender às suas necessidades. Vamos usar o comando CREATE DATABASE para criar nosso banco de dados:
CRIAR BANCO DE DADOS pessoal
Tome nota especial da capitalização utilizado no exemplo acima. É prática comum entre os programadores de SQL para usar todas as letras maiúsculas para palavras-chave SQL, tais como "criar" e "DATABASE", enquanto usando todas as letras minúsculas para nomes definidos pelo usuário como o nome do banco "pessoal". Estas convenções estabelecem, para fácil leitura

Fundamentos SQL




Introdução

______________________________________________________________
A Structured Query Language (SQL) constitui um dos alicerces fundamentais da arquitetura moderna base de dados. SQL define os métodos utilizados para criar e manipular bancos de dados relacionais em todas as principais plataformas. À primeira vista, a linguagem pode parecer intimidante e complexa, mas não é realmente tão ruim assim. Em uma série de artigos ao longo das próximas semanas vamos explorar o funcionamento interno de SQL juntos. No momento em que nós terminamos, você terá o conhecimento fundamental que você precisa ir lá fora e começar a trabalhar com bancos de dados! Esta semana, o nosso primeiro artigo da série SQL fornece uma introdução aos conceitos básicos por trás do SQL e vamos dar uma breve olhada em alguns dos principais comandos utilizados para criar e modificar bases de dados. Ao longo deste artigo, por favor, manter o nosso objetivo em mente: estamos tentando obter o "big picture" do SQL - e não o domínio dos comandos individuais. Nós vamos fornecer alguns exemplos para fins ilustrativos e explicar a teoria por trás deles, mas não se sente frustrado se você não pode escrever seus próprios comandos SQL depois de ler este artigo. Nós vamos cobrir cada um dos comandos mais importantes em detalhe em futuras prestações semanais.  Bancos de dados Oracle PL utilizar o seu proprietário / SQL. Microsoft SQL Server faz uso de Transact-SQL. No entanto, todas estas variações são baseadas na indústria padrão ANSI SQL. Em nossa série tutorial, vamos ficar aos comandos ANSI compatíveis com SQL que irá funcionar em qualquer sistema moderno banco de dados relacional. comandos SQL podem ser divididos em dois sublinguagens principais. O Data Definition Language (DDL), contém os comandos usados ​​para criar e destruir bancos de dados e objetos de banco de dados. Após a estrutura de banco de dados é definido com DDL, os administradores de banco de dados e os usuários podem utilizar a Linguagem de Manipulação de Dados para inserir, recuperar e modificar os dados contidos nele. Em artigos futuros vamos dar uma olhada em profundidade no específicas comandos SQL.

Retrieving Data Using the SQL SELECT Statement



Recuperando dados com consultas SQL
Parte 1: Introdução a instrução SELECT
A Structured Query Language (SQL) oferece aos usuários de banco de dados de um mecanismo de recuperação de dados poderoso e flexível - a instrução SELECT. Neste artigo, vamos dar uma olhada na forma geral da instrução SELECT e compor um banco de dados consultas poucas amostras juntos. Se esta é sua primeira incursão no mundo do Structured Query Language, você pode querer rever o artigo Fundamentos SQL antes de continuar. Se você estiver olhando para criar um novo banco de dados a partir do zero, o artigo Criando bancos de dados e tabelas em SQL deve provar um ponto de partida bom.
Agora que você já roçou sobre os conceitos básicos, vamos começar nossa exploração da instrução SELECT. Tal como acontece com lições anteriores de SQL, nós vamos continuar a utilizar as instruções que são compatíveis com o padrão ANSI SQL. Você pode querer consultar a documentação do seu SGBD para determinar se ele suporta opções avançadas que podem aumentar a eficiência e / ou a eficácia do seu código SQL.  
A forma geral da instrução SELECT exibida abaixo:
SELECIONE select_list
DE fonte
ONDE condição (ões)
GROUP BY expressão
HAVING condição
ORDER BY expressão
A primeira linha da declaração informa ao processador SQL que este comando é uma instrução SELECT e que queremos recuperar informações de um banco de dados. O select_list nos permite especificar o tipo de informação que deseja recuperar. A cláusula FROM na segunda linha especifica a tabela de banco de dados específico (s) envolvido ea cláusula WHERE nos dá a capacidade de limitar os resultados a esses registros que atendem a determinado (s) condição . Os três últimos cláusulas representam recursos avançados fora do escopo deste artigo - nós vamos explorá-los em futuras aulas de SQL.
A maneira mais fácil de aprender SQL é pelo exemplo. Com isso em mente, vamos começar a olhar para algumas consultas de banco de dados. Ao longo deste artigo, vamos usar a tabela de funcionários da Empresa XYZ fictícia humana banco de dados de recursos para ilustrar todos os nossos procedimentos. Aqui está a tabela completa:
EmployeeID
Sobrenome
FirstName
Salário
ReportsTo
1
Ferreiro
John
32000
2
2
Scampi
Processar
45000
NULL
3
Kendall
Tom
29500
2
4JonesAbraão350002
5AllenProjeto de lei172504
6ReynoldsAllison195004
7JohnsonKatie210003
Retreiving uma tabela inteira
Director Empresa XYZ de Recursos Humanos recebe um relatório mensal Pagamento de salário e comunicação de informações para cada funcionário da empresa. A geração deste relatório é um exemplo de forma mais simples da instrução SELECT. Ele simplesmente recupera todas as informações contidas dentro de uma tabela de banco de dados - cada coluna e cada linha.Aqui está a consulta que irá realizar este resultado:
SELECT *
FROM emp
Bastante simples, certo? O asterisco (*) que aparece na select_list é um curinga usado para informar o banco de dados que gostaríamos de recuperar informações de todas as colunas na tabela de funcionários identificados na cláusula FROM. Queríamos recuperar todas as informações no banco de dados, por isso não foi necessário usar uma cláusula WHERE para restringir as linhas selecionadas da tabela. Aqui está o que os nossos resultados da consulta parecer:
EmployeeIDSobrenomeFirstNameSalárioReportsTo
------------------------------------------
1FerreiroJohn320002
2ScampiProcessar45000NULL
3KendallTom295002
4JonesAbraão350002
5AllenProjeto de lei172504
6ReynoldsAllison195004
7JohnsonKatie210003