none
Duvida em Select RRS feed

  • 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: 

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

    quinta-feira, 29 de outubro de 2015 17:56

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
    quinta-feira, 29 de outubro de 2015 18:03
  • Á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
    quinta-feira, 29 de outubro de 2015 18:16

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
    quinta-feira, 29 de outubro de 2015 18:03
  • Ajudou muito, obg salvou minha pele, mas aproveitando, pode me explicar porque com o where e o inner join não funcionou?
    quinta-feira, 29 de outubro de 2015 18:08
  • Á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
    quinta-feira, 29 de outubro de 2015 18:16
  • Obrigado, agora sim compreendi!
    quinta-feira, 29 de outubro de 2015 18:22