JOIN [MySQL] -
kreison - 26.12.2014
JOIN MySQL
Requisitos para entender esse tutorial- Conhecimento bбsico em MySQL
1 - Introduзгo
Nesse tutorial iremos falar sobre uma sintaxe do MySQL usada para combinar resultados de duas (ou mais) tabelas, em apenas uma sу consulta e gerando ъnico resultado.
Isso pode ser usado para economizar querys, deixar as consultas mais eficazes e obter resultados mais completos.
Existem alguns tipos de JOIN, os mais utilizados e que aqui serгo abordados, sгo: INNER JOIN e OUTER JOIN.
Aqui nгo serб apresentado nenhum cуdigo PAWN, porйm 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 combinarem nas duas tabelas.
Vamos a um exemplo prбtico, temos essas duas tabelas e seus respectivos dados:
Vou executar seguinte consulta
Код:
SELECT nome, orgid, lider, sub FROM `jogador` JOIN `orgsinfo` USING (orgid) WHERE `playerid` = 1
Vamos entende-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.
Код:
SELECT nome, orgid, lider, sub FROM `jogador`
Aqui eu indico a tabela que eu deseja fazer o JOIN, nesse caso й a orgsinfo.
Atravйs do USING eu indico qual campo eu desejo associar, nesse caso utilizei o campo orgid, que й comum em ambas tabelas e ira se associar sem problemas.
Um filtro bбsico indicando o id do jogador a ser buscado.
Код:
WHERE `playerid` = 1
E agora vem o resultado:

