Junção de Tabelas SQLite

SQLiteBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como combinar dados de múltiplas tabelas em SQLite usando técnicas de junção de tabelas. Abordaremos INNER JOIN, LEFT JOIN, a junção de múltiplas tabelas e a filtragem de resultados de junções. Ao final deste laboratório, você será capaz de recuperar e combinar dados de forma eficiente usando SQLite.

Nesta etapa, você criará duas tabelas, employees (funcionários) e departments (departamentos), e as preencherá com dados de exemplo. Essas tabelas serão usadas nas etapas subsequentes para demonstrar técnicas de junção de tabelas.

Primeiro, abra o shell SQLite executando o seguinte comando no terminal:

sqlite3 /home/labex/project/company.db

Este comando abre o shell SQLite e conecta-se a um arquivo de banco de dados chamado company.db. Se o arquivo não existir, o SQLite o criará.

Agora, crie a tabela employees com o seguinte comando SQL:

CREATE TABLE employees (
    id INTEGER PRIMARY KEY,
    name TEXT,
    department_id INTEGER
);

Este comando cria uma tabela chamada employees com três colunas: id, name e department_id. A coluna id é a chave primária e identificará exclusivamente cada funcionário.

Em seguida, crie a tabela departments com o seguinte comando SQL:

CREATE TABLE departments (
    id INTEGER PRIMARY KEY,
    name TEXT
);

Este comando cria uma tabela chamada departments com duas colunas: id e name. A coluna id é a chave primária e identificará exclusivamente cada departamento.

Agora, insira alguns dados de exemplo na tabela employees:

INSERT INTO employees (name, department_id) VALUES
('Alice', 1),
('Bob', 2),
('Charlie', 1),
('David', 3),
('Eve', NULL);

Este comando insere cinco linhas na tabela employees. Cada linha representa um funcionário e seu respectivo ID do departamento.

Finalmente, insira dados de exemplo na tabela departments:

INSERT INTO departments (name) VALUES
('Sales'),
('Marketing'),
('Engineering');

Este comando insere três linhas na tabela departments. Cada linha representa um departamento e seu nome.

Para verificar se as tabelas foram criadas e preenchidas corretamente, você pode executar o seguinte comando SQL:

SELECT * FROM employees;

Saída Esperada:

1|Alice|1
2|Bob|2
3|Charlie|1
4|David|3
5|Eve|

E:

SELECT * FROM departments;

Saída Esperada:

1|Sales
2|Marketing
3|Engineering

Executar Consultas INNER JOIN

Nesta etapa, você aprenderá como usar a cláusula INNER JOIN em SQLite. Um INNER JOIN retorna linhas quando há uma correspondência em ambas as tabelas com base em uma condição especificada.

A sintaxe básica para INNER JOIN é:

SELECT column1, column2 FROM table1 INNER JOIN table2 ON table1.column_name = table2.column_name;

Em nosso caso, queremos recuperar os nomes dos funcionários junto com os nomes de seus departamentos. Para fazer isso, execute o seguinte comando SQL:

SELECT employees.name, departments.name
FROM employees
INNER JOIN departments ON employees.department_id = departments.id;

Este comando junta as tabelas employees e departments com base na coluna department_id em employees correspondendo à coluna id em departments. Em seguida, ele seleciona o nome do funcionário da tabela employees e o nome do departamento da tabela departments.

Saída Esperada:

Alice|Sales
Bob|Marketing
Charlie|Sales
David|Engineering

Esta saída mostra o nome do funcionário e o nome do seu departamento correspondente. Observe que Eve não está incluída no resultado porque seu department_id é NULL, e não há nenhum departamento correspondente. INNER JOIN retorna apenas linhas correspondentes.

Usar LEFT JOIN para Dados Opcionais

Nesta etapa, você aprenderá como usar LEFT JOIN em SQLite. Um LEFT JOIN (ou LEFT OUTER JOIN) retorna todas as linhas da tabela da esquerda e as linhas correspondentes da tabela da direita. Se não houver correspondência na tabela da direita, valores NULL são retornados para as colunas da tabela da direita. Isso é útil quando você deseja recuperar todos os registros de uma tabela e incluir dados relacionados de outra tabela, se existirem.

A sintaxe básica para LEFT JOIN é:

SELECT column1, column2 FROM table1 LEFT JOIN table2 ON table1.column_name = table2.column_name;

Para recuperar todos os funcionários e os nomes de seus departamentos, mesmo que um funcionário não tenha um departamento atribuído, execute o seguinte comando SQL:

