You are on page 1of 25

Gerenciamento de Banco de Dados

Professor: Ricardo Vieira
Curso: Análise e Desenvolvimento de Sistemas
1
Cronograma:

Tipos de Domínios

Construção do Create Table

Restrições de Integridade

Construção do Drop Table e Alter Table

Comando de Inserção
Tipos de domínio no SQL

!char(n). String de caracteres de tamanho fixo com tamanho n especificado pelo
usuário.
!varchar(n). String de caracteres de tamanho variável com tamanho n máximo
especificado pelo usuário.
!int. Inteiro (um subconjunto finito de inteiros que é dependente da máquina).
!smallint. Inteiro pequeno (um subconjunto do tipo de domínio inteiro).
!numeric(p,d). Número de ponto fixo, com precisão de p dígitos especificada pelo
usuário, com n dígitos à direita do ponto decimal.
!real, double precision. Números de ponto flutuante e ponto flutuante de precisão
dupla com precisão dependente da máquina.
!float(n). Número de ponto flutuante, com precisão de pelo menos n dígitos.
!Mais tipos são abordados no próximo bimestres.
Construção do Create Table
!
Uma relação SQL é definida usando o comando create table:
create table r (A
1
D
1
, A
2
D
2
, ..., A
n
D
n
,
(restrição-de-integridade1),
..., 
(restrição-de-integridadek))
!
r é o nome da relação (tabela)
!
cada A
i
é o nome de um atributo no esquema da relação r
!
D
i
é o tipo de domínio dos valores no domínio do atributo A
i

!
Exemplo:
create table agencia
(nome_agencia char(15) not null,
cidade_agencia char(30),
ativo integer)
Restrições de integridade em Create Table
!
not null
!
primary key (A
1
, ..., A
n
)
!
Exemplo: Declare nome_agencia como a chave primária para
agência e certifique-se de que os valores de ativo não sejam
negativos.
create table agencia
(nome_agencia char(15),
cidade_agencia char(30),
ativo integer,
primary key (nome_agencia))
!
Declaração de chave primária em um atributo assegura not null
automaticamente na SQL-89 em diante; precisa ser declarada
explicitamente na SQL-89
Construções Drop Table e Alter Table
!
O comando drop table exclui do banco de dados todas as informações
sobre a relação removida.
!
O comando alter table é usado para acrescentar atributos a uma
relação existente:
alter table r add A D
onde A é o nome do atributo a ser acrescentado à relação r e D é o
domínio de A.
!
A todas as tuplas na relação é atribuído nulo como o valor para o novo
atributo.
!
O comando alter table também pode ser usado para descartar
atributos de uma relação:
alter table r drop A
onde A é o nome de um atributo da relação r
!
O descarte de atributos não é aceito por muitos bancos de dados.
!
Insira uma nova tupla em conta
INSERT INTO conta
VALUES (‘A-9732’, ‘Perryridge’, 1200)
ou equivalentemente

INSERT INTO conta (nome_agencia, saldo, numero_conta)
VALUES (‘Perryridge’, 1200, ‘A-9732’)

!
Insira uma nova tupla em conta com saldo definido como nulo
INSERT INTO conta
VALUES (‘A-777’,‘Perryridge’, nulo )
Estrutura básica - Inserção
!
Ofereça uma nova conta de poupança no valor de US$ 200 como um presente
para todos os clientes de empréstimo da agência Perryridge Deixe que o número
de empréstimo sirva como o número de conta para a conta de poupança.
INSERT INTO conta
SELECT numero_emprestimo, nome_agencia, 200
FROM EMPRESTIMO
WHERE nome_agencia = ‘Perryridge’
 
INSERT INTO depositante
SELECT nome_cliente, numero_emprestimo
FROM tomador, emprestimo
WHERE tomador.numero_emprestimo = emprestimo.numero_emprestimo
AND nome_agencia = ‘Perryridge’
!
A instrução select from where é avaliada totalmente antes de quaisquer dos seus
resultados serem inseridos na relação (caso contrário, consultas como
INSERT INTO tabela1 SELECT * FROM tabela1
causariam problemas)
Estrutura básica - Inserção
Exercícios sobre Estrutura Básica de SQL
!
Considere o banco de dados de seguros apresentado abaixo, no qual as
chaves primárias estão sublinhadas e as chaves estrangeiras possuem uma
indicação de referencia abaixo da tabela.
!
Criar as Tabelas usando o comando CREATE TABLE
!
Povoar as tabelas usando o comando INSERT

PESSOA (id_motorista, nome, endereço)
CARRO (licenca, modelo, ano)
ACIDENTE (numero_ocorrencia, data, local)
PERTENCE (id_motorista, licenca)
id_motorista referencia PESSOA
licenca referencia ACIDENTE
PARTICIPOU (id_motorista, carro, numero_ocorrencia, valor_dano)
id_motorista referencia PESSOA
licenca referencia ACIDENTE
numero_ocorrencia referencia ACIDENTE
Exercícios sobre Estrutura Básica de SQL
!
Considere o banco de dados de funcionários apresentado abaixo, no qual as
chaves primárias estão sublinhadas e as chaves estrangeiras possuem uma
indicação de referencia abaixo da tabela.
!
Criar as Tabelas usando o comando CREATE TABLE
!
Povoar as tabelas usando o comando INSERT

FUNCIONARIO (nome_funcionario, rua, cidade)
EMPRESA (nome_empresa, cidade)
TRABALHA (nome_funcionario, nome_empresa, salario)
nome_funcionario referencia FUNCIONARIO
nome_empresa referencia EMPRESA
GERENCIA (nome_funcionario, departamento)
nome_funcionario referencia FUNCIONARIO
Estrutura básica das consultas
!
A SQL é baseada em operações de conjunto e relacionais com certas
modificações e melhorias
!
Um componente SQL típica tem a forma:
select A
1
, A
2
, ..., A
n
from r
1
, r
2,
..., r
m
where P

A
i
representa um atributo
R
i
representa uma relação
P é um predicado.
 
 
!
O resultado de uma consulta SQL é uma relação.
A cláusula SELECT
!
A cláusula select lista os atributos desejados no resultado de uma consulta
!
Exemplo: Encontre os nomes de todas as agências na relação empréstimo:
select nome_agencia
from emprestimo
!
NOTA: Os nomes SQL não fazem distinção entre letras maiúsculas e
minúsculas.
!
Algumas pessoas usam maiúsculas sempre que usamos o estilo negrito.
A cláusula SELECT
!
A SQL permite duplicatas nas relações bem como nos resultados de
consulta.
!
Para forçar a eliminação de duplicatas, insira a palavra-chave distinct após
select.
!
Encontre os nomes de todas as agências na relação empréstimo e remova
as duplicatas.
select distinct nome_agencia
from emprestimo
!
A palavra-chave all especifica que as duplicatas não são removidas.
select all nome_agencia
from emprestimo
A cláusula SELECT
!
Um asterisco na cláusula select indica “todos os atributos”
select *
from emprestimo
!
A cláusula select pode conter expressões aritméticas envolvendo os
operadores +, -, * e / operando em constantes ou atributos de tuplas.
!
A consulta:
select numero_emprestimo, nome_agencia, quantia * 100
from emprestimo
!
retornará uma relação que é a mesma relação empréstimo, exceto que o
atributo quantia é multiplicado por 100.
A cláusula WHERE
!
A cláusula where especifica condições que o resultado precisa satisfazer
!
Para encontrar todos os números de empréstimo para empréstimos feitos na
agência Perryridge com quantias superiores a US$1200:
select numero_emprestimo
from emprestimo
where nome_agencia = ‘Perryridge’
and quantia > 1200
!
Os resultados da comparação podem ser combinados usando os conectivos
lógicos and, or, e not.
!
As comparações podem ser aplicadas aos resultados das expressões
aritméticas.
A cláusula WHERE

!
A SQL inclui um operador de comparação between
!
Exemplo: Encontre todos os números de empréstimos com quantias entre
US$ 90.000 e US$ 100.000
select numero_empr
from emprestimo
where quantia between 90000 and 100000
A cláusula FROM
!
A cláusula from lista as relações envolvidas na consulta
!
Encontre o produto cartesiano tomador X empréstimo
select *
from tomador, emprestimo
!
Encontre os nomes de cliente, os números de empréstimo e as quantias de
empréstimo para todos os empréstimos da agência Perryridge

select nome_cliente, tomador.numero_emprestimo, quantia
from tomador, emprestimo
where tomador.numero_emprestimo = emprestimo.numero_emprestimo
and nome_agencia = ‘Perryridge’
A operação de renomeação
!
A SQL permite renomear relações e atributos usando a cláusula as:
nome-antigo as nome-novo
!
Encontre o nome, o número de empréstimo e a quantia de empréstimo de
todos os clientes; renomeie a coluna numero_emprestimo como
emprestimo_id.
select nome_cliente, quantia,
tomador.numero_emprestimo as id_emprestimo
from tomador, emprestimo
where tomador.numero_emprestimo = emprestimo.numero_emprestimo
Variáveis de tupla
!
As variáveis de tupla são definidas na cláusula from por
meio da cláusula as.
!
Encontre os nomes de cliente, os números de empréstimo e
a quantia para todos os clientes que têm um empréstimo em
alguma agência.
select nome_cliente, T.número_empréstimo, S.quantia
from tomador as T, empréstimo as S
where T.número_empréstimo = S.número_empréstimo
!
Encontre os nomes de todas as agências que têm ativos
maiores do que pelo menos uma agência localizada em
Brooklyn
select distinct T.nome_agência
from agência as T, agência as S
where T.ativo > S.ativo and S.cidade_agência = ‘Brooklyn’
Operações de string
!
A SQL inclui um operador de correspondência de string para comparações em
strings de caractere. A operação like usa padrões que são descritos usando dois
caracteres especiais:
!
Porcentagem (%): O caractere % corresponde a qualquer substring.
!
Sublinhado (_): O caractere _ corresponde a qualquer caractere.
!
Encontre os nomes de todos os clientes cujos endereços de rua incluem a
substring ‘Main’.
select nome_cliente
from cliente
where rua_cliente like ‘%Main%’
!
A SQL aceita várias operações de string como
!
concatenação (usando “||”)
!
conversão de maiúscula em minúscula (e vice-versa)
!
localização do tamanho da string, extração de substrings etc.
Ordenação da exibição de tuplas
!
Liste em ordem alfabética todos os clientes que têm um
empréstimo na agência Perryridge
select distinct nome_cliente
from tomador, emprestimo
where tomador.numero_emprestimo = emprestimo.numero_emprestimo
And nome_agencia = ‘Perryridge’
order by nome_cliente
!
Podemos especificar desc para ordem decrescente ou
asc para ordem crescente, para cada atributo; a ordem
crescente é o padrão.
Exemplo: order by nome_cliente desc
Exercícios sobre Estrutura Básica de SQL
!
Considere o banco de dados de seguros apresentado abaixo, no qual as
chaves primárias estão sublinhadas e as chaves estrangeiras possuem uma
indicação de referencia abaixo da tabela.
!
Encontre todas as pessoas que se envolveram em acidentes cujo o dano
seja maior que R$ 10.000,00. Ordene os resultados alfabeticamente pelo
nome do proprietário e troque o campo nome da tabela PESSOA para
Motorista no resultado da consulta.

PESSOA (id_motorista, nome, endereço)
CARRO (licenca, modelo, ano)
ACIDENTE (numero_ocorrencia, data, local)
PERTENCE (id_motorista, licenca)
id_motorista referencia PESSOA
licenca referencia ACIDENTE
PARTICIPOU (id_motorista, carro, numero_ocorrencia, valor_dano)
id_motorista referencia PESSOA
licenca referencia ACIDENTE
numero_ocorrencia referencia ACIDENTE
Exercícios sobre Estrutura Básica de SQL
!
Considere o banco de dados de funcionários apresentado abaixo, no qual as
chaves primárias estão sublinhadas e as chaves estrangeiras possuem uma
indicação de referencia abaixo da tabela.
!
Encontre os nomes e cidades de todos os funcionários que trabalham para o
First Bank Corporation.

FUNCIONARIO (nome_funcionario, rua, cidade)
EMPRESA (nome_empresa, cidade)
TRABALHA (nome_funcionario, nome_empresa, salario)
nome_funcionario referencia FUNCIONARIO
nome_empresa referencia EMPRESA
GERENCIA (nome_funcionario, departamento)
nome_funcionario referencia FUNCIONARIO
Exercícios de Fixação
! Considere o banco de dados de seguros apresentado abaixo, no qual as
chaves primárias estão sublinhadas e as chaves estrangeiras possuem uma
indicação de referencia abaixo da tabela.
! Encontre todos os modelos de carro que se envolveram em acidentes cujo o
dano esteja entre R$ 5.000,00 e R$ 10.000,00. Ordene os resultados
alfabeticamente pelo modelo do carro e troque o campo modelo da tabela
CARRO para MODELO_ANO e concatene os campos modelo + ano no
resultado da consulta.

PESSOA (id_motorista, nome, endereço)
CARRO (licenca, modelo, ano)
ACIDENTE (numero_ocorrencia, data, local)
PERTENCE (id_motorista, licenca)
id_motorista referencia PESSOA
licenca referencia ACIDENTE
PARTICIPOU (id_motorista, carro, numero_ocorrencia, valor_dano)
id_motorista referencia PESSOA
licenca referencia ACIDENTE
numero_ocorrencia referencia ACIDENTE
Exercícios de Fixação
!
Considere o banco de dados de funcionários apresentado abaixo, no qual as
chaves primárias estão sublinhadas e as chaves estrangeiras possuem uma
indicação de referencia abaixo da tabela.
!
Encontre os nomes e cidades de todos os funcionários que trabalham para o
First Bank Corporation.

FUNCIONARIO (nome_funcionario, rua, cidade)
EMPRESA (nome_empresa, cidade)
TRABALHA (nome_funcionario, nome_empresa, salario)
nome_funcionario referencia FUNCIONARIO
nome_empresa referencia EMPRESA
GERENCIA (nome_funcionario, departamento)
nome_funcionario referencia FUNCIONARIO