DDL – Data Definition Language

flowchart TB
    DDL[DDL<br/>Data Definition Language]
    DDL --> CT[CREATE]
    DDL --> ALT[ALTER]
    DDL --> DR[DROP]
    DDL --> TRUNC[TRUNCATE]


DML – Data Manipulation Language

flowchart TB
    DML[DML<br/>Data Manipulation Language]
    DML --> INS[INSERT]
    DML --> UPD[UPDATE]
    DML --> DEL[DELETE]
    DML --> MER[MERGE/UPSERT]


DQL – Data Query Language

flowchart TB
    DQL[DQL<br/>Data Query Language]
    DQL --> SEL[SELECT]
    DQL --> CTE[WITH / CTE]
    DQL --> WIN[Window Functions]


DCL – Data Control Language

flowchart TB
    DCL[DCL<br/>Data Control Language]
    DCL --> GR[GRANT]
    DCL --> RV[REVOKE]
    DCL --> ROLES[ROLES]


TCL – Transaction Control Language

flowchart TB
    TCL[TCL<br/>Transaction Control Language]
    TCL --> COM[COMMIT]
    TCL --> RB[ROLLBACK]
    TCL --> SV[SAVEPOINT]


Visão rápida e diferenças essenciais

DDL define estrutura. DML altera linhas. DQL consulta. DCL dá ou remove permissões. TCL garante atomicidade por transações. Em muitos SGBDs o SELECT entra em DQL, não em DML. TRUNCATE é DDL, não dispara gatilhos de linha. MERGE é padronizado no SQL:2003, mas sintaxe varia.

DDL: criação e evolução de esquema

Crie objetos com chaves, restrições e índices. Prefira nomes claros e tipos corretos. Planeje chaves substitutas e naturais.

-- Schema e tabela
CREATE SCHEMA loja;

CREATE TABLE loja.cupom (
  cupom_id        BIGSERIAL PRIMARY KEY,
  codigo          VARCHAR(40) UNIQUE NOT NULL,
  tipo_desconto   VARCHAR(10) NOT NULL CHECK (tipo_desconto IN ('PERCENT','FIXO')),
  valor_desconto  NUMERIC(10,2) NOT NULL CHECK (valor_desconto >= 0),
  validade_ate    DATE NOT NULL,
  ativo           BOOLEAN NOT NULL DEFAULT TRUE,
  criado_em       TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);

-- Índice por uso típico: busca por código
CREATE INDEX idx_cupom_codigo ON loja.cupom (codigo);

-- Evolução
ALTER TABLE loja.cupom ADD COLUMN uso_maximo INT DEFAULT 1 CHECK (uso_maximo >= 1);
-- Remoção de coluna
ALTER TABLE loja.cupom DROP COLUMN uso_maximo;

-- Limpeza estrutural
TRUNCATE TABLE loja.cupom;      -- DDL, apaga dados sem WHERE
DROP TABLE loja.cupom;          -- remove tabela