Manual de consulta rápido de PL/SQL

10
Cardinalidade Máxima: Departamento Funcionários 1 n Cardinalidade Mínima: Departamento Funcionários 1 0 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 Um departamento pode ter Um funcionário pode pertencer a Para cadastrar funcionários, eu preciso de Para cadastrar departamento, eu preciso de

description

Manual bem básico que eu fiz pra meu uso durante a disciplina de banco de dados, que pode ser de utilidade.

Transcript of Manual de consulta rápido de PL/SQL

Page 1: Manual de consulta rápido de PL/SQL

Cardinalidade Máxima:

Departamento Funcionários

1 n

Cardinalidade Mínima:

Departamento Funcionários

1 0

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áriasModelo Físico: Chaves primarias, estrangeiras, novas entidades criadas com o relacionamento n pra n

SQL:Comandos DDL:

Um departamento pode ter quantos funcionários?

Um funcionário pode pertencer a quantos departamentos?

Para cadastrar funcionários, eu preciso de departamento?

Para cadastrar departamento, eu preciso de funcionário?

Page 2: Manual de consulta rápido de PL/SQL

Criando Tabela

Create table cidadecodcidade number(4) not null,nomecidade varchar2(20) no null)

Mostra tabela cidade

desc cidade

Exclui tabela

drop table cidade

Incluir campo posteriormente

alter table cidadeadd estado varchar2(2) not null

Excluindo campo:

alter table cidadedrop column estado

Modificando campo

alter table acervo modifytitulo varchar(100) not null

Adicionar chave primária

alter table cidade

add constraint cidade_pk primary key (codcidade)

(codcidade é o campo que você deseja transformar em PK)

Adicionar múltiplas chaves primárias

alter table cidade

add constraint cidade_pk primary key (codcidade,cidade,estado)

Adicionar chave estrangeira

alter table aluno add constraint aluno_cidade_fkforeign key (codcidade)references cidade (codcidade)

Page 3: Manual de consulta rápido de PL/SQL

(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

alter table aluno add constraint aluno_cidade_fkforeign key (codcidade,cidade,estado)references cidade (codcidade,cidade,estado)

Comandos DML:

Inserção:

Insert into 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)

Insert into cidade (codcidade, descrição,uf)values(2,’Bento’,NULL)

(caso o campo não seja Not Null, irá ser inserido valor nulo no campo uf)

Alteração:

update cidadeset uf=’RS’where uf=’SC’

Exclusão:

delete from cidadewhere codcidade >=1and codcidade <= 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)order by publicacao (ordena pelo campo publicação em ordem alfabética)

Page 4: Manual de consulta rápido de PL/SQL

select titulo from acervowhere codacervo > 2 (mostra na coluna titulo da tabela acervo as linhas onde codavervo for maior que 2)

select titulo from acervowhere codacervo > 2and codacervo <= 4

select titulofrom acervowhere codacervo IN (1,3) (apenas os que estão entre parenteses)

select titulofrom acervowhere codacervo BETWEEN 2 and 4 (todos entre 2 e 4)

Select *from empréstimowhere dtdevolucao IS NULL

Select NVL(dtdevolucao,)from empréstimowhere dtdevolucao IS NULL (mostra onde esta null com valor 0)

select titulo from acervowhere titulo like %a% (que contenha "a" no titulo)

Page 5: Manual de consulta rápido de PL/SQL

Usando Aliases:

1. Exibir o título de todos os filmes da categoria “Acervo” do gênero “Ação”.

Select f.titulo (Campo que você quer consultar)From filme f,

categoria c, (da onde os dados vem)genero g

where upper (c.descricao) = ‘ACERVO’ (Condições)and upper (g.descricao) = ‘ACAO’and f.genero = g.codgem (Abaixo, ligando de acordo com as constraints)and f.categoria = c.codcat

2. Exibir todos os clientes que pagaram alguma multa.

Select *From cliente c,

Locação lWhere nvl(vlrmulta,0)>0 (NVL transforma valores NULL em 0 para exibição)And c.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.

Select f.titulo, g.descricaofrom filme f,genero gwhere g.codgen = f.generoorder by 1

Se usar “asc” depois de order by 1, é 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)

select a.nome, e.nomefrom atleta a, equipe e, equipe_atleta ae (as três entidades)where a.cod_atleta = ae.cod_atleta (ligando as 3 entidades através das PK/FK)and ae.cod_equipe = e.cod_equipeorder by e.nome; (ordenando por nome de equipe)

Page 6: Manual de consulta rápido de PL/SQL

Matéria nova: Funções de Grupo:

AVGSUMCOUNTMINMAX

select sum (valor) --------- somafrom multa

select max (valor) --------- maximo valorfrom multa

select avg (valor) --------- media valorfrom multa

select count (valor) --------- quantidade valorfrom multa

select cod_socio, sum (valor) ----- cod_socio não tem funcao de grupo, sum(valor) tem.from multagroup by cod_socio ----- o campo que vai no group by não tem função de grupo. É obrigatório a presença dele para que os campos sem função de grupo sejam exibidos.

select m.cod_socio, a.nome, sum(m.valor)from multa m, associado awhere m.cod_socio=a.cod_sociohaving sum(m.valor)>8 --------- testar por funcao de grupo --- testa se o somatorio é > 8group by m.cod_socio, a.nomeorder by m.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 alunosHaving Count(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

Page 7: Manual de consulta rápido de PL/SQL

select e.nome, count(*) (count (*), quantidade de vezes que aparece)from equipe e, equipe_atleta ae, participacao p, competicao c (todas as tabelas até chegar em competição)where ae.cod_equipe = e.cod_equipeand ae.cod_equipe = p.cod_equipe (Ligando as tabelas PK/FK) and ae.cod_atleta = p.cod_atleta and p.cod_competicao = c.cod_competicaoand c.cidade = 'Sao Paulo' (condição para exibir no select)group by e.nome;

2) Exibir o nome do atleta com o maior número de penalidades.

select a.nomefrom atleta a, penalidades pwhere a.cod_atleta = p.cod_atletaand p.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.

Select p.nome,count(*)From paciente p, agenda aWhere p.codpaciente = a.codpacienteAnd p.sexo = ‘F’Group by p.nomeHaving count(*) > 5

Comando pra gerar um script pra excluir todo o banco

select 'drop table '||table_name||' CASCADE CONSTRAINTS;'

FROM user_tables

Subqueries:

Page 8: Manual de consulta rápido de PL/SQL

1) Mostre clientes que não tem orçamento

Select c.nomefrom cliente cWHERE NOT EXISTS (select * from orcamento o WHERE c.codcliente=o.codcliente)

OU

Select c.nomefrom cliente cWere c.codcliente NOT IN (Select o.codcliente from orçamento o)

2)O Nome do cliente que fez a maior compra

Select c.nome from cliente c, compra mWhere c.codcliente = m.codclienteand m.valor = (Select MAX(valor) from compra)

3)Exibir o nome do atleta com o maior número de penalidades.

select a.nomefrom atleta a, penalidades pwhere a.cod_atleta = p.cod_atletaand p.pontos = (select MAX(pontos) from penalidades);

4) Escreva o nome do comprador que possui o maior valor total de venda

select v.nomecompradorfrom venda vwhere v.valortotal = (select max(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.

Select p.nomeFrom paciente p, agenda ap.codpaciente =a.codpacienteand NOT EXISTS (select * from pacientetratamenteo pt

Where pt.codpaciente=p.codpaciente)