Estrutura e Palarvas-chave do SQL no MySQL
SQL (Structured Query Language) é a linguagem padrão para interagir com bancos de dados relacionais no MySQL. Sua sintaxe, embora aparentemente simples, envolve componentes e termos que são cruciais para consultas eficientes e corretas.
- Composição Básica do SQL
Uma instrução SQL típica pode ser dividida em cláusulas que definem a ação a ser realizada. A estrutura fundamental segue este padrão:
SELECT coluna1, coluna2 FROM tabela WHERE condicao;
- SELECT: Especifica as colunas a serem retornadas.
- FROM: Indica a tabela de origem dos dados.
- WHERE: Filtra linhas com base em critérios.
Em consultas mais complexas, isso pode incluir junções, subconsultas ou funções de janela.
- Categorias Principais de Instruções SQL
2.1 Linguagem de Definição de Dados (DDL)
Utilizada para definir e modificar a estrutura do banco de dados, como tabelas.
CREATE TABLE funcionarios (
id_func INT PRIMARY KEY,
nome VARCHAR(60),
idade INT
);
ALTER TABLE funcionarios ADD COLUMN email VARCHAR(120);
DROP TABLE funcionarios;
2.2 Linguagem de Manipulação de Dados (DML)
Gerencia os dados dentro das tabelas, permitindo inserção, atualização e remoção.
-- Inserir dados
INSERT INTO funcionarios (id_func, nome, idade) VALUES (1, 'Maria', 28);
-- Atualizar dados
UPDATE funcionarios SET idade = 29 WHERE id_func = 1;
-- Remover dados
DELETE FROM funcionarios WHERE id_func = 1;
2.3 Linguagem de Consulta de Dados (DQL)
Focada na recuperação de dados.
SELECT nome, idade FROM funcionarios WHERE idade > 25;
2.4 Linguagem de Controle de Transações (TCL)
Administra transações para garantir a integridade dos dados.
START TRANSACTION;
-- Operações diversas
COMMIT;
ROLLBACK;
- Palavras-chave Comuns no SQL
3.1 Consulta de Dados
SELECT
Define as colunas a serem consultadas. Use * para todas as colunas ou apelidos com AS.
SELECT * FROM funcionarios;
SELECT id_func AS identificador, nome AS nome_completo FROM funcionarios;
FROM
Esepcifica a tabela de origem.
SELECT nome FROM funcionarios WHERE idade > 30;
WHERE
Filtra linhas usando operadores lógicos como AND, OR e NOT.
SELECT nome FROM funcionarios WHERE idade > 30 AND genero = 'F';
ORDER BY
Ordena o conjunto de resultados. O padrão é ascendente; use DESC para descendente.
SELECT nome, idade FROM funcionarios ORDER BY idade DESC;
3.2 Manipulação de Dados
INSERT INTO
Insere novas linhas, incluindo suporte para inserção em massa.
INSERT INTO funcionarios (id_func, nome, idade) VALUES (2, 'João', 35);
INSERT INTO funcionarios (id_func, nome, idade) VALUES
(3, 'Ana', 27),
(4, 'Carlos', 40);
UPDATE
Modifica dados existentes, permitindo atualizar múltiplas colunas.
UPDATE funcionarios SET nome = 'Maria Clara', idade = 30 WHERE id_func = 1;
DELETE
Remove linhas com base em condições.
DELETE FROM funcionarios WHERE id_func = 1;
3.3 Funcionalidades Avançadas
GROUP BY
Agrupa linhas, frequentemente usado com funções de agregação como SUM, AVG, COUNT. Use HAVING para filtrar grupos.
SELECT genero, COUNT(*) AS total FROM funcionarios GROUP BY genero;
SELECT genero, COUNT(*) AS total FROM funcionarios GROUP BY genero HAVING total > 5;
JOIN
Combina dados de múltiplas tabelas, como junções internas (INNER JOIN) e externas (LEFT JOIN).
SELECT f.nome, p.numero_pedido
FROM funcionarios f
INNER JOIN pedidos p ON f.id_func = p.id_func;
SELECT f.nome, p.numero_pedido
FROM funcionarios f
LEFT JOIN pedidos p ON f.id_func = p.id_func;
UNION
Mescla resultados de consultas SELECT distintas.
SELECT nome FROM funcionarios WHERE idade > 30
UNION
SELECT nome FROM funcionarios WHERE idade < 20;
- Palavras-chave para Otimização de Desempenho
4.1 EXPLAIN
Analisa o plano de execução de consultas para identificar problemas como varreduras de tabela completas.
EXPLAIN SELECT * FROM funcionarios WHERE id_func = 1;
4.2 LIMIT
Restringe o número de linhas retornadas, com suporte para deslocamentos.
SELECT nome, idade FROM funcionarios LIMIT 5;
SELECT nome, idade FROM funcionarios LIMIT 5 OFFSET 10;
4.3 Gerenciamento de Índices
Índices aceleram consultas, mas devem ser usados com cautela.
CREATE INDEX idx_nome ON funcionarios(nome);
DROP INDEX idx_nome ON funcionarios;
- Erros Comuns e Boas Práticas
5.1 Uso Excessivo de SELECT *
Selecionar todas as colunas pode reduzir a performance. Especifique apenas as colunas necessárias.
-- Preferível
SELECT nome, idade FROM funcionarios WHERE id_func = 1;
-- Evitar
SELECT * FROM funcionarios WHERE id_func = 1;
5.2 Negligenciar Índices
Consultas sem índices podem realizar varreduras completas, prejudicando a velocidade. Planeje índices em colunas frequentemente filtradas.
CREATE INDEX idx_nome ON funcionarios(nome);
SELECT * FROM funcionarios WHERE nome = 'Maria';
5.3 Condições de Filtro Complexas
Simplifique condições ou utilize visões para cnosultas recorrentes.
-- Condição simplificada
SELECT * FROM funcionarios WHERE idade > 25 AND genero = 'F';
-- Usar visão para reutilização
CREATE VIEW funcionarias_ativas AS
SELECT * FROM funcionarios WHERE genero = 'F' AND status = 'ativo';