2
respostas

DUVIDA INNER JOIN- MÃO NA MASSA- SOMAR NOTAS POR VENDEDOR E ANO

Neste exercício ele usa o campo DATA da tabela [notas fiscais], e no começo foi orientado que todos os campos que serão selecionados para o select, precisa ter o nome da tabela na frente, então porque ficou dessa forma:

(SELECT [TABELA DE VENDEDORES].MATRICULA, [TABELA DE VENDEDORES].[NOME], YEAR(DATA), 
COUNT(*) FROM [TABELA DE VENDEDORES] INNER JOIN 
[NOTAS FISCAIS] ON [TABELA DE VENDEDORES].MATRICULA = [NOTAS FISCAIS].MATRICULA
GROUP BY [TABELA DE VENDEDORES].MATRICULA, [TABELA DE VENDEDORES].[NOME], YEAR(DATA))

e não desta forma?

(SELECT [TABELA DE VENDEDORES].MATRICULA, [TABELA DE VENDEDORES].[NOME], [NOTAS FISCAIS].YEAR(DATA), 
COUNT(*) FROM [TABELA DE VENDEDORES] INNER JOIN 
[NOTAS FISCAIS] ON [TABELA DE VENDEDORES].MATRICULA = [NOTAS FISCAIS].MATRICULA
GROUP BY [TABELA DE VENDEDORES].MATRICULA, [TABELA DE VENDEDORES].[NOME], [NOTAS FISICAIS].YEAR(DATA))

Ao definir a tabelas a esquerda, ele já subentende que as que não estão com o nome da tabela, pertencem a tabela à direita?

2 respostas

Olá Larissa, tudo bem?

Ao informar os campos no SELECT, precisamos realmente referenciar de qual tabela aquele campo está vindo, pois normalmente existem campos iguais nas tabelas, como por exemplo, o campo matrícula na tabela de vendedores e o campo matrícula na tabela de notas fiscais e o banco não saberia de qual tabela o campo estaria vindo.

No caso do campo data, ele existe apenas na tabela de notas fiscais, então ao ser informado no SELECT o banco de dados automaticamente saberá de qual tabela aquele campo está vindo, pois na tabela de vendedores não existe o campo data e por este motivo o SELECT do instrutor funcionou sem problemas.

Mas indico que sempre informe de qual tabela o campo pertence Larissa, mesmo que seja campo único, pois, caso seja um JOIN envolvendo mais de duas tabelas, ou seja selecionado muitos campos, você irá conseguir saber automaticamente de qual tabela cada campo está vindo.

Tenho apenas uma observação a fazer na sua query, a tabela não pode ser associada a função, pois ela precisa estar associada diretamente ao campo, então você pode informar a tabela juntamente com o campo dentro da função YEAR, dessa forma:

YEAR([NOTAS FISCAIS].DATA)
  • A sua query completa ficaria assim:
(SELECT [TABELA DE VENDEDORES].MATRICULA, [TABELA DE VENDEDORES].[NOME], YEAR([NOTAS FISCAIS].DATA), 
COUNT(*) FROM [TABELA DE VENDEDORES] INNER JOIN 
[NOTAS FISCAIS] ON [TABELA DE VENDEDORES].MATRICULA = [NOTAS FISCAIS].MATRICULA
GROUP BY [TABELA DE VENDEDORES].MATRICULA, [TABELA DE VENDEDORES].[NOME], YEAR(DATA));

Espero ter ajudado e bons estudos!

Muito obrigada!