Vou tentar fazer um gráfico a partir dos dados do meu banco de dados SQL server. Eu vou ter todas as ruas com a contagem dos usuários que estão morando nessa rua mesmo que a contagem seja zero.
Para isso, tentei esta consulta:
Create table Streets(
ID int IDENTITY primary key,
Name varchar(100)
);
create table users(
ID int IDENTITY primary key,
Username varchar(100),
StreetID int references Streets(id)
);
insert into streets values ('1st street'), ('2nd street'), ('3rd street'),
('4th street'), ('5th street');
insert into users values ('Pol', 1), ('Doortje', 1), ('Marc', 2), ('Bieke', 2),
('Paulien', 2), ('Fernand', 2), ('Pascal', 2), ('Boma', 3),
('Goedele', 3), ('Xavier', 4);
select s.name as street, count(s.name) as count
from users u inner join streets s on u.streetid = s.id
group by s.name
E me dá essa saída:
EU IRIA | rua | contar |
---|---|---|
1 | 1ª rua | 2 |
2 | 2ª rua | 5 |
3 | 3ª rua | 2 |
4 | 4ª rua | 1 |
O problema é que a rua 5, onde não mora nenhum usuário, não aparece no resultado. Eu poderia fazer isso com o SQL Server? Aqui você tem um violino
Atualização: Se eu fizer isso right join
, tenho este resultado:
EU IRIA | rua | contar |
---|---|---|
1 | 1ª rua | 2 |
2 | 2ª rua | 5 |
3 | 3ª rua | 2 |
4 | 4ª rua | 1 |
5 | 5ª rua | 1 |
O motivo pelo qual sua consulta não funcionou conforme o esperado:
A junção interna fornece a interseção de 2 tabelas. No seu caso, não havia entrada para
5th street
na sua tabela de usuários e é por isso que join não produziu nenhuma entrada para isso.A junção externa (direita ou esquerda) fornecerá o resultado da junção interna e, além disso, todos os registros não qualificados da tabela esquerda ou direita, dependendo do tipo (esquerda ou direita) da junção externa.
Nesse caso, coloquei Street à esquerda da junção e usei a junção externa esquerda como você queria que todas as ruas (mesmo a contagem fosse zero) em seu conjunto de resultados.
Altere sua consulta de seleção para isso.
Resultado
Esta é uma forma possível.
Limpando o código para trabalhar em uma instância que diferencia maiúsculas de minúsculas...
Quando você usa
COUNT
com um nome de coluna, ele contaNOT NULL
valores.Estou usando um
RIGHT JOIN
aqui para apaziguar Joe Obbish.Resultados:
Aqui está a breve consulta: