A linguagem SQL (Structured Query Language) se tornou uma das mais importantes no mundo da tecnologia. Independentemente de você ser um analista de BI, um DBA, cientista de dados, um engenheiro de software ou apenas alguém curioso para entender como a informação é armazenada, SQL pode abrir portas para qualquer carreira na área de dados, uma vez que é uma ferramenta básica para qualquer caminho que deseje seguir.

Neste mini curso, exploraremos desde os conceitos fundamentais até técnicas mais avançadas para manipular bancos de dados relacionais, utilizando a linguagem SQL.

 

1. O que é Linguagem SQL?

Imagine um grande armazém cheio de informações. Essas informações precisam ser bem organizadas para que possam ser facilmente encontradas quando necessárias. Os bancos de dados relacionais atuam exatamente como esse armazém, enquanto o SQL é a chave que permite encontrar e organizar os itens armazenados.

SQL é uma linguagem padronizada utilizada para gerenciar e manipular bancos de dados. Ela é aplicável a diversos sistemas de gerenciamento de banco de dados (SGBDs), como SQL Server, MySQL, PostgreSQL, Oracle, SQLite, entre outros.

 

2. Por que a linguagem SQL é tão relevante?

Porque qualquer tipo de sistema ou aplicativo, seja um e-commerce, uma rede social ou um sistema ERP, dependem da capacidade de armazenar, consultar e analisar dados de maneira eficiente. Ou seja, todo o registro armazenado acaba indo para um banco de dados.

De acordo com pesquisa realizada pelo STATISTA em 2024, a linguagem SQL é a quarta linguagem de programação mais utilizada no mundo. Essa pesquisa foi respondida por mais de 60 mil engenheiros de software e, de acordo com os dados, 51% deles utilizam a linguagem SQL no seu dia a dia.

 
Ranking Linguagens Mais Usadas - Linguagem SQL

 

3. Estrutura Básica de um Banco de Dados Relacional

Para entender SQL, é fundamental compreender o conceito de banco de dados relacional. Pense em um banco de dados como uma planilha do Excel.

Cada tabela dentro do banco de dados se parece com uma aba de uma planilha, contendo linhas e colunas. As colunas são os campos que contêm atributos específicos (como nome, idade, endereço), enquanto cada linha é um registro único.

Os bancos de dados relacionais utilizam chaves para vincular diferentes tabelas. Uma chave primária (primary key) é um identificador único de uma linha em uma tabela, enquanto uma chave estrangeira (foreign key) é usada para conectar tabelas diferentes, permitindo que se crie relações entre os dados.

Com essa relação, podemos evitar redundância e manter os dados organizados.

 

4. Principais Comandos SQL

Para nos aprofundarmos em SQL, precisamos explorar os principais comandos da linguagem. Eles se dividem em quatro grupos principais: DDL (Data Definition Language), DML (Data Manipulation Language), DCL (Data Control Language) e TCL (Transaction Control Language).

4.1. Comandos de Definição de Dados (DDL)

DDL envolve criar e modificar a estrutura do banco de dados. Imagine que você precisa construir uma casa; para isso, você precisa definir o layout das paredes e portas. Os comandos DDL funcionam dessa forma:

  • CREATE TABLE: usado para criar uma nova tabela.

    Exemplo:

    CREATE TABLE Clientes (
      ID INT PRIMARY KEY,
      Nome VARCHAR(100),
      Email VARCHAR(100),
      Data_de_Cadastro DATE
    );

    Esse comando cria uma tabela chamada “Clientes” com quatro colunas.

  • ALTER TABLE: permite modificar uma tabela existente.

    Exemplo: adicionar uma nova coluna para endereço.

    ALTER TABLE Clientes ADD Endereco VARCHAR(255);
  • DROP TABLE: utilizado para apagar uma tabela inteira.

    Exemplo:

    DROP TABLE Clientes;

    Mas cuidado! Esse comando exclui permanentemente todos os dados da tabela.

4.2. Comandos de Manipulação de Dados (DML)

DML é responsável pela manipulação dos dados armazenados nas tabelas. Isso envolve adicionar, atualizar e deletar registros, similar a atualizar uma lista de contatos.

  • INSERT INTO: usado para inserir novos registros.

    Exemplo:

    INSERT INTO Clientes (ID, Nome, Email, Data_de_Cadastro)
    VALUES (1, 'Ana Silva', 'ana@email.com', '2023-01-15');

    Nesse comando, estamos adicionando um novo cliente chamado Ana Silva.

  • UPDATE: permite atualizar registros existentes.

    Exemplo: mudar o e-mail de Ana.

    UPDATE Clientes SET Email = 'ana.silva@email.com' WHERE ID = 1;
  • DELETE: remove registros.

    Exemplo:

    DELETE FROM Clientes WHERE ID = 1;

    Aqui, estamos deletando o registro da cliente Ana Silva.

4.3. Consultas de Dados: O Poder do SELECT

O comando mais popular do SQL é, sem dúvida, o SELECT. Esse comando é utilizado para consultar os dados, filtrando e organizando conforme necessário.

Imagine que você deseja ver todos os clientes cadastrados em seu banco de dados:

SELECT * FROM Clientes;

Aqui, estamos solicitando que todos os registros da tabela “Clientes” sejam exibidos.

Podemos, entretanto, querer apenas os clientes cadastrados após 2023:

SELECT * FROM Clientes WHERE Data_de_Cadastro > '2023-01-01';

Note como o uso do comando WHERE nos permite filtrar registros.

E se você quiser ver apenas o nome e e-mail dos clientes? Nesse caso:

SELECT Nome, Email FROM Clientes;

Dessa forma, conseguimos refinar o que desejamos visualizar, tornando as consultas mais objetivas.

 

5. Agregando Informações: Funções de Agregação

Ao manipular grandes volumes de dados, as funções de agregação são fundamentais para obter insights. Alguns dos exemplos mais comuns incluem:

  • COUNT: para contar o número de registros.

    Exemplo: Quantos clientes existem no banco de dados?

    SELECT COUNT(*) FROM Clientes;
  • SUM: para somar valores em uma coluna específica.

    Imagine que você tem uma tabela de vendas e deseja saber o valor total vendido:

    SELECT SUM(Valor) FROM Vendas;
  • AVG: para calcular a média dos valores.

    Qual é o valor médio das vendas?

    SELECT AVG(Valor) FROM Vendas;
  • MAX e MIN: para encontrar os valores máximo e mínimo.

    Quem fez a maior compra?

    SELECT MAX(Valor) FROM Vendas;

 

6.Relacionando Tabelas: Joins e Relações

Um dos grandes poderes do SQL é a habilidade de relacionar tabelas diferentes através de JOIN. Imagine duas tabelas: Clientes e Pedidos. A tabela Clientes contém informações sobre quem fez a compra, enquanto a tabela Pedidos armazena os detalhes de cada pedido.

Se quisermos uma lista com o nome dos clientes e seus pedidos, podemos usar um INNER JOIN:

SELECT Clientes.Nome, Pedidos.ID_Pedido, Pedidos.Valor
FROM Clientes
INNER JOIN Pedidos ON Clientes.ID = Pedidos.Cliente_ID;

Nesse exemplo, usamos a coluna Cliente_ID para ligar as duas tabelas e trazer informações de ambas de maneira integrada.

Outros tipos de joins também são importantes:

  • LEFT JOIN: retorna todos os registros da tabela à esquerda, mesmo que não haja correspondência na tabela à direita.
  • RIGHT JOIN: faz o oposto, retornando todos os registros da tabela à direita.
  • FULL JOIN: combina resultados de ambos os lados, trazendo todos os registros, independentemente de haver correspondência.

 

7. Práticas Recomendadas para Consultas Eficientes

