12th Dec 2022 6 minutos de leitura O que é um SQL INNER JOIN? Dorota Wdzięczna sql aprender sql join Índice Quando você precisa de JOIN? Como usar o JOIN em uma consulta SQL E se os registros não corresponderem? Filtragem de Registros no Conjunto de Resultados Quer saber mais sobre Cláusulas JOIN em SQL? Como combinar dados de diferentes tabelas em uma única consulta? Um recurso SQL chamado JOIN é o operador mais comum usado para criar consultas complexas. Aprenda o básico neste artigo. SQL nos permite selecionar dados de mais de uma tabela. Na verdade, toda a idéia de usar bancos de dados relacionais é selecionar dados de tabelas relacionadas. E podemos usar o operador JOIN do SQL para fazer isso. Há muitos tipos de JOINs em SQL. Neste artigo, vamos nos concentrar em INNER JOIN, que é o comando padrão JOIN (ou seja, aquele que você obtém se usar a palavra-chave JOIN por si só). Quando você precisa de JOIN? Por que precisaríamos unir dados de várias tabelas? A resposta simples é que às vezes uma tabela não contém todos os dados de que você precisa. Imagine que o movie A tabela armazena informações nas colunas id, title, production_year, e director_id. idtitleproduction_yeardirector_id 1Psycho19601 2Midnight in Paris20112 3Sweet and Lowdown19932 4Talk to her20023 5The skin I live here20113 Outra tabela, directorO site da empresa contém informações sobre seus diretores: id, name e birth_year. idnamebirth_year 1Alfred Hitchcock1899 2Woody Allen1935 3Pedro Almodóvar1949 Note que cada filme tem apenas uma coluna relacionada com o diretor: director_id. Os mesmos valores do número de identificação na tabela director (na coluna director_id ) e na tabela movie (na coluna id ). Gostaríamos de exibir os dados de cada filme juntamente com os detalhes de seu diretor. O resultado é uma nova tabela com dados de duas tabelas: movie e director. As tabelas são combinadas (ou unidas) com base nos números de identificação dos diretores. Em outras palavras, filmes com um director_id específico são combinados com as informações do diretor com este ID - por exemplo, o filme Psycho com director_id=1 é igualado pelo registro onde id=1 (Alfred Hitchcock) no director mesa. Veja o conjunto de resultados: idtitleproduction_yeardirector_ididnamebirth_year 1Psycho196011Alfred Hitchcock1899 2Midnight in Paris201122Woody Allen1935 3Sweet and Lowdown199322Woody Allen1935 4Talk to her200233Pedro Almodóvar1949 5The skin I live here201133Pedro Almodóvar1949 Uma versão ilustrada de um exemplo similar é apresentada no artigo Um Guia Ilustrado para o SQL INNER JOIN. Como usar o JOIN em uma consulta SQL Agora, vamos analisar a consulta que acabamos de usar. Aqui está novamente: SELECT * FROM movie JOIN director ON movie.director_id=director.id; JOIN é uma forma mais curta da cláusula INNER JOIN; você pode usá-las de forma intercambiável. Depois de SELECT suas colunas, você coloca a palavra-chave FROM e o nome da primeira tabela (neste exemplo, movie). Em seguida, você coloca JOIN (ou INNER JOIN), seguido do nome da segunda tabela (aqui, director). A seguir, a palavra-chave ON e a condição de união (ou seja, como combinar os registros de ambas as tabelas). Neste caso, a condição de junção corresponde aos valores da coluna director_id da tabela. movie com a coluna de identificação na tabela director. Desta forma, os registros na tabela movie são combinados com os registros corretos em director. Agora sabemos que o filme Sweet and Lowdown foi dirigido pelo diretor Woody Allen, que nasceu em 1935. Este filme tem director_id=2; há um valor correspondente à coluna correspondente (id) na tabela director. A animação abaixo mostra como funciona a utilização de um operador JOIN e quais registros são devolvidos: Um operador JOIN trabalha logicamente, em duas etapas. A primeira etapa retorna um produto cartesiano, ou seja, cada linha da primeira tabela é combinada com cada linha da segunda tabela. Na etapa seguinte, somente os pares de registros que atendem à condição da cláusula ON são devolvidos - neste exemplo, somente as linhas onde director_id em movie é igual a id em director. Note que os valores usados na condição de união não precisam ser números. Você também pode usar valores de texto e outras condições mais complexas. Você pode encontrar mais informações no artigo SQL INNER JOIN JOIN Explicado em Palavras Simples. E se os registros não corresponderem? E se houver registros na primeira tabela que não possam ser combinados com os registros na segunda tabela, ou vice versa? Como funciona o INNER JOIN neste caso? Vejamos um exemplo. Aqui está o movie tabela novamente: idtitleproduction_yeardirector_id 1Psycho19601 2Midnight in Paris20112 3Sweet and Lowdown19932 4Talk to her20023 5The skin I live in20113 6The new house2020NULL E aqui está director: idnamebirth_year 1Alfred Hitchcock1899 2Woody Allen1935 3Pedro Almodóvar1949 4Martin Scorsese1942 Aqui está a mesma consulta: SELECT title, production_year, director_id, id, name, birth_year FROM movie JOIN director ON movie.director_id=director.id; A tabela de resultados contém apenas registros que são um par correspondente: idtitleproduction_yeardirector_ididnamebirth_year 1Psycho196011Alfred Hitchcock1899 2Midnight in Paris201122Woody Allen1935 3Sweet and Lowdown199322Woody Allen1935 4Talk to her200233Pedro Almodóvar1949 5The skin I live in201133Pedro Almodóvar1949 Se você olhar para a mesa moviea coluna director_id é NULL para o filme A nova casa. E na tabela directoro diretor Martin Scorsese (id=4) não está relacionado a nenhuma linha na tabela movie. Portanto, estas filas não são exibidas no conjunto de resultados. A regra para INNER JOIN (JOIN) é que somente as linhas com correspondência em ambas as tabelas são retornadas. Nos outros tipos de operadores JOIN, este comportamento é diferente. Estenda este tópico lendo o artigo SQL JOIN Types Explained. Filtragem de Registros no Conjunto de Resultados Você também pode filtrar os registros devolvidos por JOIN. Por exemplo, podemos listar apenas os filmes e seus diretores onde o diretor nasceu depois de 1940. Aqui está a pergunta: SELECT title, production_year, director_id, id, name, birth_year FROM movie JOIN director ON movie.director_id=director.id WHERE director.birth_year>1940; Ela retorna o resultado: idtitleproduction_yeardirector_ididnamebirth_year 4Talk to her200233Pedro Almodóvar1949 5The skin I live in201133Pedro Almodóvar1949 Mais uma vez, temos filas da tabela movie combinado com linhas da tabela director. Inicialmente, a condição de união é a mesma (ON director.id=movie.director_id). Entretanto, na próxima etapa, os registros com valor menor ou igual a 1940 na coluna ano_de_nascimento são removidos. Assim, você não encontra Woody Allen no conjunto de resultados porque ele nasceu em 1935 (antes/menos que 1940). Alfred Hitchcock também não está aqui; ele nasceu em 1899. Fizemos isto graças a WHERE director.birth_year>1940. Quer saber mais sobre Cláusulas JOIN em SQL? Se você gostaria de ampliar suas habilidades, experimente nosso SQL para Iniciantes curso, que contém mais sobre como juntar mesas (incluindo muitos exercícios práticos!). Faz parte da pista Fundamentos de SQLque o ajudará a levar seus conhecimentos de SQL ao próximo nível. Ou talvez você já conheça algum SQL e gostaria de aprender mais sobre JOINs. Nesse caso, sugiro que você veja Como Aprender Cláusulas JOIN em SQL, Tipos de SQL JOIN Explicados, e nossa folha de fraude SQL JOIN. Você também pode fazer nosso curso Cláusulas JOIN em SQL . Depois, vá praticar o que você sabe usando nosso caminho de aprendizagem on-lineTrilha de Práticas em SQL . Feliz aprendizagem! Tags: sql aprender sql join