MIMP Posted May 26, 2009 at 10:17 PM Report #267503 Posted May 26, 2009 at 10:17 PM 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.
Betovsky Posted May 26, 2009 at 10:24 PM Report #267506 Posted May 26, 2009 at 10:24 PM 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
MIMP Posted May 27, 2009 at 04:08 PM Author Report #267769 Posted May 27, 2009 at 04:08 PM 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
Betovsky Posted May 27, 2009 at 07:38 PM Report #267819 Posted May 27, 2009 at 07:38 PM 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
MIMP Posted May 27, 2009 at 08:41 PM Author Report #267829 Posted May 27, 2009 at 08:41 PM o valor do emprestimo n é igual para todos os clientes. Eu usei os exemplos em cima,...
Betovsky Posted May 27, 2009 at 08:53 PM Report #267832 Posted May 27, 2009 at 08:53 PM Então vais ter de fazer join entre as tabelas. Podes aprender por este tutorial: http://sqlzoo.net/3b.htm "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
MIMP Posted May 28, 2009 at 09:52 PM Author Report #268145 Posted May 28, 2009 at 09:52 PM 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
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now