Demais posts desta série:
Artigo do tipo Tutorial
Recursos especiais neste artigo:
Artigo no estilo Curso Online
Desvendando a SQL – Parte 1
Existe uma grande necessidade em bancos de dados relacionais de efetuar junções entre tabelas, seja para recuperar informações, que estão “espalhadas” devido a normalização de dados, ou para sumarizar informações para posterior geração de relatórios, mas o fato é que a junção entre tabelas é necessária e poderíamos dizer até mesmo fundamental.

No entanto, este assunto causa um certo desconforto na maioria dos desenvolvedores de aplicativos que acessam bancos de dados relacionais.

O perfeito entendimento da sintaxe e semântica da cláusula JOIN em instruções SQL é fundamental para que se obtenha o melhor desempenho possível ao recuperar dados de um bando de dados relacional.

E dependendo de qual informação se deseja e qual o tipo de relacionamento existente entre as tabelas que se pretende juntar, diferentes técnicas de junção podem ser utilizadas e são essas técnicas que serão abordadas nestes dois artigos desta série.


Em que situação o tema é útil
Em muitos momentos é necessário efetuar junções entre tabelas para buscar dados relativos a determinada informação. Em bancos de dados relacionais, a utilização da metodologia de normalização de dados é uma prática comum, amplamente difundida e muito correta porém, devido à normalização de dados, em muitos momentos é necessário efetuar junções entre tabelas para que se possa reconstruir uma informação completa. É neste tipo de situação que a correta utilização da junção entre tabelas na SQL se mostra bastante útil.

SQL - Structured Query Language - é uma linguagem de programação projetada para gerenciar dados armazenados em um Sistema de Gerenciamento de Banco de Dados Relacional (SGBDR, ou RDBMS – Reational Database Management System).

Originalmente baseada em álgebra relacional e cálculo relacional de tupla, a SQL é uma linguagem de definição de dados e uma linguagem de manipulação de dados. O escopo da SQL inclui inserção, consulta, atualização e exclusão de dados, criação e modificação do esquema e controle de acesso a dados. Além disso, a SQL também é frequentemente descrita como uma linguagem declarativa (4GL – Fourth Generation Language – ver Box 1), que também inclui elementos processuais.

SQL foi uma das primeiras linguagens comerciais para interagir com o modelo relacional de Edgar F. Codd, descrito em seu influente artigo datado de 1970 "Um Modelo de Dados Relacional para Grandes Bancos de Dados Compartilhados" (A Relational Model of Data for Large Shared Data Banks). Apesar de não totalmente aderente ao modelo relacional, como descrito por Codd, tornou-se a linguagem de banco de dados mais utilizada.

SQL se tornou um padrão do Instituto Nacional Americano de Padrões (ANSI – American National Standards Institute) em 1986, e da Organização Internacional de Padrões (ISO – International Organization for Standards) em 1987. Desde então, o padrão foi aprimorado várias vezes com recursos adicionais. Mas o código não é totalmente portátil entre os diferentes sistemas de banco de dados (SGBDs), que pode ocasionar o que chamamos de Vendor Lock-In, ou seja, dependência de um determinado fornecedor do SGBD, pois o código pode não ser portável. Os diferentes fabricantes não seguem perfeitamente o padrão, eles adicionam extensões, e o padrão se torna, por vezes, ambíguo.

Box 1. 4GL – Forth Generation Language

Em ciência da computação, programação declarativa é um paradigma de programação que expressa a lógica de um cálculo sem descrever seu fluxo de controle.

Muitas linguagens utilizam este estilo na tentativa de minimizar ou eliminar os efeitos colaterais, descrevendo o que o programa deve realizar ao invés de descrever o que o programa deve percorrer para realizar (o "como" é deixado para a linguagem de implementação).

Esta metodologia está em contraste com a programação imperativa, em que os algoritmos são implementados em termos de passos explícitos.

Programação declarativa considera muitas vezes programas como teorias de uma lógica formal, e cálculos como deduções desta lógica. A programação declarativa ganhou interesse especial recentemente pelo fato de simplificar a escrita de programação paralela.

As linguagens declarativas mais comuns são as de consulta de banco de dados (por exemplo: SQL ou XQuery), expressões regulares, lógica de programação, programação funcional e sistemas de gerenciamento de configuração.

Programação declarativa é muitas vezes definida como qualquer estilo de programação que não é imperativa. Uma série de outras definições comuns foram criadas na tentativa de dar ao termo uma definição que não simplesmente a contratasse com a programação imperativa, como:

- Um programa que descreve o cálculo que deve ser realizado e não como calcular;

- Qualquer linguagem de programação que não sofre com efeitos colaterais (ou mais especificamente, é referencialmente transparente);

- Uma linguagem com uma correspondência clara a lógica matemática.

A linguagem de programação de quarta geração (1970 a 1990), conhecida como 4GL (Forth Generation Language) é melhor entendida como um ambiente de quarta geração, pacotes de software de desenvolvimento de sistemas, incluindo linguagens de programação de nível muito elevado.

A linguagem de programação de alto nível é um ambiente de desenvolvimento ou 'Analyst Workbench' projetado com um sistema de dicionário de dados central, uma biblioteca de padrões de projeto de baixo acoplamento, um gerador de CRUD, gerador de relatórios, linguagem de consulta, Sistema de Gerenciamento de Banco de Dados, ferramentas de design visual e API de integração.

Historicamente, ela é muitas vezes usada para prototipagem e desenvolvimento evolutivo de softwares comerciais. Na história da ciência da computação, o 4GL seguiu o 3GL em uma tendência ascendente em direção a maior abstração e poder de instruções.

