Exercício de Banco de Dados

Estou tentando listar o nome e o telefone dos alunos que fizeram Linguagem de Banco de Dados.

Eu botei o seguinte código:

create database if not exists escola;

use escola;

drop table if exists Professor;
drop table if exists Disciplina;
drop table if exists Turno;
drop table if exists Turma;
drop table if exists Aluno;
drop table if exists Aluno_turma;

create table Professor(
	chapa int(3) zerofill not null auto_increment,
	nome varchar(40) not null,
	telefone varchar(10) not null,
	email varchar(40) not null,
	constraint pk_professor primary key(chapa)	
);

create table Disciplina(
	cod_disciplina int(3) zerofill not null auto_increment,
	nome varchar(30) not null,
	carga_horaria decimal not null,
	constraint pk_disciplina primary key(cod_disciplina)
);

create table Turno(
	id_turno varchar(1) not null,
	descricao varchar(5) not null
);

create table Turma(
	cod_turma int(4) zerofill not null,
	turno varchar(1) not null,
	ano_inicio year(4) not null,
	semestre tinyint zerofill not null,
	disciplina int(3) zerofill not null,
	professor int(3) zerofill not null,
	constraint pk_turma primary key(cod_turma),
	constraint fk_turtur foreign key(turno) references Turno(id_turno),
	constraint fk_turdis foreign key(disciplina) references Disciplina(cod_disciplina),
	constraint fk_turpro foreign key(professor) references Professor(chapa)
);

create table Aluno(
	matricula int(7) not null,
	nome varchar(30) not null,
	telefone varchar(12) null,
	constraint pk_aluno primary key(matricula)
);

create table Aluno_Turma(
	turma int(4) not null,
	aluno int(7) not null,
	n1 double not null,
	n2 double not null,
	constraint fk_turalu foreign key(turma) references Turma(cod_turma),
	constraint fk_alutur foreign key(aluno) references Aluno(matricula)
);

use escola;

insert into Professor values
	(null, 'Aline', '95478521', 'aline.zenker@qi.edu.br'),
	(null, 'Andressa', '94877487', 'andressa.dellay@qi.edu.br'),
	(null, 'Frodo', '84214778', 'leandro.silva@qi.edu.br'),
	(null, 'Jonatas', '94051980', 'jonatas.alcalay@qi.edu.br'),
	(null, 'Rita', '81245478', 'rita.gaieski@qi.edu.br');
	
insert into Disciplina values
	(null, 'Logica de Programaçao', 133),
	(null, 'Internet I', 67),
	(null, 'Banco de Dados I', 33.5),
	(null, 'Computação Gráfica', 67),
	(null, 'Linguagem de Banco de Dados', 33.5),
	(null, 'Linguagem de Programação Web', 67);
	
insert into Turno values
	('M', 'Manhã'),
	('T', 'Tarde'),
	('N', 'Noite');
	
insert into Turma values
	(0547, 'M', '2014', 02, 002, 004),
	(0235, 'M', '2015', 01, 001, 001),
	(1475, 'T', '2014', 02, 004, 004),
	(2698, 'N', '2015', 01, 006, 002),
	(2175, 'N', '2014', 02, 005, 003);
	
insert into Aluno values
	(2014159, 'Cassio', '34841598'),
	(2014324, 'Amanda', '34902476'),
	(2015817, 'Cristiano', null),
	(2015369, 'Fernanda', '34882014'),
	(2014474, 'Pablo', '34698720'),
	(2014198, 'Luiza', null);
	
insert into Aluno_Turma values
	(2698, 2015369, 6, 	7),
	(1475, 2014159, 10, 8),
	(0547, 2014474, 5.5, 7),
	(2698, 2015817, 10, 10),
	(2173, 2015369, 9.5, 9.8),
	(2173, 2014198, 8, 4.5);

select a.nome, a.telefone from aluno a inner join aluno_turma atu on a.matricula = atu.aluno inner join turma t on atu.turma = t.cod_turma inner join disciplina d on t.disciplina = d.cod_disciplina where d.nome = 'Linguagem de Banco de Dados';

