Linguagens do SQL DDL · DML · DQL
Linguagens do SQL
DDL · DML · DQL
Entenda como estruturar, manipular e consultar dados em um banco de dados relacional
O SQL (Structured Query Language) é a linguagem padrão para interagir com bancos de dados relacionais. Para organizar melhor seus comandos, o SQL é dividido em sublinguagens com propósitos distintos: a DDL define a estrutura, a DML manipula os dados e a DQL realiza consultas. Compreender essa divisão é fundamental para trabalhar profissionalmente com qualquer SGBD.
DDL
Define e altera a estrutura do banco (tabelas, colunas, índices)
DML
Insere, atualiza e remove registros dentro das tabelas
DQL
Consulta e recupera dados usando filtros, ordenação e agrupamentos
DDL — Data Definition Language
Linguagem de Definição de DadosComandos DDL são usados para criar e modificar a estrutura do banco de dados. Quando executados, as alterações são permanentes e imediatas — não há "desfazer" com ROLLBACK.
CREATE TABLE
Cria uma nova tabela no banco de dados, definindo colunas, tipos de dados e restrições (constraints).
-- Criando o banco de dados da biblioteca CREATE DATABASE biblioteca; USE biblioteca; -- Tabela de autores CREATE TABLE autores ( id_autor INT AUTO_INCREMENT PRIMARY KEY, nome VARCHAR(100) NOT NULL, nascimento DATE, pais VARCHAR(50) DEFAULT 'Brasil' ); -- Tabela de livros (com chave estrangeira) CREATE TABLE livros ( id_livro INT AUTO_INCREMENT PRIMARY KEY, titulo VARCHAR(200) NOT NULL, ano YEAR, preco DECIMAL(8,2), id_autor INT, FOREIGN KEY (id_autor) REFERENCES autores(id_autor) );
ALTER TABLE
Modifica a estrutura de uma tabela existente: adicionar, remover ou alterar colunas.
-- Adicionar nova coluna ALTER TABLE livros ADD COLUMN genero VARCHAR(50); -- Modificar o tipo de uma coluna ALTER TABLE livros MODIFY COLUMN preco DECIMAL(10,2) NOT NULL; -- Renomear uma coluna (MySQL 8+) ALTER TABLE autores RENAME COLUMN nascimento TO data_nasc; -- Remover uma coluna ALTER TABLE livros DROP COLUMN genero;
DROP e TRUNCATE
DROP TABLE apaga a tabela inteira (estrutura + dados). TRUNCATE apaga apenas os dados, mantendo a estrutura.
-- Apaga todos os registros, mas mantém a tabela TRUNCATE TABLE livros; -- Apaga a tabela definitivamente (irreversível!) DROP TABLE livros; -- Apaga o banco de dados inteiro DROP DATABASE biblioteca;
Atenção: Comandos DDL como DROP e TRUNCATE são irreversíveis no MySQL. Sempre faça um backup antes de executá-los em ambiente de produção.
DML — Data Manipulation Language
Linguagem de Manipulação de DadosComandos DML operam sobre os dados dentro das tabelas. Diferente do DDL, operações DML podem ser revertidas com ROLLBACK quando usadas dentro de uma transação.
INSERT INTO
Insere um ou múltiplos registros novos em uma tabela.
-- Inserir um único registro INSERT INTO autores (nome, data_nasc, pais) VALUES ('Machado de Assis', '1839-06-21', 'Brasil'); -- Inserir múltiplos registros de uma vez INSERT INTO autores (nome, pais) VALUES ('Clarice Lispector', 'Brasil'), ('Jorge Amado', 'Brasil'), ('Gabriel García Márquez', 'Colômbia'); -- Inserindo livros (usando id_autor) INSERT INTO livros (titulo, ano, preco, id_autor) VALUES ('Dom Casmurro', 1899, 39.90, 1), ('A Hora da Estrela', 1977, 45.00, 2), ('Gabriela', 1958, 35.50, 3);
UPDATE
Atualiza um ou mais registros existentes. Sempre use WHERE para evitar atualizar toda a tabela acidentalmente.
-- Atualizar um registro específico UPDATE livros SET preco = 42.90 WHERE id_livro = 1; -- Atualizar múltiplos campos ao mesmo tempo UPDATE livros SET preco = preco * 1.10, -- reajuste de 10% titulo = UPPER(titulo) WHERE ano < 1960;
Cuidado: Um UPDATE sem WHERE afeta todos os registros da tabela. Verifique sempre sua condição antes de executar!
DELETE
Remove um ou mais registros de uma tabela. Assim como o UPDATE, use sempre o WHERE.
-- Remover um registro específico DELETE FROM livros WHERE id_livro = 3; -- Remover todos os livros com preço abaixo de 20 DELETE FROM livros WHERE preco < 20.00;
DQL — Data Query Language
Linguagem de Consulta de DadosO comando SELECT é o coração da DQL. Ele recupera dados das tabelas com diversas cláusulas que filtram, ordenam e agrupam resultados.
SELECT básico com WHERE
Seleciona colunas específicas e filtra linhas com condições.
-- Selecionar todos os campos SELECT * FROM livros; -- Selecionar colunas específicas SELECT titulo, ano, preco FROM livros; -- Filtrar por condição SELECT titulo, preco FROM livros WHERE preco > 40.00; -- Múltiplas condições com AND / OR SELECT titulo, ano, preco FROM livros WHERE ano >= 1950 AND preco <= 50.00; -- LIKE para busca parcial SELECT * FROM autores WHERE nome LIKE '%Machado%';
ORDER BY e LIMIT
Ordena os resultados por uma ou mais colunas e limita o número de registros retornados.
-- Ordenar por preço (crescente = ASC padrão) SELECT titulo, preco FROM livros ORDER BY preco ASC; -- Ordenar por ano decrescente, pegar os 3 mais recentes SELECT titulo, ano, preco FROM livros ORDER BY ano DESC LIMIT 3;
GROUP BY e funções de agregação
Agrupa registros e aplica funções como COUNT, SUM, AVG, MIN, MAX.
-- Contar quantos livros cada autor tem SELECT id_autor, COUNT(*) AS total_livros, AVG(preco) AS preco_medio, MIN(ano) AS livro_mais_antigo FROM livros GROUP BY id_autor; -- HAVING filtra grupos (equivalente ao WHERE para GROUP BY) SELECT id_autor, COUNT(*) AS total FROM livros GROUP BY id_autor HAVING COUNT(*) > 1;
JOIN — Cruzando tabelas
Combina registros de duas ou mais tabelas com base em uma condição de relacionamento.
-- Mostrar título do livro e nome do autor juntos SELECT l.titulo, l.ano, l.preco, a.nome AS autor FROM livros l INNER JOIN autores a ON l.id_autor = a.id_autor ORDER BY a.nome, l.titulo;
| Sublinguagem | Comandos Principais | O que afeta | Reversível? |
|---|---|---|---|
| DDL | CREATE, ALTER, DROP, TRUNCATE | Estrutura (tabelas, colunas) | Não (auto-commit) |
| DML | INSERT, UPDATE, DELETE | Registros (linhas) | Sim (com transação) |
| DQL | SELECT | Apenas leitura | Não altera dados |
Dica: Alguns autores incluem a DQL como parte da DML, pois ambas fazem parte do padrão SQL. Na prática, separar o SELECT em DQL facilita a compreensão das responsabilidades de cada grupo de comandos.
Atividade Individual
Resolva as questões abaixo com base nos seus conhecimentos sobre DDL, DML e DQL
A tabela clientes precisa de duas modificações. Escreva os comandos SQL para:
a) Adicionar uma coluna chamada telefone do tipo VARCHAR(20).
b) Remover a coluna saldo da tabela clientes.
a) Insira 3 produtos na tabela produtos com dados fictícios mas coerentes (nome, categoria, preço e estoque).
b) Atualize o preço de todos os produtos da categoria 'Eletrônicos' aplicando um desconto de 15%.
Escreva as consultas SQL conforme pedido:
a) Liste o nome e o preco de todos os produtos com estoque maior que 10, ordenados do mais caro para o mais barato.
b) Mostre o nome do cliente, o nome do produto e a quantidade de cada pedido realizado. Use INNER JOIN para cruzar as três tabelas.
c) Quantos pedidos foram realizados por cada cliente? Exiba o id_cliente e o total de pedidos (use COUNT e GROUP BY).
Explique, com suas próprias palavras, a diferença entre os comandos DELETE (DML) e TRUNCATE (DDL). Em quais situações cada um deve ser utilizado? Cite um exemplo prático para cada caso.
Referências e Leituras Complementares
Material de apoio para aprofundamento
MySQL 8.0 Reference Manual. Oracle Corporation, 2024. Disponível em: dev.mysql.com/doc/refman/8.0/en. Acesso em: abr. 2025.
ELMASRI, R.; NAVATHE, S. B. Sistemas de Banco de Dados. 7. ed. São Paulo: Pearson, 2018.
DATE, C. J. Introdução a Sistemas de Bancos de Dados. 8. ed. Rio de Janeiro: Campus, 2004.
Comentários
Postar um comentário
Ficou com alguma dúvida? Quer compartilhar sua experiência? Tem uma sugestão de
melhoria? Seu comentário é muito importante!