flowchart TB
DDL[DDL<br/>Data Definition Language]
DDL --> CT[CREATE]
DDL --> ALT[ALTER]
DDL --> DR[DROP]
DDL --> TRUNC[TRUNCATE]
flowchart TB
DML[DML<br/>Data Manipulation Language]
DML --> INS[INSERT]
DML --> UPD[UPDATE]
DML --> DEL[DELETE]
DML --> MER[MERGE/UPSERT]
flowchart TB
DQL[DQL<br/>Data Query Language]
DQL --> SEL[SELECT]
DQL --> CTE[WITH / CTE]
DQL --> WIN[Window Functions]
flowchart TB
DCL[DCL<br/>Data Control Language]
DCL --> GR[GRANT]
DCL --> RV[REVOKE]
DCL --> ROLES[ROLES]
flowchart TB
TCL[TCL<br/>Transaction Control Language]
TCL --> COM[COMMIT]
TCL --> RB[ROLLBACK]
TCL --> SV[SAVEPOINT]
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.
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