Minicursos - MySQL

Inner Join


Os joins são extremamente úteis para a recuperação de informações. Eles permitem interligar tabelas, ou seja, recuperar informações que estão armazenadas em mais de uma tabela em uma única consulta. Este processo só é possível se existir vínculo entre as tabelas, que é o que acontece quando se adiciona uma chave estrangeira em uma tabela, referenciando a chave primária de outra tabela. É um conceito bastante simples. Vamos analisar atentamente a figura abaixo:

Inner Join

Se você observar atentamente verá que as tabelas estão interligadas através das colunas "Modelo". Bem, vou criar essas tabelas na nossa base de dados "Teste" e vamos entender como o Join funciona.

Create table carro(
modelo varchar(40),
cor varchar(20),
qtde_portas int,
combustivel varchar(20),
montadora varchar(20),
primary key(modelo)) Engine=innoDB;

Create table preco(
modelo varchar(40),
valor float,
primary key(modelo),
foreign key(modelo) references carro(modelo)) Engine=InnoDB;

Agora nossa base de dados possui essas duas tabelas, conforme figura abaixo:

Inner Join MySQL

Agora vou inserir os dados conforme a ilustração número 1;

INSERT INTO carro VALUES("Gol I Motion 1.6 MI Total Flex 8V 4P", "Preto", 4, "Flex", "Volkswagen");

INSERT INTO carro VALUES ("Palio Weekend Trekking 1.8 MPI Flex 8V", "Azul", 2, "Flex", "FIAT");

INSERT INTO carro VALUES ("Ka Sport 1.6 8V Flex 2P", "Prata", 2, "Flex", "Ford");

INSERT INTO carro VALUES("Corsa Hat Maxx 1.4 8V ECONOFLEX", "Vermelho", 2, "Flex", "GM");

INSERT INTO carro VALUES ("EDGE LIMITED 3.5 V6 24V AWD Aut.", "Preto", 4, "Gasolina", "Ford");

INSERT INTO carro VALUES ("Jetta 2.0 TSI 16V 4P Tiptronic", "Preto", 4, "Gasolina", "Volkswagen");

INSERT INTO preco VALUES ("Gol I Motion 1.6 MI Total Flex 8V 4P", "36900.00");

INSERT INTO preco VALUES ("Palio Weekend Trekking 1.8 MPI Flex 8V", "44000");

INSERT INTO preco VALUES ("Ka Sport 1.6 8V Flex 2P", "36100");

INSERT INTO preco VALUES ("Corsa Hat Maxx 1.4 8V ECONOFLEX", "31200");

INSERT INTO preco VALUES ("EDGE LIMITED 3.5 V6 24V AWD Aut.", "152500");

INSERT INTO preco VALUES ("Jetta 2.0 TSI 16V 4P Tiptronic", "95000");

Nós temos, na tabela "preço", o valor dos carros referente a cada modelo. Já na tabela "carro" nós temos o modelo, a quantidade de portas, a cor, o combustível e a montadora. No entanto podemos precisar saber qual o preço de todos os carros cujo combustível seja gasolina. Essas informações estão em tabelas separadas, mas que podem ser ligadas através da coluna que elas possuem em comum, que é a coluna "Modelo".

Essa busca de dados interligando mais de uma tabela é, como já foi dito, um Join. Quando precisamos citar mais de uma tabela em nosso comando SQL, devemos dizer qual é a tabela que estamos acessando, em seguida, separado por um ponto, referenciarmos a coluna. Por exemplo: vamos imaginar que tivéssemos uma tabela chamada "aluno" com uma coluna "nome" e uma tabela "escola" com uma coluna "telefone". Se quiséssemos fazer um SELECT exibindo os dados desses dois campos, isso seria feito da seguinte forma:

Inner Join MySQL

Vamos ver como fica o comando que nos mostra quais são os preços dos carros cujo combustível seja a Gasolina, considerando que esses dados estão parte na tabela "carro" e parte na tabela "preco":

SELECT carro.modelo AS Modelo, carro.combustivel AS ‘Combustível’, preco.valor AS ‘Preço’ FROM carro, preco WHERE carro.modelo = preco.modelo AND carro.combustivel like ‘Gasolina’;

Inner Join MySQL

O comando comentado é:

Inner Join MySQL

Vejam que as informações foram cruzadas corretamente e conseguimos montar o que parece ser uma única tabela, mas contendo os dados de tabelas distintas. A essa ligação entre tabelas em que se usa como referência a chave primária de uma e a chave estrangeira de outra, chamamos Inner Join.

O MySQL, assim como outros grandes SGBDs, aceita que você use esse rótulo para realizar suas consultas, em vez de utilizar o parâmetro WHERE, da seguinte forma:

SELECT carro.modelo AS Modelo, combustivel AS 'Combustível', valor AS 'Preço' FROM carro INNER JOIN preco ON carro.modelo = preco.modelo AND carro.combus tivel LIKE 'Gasolina';

Inner Join MySQL

Vejam que no lugar de WHERE eu utilizei o termo INNER JOIN e, com o parâmetro ON, especifiquei quais campos seriam comparados.

Observação!

Assim como nos comandos UPDATE e DELETE é fundamental que você especifique quais tuplas devem ser alvo do seu comando, nos Joins isso também é muito importante. Caso você não especifique, o SGDB fará o produto cartesiano das tabelas envolvidas, retornando dados que provavelmente não terão utilidade para você. Vejam o retorno do seguinte comando:

SELECT carro.modelo AS Modelo, carro.combustivel AS 'Combustível', preco.valor AS 'Preço' FROM carro, preco;

Inner Join MySQL

Vejam que o sistema nos retornou 36 tuplas, que é o produto das 6 tuplas da tabela "carro" com as 6 da tabela "preco". Notem que existem informações absurdas nesse retorno, já que um mesmo carro tem 6 preços diferentes. A esse produto cartesiano entre as tabelas, damos o nome de Cross Join. Ou seja, sempre que não quiser o produto entre todos os itens das tabelas, o que deve acontecer na maioria esmagadora dos casos, lembre sempre de sempre utilizar o parâmetro WHERE para especificar os campos que devem ser igualados.

É isso! O temido assunto Join nada mais é do que o cruzamento de dados de mais de uma tabela! Aqui vimos o Inner e o Cross, mas existem outros tipos, que veremos na sequência.




Notícias - Games

Atari VCS é finalmente lançado e surpreende

O Atari VCS foi lançado recentemente e trouxe suporte a praticamente todos os serviços de streaming de jogos já disponíveis. A única exceção foi por conta do Playstation Now, cujo suporte nativo não é oferecido, mas ele pode ser acessado através do modo PC do VCS, já que o console possui Googl...

Ler Notícia Completa

Conheça o Playstation 2 portátil criado por um brasileiro

Claudio Adriano decidiu criar uma versão portátil do console Playstation 2, da Sony. Inspirado no Nintendo Switch, o console ficou pronto depois de 2 anos de trabalho e algumas interessantes adaptações. Partindo de uma placa-mãe de um PS2 Slim, Claudio fez os encaixes necessários para que a pla...

Ler Notícia Completa

PS5 com SSDs não originais apresentam ótimo resultado

A última atualização do PS5 permite que se faça a expansão do armazenamento do console. Embora o aparelho exija características específicas para os dispositivos de expansão, como taxa de leitura de 5Gb/s, ele funciona surpreendentemente bem com SSDs de velocidades inferi...

Ler Notícia Completa

Capcom Pro Tour sofre o cancelamento de algumas etapas por conta do coronavírus

Em um comunicado ao público via redes sociais, a Capcom revelou que algumas etapas do Capcom Pro Tour foram removidas do calendário como precaução contra o surto de coronavírus pelo mundo...

Ler Notícia Completa

Conheça o Stadia: a incrível plataforma de streaming de games do Google

O Google deu o pontapé inicial para o que espera ser o futuro dos videogames: consoles e hardware em geral ficam em segundo plano, e os games rodam em qualquer dispositivo via streaming. A plataforma Stadia promete levar jogos para notebooks, TVs, celulares e muito mais. O projeto do Google se...

Ler Notícia Completa

Anúncios pornográficos eram exibidos em jogos infantis da Google Play Store devido a um bug

Um app malicioso foi responsável por fazer com que cerca de 60 jogos publicados na Google Play Store veiculassem anúncios pornográficos. Entre os aplicativos estão games infantis e títulos baixados mais um milhão de vezes na loja online da Google. O problema foi flagrado pela empresa de seguran...

Ler Notícia Completa

Sim, jogadores profissionais de games podem ter carteira assinada.

Com a profissionalização dos jogadores de games, quem escolhe viver da habilidade no mouse, teclado ou joystick tem direito a carteira assinada e aos benefícios de atletas e de outros profissionais? Sim. É o que pensam advogados especializados em direito desportivo que estavam na Campus Party 20...

Ler Notícia Completa

Segunda temporada de Castlevania chegará no segundo semestre

Para quem ficou na vontade após apenas 4 episódios, a segunda temporada da série animada de "Castlevania" deve ser lançada no meio de 2018 na Netflix. A informação foi divulgada pelo roteirista da série, Warren Ellis, por meio de sua conta oficial no Twitter. O escritor também confirmou que esta...

Ler Notícia Completa
Ajude o Contém Bits com um cafezinho!

Se você gostou do artigo, se ele lhe foi útil de alguma maneira e você quiser ajudar o Contém Bits, saiba que é simples, fácil e rápido. Basta clicar na imagem do PayPal (ou no cafezinho) e seguir as instruções, em ambiente seguro e com o respaldo do Paypal. Eu agradeço muito! :)


Você gostará destes vídeos!