8th Jul 2022 8 minutos de leitura Como Manter Linhas Inigualáveis Quando Você Junta duas Tabelas em SQL Tihomir Babic sql aprender sql sql joins Índice Qual junta lhe dá as Linhas Inigualáveis? Conheça os dados O que acontece quando você utiliza o INNER JOIN? Obtenha todas as Linhas Combinadas e Inigualáveis de uma Tabela Usando o JOGO ESQUERDO Usando o RIGHT JOIN Será que o FULL JOIN vai lhe dar todas as linhas combinadas e inigualáveis? Quando usar qual união Aprenda os diferentes tipos de junção para selecionar a que você precisa! Aprenda como usar o JOIN para manter tanto as linhas emparelhadas quanto as não emparelhadas quando você juntar duas tabelas. Juntar duas ou mais mesas é uma habilidade que você precisa muito se estiver trabalhando com bancos de dados. Para rever e praticar suas habilidades de união SQL, eu recomendo a Cláusulas JOIN em SQL curso. Ele contém mais de 90 exercícios e seções sobre diferentes desafios de união. Se você une tabelas frequentemente em SQL, provavelmente já notou que nem todos os dados de uma tabela correspondem aos dados de outra tabela o tempo todo. Às vezes, você precisa apenas dos dados que têm uma correspondência em ambas as tabelas. E, às vezes, você também precisa manter as linhas inigualáveis. Como você faz isso em um JOIN? Qual junta lhe dá as Linhas Inigualáveis? Você provavelmente já sabe disso, mas vale a pena repetir. O objetivo do JOIN é obter os dados de duas ou mais tabelas. Você os une pela(s) coluna(s) que eles têm em comum. Os quatro principais tipos de JOINs são: (INNER) JOIN. LEFT (OUTER) JOIN. RIGHT (OUTER) JOIN. FULL (OUTER) JOIN. Quando você usa um simples (INNER) JOIN, você só terá as linhas que têm fósforos em ambas as tabelas. A consulta não retornará linhas inigualáveis em nenhuma forma ou formato. Se isto não for o que você deseja, a solução é usar o LEFT JOIN, RIGHT JOIN, ou FULL JOIN, dependendo do que você gostaria de ver. Se você é novo no JOIN, aqui é onde cada tipo deJOIN é exaustivamente explicado. Você também pode ter uma folha de trapaça SQL JOIN por perto para ajudá-lo com a sintaxe e uso do JOIN. Conheça os dados Os dados com os quais vamos trabalhar consistem em duas tabelas: employee. project. A tabela employee tem quatro colunas: id: O ID do funcionário; é a chave primária (PK) da tabela. first_name: O primeiro nome do funcionário. last_name: O sobrenome do funcionário. project_id: O ID do projeto e a chave estrangeira (FK) da tabela, referenciando outra tabela chamada project. Eis o que os dados da tabela employee parece que sim: idfirst_namelast_nameproject_id 1IngaDansken1 2RosinaSneezem5 3DarRisbie4 4LyneaBraveyNULL 5AlanahAbrashkov4 6EmmitJaime4 7KarrieLatek5 8GarrettCreginNULL 9CecilioZiemkeNULL 10MalanieChapellow1 11FraydaPinkett1 12MaddiMullissNULL 13BlaneTue5 14CarverVeighey5 15ChristosManleyNULL Há duas colunas na tabela project: id: O ID do projeto; é a chave primária (PK) da tabela. project_name: O nome do projeto. E estes são os dados da tabela: idproject_name 1Reporting Process 2Database Enhancement 3Sales Boosting 4Employee Satisfaction 5IT Security 6Diversity Program 7Policies & Procedures 8Social Media Visibility 9Mobile Banking 10Education O que acontece quando você utiliza o INNER JOIN? Para obter o nome dos funcionários e os projetos em que eles estão trabalhando utilizando o INNER JOIN, você terá que escrever este código: SELECT first_name, last_name, project_name FROM employee e JOIN project p ON e.project_id = p.id; Nota: É claro que você pode usar ou JOIN ou INNER JOIN como a palavra-chave - eles são os mesmos. Eis o que você obtém como resultado: first_namelast_nameproject_name FraydaPinkettReporting Process MalanieChapellowReporting Process IngaDanskenReporting Process EmmitJaimeEmployee Satisfaction AlanahAbrashkovEmployee Satisfaction DarRisbieEmployee Satisfaction CarverVeigheyIT Security BlaneTueIT Security KarrieLatekIT Security RosinaSneezemIT Security O resultado mostra apenas as fileiras da tabela employee que correspondem às fileiras na tabela project. Em outras palavras, o código retorna apenas os funcionários que têm um projeto alocado a eles. Isto, entretanto, significa que cada tabela pode ter linhas que não correspondem à outra tabela. Pode haver alguns funcionários que não estão alocados a nenhum projeto, e pode haver alguns projetos sem nenhum funcionário alocado a eles. Como você também obtém as linhas incomparáveis? Obtenha todas as Linhas Combinadas e Inigualáveis de uma Tabela Para obter todas as linhas de apenas uma das tabelas - as linhas combinadas assim como as linhas não combinadas - você precisa usar o LEFT JOIN ou o RIGHT JOIN. Qual delas você deve usar depende da tabela da qual você quer manter as linhas não combinadas. O LEFT JOIN fará isso a partir da tabela da esquerda, o RIGHT JOIN a partir da da direita. Deixe-me mostrar-lhe o que isso significa na prática. Usando o JOGO ESQUERDO Para obter as linhas combinadas, bem como as inigualáveis, de uma tabela usando o LEFT JOIN, você terá que escrever este código: SELECT first_name, last_name, project_name FROM employee e LEFT JOIN project p ON e.project_id = p.id; É quase o mesmo código que no exemplo anterior. A única diferença é que ele usa a palavra-chave LEFT JOIN em vez da JOIN. Isto lhe dará todos os dados da tabela da esquerda (employeeneste caso), e todos os dados correspondentes da tabela da direita (project). Quando não há dados correspondentes na tabela projectvocê recebe os valores NULL, mas você ainda recebe todos os valores da tabela employee. Veja por si mesmo: first_namelast_nameproject_name FraydaPinkettReporting Process MalanieChapellowReporting Process IngaDanskenReporting Process EmmitJaimeEmployee Satisfaction AlanahAbrashkovEmployee Satisfaction DarRisbieEmployee Satisfaction CarverVeigheyIT Security BlaneTueIT Security KarrieLatekIT Security RosinaSneezemIT Security ChristosManleyNULL MaddiMullissNULL CecilioZiemkeNULL GarrettCreginNULL LyneaBraveyNULL Como você interpreta estes dados? Você tem todos os funcionários e os projetos em que eles estão trabalhando. Quando há um valor NULL na coluna project_name, isso significa que o funcionário em questão não está trabalhando em nenhum projeto. Usando o RIGHT JOIN Agora, vamos escrever o mesmo código com o RIGHT JOIN em vez de usar o LEFT JOIN. SELECT first_name, last_name, project_name FROM employee e RIGHT JOIN project p ON e.project_id = p.id; É uma imagem espelho do código anterior. Ele retornará todos os dados da tabela do lado direito, projecte apenas as fileiras correspondentes da tabela da esquerda, employee. Novamente, quando não há dados correspondentes da tabela employeeos valores serão NULL. Este é o resultado da consulta: first_namelast_nameproject_name FraydaPinkettReporting Process MalanieChapellowReporting Process IngaDanskenReporting Process NULLNULLDatabase Enhancement NULLNULLSales Boosting EmmitJaimeEmployee Satisfaction AlanahAbrashkovEmployee Satisfaction DarRisbieEmployee Satisfaction CarverVeigheyIT Security BlaneTueIT Security KarrieLatekIT Security RosinaSneezemIT Security NULLNULLDiversity Program NULLNULLPolicies & Procedures NULLNULLSocial Media Visibility NULLNULLMobile Banking NULLNULLEducation Agora, estes dados mostram todos os projetos que existem na tabela project. Quando as colunas first_name e last_name são NULL, isso significa que não há funcionários trabalhando nesse projeto. Será que o FULL JOIN vai lhe dar todas as linhas combinadas e inigualáveis? Eu acho que a consulta usando o FULL JOIN e seu resultado falará por si mesma. Vamos ver o que ela faz. Primeiro, a pergunta: SELECT first_name, last_name, project_name FROM employee e FULL JOIN project p ON e.project_id = p.id; Novamente, a única diferença em relação às consultas anteriores é o tipo de junção utilizado. Tudo o resto é o mesmo. Esta consulta FULL JOIN retornará os seguintes dados: first_namelast_nameproject_name FraydaPinkettReporting Process MalanieChapellowReporting Process IngaDanskenReporting Process NULLNULLDatabase Enhancement NULLNULLSales Boosting EmmitJaimeEmployee Satisfaction AlanahAbrashkovEmployee Satisfaction DarRisbieEmployee Satisfaction CarverVeigheyIT Security BlaneTueIT Security KarrieLatekIT Security RosinaSneezemIT Security NULLNULLDiversity Program NULLNULLPolicies & Procedures NULLNULLSocial Media Visibility NULLNULLMobile Banking NULLNULLEducation ChristosManleyNULL MaddiMullissNULL CecilioZiemkeNULL GarrettCreginNULL LyneaBraveyNULL Vamos inspecionar um pouco os dados. Há filas que se encontram em ambas as tabelas. Há, no entanto, linhas da tabela employee que não têm filas correspondentes na tabela project. Você pode identificar estas linhas através dos valores NULL na coluna project_name. Há também linhas da tabela project sem linhas de correspondência na tabela employee. Mais uma vez, é aqui que estão os valores NULL. Desta vez, o NULLs estará nas colunas first_name e last_name. Quando usar qual união Agora que você já viu o que cada JOIN retorna, vamos esclarecer o que cada JOIN faz. O JOIN ou INNER JOIN não retorna nenhuma fila que não corresponda. Ele retorna apenas as linhas que correspondem em ambas as tabelas às quais você se junta. Se você quiser obter linhas inigualáveis, não deve usá-las. O LEFT JOIN e o RIGHT JOIN devolvem as duas linhas que correspondem e não correspondem. Entretanto, você precisa estar ciente de qual tabela você obtém as linhas inigualáveis. Com base em suas necessidades, você usará ou o LEFT JOIN ou o RIGHT JOIN. Ambos obtêm todas as linhas de uma tabela (combinadas e inigualáveis) e todas as linhas correspondentes da outra tabela. Quando não são encontradas linhas correspondentes na outra tabela, as colunas da outra tabela mostram os valores NULL. O FULL JOIN obtém todos os dados de todas as tabelas às quais você se junta. É como combinar as três junções acima. Você obtém todas as linhas correspondentes como ao usar o INNER JOIN. Você também obterá linhas não correspondentes da tabela da esquerda e da direita, também. É como se você usasse o LEFT JOIN e o RIGHT JOIN simultaneamente. Aqui estão mais alguns exemplos para praticar a junção das tabelas. Aprenda os diferentes tipos de junção para selecionar a que você precisa! Você vê, saber como estes JOINs funcionam é bastante útil. Eles permitem que você junte duas ou mais tabelas e obtenha diferentes combinações de dados de cada tabela. Não há diferença em como você escreve o código. A única coisa que muda é a palavra-chave que você usa, dependendo do tipo de JOIN que você precisa. É realmente importante entender que dados cada um destes JOINs retorna. Para dominar e praticar esta habilidade, o curso SQL para Iniciantes e o curso SQL JOINs são o que você precisa! Se você precisa de conselhos sobre como praticar JOINs, aqui estão algumas dicas. Tags: sql aprender sql sql joins