MySQL – INNER JOIN – Consultar dados em duas ou mais Tabelas relacionadas
INNER JOIN – Consultar dados em duas ou mais Tabelas no MySQL
JOINS
A cláusula JOIN é usada para combinar dados provenientes de duas ou mais tabelas do banco de dados, baseado em um relacionamento entre colunas destas tabelas. há duas categorias principais de joins:
-
- INNER JOIN: Retorna linhas (registros) quando houver pelo menos uma correspondência em ambas as tabelas.
- OUTER JOIN: Retorna linhas (registros) mesmo quando não houver ao menos uma correspondência em uma das tabelas (ou ambas). O OUTER JOIN divide-se em LEFT JOIN, RIGHT JOIN e FULL JOIN.
Nesta aula vamos estudar especificamente a cláusula INNER JOIN
INNER JOIN
Como dito, um INNER JOIN (ou simplesmente JOIN) permite obter registros com dados provenientes de duas ou mais tabelas relacionadas do banco de dados no MySQL. A sintaxe básica de um INNER JOIN em uma consulta é:
SELECT colunas
FROM tabela1
INNER JOIN tabela2
ON tabela1.coluna=tabela2.coluna;
Onde tabela1.coluna é o nome da primeira tabela concatenado com um ponto e com o nome da coluna chave primária ou estrangeira da tabela, e tabela2.coluna é o nome da segunda tabela concatenado com um ponto e com a chave estrangeira ou primária dessa tabela que se relaciona com a chave da primeira tabela.
Vejamos um exemplo. Vamos consultar as tabelas de livros e autores (tbl_livro e tbl_autores) e retornar os dados relativos aos livros e aos autores ao mesmo tempo:
SELECT * FROM tbl_Livro INNER JOIN tbl_autores ON tbl_Livro.ID_Autor = tbl_autores.ID_Autor;
Vejamos outro exemplo. Faremos a consulta nas tabelas de livros e autores, porém retornando apenas os nomes dos livros, seus ISBNs e os nomes dos autores desses livros. Note que as duas primeiras informações estão na tabela de livros, e o nome do autor está somente na tabela de autores. O que as liga é o relacionamento entre as colunas ID_Autor existentes nas tabelas – é chave primária na tabela de autores e estrangeira na de livros:
SELECT tbl_Livro.Nome_Livro, tbl_Livro.ISBN, tbl_autores.Nome_Autor FROM tbl_Livro INNER JOIN tbl_autores ON tbl_Livro.ID_Autor = tbl_autores.ID_Autor;
Mais um exemplo, agora com filtros. Vamos retornar os nomes dos livros e nomes das editoras, mas somente das editoras cujo nome se inicia com a letra M. Note o uso de aliases nestas declarações, a fim de simplificar o código:
SELECT L.Nome_Livro AS Livros, E.Nome_editora AS Editoras FROM tbl_Livro AS L INNER JOIN tbl_editoras AS E ON L.ID_editora = E.ID_editora WHERE E.Nome_Editora LIKE 'M%';
Mais um exemplo para terminar. Agora vamos fazer um INNER JOIN com as três tabelas do banco de dados simultaneamente. Queremos os nomes e preços dos livros, nomes de seus autores e editoras, mas somente das editoras cujo nome se inicia com a letra O, tudo isso ordenado em ordem decrescente de preço dos livros:
SELECT L.Nome_Livro AS Livro, A.Nome_autor AS Autor, E.Nome_Editora AS Editora, L.Preco_Livro AS 'Preço do Livro' FROM tbl_Livro AS L INNER JOIN tbl_autores AS A ON L.ID_autor = A.ID_autor INNER JOIN tbl_editoras AS E ON L.ID_editora = E.ID_editora WHERE E.Nome_Editora LIKE 'O%' ORDER BY L.Preco_Livro DESC;
Neste exemplo fazemos o join entre a tabela de livros e a de autores, e logo em seguida entra a tabela de livros e a de editoras, pois os relacionamentos se dão entre essas tabelas. Também ordenamos os resultados por ordem decrescente dos preços dos livros.
Muito bem! Na próxima aula vamos falar de OUTER JOINS. Enquanto isso, assista a um vídeo com as explicações sobre INNER JOINS no MySQL:
vlw sangue bom
Muito bom explicativo. Parabéns pelo site.
Muito obrigado!
Boa noite Fábio primeiramente gostaria de agradecer pelo excelente trabalho que voce tem realizado, eu mesmo já realizei dois cursos aqui de mysql e logica de programação já faz um tempo. Só tenho a agradecer. Gostaria que se voce pudesse me sanar um dúvida de JOINS no mysql estou com um problema e não consigo resolver. Por exemplo tenho três tabelas, a saber, tbl_estado(cod_estadonome,sigla) tbl_cidade(cod_cidade,nome,cod_estado) e uma tabela tbl_endereco(cod_endereco,rua,numero,cep,bairro,cod_cidade) como faço para trazer, a partir da tabela endereco, as colunas da tabela estado que é chave estrangeira da tabela cidade? Não consigo, só funciona se eu colocar na tabela endereco as chaves estrangeiras de cidade e estado
adorei o site e estou aprendendo muito com vc.
gostaria de saber como posso mesclar a função count(expressão) e inner join.
parabens pelo seu trabalho.
Me salvou com sua explicação e exemplo de uso do “inner join” Fábio!!! Muito obrigado mesmo e parabéns!!
Muito obrigado Stuart!
Tenho duvida de como fazer um SELECT 3 tabelas, a,b,c onde a tabela ‘a’ não está relacionada com ‘c’ apenas com ‘b’.
a realaciona com b
b realciona com c
mas preciso dos dados de a e c.
Resposta ao Marcelo :
“Tenho duvida de como fazer um SELECT 3 tabelas, a,b,c onde a tabela ‘a’ não está relacionada com ‘c’ apenas com ‘b’.
a realaciona com b
b realciona com c
mas preciso dos dados de a e c.”
SELECT a.nome, c.banco FROM tabela_a AS a
INNER JOIN tabela_b AS b
ON b.id = a.id
INNER JOIN tabela_c AS c
ON b.id = c.id
WHERE a.nome = ‘busca’
Parabéns pela didática e pela boa vontade em publicar estes ensinamentos. Toda comunidade agradece. Me ajudou mto…
Muito obrigado Marcelo!
Parabéns pelo seu trabalho, suas aulas já me ajudaram muito.
Obrigado Itamar!
Estou com dificuldade de receber organizado as informações de duas tabelas distintas “session” e “production” vinda do banco de dados para a (table “html”), as informações ficam duplicadas nas (tr), gostaria de receber os dados no lugar adequado, pode me ajudar?
Meu codigo
Considere a sintaxe correta Ok:
SQL
“SELECT * FROM Session S”
“INNER JOIN production P”
“ON S.id_session = P.id_session”
HTML/PHP
{foreach from=SESSION item=S}
{S.sn_name}
{S.prod_qtd}
{S.prod_date}
{\foreach}
Já tentei fazer um foreach só para a TD também!
Nossa vc me salvou. Estava há horas rodando a internete toda buscando como fazer uma pesquisa específica em um campo dentro de um INNER JOIN. Tava ficando doidao ja kkkkk. Site completo de vcs curti demais
Muito obrigado!!!
salvou demais obrigado
Bom dia
Estava a muito tempo tentando conectar duas tabelas, mas agora funciona só que não satisfez porque
Eu estou relacionando duas uma do cliente e a outra dos serviços
Só está aparecer os clientes que já têm serviços e eu preciso que na mesma tabela apareça clientes que foram cadastrados e ainda não tiveram serviços
Muito obrigado pelo show de conteúdo. Sou bem leito em SQL e precisei fazer um consulta em 3 tabelas com campos diversos. Este curso caiu dos céus. Muito obrigado pela didática, dinâmica e aula riquíssima. Rodei n’s fóruns nas últimas semana e não conseguia chegar nos resultados necessários. Após alguns minutos deste curso me senti um DBA Master, (risos). Muito obrigado novamente, Fábio dos Reis e sucesso.