A eficiência em SQL é crucial, principalmente quando lidamos com grandes quantidades de dados. Algumas práticas recomendadas incluem:

  • Sempre utilize cláusulas WHERE para limitar a quantidade de dados retornada, evitando consultas desnecessariamente grandes.
  • Prefira usar LIMIT para restringir o número de registros em resultados provisórios.
  • Índices são essenciais para melhorar a performance de consultas, especialmente em colunas que são frequentemente usadas em WHERE ou JOIN.

 

8. Exercício Prático: Consolidando o Aprendizado

Agora que passamos pelos principais comandos, aqui está um exercício para você consolidar o aprendizado. Imagine que você possui duas tabelas: Clientes e Vendas. Como você escreveria uma consulta para obter a lista de todos os clientes que fizeram compras acima de R$ 500, incluindo os nomes dos clientes e os valores dos pedidos?

Aqui vai uma possível solução:

SELECT Clientes.Nome, Vendas.Valor
FROM Clientes
INNER JOIN Vendas ON Clientes.ID = Vendas.Cliente_ID
WHERE Vendas.Valor > 500;

 

9. Principais Tipos de Dados em SQL

Os tipos de dados são essenciais para definir o que pode ser armazenado em cada coluna de uma tabela. Escolher o tipo de dado correto é crucial para garantir a integridade dos dados e a eficiência do banco de dados. Vamos explorar com mais detalhes os principais tipos de dados disponíveis em SQL:

  • VARCHAR(n): Armazena cadeias de caracteres de tamanho variável, até um limite de ‘n’ caracteres. Utilizado principalmente quando não se sabe o comprimento exato dos valores que serão armazenados. Ideal para nomes, descrições e endereços, pois economiza espaço em comparação com tipos de comprimento fixo.
    • Exemplo de uso: Se você deseja armazenar nomes de clientes, pode usar VARCHAR(100), o que permite até 100 caracteres, garantindo flexibilidade.
  • CHAR(n): Diferente do VARCHAR, armazena cadeias de caracteres de comprimento fixo. Cada valor armazenado terá exatamente ‘n’ caracteres. Utilizado em situações onde todos os valores têm o mesmo tamanho, como códigos postais ou códigos de produtos.
    • Exemplo de uso: CHAR(10) poderia ser usado para armazenar um código de produto que sempre tem 10 caracteres.
  • INT: Utilizado para armazenar números inteiros, sejam eles positivos ou negativos. Ideal para representar IDs, quantidades ou contagens.
    • Exemplo de uso: A coluna ID de uma tabela de clientes pode ser do tipo INT para identificar unicamente cada registro.
  • DECIMAL(p, s): Usado para armazenar números decimais com precisão. ‘p’ representa a precisão total (número total de dígitos) e ‘s’ representa a escala (número de dígitos à direita do ponto decimal). É especialmente útil para valores monetários, onde a precisão é fundamental para evitar erros de arredondamento.
    • Exemplo de uso: DECIMAL(10, 2) poderia ser usado para armazenar preços de produtos, garantindo até 10 dígitos no total, com 2 dígitos após o ponto decimal.
  • FLOAT e DOUBLE: São utilizados para armazenar números em ponto flutuante, ou seja, valores que podem ter muitas casas decimais, mas com precisão menos rigorosa que o DECIMAL. São recomendados para cálculos científicos ou situações onde a precisão exata não é tão crítica.
    • Exemplo de uso: FLOAT pode ser usado para armazenar medições científicas, como temperatura ou pressão.
  • DATE: Armazena datas no formato ‘AAAA-MM-DD’. Utilizado para registros como datas de nascimento, datas de transações ou datas de cadastro.
    • Exemplo de uso: DATE é ideal para armazenar a data de criação de uma conta de cliente.
  • TIME: Armazena apenas o horário no formato ‘HH:MM’. Utilizado para armazenar momentos específicos do dia.
    • Exemplo de uso: TIME pode ser usado para registrar o horário de um evento específico, como o horário de entrada em um sistema.
  • DATETIME e TIMESTAMP: Armazenam tanto a data quanto a hora. DATETIME armazena um valor específico de data e hora, enquanto TIMESTAMP é frequentemente usado para registrar automaticamente a data e hora de alterações no banco de dados.
    • Exemplo de uso: TIMESTAMP pode ser usado para rastrear quando uma linha foi atualizada pela última vez.
  • BOOLEAN: Armazena valores lógicos, como verdadeiro (TRUE) ou falso (FALSE). Ideal para indicar o status de algo, como ativo/inativo, aprovado/não aprovado.
    • Exemplo de uso: Um campo ativo em uma tabela de usuários pode ser do tipo BOOLEAN para indicar se o usuário está ativo ou não.
  • BLOB (Binary Large Object): Utilizado para armazenar grandes quantidades de dados binários, como imagens, vídeos ou outros tipos de arquivos. Esse tipo de dado é útil quando o banco de dados precisa gerenciar arquivos associados aos registros.
    • Exemplo de uso: BLOB pode ser utilizado em um sistema de gerenciamento de arquivos para armazenar documentos enviados por usuários.
  • TEXT: Usado para armazenar grandes quantidades de texto. É ideal para campos onde o conteúdo textual pode variar muito em tamanho, como descrições longas, comentários ou artigos.
    • Exemplo de uso: Um campo comentarios em uma tabela de avaliações pode ser do tipo TEXT para permitir comentários extensos.

