Ajuda com Banco de Dados

1. Ajuda com Banco de Dados

Adamastor Ferreira
Gator27

(usa Ubuntu)

Enviado em 01/07/2012 - 10:14h

Gostaria de de saber qual comando que acha a a média das notas dos alunos em cada disciplina deste banco de dados.


-- Criação da tabela Curso
create table curso
(
idcurso serial,
nomecurso varchar(50) Unique,
constraint pk_curso primary key (idcurso)
);

-- Criação da tabela Aluno
create table aluno (
matricula serial,
nomealuno varchar(60) not null,
idcurso integer,
constraint pk_aluno primary key (matricula),
constraint fk_aluno_curso foreign key (idcurso)
references curso (idcurso)
);

-- Criação da tabela Professor
create table professor
(
idprofessor serial,
nomeprofessor varchar(60) not null,
constraint pk_professor primary key (idprofessor)
);

-- Criação da tabela Disciplinas
create table disciplinas
(
iddisciplina serial,
nomedisciplina varchar(70) not null unique,
constraint pk_disciplina primary key (iddisciplina)
);

-- Criação da tabela Turma, esta tabela irá relacionar os professores e
-- as disciplinas de uma turma
create table turma
(
idturma serial,
idprofessor integer,
iddisciplina integer,
constraint pk_turma primary key (idturma, idprofessor, iddisciplina),
constraint fk_turma_disciplina foreign key (iddisciplina)
references disciplinas (iddisciplina),
constraint fk_turma_professor foreign key (idprofessor)
references professor (idprofessor)
);



-- Criação da tabela Inscrito, que relaciona os alunos às turmas
create table inscrito
(
matricula integer,
idturma integer,
idprofessor integer,
iddisciplina integer,
notas real,
faltas smallint,
constraint pk_inscrito primary key (matricula, idturma, idprofessor, iddisciplina),
constraint fk_inscrito_turma foreign key (idturma, idprofessor, iddisciplina)
references turma (idturma, idprofessor, iddisciplina),
constraint fk_inscrito_aluno foreign key (matricula)
references aluno (matricula)
);

-- Inserção dos valores nas tabelas
-- observe que em alguns casos foram omitidos os nomes dos campos
-- quando isto acontece, a lista de valores, usadas no parâmetro value
-- tem que seguir a mesmo ordem da disposição dos campos nas tabelas
insert into curso values (1, 'Informática'),
(2, 'Eletromecânica'),
(3, 'Miração');

Insert into professor (nomeprofessor) values ('Daniel'),('João Paulo'),('Marcelo'),
('Shaider'),('Cristiano'),('Alexandre'),
('Flávio');

insert into disciplinas values (1, 'Banco de dados'),
(2, 'Modelagem de dados'),
(3, 'Emprendedorismo'),
(4, 'Redes'),
(5, 'Informática Básica');

insert into aluno (nomealuno) values ('Ana '),('André'),('Angélica'),('Bruno'),('Élvis'),
('Evandro'),('Fabiano'),('Gustavo'),('Igor'),
('José Maria'),('Leidiane'),('Mailson'),('Meiryellen'),
('Nathália'),('Neive'),('Oberdan'),('Rayra'),
('Ricardo'),('Robsom'),('Sullivan'),('Wesley'),
('Beatriz'),('Bruna'),('Éric'),('Hugo'),
('João Victor'),('Jonas'),('Júlia'),('Laila'),
('Leonardo'),('Lucas'),('Marcela'),('Mariana'),
('Natana'),('Paulo'),('Raphael'),('Ronaldo'),
('Rosa'),('Samara'),('Samuel'),('Tainá'),
('Taline'),('Thamyres'),('Thiago'),('Ygor');

insert into turma values (1,1,1), (2, 2, 4), (3, 4, 3), (4, 5, 5), (5, 7, 2), (6, 6, 5);





-- atribuição de cursos para os alunos
update aluno set idcurso = 1
where matricula <=15;

update aluno set idcurso = 2
where matricula between 16 and 30;

update aluno set idcurso = 3
where matricula between 31 and (select count(*) from aluno);

-- inscrição dos alunos nas disciplinas
-- este comando insere registros obtidos em uma consulta
insert into inscrito (matricula, idturma, idprofessor, iddisciplina, notas, faltas)
select matricula,1,1,1, 9.5, 3
from aluno
where idcurso = 1;

insert into inscrito (matricula, idturma, idprofessor, iddisciplina, notas, faltas)
select matricula,2,2,4, 9.5, 3
from aluno
where idcurso = 1;

insert into inscrito (matricula, idturma, idprofessor, iddisciplina, notas, faltas)
select matricula,3,4,3, 9.0, 2
from aluno
where idcurso = 2;

insert into inscrito (matricula, idturma, idprofessor, iddisciplina, notas, faltas)
select matricula,6,6,5, 8.3, 2
from aluno
where idcurso = 3;

--
-- update nas notas da tabela inscrito
--
update inscrito
set notas = 7.5
where (matricula % 5) = 1;

update inscrito
set notas = 5.5
where (matricula % 11) = 1;


update inscrito
set notas = 6.5
where (matricula % 7) = 1;

update inscrito
set notas = 7.5
where (matricula % 5) = 1;

