💻 Linguagem SQL: Declaração (DDL) e Manipulação de Dados (DML)
Módulo Prático de Implementação: Da Teoria Relacional aos Scripts Executáveis no SQLite
Padrão: ANSI SQL e Dialeto SQLite 3
Público: 1º Ano do Curso Técnico em Desenvolvimento de Software
1. 🎯 Objetivos de Aprendizagem
Ao final deste capítulo, você será capaz de:
- 🗂️ Classificar os comandos da linguagem SQL entre suas sublinguagens: DDL, DML, DQL, DCL e TCL.
- 🛠️ Escrever scripts DDL criando tabelas com chaves primárias, estrangeiras e restrições de integridade (
CHECK,UNIQUE,NOT NULL,DEFAULT). - ⚙️ Configurar ações referenciais (
ON DELETE RESTRICTvs.ON DELETE CASCADE). - ✍️ Executar operações DML de inserção, alteração e exclusão controlada com cláusula
WHERE. - 📊 Construir consultas DQL combinando múltiplas tabelas com
INNER JOINeLEFT JOIN.
2. 🗺️ O Ecossistema da Linguagem SQL
A linguagem SQL (Structured Query Language) é dividida em sublinguagens com responsabilidades distintas:
3. 🛠️ DDL: Criando Tabelas com Integridade Estrita
No SQLite, é fundamental habilitar o suporte a chaves estrangeiras explicitamente:
sql
PRAGMA foreign_keys = ON;Anatomia de um CREATE TABLE Profissional
sql
CREATE TABLE livros (
id_livro INTEGER PRIMARY KEY AUTOINCREMENT,
isbn TEXT NOT NULL UNIQUE, -- 🔒 Chave candidata única
titulo TEXT NOT NULL, -- ✍️ Preenchimento obrigatório
ano_publicacao INTEGER CHECK (ano_publicacao > 1500), -- 🛡️ Regra de validação de domínio
id_categoria INTEGER NOT NULL,
FOREIGN KEY (id_categoria) REFERENCES categorias (id_categoria) -- 🔗 Integridade Referencial
ON DELETE RESTRICT -- 🚫 Impede apagar categoria em uso
ON UPDATE CASCADE -- 🔄 Propaga alterações de ID
);Tabela Comparativa de Restrições (Constraints)
| Restrição | Finalidade | Exemplo de Aplicação |
|---|---|---|
PRIMARY KEY | Identifica a linha de forma exclusiva; não aceita nulos | id_aluno INTEGER PRIMARY KEY |
FOREIGN KEY | Garante que o valor referenciado existe na tabela pai | FOREIGN KEY (id_aluno) REFERENCES alunos(id_aluno) |
NOT NULL | Proíbe que a coluna fique sem preenchimento | nome TEXT NOT NULL |
UNIQUE | Impede repetição de valores na coluna | matricula TEXT UNIQUE |
CHECK | Valida uma expressão lógica antes de gravar | CHECK (status IN ('ABERTO', 'DEVOLVIDO', 'ATRASADO')) |
DEFAULT | Fornece valor padrão automático caso omitido | data_cadastro TEXT DEFAULT (CURRENT_DATE) |
4. ✍️ DML: Manipulando Dados com Segurança
A) Inserção (INSERT INTO)
sql
INSERT INTO alunos (matricula, nome, email, turma)
VALUES ('2026-INFO-001', 'Lucas Gabriel Ferreira', 'lucas@escola.edu.br', '1º Ano Informática');B) Atualização (UPDATE)
Cuidado com o `WHERE`
Um comando UPDATE sem cláusula WHERE alterará todas as linhas da tabela de uma só vez!
sql
-- Atualiza apenas o telefone do aluno específico
UPDATE alunos
SET telefone = '(11) 91234-5678'
WHERE matricula = '2026-INFO-001';C) Exclusão (DELETE)
sql
-- Exclui apenas o item específico do empréstimo
DELETE FROM itens_emprestimo
WHERE id_item = 42;5. 🔍 DQL: Consultas e Junções (JOIN)
A consulta abaixo demonstra como o modelo relacional unifica dados de quatro tabelas normalizadas em um único relatório para a bibliotecária:
sql
SELECT
e.id_emprestimo,
a.nome AS nome_aluno,
l.titulo AS livro_emprestado,
e.data_emprestimo,
e.data_devolucao_prevista,
e.status
FROM emprestimos e
JOIN alunos a ON e.id_aluno = a.id_aluno
JOIN itens_emprestimo ie ON e.id_emprestimo = ie.id_emprestimo
JOIN livros l ON ie.id_livro = l.id_livro
WHERE e.status = 'ATRASADO'
ORDER BY e.data_devolucao_prevista ASC;6. 📂 Arquivos SQL Disponíveis para Download
Todos os scripts utilizados neste módulo estão disponíveis e testados no repositório:
- 📄 01-schema-biblioteca.sql — DDL Completo
- 📄 02-seed-biblioteca.sql — Carga Inicial DML
- 📄 03-consultas-biblioteca.sql — Relatórios DQL