SELECT employees.name, departments.name
FROM employees
LEFT JOIN departments ON employees.department_id = departments.id;

Este comando junta as tabelas employees e departments com base na coluna department_id em employees correspondendo à coluna id em departments. Ele seleciona o nome do funcionário da tabela employees e o nome do departamento da tabela departments. Como é um LEFT JOIN, todos os funcionários serão listados.

Saída Esperada:

Alice|Sales
Bob|Marketing
Charlie|Sales
David|Engineering
Eve|

Observe que Eve está listada, mas o nome do departamento está vazio (NULL) porque seu department_id é NULL, e não há nenhum departamento correspondente. Isso demonstra como LEFT JOIN inclui todas as linhas da tabela da esquerda (employees) mesmo quando não há correspondência na tabela da direita (departments).

Juntar Múltiplas Tabelas

Nesta etapa, você aprenderá como juntar múltiplas tabelas em SQLite. Juntar mais de duas tabelas envolve combinar dados de várias tabelas relacionadas usando múltiplas cláusulas JOIN.

Primeiro, vamos adicionar uma nova tabela chamada locations para armazenar as localizações dos departamentos. Execute o seguinte comando SQL para criar a tabela locations:

CREATE TABLE locations (
    id INTEGER PRIMARY KEY,
    department_id INTEGER,
    city TEXT
);

Este comando cria uma tabela chamada locations com três colunas: id, department_id e city.

Em seguida, insira alguns dados de exemplo na tabela locations:

INSERT INTO locations (department_id, city) VALUES
(1, 'New York'),
(2, 'Los Angeles'),
(3, 'Chicago');

Agora, vamos juntar todas as três tabelas para recuperar os nomes dos funcionários, os nomes dos departamentos e as localizações dos departamentos. Execute o seguinte comando SQL:

SELECT employees.name, departments.name, locations.city
FROM employees
INNER JOIN departments ON employees.department_id = departments.id
INNER JOIN locations ON departments.id = locations.department_id;

Esta consulta primeiro junta employees e departments com base em employees.department_id = departments.id. Em seguida, ela junta o resultado com a tabela locations com base em departments.id = locations.department_id. Isso liga os funcionários aos seus departamentos e, em seguida, à localização desses departamentos.

Saída Esperada:

Alice|Sales|New York
Bob|Marketing|Los Angeles
Charlie|Sales|New York
David|Engineering|Chicago

Isso mostra o nome de cada funcionário, o nome de seu departamento e a cidade onde seu departamento está localizado. Eve não está incluída porque ela não tem um departamento atribuído.

Filtrar Resultados de Junção

Nesta etapa, você aprenderá como filtrar os resultados de tabelas juntadas usando a cláusula WHERE em SQLite. A filtragem permite que você recupere apenas as linhas que atendem a critérios específicos após a operação de junção.

Para recuperar os nomes dos funcionários que trabalham no departamento de Vendas, execute o seguinte comando SQL:

SELECT employees.name
FROM employees
INNER JOIN departments ON employees.department_id = departments.id
WHERE departments.name = 'Sales';

Esta consulta junta as tabelas employees e departments e, em seguida, filtra os resultados para incluir apenas os funcionários cujo nome do departamento é 'Sales'.

Saída Esperada:

Alice
Charlie

Isso mostra que Alice e Charlie trabalham no departamento de Vendas.

Agora, vamos recuperar os nomes dos funcionários que trabalham em departamentos localizados em Nova York. Execute o seguinte comando SQL:

SELECT employees.name
FROM employees
INNER JOIN departments ON employees.department_id = departments.id
INNER JOIN locations ON departments.id = locations.department_id
WHERE locations.city = 'New York';

Esta consulta junta todas as três tabelas e, em seguida, filtra os resultados para incluir apenas os funcionários cuja localização do departamento é Nova York.

Saída Esperada:

Alice
Charlie

Novamente, Alice e Charlie são os únicos funcionários em departamentos localizados em Nova York.

Resumo

Neste laboratório, você aprendeu como combinar dados de múltiplas tabelas em SQLite usando técnicas de junção de tabelas. Você cobriu INNER JOIN, que retorna linhas quando há uma correspondência em ambas as tabelas, e LEFT JOIN, que retorna todas as linhas da tabela da esquerda e as linhas correspondentes da tabela da direita. Você também aprendeu como juntar múltiplas tabelas e filtrar resultados juntados usando a cláusula WHERE. Essas habilidades permitirão que você recupere e combine dados de forma eficiente usando SQLite.