Unión de Tablas en SQLite

SQLiteSQLiteBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderá cómo combinar datos de múltiples tablas en SQLite utilizando técnicas de unión de tablas (table joining). Cubriremos INNER JOIN, LEFT JOIN, la unión de múltiples tablas y el filtrado de resultados unidos. Al final de este laboratorio, podrá recuperar y combinar datos de manera eficiente utilizando SQLite.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sqlite(("SQLite")) -.-> sqlite/SQLiteGroup(["SQLite"]) sqlite/SQLiteGroup -.-> sqlite/init_db("Create SQLite Database") sqlite/SQLiteGroup -.-> sqlite/make_table("Create New Table") sqlite/SQLiteGroup -.-> sqlite/add_rows("Insert Multiple Rows") sqlite/SQLiteGroup -.-> sqlite/get_all("Select All Rows") sqlite/SQLiteGroup -.-> sqlite/query_where("Filter With WHERE") subgraph Lab Skills sqlite/init_db -.-> lab-552556{{"Unión de Tablas en SQLite"}} sqlite/make_table -.-> lab-552556{{"Unión de Tablas en SQLite"}} sqlite/add_rows -.-> lab-552556{{"Unión de Tablas en SQLite"}} sqlite/get_all -.-> lab-552556{{"Unión de Tablas en SQLite"}} sqlite/query_where -.-> lab-552556{{"Unión de Tablas en SQLite"}} end

Crear y poblar tablas

En este paso, creará dos tablas, employees (empleados) y departments (departamentos), y las poblará con datos de ejemplo. Estas tablas se utilizarán en los pasos siguientes para demostrar las técnicas de unión de tablas (table joining).

Primero, abra la shell de SQLite ejecutando el siguiente comando en la terminal:

sqlite3 /home/labex/project/company.db

Este comando abre la shell de SQLite y se conecta a un archivo de base de datos llamado company.db. Si el archivo no existe, SQLite lo creará.

Ahora, cree la tabla employees con el siguiente comando SQL:

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

Este comando crea una tabla llamada employees con tres columnas: id, name (nombre) y department_id. La columna id es la clave primaria (primary key) e identificará de forma única a cada empleado.

A continuación, cree la tabla departments con el siguiente comando SQL:

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

Este comando crea una tabla llamada departments con dos columnas: id y name. La columna id es la clave primaria e identificará de forma única a cada departamento.

Ahora, inserte algunos datos de ejemplo en la tabla employees:

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

Este comando inserta cinco filas en la tabla employees. Cada fila representa a un empleado y su correspondiente ID de departamento.

Finalmente, inserte datos de ejemplo en la tabla departments:

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

Este comando inserta tres filas en la tabla departments. Cada fila representa un departamento y su nombre.

Para verificar que las tablas se han creado y poblado correctamente, puede ejecutar el siguiente comando SQL:

SELECT * FROM employees;

Resultado esperado:

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

Y:

SELECT * FROM departments;

Resultado esperado:

1|Sales
2|Marketing
3|Engineering

Realizar consultas INNER JOIN

En este paso, aprenderá a utilizar la cláusula INNER JOIN en SQLite. Un INNER JOIN devuelve filas cuando hay una coincidencia en ambas tablas basada en una condición especificada.

La sintaxis básica para INNER JOIN es:

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

En nuestro caso, queremos recuperar los nombres de los empleados junto con los nombres de sus departamentos. Para hacer esto, ejecute el siguiente comando SQL:

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

Este comando une las tablas employees y departments basándose en la columna department_id en employees que coincida con la columna id en departments. Luego selecciona el nombre del empleado de la tabla employees y el nombre del departamento de la tabla departments.

Resultado esperado:

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

Este resultado muestra el nombre del empleado y el nombre de su departamento correspondiente. Observe que Eve no está incluida en el resultado porque su department_id es NULL, y no hay ningún departamento coincidente. INNER JOIN solo devuelve las filas coincidentes.

Usar LEFT JOIN para datos opcionales

En este paso, aprenderá a utilizar LEFT JOIN en SQLite. Un LEFT JOIN (o LEFT OUTER JOIN) devuelve todas las filas de la tabla izquierda y las filas coincidentes de la tabla derecha. Si no hay coincidencia en la tabla derecha, se devuelven valores NULL para las columnas de la tabla derecha. Esto es útil cuando desea recuperar todos los registros de una tabla e incluir datos relacionados de otra tabla si existen.

La sintaxis básica para LEFT JOIN es:

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

Para recuperar todos los empleados y los nombres de sus departamentos, incluso si un empleado no tiene un departamento asignado, ejecute el siguiente comando SQL:

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

Este comando une las tablas employees y departments basándose en la columna department_id en employees que coincida con la columna id en departments. Selecciona el nombre del empleado de la tabla employees y el nombre del departamento de la tabla departments. Debido a que es un LEFT JOIN, todos los empleados se mostrarán.

Resultado esperado:

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

Observe que Eve aparece en la lista, pero el nombre del departamento está vacío (NULL) porque su department_id es NULL, y no hay ningún departamento coincidente. Esto demuestra cómo LEFT JOIN incluye todas las filas de la tabla izquierda (employees) incluso cuando no hay coincidencia en la tabla derecha (departments).

Unir múltiples tablas

En este paso, aprenderá a unir múltiples tablas en SQLite. Unir más de dos tablas implica combinar datos de varias tablas relacionadas utilizando múltiples cláusulas JOIN.

Primero, agreguemos una nueva tabla llamada locations para almacenar las ubicaciones de los departamentos. Ejecute el siguiente comando SQL para crear la tabla locations:

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

Este comando crea una tabla llamada locations con tres columnas: id, department_id y city.

A continuación, inserte algunos datos de ejemplo en la tabla locations:

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

Ahora, unamos las tres tablas para recuperar los nombres de los empleados, los nombres de los departamentos y las ubicaciones de los departamentos. Ejecute el siguiente 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 primero une employees y departments basándose en employees.department_id = departments.id. Luego, une el resultado con la tabla locations basándose en departments.id = locations.department_id. Esto vincula a los empleados con sus departamentos y luego con la ubicación de esos departamentos.

Resultado esperado:

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

Esto muestra el nombre de cada empleado, el nombre de su departamento y la ciudad donde se encuentra su departamento. Eve no está incluida porque no tiene un departamento asignado.

Filtrar resultados unidos (Joined Results)

En este paso, aprenderá a filtrar los resultados de tablas unidas utilizando la cláusula WHERE en SQLite. El filtrado le permite recuperar solo las filas que cumplen criterios específicos después de la operación de unión (join).

Para recuperar los nombres de los empleados que trabajan en el departamento de Ventas (Sales), ejecute el siguiente comando SQL:

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

Esta consulta une las tablas employees y departments y luego filtra los resultados para incluir solo a los empleados donde el nombre del departamento es 'Sales'.

Resultado esperado:

Alice
Charlie

Esto muestra que Alice y Charlie trabajan en el departamento de Ventas (Sales).

Ahora, recuperemos los nombres de los empleados que trabajan en departamentos ubicados en Nueva York (New York). Ejecute el siguiente 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 une las tres tablas y luego filtra los resultados para incluir solo a los empleados donde la ubicación del departamento es Nueva York (New York).

Resultado esperado:

Alice
Charlie

Nuevamente, Alice y Charlie son los únicos empleados en departamentos ubicados en Nueva York (New York).

Resumen

En este laboratorio, ha aprendido cómo combinar datos de múltiples tablas en SQLite utilizando técnicas de unión de tablas (table joining). Cubrió INNER JOIN, que devuelve filas cuando hay una coincidencia en ambas tablas, y LEFT JOIN, que devuelve todas las filas de la tabla izquierda y las filas coincidentes de la tabla derecha. También aprendió cómo unir múltiples tablas y filtrar los resultados unidos utilizando la cláusula WHERE. Estas habilidades le permitirán recuperar y combinar datos de manera eficiente utilizando SQLite.