Usuário com melhor resposta
Duvida em Select

Pergunta
-
Boa tarde gente, tenho uma duvida sobre uma atividade que estou fazendo para banco de dados para entregar amanhã, já olhei em todo canto mais não achei a solução, a pergunta é a seguinte:
- Para cada departamento, obter seu nome e o seu número de disciplinas. Obter o resultado em ordem descendente de número de disciplinas:
Então, tenho 3 departamentos cadastrados,
CREATE TABLE Depto (codDepto CHAR(5), nomeDepto VARCHAR(20) PRIMARY KEY (codDepto)); INSERT INTO Depto VALUES ('INF01', 'Informática'); INSERT INTO Depto VALUES ('MAT01', 'Matemática'); INSERT INTO Depto VALUES ('ELE01', 'Eletrônica');
E a tabela de disciplinas:
CREATE TABLE Disciplina (codDepto CHAR(5), numDisc CHAR(5), nomeDisc VARCHAR(20), creditosDisc INTEGER, PRIMARY KEY (codDepto, numDisc), FOREIGN KEY (codDepto) REFERENCES Depto); INSERT INTO Disciplina VALUES ('INF01', 'DIS01', 'Ling Formais', 4); INSERT INTO Disciplina VALUES ('INF01', 'DIS02', 'Teoria da Comp', 4); INSERT INTO Disciplina VALUES ('INF01', 'DIS03', 'Programacao I', 8); INSERT INTO Disciplina VALUES ('MAT01', 'DIS04', 'Cálculo 1', 4); INSERT INTO Disciplina VALUES ('MAT01', 'DIS01', 'Cálculo 2', 6);
Eu consigo fazer o select e dizer quais são os departamentos e também dizer quantas disciplinas ele tem, porem no caso do departamento 'Eletronica' ele não tem nenhuma disciplina, então como eu posso fazer para mostrar ele no select com valor null no campo quantidade de disciplinas, segue o codigo que realizei para trazer nome e a qntd de disciplina de cada depto:
SELECT nomeDepto , COUNT (nomeDisc) AS QtdDisciplinas FROM Depto, Disciplina
WHERE Disciplina.codDepto = Depto.codDepto
GROUP BY nomeDepto ORDER BY (QtdDisciplinas) DESC
- Para cada departamento, obter seu nome e o seu número de disciplinas. Obter o resultado em ordem descendente de número de disciplinas:
Respostas
-
Boa tarde,
Nesse caso você poderia utilizar um Left Join (http://www.w3schools.com/sql/sql_join_left.asp):
SELECT nomeDepto , COUNT (nomeDisc) AS QtdDisciplinas FROM Depto LEFT JOIN Disciplina ON Disciplina.codDepto = Depto.codDepto GROUP BY nomeDepto ORDER BY QtdDisciplinas DESC
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta JuniorTunjr quinta-feira, 29 de outubro de 2015 18:10
-
Álgebra Relacional !!!!
Eletrônica está no lado esquerdo da relação, mas não tem nenhum valor para fazer a intersecção, dessa maneira ao igualar os valores, ele desconsidera aquele que não tem referencia, por isso o uso do left, ele traz todos os valores que possuem correlação e os valores que estão na ESQUERDA da sua consulta mas sem um valor correlato !.
Flávio Farias "May the Force be with you" Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
- Marcado como Resposta JuniorTunjr quinta-feira, 29 de outubro de 2015 18:19
Todas as Respostas
-
Boa tarde,
Nesse caso você poderia utilizar um Left Join (http://www.w3schools.com/sql/sql_join_left.asp):
SELECT nomeDepto , COUNT (nomeDisc) AS QtdDisciplinas FROM Depto LEFT JOIN Disciplina ON Disciplina.codDepto = Depto.codDepto GROUP BY nomeDepto ORDER BY QtdDisciplinas DESC
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta JuniorTunjr quinta-feira, 29 de outubro de 2015 18:10
-
-
Álgebra Relacional !!!!
Eletrônica está no lado esquerdo da relação, mas não tem nenhum valor para fazer a intersecção, dessa maneira ao igualar os valores, ele desconsidera aquele que não tem referencia, por isso o uso do left, ele traz todos os valores que possuem correlação e os valores que estão na ESQUERDA da sua consulta mas sem um valor correlato !.
Flávio Farias "May the Force be with you" Se foi resolvido clique "Marcar como resposta" e se foi útil "Votar como Útil"
- Marcado como Resposta JuniorTunjr quinta-feira, 29 de outubro de 2015 18:19
-