1) O documento discute conceitos de cardinalidade e relacionamentos entre entidades em modelo entidade-relacionamento.
2) Apresenta comandos SQL para criação e manipulação de tabelas e bancos de dados relacionais.
3) Explica funções de grupo e subqueries para agregar e filtrar resultados de consultas.
1. Cardinalidade Máxima:
DepartamentoFuncionários
1 n
Um departamento Um funcionário
pode ter quantos pode pertencer a
funcionários? quantos
departamentos?
Cardinalidade Mínima:
DepartamentoFuncionários
1 0
Para cadastrar Para cadastrar
funcionários, eu departamento, eu
preciso de preciso de
departamento? funcionário?
Relacionamento n para 1: PK de “1” vira FK de “n” (“1” exporta chave primaria para “n”)
Relacionamento 1 pra 1: Se trocam as chaves primárias, portanto podem ser a mesma
entidade
Relacionamento n pra n: Cria-se outra entidade, exportando as chaves primarias das duas
entidades “n” para a nova entidade (chaves estrangeiras da nova entidade)
Modelo Entidade-Relacionamento: Relações de entidades e chaves primárias
Modelo Físico: Chaves primarias, estrangeiras, novas entidades criadas com o relacionamento
n pra n
SQL:
Comandos DDL:
2. Criando Tabela
Createtable cidade
codcidadenumber(4) notnull,
nomecidade varchar2(20) no null)
Mostra tabela cidade
desc cidade
Exclui tabela
droptable cidade
Incluir campo posteriormente
altertable cidade
add estado varchar2(2) notnull
Excluindo campo:
altertable cidade
dropcolumn estado
Modificando campo
altertable acervo modify
titulo varchar(100) notnull
Adicionar chave primária
altertable cidade
addconstraintcidade_pkprimarykey (codcidade)
(codcidade é o campo que você deseja transformar em PK)
Adicionar múltiplas chaves primárias
altertable cidade
addconstraintcidade_pkprimarykey (codcidade,cidade,estado)
Adicionar chave estrangeira
altertable aluno
addconstraintaluno_cidade_fk
foreignkey (codcidade)
references cidade (codcidade)
3. (a reference é a PK (nesse caso codcidade da tabela cidade) que você quer referenciar na
presente tabela através de uma chave estrangeira)
Adicionar múltiplas chaves estrangeira
altertable aluno
addconstraintaluno_cidade_fk
foreignkey (codcidade,cidade,estado)
references cidade (codcidade,cidade,estado)
Comandos DML:
Inserção:
Insertinto cidade (codcidade,descrição,uf)
values (1,’caxias’,’RS’)
(vai inserir nos campos da tabela cidade relacionados entre parênteses os valores nessa
ordem. Deve-se colocar dentro de aspas simples os varchar)
Insertinto cidade (codcidade, descrição,uf)
values(2,’Bento’,NULL)
(caso o campo não seja NotNull, irá ser inserido valor nulo no campo uf)
Alteração:
update cidade
set uf=’RS’
where uf=’SC’
Exclusão:
deletefrom cidade
wherecodcidade>=1
andcodcidade<= 10
Visualizando conteúdo:
select * from livros (ver tudo o que está em livros)
desc livros (visualizar as colunas e suas caracteristicas)
select autor from livros (visualiza apenas a coluna livros)
orderbypublicacao (ordena pelo campo publicação em ordem alfabética)
4. select titulo from acervo
wherecodacervo> 2 (mostra na coluna titulo da tabela acervo as linhas onde codavervo for
maior que 2)
select titulo from acervo
wherecodacervo> 2
andcodacervo<= 4
select titulo
from acervo
wherecodacervo IN (1,3) (apenas os que estão entre parenteses)
select titulo
from acervo
wherecodacervo BETWEEN 2 and 4 (todos entre 2 e 4)
Select *
from empréstimo
wheredtdevolucao IS NULL
SelectNVL(dtdevolucao,)
from empréstimo
wheredtdevolucao IS NULL (mostra onde esta null com valor 0)
select titulo from acervo
where titulo like %a% (que contenha "a" no titulo)
5. Usando Aliases:
1. Exibir o título de todos os filmes da categoria “Acervo” do gênero “Ação”.
Selectf.titulo(Campo que você quer consultar)
From filme f,
categoria c, (da onde os dados vem)
genero g
whereupper (c.descricao) = ‘ACERVO’ (Condições)
andupper (g.descricao) = ‘ACAO’
andf.genero = g.codgem (Abaixo, ligando de acordo com as constraints)
andf.categoria = c.codcat
2. Exibir todos os clientes que pagaram alguma multa.
Select *
From cliente c,
Locação l
Wherenvl(vlrmulta,0)>0 (NVL transforma valores NULL em 0 para exibição)
Andc.codcli=l.codcliente (Constraint entre cliente e locação)
3. Exibir o título dos filmes e a descrição do seu gênero em ordem alfabética.
Selectf.titulo, g.descricao
from filme f,
genero g
whereg.codgen = f.genero
orderby 1
Se usar “asc” depois de orderby1, é crescente, se usar “desc”, é decrescente.
4. Exibir nome de atleta e nome da equipe, odernar pro atleta
(Relação de equipe e atleta é n:n, por tanto há uma terceira entidade)
selecta.nome, e.nome
from atleta a, equipe e, equipe_atletaae (as três entidades)
wherea.cod_atleta = ae.cod_atleta (ligando as 3 entidades através das PK/FK)
andae.cod_equipe = e.cod_equipe
orderbye.nome; (ordenando por nome de equipe)
6. Matéria nova:Funções de Grupo:
AVG
SUM
COUNT
MIN
MAX
select sum (valor) --------- soma
from multa
selectmax (valor) --------- maximo valor
from multa
selectavg (valor) --------- media valor
from multa
selectcount (valor) --------- quantidade valor
from multa
selectcod_socio, sum (valor) ----- cod_socio não tem funcao de grupo, sum(valor) tem.
from multa
groupbycod_socio ----- o campo que vai no groupbynão tem função de grupo. É obrigatório a
presençadele para que os campos sem função de grupo sejam exibidos.
selectm.cod_socio, a.nome, sum(m.valor)
from multa m, associado a
wherem.cod_socio=a.cod_socio
having sum(m.valor)>8 --------- testar por funcao de grupo --- testa se o somatorio é > 8
groupbym.cod_socio, a.nome
orderbym.cod_socio ou 1 ---------- ordena tanto com o nome ou com o nº (ordem no select)
Having testa a função de grupo:
Mostra somente cidades que tenham mais de 3 alunos
HavingCount(a.codaluno) > 3
Agrupa por chaves que não tem função de grupo.
1) Exibir o nome das equipes e a quantidade de atletas que cada uma adicionou na
competição de São Paulo
7. selecte.nome, count(*) (count (*), quantidade de vezes que aparece)
from equipe e, equipe_atletaae, participacao p, competicao c (todas as tabelas até
chegar em competição)
whereae.cod_equipe = e.cod_equipe
andae.cod_equipe = p.cod_equipe (Ligando as tabelas PK/FK)
andae.cod_atleta = p.cod_atleta
andp.cod_competicao = c.cod_competicao
andc.cidade = 'Sao Paulo' (condição para exibir no select)
groupbye.nome;
2) Exibir o nome do atleta com o maior número de penalidades.
selecta.nome
from atleta a, penalidades p
wherea.cod_atleta = p.cod_atleta
andp.pontos = (select MAX(pontos)
from penalidades);
3) Escreva o comando SQL para consultar o nome de todos os pacientes e quantas consultar
foram agendadas. Mostre somente os pacientes que tiveram mais de 5 consultas agendadas
e que são do sexo feminino.
Selectp.nome,count(*)
From paciente p
, agenda a
Wherep.codpaciente = a.codpaciente
Andp.sexo = ‘F’
Groupbyp.nome
Havingcount(*) > 5
Comando pra gerar um script pra excluir todo o banco
select 'droptable '||table_name||' CASCADE CONSTRAINTS;'
FROM user_tables
Subqueries:
8. 1) Mostre clientes que não tem orçamento
Select c.nome
from cliente c
WHERE NOT EXISTS (select * from orcamento o WHERE c.codcliente=o.codcliente)
OU
Select c.nome
from cliente c
Werec.codcliente NOT IN (Select o.codcliente from orçamento o)
2)O Nome do cliente que fez a maior compra
Selectc.nome
from cliente c, compra m
Wherec.codcliente = m.codcliente
andm.valor = (SelectMAX(valor) from compra)
3)Exibir o nome do atleta com o maior número de penalidades.
selecta.nome
from atleta a, penalidades p
wherea.cod_atleta = p.cod_atleta
andp.pontos = (select MAX(pontos)
from penalidades);
4) Escreva o nome do comprador que possui o maior valor total de venda
selectv.nomecomprador
fromvenda v
wherev.valortotal = (selectmax(v. valortotal) from venda v)
5) Escreva o comando SQL para consultar o nome de todos os pacientes que agendaram
consulta mas não fizeram tratamento.
Selectp.nome
From paciente p
, agenda a
p.codpaciente =a.codpaciente
and NOT EXISTS (select * frompacientetratamenteopt
Wherept.codpaciente=p.codpaciente)