MySQL: Query Table N: N

1
Create database Banco
default character set utf8
default collate utf8_general_ci;

use Banco;

create table Cadastrados(
Nome varchar(50),
Sexo enum('M', 'F'),
Matricula varchar(9) unique,
Curso enum('Arquitetura e Urbanismo', 'Engenharia Ambiental', 'Engenharia Civil', 'Engenharia de Controle e Automação', 'Engenharia de Minas', 'Engenharia de Produção', 'Engenharia Geológica', 'Engenharia Mecânica', 'Engenharia Metalúrgica', 'Outro'),
Endereco varchar(50),
CPF varchar(15),
RG varchar(15),
Aniversario date,
Email varchar(30),
Telefone varchar(20),
Socio enum('SIM', 'NÃO'),
Treinador enum('SIM', 'NÃO'),
primary key (Matricula)
)default charset = utf8;

insert into Cadastrados values
('Vitor Piagge','M','11.2.1234','Engenharia Civil','Avenida da barra, 10','111.111.111-1','22.333.444-5','1991-06-16','[email protected]','(31) 9 1234 123','SIM','NÃO'),
('Gustavo Lima','M','10.2.9999','Engenharia Mecanica','Avenida JK, 100','383.614.758-00','47.798.858-1','1989-10-24','[email protected]','(31) 9 7364 4146','NÃO','NÃO'),
('Leticia Borsato','F','15.2.2134','Arquitetura e Urbanismo','republica cravo e canela','383.614.758-00','47.798.858-1','1997-12-29','[email protected]','(31) 9 7364 4146','SIM','NÃO'),
('Edson Pelé','M','11.1.1111','Engenharia de Produção','Rua Othon Guimaraes, 97','383.614.758-00','47.798.858-1','1990-08-10','[email protected]','(31) 9 7364 4146','NÃO','NÃO'),
('Julio','M','13.2.7777','Outro','Rua do Lino, 235','383.614.758-00','47.798.858-1','1994-09-13','[email protected]','(31) 9 7364 4146','NÃO','SIM'),
('Mila','F','14.2.5555','Outro','Rua Alfa, 304','383.614.758-00','47.798.858-1','1988-04-01','[email protected]','(31) 9 7364 4146','NÃO','SIM');

create table Modalidades(
ID_modalidade int not null auto_increment,
Nome varchar(45),
primary key (ID_modalidade)
)default charset = utf8;

insert into modalidades values
(default, 'Basquete');

create table Cadastrado_ser_Atleta(
ID int not null auto_increment,
Matricula_Cadastrado varchar (9),
Modalidade_ID int not null,
primary key (id),
foreign key (Matricula_Cadastrado) references Cadastrados (Matricula),
foreign key (Modalidade_ID) references Modalidades (ID_modalidade)
)default charset = utf8;

insert into cadastrado_ser_atleta values
(default, '11.2.1240', '1');

How would I make the select to display the Registered Name, enrollment, course and mode that the person plays? I'm still learning how to use the keys and relationships mechanism, so I'm accepting suggestions that can optimize this code.

    
asked by anonymous 21.03.2017 / 16:05

1 answer

3

If you can not guarantee that all subscribers will be linked to a modality, you must use a Left Join .

You can see more about Joins in this question

I've done a SQLFiddle so you can see the query working.

p>
Select Cad.Nome, Cad.Matricula, Modalidade.Nome

From Cadastrados As Cad

Left Join Cadastrado_Ser_Atleta As SerAt 
  On SerAt.Matricula_Cadastrado = Cad.Matricula

Left Join Modalidades As Modalidade
  On Modalidade.ID_modalidade = SerAt.Modalidade_ID 
    
21.03.2017 / 18:02