A linguagem natural e o modo de bloco estruturado das linguagens de programação de terceira geração melhoraram o processo de desenvolvimento de software.

Entretanto, os métodos de desenvolvimento 3GL podem ser lentos e sujeito a erros. Percebeu-se que alguns aplicativos podem ser desenvolvidos mais rapidamente adicionando-se uma linguagem de programação de alto nível e uma metodologia que gera o equivalente de instruções 3GL complexas porém com menos erros.

Em alguns sentidos, a engenharia de software surgiu para lidar com o desenvolvimento 3GL. Projetos 4GL são mais orientados para a resolução de problemas e engenharia de sistemas.

Todas as 4GLs são projetadas para reduzir o esforço de programação, o tempo que leva para desenvolver software e os custos de desenvolvimento de software.

Eles nem sempre são bem sucedidos nessa tarefa, muitas vezes resultando em códigos deselegantes e difíceis de manter.

A definição da geração 4GL foi feita por Capers Jones como parte de seu trabalho na análise de pontos de função. Jones define as várias gerações de linguagens de programação em termos de produtividade do desenvolvedor medido em pontos de função por pessoa/mês. A 4GL é definida como uma linguagem que suporta 12-20 pontos de função por funcionários mês. Isso se correlaciona com cerca de 16-27 linhas de código por ponto de função implementada em uma 4GL.

Linguagens de quarta geração têm sido muitas vezes comparadas a linguagens de programação específicas de domínio (DSLs - Domain Specific Languages). Alguns autores afirmam que 4GLs são um subconjunto das DSLs.

A SQL foi inicialmente desenvolvida pela IBM, por Donald D. Chamberlin e Raymond F. Boyce, no início de 1970. Esta versão, chamada inicialmente SEQUEL (Structured English Query Language – Linguagem Estruturada de Consulta em Inglês), foi projetada para manipular e recuperar dados armazenados no sistema original “quasi-relacional” de gerenciamento de dados da IBM, o System R, que um grupo do Laboratório de Pesquisa da IBM , em San Jose, havia desenvolvido durante a década de 1970. A sigla SEQUEL foi posteriormente alterada para SQL porque "SEQUEL" é uma marca comercial da empresa de aeronaves Hawker Siddeley, sediada no Reino Unido.

No final de 1970, a Relational Software Inc. (atualmente Oracle Corporation) viu o potencial dos conceitos descritos por Codd, Chamberlin e Boyce e desenvolveu seu próprio SGBDR (Sistema de Gerenciamento de Banco de Dados Relacional) baseado em SQL com aspirações de vendê-lo para a Marinha dos EUA, Agência Central de Inteligência e outras agências do governo dos EUA.

Em junho de 1979, a Relational Software Inc. lançou a primeira aplicação disponível no mercado de SQL, Oracle V2 (Versão 2) para computadores VAX.

Depois de testar o SQL em ambientes de teste dos cliente para determinar a utilidade e praticidade do sistema, a IBM começou a desenvolver produtos comerciais baseados em seu protótipo do System R incluindo System/38, SQL/DS e DB2, que estavam disponíveis comercialmente em 1979, 1981 e 1983, respectivamente.

A SQL foi projetada para uma finalidade específica: consultar os dados contidos em um banco de dados relacional. SQL é uma linguagem de consulta declarativa baseada em conjunto, e não uma linguagem imperativa como C ou BASIC. No entanto, existem extensões para o padrão SQL que adicionam funcionalidades de linguagem de programação procedural como construções de controle de fluxo. Os vários SGBDRs implementam sua própria codificação da linguagem procedural, como apresentado na Tabela 1.

Tabela 1. Extensões ao SQL nos diferentes SGBDRs.

Além das extensões padrão SQL/PSM e extensões proprietárias SQL, programação procedural e orientada a objetos está disponível em muitas plataformas SQL via integração do SGBD com outras linguagens. O padrão SQL define extensões SQL/JRT (rotinas e tipos SQL para o Java) para apoiar o código Java em bancos de dados SQL. O SQL Server 2005 usa o SQLCLR (SQL Server Common Language Runtime) para executar funções .NET no banco de dados, enquanto que as versões anteriores do SQL Server foram restritos ao uso de procedimentos armazenados estendidos não gerenciados que foram principalmente escritos em C.

Já o PostgreSQL permite que funções sejam escritas em uma ampla variedade de linguagens incluindo Perl, Python, Tcl, e C.

Como dito acima, a SQL foi adotada como padrão pelo ANSI em 1986, com o título de SQL-86 e pela ISO em 1987. Hoje em dia a norma passa por melhoria contínua e é geralmente identificado como padrão: “ISO/IEC 9075-n:aaaa Parte n: <título>” ou, simplesmente, ISO / IEC 9075.

A norma ISO/IEC 9075 é complementada pela norma ISO/IEC 13249: SQL Multimedia amd Applicatoin Packages (SQL/MM), que define as interfaces e pacotes baseados em SQL para aplicações como vídeo, áudio e dados espaciais.

Até 1996, o Instituto Nacional de Padrões e Tecnologia (NIST – National Institute of Standards and Technology) mantinha um programa de certificação de conformidade dos SGBDs com o padrão SQL. Atualmente os próprios fabricantes de SGBDs se auto-certificam em conformidade com seus produtos.

O padrão SQL passou por uma série de revisões, como mostra a Tabela 2.

...

Quer ler esse conteúdo completo? Tenha acesso completo