Вы находитесь на странице: 1из 32

1 - CONCEITOS E TERMOS IMPORTANTES SOBRE BANCOS DE DADOS

Atributos
Os atributos são as menores unidades da estrutura de dados de uma aplicação. São os dados
elementares, aos quais é possível atribuir características.

Tabelas
São conjuntos de dados estruturados a partir dos atributos. As tabelas são acessadas através de
um ou mais atributos que os compõem, definido(s) como sua chave primária. Uma chave
especificada como primária não deve ser duplicada em um arquivo de dados. Já as chaves
especificadas como secundárias, que fornecem acessos alternativos aos dados, podem permitir
duplicação. As informações sobre chaves são geralmente armazenadas em um arquivo separado
do arquivo de dados, chamado arquivo de índice.

Nomes de arquivos de dados e de índices devem ser declarados de acordo com a regra de
formação de nomes de arquivos do Windows.

Banco de Dados
São coleções de dados (tabelas) inter-relacionados de forma a servir a uma ou mais aplicações. A
maioria dos bancos de dados atuais é relacional. Um banco de dados relacional armazena
informações em tabelas lógicas constituídas de linhas e colunas.

Relacionamentos
Definição de como duas tabelas de um determinado banco de dados se relacionam ou dependem
um do outro.

Informações importantes sobre relacionamentos:

• Tabelas relacionadas
Um relacionamento é estabelecido entre duas tabelas, sendo uma delas a tabela-pai e a outra a
tabela-filho.

• Atributos comuns a ambos


O estabelecimento do relacionamento se dá através da definição de atributos comuns às tabelas
pai e filho.

• Cardinalidade
A estrutura do relacionamento entre tabelas pode ser:

1 x 1 ( um-para-um) - um registro da tabela-pai se relaciona com apenas um registro da tabela-


filho

1 x N (um-para-muitos) - um registro da tabela-pai se relaciona com vários registros da tabela-


filho

M x N (muitos-para-muitos) - um registro da tabela-pai se relaciona com vários registros da


tabela-filho e um registro da tabela-filho se relaciona com vários registros da tabela-pai

Exemplo:
Utilizando o Banco de Dados Paradox

Estrutura da tabela: CURSO


ATRIBUTO (CAMPO) TIPO TAMANHO CHAVE CHAVE
PRIMÁRIA SECUNDÁRIA
CODIGO Alpha 2 SIM
NOME Alpha 30 SIM
TURNO Alpha 10

Tabela CURSO com dados


CODIGO NOME TURNO
10 Engenharia Civil Multiperiódico
11 Tecnologia em Processamento de Dados Noturno
48 Tecnologia em Processamento de Dados Multiperiódico

Estrutura da tabela: ALUNO


ATRIBUTO TIPO TAMANHO CHAVE CHAVE CHAVE
(CAMPO) PRIMÁRIA SECUNDÁRIA ESTRANGEIRA
CODIGO Alpha 7 SIM
NOME Alpha 30 SIM
ENDERECO Alpha 30
BAIRRO Alpha 10
CEP Alpha 9
CIDADE Alpha 15 SIM
COD_CURSO Alpha 2 SIM

Tabela ALUNO com dados


CODIGO NOME ENDERECO BAIRRO CEP CIDADE COD_CURSO
5001001 Ana Paula da Silva Rua A, 34 Centro 38100- Uberaba 11
250
5001002 Marcos Pereira Rua B, 50 Mercês 38101- Uberlândia 48
100
5001003 Maria Silveira Rua C, 36 Fabrício 38100- Uberaba 10
260
5001004 Carlos Moreira Rua D, 47 Centro 38934- Araguari 11
676

Considerações:
Neste caso há relacionamento de 1 x N , ou seja, um registro da tabela CURSO (tabela-pai)
poderá relacionar-se com vários registros da tabela ALUNO (tabela-filho).

A tabela CURSO é a tabela-pai (entidade dominante) e a tabela ALUNO é a tabela-filho (entidade


subordinada). Embora a tabela ALUNO tenha uma chave primária (código do aluno), não sendo
uma entidade fraca, só tem sentido a existência da tabela ALUNO, caso exista a tabela CURSO.

Vamos agora criar uma tabela com informações sobre Disciplinas.

Estrutura da tabela: DISCIPLINA


ATRIBUTO TIPO TAMANHO CHAVE CHAVE CHAVE
(CAMPO) PRIMÁRIA SECUNDÁRIA ESTRANGEIRA
CODIGO Alpha 5 SIM
NOME Alpha 30 SIM
COD_CURSO Apha 2 SIM

Tabela DISCIPLINA com dados


CODIGO NOME COD_CURSO
11001 Administração 11
11100 Linguagem e Técnicas de Programação I 11
10200 Cálculo Numérico 10

Considerações:
Neste caso há relacionamento de 1 x N , ou seja, um registro da tabela CURSO (tabela-pai)
poderá relacionar-se com vários registros da tabela DISCIPLINA (tabela-filho).

