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

Xiaomi vende 52,9 milhões de celulares no segundo trimestre de 2021 e faturamento dispara

A gigante chinesa Xiaomi registrou um aumento de quase 85% no seu faturamento no segundo trimestre de 2021 em comparação ao mesmo período do ano passado. A receita divulgada pela empresa foi de 13,5 bilhões de dólares (algo em torno de 70 bilhões de reais) nos meses de abril a junho deste ano...

Ler Notícia Completa

Galaxy S9 e Galaxy S9 Plus receberão atualização de segurança este mês

A Samsung começou a liberar esta semana, para proprietários dos modelos Galaxy S9 e Galaxy S9 Plus, uma nova atualização de segurança. Por enquanto somente alguns países da Europa receberam o pacote, que deve ser dis...

Ler Notícia Completa

Novas câmeras 'debaixo da tela' da Oppo surpreendem

Para muitos, colocar uma câmera embaixo da tela de um celular era uma tarefa impensável, por conta de diversos problemas técnicos. Os primeiros testes da Oppo que se propuseram a isso geravam imagens de qualidade bastante insatisfatória, já que a captação da luz era prejudicada pela tela. A prim...

Ler Notícia Completa

As memórias DDR5 estão chegando e trarão muitas melhorias

A próxima geração de memórias RAM já possui especificações definidas e promete grande melhoria em relação às atuais DDR4. E o mais importante: mesmo com desempenho bastante superior, elas consumirão menos energia. A tensão de trabalho das memórias DDR5 será de apenas 1.1V contra os 1.2V das atu...

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!