logo

Aula 08 – Oracle/SQL – Join de múltiplas tabelas (Revisão)

Queridos alunos,

Visando revisar um pouco mais o conteúdo de nossa aula anterior (Sobre join), vamos utilizar 4 (quatro) tabelas de fácil compreensão (Diferente da tabela em ingles, “complexa” e cheia de dados). Lembre-se que é importante popular o banco de dados com as informações deste post, para isto pegue o código abaixo, copie e cole no console do SQL e assista a videoaula 01 sobre Oracle/SQL, caso você não tenha montado seu ambiente de teste, ainda.

O cenario que será montado com o codigo abaixo, tem 4 tabelas, sendo:

  1. tb_aluno – onde estão cadastrados alguns alunos
  2. tb_responsavel – onde estão cadastrados  os nomes dos responsáveis pelos alunos
  3. tb_saladeaula – onde estão cadastradas as salas de aula
  4. tb_matricula – que trás as salas de aula e os alunos matriculados em cada uma

Para que fique interessante o JOIN, eu deixei alguns alunos sem responsáveis, alguns responsáveis sem nenhum aluno e algumas salas de aula sem alunos. Eu dei os “nomes” dos alunos de forma que ficasse claro entender os resultados dos joins.

create table tb_saladeaula
(
saladeaula_id number,
saladeaula_nome varchar2(10)
);
create unique index ui_tbs_saladeaula_nome
on tb_saladeaula (saladeaula_nome);
alter table tb_saladeaula add
(
constraint pk_tbs_saladeaula_id primary key(saladeaula_id)
);

Observações:

  • Vejam que, de inicio, apenas crio os campos, sem informar qualquer tipo de restrição durante a criação.
  • Apos criar os campos, eu “indexo” o campo saladeaula_nome. Geralmente se indexa campos que entram com muita frequência em pesquisas, isto otimiza o tempo de resposta para bancos de dados com grande volume de respostas. No entanto, indexar informações exige do do banco de dados processamento extra. Assim, o correto é indexar aqueles campos que são mais utilizados durante as pesquisas, indexar mais de um por tabela, ou indexar nenhum deles.
  • Observe que eu coloco um identificador em cada tipo de restrição utilizada como, por exemplo: ui_tbs_nomedocampo. O “UI” significa Unique Index pois, desta forma, pelo identificador da restrição, eu já sei que é o nome de um Índice. “TBS” são as iniciais de (TaBela Saladeaula)
  • Ao final, altero a tabela, definindo que saladeaula_id é chave primaria desta tabela
  • Por fim: Existem varias formas de se criar tabelas e o local dentro do código onde as restrições são criadas. Cada pessoa usa o que achar mais conveniente.
create table tb_responsavel
(
responsavel_id number,
responsavel_nome varchar2(40),
responsavel_cpf number
);
create unique index ui_tbr_responsavel_nome
on tb_responsavel(responsavel_nome);
alter table tb_responsavel add
(
constraint pk_tbr_responsavel_id primary key(responsavel_id)
);
create table tb_aluno
(
aluno_id number,
aluno_nome varchar2(40),
responsavel_id number
);
create unique index ui_tba_aluno_nome
on tb_aluno (aluno_nome);
alter table tb_aluno add
(
constraint pk_tba_aluno_id primary key(aluno_id),
constraint fk_tba_responsavel_id foreign key(responsavel_id) references tb_responsavel(responsavel_id)
);
create table tb_matricula
(
matricula_id number,
saladeaula_id number,
aluno_id number
);
create unique index ui_tbm_matricula_id
on tb_matricula(matricula_id);
create unique index ui_tbm_aluno_id
on tb_matricula(aluno_id );
alter table tb_matricula add
(
constraint pk_tbm_matricula_id primary key(matricula_id),
constraint fk_tbm_saladeaula_id foreign key(saladeaula_id) references tb_saladeaula(saladeaula_id),
constraint fk_tbm_aluno_id foreign key(aluno_id) references tb_aluno(aluno_id)
);

Observaçoes:

  • Nesta tabela e nas outras acima eu crio chaves estrangerias. Quando um campo é chave estrangeira (campo-filho), isto significa que o conteúdo que ele irá armazenar será o conteúdo presente em outro campo (campo-pai), existente em outra tabela. A sintaxe é:
    constraint <nome_identificador_da_restricao> foreign key(nome_do_campo-filho) references <nome_da_tabela_pai>(nome_do_campo-pai)

Agora, vamos inserir conteúdo nestas tabelas….

 




 

 

 

 

 

 

545 Visitas totais: 1 Visitas hoje:

Deixe um comentário

*

captcha *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Pular para a barra de ferramentas