Fazer download em pdf ou txt
Fazer download em pdf ou txt
Você está na página 1de 8

Capítulo 6 – BANCO DE DADOS

_______________________________________________________________________________________________________________________________________________________

Antes de começarmos de fato com os JOINs, vamos revisar alguns termos


que serão importantes e úteis para compreender melhor o JOIN no SQL.

A chave primária é a coluna que identifica as informações distintas em uma


tabela, geralmente sendo a coluna de ID. Toda tabela possui uma e apenas uma
chave primária, que serve como identificador único. Essa coluna não pode conter
valores repetidos.

A chave estrangeira é uma coluna que permite relacionar as linhas de uma


segunda tabela com a chave primária da primeira tabela.

Na tabela Produto, a coluna id_subcategoria é a chave estrangeira que nos


permite relacionar essa tabela com a tabela Categoria, indicando a qual categoria
cada produto pertence.

1
Capítulo 6 – BANCO DE DADOS
_______________________________________________________________________________________________________________________________________________________

1. O QUE É A CLÁUSULA JOIN NO SQL E PARA QUE SERVE?

A cláusula JOIN no SQL é uma forma de relacionar duas tabelas e gerar uma
tabela resultante com as relações explícitas entre elas. Por exemplo, uma das
operações pode ser simplesmente buscar o que é comum entre as tabelas e
ressaltar isso em um novo conjunto.
Baseia-se fortemente na teoria dos conjuntos. É, aliás, um dos muitos conceitos
da computação que praticamente implementam a base da teoria dos conjuntos.
Suas operações são literalmente as operações de união, subtração e
intersecção da teoria de conjuntos em formas de comando no SQL.

2. COMANDO JOIN

Uma cláusula JOIN em SQL, correspondente a uma operação de junção em


álgebra relacional, combina colunas de uma ou mais tabelas em um banco de dados
relacional. Ela cria um conjunto que pode ser salvo como uma tabela ou usado da
forma como está.
Um JOIN é um meio de combinar colunas de uma (auto-junção) ou mais tabelas,
usando valores comuns a cada uma delas. O SQL padrão ANSI especifica cinco
tipos de JOIN:

• INNER JOIN,
• LEFT JOIN,
• RIGHT JOIN,
• FULL JOIN
• CROSS JOIN.

Em um banco de dados relacional, os dados são distribuídos em várias tabelas


lógicas. Para obter um conjunto completo e significativo de dados, é necessário
consultar dados dessas tabelas usando junções (JOINs).

2
Capítulo 6 – BANCO DE DADOS
_______________________________________________________________________________________________________________________________________________________

3. INNER JOIN

O INNER JOIN traz uma ideia muito intuitiva: a de buscar a intersecção entre as
tabelas (“A ∩ B”). Ou seja, resulta em uma tabela que traz os valores que estão em
ambas as tabelas iniciais.
A cláusula INNER JOIN compara cada linha da tabela A com as linhas da tabela
B para encontrar todos os pares de linhas que satisfazem a condição de junção. Se
a condição de junção for avaliada como TRUE, os valores da coluna das linhas
correspondentes das tabelas A e B serão combinados em uma nova linha e incluídos
no conjunto de resultados

A sintaxe é desenvolvida assim:


SELECT <select_list>
FROM Tabela A
INNER JOIN Tabela B
ON A.Key = B.Key

As letras “A” e “B” são aliases (apelidos) que auxiliam nessa identificação.

3
Capítulo 6 – BANCO DE DADOS
_______________________________________________________________________________________________________________________________________________________

EXERCICIO 1:

create database loja;


use loja;

create table categoria(


id_subcategoria int not null auto_increment,
nome_subcategoria varchar(100) not null,
constraint PK_subcategoria primary key (id_subcategoria)
);

create table produto(


id_produto int not null auto_increment,
nome_produto varchar(100) not null,
id_subcategoria int not null,
constraint PK_produto primary key (id_produto),
constraint FK_produto_categoria foreign key (id_subcategoria)
references categoria (id_subcategoria)
);

select * from categoria;


select * from produto;

insert into categoria values (default, 'Celular');


insert into categoria values (default, 'Notebook');
insert into categoria values (default, 'Camera Digital');
insert into categoria values (default, 'Televisão');
insert into categoria values (default, 'Fone de Ouvido');

insert into produto values (default, 'Fone Bluetooth JBL','5');


insert into produto values (default, 'PS4', '5');
insert into produto values (default, 'Notebook Samsung', '2');
insert into produto values (default, 'iPhone 15', '1');
insert into produto values (default, 'Moto G9', 1);

select *
from produto as a
inner join categoria as b
on a.id_subcategoria = b.id_subcategoria;

select id_produto, nome_produto, nome_subcategoria


from produto as a
inner join categoria as b
on a.id_subcategoria = b.id_subcategoria;

4
Capítulo 6 – BANCO DE DADOS
_______________________________________________________________________________________________________________________________________________________

EXERCICIO 2:

1) Criar banco de dado com nome “dados”.

2) Criar uma tabela no banco de dados “dados” com nome “alunos”

• aln_codigo é PK;
• codigo_endereco não pode ser “not null”. Ao inserir alguns dados não
iremos informar o codigo_endereco;
• codigo_endereco é FK para end_codigo da tabela “endereco”.
• colocar o código de endereço.

3) Criar uma tabela no banco de dados “dados” com o nome “endereço”.

end_codigo é PK.

5
Capítulo 6 – BANCO DE DADOS
_______________________________________________________________________________________________________________________________________________________

EXERCICIO 2: Continuação
create database dados;
use dados;

create table endereco(


end_codigo int not null auto_increment,
rua varchar (100) not null,
numero int not null,
bairro varchar (100) not null,
cidade varchar (100) not null,
estado varchar (100),
constraint PK_end_codigo primary key (end_codigo)
);

create table alunos(


aln_codigo int not null auto_increment,
nome varchar (100)not null,
codigo_endereco int,
constraint PK_aln_codigo primary key (aln_codigo),
constraint FK_alunos_endereco foreign key (codigo_endereco)
references endereco (end_codigo)
);

insert into endereco values (default, 'rua das margaridas', '23', 'jardins', 'Ribeirao Preto', 'SP');
insert into endereco values (default, 'rua das rosas', '40', 'jardins', 'Belo Horizonte', 'MG');
insert into endereco values (default, 'rua das amoreiras', '1086', 'frutal', 'Ribeirao Preto', 'SP');
insert into endereco values (default, 'av. eixão', '1506', 'centro', 'Brasilia', 'DF');

select * from endereco;

insert into alunos values (default, 'Joao Batista', '1');


insert into alunos values (default, 'Joao Batista', '3');
insert into alunos values (default, 'Pedro da Silva', '1');
insert into alunos values (default, 'Maria Souza', '2');
insert into alunos values (default, 'Benedita Filho', null);

select * from alunos;

select *
from alunos as a
inner join endereco as b
on a.codigo_endereco = b.end_codigo;

select *
from alunos as a

6
Capítulo 6 – BANCO DE DADOS
_______________________________________________________________________________________________________________________________________________________

left join endereco as b


on a.codigo_endereco = b.end_codigo;

INNER JOIN

LEFT JOIN

7
Capítulo 6 – BANCO DE DADOS
_______________________________________________________________________________________________________________________________________________________

RIGHT JOIN

Você também pode gostar