Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

Rudolfo

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

Mensagens Recomendadas

Rudolfo    0
Rudolfo

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
miro3    1
miro3

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Rudolfo    0
Rudolfo

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 " ...

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
AMateus    0
AMateus

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) ;)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Rudolfo    0
Rudolfo

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???

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
bruno1234    20
bruno1234

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)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
paulo silva    0
paulo silva

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:

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
AMateus    0
AMateus

é 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

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


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade