Uma pequena introdução sobre o inner join em SQL

AGRADEÇA AO AUTOR COMPARTILHE!

Olá galera,

Recentemente fiquei pensando em um artigo que fosse útil e, acompanhando as aulas da faculdade, percebi as dificuldades do pessoal em assimilar o conceito sobre do Inner Join em banco de dados.

O Inner Join  tem como objetivo aglutinar duas ou mais tabelas mediante atributos comuns que estão presentes nas mesmas, onde para realizarmos esta junção, utilizamos as chaves primárias / estrangeiras.

Dentre as vantagens de se utilizar o Inner Join, podemos considerar:

  1. Sua sintaxe ser mais organizada e facíl de compreender;
  2. Facilidade para se achar o melhor plano de ação para realizar consultas.

Sintaxe:

Para facilitar o entendimento, vamos utilizar um modelo do Northwind para exemplificar alguns casos:

No modelo acima, vamos supor em fazer uma junção da tabela Category com a Product, para retornar no resultado alguns campos como CategoryID, CategoryNameDescription, ProductID, ProductName e UnitPrice, onde para realizar a junção da tabela vamos utilizar a chave primária CategoryID da tabela Category com a chave estrangeira CategoryID da tabela Product.

Podemos montar o join de duas maneiras e ambas retornarão o mesmo resultado, mas acredito que o primeiro as vezes seja até o melhor a ser utilizado para auxiliar no entendimento de views grandes e complexas.

Bem vamos lá:

Ou

A diferença das duas queries que montei acima é que na primeira utilizamos o nome da tabela seguido do ponto mais o campo desejado e no segundo exemplo eu utilizei um álias que coloquei logo após as tabelas.

Complementando estas queries, podemos acrescentar a cláusula where no final para realizar uma filtragem dos registros que vão ser retornados da base de dados, onde no exemplo abaixo apenas vou retornar os registos que o preço unitário for maior do que 200.

Bem galera, espero que o artigo seja realmente útil :)
Se alguém tiver algo a complementar, deixe seu comentário!

Um grande abraço a todos!

AGRADEÇA AO AUTOR COMPARTILHE!

Diego Cardoso

Mais artigos deste autor »

Atualmente trabalhando com C# + ASP.NET, cursando o ultimo ano de Sistemas de Informação pela UNIBAN. Nas horas vagas dedicando-se ao estudo de Java e PHP.


11 Comentários

Lucas
1

Importante no inner join é saber a diferença pro outer join e também que diferenças teriam se o inner join fosse da tabela 2 para tabela 1 e não da 1 para a 2. E também que diferença teria se não fosse feito nada disso e ficasse só no select from , where =

Diego Cardoso
2

@Lucas,

Realmente o ponto principal da questão é o outer join, mas desenvolvi esse artigo com base nas experiências que obtive no ano passado em sala de aula, observando as dificuldades que alguns colegas de sala demonstravam sobre o assunto. Acredito que seja essencial entender o funcionamento do inner join primeiro para depois partir para o outer join.

Quanto a ordem das tabelas no inner join não importa, devido a utilização da chave primária e estrangeira, porque elas que vão ser responsáveis pela junção das tabelas, o máximo que pode mudar é a ordem de exibição das colunas das mesmas, se você não informar quais os campos que gostaria de obter o retorno na query.

E a diferença em relação a só a utilização do where, é que o inner join possui uma sintaxe mais organizada e fácil de compreender do que você ficar realizando as vezes vários selects dentro de selects ou o famoso “select interno”.

Para o próximo artigo, vou argumentar sobre a utilização do outer join.

Obrigado pelo comentário,

Abraços!

Carlos Eduardo
3

Uma outra questão no caso de estar usando Orientação a objetos, caso tenha minhas querys em classes. Por exemplo DAOprofessor e DAOaluno e eu resolvesse unir essas duas tabelas, como eu poderia fazer isso? Criar um terceira classe para fazer a junção, profissionalmente qual a melhor forma de fazer isso?

Parabéns pelo artigo, muito bom!

Diego Cardoso
4

@CarlosEduardo

Obrigado pelo comentário, não sei se é a melhor maneira profissionalmente para se fazer isso, mas eu particularmente trabalho com a construção de view´s para realizar os joins e filtrar quais as colunas que desejo q sejam exibidas para determinada função.

Agora se você deseja apenas realizar filtragem de alguns dados, o ideal seria a construção de métodos genéricos, onde você possa passar parâmetros para a montagem destas query´s (ex: determinar quantos alunos são respectivos a professor ” x “, utilize a DAO Alunos).

Abraços!

Djeison
6

Excelente post Diego, só queria destacar uma dúvida, é verdade que a utilização de Alias no Select melhora a performance da Consulta no Banco?

Diego Cardoso
7

@Djeison

Obrigado pelo comentário, sinceramente não conheço e não lembro de ter lido algum artigo que falasse a respeito disso, mas acredito que não acrescente diferença de performance.

De qualquer maneira, se eu descobrir alguma coisa posteriormente, volto a postar a resposta aqui.

Abraços !

Daniel Tibúrcio
8

Preciso de uma tabela juntando duas outras, sendo que uma é um cadastro de códigos e outra das ocorrências destes códigos em uma determinada condição. Só que preciso de uma tabela contendo todos os códigos, mesmo os códigos que não existam na segunda tabela. O que me sugerem?

bradock
9

olá, eu particularmente nao gosto muito de usar WHERE
utilizo assim

INNER JOIN Product
ON
Category.CategoryID=Product.CategoryID &&
Product.UnitPrice > 200

Pesquisador de Inner JOIN
10

Muito obrigado pela explicação meu jovem, me ajudou muito, assim como deve ter ajudado muitos outros, são de pessoas assim que o mundo precisa. Agradeço de coração, belo trabalho.

Valeu e fica com Deus. =)

Deixe seu comentário

Seu endereço de e-mail não será publicado. Campos com * são obrigatórios!

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">