Você está na página 1de 25

Gerenciamento de Banco de Dados

Professor: Ricardo Vieira


Curso: Anlise e Desenvolvimento de Sistemas
1
Cronograma:

Tipos de Domnios

Construo do Create Table

Restries de Integridade

Construo do Drop Table e Alter Table

Comando de Insero
Tipos de domnio no SQL

!char(n). String de caracteres de tamanho fixo com tamanho n especificado pelo
usurio.
!varchar(n). String de caracteres de tamanho varivel com tamanho n mximo
especificado pelo usurio.
!int. Inteiro (um subconjunto finito de inteiros que dependente da mquina).
!smallint. Inteiro pequeno (um subconjunto do tipo de domnio inteiro).
!numeric(p,d). Nmero de ponto fixo, com preciso de p dgitos especificada pelo
usurio, com n dgitos direita do ponto decimal.
!real, double precision. Nmeros de ponto flutuante e ponto flutuante de preciso
dupla com preciso dependente da mquina.
!float(n). Nmero de ponto flutuante, com preciso de pelo menos n dgitos.
!Mais tipos so abordados no prximo bimestres.
Construo do Create Table
!
Uma relao SQL definida usando o comando create table:
create table r (A
1
D
1
, A
2
D
2
, ..., A
n
D
n
,
(restrio-de-integridade1),
...,
(restrio-de-integridadek))
!
r o nome da relao (tabela)
!
cada A
i
o nome de um atributo no esquema da relao r
!
D
i
o tipo de domnio dos valores no domnio do atributo A
i

!
Exemplo:
create table agencia
(nome_agencia char(15) not null,
cidade_agencia char(30),
ativo integer)
Restries de integridade em Create Table
!
not null
!
primary key (A
1
, ..., A
n
)
!
Exemplo: Declare nome_agencia como a chave primria para
agncia e certifique-se de que os valores de ativo no sejam
negativos.
create table agencia
(nome_agencia char(15),
cidade_agencia char(30),
ativo integer,
primary key (nome_agencia))
!
Declarao de chave primria em um atributo assegura not null
automaticamente na SQL-89 em diante; precisa ser declarada
explicitamente na SQL-89
Construes Drop Table e Alter Table
!
O comando drop table exclui do banco de dados todas as informaes
sobre a relao removida.
!
O comando alter table usado para acrescentar atributos a uma
relao existente:
alter table r add A D
onde A o nome do atributo a ser acrescentado relao r e D o
domnio de A.
!
A todas as tuplas na relao atribudo nulo como o valor para o novo
atributo.
!
O comando alter table tambm pode ser usado para descartar
atributos de uma relao:
alter table r drop A
onde A o nome de um atributo da relao r
!
O descarte de atributos no 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 bsica - Insero
!
Oferea uma nova conta de poupana no valor de US$ 200 como um presente
para todos os clientes de emprstimo da agncia Perryridge Deixe que o nmero
de emprstimo sirva como o nmero de conta para a conta de poupana.
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 instruo select from where avaliada totalmente antes de quaisquer dos seus
resultados serem inseridos na relao (caso contrrio, consultas como
INSERT INTO tabela1 SELECT * FROM tabela1
causariam problemas)
Estrutura bsica - Insero
Exerccios sobre Estrutura Bsica de SQL
!
Considere o banco de dados de seguros apresentado abaixo, no qual as
chaves primrias esto sublinhadas e as chaves estrangeiras possuem uma
indicao de referencia abaixo da tabela.
!
Criar as Tabelas usando o comando CREATE TABLE
!
Povoar as tabelas usando o comando INSERT

PESSOA (id_motorista, nome, endereo)
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
Exerccios sobre Estrutura Bsica de SQL
!
Considere o banco de dados de funcionrios apresentado abaixo, no qual as
chaves primrias esto sublinhadas e as chaves estrangeiras possuem uma
indicao 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 bsica das consultas
!
A SQL baseada em operaes de conjunto e relacionais com certas
modificaes e melhorias
!
Um componente SQL tpica 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 relao
P um predicado.