Quando eu executo não retorna nenhum registros só os nomes das colunas “nome” e “telefone”, eu enviaria as tabelas mas como sou novo não posso enviar arquivos mas pelo menos alguém poderia me dizer no que estou errando?

poste o codigo por completo

Basicamente olhando o seu select está correto, a única coisa que acredito que impediria de você conseguir trazer o resultado seria não dar commit após a inserção de todos os dados.
No caso das tabelas em que a sua PK você trata como auto_increment você pode utilizar a seguinte estrutura de inserção.

Exemplo:insert into Professor values ('Aline', '95478521', 'aline.zenker@qi.edu.br');

Ou seja, não tem a necessidade de informar a primeira coluna como null, conforme seu código acima.

A não ser que ele tenha alterado a configuração, MySQL é auto commit. Logo, se o único problema é este, deveria funcionar, não?

Veja os valores da coluna disciplina na tabela Turma: nenhum valor corresponde ao código da disciplina ‘Linguagem de Banco de Dados’ que é 5.
Logo, o select nunca retornará nada.
Tente com 'Computação Gráfica" e veja que serão retornados 2 tuplas.

Boa tarde,

No seu banco esta exatamente como essa query foi enviada ?
Tentei rodar no meu MySql mas algumas referencias de FK deram erro, e como estou sem tempo não consegui corrigir antes, porem consegui criar as tabelas e inserir os registros para tentar ajudar:

O seu retorno não contem resultados, porque não há alunos matriculados em linguagem de banco de dados na regra de relações que você usou.

select al.nome, al.telefone, disc.nome from
aluno al inner join aluno_turma atur on al.matricula = atur.aluno
inner join turma tur on atur.turma = tur.cod_turma
inner join disciplina disc on tur.disciplina = disc.cod_disciplina;

Com esse select acima, o retorno que vc tera, sera o seguinte:

nome, telefone, nome

‘Fernanda’, ‘34882014’, ‘Linguagem de Programação Web’
‘Cassio’, ‘34841598’, ‘Computação Gráfica’
‘Pablo’, ‘34698720’, ‘Internet I’
‘Cristiano’, NULL, ‘Linguagem de Programação Web’

Espero ajudar.

Abraço!

E so pra terminar de matar a duvida, fiz o select abaixo, relacionando apenas aluno na turma e a turma com a disciplina:

select * from
aluno_turma ATUR inner join turma TUR on ATUR.turma = TUR.cod_turma
inner join disciplina DISC on TUR.disciplina = DISC.cod_disciplina;

E o retorno, é:

turma, aluno, n1, n2, cod_turma, turno, ano_inicio, semestre, disciplina, professor, cod_disciplina, nome, carga_horaria

‘2698’, ‘2015369’, ‘6’, ‘7’, ‘2698’, ‘N’, 2015, ‘001’, ‘006’, ‘002’, ‘006’, ‘Linguagem de Programação Web’, ‘67’
‘1475’, ‘2014159’, ‘10’, ‘8’, ‘1475’, ‘T’, 2014, ‘002’, ‘004’, ‘004’, ‘004’, ‘Computação Gráfica’, ‘67’
‘547’, ‘2014474’, ‘5.5’, ‘7’, ‘0547’, ‘M’, 2014, ‘002’, ‘002’, ‘004’, ‘002’, ‘Internet I’, ‘67’
‘2698’, ‘2015817’, ‘10’, ‘10’, ‘2698’, ‘N’, 2015, ‘001’, ‘006’, ‘002’, ‘006’, ‘Linguagem de Programação Web’, ‘67’

Em tempo, consegui descobrir tambem o motivo:
No seu insert em Aluno_Turma, voce inseriu a turma 2173 quando o certo seria 2175.

Faça o seguinte no seu banco:
update Aluno_Turma set turma = 2175 where turma = 2173;
e teste novamente seu select.