Minicursos - MySQL

Outer Join


Agora vou falar sobre o Outer Join, que não é muito diferente do Inner, aliás, digo que ele o complementa. Como vimos, o Inner faz o cruzamento dos dados de várias tabelas, mas ele só exibe resultados que possuam valor correspondente em todas elas.

Essa á uma daquelas situações mais fáceis de demonstrar do que explicar. Vamos imaginar que nossa pequena loja que revende carros tenha recebido alguns modelos, portanto já os tenha cadastrado na tabela "carro", mas ainda não tenha tido tempo de calcular seu preço de venda, portanto eles não possuem cadastro na tabela "preco".

Foram recebidos os carros cujos dados foram inseridos na tabela "carro" da seguinte forma:

INSERT INTO carro VALUES ("Grand Cherokee SRT8 6.1 V8 16V 432cv", "Branca", 4, "Gasolina", "Jeep");

INSERT INTO carro VALUES ("ASX 2.0 16V 4x4 160cv Aut.", "Branca", 4, "Gasolina", "Mitsubishi");

Muito bem, os dois novos carros adicionados possuem a "Gasolina" cadastrada como combustível. Vamos agora tentar repetir o comando que executamos no tópico anterior, para vermos todos os preços dos carros com esse tipo de combustível:

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’;

Outer Join MySQL

Vejam que o retorno não incluiu os novos carros cadastrados no sistema, pois eles estão presentes somente na tabela "carro" e não na tabela "preco".

O OUTER JOIN serve para forçar a exibição de todos os itens cadastrados, mesmo que não exista a correspondência em todas as tabelas.

Existem dois tipos de OUTER JOIN, que são o LEFT JOIN e o RIGHT JOIN. Vou demonstrar suas diferenças. Vamos começar com um exemplo que utiliza o LEFT JOIN.

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

Vejam o retorno:

Outer Join MySQL

Mesmo com dados não cadastrados na tabela "preco", os dados são exibidos e os carros ASX e Grand Cherokee aparecem na relação.

Ou seja, conforme citei no início do tópico, o OUTER JOIN permite exibir dados mesmo que não existam correspondentes em todas as tabelas. Agora vamos entender as diferenças entre o LEFT JOIN e o RIGHT JOIN.

No comando acima usamos o LEFT JOIN e os dados exibidos estavam de acordo com o que queríamos, que era exibir todos os carros cadastrados, mesmo que não tivessem preço correspondente.

Vamos executar o mesmo comando, mas trocando o LEFT pelo RIGHT.

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

Outer Join MySQL

Vejam que agora os dados nulos foram omitidos, deixando nosso resultado semelhante a um INNER JOIN.

O comando LEFT JOIN estava dizendo ao SGBD o seguinte:

Exiba todos os resultados da tabela da esquerda e os que possuírem correspondentes à direita.

Outer Join MySQL

Já o comando RIGHT JOIN estava dizendo para exibir todos os resultados da tabela da direita e os que possuírem correspondentes na tabela da esquerda. Como na tabela da direita, que era a tabela "preco", tínhamos apenas os 6 carros cadastrados com preço, os veículos ASX e Grand Cherokee foram omitidos. Você pode testar utilizando o RIGHT JOIN e invertendo as tabelas "preco" e "carro", fazendo com que a tabela "carro" passe a ficar do lado direito. Isso exibiria todos os resultados, inclusive dos carros não cadastrados na tabela preco. Vamos testar!

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

Vejamos o retorno dessa consulta:

Outer Join MySQL

Vejam que novamente os resultados foram exibidos incluindo os carros que não possuem preco cadastrado. Joins são simples!

Com isso encerramos a parte do OUTER JOIN.




Algumas notícias

O que acontece com o cérebro no exato momento em que morremos

O que passa em nossa cabeça no momento da morte? Não se sabe exatamente e, embora os cientistas tenham alguma resposta, a resposta continua sendo um grande mistério. Além de difícil solução, tentar respondê-la pode criar implicações éticas. No entanto, uma equipe de cientistas da Universidade...

Ler Notícia Completa

Operada e devolvida ao útero, menina que nasceu duas vezes hoje 'acorda sorrindo toda manhã'

Um bebê pode nascer duas vezes? Não é o caso da absoluta maioria das crianças, mas foi assim para a pequena Lynlee Boemer. Em outubro de 2015, sua mãe, Margaret Boemer, descobriu que estava grávida de gêmeos. Ela sofreu um aborto espontâneo, mas um dos bebês sobreviveu. Com dez semanas de ges...

Ler Notícia Completa

Médicos dizem estar perto de chegar a exame de sangue para todos os tipos de câncer

Cientistas dizem que estão mais perto de criar um exame de sangue universal, capaz de identificar todos os tipos de câncer. Estudo conduzido com 1.005 pacientes por uma equipe da Universidade Johns Hopkins, dos Estados Unidos, testou um método que detecta oito tipos de proteínas e 16 mutações ge...

Ler Notícia Completa

Formato JPEG está com os dias contados

Há quantos anos você ouve falar em arquivos JPG? O formato já era utilizado nos primórdios da web comercial nos anos 1990, vivendo há mais de 20 anos como o principal método de compressão de imagens do público. No que depender de Google, Mozilla e outras empresas, isso pode mudar dentro de algum...

Ler Notícia Completa
Você gostará destes vídeos: