Gigaflops :: SQL
Make your own free website on Tripod.com

   Linguagens de Programação - SQL

A linguagem SQL

Histórico

A Linguagem SQL surgiu no início dos anos 70, como fruto de um projeto da IBM no laboratório de San José. Eles trabalhavam num projeto de uma linguagem que se adequasse ao modelo relacional. Este projeto trabalhava em paralelo com um outro projeto que visava desenvolver um sistema gerência de Banco de Dados relacional, chamado "System R".

O primeiro sistema de Banco de Dados baseado em SQL se tronou disponível comercialmente no final dos anos 70, juntamente com outros sistemas de Banco de Dados relacionais.

Em meados da década de 80, foi publicada a primeira versão padronizada da linguagem SQL, dois instituos trabalharam na sua padronização, o ANSI e o ISO.

Desde então, a linguagem vem evoluindo o que leva à criação de novas versões padronizadas, a saber a SQL-92 e a SQL-99, assim chamadas em regerências aos anos em que foram publicadas.

Com suas seguidas evoluções, a linguagem se tornou a mais poderosa ferramenta de definição e manipulação de Bancos de Dados relacionais, e é hoje utilizada na grande maioria dos sistemas de Bancos de Dados relacionais, tais como MySQL, DB2, SQLServer etc..

Aplicabilidade e uso

A linguagem SQL é básicamente uma linguagem de consulta a banco de dados. Ela é bem diferente das linguagens comuns de programação, a principal diferença é que a linguagem SQL não é uma linguagem procedural, ao contrário da grande maioria das linguagens de programação. Na linguagem SQL não se especifica como, ou em que ordem, serão executados os processos que irão fornecer os resultados requeridos, na SQL, nós apenas informamos o que queremos e o sistema de banco de dados é o responsável por escolher adequadamente os procedimentos a serem executados, de forma que os resultados sejam obtidos com a maior eficiência possível.

A linguagem SQL é uma linguagem relacional, isto é, ela é ideal para o tratamento de dados relacionados. De uma forma grotesca, dados relacionados são aqueles que podem ser arranjados em uma tabela, onde cada linha forma uma unidade lógica de dados.
A linguagem SQL é tanto uma linguagem de definição como de manipulação de dados, isto é, com a SQL podemos tanto definir e construir relações (tabelas), como manipular diversas relações de forma a obter resultados desejados.

A linguagem SQL está presente numa imensa quantidade de sistemas de banco de dados, ela pode estar visivel ou mascarada (embutida). Na forma visível o usuário digita os comandos na linguagem SQL diretamente em um prompt de comando, de onde também é possivel visualizar os resultados. Já na forma embutida a linguagem SQL não está visivel diretamente ao usuário, os programadores podem imbutir os comandos em SQL, dentro de um programa, e criar uma interface mais amigável com o usuário comum, este pode interagir mais facilmente com a interface do que com a própria linguagem SQL. Desta forma usuários comuns podem manipular um banco de dados sem mesmo ter um conhecimento de SQL.

Tutorial Simples

Este tutorial visa apenas exemplificar alguns comandos da linguagem SQL, mostrando um pouco da sua sintaxe.

As tabelas seguintes representam uma pequena base de dados, as quais os comandos exemplificados abaixo farão referência. Isto visa dar uma maior visibilidade aos exemplos contidos nesta página.

Contas
numero_conta cidade_agencia saldo_conta
A-100 Brasília 200
A-110 São Paulo 540
A-150 São Paulo 1200
A-160 Salvador 800
A-180 Rio de Janeiro 400
A-210 Brasília 1700
A-220 Salvador 1100
A-260 Salvador 600
A-290 Rio de Janeiro 600
A-300 São Paulo 1560

Clientes
cpf nome_cliente numero_conta
748.894.548-28 Maurício Souza A-100
684.521.141-95 Sara Braga A-110
784.222.536-47 Arnaldo Silva A-150
547.246.899-65 Jaques Cruz A-160
447.548.623-65 Fernanda Mota A-180
244.652.334-95 Cláudia Melo A-210
845.214.345-84 Heirrique Soares A-220
641.324.485-64 Mônica Oliveira A-160
214.257.300-07 João Matusalem A-260
451.670.014-34 Carlos Araujo A-290

Primeiramente apresentaremos a sintaxe básica da principal cláusula da linguagem SQL, o comando select. Vale ressaltar que todas as operações são feitas sob tabelas (ou relações) e temos como resultado também uma tabela.

select [coluna_1, ... , coluna_n]
from [tabela_1, ... , tabela_m]
where [condição_1 ...]
order by [coluna_1, ... , coluna_t] [desc|asc];
Após o nome select deve ser informado uma lista com os nomes das colunas que deverão aparecer no resultado, caso seja desejado que todas as colunas da relação apareçam no resultado basta colocar um asterisco ( * ) no lugar da lista.

