INNER JOIN – SQL

Mudando um pouco de ares, irei falar de SQL (Structured Query Language) tem várias funções que vão da mais básica (INSERT, SELECT, …) até avançada (Stored de procedure), nesse post irei falar de um em que se ouve muito falar, apresento-lhe INNER JOIN. Vou considerar que você tenha alguma noção de SQL.

INNER JOIN

Em muitos casos, você poderá precisar apresentar um resultado o qual não está em apenas uma tabela, então você utiliza o INNER JOIN para fazer esse relacionamento das tabelas, fazendo da seguinte forma, como você sabe, ou deveria saber, quando duas tabelas estão interligadas, de alguma forma, precisa-se de um campo comum entre ambas (chave estrangeira).

Por exemplo:

Tenho uma escola com várias unidades e criei uma secretaria virtual. Nessa secretaria virtual, tenho os alunos cadastrados, porém eu preciso saber qual é a unidade em que esse aluno estuda. Possuímos aqui pelo menos duas tabelas, Aluno e Unidade, onde o relacionamento é um-para-muitos, porque um aluno só pode estar matriculado em uma unidade, porém uma unidade possui vários alunos. Eles se relacionam da seguinte forma, a tabela aluno tem um campo que se relaciona diretamente com o campo do código da unidade na tabela unidade, não sendo obrigatório os dois campos terem o mesmo nome, sendo apenas obrigatório os dois terem o mesmo tipo, se você não conhece SQL pode parecer complicado, mas posso assegurar-lhe que não é.

É nesse caso, em que o INNER JOIN vai ser usado, Veja:

$SQL = "SELECT Aluno.nome, Unidade.unidade";
Seleciona o campo nome da tabela aluno e campo unidade da tabela unidade

$SQL .= " FROM Aluno";
A origem é a tabela Aluno. Isso significa que a tabela Aluno é o lado UM de um relacionamento, e com isso, A pesquisa é feita mais rápida;Você poderia colocar a tabela Unidade como origem.

$SQL .= " INNER JOIN Unidade";
A tabela Aluno será ligada a tabela Unidade.

$SQL .= " ON Aluno.cod_unidade = Unidade.cod_unidade";
Faz-se aqui o relacionamento das tabelas.

$SQL .= " ORDER BY Aluno.Nome";
Coloquei que a pesquisa vai ser exibido na ordem alfabética dos nomes dos alunos.

Ps.: Fiz essa pesquisa com o php, por isso está lá um .=, pois isso no php significa que estou concatenando a string SQL.

*Foi um exemplo simples, claro que nesse exemplo precisaria de mais tabelas.

Junto com o INNER JOIN, existem ainda o LEFT JOIN e o RIGHT JOIN, que funcionam de maneira semelhante. O INNER JOIN, faz o relacionamento entre duas tabelas e depois exibe o que está nas duas tabelas do relacionamento indicado, já o LEFT JOIN faz a mesma coisa, porém retorna os dados de acordo com a tabela da esquerda (a primeira tabela que foi declarada), independente se no relacionamento com a tabela da direita não possuir o valor do campo de relacionamento e o RIGHT JOIN, dou-lhe uma bala juquinha se você acertar…

Exatamente o que você pensou, faz o mesmo que o LEFT JOIN, porém retorna os dados de acordo com a tabela da direita (a segunda tabela que foi declarada), independente se no relacionamento com a tabela da esquerda não possuir o valor do campo de relacionamento.
Com isso despeço-me, até a próxima

UPDATE:
Percebi que muita gente ainda vem nesse link, mas gostaria de informar que não sou mais desse blog me mudei para outro Coisas de Web e inclusive desse post , dá uma passadinha lá e se puder comente é muito bom receber um comentário. 🙂
Fuiii…

