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.
| Comando | Grupo | O que faz |
|---|---|---|
CREATE TABLE | DDL | Define uma tabela nova e as suas colunas |
ALTER TABLE | DDL | Adiciona ou renomeia uma coluna, ou renomeia uma tabela |
DROP TABLE | DDL | Apaga uma tabela e todas as suas linhas |
INSERT | DML | Adiciona linhas novas |
UPDATE | DML | Altera valores em linhas existentes |
DELETE | DML | Remove linhas |
SELECT | DQL | Lê linhas, filtradas com WHERE e ordenadas com ORDER BY |
BEGIN, COMMIT, ROLLBACK | TCL | Agrupa 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 usaSHOW TABLES, e o PostgreSQL usa a viewinformation_schema.tables(ou\dtnopsql). - Ids automáticos. No SQLite, uma coluna declarada
INTEGER PRIMARY KEYnumera as linhas novas sozinha; é por isso que os exemplos deINSERTdeixamidde fora. O MySQL precisa deAUTO_INCREMENTna coluna, e o PostgreSQL de uma coluna de identidade (GENERATED BY DEFAULT AS IDENTITY) ouSERIAL. - Permissões e mudanças de esquema. O SQLite não tem
GRANTnemREVOKE, porque um banco SQLite é um único arquivo sem contas de usuário, e oALTER TABLEdele 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.