即使在明確患有的是心因性勃起障礙,需要正確的心理健康治療才能根治問題,仍是無可奈何地依靠服用犀利士、威而鋼等ED藥物。因為心理疾病難以完全治愈,一定條件下可從新觸發。

Banco de dados MySql Notícias

Demystificando os SQL JOINs: O Guia Definitivo para Combinar Tabelas

Curso gratuito - Como trabalhar com o Banco de dados MySQL

No mundo real dos bancos de dados, a informação raramente está em um único lugar. Para manter os dados organizados, nós os dividimos em tabelas: uma para Funcionarios, outra para Departamentos.

Mas como fazer uma consulta que mostre o nome do departamento de ‘Ana Silva’, se o nome está em outra tabela?

A resposta é o SQL JOIN.

JOIN é a instrução SQL que usamos para combinar linhas de duas ou mais tabelas com base em uma coluna relacionada entre elas.

A Preparação: Nossa Base Aula_Views

Vamos usar exatamente o mesmo banco de dados que usamos para aprender VIEWs.

SQL

/*
-- Lembrete das nossas tabelas (não precisa executar se já as criou)
USE Aula_Views;

CREATE TABLE Departamentos (
    id_depto INT PRIMARY KEY AUTO_INCREMENT,
    nome_depto VARCHAR(100) NOT NULL
);

CREATE TABLE Funcionarios (
    id_func INT PRIMARY KEY AUTO_INCREMENT,
    nome_func VARCHAR(150) NOT NULL,
    cargo VARCHAR(100),
    salario DECIMAL(10, 2),
    id_depto INT,
    FOREIGN KEY (id_depto) REFERENCES Departamentos(id_depto)
);

-- Lembrete dos nossos dados
INSERT INTO Departamentos (nome_depto) VALUES 
('Engenharia'), ('Recursos Humanos'), ('Marketing'), ('Financeiro');

INSERT INTO Funcionarios (nome_func, cargo, salario, id_depto) VALUES
('Ana Silva', 'Engenheira de Software Sênior', 14000.00, 1),
('Bruno Costa', 'Engenheiro de Software Pleno', 9500.00, 1),
('Carla Mendes', 'Analista de RH', 6000.00, 2),
('Daniel Moreira', 'Gerente de Marketing', 12000.00, 3),
('Elisa Fernandes', 'Analista Financeiro', 5500.00, 4),
('Fábio Guedes', 'Estagiário de Marketing', 1500.00, 3);
*/

IMPORTANTE: Para que os exemplos de LEFT e RIGHT JOIN façam sentido, precisamos de dados que não se correspondem. Vamos adicionar dois registros à nossa base:

  1. Um departamento que não tem nenhum funcionário.
  2. Um funcionário que não está alocado em nenhum departamento.

SQL

-- 1. Adicionando um departamento sem funcionários
INSERT INTO Departamentos (nome_depto) VALUES ('Vendas');

-- 2. Adicionando um funcionário sem departamento
INSERT INTO Funcionarios (nome_func, cargo, salario, id_depto) VALUES
('Gabriel Paiva', 'Analista de RH Jr', 4000.00, NULL);

Agora estamos prontos!

A Cláusula ON: A Regra da Conexão

Antes de ver os tipos de JOIN, entenda a cláusula ON. Ela é a regra que diz ao SQL como as tabelas se conectam.

A sintaxe é: FROM TabelaA JOIN TabelaB ON TabelaA.chave = TabelaB.chave

No nosso caso, a regra será sempre: ON F.id_depto = D.id_depto (Usando F e D como apelidos/aliases para as tabelas Funcionarios e Departamentos).

Os Tipos de JOIN

1. INNER JOIN (A Interseção)

O INNER JOIN é o tipo mais comum. Ele retorna apenas as linhas que têm correspondência em AMBAS as tabelas.

Pense nele como a “interseção”. Se um funcionário não tem departamento (Gabriel Paiva), ele não aparece. Se um departamento não tem funcionário (Vendas), ele também não aparece.

Exemplo: Liste apenas os funcionários que possuem um departamento.

SQL

SELECT
    F.nome_func,
    F.cargo,
    D.nome_depto
FROM
    Funcionarios AS F
INNER JOIN
    Departamentos AS D ON F.id_depto = D.id_depto;

Resultado:

nome_funccargonome_depto
Ana SilvaEngenheira de Software SêniorEngenharia
Bruno CostaEngenheiro de Software PlenoEngenharia
Carla MendesAnalista de RHRecursos Humanos
Daniel MoreiraGerente de MarketingMarketing
Elisa FernandesAnalista FinanceiroFinanceiro
Fábio GuedesEstagiário de MarketingMarketing
  • Nota: Gabriel Paiva (que tem id_depto = NULL) ficou de fora.
  • Nota: O departamento Vendas (que não tem funcionários) também ficou de fora.

2. LEFT JOIN (Tudo da Esquerda)

O LEFT JOIN retorna TODAS as linhas da tabela da “esquerda” (a primeira, Funcionarios) e as linhas correspondentes da tabela da “direita” (Departamentos).

Se não houver correspondência na tabela da direita, o resultado virá com NULL nas colunas da direita.

Exemplo: Liste TODOS os funcionários, e mostre seus departamentos se eles tiverem um.

SQL

SELECT
    F.nome_func,
    F.cargo,
    D.nome_depto
FROM
    Funcionarios AS F
LEFT JOIN
    Departamentos AS D ON F.id_depto = D.id_depto;

Resultado:

nome_funccargonome_depto
Ana SilvaEngenheira de Software SêniorEngenharia
Bruno CostaEngenheiro de Software PlenoEngenharia
Carla MendesAnalista de RHRecursos Humanos
Daniel MoreiraGerente de MarketingMarketing
Elisa FernandesAnalista FinanceiroFinanceiro
Fábio GuedesEstagiário de MarketingMarketing
Gabriel PaivaAnalista de RH JrNULL
  • Nota: Gabriel Paiva agora está na lista, pois o LEFT JOIN força que todos os funcionários (tabela da esquerda) apareçam.

3. RIGHT JOIN (Tudo da Direita)

O RIGHT JOIN é o oposto exato do LEFT JOIN. Ele retorna TODAS as linhas da tabela da “direita” (Departamentos) e as linhas correspondentes da tabela da “esquerda” (Funcionarios).

Se não houver correspondência na esquerda, o resultado virá com NULL.

Exemplo: Liste TODOS os departamentos, e mostre quais funcionários eles possuem.

SQL

SELECT
    F.nome_func,
    F.cargo,
    D.nome_depto
FROM
    Funcionarios AS F
RIGHT JOIN
    Departamentos AS D ON F.id_depto = D.id_depto;

Resultado:

nome_funccargonome_depto
Ana SilvaEngenheira de Software SêniorEngenharia
Bruno CostaEngenheiro de Software PlenoEngenharia
Carla MendesAnalista de RHRecursos Humanos
Daniel MoreiraGerente de MarketingMarketing
Elisa FernandesAnalista FinanceiroFinanceiro
Fábio GuedesEstagiário de MarketingMarketing
NULLNULLVendas
  • Nota: O departamento Vendas, que não tem funcionários, agora aparece na lista, pois o RIGHT JOIN força que todos os departamentos (tabela da direita) apareçam.

Conclusão

JOINs são a espinha dorsal do SQL relacional. Ao usar a mesma base de dados, você pode ver claramente como JOINs e VIEWs trabalham juntos.

  • INNER JOIN: Traz apenas os dados que se correspondem 100%.
  • LEFT JOIN: Traz TUDO da tabela da esquerda (ex: todos os Funcionarios), mesmo os sem par.
  • RIGHT JOIN: Traz TUDO da tabela da direita (ex: todos os Departamentos), mesmo os sem par.

Você pode, inclusive, criar uma VIEW que contenha um JOIN (como fizemos no primeiro artigo) para simplificar permanentemente essas consultas.

Tags

About the author

Danilo Filitto

Mestre em Ciência da Computação pela Universidade Estadual de Maringá - UEM, Pós-Graduado em Redes de Computadores e Comunicação de Dados pela Universidade do Estado do Paraná - UEL, Bacharel em Ciência da Computação pela Universidade do Oeste Paulista - UNOESTE.

Atuo na área acadêmica como professor desde 2006. Atualmente leciono na UNOESTE (Universidade do Oeste Paulista), no SENAC (Serviço Nacional de Aprendizagem Comercial) e possuo vários cursos na Udemy (https://www.udemy.com/user/danilo-filitto/).

Além disso, sou o CEO dos sites https:www.dfilitto.com.br e https:www.makeindiegames.com.br

Você também pode me encontrar no YouTube por meio do endereço https://www.youtube.com/danilofilittoppr

Add Comment

Click here to post a comment

Aprenda a criar seus próprios jogos

Cursos em promoção

Cursos em destaque

Quer aprender a programar?

Aprenda a criar seus próprios jogos com os melhores desenvolvedores