JOINS e INNER JOIN – Selecionar dados de duas ou mais tabelas – SQL Server – 22
JOINS e INNER JOIN – Selecionar dados de duas ou mais tabelas no SQL Server
Empregamos as cláusulas JOIN (junções) para combinar dados armazenados em duas ou mais tabelas em um banco de dados, baseados em um relacionamento entre colunas destas tabelas.
Existem duas categorias principais de joins:
- INNER JOIN: Mostra linhas (registros) quando houver pelo menos uma correspondência em ambas as tabelas.
- OUTER JOIN: Mostra linhas (registros) mesmo quando não houver ao menos uma correspondência em uma das tabelas (ou ambas). A cláusula OUTER JOIN posusi os subtipos RIGHT JOIN, LEFT JOIN e FULL JOIN.
Nesta aula vamos estudar a cláusula INNER JOIN.
Cláusula INNER JOIN
Como vimos, a cláusula INNER JOIN (ou ainda simplesmente JOIN) nos permite obter registros com dados provenientes de duas ou mais tabelas que sejam relacionadas no banco de dados.
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 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.
Exemplos
Vamos a um exemplo. Consultaremos as tabelas de livros e de autores (tbl_livros e tbl_autores) e vamos retornar os registros relativos aos livros e aos autores simultaneamente:
SELECT * FROM tbl_livros INNER JOIN tbl_autores ON tbl_livros.ID_Autor = tbl_autores.ID_Autor;
Vamos a outro exemplo. Consultaremos as tabelas de livros e autores, porém retornando apenas os nomes dos livros, seus ISBNs e os nomes dos respectivos autores desses livros. Note que as duas primeiras informações estão na tabela de livros, e o nome do autor está armazenado somente na tabela de autores. O que as conecta é o relacionamento existente entre as colunas ID_Autor existentes em ambas as tabelas – chave primária na tabela de autores e chave estrangeira na tabela de livros:
SELECT tbl_livros.Nome_Livro, tbl_livros.ISBN, tbl_autores.Nome_Autor FROM tbl_livros INNER JOIN tbl_autores ON tbl_livros.ID_Autor = tbl_autores.ID_Autor;
Mais um exemplo, agora usando filtros com a cláusula WHERE. Vamos retornar os nomes dos livros e nomes das editoras, mas somente das editoras cujo nome se inicie com a letra M. Perceba o emprego de aliases (apelidos) nestas declarações, para simplificar o código:
SELECT L.Nome_Livro AS Livros, E.Nome_editora AS Editoras FROM tbl_livros AS L INNER JOIN tbl_editoras AS E ON L.ID_editora = E.ID_editora WHERE E.Nome_Editora LIKE 'M%';
Vejamos um quarto exemplo para finalizar. Agora faremos um INNER JOIN usando as três tabelas do banco de dados relacionadas. Desejamos os nomes e preços dos livros, nomes de seus autores e editoras, porém somente das editoras cujo nome se inicie com a letra O, sendo tudo isso ordenado em ordem crescente de preço dos livros (do mais barato para o mais caro):
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_livros 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 ASC;
Neste exemplo fazemos o join entre a tabela de livros e a de autores, e logo na sequência o join entre a tabela de livros e a de editoras, pois os relacionamentos ocorrem entre essas tabelas. No final também ordenamos os resultados por ordem crescente dos preços dos livros.
Na próxima lição abordaremos os OUTER JOINS.
Enquanto isso, caso prefira, assista à aula sobre Inner Join no SQL Server neste vídeo do canal da Bóson Treinamentos no YouTube:
otima aula