JOIN MySQL
Requisitos para entender esse tutorial
- Conhecimento básico em MySQL
1 - Introdução
Nesse tutorial vamos falar sobre uma sintaxe do MySQL usada para combinar resultados de duas (ou mais) tabelas, em apenas uma só consulta e gerando um único resultado.
Isso pode ser usado para economizar consultas, deixar as consultas mais eficazes e obter resultados mais completos.
Existem alguns tipos de JOIN, os mais utilizados e que aqui serão pensados, são eles: INNER JOIN e OUTER JOIN.
Aqui não será apresentado nenhum código PAWN, pois os conhecimentos obtidos podem ser utilizados no SA-MP.
2 - INNER JOIN
Esse JOIN, também conhecido como JOIN interno, é provavelmente o mais utilizado. Ele retorna apenas os dados que combinam em duas mesas.
Vamos a um exemplo prático, temos essas duas tabelas e seus respectivos dados:
Vou executar a seguinte consulta
- Código:
SELECT nome, orgid, lider, sub FROM `jogador` JOIN `orgsinfo` USING (orgid) WHERE `playerid` = 1
Vamos entender-la em partes
Até essa parte acredito que esteja tudo bem, selecionei alguns campos da tabela jogador. Mas observe que eu já indiquei campos também da tabela orgsinfo.
Код:Até essa parte acredito que esteja tudo bem, selecionei alguns campos da tabela jogador. Mas observe que eu já indiquei campos também da tabela orgsinfo.
- Código:
SELECT nome, orgid, lider, sub FROM `jogador`
Aqui eu indico a tabela que eu deseja fazer o JOIN, nesse caso é a orgsinfo.
Код:- Código:
JOIN `orgsinfo`
Através do USING eu indico qual campo eu desejo associar, caso utilizei o campo orgid, que é comum em ambas as tabelas e ira se associar sem problemas.
Код:- Código:
USANDO (orgid)
Um filtro básico indicando o id do jogador a ser buscado.
Код:ON
- Código:
[size=14][size=13]DE `playerid` = 1[/size][/size]
[center][/center]
E agora vem o resultado:
Como podemos ver, o MySQL associado a informações e nos deu apenas um resultado com base nas duas tabelas. O que seria feito com 2 consultas, foi feito em apenas uma e com um resultado mais fácil de se utilizar.
3 - USING & ON
No exemplo feito no INNER JOIN nуs utilizamos o USING e acredito que tenha dado para entender bem o seu uso. Porém também é possível indicar condições especificas de associação de dados através do ON, veja como ficaria a mesma consulta anterior usando ON:
Код:Como podemos ver, o MySQL associado a informações e nos deu apenas um resultado com base nas duas tabelas. O que seria feito com 2 consultas, foi feito em apenas uma e com um resultado mais fácil de se utilizar.
3 - USING & ON
No exemplo feito no INNER JOIN nуs utilizamos o USING e acredito que tenha dado para entender bem o seu uso. Porém também é possível indicar condições especificas de associação de dados através do ON, veja como ficaria a mesma consulta anterior usando ON:
- Código:
SELECT nome, o.orgid, lider, sub FROM `jogador` j JOIN `orgsinfo` o ON (j.orgid = o.orgid) WHERE `playerid` = 1
O resultado será o mesmo nesse caso, mas poderia ser diferente caso a condição utilizada fosse outra. Nunca se esqueça de que quando você usa ON é necessário as vezes identificar de qual tabela vem tal campo, pois os campos podem ter o mesmo nome, como você pode ver neste caso o campo orgid está presente em ambas as tabelas e por isso eu identifico de qual tabela eles pertencem na condição do ON.
Vale também ressaltar que não é obrigatório o uso de USING ou ON, caso não seja utilizado nenhum dos dois, o JOIN irá associar automaticamente todos os campos que sejam iguais.
4 - OUTER JOIN (LEFT e RIGHT)
No caso do OUTER JOIN, também conhecido como JOIN externo, não é necessário que os dados sejam combinados em ambas as tabelas. Existem 3 tipos de OUTER JOIN: LEFT, RIGHT e FULL.
Para exemplificar iremos utilizar essas tabelas:
4.1 - LEFT OUTER JOIN
Nesse caso iremos mostrar todos os dados da tabela da esquerda, mesmo que não seja correspondente aos dados da tabela da direita.
Vou executar a seguinte consulta:
Код:Vale também ressaltar que não é obrigatório o uso de USING ou ON, caso não seja utilizado nenhum dos dois, o JOIN irá associar automaticamente todos os campos que sejam iguais.
4 - OUTER JOIN (LEFT e RIGHT)
No caso do OUTER JOIN, também conhecido como JOIN externo, não é necessário que os dados sejam combinados em ambas as tabelas. Existem 3 tipos de OUTER JOIN: LEFT, RIGHT e FULL.
Para exemplificar iremos utilizar essas tabelas:
4.1 - LEFT OUTER JOIN
Nesse caso iremos mostrar todos os dados da tabela da esquerda, mesmo que não seja correspondente aos dados da tabela da direita.
Vou executar a seguinte consulta:
- Código:
SELECT idproduto, qntd, preço, estoque FROM `vendas` LEFT JOIN `produtos` USING (idproduto)
Como vocкs podem ver, nada muito diferente na sintaxe em relao ao que jб acompanhou nesse tutorial, exceto por esta parte que indica que й um LEFT JOIN
Код:- Código:
LEFT JOIN `produtos`
E o resultado é o seguinte:
Como podemos ver, existem campos em que está escrito NULL, pois os dados correspondentes a eles não foram encontrados em outra tabela. Porém como existia tal registro na tabela da esquerda, mesmo não existindo correspondência na da direita, os dados foram retornados.
4.2 - RIGHT OUTER JOIN
Agora executando está consulta:
Код:Como podemos ver, existem campos em que está escrito NULL, pois os dados correspondentes a eles não foram encontrados em outra tabela. Porém como existia tal registro na tabela da esquerda, mesmo não existindo correspondência na da direita, os dados foram retornados.
4.2 - RIGHT OUTER JOIN
Agora executando está consulta:
- Código:
SELECT idproduto, qntd, preço, estoque FROM `vendas` RIGHT JOIN `produtos` USING (idproduto)
Também não tenho nada de diferente, apenas onde indica que é RIGHT JOIN
Код:- Código:
RIGHT JOIN `produtos`
E o resultado é este:
Novamente temos campos com NULL, pelo mesmo motivo da outra vez, porém nessa consulta exibimos todos os resultados da direita e os campos NULL sгo os que nгo foram encontrados na da esquerda.
5 - JOIN com GROUP BY e funções de grupo
Não vão me aprofundar muito nisso, pois pretendo fazer um pequeno tutorial sobre GROUP BY e funções de grupo, porÉm gostaria de deixar um exemplo de como é possível, não só associar dados através de JOIN como também estou agrupando eles e obtendo um resultado mais fácil de se manejar.
Usando a tabela do exemplo anterior, de produtos/vendas, vou fazer o seguinte INNER JOIN:
Код:Novamente temos campos com NULL, pelo mesmo motivo da outra vez, porém nessa consulta exibimos todos os resultados da direita e os campos NULL sгo os que nгo foram encontrados na da esquerda.
5 - JOIN com GROUP BY e funções de grupo
Não vão me aprofundar muito nisso, pois pretendo fazer um pequeno tutorial sobre GROUP BY e funções de grupo, porÉm gostaria de deixar um exemplo de como é possível, não só associar dados através de JOIN como também estou agrupando eles e obtendo um resultado mais fácil de se manejar.
Usando a tabela do exemplo anterior, de produtos/vendas, vou fazer o seguinte INNER JOIN:
- Código:
SELECT idproduto, SUM(qntd) "qntdvendida", SUM(qntd)*preco "precoXqntd", preco, estoque FROM `vendas` JOIN `produtos` USING (idproduto) GROUP
BY idproduto
Veja o resultado:
Veja que não é o campo idproduto não foi associado, como também foi agrupado com os seus semelhantes e a quantidade dos produtos com o mesmo id foram somados e assim apresentando um resultado eficaz e limpo.
5 - FIM!
5.1 - Não consegui entender tudo?
Infelizmente esse assunto as vezes exige prática, por isso tentei mostrar vários exemplos e não me alongar muito.
Entгo tente fazer seus prуprios JOINS, pratique! Assim você ira conseguir entender melhor, ver exatamente como funciona o JOIN e criar uma percepção de quando você pode utilizá-lo para melhorar suas consultas.
5.2 - Sugestões? Erros?
Eu ainda
não sou muito experiente em fazer tutoriais e por isso aceito sugestões de como ser mais didático e etc.
e todo pessoal do grupo SA-MP no Whatsapp.
Creditos: Kreison
Veja que não é o campo idproduto não foi associado, como também foi agrupado com os seus semelhantes e a quantidade dos produtos com o mesmo id foram somados e assim apresentando um resultado eficaz e limpo.
5 - FIM!
5.1 - Não consegui entender tudo?
Infelizmente esse assunto as vezes exige prática, por isso tentei mostrar vários exemplos e não me alongar muito.
Entгo tente fazer seus prуprios JOINS, pratique! Assim você ira conseguir entender melhor, ver exatamente como funciona o JOIN e criar uma percepção de quando você pode utilizá-lo para melhorar suas consultas.
5.2 - Sugestões? Erros?
Eu ainda
não sou muito experiente em fazer tutoriais e por isso aceito sugestões de como ser mais didático e etc.
e todo pessoal do grupo SA-MP no Whatsapp.
Creditos: Kreison