!
O resultado de uma consulta SQL uma relao.
A clusula SELECT
!
A clusula select lista os atributos desejados no resultado de uma consulta
!
Exemplo: Encontre os nomes de todas as agncias na relao emprstimo:
select nome_agencia
from emprestimo
!
NOTA: Os nomes SQL no fazem distino entre letras maisculas e
minsculas.
!
Algumas pessoas usam maisculas sempre que usamos o estilo negrito.
A clusula SELECT
!
A SQL permite duplicatas nas relaes bem como nos resultados de
consulta.
!
Para forar a eliminao de duplicatas, insira a palavra-chave distinct aps
select.
!
Encontre os nomes de todas as agncias na relao emprstimo e remova
as duplicatas.
select distinct nome_agencia
from emprestimo
!
A palavra-chave all especifica que as duplicatas no so removidas.
select all nome_agencia
from emprestimo
A clusula SELECT
!
Um asterisco na clusula select indica todos os atributos
select *
from emprestimo
!
A clusula select pode conter expresses aritmticas envolvendo os
operadores +, -, * e / operando em constantes ou atributos de tuplas.
!
A consulta:
select numero_emprestimo, nome_agencia, quantia * 100
from emprestimo
!
retornar uma relao que a mesma relao emprstimo, exceto que o
atributo quantia multiplicado por 100.
A clusula WHERE
!
A clusula where especifica condies que o resultado precisa satisfazer
!
Para encontrar todos os nmeros de emprstimo para emprstimos feitos na
agncia Perryridge com quantias superiores a US$1200:
select numero_emprestimo
from emprestimo
where nome_agencia = Perryridge
and quantia > 1200
!
Os resultados da comparao podem ser combinados usando os conectivos
lgicos and, or, e not.
!
As comparaes podem ser aplicadas aos resultados das expresses
aritmticas.
A clusula WHERE

!
A SQL inclui um operador de comparao between
!
Exemplo: Encontre todos os nmeros de emprstimos com quantias entre
US$ 90.000 e US$ 100.000
select numero_empr
from emprestimo
where quantia between 90000 and 100000
A clusula FROM
!
A clusula from lista as relaes envolvidas na consulta
!
Encontre o produto cartesiano tomador X emprstimo
select *
from tomador, emprestimo
!
Encontre os nomes de cliente, os nmeros de emprstimo e as quantias de
emprstimo para todos os emprstimos da agncia Perryridge

select nome_cliente, tomador.numero_emprestimo, quantia
from tomador, emprestimo
where tomador.numero_emprestimo = emprestimo.numero_emprestimo
and nome_agencia = Perryridge
A operao de renomeao
!
A SQL permite renomear relaes e atributos usando a clusula as:
nome-antigo as nome-novo
!
Encontre o nome, o nmero de emprstimo e a quantia de emprstimo 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
Variveis de tupla
!
As variveis de tupla so definidas na clusula from por
meio da clusula as.
!
Encontre os nomes de cliente, os nmeros de emprstimo e
a quantia para todos os clientes que tm um emprstimo em
alguma agncia.
select nome_cliente, T.nmero_emprstimo, S.quantia
from tomador as T, emprstimo as S
where T.nmero_emprstimo = S.nmero_emprstimo
!
Encontre os nomes de todas as agncias que tm ativos
maiores do que pelo menos uma agncia localizada em
Brooklyn
select distinct T.nome_agncia
from agncia as T, agncia as S
where T.ativo > S.ativo and S.cidade_agncia = Brooklyn
Operaes de string
!
A SQL inclui um operador de correspondncia de string para comparaes em
strings de caractere. A operao like usa padres que so 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 endereos de rua incluem a
substring Main.
select nome_cliente
from cliente
where rua_cliente like %Main%
!
A SQL aceita vrias operaes de string como
!
concatenao (usando ||)
!
converso de maiscula em minscula (e vice-versa)
!
localizao do tamanho da string, extrao de substrings etc.
Ordenao da exibio de tuplas
!
Liste em ordem alfabtica todos os clientes que tm um
emprstimo na agncia 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 padro.
Exemplo: order by nome_cliente desc
Exerccios sobre Estrutura Bsica de SQL
!
Considere o banco de dados de seguros apresentado abaixo, no qual as
chaves primrias esto sublinhadas e as chaves estrangeiras possuem uma
indicao 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 proprietrio e troque o campo nome da tabela PESSOA para
Motorista no resultado da consulta.

PESSOA (id_motorista, nome, endereo)
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
Exerccios sobre Estrutura Bsica de SQL
!
Considere o banco de dados de funcionrios apresentado abaixo, no qual as
chaves primrias esto sublinhadas e as chaves estrangeiras possuem uma
indicao de referencia abaixo da tabela.
!
Encontre os nomes e cidades de todos os funcionrios 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
Exerccios de Fixao
! Considere o banco de dados de seguros apresentado abaixo, no qual as
chaves primrias esto sublinhadas e as chaves estrangeiras possuem uma
indicao 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, endereo)
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
Exerccios de Fixao
!
Considere o banco de dados de funcionrios apresentado abaixo, no qual as
chaves primrias esto sublinhadas e as chaves estrangeiras possuem uma
indicao de referencia abaixo da tabela.
!
Encontre os nomes e cidades de todos os funcionrios 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