Linguagens do SQL DDL · DML · DQL

Banco de Dados · DS1

Linguagens do SQL
DDL · DML · DQL

Entenda como estruturar, manipular e consultar dados em um banco de dados relacional

Data Definition Language Data Manipulation Language Data Query Language MySQL / MariaDB

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)

CREATE ALTER DROP TRUNCATE

DML

Insere, atualiza e remove registros dentro das tabelas

INSERT UPDATE DELETE

DQL

Consulta e recupera dados usando filtros, ordenação e agrupamentos

SELECT WHERE JOIN GROUP BY

DDL — Data Definition Language

Linguagem de Definição de Dados

Comandos 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).

Exemplo — CREATE TABLE
-- 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.

Exemplo — ALTER TABLE
-- 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.

Exemplo — DROP e TRUNCATE
-- 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 Dados

Comandos 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.

Exemplo — INSERT INTO
-- 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.

Exemplo — UPDATE
-- 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.

Exemplo — DELETE
-- 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 Dados

O 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.

Exemplo — SELECT e WHERE
-- 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.

Exemplo — ORDER BY e LIMIT
-- 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.

Exemplo — GROUP BY e agregações
-- 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.

Exemplo — INNER JOIN
-- 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

Individual 100 pontos MySQL Entrega pelo Google Forms
Banco de Dados de Referência — Loja Virtual
-- Use este banco como base para resolver as questões abaixo CREATE TABLE clientes ( id_cliente INT AUTO_INCREMENT PRIMARY KEY, nome VARCHAR(100) NOT NULL, email VARCHAR(100) UNIQUE, cidade VARCHAR(60), saldo DECIMAL(10,2) DEFAULT 0.00 ); CREATE TABLE produtos ( id_produto INT AUTO_INCREMENT PRIMARY KEY, nome VARCHAR(150) NOT NULL, categoria VARCHAR(60), preco DECIMAL(10,2) NOT NULL, estoque INT DEFAULT 0 ); CREATE TABLE pedidos ( id_pedido INT AUTO_INCREMENT PRIMARY KEY, id_cliente INT, id_produto INT, quantidade INT, data_pedido DATE, FOREIGN KEY (id_cliente) REFERENCES clientes(id_cliente), FOREIGN KEY (id_produto) REFERENCES produtos(id_produto) );
1

Modificando a estrutura — DDL

DDL · ALTER TABLE
20 pts

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.

-- Escreva seus comandos SQL aqui
2

Inserindo e atualizando dados — DML

DML · INSERT / UPDATE
25 pts

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 seus comandos SQL aqui
3

Consultando dados — DQL

DQL · SELECT / WHERE / ORDER BY
30 pts

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).

-- Escreva seus comandos SQL aqui
4

Questão dissertativa — Diferenciando DDL e DML

Conceitual · Dissertativa
25 pts

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.

Escreva sua resposta aqui

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

Postagens mais visitadas deste blog

Introdução aos Sistemas de Gerenciamento de Banco de Dados

Introdução ao HTML, CSS e JavaScript - Guia para Iniciantes

Introdução ao Excel