Como podemos ver, o MySQL associou as informaзхes e nos deu apenas um resultado com base nas duas tabelas. O que seria feito com 2 consultas, foi feita 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:
Код:
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кs podem ver neste caso o campo orgid estб presente em ambas 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 ira 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 tabelas. Existem 3 tipos de OUTER JOIN: LEFT, RIGHT e FULL.
Para exemplificar iremos utilizar essa 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:
Код:
SELECT idproduto, qntd, preco, estoque FROM `vendas` LEFT JOIN `produtos` USING (idproduto)
Como vocкs podem ver, nada muito diferente na sintaxe em relaзгo ao que jб aprendemos nesse tutorial, exceto por esta parte que indica que й um LEFT JOIN
Код:
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 na 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:
Код:
SELECT idproduto, qntd, preco, estoque FROM `vendas` RIGHT JOIN `produtos` USING (idproduto)
Tambйm nada de diferente, apenas aonde indica que й RIGHT JOIN
Код:
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 irei 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 do JOIN como tambйm agrupar eles e obter um resultado mais fбcil de se manejar.
Utilizando a tabela do exemplo anterior, de produtos/vendas, irei fazer o seguinte INNER JOIN:
Код:
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 sу que o campo idproduto nгo foi sу associado, como tambйm foi agrupado com os seus semelhantes e a quantidade dos produtos com o mesmo id foram somadas e assim apresentando um resultado eficaz e limpo.
5 - FIM!
5.1 - Nгo conseguiu entender tudo?
Infelizmente esse assunto as vezes demanda 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 consegui entender melhor, ver exatamente como funciona o JOIN e criar a percepзгo de quando vocк pode utiliza-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. Qualquer erro tambйm que eu tenha cometido em algum conceito ou algo que tenha faltado, й sу dizer que eu arrumo
5.3 - Agradecimentos
Agradecer ao Willian_Luigi e a todo pessoal do grupo SA-MP no Whatsapp.
Obs: Nгo esqueзam de enxer o saco dele pra postar o iCmd :P
5.4 - Links ъteis sobre o assunto
http://www.devmedia.com.br/sql-join-...os-dados/31006 (Algumas imagens desse site foram utilizadas neste tutorial)
http://blog.thiagobelem.net/relacion...elas-no-mysql/
http://dev.mysql.com/doc/refman/5.0/en/join.html
Re: JOIN [MySQL] -
WLSF - 26.12.2014
Genial, sгo mйtodos muito utilizados inclusive em pesquisas de otimizaзгo no ramo de banco de dados com PostgreSQL e etc...
Meus parabйns pelo tutorial, eu li uma boa parte e achei muito interessante.
Abraзos !
Re: JOIN [MySQL] -
PT - 26.12.2014
Vale lembrar que tambйm funciona com SQLite o que vocк tem nos tutoriais ( o que й уptimo ) pois o que esta ensinando й SQL e nгo MySQL em especifico.
Bom trabalho, belo conteъdo.
Re: JOIN [MySQL] -
GM_KoDi - 26.12.2014
Muito bom o tutorial, bem explicado, bem organizado, +REP
Re: JOIN [MySQL] -
RebeloX - 26.12.2014
Por isso que digo que й melhor utilizar MySQL, SQLite ou PostgreSQL do que os sistemas de salvamento .ini, a vantagem й que com SQL dб para manipular os dados de uma forma tremenda e optimizar o cуdigo e o tempo de execuзгo, para alйm disso permite-nos criar menos variбveis, entre outro tipo de coisas. Gostei do tutorial e й sempre bom trazer esse tipo de assunto aqui na board
Re: JOIN [MySQL] -
Dolpin - 26.12.2014
Quote:
Originally Posted by PT
pois o que esta ensinando й SQL e nгo MySQL em especifico.
|
SQL - Linguagem de Consulta Estruturada
MySQL - Sistema de Gerenciamento de Banco de Dados
Nгo se ensina MySQL, se ensina SQL...
@Topic
O Mйtodo que vocк explicou nгo й muito usado, porйm й mais eficiente do que outro mйtodo do tipo.
Muito interessante o que vocк postou, parabйns.
Re: JOIN [MySQL] -
kreison - 26.12.2014
Valeu por todos comentбrios galera!
Quote:
Originally Posted by BlueX
Por isso que digo que й melhor utilizar MySQL, SQLite ou PostgreSQL do que os sistemas de salvamento .ini, a vantagem й que com SQL dб para manipular os dados de uma forma tremenda e optimizar o cуdigo e o tempo de execuзгo, para alйm disso permite-nos criar menos variбveis, entre outro tipo de coisas. Gostei do tutorial e й sempre bom trazer esse tipo de assunto aqui na board 
|
Concordo plenamente ^^
Sу acho que podia ser um pouco melhor a sintaxe do plugin de MySQL, mas realmente й muito melhor que os sistemas .ini
Quote:
Originally Posted by PT
Vale lembrar que tambйm funciona com SQLite o que vocк tem nos tutoriais ( o que й уptimo ) pois o que esta ensinando й SQL e nгo MySQL em especifico.
Bom trabalho, belo conteъdo.
|
Sim, realmente isso pode ser usado em vбrios sistemas SQL. Eu sу coloquei que й MySQL, porque o tutorial й voltado pra ele e em outros sistemas a sintaxe pode ser um pouco diferente ou ter alguns detalhes diferentes (como por exemplo a existкncia de FULL OUTER JOIN, que nгo existe em MySQL).
Quote:
Originally Posted by Dolpin
SQL - Linguagem de Consulta Estruturada
MySQL - Sistema de Gerenciamento de Banco de Dados
Nгo se ensina MySQL, se ensina SQL...
@Topic
O Mйtodo que vocк explicou nгo й muito usado, porйm й mais eficiente do que outro mйtodo do tipo.
Muito interessante o que vocк postou, parabйns.
|
Valeu!
Mas na verdade o mйtodo й bastante usado, sу infelizmente nгo й tгo usado no SA-MP, talvez por falta de conhecimento do pessoal e por ser um uso em menor escala. Porйm em ambientes em que se usam SQL diariamente, com grandes quantidades de dados, й quase obrigatуrio o uso de JOIN.
Re: JOIN [MySQL] -
Schocc - 30.12.2014
Fico feliz em voltar no fуrum e ver um tуpico sobre SQL.
+rep
Re: JOIN [MySQL] -
Dolby - 30.12.2014
Como prometido, li tudo e achei um tutorial de suma importвncia para quem deseja se aprofundar em
SQL.
Confesso que atй hoje nгo cheguei a criar algo a ponto de ser necessбrio usar Join, mas seu tutorial me tirou algumas pequenas dъvidas que eu tinha a respeito, principalmente sobre o
LEFT e o
RIGHT, que foi perfeitamente exemplificado com as imagens dos conjuntos.
Meus parabйns Kleyton, espero mais tutoriais de sua autoria a respeito por aqui.