• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

MIMP

chave primaria (resolvido)....nova duvida para criar uma query!

7 mensagens neste tópico

boas!

tenho uma duvida no que respeita à chave primaria da tabela agencias...

drop database if exists agencia_bancaria;
create database agencia_bancaria;
use agencia_bancaria;

create table clientes(
cod_cliente integer not null, 
cliente varchar(20),
profissao varchar(20),
localidade varchar (40),

primary key (cod_cliente));


create  table agencias ( 
cod_agencia integer not null, 
agencia varchar(15),
localidade varchar(40),

primary key (cod_agencia ));

create  table contas( 
num_conta integer not null,  
tipo_conta varchar(20),
cod_cliente integer,
cod_agencia integer,
saldo decimal (10.4), 

primary key (num_conta),

FOREIGN KEY (cod_cliente)
REFERENCES clientes (cod_cliente)
ON UPDATE CASCADE
ON DELETE CASCADE,

FOREIGN KEY (cod_agencia)
REFERENCES agencias (cod_agencia)
ON UPDATE CASCADE
ON DELETE CASCADE);


create  table emprestimos( 
num_emprestimo int auto_increment, 
cod_cliente integer not null,
cod_agencia integer not null,
valor varchar(10),


primary key (num_emprestimo),

FOREIGN KEY (cod_cliente)
REFERENCES clientes (cod_cliente)
ON UPDATE CASCADE
ON DELETE CASCADE,

FOREIGN KEY (cod_agencia)
REFERENCES agencias (cod_agencia)
ON UPDATE CASCADE
ON DELETE CASCADE);

A seguinte query diz quais os clientes (cod_agencia e cliente) da agencia com cod_agencia = 123 que apenas são depositantes

select c1.cod_cliente,c1.cliente
from clientes c1, contas c0, emprestimos e
where c1.cod_cliente=c0.cod_cliente and
	  c0.cod_agencia=123 and
	  c1.cod_cliente not in
		(select cod_cliente
			from emprestimos);

ao testar com exemplos se colocar mais de uma agencia com cod_agencia = 123 , dá erro. Queria saber porquê?

os exemplos que usei foram estes (que dá erro na chave primaria)

insert into clientes values (1, 'Joaquim Manel', null,'Braga');
insert into clientes values (2, 'Paulo', 'bancario','Porto');
insert into clientes values (3, 'Ze', 'talhante','Gaia');
insert into clientes values (1234,'Joao','bancario','Braga');
insert into clientes values (192,'Mario','arqueologo','Lisboa');
insert into clientes values (12,'Joao','Eng. Civil','Braga');

insert into agencias values (1111, 'CGD','Braga');
insert into agencias values (2222, 'BPI','Lisboa');
insert into agencias values (3333, 'Caixa Agricola','Vila Real');
insert into agencias values (4444,'BPI','Braga');
insert into agencias values (123,'Santander Totta','Lisboa');
insert into agencias values (123,'BPI','Braganca');

insert into contas values (123,'conta poupança',1,1111,500.233);
insert into contas values (567,'conta corrente',2,2222,1000.23);
insert into contas values (891,'conta conjunta',3,3333,100000.234);
insert into contas values (999,'conta poupanca',1234,4444,45555.86);
insert into contas values (001,'conta corrente',192,123,100.12);
insert into contas values (002,'conta poupanca',12,123,200000);

insert into emprestimos values (0,1,1111,'1000');
insert into emprestimos values (0,2,2222,'2000');
insert into emprestimos values (0,3,3333,'3000');
insert into emprestimos values (0,1234,4444,'4000');
insert into emprestimos values (0,192,123,'200');

Obrigado... ;)

Edit: Correcção de Português. Marcado o código como SQL.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Os campos que são chave primária tem de ser únicos. Ou seja, não pode haver repetição do código. Só pode haver uma agência com o código 123. Outra agência com o mesmo código não faz sentido.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

vou aproveitar este topico para tirar outra duvida..... :(

tenho de escrever uma query que verifique quais os clientes cujo saldo total das suas contas é superior ao valor de qualquer emprestimo contraido neste banco.

comecei por definir uma query que agrupa as contas dos clientes por cod_cliente

select cod_cliente,sum(saldo)
from contas
group by cod_cliente;

  -->esta query tambem está definida para clientes que tenham mais de uma conta no respectivo banco. se este for o caso, vai somar o saldo de cada conta

Tambem defini uma query que vai buscar o valor minimo do emprestimo

select min(valor)
from emprestimos;

agora queria juntar as duas, de modo a que verifique se o saldo total da conta de cada cliente é superior ao minimo do emprestimo.

aqui esta a minha duvida.... n consigo defini-la

obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não percebi, podias explicar melhor? O valor do empréstimo é igual para todos os clientes?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o valor do emprestimo n é igual para todos os clientes. Eu usei os exemplos em cima,...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

boas.....

tenho uma dúvida na seguinte questao...

drop database if exists clube_video;
create database clube_video;
use clube_video;

create table socios (
num_socio integer not null, 
nome varchar(20),
morada varchar(40),
telefone integer,
bi integer,
data_nascimento date,
data_inscricao date,

primary key (num_socio));


create  table filmes ( 
cod_filme integer not null, 
titulo varchar(15),
duraçao varchar(10),

primary key (cod_filme ));

create  table modalidades( 
modalid varchar(10), 
preco varchar(5),
multa_diaria varchar(15),

primary key (modalid));


create  table copias( 
cod_filme integer not null, 
num_copia integer not null,
formato varchar(10),
data_aquisicao varchar (20),
preco varchar(5),


primary key (cod_filme, num_copia ));

create table alugueres(
num_aluguer integer not null,
num_socio integer not null,
cod_filme integer not null,
num_copia integer not null,
modalid varchar (10),
data_aluguer varchar (10),
data_entrega varchar (10),
preco varchar (5),
multa varchar (5),

primary key (num_aluguer),

FOREIGN KEY (num_socio)
REFERENCES socios (num_socio)
ON UPDATE CASCADE
ON DELETE CASCADE, 

FOREIGN KEY (cod_filme,num_copia)
REFERENCES copias (cod_filme,num_copia)
ON UPDATE CASCADE
ON DELETE CASCADE,

FOREIGN KEY (modalid)
REFERENCES modalidades (modalid)
ON UPDATE CASCADE
ON DELETE CASCADE);

usando as tabelas virtuais (view) tenho de seleccionar o filme (titulo) mais rentavel do video_clube....

comecei por definir a tabela virtual

create view mais_rentavel (filme, num_de_vs_alugado)
as select cod_filme, count(*)
		from alugueres
		where max(num_aluguer)
	group by cod_filme;

--> que me dá erro

queria que me ajudassem a correr o erro da query e a definir o resto da funçao para responder á pergunta

select titulo
from filmes
where ???????

Obgr

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora