Jump to content

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


Recommended Posts

Posted

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.

Posted

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.

"Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !"

Sign on a computer system consultant's desk

Posted

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

Posted

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

"Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !"

Sign on a computer system consultant's desk

Posted

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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.