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

Rudolfo

Duvida (de iniciante...) em SQL :)

13 mensagens neste tópico

boas,

comecei ha cerca de duas semanas a mexer em SQL lá na faculdade ... e até vou entendendo algo dakilo!!!

agora,tou aki com uma duvida, relativa a um problema proposto pela professora ....

TABELAS:

Fornecedor = Cod_F + nome_F + morada_F

Artigo = cod_A + nome_A + cor_A

Catálogo = cod_F + cod_A + preço_A

O catálogo lista os preços dos artigos por fornecedor.

o que é pretendido é:

Listar os nomes dos fornecedores que fornecem só artigos vermelhos.

eu através deste comando:

select f.nome

from fornecedor f,artigo a, catalogo c

group by a.cor_A like 'vermelho'

where c.cod_F = f.cod_f and c.cod_a =a.cod_a

consigo fazer o que é pedido???

cumps.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se tens a query porque é n a testas tu?

nao testo, pois nao tenho "valores", e ainda nao "aprendi" o input dos mesmos ...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o teu query está mal

a)onde tens "group by" deves ter "where"

b)o Group by não pode vir antes da condição where.

c)se usas o Like é porque queres procurar registos similares a, então deves ter %. Se sabes exactamente o que procuras, usa o =

Query corrigido.

Select Distinct

f.nome

From fornecedor f,artigo a, catalogo c (Nolock)

Where 

a.cor_A='vermelho'

And c.cod_F = f.cod_f

And c.cod_a =a.cod

Order By

1

para introduzires dados nas tabelas usas o «insert into»

Insert Into Fornecedor

Select '1' cod_f, 'Nome' nome_f, 'morada' morada_f

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Essa query não mostra os fornecedores que fornecem artigos vermelhos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o teu query está mal

a)onde tens "group by" deves ter "where"

b)o Group by não pode vir antes da condição where.

c)se usas o Like é porque queres procurar registos similares a, então deves ter %. Se sabes exactamente o que procuras, usa o =

Query corrigido.

Select Distinct

f.nome

From fornecedor f,artigo a, catalogo c (Nolock)

Where 

a.cor_A='vermelho'

And c.cod_F = f.cod_f

And c.cod_a =a.cod

Order By

1

para introduzires dados nas tabelas usas o «insert into»

Insert Into Fornecedor

Select '1' cod_f, 'Nome' nome_f, 'morada' morada_f

miro3, neste exercicio nao nos é possivel inserir dados, devido as permissoes!!!

mas, btw, ja entendi a cena do " group by" ... ;) tks!!!

so nao entendo na tua qery, a cena do " order by 1 " ...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Na realidade o mais correcto seria (assumindo que podes usar INNER JOIN):

select F.nome_F from Fornecedores F inner join Catálogo C on F.Cod_F = C.cod_F inner join Artigo A on C.cod_A = A.cod_A where A.cor_A = 'Vermelho'

(é provável q haja erros de sintaxe pois foi escrito aqui directamente (long live intellisense) ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

é indiferente usar «From a,b (nolock) where a.cod=b.cod» ou usar o «Inner join».

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Na realidade o mais correcto seria (assumindo que podes usar INNER JOIN):

select F.nome_F from Fornecedores F inner join Catálogo C on F.Cod_F = C.cod_F inner join Artigo A on C.cod_A = A.cod_A where A.cor_A = 'Vermelho'

(é provável q haja erros de sintaxe pois foi escrito aqui directamente (long live intellisense) ;)

sim, posso usar o " INNER JOIN " ...

mas olha, esta resoluçao, mostra mesmo SO os que vendem VERMELHO???

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

No enunciado tens: os que vendem vermelho

Se tiveres fornecedores q vendem vermelho e azul, vão aparecer nessa query, apesar do filtro remover os azuis.

Tens q acrescentar o filtro para remover as outras cores.

Sugestão: encaixar no filtro where not exists cor != vermelho. (Isto n é para espetar directo, é só para ficar a ideia)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso não tem nada que saber, é um inner join para juntar as tabelas certo?

Depois um Where onde a cor é igual a vermelho, nada mais amigos... :smoke:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

é indiferente usar «From a,b (nolock) where a.cod=b.cod» ou usar o «Inner join».

Certo, mas já que o SQL Server é uma BD relacional.... :) E o Código fica significativamente mais limpo e fácil  de actualizar (ie, acrescentar mais relações)

Além de que o JOIN é um standard Ansi-92, enquanto o WHERE (como ligação) não o é. De qualquer maneira é, na maior parte dos casos, uma questão de gosto pessoal! Na maioria dos projectos não há, de facto, diferença. Mas em projectos grandes nada melhor que analisar o Execution Plan do query analyser e ver se há diferença a nível de rapidez ou outro (algo que deve ser feito N vezes sobre as queries até ter a certeza de que não existe bottlenecks).

A discussão vêm de longe lol :D

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