A tabela CURSO é a tabela-pai (entidade dominante) e a tabela DISCIPLINA é a tabela-filho


(entidade subordinada).

Vamos agora criar uma tabela com informações sobre a matrícula de alunos.

Estrutura da tabela: MATRICULA


ATRIBUTO TIPO TAMANH CHAVE CHAVE CHAVE
(CAMPO) O PRIMÁRI SECUNDÁRI ESTRANGEIR
A A A
COD_ALUNO Alpha 7 SIM
COD_DISC Alpha 30 SIM
TOTAL_FALTA Short
S
NOTA_FINAL Number

Tabela MATRICULA com dados


COD_ALUNO COD_DISC TOTAL_FALTAS NOTA_FINAL
5001001 11001 5 6.9
5001001 11100 0 8.9
5001004 11101 3 4.5
5001004 11100 4 6.7

Considerações:
A chave primária é composta, ou seja, necessitamos do COD_ALUNO e COD_DISC para identificar
o registro.

Neste caso há relacionamento de M x N (relacionamento de ALUNO x DISCIPLINA), ou seja, um


aluno pode matricular-se em várias disciplinas. Por sua vez, em uma disciplina pode ter vários
alunos matriculados.

Resumindo: Não existiria a MATRICULA se não existissem ALUNO e DISCIPLINA (chamamos a


tabela MATRICULA de entidade fraca, pois por si só, não possui atributos suficientes para a
formação de uma chave primária).

DER - Diagrama Entidade-Relacionamento

Integridade Referencial
Não se pode eliminar um registro de uma tabela-pai caso haja registros relacionados em uma
tabela-filho.

Exemplo:
Tentar eliminar o registro de um curso, sem primeiro eliminar todas as disciplinas que pertençam
a este curso ou todos os registros de matrículas em disciplinas deste curso.

Este é um recurso valioso de um banco de dados, mantendo a integridade das tabelas.

2 - TIPOS DE ATRIBUTOS (CAMPOS) PARA TABELAS DO PARADOX

• Alpha (A) : Este tipo de campo pode armazenar uma string contendo qualquer um dos
seguintes caracteres: Letras, números e caracteres especiais da tabela ASCII. Pode
armazenar um máximo de 255 caracteres

• Number (N) : Este tipo de campo pode armazenar números variando de 10-307 até
10308 com 15 algarismos significativos

• Money ($) : Este tipo de campo pode armazenar números formatados para exibir um
símbolo monetário com um número de casas decimais a ser definido durante a criação da
tabela. Independentemente do número de casas decimais, o Database Desktop utiliza
sempre seis casas decimais nos cálculos internos com este tipo de campo.

• Short (S) : Este tipo de campo pode armazenar números inteiros entre -32768 e 32768.

• Long Integer (I) : Este tipo de campo pode armazenar números inteiros entre
-21474883648 e 21474883647.

• <BCD (Binary Coded Decimal - # ) : Este tipo de campo é usado para realizar cálculos
numéricos com uma precisão maior do que aquela efetuada com os demais tipos
númericos. A principal utilidade deste tipo de campo consiste em fornecer compatibilidade
com outras aplicações que usam dados deste tipo, pois no caso da utilização de tabelas
Paradox num aplicativo, só serão permitidos números com um máximo de 15 algarismos
significativos.

• Date (D) : Este tipo de campo pode armazenar datas variando de 1 de janeiro de 9999 AC
a 31 de dezembro de 9999 DC.

• Time (T) : Este tipo de campo pode armazenar um horário com a precisão de
milissegundos.

• TimeStamp (@) : Este tipo de campo pode armazenar simultaneamente informações de


data e hora.

• Graphics (G) : Este tipo de campo pode armazenar imagens gráficas armazenadas em
arquivos do tipo BMP, PCX, GIF, TIF e EPS. Quando a imagem é armazenada em um
campo do tipo Graphics colando-a do Clipboard, ela é convertida no formato BMP. Este
tipo não requer a especificação de tamanho na coluna Size, pois o seu conteúdo não será
armazenado na tabela, mas em um arquivo separado. Campos do tipo Graphics não
podem ser editados pelo Database Desktop.

• Memo (M) : Este tipo de campo é usado para armazenar strings de texto que não cabem
num campo do tipo Alpha. O tipo de campo Memo pode ter, virtualmente, qualquer
comprimento (qualquer número de caracteres). O tamanho atribuído ao campo na coluna
Size especifica a quantidade de caracteres armazenados diretamente na tabela, podendo
variar de 1 a 240. Um arquivo com a extensão .MB completa a definição do campo. A
quantidade de caracteres que podem ser armazenados em um campo deste tipo só
depende do espaço disponível em disco. Este tipo de campo pode armazenar os mesmos
caracteres que os descritos no tipo Alpha e não pode ser editado pelo Database Desktop.

• Formatted Memo (F) : Este tipo de campo é identico ao anterior, exceto que o texto
armazenado pode ser formatado pelo Paradox. Campos do tipo Formatted Memo não
podem ser editados pelo Database Desktop.

• OLE (O) : Este tipo de campo pode armazenar diferentes tipos de dados, como imagens,
sons e documentos. O campo OLE não requer a especificação de tamanho na coluna Size,
pois o seu conteúdo não será armazenado na tabela, mas em um arquivo separado.
Campos OLE não podem ser editados pelo Database Desktop.

• Logical (L) : Este tipo de campo pode armazenar valores do tipo Verdadeiro (True) ou
Falso (False).

• Autoincrement (+) : Este tipo de campo armazena um inteiro longo que só pode ser lido
(e não editado). O Database Desktop inicializa este campo com o valor 1, incrementando-
o para cada novo registro adicionado à tabela. Você pode redefinir este valor mínimo
especificando o valor desejado na caixa de texto Minimum Value da caixa de dialógo
Create Paradox 7 Table. Entretanto, se você deletar um registro da tabela, o campo do
tipo Autoincrement dos demais registros não será atualizado, e o próximo registro
adicionado à tabela receberá, no campo do tipo Autoincrement, o valor igual ao valor
máximo já armazenado em um registro, acrescido de uma unidade, isto é, tudo se passa
como se nenhum registro houvesse sido deletado. Este tipo de campo não pode ser
editado pelo Database Desktop.

• Binary (B) : Este tipo de campo é usado para manipular dados que não podem ser
interpretados pelo Database Desktop, e só devem ser utilizados por usuários avançados.
Geralmente é utilizado no armazenamento de dados de áudio.

• Bytes (Y) : Este tipo de campo é usado para manipular dados que não podem ser
interpretados pelo Database Desktop, e só deve ser utilizado por usuários avançados.
Geralmente serve para o armazenamento de dados de código de barras.

<

3 - UTILIZANDO O DATABASE DESKTOP


Utilizaremos o Database Desktop para a criação e manipulação das tabelas de um banco de dados
(no nosso caso, o Paradox).

Através do Database Desktop é possível:

• Criação e edição de tabelas


• Definição de chave primária
• Definição de chaves secundárias
• Definição de validações dos atributos(campos) da tabela
• Definição dos relacionamentos entre tabelas
• Definição de integridade referencial
• Definição de senha para acesso às tabelas
• Testar sentenças em SQL.
• etc.
Tela inicial do Database Desktop (que pode ser carregada a partir das opções do menu - Borland
Delphi):

Criação de tabelas.

Selecione o banco de dados Paradox e clique em OK.


Aparecerá em seguida a seguinte tela que permitira criar uma tabela, definir validações para os
atributos(campos) da tabela, chaves, relacionamentos, integridade referencial e senha para a
tabela.

Vamos criar duas tabelas e digitar alguns registros que nos permitirão nos próximos tópicos,
testar as sentenças SQL.

Tabela 1 - Dados de Alunos

Estrutura da tabela: ALUNO


ATRIBUTO (CAMPO) TIPO TAMANHO CHAVE CHAVE
PRIMÁRIA SECUNDÁRIA
CODIGO Alpha 7 SIM
NOME Alpha 30 SIM
CIDADE Alpha 10 SIM
IDADE Short

Criação da tabela no Database Desktop:


Field Name (nome do campo) - Type (tipo do campo) - Size (tamanho) - Key (chave
primária)

Basta pressionar a barra de espaço no campo Type para mostrar uma listagem dos tipos de
campos do Paradox.

Definição da chave primária:

Basta clicar ou pressionar a barra de espaço no campo Key

Validação dos campos:

Para cada atributo(campo) pode-se definir:

• se o campo é requerido (obrigatório)


• valor mínimo
• valor máximo
• valor default
• máscara

Criação das chaves secundárias:

Vale lembrar que para cada chave secundária é criado um arquivo de índice. Neste caso queremos
ordenar a nossa tabela de Alunos por ordem alfabética de NOME DO ALUNO e NOME DA CIDADE.
Nesse caso serão dois arquivos de índices.

Para isso, selecione em "Table Properties" a opção "Secondary Indexes".

Em seguida clique em "Define". Aparecerá a seguinte tela:


Basta selecionar o campo NOME e clicar na seta para a direita.

Opções de indexação:

• Unique - A informação do campo deve ser única (não permite repetição


• Case sensitive - Leva em conta maiúscula e minúsculas
• Maintained - As tabela de índices são alteradas toda vez que se altera a tabela de dados
• Descending - A ordenação será em ordem descendente.

No nosso caso, vamos deixar marcada só a opção "Maintained". Clique em seguida em OK.

Aparecerá a seguinte tela. Você deverá fornecer o nome do arquivo de índice. Vamos digitar
INDNOME. Clique em OK.

Aparecerá a tela a seguir:


Seguindo o mesmo roteiro, crie agora o arquivo de índice ordenado pelo NOME DA CIDADE.

O nome do arquivo de índice poderá ser INDCIDADE.

Clique em "Save As ..."

Em seguida crie uma pasta "Mini-curso" abaixo da unidade "C:\". Neste momento será gravada a
tabela ALUNO e as tabelas de índices associadas, ou seja, INDNOME e INDCIDADE.
Criaremos agora uma tabela que permitirá armazenar os valores de mensalidades pagos pelo
aluno durante o semestre.

Tabela 2 - Dados de Mensalidades

Estrutura da tabela: MENSALIDADE


ATRIBUTO TIPO TAMANH CHAVE CHAVE CHAVE
(CAMPO) O PRIMÁRI SECUNDÁRI ESTRANGEIRA
A A
COD_ALUNO Alpha 7 SIM SIM
MES Short SIM
VALOR $
(Money)

Seguindo o roteiro crie a tabela e grave com o nome de MENSALIDADE. Neste caso, não teremos
arquivos de índices secundários, pois não definimos nenhum campo para ser chave secundária.

Observe que a chave primária é composta, ou seja, são necessários os campos COD_ALUNO e
MES para formar a chave primária, pois o aluno paga 6 mensalidades. Neste caso o
relacionamento de ALUNO x MENSALIDADE é de 1 x N.

A tabela-pai é ALUNO e a tabela-filho é MENSALIDADE. Não existirá a tabela de MENSALIDADE


se não existir a tabela ALUNO.

Abertura das tabelas ALUNO e MENSALIDADE:

Abriremos as duas tabelas que estão gravadas na pasta "C:\Mini-curso".

Antes definiremos no Database Desktop que a pasta "C:\Mini-curso" será o nosso diretório de
trabalho. Todas as operações de abrir e salvar já posicionarão automaticamente nesta pasta.

Selecione a pasta "C:\Mini-curso" e clique em OK.


Vamos abrir agora as duas tabelas (ALUNO e MENSALIDADE):

Selecione as tabelas ALUNO e MENSALIDADE e clique em "Abrir". (Repare que houve o


posicionamento automático na pasta "C:\Mini-curso").

Entrada de Registros para a tabela ALUNOS:

Após abrir as duas tabelas a tela ficará com a seguinte aparência:

Na barra de ferramentas observamos os seguintes botões:


Na sequência: Recortar, Copiar, Colar , "Reestruturar" , Navegação, Field View (muda a
aparência do cursor) e "Modo de Edição".

Vamos digitar alguns registros na tabela ALUNO. Para isso, clique no botão "Modo de Edição".

Criando um relacionamento entre MENSALIDADE e ALUNO:

A tabela MENSALIDADE é filha da tabela ALUNO, ou seja, só existirá algum registro na tabela
MENSALIDADE se existir algum aluno cadastrado na tabela ALUNO.

Criaremos um relacionamento entre MENSALIDADE e ALUNO, utilizando o Database Desktop.

Torne ativa a janela da tabela MENSALIDADE. A definição do relacionamento sempre se dá da


tabela-filha para a tabela-pai.

Clique no botão de "Reestruturar", na barra de ferramentas do Database Desktop. Selecione em


"Table properties" a opção "Table Lookup". Em seguida clique em "Define".
Aparecerá a seguinte tela. Selecione o campo COD_ALUNO e clique na seta para a direita. Em
seguida clique no nome da tabela "ALUNO.db" e seta para a esquerda. Lembrando que o
relacionamento só se dá através de campos do mesmo tipo e tamanho existentes nas duas
tabelas.

Em seguida clique em OK e depois em "Save".

Pronto está definido o relacionamento.

Entrada de Registros para a tabela MENSALIDADE:

Iremos entrar registros para a tabela MENSALIDADE. Não será necessário digitar o código do
aluno, pois já definimos um relacionamento com a tabela ALUNO.

Entrar no modo de edição. Clique no último botão da barra de ferramentas.

No campo COD_ALUNO basta pressionar as teclas CONTROL-SPACE que aparecerá a tabela ALUNO
e poderemos selecionar para qual aluno entraremos os dados sobre a mensalidade. Definindo o
relacionamento o usuário só conseguirá entrar registros para a tabela MENSALIDADE, de alunos
que estejam cadastrados na tabela ALUNO.
Entraremos os seguintes registros para a tabela MENSALIDADE.

Alteração de Registros de uma tabela:

Para alterar um registro basta entrar no modo de edição, posicionar-se em um registro e alterar
as informações.

Eliminação de Registros de uma tabela:

Para eliminar um registro basta entrar no modo de edição, posicionar-se em um registro e


pressionar CONTROL-DELETE.

Definindo a integridade referencial entre MENSALIDADE e ALUNO:

Como já vimos anteriormente, o conceito de integridade referencial é o seguinte:

"Eu não posso eliminar registros de uma tabela-pai se existirem registros relacionados na tabela-
filho".

Considerando as tabelas ALUNO e MENSALIDADE eu não posso eliminar um determinado aluno na


tabela ALUNO se existirem registros sobre este aluno na tabela MENSALIDADE.

A definição da integridade referencial também se dá entre a tabela-filho para a tabela-pai.


Para definir a integridade referencial a tabela-pai deverá estar fechada. Portanto feche a tabela
ALUNO.

Clique no botão de "Reestruturar", na barra de ferramentas do Database Desktop. Selecione em


"Table properties" a opção "Referential Integrity". Em seguida clique em "Define".

Aparecerá a seguinte tela. Selecione o campo COD_ALUNO e clique na seta para a direita. Em
seguida clique no nome da tabela "ALUNO.db" e seta para a esquerda. Lembrando que a definição
da integridade referencial só se dá através de campos do mesmo tipo e tamanho existentes nas
duas tabelas.

Clique em OK.
Você tem que dar um nome para a integridade referencial estabelecida. Daremos o nome de
INTMENSALIDADE, como mostrado na tela a seguir:

Clique em OK.

Depois clique em "Save".

Agora tente eliminar algum registro na tabela ALUNO (utilize CONTROL-DELETE). Se existir algum
registro deste aluno na tabela MENSALIDADE você não vai conseguir.

Definição de senhas e restrições de acesso para os campos de uma tabela:

Esta opção permite definir direitos e senhas para acesso à tabela. Os direitos que podem ser
definidos são:

• inserir e eliminar registros


• entrar dados
• atualização
• leitura
• todos os direitos anteriores
Não utilizaremos esta opção. Vocês poderão treinar estes recursos posteriormente. Partiremos
agora para a linguagem SQL.

4 - LINGUAGEM SQL
Introdução
SQL (Structured Query Language) é a linguagem comum de gerenciamento de bancos de dados.
Sua principal vantagem consiste em ser uma linguagem padronizada - o que faz com que um
mesmo conjunto comum de instruções SQL possa ser usado em todos os sistemas de
gerenciamento de bancos de dados compatíveis com a SQL.

A linguagem SQL foi criada nos anos 70 pela IBM, que estava preocupada em desenvolver um
método que permitisse mesmo a usuários sem conhecimento prévio de programação extrair e
exibir as informações desejadas de um banco de dados.

O que é uma consulta (query)?

Uma consulta é uma pergunta que um aplicativo faz a um banco de dados e depois retorna
registros. As consultas retornam um conjunto de registros que satisfazem a alguns critérios e
contêm informações de campos selecionados. Ao falar sobre consultas, considere toda instrução
SQL como uma pergunta. O resultado conseguido é a resposta que o mecanismo de banco de
dados dá. Existem algumas instruções SQL que são simplesmente um comando: "Eu ordeno que
você crie uma tabela!" ou "Eu ordeno que você insira um registro!". Para estes comandos, você
não receberia um resultado. Entretanto, para perguntas ou consultas, um resultado é o conjunto
de registros retornados pelo mecanismo de banco de dados.

5 - SENTENÇAS SQL

Utilizaremos o Database Desktop para realizarmos consultas às tabelas criadas no item 3, ou seja,
tabela ALUNO e tabela MENSALIDADE. Para a construção e execução das consultas SQL
utilizaremos a seguinte opção do Database Desktop:
Atenção: Lembre-se de configurar como diretório de trabalho (File-Working Directory), a pasta
onde estão suas tabelas. Neste caso não é necessário abrir as tabelas.

Aparecerá a seguinte tela onde escreveremos e executaremos as nossas consultas:

Após escrever uma sentença SQL, para executá-la basta clicar no seguinte botão da barra de

ferramentas:

5.1 - Instrução SELECT

A instrução ou comando SELECT é uma pergunta ou requisição ao mecanismo de banco de dados


para que este retorne registros de uma tabela. Sintaxe da instrução SELECT:

SELECT * FROM <TABELA>

O asterisco indica que todos os campos devem ser retornados, e FROM <TABELA> permite que o
mecanismo de banco de dados saiba qual tabela consultar.
Experimente digitar a seguinte consulta e em seguida mande executar:

Para executar a consulta clique no botão

Deverá aparecer a seguinte resposta (dependendo logicamente dos


registros que você cadastrou na tabela ALUNO):

Em uma consulta pode-se definir quais os campos deseja-se visualizar.


Digite as seguintes consultas e execute-as (uma de cada vez) e observe os
resultados:

SELECT NOME,IDADE FROM ALUNO

SELECT NOME,CIDADE FROM ALUNO

SELECT * FROM MENSALIDADE

SELECT COD_ALUNO , VALOR FROM MENSALIDADE

Cálculos podem ser realizados, como a seguir:


SELECT CODIGO, NOME, IDADE*2 FROM ALUNO

SELECT COD_ALUNO, VALOR/2 FROM MENSALIDADE

5.2 - Cláusula WHERE

É usada depois da cláusula FROM. É semelhante a uma instrução


condicional e seu objetivo é retornar registros que satisfaçam uma
condição. O formato da cláusula WHERE é:

WHERE <EXPRESSÃO BOOLEANA>

A <expressão booleana> é constituída de uma ou mais operações lógicas


que serão avaliadas como TRUE ou FALSE para cada registro.

Exemplos: Baseando-se nas tabelas ALUNO e MENSALIDADE, digite e


execute as seguintes consultas (uma de cada vez):

- Consulta que retorna os registros dos alunos com idade acima de 20


anos

SELECT * FROM ALUNO WHERE IDADE>20

- Consulta que retorna os registros dos alunos com idade variando de 16 a


19 anos

SELECT * FROM ALUNO WHERE (IDADE>15 AND IDADE<20)

- Consulta que retorna os registros das mensalidades do aluno 5001001

SELECT * FROM MENSALIDADE WHERE


COD_ALUNO="5001001"

- Consulta que retorna o registro da mensalidade do aluno 5001001 no


mês 1

SELECT * FROM MENSALIDADE WHERE


COD_ALUNO="5001001" AND MES=1

5.3 - Os operadores LIKE, IN e BETWEEN

Além dos operadores lógicos =, > e < a linguagem SQL suporta também
um operador LIKE, que pode ser usado para procurar modelos em uma
string, um operador IN que determina se um valor está em um conjunto e
um operador BETWEEN que pode ser usado para determinar se um
campo está entre dois valores.
O operador LIKE é mais flexível do que o operador =, pois ele pode
realizar buscas de curinga poderosas. Os dois designadores de curinga
são os caracteres % (porcentagem) e _(sublinhado). O símbolo de
porcentagem designa todos os caracteres, e o sublinhado representa um
único caracter. Eles podem ser usados em conjunto.

Exemplos:

- Consulta que retorna os registros dos alunos cujos nomes começam com
a letra "M"

SELECT * FROM ALUNO WHERE NOME LIKE "M%"

- Consulta que retorna os registros dos alunos cujos nomes começam com
a letra "M" e terminam com a letra "a"

SELECT * FROM ALUNO

WHERE NOME LIKE "M%a"

- Consulta que retorna os registros dos alunos cujos nomes terminam com
a letra "a", com idade acima de 20 anos

SELECT * FROM ALUNO

WHERE (NOME LIKE "%a" AND IDADE>20)

- Consulta que retorna os registros dos alunos cujos nomes começam com
a letra "M" ou terminam com a letra "a", e com idade acima de 20 anos

SELECT * FROM ALUNO

WHERE (NOME LIKE "M%" OR NOME LIKE "%a") AND


IDADE>20

O operador IN poderia ser utilizado na tabela ALUNO se tivéssemos um


campo UF (Unidade da Federação). Se vc quiser altere a estrutura da
tabela ALUNO acrescentando um campo UF. Basta digitar as
informações relativas ao campo UF.

Exemplos:

- Consulta que retorna os registros dos alunos que são de MG, SP ou RJ

SELECT * FROM ALUNO


WHERE CIDADE IN ("UBERABA" , "ARAXÁ" , "SANTOS")

- Consulta que retorna os registros dos alunos que tenham 19 ou 22 anos

SELECT * FROM ALUNO

WHERE IDADE IN (19, 22)

O operador BETWEEN é um atalho para ver se um determinado campo


está em um intervalo.

Exemplo:

- Consulta que retorna os registros dos alunos com idade entre 19 e 22


anos

SELECT * FROM ALUNO

WHERE IDADE BETWEEN 19 AND 22

5.4 - Cláusula ORDER BY

É usada para indicar como o conjunto de registros de uma consulta deve


ser classificado. Se a ordem em que os registros são retornados não é
importante, então não use essa cláusula, pois ela pode diminuir a
velocidade da consulta.

Exemplo:

- Consulta que retorna os registros dos alunos em ordem alfabética

SELECT * FROM ALUNO ORDER BY NOME

- Consulta que retorna os registros dos alunos que começam com a letra
"M", com idade entre 20 e 23 anos, em ordem alfabética pelo campo
CIDADE

SELECT * FROM ALUNO

WHERE NOME LIKE "M%" AND IDADE BETWEEN 20 AND 23

ORDER BY CIDADE

- Consulta que retorna os registros das mensalidades, ordenadas pelo


código do aluno
SELECT * FROM MENSALIDADE

ORDER BY COD_ALUNO

- Consulta que retorna os registros dos alunos ordenados por NOME de


forma descendente

SELECT * FROM ALUNO

ORDER BY NOME DESC

- Consulta que retorna os registros dos alunos ordenados por IDADE de


forma descendente

SELECT * FROM ALUNO

ORDER BY IDADE DESC

5.5 - Agrupamento de Dados - Cláusula GROUP BY

Até agora, todos os dados recebidos foram simplesmente os que estavam


armazenados em uma tabela do banco de dados. As funções a seguir são
utilizadas juntamente com a cláusula GROUP BYpara agregar um
conjunto de registros:

SUM( ) - Calcula a soma de um campo de um conjunto de registros

AVG( ) - Calcula a média de um campo de um conjunto de registros

MIN( ) - Calcula o valor mínimo que ocorre em um campo de um


conjunto de registros

MAX( ) - Calcula o valor máximo que ocorre em um campo de um


conjunto de registros

COUNT( ) - Retorna o número de registros existentes em um conjunto.

Mais de uma função agregada pode ser usada em uma consulta.

Exemplos:

- Consulta que retorna a soma das mensalidades pagas por cada aluno
(agrupadas por aluno)

SELECT COD_ALUNO, SUM(VALOR) FROM MENSALIDADE


GROUP BY COD_ALUNO

- Consulta que retorna a soma das mensalidades agrupadas por mês

SELECT MES, SUM(VALOR) FROM MENSALIDADE

GROUP BY MES

- Consulta que retorna a quantidade de registros existentes na tabela


ALUNO. (Não precisa da cláusula GROUP BY porque será considerada
toda a tabela)

SELECT COUNT (CODIGO) FROM ALUNO

- Consulta que retorna a média de idade dos alunos. (Não precisa da


cláusula GROUP BY porque é a média considerando toda a tabela)

SELECT AVG(IDADE) FROM ALUNO

- Consulta que retorna a média de mensalidade que cada aluno pagou


durante o semestre

SELECT COD_ALUNO , AVG(VALOR) FROM MENSALIDADE

GROUP BY COD_ALUNO

5.6 - Cláusula DISTINCT

Esta cláusula é extremamente útil para se estreitar um conjunto de


resultados se o alvo é um conjunto de registros exclusivo, ou seja, serve
para eliminar registros repetidos na consulta.

Exemplo:

- Consulta que retorna os códigos dos alunos que tenham lançamentos na


tabela MENSALIDADE (Nesta consulta aparecerão vários códigos de
alunos repetidos tendo em vista que cada aluno poderá ter até 6
mensalidades)

SELECT COD_ALUNO FROM MENSALIDADE

Para evitar a repetição execute a seguinte consulta (Me interessa saber


apenas quem tem lançamentos na tabela MENSALIDADE):

SELECT DISTINCT COD_ALUNO FROM MENSALIDADE


5.7 - Cláusula HAVING

A cláusula WHERE determina quais registros são usados para construir


grupos. Entretanto, não há meios de usar a cláusula WHERE para
eliminar grupos inteiros, depois que eles foram calculados. A cláusula que
faz isso é a HAVING. O formato é HAVING <condição>, onde
<condição> é uma expressão booleana que utiliza funções agregadas ao
invés de campos.

Exemplos:

- Consulta que calcula a soma das mensalidades de cada aluno. Mostrar


na consulta apenas os alunos cuja soma das mensalidade seja acima de
1000.

SELECT COD_ALUNO, SUM(VALOR) FROM MENSALIDADE

GROUP BY COD_ALUNO

HAVING SUM(VALOR) > 1000

- Consulta que calcula a quantidade de alunos em cada faixa de idade, a


soma das idades de cada faixa, mostrando apenas o conjunto de registros
cuja soma das idades seja maior do que 100.

SELECT IDADE, COUNT(IDADE) , SUM(IDADE) FROM ALUNO

GROUP BY IDADE

HAVING SUM(IDADE) > 100

5.8 - Junções (joins)

Até agora realizamos consultas utilizando apenas uma tabela por vez.
As junções permitem que os dados de mais de uma tabela logicamente
relacionada sejam conectados. Quando juntamos duas tabelas é realizado
um produto cartesiano destas duas tabelas, ou seja, se a tabela 1 tem 5
registros e a tabela 2 tem 4 registros, a junção das duas tabelas terá 5 x 4
registros = 20 registros.

Exemplos:

- Consulta para junção da tabela ALUNO e MENSALIDADE

SELECT * FROM ALUNO, MENSALIDADE


- Consulta para junção da tabela ALUNO e MENSALIDADE, mostrando
apenas o campo NOME da tabela ALUNO e os campos MES e VALOR
da tabela MENSALIDADE. Para referir-se a um campo de uma tabela
basta colocar o nome da tabela e o nome do campo separados por um
ponto (só é necessário quando existem campos com o mesmo nome nas
tabelas relacionadas)

SELECT ALUNO.NOME, MENSALIDADE.MES,


MENSALIDADE.VALOR

FROM ALUNO, MENSALIDADE

O que aconteceu?

Uma junção pode ser pensada como um grande conjunto de registros,


onde cada registro da primeira tabela é anexada a cada registro da
segunda, criando uma tabela grande, com N vezes M registros,
onde N representa o número de registros da primeira tabela
e M representa o número de registros da segunda. O que nós temos que
fazer é utilizar condições através da cláusula WHERE, selecionando os
registros que nos interessam.

Exemplos:

- Consulta para mostrar apenas o campo NOME da tabela ALUNO e os


campos MES e VALOR da tabela MENSALIDADE. Manter apenas os
registros cujo campo CODIGO na tabela ALUNO seja igual ao campo
COD_ALUNO na tabela MENSALIDADE. Lembre-se que para
selecionar os registros, deve sempre existir campos comuns nas duas
tabelas. Daí o conceito da chave estrangeira.

SELECT ALUNO.NOME, MENSALIDADE.MES,


MENSALIDADE.VALOR

FROM ALUNO, MENSALIDADE

WHERE ALUNO.CODIGO = MENSALIDADE.COD_ALUNO

Como não existem campos com os mesmos nomes nas duas tabelas, essa
consulta poderia ficar da seguinte forma:

SELECT NOME, MES, VALOR

FROM ALUNO, MENSALIDADE

WHERE CODIGO = COD_ALUNO


5.9 - Instruções SQL para Inserir, Atualizar e Excluir Registros

Nos itens anteriores trabalhamos com consultas que retornavam um


conjunto de registros. Também é possível fazer o banco de dados
executar uma ação. As principais ações são: inserir, atualizar e excluir
registros.

Inserção de registros:

O formato do comando SQL para inserir um novo registro em uma


tabela é:

INSERT INTO <nome da tabela> (campo1,campo2,...)

VALUES (valor do campo1, valor do campo2, ...)

Exemplo: (como a chave primária é o campo CODIGO, se alguém tentar


incluir um registro cujo campo CODIGO já exista, ocorrerá um erro de
inserção e o registro não será incluído).

INSERT INTO ALUNO (CODIGO, NOME, IDADE)

VALUES ("5001005" , "Ana Cristina Andrade" , 20)

Para verificar se o registro foi realmente incluído, execute:

SELECT * FROM ALUNO

Atualização de registros:

O formato do comando SQL para atualizar registros é:

UPDATE <nome da tabela>

SET <campo1=expressão> , <campo2=expressão> , ...

WHERE <condição>

Exemplos:

a) Atualizar o campo IDADE do aluno cujo CODIGO é "5001005" para


25 anos..

UPDATE ALUNO

SET IDADE=25
WHERE CODIGO="5001005"

Para verificar se o registro foi realmente alterado, execute:

SELECT * FROM ALUNO

b) Aumentar o campo IDADE de todos os alunos em 20%

UPDATE ALUNO

SET IDADE=IDADE * 1.20

Para verificar se os registros foram realmente alterados, execute:

SELECT * FROM ALUNO

Exclusão de registros:

O formato do comando SQL para eliminar registros é:

DELETE FROM <nome da tabela>

WHERE <condição>

Exemplos:

a) Eliminar o registro do aluno cujo CODIGO é "5001005".

DELETE FROM ALUNO

WHERE CODIGO="5001005"

a) Eliminar todos os registros da tabela ALUNO ( C U I D A D O não


será dada nenhuma mensagem pedindo confirmação e todos os registros
serão eliminados)

DELETE FROM ALUNO

5.10 - Manutenção de Banco de Dados com SQL

Além dos comandos para realizar consultas e ações em tabelas, é possível


também utilizar comandos SQL para dar manutenção ao banco de dados,
incluindo a criação, exclusão e alteração de tabelas e índices.

Criação de Tabelas:

Utilize o comando a seguir (estrutura básica):


CREATE TABLE <nome da tabela> (

CAMPO1 TIPO_DO_CAMPO1,

CAMPOn TIPO_DO_CAMPOn,

PRIMARY KEY (CAMPO_CHAVE),

Exemplo: Utilize o HELP do Database Desktop para ver os tipos de


campos.

CREATE TABLE ALUNOS (

CODIGO CHARACTER(7),

NOME CHARACTER(30),

IDADE SMALLINT,

PRIMARY KEY (CODIGO)

Exclusão de Tabelas:

Utilize o comando a seguir:

DROP TABLE <nome da tabela>

Exemplo: Eliminar a tabela ALUNOS.

DROP TABLE ALUNOS

Alteração da estrutura de Tabelas:

É possível inserir e excluir campos em uma tabela, através do comando:

ALTER TABLE <nome da tabela>

<Ação> <campo> <tipo do dado>,

[ <Ação> <campo> <tipo do dado> ]

<Ação> pode ser ADD - Adicionar um campo à tabela


ou DROP - Excluir um campo da tabela

Exemplos:

a) Adicionar um campo TELEFONE à tabela ALUNO

ALTER TABLE ALUNO

ADD TELEFONE CHARACTER(14)

b) Eliminar o campo TELEFONE da tabela ALUNO

ALTER TABLE ALUNO

DROP TELEFONE

Índices

Os índices também podem ser criados e eliminados usando-se comandos


SQL:

a) criação

CREATE INDEX <nome do arquivo de índice>

ON <nome da tabela> <campo a ser indexado>

b) exclusão

DROP INDEX <nome da tabela> . <nome do arquivo de índice>

Exemplos:

a) Criar um arquivo de índice associado à tabela ALUNO, cuja chave


será o campo IDADE. O nome do arquivo de índice será INDIDADE.

CREATE INDEX INDIDADE

ON ALUNO IDADE

b) Eliminar o arquivo de índice INDIDADE que está associado à tabela


ALUNO.

DROP INDEX ALUNO.INDIDADE

Вам также может понравиться