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:
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:
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:
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’;
O comando comentado é:
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';
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;
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.
HARDWARE
Entendendo o seu computador
O que há dentro do meu computador?
Existem alguns componentes fundamentais presentes dentro do seu computador e é muito importante que você conheça um pouco sobre eles, seja para argumentar com algum vendedor durante a compra de um novo PC ou para identificar alguma atitude desleal de algum técnico que esteja te passando um orçamento para reparo. Na seção Raio-X aqui do Contém Bits você pode conhecer e entender mais detalhadamente sobre cada componente, ou também pode clicar abaixo no componente que deseja, para conhecê-lo melhor.
Você Sabia?
Mario e seu bigode
O personagem Mario só possui bigode porque quando ele foi criado, em 1981, a resolução de tela dos equipamentos disponíveis não permitia que fosse desenhada uma boca, então os desenvolvedores fizeram o grande bigode para contornar essa limitação tecnológica.
PC com barulho?
Excesso de barulho dentro do seu gabinete, principalmente logo que você o liga, pode ser sintoma de problemas nas ventoinhas, que podem precisar ser limpas ou trocadas. Entre em contato com um técnico de sua confiança e verifique isso o quanto antes.
Galaxy Game
As primeiras máquinas de fliperama do mundo a utilizarem moedas, chamadas de Galaxy Game, custavam mais de 20 mil dólares para serem produzidas. Saiba mais sobre elas aqui.
Duck Hunt
Ao completar o nível 99 do jogo Duck Hunt, para Nintendo, o jogo retorna ao primeiro nível, mas um bug impede que se acerte os patos neste recomeço. Este é um exemplo do que é chamado no mundo dos games de "Kill Screen".
Nintendo Wii
Nos primeiros oito dias após o lançamento do console Nintendo Wii foram vendidas 600 mil unidades. Isso equivale a quase um por segundo e estes incríveis números são referentes às vendas apenas nos EUA!
Playstation
O Playstation só nasceu porque uma parceria entre Sony e Nintendo, para desenvolver uma unidade de CD para o Super Nintendo, fracassou. Clique aqui e saiba mais.
Space Invaders
O título Space Invaders, lançado em 1980, fez tanto sucesso em todo o mundo que as pessoas compravam o console Atari apenas para poderem jogá-lo em casa. Saiba mais sobre este incrível título clicando aqui.
Nintendo Entertainment System
O console Nintendo Entertainment System (NES), da Nintendo, detém o recorde de videogame mais clonado em todo o mundo. Já foram catalogados mais de 300 aparelhos diferentes capazes de reproduzir seus jogos! Saiba mais sobre ele aqui.
Computadores de 1,5 tonelada
Em 1949 a revista Popular Mechanics fez uma previsão para o futuro, dizendo: "Um dia os computadores pesarão menos do que 1,5 tonelada". E pensar que temos smartphones capazes de realizar milhões de vezes mais operações do que os computadores daquela época.
Pac Man
Apenas no ano de 1982, o clássico Pac Man vendeu mais de 400 mil máquinas de fliperama em todo o mundo e recebeu cerca de 7 bilhões de moedas nestas máquinas. Saiba mais.
Civilization
A empresa Take-Two pagou à Infogrames mais de 22 milhões de dólares pelos direitos de Civilization, em novembro de 1994. Ainda sobre este título, Sid Meier, um dos seus fundadores, é o profissional da área dos games mais premiado em todo o mundo.