DELETE

Nome

DELETE -- exclui linhas de uma tabela

Sinopse

DELETE FROM [ ONLY ] tabela [ WHERE condição ]

Descrição

O comando DELETE exclui da tabela especificada as linhas que satisfazem a cláusula WHERE. Se a cláusula WHERE estiver ausente, o efeito será excluir todas as linhas da tabela. O resultado será uma tabela válida, porém vazia.

Dica: O comando TRUNCATE é uma extensão do PostgreSQL que fornece um mecanismo mais rápido para excluir todas as linhas da tabela.

Por padrão, o comando DELETE exclui linhas da tabela especificada e de todas as suas tabelas descendentes. Se for desejado excluir linhas apenas da tabela especificada, deve ser utilizada a cláusula ONLY.

É necessário possuir o privilégio DELETE na tabela para excluir linhas da mesma, assim como o privilégio SELECT para todas as tabelas cujos valores são lidos pela condição.

Parâmetros

tabela

O nome (opcionalmente qualificado pelo esquema) de uma tabela existente.

condição

Uma expressão retornando um valor do tipo boolean, que determina as linhas a serem excluídas.

Saídas

Ao término bem-sucedido, o comando DELETE retorna uma linha de fim de comando na forma

DELETE contador

O contador é o número de linhas excluídas. Se contador for igual a 0, então nenhuma linha correspondeu à condição (isto não é considerado um erro).

Observações

O PostgreSQL permite que se faça referência a colunas de outras tabelas na condição WHERE. Por exemplo, para excluir todos os filmes produzidos por um determinado produtor pode ser utilizado:

DELETE FROM filmes
  WHERE filmes.id_produtor = produtores.id_produtor AND produtores.nome = 'foo';

Essencialmente o que acontece neste comando é uma junção entre as tabelas filmes e produtores, com todas as linhas de filmes juntadas com sucesso sendo marcadas para exclusão. Esta sintaxe não é padrão. Uma forma mais padrão de se fazer isto é:

DELETE FROM filmes
  WHERE id_produtor IN (SELECT id_produtor FROM produtores WHERE nome = 'foo');

Em alguns casos o estilo junção é mais fácil de ser escrito ou mais rápido de executar do que o estilo subseleção. Uma objeção ao estilo junção é que não existe uma lista explícita de quais tabelas estão sendo utilizadas, o que torna este estilo propenso a erros; também não pode tratar autojunções.

Exemplos

Excluir todos os filmes, exceto os musicais:

DELETE FROM filmes WHERE tipo <> 'Musical';

Limpar a tabela filmes:

DELETE FROM filmes;

Compatibilidade

Este comando está em conformidade com o padrão SQL, exceto que capacidade de fazer referência a outras tabelas na cláusula WHERE é uma extensão do PostgreSQL.

SourceForge.net Logo CSS válido!