Escolher o tipo de dado correto em uma coluna do banco de dados é essencial, pois um tipo de dado inadequado pode consumir mais espaço de armazenamento e tornar operações de consulta mais lentas. Portanto, é importante considerar o tipo de dado que será armazenado ao criar a estrutura de uma tabela.

 

10. Stored Procedures e Funções em SQL

Stored Procedures e Funções são componentes poderosos da linguagem SQL que permitem reutilizar código e realizar operações complexas de forma eficiente.

Vamos entender a diferença entre eles e como utilizá-los de maneira eficaz.

  • Stored Procedures são blocos de código SQL armazenados no servidor, que podem ser executados quando necessário. Elas permitem agrupar uma série de instruções SQL em uma única unidade lógica, reduzindo a necessidade de repetir código semelhante. Imagine que você precisa fazer atualizações periódicas em diversas tabelas de seu banco de dados; ao invés de escrever o mesmo código toda vez, você poderia criar uma stored procedure para essa tarefa.
    • Exemplo de uso: Uma stored procedure pode ser criada para atualizar todos os preços dos produtos de acordo com um percentual de reajuste.
    CREATE PROCEDURE AtualizaPrecos(@percentual DECIMAL(5,2))
    AS
    BEGIN
      UPDATE Produtos SET Preco = Preco * (1 + @percentual / 100);
    END;

    Assim, ao invés de executar uma série de atualizações manualmente, você poderia apenas chamar EXEC AtualizaPrecos(10); para aplicar um reajuste de 10% em todos os produtos.

  • Funções em SQL são semelhantes às stored procedures, mas diferem no propósito e na forma como são utilizadas. Enquanto uma stored procedure pode executar uma série de instruções complexas e não necessariamente retornar um valor, uma função geralmente retorna um valor específico e é utilizada dentro de uma consulta SQL. Funções podem ser úteis quando você precisa realizar cálculos específicos em colunas ou quando deseja criar filtros personalizados em suas consultas.
    • Exemplo de uso: Uma função que calcula o valor com imposto para um produto.
    CREATE FUNCTION CalculaValorComImposto(@valor DECIMAL(10,2), @imposto DECIMAL(5,2))
    RETURNS DECIMAL(10,2)
    AS
    BEGIN
      RETURN @valor * (1 + @imposto / 100);
    END;

    Esta função poderia ser usada dentro de uma consulta SELECT para calcular o preço com imposto.

