JOIN no MariaDB: combinar conjuntos de dados de várias tabelas
Num sistema de gestão de bases de dados relacionais, pode comparar conjuntos de dados de diferentes tabelas, o que lhe permite ligar e encontrar os valores que coincidem em ambas as tabelas com a cláusula JOIN do MariaDB. Esta cláusula é utilizada em combinação com SELECT e pode ser dividida em diferentes categorias, como INNER JOIN, LEFT OUTER JOIN e RIGHT OUTER JOIN, que lhe mostramos em detalhe.
Sintaxe e funcionamento
Para lhe dar uma visão geral das diferentes cláusulas JOIN no MariaDB, mostramos primeiro a sintaxe básica. INNER JOIN tem a seguinte aparência:
SELECT columna(s)
FROM tabla_1
INNER JOIN tabla_2
ON tabla_1.columna = tabla_2.columna;sqlUse SELECT para selecionar a coluna (ou colunas) com a(s) qual(is) deseja trabalhar. Substitua o marcador de posição “tabela_1” pela sua primeira tabela e “tabela_2” pela segunda tabela que deseja combinar. INNER JOIN permite comparar todas as linhas da primeira tabela com todas as linhas da segunda tabela. Os resultados que coincidem (ou seja, que estão presentes em ambas as tabelas) são apresentados juntos numa tabela de resultados. As entradas que não coincidem não são consideradas.
Exemplo de INNER JOIN no MariaDB
Aqui está um exemplo simples para que veja como funciona INNER JOIN no MariaDB. Precisamos de uma base de dados com duas tabelas; a primeira tabela chamaremos de «Lista de clientes» e a segunda «Pedidos». Primeiro, criamos a tabela «Lista_de_clientes» com MariaDB CREATE TABLE. Ela contém as colunas «Numero_de_cliente», «Apellido», «Nombre», «Ciudad» e «Fecha_de_creacion». O código é o seguinte:
CREATE TABLE Lista_de_clientes (
Numero_de_cliente INT PRIMARY KEY,
Apellido VARCHAR(50),
Nombre VARCHAR(50),
Ciudad VARCHAR(50),
Fecha_de_creacion DATE
);sqlPreenchemos a tabela com alguns valores usando INSERT INTO:
INSERT INTO Lista_de_clientes VALUES
(1, 'García', 'Martina', 'Madrid', '2022-07-19'),
(2, 'Martínez', 'Bernd', 'Barcelona', '2023-03-03'),
(3, 'López', 'Pedro', 'Sevilla', '2023-07-09'),
(4, 'Sánchez', 'Sara', 'Valencia', '2023-12-10'),
(5, 'Fernández', 'Luis', 'Zaragoza', '2024-01-17');sqlEm seguida, criamos a tabela “Pedidos”, que contém as colunas “Número_do_pedido”, “Número_do_artigo”, “Nome_do_cliente” e “Data_do_pedido”. O código é o seguinte:
CREATE TABLE Pedidos (
Numero_de_pedido INT AUTO_INCREMENT PRIMARY KEY,
Numero_de_articulo INT,
Nombre_de_cliente VARCHAR(50),
Fecha_de_pedido DATE
);sqlTambém completamos essa tabela com valores de exemplo:
INSERT INTO Pedidos VALUES
(101, 247, 'García', '2024-02-20'),
(102, 332, 'López', '2024-03-03'),
(103, 247, 'Rodríguez', '2024-03-09'),
(104, 191, 'Martínez', '2024-03-17'),
(105, 499, 'Hernández', '2024-03-17');sqlAgora usamos o MariaDB INNER JOIN para filtrar os clientes que aparecem na tabela “Lista_de_clientes” e que fizeram um pedido, ou seja, que aparecem na tabela “Pedidos”:
SELECT Lista_de_clientes.Numero_de_cliente, Lista_de_clientes.Apellido, Pedidos.Numero_de_pedido, Pedidos.Numero_de_articulo
FROM Lista_de_clientes
INNER JOIN Pedidos
ON Lista_de_clientes.Apellido = Pedidos.Nombre_de_cliente;sqlO sistema verifica a coluna «Apelido» da tabela «Lista_de_clientes» e a coluna «Nome_do_cliente» da tabela «Pedidos». Se ambos os valores coincidirem, são incluídos na resposta. Como os clientes García, Martínez e López aparecem em ambas as tabelas, é emitido o seguinte resultado:
| Número_de_cliente | Apelido | Número_do_pedido | Número_do_artigo |
|---|---|---|---|
| 1 | García | 101 | 247 |
| 2 | Martínez | 104 | 191 |
| 3 | López | 102 | 332 |
LEFT OUTER JOIN
O LEFT OUTER JOIN no MariaDB funciona de forma semelhante e utiliza uma sintaxe quase idêntica. No entanto, ao contrário do INNER JOIN, no caso do LEFT OUTER JOIN, são mostrados todos os conjuntos de dados da primeira tabela ou tabela esquerda (no nosso exemplo, a tabela «Lista_de_clientes») e apenas os conjuntos de dados que coincidem da segunda tabela ou tabela direita (no nosso exemplo, a tabela «Pedidos»). Se o valor da segunda tabela não corresponder, aparece NULL na célula correspondente. Seguindo o exemplo anterior, o comando seria o seguinte:
SELECT Lista_de_clientes.Apellido, Pedidos.Numero_de_articulo
FROM Lista_de_clientes
LEFT OUTER JOIN Pedidos
ON Lista_de_clientes.Apellido = Pedidos.Nombre_de_cliente;sqlO resultado obtido é o seguinte:
| Apelido | Número_do_artigo |
|---|---|
| García | 247 |
| Martínez | 191 |
| López | 332 |
| Sánchez | NULL |
| Fernández | NULL |
RIGHT OUTER JOIN
No MariaDB, RIGHT OUTER JOIN funciona exatamente ao contrário. Os dados da segunda tabela ou tabela direita são combinados com os valores correspondentes da primeira tabela ou tabela esquerda. Se não corresponderem, tal como no LEFT OUTER JOIN, o valor NULL aparece na célula correspondente. Aqui está o código:
SELECT Lista_de_clientes.Apellido, Pedidos.Numero_de_articulo
FROM Lista_de_clientes
RIGHT OUTER JOIN Pedidos
ON Lista_de_clientes.Apellido = Pedidos.Nombre_de_cliente;sqlO resultado obtido é o seguinte:
| Nome_do_cliente | Número_do_artigo |
|---|---|
| García | 247 |
| López | 332 |
| NULL | 247 |
| Martínez | 191 |
| NULL | 499 |