Jump to content

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


Rudolfo
 Share

Recommended Posts

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.

Link to comment
Share on other 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

Link to comment
Share on other 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 " ...

Link to comment
Share on other 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) 😉

R. Tape Loading Error

Link to comment
Share on other 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???

Link to comment
Share on other 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)

Matraquilhos para Android.

Gratuito na Play Store.

https://play.google.com/store/apps/details?id=pt.bca.matraquilhos

Link to comment
Share on other 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 😄

R. Tape Loading Error

Link to comment
Share on other sites

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
 Share

×
×
  • 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.