Após o nome from deve ser fornecido uma lista com o nome das tabelas utilizadas na pesquisa. Caso haja mais de uma tabela nesta lista e se houver um mesmo nome de uma coluna em duas ou mais tabelas devemos, em cada referência a esta coluna, informar de qual tabela esta coluna pertence, fazemos isto da seguinte forma: Nome_tabela.nome_coluna (coloca-se o nome da tabela, segudo de um ponto e o nome da coluna).

Após a palavra where segue uma condição (ou conjunto de condições) que tem a funcionalidade de limitar as linhas a serem mostradas na tabela de saída. A utilização da cláusula where é optativa.

Após a palavra order by segue uma lista de colunas (campos de dados) pelo qual se deseja ordenar as linhas da tabela de saída. Pode-se acrescentar ainda as palavras desc que indica ordem decrescente, ou a palavra asc que indica ordem crescente, caso seja omitida as duas opções, a ordem será por default crescente.

Ao final do código da pesquisa, isto é, o conjunto de instruções discutido acima, deve-se acrescentar um sinal de ponto-e-virgula ( ; ), que indica o fim do comando.

Agora que já sabemos como fazer uma pesquisa vamos mostrar alguns exemplos.

select *
from contas
where saldo_conta > 750;


numero_conta cidade_agencia saldo_conta
A-150 São Paulo 1200
A-160 Salvador 800
A-210 Brasília 1700
A-220 Salvador 1100
A-300 São Paulo 1560

Nesta pesquisa selecionamos as linhas onde o valor 'saldo_conta' é maior que 750. Observe que todas as colunas da tabela contas estão presentes no resultado.


select *
from contas, clientes
where contas.numero_conta = 'A-180';


numero_conta cidade_agencia saldo_conta CPF nome_cliente numero_conta
A-180 Rio de Janeiro 400 748.894.548-28 Maurício Souza A-100
A-180 Rio de Janeiro 400 684.521.141-95 Sara Braga A-110
A-180 Rio de Janeiro 400 784.222.536-47 Arnaldo Silva A-150
A-180 Rio de Janeiro 400 547.246.899-65 Jaques Cruz A-160
A-180 Rio de Janeiro 400 447.548.623-65 Fernanda Mota A-180
A-180 Rio de Janeiro 400 244.652.334-95 Cláudia Melo A-210
A-180 Rio de Janeiro 400 845.214.345-84 Heirrique Soares A-220
A-180 Rio de Janeiro 400 641.324.485-64 Mônica Oliveira A-160
A-180 Rio de Janeiro 400 214.257.300-07 João Matusalem A-260
A-180 Rio de Janeiro 400 451.670.014-34 Carlos Araujo A-290

Este exemplo é interessante no fato que ele trata duas tabelas. Quando isto acontesse, a pesquisa ocorrerá sob uma nova tabela, que é formada através do produto cartesiano das tabelas relacionadas, dito de outra forma, cada linha de uma tabela será concatenada (i.e. juntada, unida) com todas as linhas das outras tabelas que estiverem relacionadas. Portanto para uma relação de duas tabelas onde cada uma tem 10 linhas (como no nosso exemplo), a tabela resultante do produto cartesiano terá 10 x 10 = 100 linhas.

Isto pode ser facilmente visto no nosso exemplo, já que apenas uma linha da tabela contas, se concatenou com as outras 10 linhas da tabela clientes, inclusive com a repetição da coluna 'numero_conta', que está presente nas duas tabelas originais. A nossa tabela de saída teve apenas 10 linhas devido ao fato de termos infromado uma cláusula where, do comando SQL, na qual a condição dizia que o campo 'numero_conta' da tabela contas deveria ser igual a 'A-180'.

Quando fazemos a junção de duas tabelas podemos gerar linhas que não possuem um significado coerente (como visto no exemplo acima). Para gerar uma relação entre tabelas de forma que não ocorra este problema, devemos unir as linhas pela igualdade dos dados das colunas que estão presentes nas tabelas relacionadas. Veja o exemplo seguinte.


select contas.numero_conta, nome_cliente, cidade_agencia, saldo_conta
from contas, clientes
where contas.numero_conta = clientes.numero_conta and saldo_conta > 1000
order by saldo_conta desc;


numero_conta nome_cliente cidade_agencia saldo_conta
A-210 Cláudia Melo Brasília 1700
A-300 Carlos Araujo São Paulo 1560
A-150 Arnaldo Silva São Paulo 1200
A-220 Heirrique Soares Salvador 1100

Neste exemplo igualamos os dados da coluna em comum as duas tabelas 'numero_conta' através da condição 'contas.numero_conta = clientes.numero_conta'. Desta forma, concatenamos cada linha da tabela contas com apenas uma linha da tabela clientes (justamente as que possuíam o mesmo número de conta). Desta forma garantimos que os dados mostrados numa única linha fazem referência ha uma única pessoa. o que não acontecia na tabela gerada pelo exemplo anterior.
 
   Menu SQL