Quando utilizar cada um:

  • Utilize Stored Procedures quando precisar de operações que envolvem várias instruções SQL ou atualizações em massa. Elas são ideais para tarefas administrativas, manutenção de dados e automação de processos que não requerem um valor de retorno específico.
  • Utilize Funções quando precisar de uma operação específica dentro de uma consulta, principalmente para retornar um valor único ou realizar cálculos em tempo real.

Ambos oferecem benefícios em termos de reutilização de código, manutenção simplificada e otimização de processos, tornando o trabalho com SQL mais modular e eficiente.

 

11. Triggers em SQL: Automação de Processos no Banco de Dados

Triggers são ações automatizadas que ocorrem em resposta a eventos específicos no banco de dados, como uma inserção, atualização ou exclusão de registros. Eles são extremamente úteis para garantir que determinadas regras sejam sempre seguidas ou para automatizar certos processos sem a necessidade de intervenção manual.

  • O que são triggers? Triggers são como “gatilhos” que disparam uma ação no banco de dados automaticamente quando ocorre um determinado evento. Eles podem ser definidos para rodar antes ou depois de uma operação de INSERT, UPDATE ou DELETE. Por exemplo, se houver a necessidade de manter um histórico de alterações em uma tabela, um trigger pode ser criado para registrar cada mudança.
  • Tipos de triggers:
    • AFTER Trigger: Executa uma ação depois de uma operação específica ser concluída. Por exemplo, após a inserção de um novo pedido, o sistema pode enviar uma notificação ou atualizar o estoque de um produto relacionado.
    • BEFORE Trigger: Executa antes que a operação seja concluída. Esse tipo de trigger é útil para validar ou modificar dados antes que sejam efetivamente inseridos ou alterados na tabela.
  • Exemplo de uso: Imagine que você possui uma tabela de pedidos e deseja manter um histórico de cada atualização de preço.
    CREATE TRIGGER HistoricoPrecos
    AFTER UPDATE ON Pedidos
    FOR EACH ROW
    BEGIN
      INSERT INTO Historico_Precos (Pedido_ID, Preco_Antigo, Preco_Novo, Data_Alteracao)
      VALUES (OLD.Pedido_ID, OLD.Preco, NEW.Preco, NOW());
    END;

    Nesse exemplo, sempre que houver uma alteração no preço de um pedido, um registro será criado na tabela Historico_Precos, garantindo uma trilha de auditoria automática e precisa.

  • Vantagens dos triggers: Triggers ajudam a garantir a consistência dos dados e a automação de tarefas repetitivas, reduzindo o esforço manual e minimizando erros. Eles também podem ser usados para impor regras de negócio complexas que não podem ser facilmente implementadas em um front-end.
  • Cuidados ao usar triggers: Apesar de poderosos, os triggers devem ser usados com cautela, pois podem tornar o comportamento do banco de dados mais difícil de prever e depurar, especialmente quando muitos triggers estão encadeados. Além disso, triggers mal projetados podem causar impactos significativos na performance, já que cada operação que dispara um trigger adiciona processamento adicional ao banco de dados.

Triggers são uma ferramenta valiosa para automação e consistência, mas requerem planejamento cuidadoso para garantir que o banco de dados continue eficiente e fácil de manter.

 

12. Considerações Finais

A linguagem SQL é uma ferramenta poderosa que se torna ainda mais útil quanto mais você pratica e explora suas capacidades. Neste mini curso cobrimos os conceitos básicos, desde select e join até funções de agregação, relacionamentos entre tabelas, stored procedures e triggers.

Lembre-se, o aprendizado de SQL é contínuo” Portanto, a melhor forma de avançar é colocando as mãos na massa. Experimente criar suas próprias tabelas, fazer consultas e explorar diferentes formas de analisar os dados. Assim, você estará cada vez mais preparado para lidar com atividades básicas de um analista de dados.

💡
Gostou do artigo? Então deixa um comentário e compartilha nas redes sociais. Quer trocar uma ideia pelo LinkeIN? Me adiciona lá!

Categorized in:

Inteligência Artificial,

Last Update: outubro 18, 2024