Operações de Dados em SQL: Inserção, Exclusão, Atualização, Consulta, Filtros e Ordenação

Inserção de Registros

Para adicionar dados utilizamos o comando INSERT INTO. A estrutura básica permite informar campos específicos ou todos na ordem da tabela.

-- Criação da tabela de exemplo
CREATE TABLE usuarios (
    cod INT PRIMARY KEY AUTO_INCREMENT,
    nome VARCHAR(30) NOT NULL,
    genero ENUM('M','F') DEFAULT 'M',
    interesses SET('leitura','esportes','musica')
);

-- Inserção completa
INSERT INTO usuarios VALUES (1,'Carlos','M','leitura,esportes');

-- Inserção parcial com campos nomeados
INSERT INTO usuarios (nome, interesses) VALUES ('Ana','leitura,musica');

-- Inserção múltipla
INSERT INTO usuarios VALUES 
(2,'Bruno','M','musica'),
(3,'Diana','F','esportes,musica');

-- Inserção via subconsulta
INSERT INTO usuarios_backup (cod, nome) SELECT cod, nome FROM usuarios;

Exclusão de Registros

Antes de remover registros, recomenda-se executar um SELECT com a mesma condição para validar o que será apagado.

-- Verificação prévia
SELECT * FROM usuarios WHERE cod = 2;

-- Exclusão condicional
DELETE FROM usuarios WHERE cod = 2;

-- Exclusão total (mantém o AUTO_INCREMENT atual)
DELETE FROM usuarios;

-- Truncar (zera a tabela e o AUTO_INCREMENT)
TRUNCATE TABLE usuarios;

Importante: DELETE sem cláusula WHERE remove todas as linhas, porém o contador de auto incremento não é reiniciado. Já o TRUNCATE limpa completamente a tabela e reinicia esse contador.

Atualização de Registros

-- Atualização de um campo
UPDATE usuarios SET genero = 'F' WHERE cod = 3;

-- Atualização de múltiplos campos
UPDATE usuarios SET nome = 'Carlos Eduardo', interesses = 'leitura' WHERE cod = 1;

Consulta de Dados

A cláusula SELECT é o coração das consultas. É fundamental compreender a ordem lógica de execução:

  1. FROM — identifica a tabela de origem
  2. WHERE — filtra linhas individualmente
  3. GROUP BY — agrupa as linhas filtradas
  4. HAVING — filtra os grupos formados
  5. SELECT — projeta as colunas finais (com renomeação e cálculos)
  6. ORDER BY — ordena o resultado
  7. LIMIT — restringe a quantidade de linhas retornadas

Por essa razão, WHERE não consegue enxergar alias criados no SELECT, enquanto HAVING e ORDER BY podem utilizá-los.

-- Consulta simples
SELECT * FROM usuarios;

-- Seleção de colunas específicas
SELECT nome, genero FROM usuarios;

-- Renomeação temporária de colunas
SELECT nome AS nome_completo FROM usuarios;
SELECT nome titulo FROM usuarios;

-- Remoção de duplicatas
SELECT DISTINCT genero FROM usuarios;
SELECT DISTINCT idade, genero FROM funcionarios;

-- Operações aritméticas
SELECT funcionario, salario * 12 AS salario_anual FROM folha;

-- Concatenação de strings
SELECT CONCAT('Sr. ', nome) FROM usuarios;
SELECT CONCAT_WS(' | ', nome, idade, cargo) FROM funcionarios;

-- Estrutura condicional CASE
SELECT
    CASE
        WHEN cargo = 'gerente' THEN nome
        WHEN cargo = 'diretor' THEN CONCAT(nome, '_CHEFE')
        ELSE CONCAT(nome, '_FUNC')
    END AS nome_exibicao
FROM funcionarios;

Filtros com WHERE

A cláusula WHERE atua sobre cada linha individualmente, antes do agrupamanto.

Operadores de Comparação

SELECT * FROM folha WHERE salario > 5000;
SELECT * FROM folha WHERE salario <> 3000;

Intervalos e Conjuntos

-- BETWEEN inclui os extremos
SELECT * FROM folha WHERE salario BETWEEN 8000 AND 15000;

-- IN verifica valores exatos em uma lista
SELECT * FROM folha WHERE salario IN (8000, 15000, 20000);

Busca por Padrões

-- LIKE com curingas: % (vários caracteres) e _ (um caractere)
SELECT * FROM funcionarios WHERE nome LIKE 'A%';   -- nomes iniciados em A
SELECT * FROM funcionarios WHERE nome LIKE '%sil%'; -- nomes contendo "sil"
SELECT * FROM funcionarios WHERE nome LIKE '_o%';   -- segunda letra é 'o'

-- REGEXP para expressões regulares simples
SELECT * FROM funcionarios WHERE nome REGEXP '^A';
SELECT * FROM funcionarios WHERE nome REGEXP 'o$';

Operadores Lógicos

SELECT * FROM folha WHERE salario NOT IN (8000, 15000) AND idade = 30;
SELECT * FROM funcionarios WHERE cargo = 'dev' OR cargo = 'analista';

Verificação de Nulos

SELECT * FROM funcionarios WHERE observacao IS NOT NULL;
SELECT * FROM funcionarios WHERE observacao IS NULL;

Agrupamento e Funções Agregadas

O GROUP BY organiza os registros em grupos. Ao agrupar, as colunas selecionadas devem ser o próprio campo de agrupamanto ou o resultado de uma função agregada.

-- Agrupar por departamento
SELECT departamento, COUNT(*) AS total_func 
FROM funcionarios 
GROUP BY departamento;

-- Maior salário por cargo
SELECT cargo, MAX(salario) AS maior_salario 
FROM folha 
GROUP BY cargo;

-- Outras funções: MIN, SUM, AVG
SELECT cargo, MIN(salario), MAX(salario), SUM(salario), AVG(salario) 
FROM folha 
GROUP BY cargo;

Filtragem de Grupos (HAVING) e Ordenação

HAVING

Diferente do WHERE, o HAVING filtra grupos já formados e acieta funções agregadas em suas condições.

-- Departamentos com média salarial acima de 10000
SELECT departamento, AVG(salario) AS media 
FROM folha 
GROUP BY departamento 
HAVING AVG(salario) > 10000;

ORDER BY

Por padrão a ordenação é ascendente (ASC). Use DESC para ordem decrescente.

-- Ordenação simples
SELECT * FROM folha ORDER BY salario;          -- crescente
SELECT * FROM folha ORDER BY salario DESC;     -- decrescente

-- Ordenação composta
SELECT * FROM folha ORDER BY salario DESC, idade ASC;

Limitação de Resultados

A cláusula LIMIT restringe a quantidade de registros retornados.

-- Sintaxe: LIMIT offset, quantidade
SELECT * FROM folha ORDER BY salario DESC LIMIT 3;        -- 3 maiores salários
SELECT * FROM folha ORDER BY salario DESC LIMIT 2, 1;     -- 3º maior salário

-- Sintaxe alternativa com OFFSET
SELECT * FROM folha ORDER BY salario DESC LIMIT 1 OFFSET 2; -- equivalente ao anterior

Tags: SQL MySQL CRUD GROUP BY ORDER BY

Publicado em 7-9 16:10