Skip to content

💻 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 RESTRICT vs. 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 JOIN e LEFT 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çãoFinalidadeExemplo de Aplicação
PRIMARY KEYIdentifica a linha de forma exclusiva; não aceita nulosid_aluno INTEGER PRIMARY KEY
FOREIGN KEYGarante que o valor referenciado existe na tabela paiFOREIGN KEY (id_aluno) REFERENCES alunos(id_aluno)
NOT NULLProíbe que a coluna fique sem preenchimentonome TEXT NOT NULL
UNIQUEImpede repetição de valores na colunamatricula TEXT UNIQUE
CHECKValida uma expressão lógica antes de gravarCHECK (status IN ('ABERTO', 'DEVOLVIDO', 'ATRASADO'))
DEFAULTFornece valor padrão automático caso omitidodata_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:

Material Didático Aberto sob Licença MIT.