update inscrito
set faltas = 1
where (matricula % 5) = 1;




  


2. Re: Ajuda com Banco de Dados

Raimundo Alves Portela
rai3mb

(usa Outra)

Enviado em 01/07/2012 - 14:12h

Não existe um comando específico, vc deve criar uma sentença em SQL para encontrar o que desejas.

Obter dados: SELECT
Média: AVG


SELECT AVG(nota) FROM inscritos WHERE matricula = ID_DO_ALUNO AND iddisciplina = ID_DA_DISCIPLINA 



Sua dúvida não é de comandos, é de construção lógica, isso vc vai adquirir com o tempo.

Aconselho novamente a você (assim como nos outros tópicos) procure estudar desde o básico de SQL, aprenda um pouco a cada dia, pratique a lógica de programação e verás as coisas ficarem bem mais claras .



3. Re: Ajuda com Banco de Dados

Adamastor Ferreira
Gator27

(usa Ubuntu)

Enviado em 01/07/2012 - 14:40h

gostaria de saber a media em cada disciplina e o comando que o derdena a tabela que traga o nome das disciplinas.
fiz assim mas da erro

SELECT disciplina, nome disciplina, cout (*) inscrito,
AVG(inscrito * notas) media,
FROM inscrito, disciplinas
WHERE matricula = IDturma AND iddisciplina = IDDISCIPLINA
GROUP BY disciplina,nomedisciplina


a tabela tem que aparecer assim:


1;"Banco de dados" Media
2;"Modelagem de dados" Media
3;"Emprendedorismo" Media
4;"Redes" Media
5;"Informática Básica" Media



4. Re: Ajuda com Banco de Dados

Raimundo Alves Portela
rai3mb

(usa Outra)

Enviado em 01/07/2012 - 16:37h

Observe aqui vários erros de sintaxe:


SELECT disciplina, nome disciplina, cout (*) inscrito,
AVG(inscrito * notas) media,
FROM inscrito, disciplinas


Repito mais uma vez, estude a sintaxe básica dos comandos e procure entendê-los.


Preste bastante atenção nos erros retornados na ferramenta que vc esta usando, pois com certeza ele deve ter avisado sobre os problemas...



Dentre os erros: SELECT disciplina, nome disciplina, deveria ser: SELECT campo, campo FROM tabela


Não é cout e sim count

Isso aqui não vai trazer resultado: AVG(inscrito * notas), o avg deve ser feito em um campo, resultado de uma seleção













5. Re: Ajuda com Banco de Dados

Raimundo Alves Portela
rai3mb

(usa Outra)

Enviado em 01/07/2012 - 16:39h

Fiz uma tabela de alunos, notas e disciplina, coloquei alguns dados e olha o que vc precisa:


SELECT alunos.no_aluno as aluno, disciplinas.no_disciplina as disciplina, AVG(vl_nota) as media
FROM notas
JOIN alunos ON notas.id_aluno = alunos.id_aluno
JOIN disciplinas ON notas.id_disciplina = disciplinas.id_disciplina
GROUP BY alunos.no_aluno, disciplinas.no_disciplina
ORDER BY alunos.no_aluno, disciplinas.no_disciplina


resultado:

ALUNO|DISCIPLINA|MEDIA
"JOAO";"GEOGRAFIA";7
"JOAO";"HISTORIA";7
"JOAO";"MATEMATICA";7
"JOAO";"PORTUGUES";5
"MARIO";"GEOGRAFIA";8
"MARIO";"HISTORIA";7
"MARIO";"MATEMATICA";6
"MARIO";"PORTUGUES";7
"PEDRO";"GEOGRAFIA";6
"PEDRO";"HISTORIA";7
"PEDRO";"MATEMATICA";9
"PEDRO";"PORTUGUES";7
"PIRLO";"GEOGRAFIA";9
"PIRLO";"HISTORIA";9
"PIRLO";"MATEMATICA";9
"PIRLO";"PORTUGUES";8



Estude o código postado e adapte a sua estrutura de tabelas.


6. Re: Ajuda com Banco de Dados

Adamastor Ferreira
Gator27

(usa Ubuntu)

Enviado em 03/07/2012 - 14:55h

Fiz assim.

select inscrito.iddisciplina, disciplinas.nomedisciplina, avg(notas)média from inscrito, disciplinas
where disciplinas.iddisciplina = inscrito.iddisciplina
group by inscrito.iddisciplina, disciplinas.nomedisciplina;

a dúvida agora e a seguinte:

Neste modelo cada professor lança somente a nota final do aluno. Como fazer para que o professor possa lançar notas de vários instrumentos de avaliação e obter a média, ou total, destas notas?



7. Re: Ajuda com Banco de Dados

Raimundo Alves Portela
rai3mb

(usa Outra)

Enviado em 03/07/2012 - 21:59h

Não faltou conseguir o nome do aluno no seu SELECT? Prefira usar JOIN para juntar tabelas que tem chaves em comum.

Agora:


Neste modelo cada professor lança somente a nota final do aluno. Como fazer para que o professor possa lançar notas de vários instrumentos de avaliação e obter a média, ou total, destas notas?


Isso vc vai fazer na aplicação (php, java, etc).






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts