DP-900: Tipos de instruções SQL (DDL, DML, DCL) e restrições

DDL, DML, DCL e TCL; ordem de processamento do SELECT e WHERE vs HAVING; restrições de chave primária, estrangeira, UNIQUE e CHECK; integridade de entidade, referencial e de domínio; NULL, índices clusterizados e desnormalização no DP-900.

O Domínio 2 do conteúdo oficial do DP-900 inclui "Identificar instruções comuns da linguagem de consulta estruturada (SQL)" e "Identificar recursos de dados relacionais". As perguntas reais não pedem que você escreva SQL. Elas pedem que você classifique e aplique regras: "Esta instrução é DDL ou DML?" ou "O que impede um pedido de referenciar um ID de cliente que não existe?". Com os conceitos certos, você responde mesmo sem experiência em desenvolvimento.

Este post é um complemento de Fundamentos de dados relacionais da nossa série de estudos do DP-900. Partindo de SELECT, INSERT, UPDATE, DELETE, JOIN, chaves e normalização vistos lá, ele percorre as categorias de instruções SQL, a ordem em que uma consulta é processada, as restrições e os três tipos de integridade, o NULL, os tipos de índice e a desnormalização, mais ou menos na ordem em que aparecem na prova.

---

 

Por que o SQL é dividido em vários grupos?

Pense na construção de um prédio novo. Primeiro se desenham as plantas e se criam andares e salas; depois pessoas e móveis entram e saem, e crachás de acesso definem quem pode entrar em cada andar. O SQL funciona do mesmo jeito: algumas instruções criam a estrutura, outras inserem e alteram dados e outras definem quem tem acesso.

SQL (Structured Query Language) é a linguagem padrão para se comunicar com bancos de dados relacionais. Ela foi padronizada pela ANSI em 1986 e pela ISO em 1987. Cada produto de banco de dados, porém, acrescenta suas próprias extensões ao padrão, o que gera dialetos diferentes.

| Dialeto | Usado por | |------|------| | Transact-SQL (T-SQL) | SQL Server, Azure SQL Database, Azure SQL Managed Instance, SQL Server em VMs do Azure | | PL/pgSQL | PostgreSQL | | PL/SQL | Oracle |

Dica de prova: "O dialeto SQL usado pelo Azure SQL Database e pela SQL Managed Instance" → Transact-SQL (T-SQL). "As organizações que padronizaram o SQL" → ANSI e ISO.

---

 

DDL, DML, DCL e TCL

O Microsoft Learn agrupa as instruções SQL em três categorias: DDL, DML e DCL. As perguntas da prova às vezes incluem TCL, que trata de transações, então aprenda as quatro juntas.

!Tipos de instruções SQL em resumo

DDL: instruções que definem a estrutura

DDL (Data Definition Language) cria, altera e remove objetos do banco de dados, como tabelas, views e procedimentos armazenados. CREATE, ALTER, DROP e RENAME são as principais instruções, e a documentação do T-SQL também classifica TRUNCATE TABLE como DDL. DROP remove um objeto de forma permanente, então, sem backup, todas as linhas de uma tabela removida também se perdem.

Neste exemplo, PRIMARY KEY marca a coluna que identifica cada linha de forma única, e NOT NULL marca uma coluna obrigatória que sempre precisa ter um valor.

DML: instruções que trabalham com linhas

DML (Data Manipulation Language) lê linhas (SELECT), adiciona (INSERT), altera (UPDATE) e remove (DELETE). SELECT, UPDATE e DELETE se aplicam a todas as linhas por padrão, então normalmente você as restringe com uma cláusula WHERE. O SQL não pergunta "tem certeza?", então um UPDATE ou DELETE sem WHERE altera ou apaga a tabela inteira.

DCL: instruções que gerenciam permissões

DCL (Data Control Language) concede permissões a usuários ou grupos (GRANT), nega permissões (DENY) ou remove permissões concedidas antes (REVOKE). Quem mais usa são os administradores de banco de dados.

TCL: instruções que confirmam ou desfazem transações

TCL (Transaction Control Language) agrupa várias operações em uma transação e as confirma com COMMIT ou as reverte com ROLLBACK. No T-SQL você começa com BEGIN TRANSACTION e pode definir um ponto de salvamento intermediário com SAVE TRANSACTION. É usada em operações como uma transferência bancária, em que o débito e o crédito precisam dar certo juntos ou ser desfeitos juntos.

| Categoria | O que faz | Principais instruções | Palavras-chave da prova | |------|------|------|------| | DDL | Define, altera e remove a estrutura dos objetos | CREATE, ALTER, DROP, RENAME, TRUNCATE TABLE | Criar tabela, adicionar coluna, mudar estrutura | | DML | Lê, adiciona, altera e remove linhas | SELECT, INSERT, UPDATE, DELETE | Consultar dados, adicionar linhas, modificar valores | | DCL | Concede, nega e revoga permissões | GRANT, DENY, REVOKE | Permissões, permitir acesso | | TCL | Confirma ou desfaz transações | COMMIT, ROLLBACK, SAVE TRANSACTION | Confirmar, reverter |

Dica de prova: "Adicionar uma coluna a uma tabela existente" → ALTER (DDL). "Dar a um usuário permissão SELECT" → GRANT (DCL). "COMMIT e ROLLBACK" → TCL, não DCL. Opções que exploram os nomes parecidos DDL, DCL e DML são comuns.

---

 

Em que ordem uma consulta é processada?

A ordem em que você escreve uma instrução SELECT não é a ordem em que o banco de dados a processa. Depois que você conhece a ordem de processamento, a diferença entre cláusulas parecidas como WHERE e HAVING fica evidente.

| Ordem de processamento | Cláusula | Função | |------|------|------| | 1 | FROM (incluindo JOIN) | De quais tabelas ler | | 2 | WHERE | Filtra linhas antes da agregação | | 3 | GROUP BY | Agrupa linhas com os mesmos valores | | 4 | HAVING | Filtra os resultados agregados (grupos) | | 5 | SELECT | Colunas e cálculos a retornar | | 6 | ORDER BY | Ordena os resultados (crescente ASC por padrão, decrescente DESC) |

Para as funções de agregação usadas com GROUP BY, lembre-se destas cinco: COUNT, SUM, AVG, MIN e MAX. Sem ORDER BY, a ordem das linhas do resultado não é garantida.

Os nomes de objetos são escritos com pontos, estreitando o escopo da esquerda para a direita. Em bancos de dados baseados no SQL Server, a ordem é banco de dados.esquema.tabela (por exemplo, SalesDB.dbo.Customer).

Dica de prova: "Filtrar linhas antes de agregar" → WHERE. "Filtrar os grupos agregados por uma condição" → HAVING. "Ordenar os resultados" → ORDER BY.

---

 

Restrições: regras que barram dados errados

Pense nas regras da entrada de um show. Você precisa de ingresso (NOT NULL), cada número de assento é usado por uma só pessoa (UNIQUE), o ingresso precisa ter sido vendido de verdade (FOREIGN KEY) e há limites de idade (CHECK). As restrições são a forma de um banco de dados aplicar regras assim automaticamente.

| Restrição | O que faz | NULL | Quantidade por tabela | |------|------|------|------| | PRIMARY KEY | Identifica cada linha de forma única | Não permitido | 1 | | FOREIGN KEY | Só aceita valores da chave primária (ou coluna UNIQUE) de outra tabela | Permitido | Várias | | UNIQUE | Impede valores duplicados em uma coluna | O SQL Server aceita só um NULL por coluna | Várias | | NOT NULL | Sempre precisa haver um valor | Não permitido | Várias | | CHECK | Os valores precisam atender a uma condição (por exemplo, Price >= 0) | NULL resulta em UNKNOWN e passa | Várias | | DEFAULT | Insere um valor padrão quando nenhum é informado | Não se aplica | 1 por coluna |

Vale guardar mais alguns pontos.

Chave composta: quando uma só coluna não distingue as linhas, duas ou mais colunas são combinadas como chave primária. Número do pedido mais número da linha, ou número do voo mais número do assento, são exemplos típicos. Ações referenciais: quando uma linha pai é excluída, você pode excluir também as linhas filhas (ON DELETE CASCADE) ou definir a chave estrangeira delas como NULL (SET NULL). Relacionamento autorreferencial: uma chave estrangeira aponta para a chave primária da própria tabela para representar uma hierarquia, como o ID do gestor em uma tabela de funcionários que referencia o ID de outro funcionário.

Dica de prova: "Chave primária vs UNIQUE" → as duas impedem duplicatas, mas a chave primária não aceita NULL e só existe uma por tabela. "O preço precisa ser zero ou mais" → CHECK.

---

 

Os três tipos de integridade e o NULL

Integridade significa que os dados permanecem corretos e consistentes. Os bancos de dados relacionais usam restrições para proteger três tipos de integridade.

| Integridade | Significado | Como é garantida | |------|------|------| | Integridade de entidade | Toda linha é identificada de forma única | Chave primária (sem duplicatas, sem NULL) | | Integridade referencial | As relações entre tabelas são sempre válidas | Chave estrangeira (sem valores ausentes na tabela pai) | | Integridade de domínio | Os valores das colunas ficam dentro do intervalo permitido | Tipos de dados, CHECK, NOT NULL, DEFAULT |

Sem integridade referencial surgem registros órfãos, como pedidos que apontam para clientes que não existem. Uma restrição de chave estrangeira bloqueia essas linhas e também bloqueia, ou trata, tentativas de excluir uma linha pai que ainda é referenciada por linhas filhas. Bancos de dados não relacionais geralmente não suportam restrições de chave estrangeira, então é a aplicação que precisa cuidar dessa consistência.

NULL não é zero nem string vazia

NULL é um marcador para um valor ausente ou desconhecido. O número 0 e uma string de comprimento zero ('') são valores reais, então não são NULL. Comparar qualquer coisa com NULL resulta em UNKNOWN, e não em verdadeiro ou falso, por isso para encontrar linhas com NULL você usa IS NULL ou IS NOT NULL em vez de = NULL.

Dica de prova: "Impedir que pedidos contenham IDs de cliente que não estão na tabela Customer" → integridade referencial (chave estrangeira). "Uma chave primária não pode ser NULL" → integridade de entidade. "A condição que encontra linhas sem valor" → IS NULL.

---

 

Tipos de índice e o equilíbrio da desnormalização

Índices clusterizados vs não clusterizados

Um índice ajuda você a encontrar linhas rapidamente, como o índice no fim de um livro. Bancos de dados baseados no SQL Server têm dois tipos.

| Aspecto | Índice clusterizado | Índice não clusterizado | |------|------|------| | Estrutura | Armazena as próprias linhas da tabela ordenadas pela chave | Armazena separadamente as chaves ordenadas mais ponteiros para as linhas reais | | Quantidade por tabela | 1 (as linhas só podem ser armazenadas em uma orde

Voltar à lista do blog