Nesse post iremos abordar diferentes recursos do SQL que permitem a manipulação avançada de dados em um banco de dados relacional.

Código

JOIN

INNER JOIN

SELECT tb_fornecedor.fornecedor, tb_cidade.cidade FROM tb_fornecedor INNER JOIN tb_cidade ON tb_fornecedor.id_cidade = tb_cidade.id;

Esta consulta utiliza INNER JOIN para combinar linhas de tb_fornecedor com linhas de tb_cidade onde os IDs das cidades coincidem, retornando fornecedor e cidade correspondentes.

  • Resultado

LEFT JOIN

SELECT tb_fornecedor.fornecedor, tb_cidade.cidade FROM tb_fornecedor LEFT JOIN tb_cidade ON tb_fornecedor.id_cidade = tb_cidade.id;

Utiliza um LEFT JOIN para selecionar todos os registros da tabela à esquerda (tb_fornecedor) juntamente com os registros correspondentes da tabela à direita (tb_cidade). Se não houver correspondência, o resultado para a tabela à direita será NULL.

  • Resultado

RIGHT JOIN

SELECT tb_produto.descricao, tb_categoria.categoria FROM tb_produto RIGHT JOIN tb_categoria ON tb_produto.id_categoria = tb_categoria.id;

Executa um RIGHT JOIN, escolhendo todos os registros da tabela à direita (tb_categoria) e os registros correspondentes da tabela à esquerda (tb_produto). Se não houver correspondência, o resultado para a tabela à esquerda será NULL.

  • Resultado

Union

SELECT id_cidade FROM tb_loja
UNION
SELECT id_cidade FROM tb_fornecedor
ORDER BY id_cidade;

Combina os resultados de duas consultas sem duplicatas, graças ao operador UNION, e os ordena pelo id_cidade.

  • Resultado

UNION ALL

SELECT id_cidade FROM tb_loja
UNION ALL
SELECT id_cidade FROM tb_fornecedor
ORDER BY id_cidade;

Utiliza UNION ALL para combinar os resultados de duas consultas, incluindo duplicatas.

  • Resultado

Simulando FULL OUTER JOIN com UNION

SELECT * FROM tb_fornecedor
LEFT JOIN tb_cidade ON tb_fornecedor.id = tb_cidade.id
UNION ALL
SELECT * FROM tb_fornecedor
RIGHT JOIN tb_cidade ON tb_fornecedor.id = tb_cidade.id
WHERE tb_cidade.id IS NULL;

Combina LEFT JOIN e RIGHT JOIN com UNION ALL para simular um FULL OUTER JOIN, unindo dados de duas tabelas independentemente de correspondências diretas entre elas.

  • Resultado

Criação de Views

CREATE VIEW viewCidade AS
SELECT tb_fornecedor.fornecedor AS Fornecedor, tb_cidade.cidade AS Cidade
FROM tb_fornecedor
INNER JOIN tb_cidade ON tb_fornecedor.id = tb_cidade.id;
 
SELECT Fornecedor, Cidade FROM viewCidade ORDER BY Fornecedor;

Define uma View chamada viewCidade para simplificar e organizar a consulta de dados relacionados entre fornecedores e cidades, e em seguida realiza uma seleção a partir dessa view.

  • Resultado

PROCEDURE

CREATE PROCEDURE verValor(varProduto SMALLINT)
BEGIN
    SELECT CONCAT('O valor:', valor) FROM tb_produto WHERE id = varProduto;
END;
 
CALL verValor(2);

Cria uma PROCEDURE chamada verValor que, quando chamada, retorna o valor de um produto baseado em seu ID.

  • Resultado

TRIGGER

ALTER TABLE tb_produto ADD Preco_desconto DECIMAL(5,2);
 
CREATE TRIGGER tr_desconto BEFORE INSERT ON tb_produto
FOR EACH ROW
SET NEW.Preco_desconto = (NEW.valor * 0.20);
 
INSERT INTO tb_produto(descricao, valor, qtdmin, taxa) VALUES ('Monitor', '900.00', '30', '20');

Adiciona uma coluna Preco_desconto à tabela tb_produto e define um TRIGGER chamado tr_desconto, que automaticamente calcula um desconto antes de cada inserção de novos registros na tabela.

  • Resultado

Conclusão

A utilização de JOIN, UNION, Views, Procedures e Triggers no SQL oferece uma gama robusta de ferramentas, permitindo a realização de consultas complexas, a manipulação eficiente de dados e a automatização de tarefas.