Menu

Comandos SQL: lista dos comandos mais usados com exemplos

Os comandos SQL que você usa no dia a dia, agrupados pelo que fazem (DDL, DML, DQL e TCL), cada um com um exemplo que você pode executar no SQLite.

Esta página tem editores executáveis - edite, execute e veja a saída na hora.

Os comandos SQL em resumo

Os comandos SQL se dividem em alguns grupos, de acordo com o que fazem. A tabela lista os que você mais vai usar, e cada seção abaixo executa um deles.

ComandoGrupoO que faz
CREATE TABLEDDLDefine uma tabela nova e as suas colunas
ALTER TABLEDDLAdiciona ou renomeia uma coluna, ou renomeia uma tabela
DROP TABLEDDLApaga uma tabela e todas as suas linhas
INSERTDMLAdiciona linhas novas
UPDATEDMLAltera valores em linhas existentes
DELETEDMLRemove linhas
SELECTDQLLê linhas, filtradas com WHERE e ordenadas com ORDER BY
BEGIN, COMMIT, ROLLBACKTCLAgrupa alterações para que todas funcionem ou todas falhem juntas

DDL é a linguagem de definição de dados, DML é a linguagem de manipulação de dados, DQL é a linguagem de consulta de dados e TCL é a linguagem de controle de transações. Os nomes importam menos que a divisão: DDL muda a forma do banco de dados, DML muda o que está dentro dele.

CREATE TABLE: definir uma tabela

CREATE TABLE dá nome à tabela e lista as suas colunas com os tipos e as regras de cada uma. Todos os outros comandos desta página precisam de uma tabela para trabalhar.

A página sobre CREATE TABLE cobre regras como NOT NULL, UNIQUE e DEFAULT.

INSERT: adicionar linhas

INSERT INTO adiciona uma linha ou várias. Liste as colunas e depois os valores na mesma ordem.

A coluna id se preencheu sozinha: uma INTEGER PRIMARY KEY recebe o próximo número quando você não informa o valor. Veja mais em INSERT.

SELECT: ler linhas

SELECT é o comando que você mais vai escrever. Escolha as colunas, filtre as linhas com WHERE e ordene com ORDER BY.

Só voltam as linhas que passam no teste do WHERE, com a nota mais alta primeiro. Veja o básico do SELECT e WHERE para os detalhes.

UPDATE: alterar linhas

UPDATE define valores novos em linhas que já existem. A cláusula WHERE decide quais linhas; sem ela, todas as linhas mudam.

Quando você não tiver certeza de quais linhas um WHERE pega, rode a mesma condição em um SELECT antes. A página de UPDATE mostra mais padrões.

DELETE: remover linhas

DELETE FROM remove as linhas que atendem à cláusula WHERE. Assim como o UPDATE, ele afeta todas as linhas se a cláusula estiver faltando.

A linha de Chen sumiu e as outras ficaram intactas. Veja DELETE.

ALTER TABLE e DROP TABLE: alterar ou remover uma tabela

ALTER TABLE altera uma tabela existente sem perder as suas linhas. DROP TABLE remove a tabela por completo.

Uma coluna nova começa como NULL nas linhas existentes até você preenchê-la. ALTER e DROP TABLE lista o que o SQLite permite.

JOIN: combinar tabelas

Um JOIN lê linhas de duas tabelas ao mesmo tempo, casadas por uma coluna que elas têm em comum.

Boris não tem matrículas, então um INNER JOIN o deixa de fora. Um LEFT JOIN manteria Boris, com o curso vazio.

GROUP BY: resumir linhas

GROUP BY junta em uma só linha as linhas que têm o mesmo valor, e uma função de agregação como COUNT ou AVG resume cada grupo.

Funções de agregação e GROUP BY e HAVING vão mais longe.

BEGIN, COMMIT e ROLLBACK: agrupar alterações

Uma transação faz várias alterações contarem como uma só. COMMIT mantém todas; ROLLBACK desfaz todas.

A transferência foi confirmada e a segunda alteração foi desfeita, então Ada termina com 70 e Boris com 80. Transações explica quando usá-las.

Onde o SQLite é diferente

Os comandos desta página são SQL padrão, e o que você aprende aqui vale para o MySQL e o PostgreSQL. Os exemplos executáveis foram escritos para o SQLite, porém, e três detalhes mudam nos bancos de dados maiores:

  • Listar tabelas. Os exemplos leem sqlite_master, a tabela de esquema do próprio SQLite. O MySQL usa SHOW TABLES, e o PostgreSQL usa a view information_schema.tables (ou \dt no psql).
  • Ids automáticos. No SQLite, uma coluna declarada INTEGER PRIMARY KEY numera as linhas novas sozinha; é por isso que os exemplos de INSERT deixam id de fora. O MySQL precisa de AUTO_INCREMENT na coluna, e o PostgreSQL de uma coluna de identidade (GENERATED BY DEFAULT AS IDENTITY) ou SERIAL.
  • Permissões e mudanças de esquema. O SQLite não tem GRANT nem REVOKE, porque um banco SQLite é um único arquivo sem contas de usuário, e o ALTER TABLE dele não consegue mudar o tipo de uma coluna.

Perguntas frequentes

Quais são os comandos SQL básicos?

Cinco cobrem quase todo o trabalho do dia a dia: CREATE TABLE para definir uma tabela, INSERT para adicionar linhas, SELECT para lê-las, UPDATE para alterá-las e DELETE para removê-las. Em seguida vêm ALTER TABLE, DROP TABLE, JOIN, GROUP BY e os comandos de transação BEGIN, COMMIT e ROLLBACK.

Qual é a diferença entre DDL e DML?

DDL (linguagem de definição de dados) muda a estrutura do banco de dados: CREATE, ALTER e DROP. DML (linguagem de manipulação de dados) muda as linhas dentro das tabelas: INSERT, UPDATE e DELETE. SELECT só lê, por isso costuma aparecer separado, como DQL.

Os comandos SQL diferenciam maiúsculas de minúsculas?

Não. SELECT, select e Select funcionam igual. Escrever as palavras-chave em maiúsculas é uma convenção que as destaca dos nomes de tabelas e colunas. Já o texto entre aspas é comparado exatamente como está, então 'Ada' e 'ada' são strings diferentes no SQLite, a menos que você peça uma comparação que ignore maiúsculas e minúsculas.

Esses comandos funcionam do mesmo jeito no MySQL e no PostgreSQL?

Os comandos são SQL padrão e significam a mesma coisa nos três, então o que você aprende aqui vale para todos. Os exemplos executáveis foram escritos para o SQLite, porém: para listar tabelas lê-se sqlite_master, ids automáticos precisam de AUTO_INCREMENT no MySQL ou de uma coluna de identidade no PostgreSQL, e o SQLite não tem GRANT nem REVOKE.

Coddy programming languages illustration

Aprenda a programar com o Coddy

COMEÇAR