SQL
Jacir de Oliveira , José Alencar Philereno
Faculdade de Informática de Taquara
Igrejinha - RS – Brazil
[email protected] , [email protected]
Resumo. Este artigo irá descrever a linguagem de programação SQL, dando-nos uma noção
básica de seus comandos e suas utilidades que auxiliam na elaboração de tarefas, também
demonstração de programas em algumas linhas de comando, na sua funcionalidade com comando
de organização e busca em uma tabela de dados. Esta funcionalidade é fornecida por uma tabela
que é executado em nossos programas.
1 Introdução
Veremos um pouco sobre a linguagem SQL, ele foi desenvolvido para ser uma linguagem
padrão para operações com Banco de Dados. A lingüagem SQL foi elaborada para ser independente
de hardware ou do software. Ao usar o SQL, você não precisa saber a respeito do software de banco
de dados ou do hardware envolvido em uma operação. Tudo o que você precisa conhecer são os
comandos ou instruções SQL padrão para solicitar informações, que obrigatoriamente é o mesmo
em todos os sistemas que utilizam o SQL. Tambem veremos aspectos atuais e apontar algumas
tendências, estabelecer uma base para compreender detalhadamente como os comandos SQL são
utilizados para definir e modificar os dados, pois existem várias regras e conceitos implementados
pelos bancos de dados SQL de forma inconsistente. A linguagem está presente nos mais variados
sistemas de informação, podendo ser encontrada, em aplicativo rodando sob um simples PDA ou
em uma consulta complexa realizada sob um mainframe. Ou ainda, pode estar codificada em
sistemas escritos com modernas linguagens de programação, como Java, ou mesmo em programas
feitos em COBOL. Em se tratando de manipulação de dados, a SQL é quase onipresente hoje em
todos os sistemas.
2 Conceitos básicos
Uma entrada SQL é formada por uma seqüência de comandos. Um comando é composto por
uma seqüência de termos (tokens) terminada por um ponto-e-vírgula (";"). O fim do fluxo de
entrada também termina o comando.Os termos são válidos dependendo da sintaxe particular de cada
comando. Um termo pode ser uma palavra chave, um identificador, um identificador entre aspas,
um literal ou constante, ou um caractere especial. Geralmente os termos são separados por espaço
em branco, tabulação ou nova-linha, mas não há necessidade se não houver ambigüidade, normalmente isto só acontece quando um caractere especial está adjacente a um termo de outro tipo.
A SQL é uma linguagem padrão, padronizada pela ANSI (American National Standard Institute),
para banco de dados . Conhecendo a Linguagem SQL é possível programar em qualquer SGBD
(Sistema Gerenciador de Banco de Dados).
2.1.Paradigma da Linguagem SQL
Ela possui uma Linguagem declarativa.
3 Funcionalidade
Veja abaixo uma seqüência de três comandos, um por linha, embora isto não seja necessário,
pode haver mais de um comando na mesma linha, assim como um único comando pode ocupar
várias linhas.
SELECT * FROM MINHA_TABELA;
UPDATE MINHA_TABELA SET A = 5;
INSERT INTO MINHA_TABELA VALUES (3, 'Ola pessoal');
A sintaxe do SQL não é muito consistente em relação a quais termos identificam comandos e quais
são operandos ou parâmetros. Geralmente os primeiros termos são o nome do comando. Além
disso, comentários podem estar presentes na entrada SQL os comentários, eles não são termos, pois
são equivalentes a espaços em branco.
4 Identificação das palavras chave
No exemplo acima o termo SELECT, e assim como outros termos, como UPDATE e
VALUES são exemplos de palavras chave, são palavras que possuem um significado definido pela
linguagem SQL. Os termos MINHA_TABELA e A são exemplos de identificadores, os quais
identificam nomes de tabelas, colunas e outros objetos do banco de dados, Os identificadores e as
palavras chave do SQL devem iniciar por uma letra (a-z e, também, letras com diacrítico - áéç... - e
letras não latinas), ou o caractere sublinhado (_). Os demais caracteres de um identificador, ou da
palavra chave, podem ser letras, sublinhados, dígitos (0-9) O padrão SQL não irá definir palavra
chave contendo dígitos, começando ou terminando por sublinhado e, portanto, os identificadores
com esta forma estão a salvo contra possíveis conflitos com extensões futuras do padrão. O sistema
utiliza não mais que NAMEDATALEN-1 caracteres de um identificador; nomes maiores podem ser
escritos nos comandos, mas são truncados. Por padrão NAMEDATALEN é 64 e, portanto, o
comprimento máximo de um identificador é 63. Se este limite causar problema, pode ser aumentado
modificando a constante NAMEDATALEN no arquivo.
Os identificadores e as palavras chave não fazem distinção entre letras maiúsculas e
minúsculas.
Como exemplo.
UPDATE MINHA_TABELA SET A = 5;
pode ser escrito de forma equivalente como
uPDaTE Minha_Tabela SeT a = 5;
Normalmente utiliza-se a convenção de escrever as palavras chave em letras maiúsculas e os
nomes em letras minúsculas.
UPDATE minha_tabela SET a = 5;
5 Aplicabilidade da Linguagem SQL
A linguagem SQL é 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, na linguagem SQL não se especifica como, ou em que ordem, serão
executados os processos que irão fornecer os resultados requeridos, 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. É Uma
linguagem relacional, o ideal para o tratamento de dados relacionados, ou 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.
6. Modelo básico SQL
Nas tabelas abaixo alguns comandos da linguagem SQL, mostrando um pouco da sua
sintaxe, uma pequena base de dados, as quais os comandos exemplificados abaixo farão referência.
Contas
numero_conta
A-100
A-110
A-150
A-160
A-180
A-210
A-220
A-260
A-290
A-300
cidade_agencia
Brasília
São Paulo
São Paulo
Salvador
Rio de Janeiro
Brasília
Salvador
Salvador
Rio de Janeiro
São Paulo
saldo_conta
200
540
1200
800
400
1700
1100
600
600
1560
Clientes
cpf
748.894.548-28
684.521.141-95
784.222.536-47
547.246.899-65
447.548.623-65
244.652.334-95
845.214.345-84
641.324.485-64
nome_cliente
Maurício Souza
Sara Braga
Arnaldo Silva
Jaques Cruz
Fernanda Mota
Cláudia Melo
Heirrique Soares
Mônica Oliveira
numero_conta
A-100
A-110
A-150
A-160
A-180
A-210
A-220
A-160
214.257.300-07
451.670.014-34
João Matusalem
Carlos Araujo
A-260
A-290
Na sintaxe básica da linguagem SQL, no comando select, 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, seguido de( ; ).
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,e 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.
Exemplos de consultas.
select *
from contas
where saldo_conta > 750;
A consulta fica assim
numero_conta
A-150
A-160
A-210
A-220
A-300
cidade_agencia
São Paulo
Salvador
Brasília
Salvador
São Paulo
saldo_conta
1200
800
1700
1100
1560
Uma consuta por numero de conta
Select *from contas, clientes where contas.numero_conta = 'A-180';
Os dados da coluna em comum as duas tabelas 'numero_conta' através da condição
'contas.numero_conta = clientes.numero_conta', concatenamos cada linha da tabela contas com
apenas uma linha da tabela clientes , as que possuíam o mesmo número de conta.
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 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 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 nesse 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.
Como 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;
Aqui igualamos os dados da coluna em comum as duas tabelas 'numero_conta' através da
condição 'contas.numero_conta = clientes.numero_conta', concatenamos cada linha da tabela contas
com apenas uma linha da tabela clientes , as que não possuíam o mesmo número de conta, mas com
saldo maior que R$ 1000. dados mostrados numa única linha.
numero_conta
A-210
A-300
A-150
A-220
nome_cliente
Cláudia Melo
Carlos Araujo
Arnaldo Silva
Heirrique Soares
cidade_agencia
Brasília
São Paulo
São Paulo
Salvador
saldo_conta
1700
1560
1200
1100
6.1 Caracteres especiais
Alguns caracteres não alfanuméricos possuem significado especial diferente de ser um
operador. Os detalhes da utilização podem ser encontrados nos locais onde a sintaxe do respectivo
elemento é descrita. Esta seção se destina apenas a informar a existência e fazer um resumo das
finalidades destes caracteres.
O caractere dólar ($) seguido por dígitos é utilizado para representar parâmetros posicionais no
corpo da definição de uma função. Em outros contextos o caractere dólar pode ser parte de um
identificador.
Os parênteses (()) possuem seu significado usual de agrupar expressões e impor a precedência. Em
alguns casos os parênteses são necessários como parte fixa da sintaxe de um determinado comando
SQL. Os colchetes ([]) são utilizados para selecionar elementos da matriz. As vírgulas (,) são
utilizadas em algumas construções sintáticas para separar elementos da lista. O ponto-e-vírgula (;)
termina um comando SQL, não podendo estar em nenhum lugar dentro do comando, exceto dentro
de constante do tipo cadeia de caracteres ou identificadores entre aspas. Os dois-pontos (:) são
utilizados para selecionar "faixas" em matrizes. Em certos dialetos do SQL (como a linguagem SQL
embutida), os dois-pontos são utilizados como prefixo dos nomes das variáveis.
O asterisco (*) possui um significado especial quando utilizado no comando SELECT ou na função
de agregação COUNT. O ponto (.) é utilizado nas constantes numéricas, e para separar os nomes de
esquemas, tabelas e colunas.
7 Referencias
www.microsoft.com/sql
www.w3schools.com/sql/default.asp
www.sqlmagazine.com.br
www.devmedia.com.br/sqlmagazine
Download

SQL Jacir de Oliveira , José Alencar Philereno Faculdade