53 Responses to INNER JOIN – SQL

  1. ramon disse:

    Se você não tiver noção de SQL, deixa seu comentário, pulei essa parte, porque o post iria ficar muito grande

  2. Israel disse:

    Bom texto…
    Posta isso na wikipedia! rs
    vlw!

  3. ramon disse:

    Obrigado pelo elogio…
    Um dia vou chegar a esse ponto de colocar algo lá. rs

  4. fabio t s disse:

    Ei valeu pela dica ……
    mais esse inner join e muito comblexo mais valu!!!

  5. ramon disse:

    Olá Fábio,
    Muito obrigado pelo comentário, mas posso assegurar-lhe que INNER JOIN é mais simples do que parece. Se ficou dúvidas, exponha aqui, não fique acanhado. Dependendo da sua dúvida, posso até fazer um post, a sua dúvida pode ser a de muitos outros.

    fuiii…

  6. danilow disse:

    Cara, Parabéns pelo tutorial.
    Me ajudou bastante!!
    A Primeira pesquisa que consegui fazer com INNER JOIN foi com base nesse seu tutorial.

    Valeu
    Até Mais.

    Danilo

  7. ramon disse:

    Obrigado Danilo,

    é muito bom saber disso, espero que consiga encontrar mais conteúdo útil nesse blog.

    fuiii…

  8. Wagner disse:

    Olá pessoal – eu gostaria de esturar mais a fundo SQL, e me tornar um profissional em SQL. Gostaria de dicas sobre material etc.

    desde já
    Obrigado.

    Acessem e concorra a milhares de reais –
    http://www.iupimania.com.br

    Confira a promoção IUPI MANIA AJUNDANDO A SUA SORTE!

  9. ramon disse:

    Eu aconselharia, antes de começar com SQL, aprenda modelagem de dados, pois lá tem todo o conceito necessário para as queries que irá fazer. De fato, aprender modelagem de dado, é um saco, mas tem esforços que precisam ser feitos ;).

    fuiii…

  10. Junior disse:

    Muito, tenho uma duvida, tenho 2 tbl, uma de noticias e a outra de artigos, preciso fazer um select que busque os resultados nas duas tabelas, para isso preciso utilizar o INNER JOIN, creio.

    Sql = “Select * Tbl_noti INNER JOIN Tbl_mate WHERE titulo LIKE ‘%”&busca&”%’ ORDER BY titulo ”

    Eu posso fazer isso, quais são os erros apresentados…

    Obrigado.!

  11. ramon disse:

    Olá Junior,
    A sintaxe desse select está incorreta, mas antes de utilizar o INNER JOIN você tem que saber como essas duas tabelas se relacionam e depois utiliza-lo. Esqueceu também da clausula FROM. Fale-me como essas duas tabelas se relacionam para ajudá-lo. Mas vou deixar um modelo depois você adequa a sua necessidade:

    Sql = “SELECT * FROM Tbl_noti INNER JOIN Tbl_mate ON Tbl_noti.cmp_rela = Tbl_mate.cmp_rela WHERE titulo LIKE ‘%”&busca&”%’ ORDER BY titulo ”

    * Sabendo-se que cmp_rela, significa campo de relacionamento entre as duas tabelas, isso se elas se relacionarem diretamente, se não relacionarem diretamente, vai dar um pouquinho mais de trabalho.

    Qualquer dúvida, exponha.

    abs.

    fuiii…

  12. micox disse:

    Rapá, agora que o blog me conquistou vc vai mudar ele?
    Passa o novo endereço aí: micoxjcg ARRB yahoo PT com PT br

  13. ramon disse:

    Muito legal q você gostou, quer dizer q eu não estou ão mal assim,
    pode deixar que eu vou te mandar o novo endereço, estou nos retoques finais para colocar no ar. ;).

    fuiii…

  14. Marcelo disse:

    Minha duvida eh sobre uma tabela consultar 2 vezes em outra. Assim Tabela Produtos e tabela grupos, a tabela produtos tem dois campos de grupos produtos.grupo01 e produtos.grupo02, preciso ver o nome (descriçao) do grupo.
    Tipo assim :
    Descricao do produto, descricao grupo01 e descricao grupo02.

  15. ramon disse:

    Olá Marcelo,
    Não estou mais nesse blog, estou respondendo a essa pergunta nesse link ok

    http://coisasdeweb.blogspot.com/search?q=inner+join

  16. […] = on] Outro dia estava vendo que o número de visitação para um post que fiz em relação à INNER JOIN ai fui procurar no google por INNER JOIN e qual não foi a minha surpresa o meu post estava em […]

  17. Bom artigo! 😉

    Parabéns!

    Quero ver coisas sobre DOTNET tb! 🙂

  18. Joaz disse:

    Parabens pelo post!

  19. André Monari disse:

    Parabéns pelo seu post, muito bom encontrar pessoas que ajudam as outras.
    Gostaria de tirar uma duvida minha, estou quebrando a cabeça faz alguns dias.
    Tenho uma tabela Editoras e outra Livros nessa tem relacionamento com a Editoras no campo CodEditora, no programa montei uma combo com os Nomes das editoras, o problema é que quando busco na tabela Livros eu encotro o CodEditoras e nao o nome para aparecer na combo gostaria de saber como monto esse comando SQL correspondente.Desde de ja agradeço.

  20. ramon disse:

    Obrigado André.

    Bom, quanto à sua pergunta, existe um ponto que deve ser levado em consideração:

    . Se você quer apenas uma lista de editoras, vc não precisa fazer um relacionamento entre a tabela livro e editora, mas se vc por algum motivo precisa mesmo desse relacionamento, aqui vai.

    Irei, montar dois SQL’s que fazem a mesma coisa, só que um com INNER JOIN e outro fazendo a restrição pelo WHERE, mostrarei os dois, pois não sei qual é o mais fácil para você entender:

    SQL com WHERE:
    SELECT codEditora, nomeEditora FROM editora, livro WHERE editora.codEditora = livro.codEditora ORDER BY nomeEditora

    SQL com INNER JOIN:
    SELECT codEditora, nomeEditora FROM editora INNER JOIN livro ON editora.codEditora = livro.codEditora ORDER BY nomeEditora

    É disso que você precisa?

    ps: Por padrão utilizo a sintaxe SQL em maiúsculo, porém não é necessário.

  21. Junior disse:

    Olá.
    Muito boa a explicação. Simples e direta. Parabéns…quero minha bala Junquinha!kkk

    Mas agora falando sério, você poderia postar mais coisas relacionadas a BD!
    é muito interessante!….

    abraços!

  22. José Carlos Fonseca disse:

    Olá, estou tentando fazer uma pesquisa em PHP com o seguinte codigo:

    SELECT
    utilizadores.user_num,
    tipo_users.designacao
    FROM utilizadores
    INNER JOIN tipo_users ON utilizadores.user_tipo = tipo_users.id_tipouser
    WHERE utilizadores.user_num = 200420 AND utilizadores.user_senha = 200420.

    No Mysql Query Browser funciona direitinho , mas no PHP não. Alguém me ajuda.

    Obrigado.

    José Carlos Fonseca
    Fafe – Portugal

  23. ramon disse:

    Junior,
    Obrigado ai pelo apoio, estou pensando mesmo em fazer mais posts relacionado à bd, mas de qualquer forma não posto mais aqui, só lá no coisas de web, quando puder dá uma passada lá,

    abs

  24. ramon disse:

    José Carlos,
    mande-me esse pedaço do código PHP, pois o problema deve ser alguma concatenação de string, ou alguma variável com valor errado, porque o SQL, como vc mesmo disse, está correto.

    abs

  25. Guilherme disse:

    Muito bom o texto, bem explicado!

    Obrigado.

  26. Pedro disse:

    Boas pessoal.

    Tenho um grande problema ao qual não consigo resolver nem encontrar solução.
    Tenho de fazer um select a uma só tabela que tem uma chave estrangeira de outra tabela. Ao fazer o select consigo juntar os dados que têm a chave estrangeira, mas preciso também que ele liste os dados que têm ‘0’ como o id da chave estrangeira, para que o user saiba que aquele registo ainda tem de ser ligado à outra tabela…

    Aqui o sql que vai buscar os que tao ligados a 2ª tabela : “select * from Tarea inner join Tpasta on Tpasta.idpasta=Tarea.idpasta”.

    Agora falta a parte de buscar os valores a 1ª tabela que não estajam ligadas a 2ª tabela…

    Obrigado

  27. Nina disse:

    ola..podes me tirar uma duvida…tenho 2 tabelas k sao relacionadas numa terceira tabela…so k preciso apresentar esses valores num ecrã, mas n como id mas sim como nome que estão ns outras tabelas( na tabel relacionamento temos os ids das duas tabelas)…pode ajudar-me?terei k usar o inner join???o trab é em php e mysql.obg

  28. Gerson disse:

    Ola, não sei se estou fazendo certo, acredito que não, pois esta dando erro.
    Preciso relacionar a tabela usuario com a tabela de itens, para que somente o usuario daquele item possa incluir e ou alterar, esta assim :

    $link = mysql_connect($dbhost, $dbuser, $dbpass);
    $query = mysql_query(“SELECT $dbcfg.dealer, $dbvin.agencia FROM $dbcfg INNER JOIN $dbvin ON $dbcfg.dealer=$dbvin.agencia”);
    $result = mysql_db_query($dbname, $query, $link);
    if( $dealer $agencia ){
    echo ” alert(‘Esta nao e sua Agencia.’); “;
    echo “window.location=’controle.php'”;
    } else {
    $link = mysql_connect($dbhost, $dbuser, $dbpass);
    $query = “INSERT INTO $dbvin VALUES ……..

    Não ocorre o bloqueio do cadastro ….

  29. Hernani disse:

    ola, pessoal comecei um curso de sql, (meu amigo esta dando o curso na empresa em que trabalho) e o tema de hoje é esplicar para os demais alunos como funciona o “inner join”
    quero diser que estas esplicações estão sendo uteis
    obrigado.

  30. Ramon disse:

    Valeu meu amigo é sempre bom saber que estou ajudando.

    Fuiii…

  31. Wender disse:

    Vlw brother, muito bom!

  32. Marcelo Carvalho disse:

    valeeeeeuuu

  33. Edinaldo disse:

    Muito bom , ajudou bastante

  34. yoda disse:

    cara sei que muita gente entende e eu entendir mais por alto o que não entendir e que quando vou exibir na pagina não sai nada,

    o codigo é esse:
    <?php
    mysql_connect(“localhost”, “root”,””);
    mysql_select_db(“teste_soma”);

    $comand=mysql_query (“SELECT edivan.nivel_1,maria.nivel_2 FROM edivan
    INNER JOIN maria ON edivan.nivel_1 = mairia.nivel_2”);

    dair queria saber o resto do codigo q

  35. yoda disse:

    para exibir na pagina…
    como faço?

  36. zaraki kenpachi disse:

    simplesmente otimo!!!

    agora entendi o inner join

  37. metal disse:

    Até hj ajudando
    Vlw Fera

  38. Grazi disse:

    Muito legal as suas informações, tem como me enviar um exemplo usando 4 tabelas, estou com esta dificuldade.

  39. Leandro disse:

    Vlw muito bom… essa informação era o que eu estava procurando vlw cara até hj seu topico ta quebrando o galho da galera ^^

  40. luizinhoab disse:

    ae tem um avatar destes automáticos que é nazista olhe a suastica no jose carlos fonseca

  41. Leandro disse:

    Parabens pelo tutorial.Salvou meu emprego nota 10 pra vcs.

  42. Fabio Henrique disse:

    Amigo como eu faço pra dar o comando inner join quer pegar uma tabela movimentos produtos e outra tabelas de grupo e subgrupo

    desde já agradeço ai o espaço

    • Ramon disse:

      Olá Fábio,
      o seu exemplo não entendi muito bem, mas se entre essas tabelas houver algum relacionamento é só usar o INNER JOIN, usando as chaves de interligação entre elas.

      fui…

  43. Jefferson disse:

    Ótima explicação ajudou muito. Obrigado

  44. Alexsandro disse:

    Você iluminou o meu caminho! Obrigado!

  45. Jandrey Schmidt disse:

    No caso ali, ele vai listar todos os alunos que estão naquela unidade, certo?

  46. Daniel disse:

    Ótima explicação sobre Inner Join

  47. Aline Branco disse:

    Parabens pelo comentário Ramon!!

  48. michael roberto moreira disse:

    muito bom o artigo,mas tenho um duvida,tenho duas tabela uma é “x”e e a outra é “y”,quero ajuntar essas tabelas,mas a “x”tem um cod_nome, e a “y” tem um nome,então como faço para ajuntar as duas tabelas,sendo seus atributos sendo diferente.
    obrigado se poder me ajudar ;
    vlw

Deixar mensagem para metal Cancelar resposta