Você está na página 1de 5

Documentao do PostgreSQL 8.2.

0
Anterior Incio Fim Prxima

DELETE
Nome
DELETE -- exclui linhas de uma tabela

Sinopse
DELETE FROM [ ONLY ] tabela [ [ AS ] alis ] [ USING lista_do_using ] [ WHERE condio ] [ RETURNING * | expresso_de_sada [ AS nome_de_sada ] [, ...] ]

Descrio
O comando DELETE exclui da tabela especificada as linhas que satisfazem a clusula WHERE. Se a clusula WHERE estiver ausente, o efeito ser excluir todas as linhas da tabela. O resultado ser uma tabela vlida, porm vazia. Dica: O comando TRUNCATE uma extenso do PostgreSQL que fornece um mecanismo mais rpido para excluir todas as linhas da tabela. Por padro, 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 clusula ONLY. Existem duas maneiras de excluir linhas de uma tabela utilizando informaes contidas em outra tabela do banco de dados: utilizando subselees e especificando tabelas adicionais na clusula USING. Qual tcnica a mais apropriada vai depender das circunstncias especficas. A clusula opcional RETURNING faz o comando DELETE computar e retornar valores baseados em cada linha excluda. Pode ser computada qualquer expresso que utilize colunas da tabela, e/ou colunas de outras tabelas mencionadas na clusula USING. A sintaxe da lista da clusula RETURNING idntica da lista de sada do comandoSELECT. [1]

necessrio possuir o privilgio DELETE na tabela para excluir linhas da mesma, assim como o privilgio SELECT para todas as tabelas da clusula USING ou cujos valores so lidos pela condio.

Parmetros
ONLY Se for especificado, sero excludas linhas apenas da tabela especificada. Se no for especificado, todas as tabela que herdam da tabela especificada tambm sero processadas. tabela O nome (opcionalmente qualificado pelo esquema) de uma tabela existente. alis Um nome substituto para a tabela de destino. Quando fornecido um alis, este esconde inteiramente o nome verdadeiro da tabela. Por exemplo, dado DELETE FROM foo AS f ento o restante do comando DELETE dever fazer referncia a esta tabela como f, e no como foo. lista_do_using Uma lista de expresses de tabela, permitindo que colunas de outras tabelas apaream na condio WHERE. semelhante lista de tabelas que podem ser especificadas na Clusula FROM do comando SELECT; por exemplo, pode ser especificado um alis para o nome da tabela. A tabela de destino no deve ser repetida na lista_do_using, a menos que se deseje uma autojuno (self-join). condio Uma expresso retornando um valor do tipo boolean, que determina as linhas a serem excludas. expresso_de_sada A expresso a ser computada e retornada pelo comando DELETE aps cada linha ser excluda. A expresso pode utilizar qualquer nome de coluna da tabela, ou das tabelas listadas na clusula USING. Para retornar todas as colunas deve ser escrito *. nome_de_sada O nome a ser utilizado para a coluna retornada.

Sadas

Ao trmino bem-sucedido, o comando DELETE retorna uma linha de fim de comando na forma

DELETE contador

O contador o nmero de linhas excludas. Se contador for igual a 0, ento nenhuma linha correspondeu condio (isto no considerado um erro). Se o comando DELETE contiver a clusula RETURNING, o resultado ser semelhante ao do comando SELECT contendo as colunas e valores definidos na lista da clusulaRETURNING, computada sobre as linhas excludas pelo comando.

Observaes
O PostgreSQL permite que se faa referncia a colunas de outras tabelas na condio WHERE, desde que se especifique estas tabelas na clusula USING. Por exemplo, para excluir todos os filmes produzidos por um determinado produtor pode ser utilizado

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

Essencialmente o que acontece neste comando uma juno entre as tabelas filmes e produtores, com todas as linhas de filmes juntadas com sucesso sendo marcadas para excluso. Esta sintaxe no padro. Uma forma mais padro de se fazer isto :

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

Em alguns casos o estilo juno mais fcil de ser escrito ou mais rpido de executar do que o estilo subseleo.

Exemplos
Excluir todos os filmes, exceto os musicais:

DELETE FROM filmes WHERE tipo <> 'Musical';

Limpar a tabela filmes:

DELETE FROM filmes;

Excluir as tarefas completadas, retornando todos os detalhes das linhas excludas:

DELETE FROM tarefas WHERE status = 'COMPLETADA' RETURNING *;

Comando DELETE utilizando as clusulas USING e RETURNING e a condio WHERE. Este exemplo utiliza o nome do produtor armazenado na tabela produtorespara obter a identificao do produtor foo, e excluir todos os filmes deste produtor da tabela filmes. Abaixo est mostrado o arquivo filmes.sql utilizado para criar as tabelas e executar o comando DELETE: [2]

CREATE TABLE produtores ( id_produtor INT PRIMARY KEY, nome TEXT ); INSERT INTO produtores VALUES (1,'faa'); INSERT INTO produtores VALUES (2,'fee'); INSERT INTO produtores VALUES (3,'fii'); INSERT INTO produtores VALUES (4,'foo'); INSERT INTO produtores VALUES (5,'fuu'); CREATE TABLE filmes ( id_filme INT PRIMARY KEY, titulo TEXT, id_produtor INT ); INSERT INTO filmes VALUES (1,'aaa',1); INSERT INTO filmes VALUES (2,'bbb',2); INSERT INTO filmes VALUES (3,'ccc',3); INSERT INTO filmes VALUES (4,'ddd',4); INSERT INTO filmes VALUES (5,'eee',4); INSERT INTO filmes VALUES (6,'fff',5); \pset border 2 \pset title 'Linhas excludas' DELETE FROM filmes USING produtores WHERE filmes.id_produtor = produtores.id_produtor AND produtores.nome = 'foo' RETURNING *; \pset title 'Linhas remanescentes' SELECT * FROM filmes;

A seguir est mostrado o resultado do processamento do arquivo:

# psql -h Kubuntu -U teste -f filmes.sql -o filmes.out -q teste # cat filmes.out Linhas excludas +----------+--------+-------------+-------------+------+ | id_filme | titulo | id_produtor | id_produtor | nome | +----------+--------+-------------+-------------+------+ | 4 | ddd | 4 | 4 | foo | | 5 | eee | 4 | 4 | foo |

+----------+--------+-------------+-------------+------+ (2 linhas) Linhas remanescentes +----------+--------+-------------+ | id_filme | titulo | id_produtor | +----------+--------+-------------+ | 1 | aaa | 1 | | 2 | bbb | 2 | | 3 | ccc | 3 | | 6 | fff | 5 | +----------+--------+-------------+ (4 linhas)

Compatibilidade
Este comando est em conformidade com o padro SQL, exceto pelas clusulas USING e RETURNING que so extenses do PostgreSQL.

Notas
SQL Server A clusula OUTPUT retorna informao sobre, ou expresses baseadas em, cada linha afetada por um comando INSERT, UPDATE ou DELETE. Estes resultados podem ser retornados para o aplicativo que est processando para uso em atividades como mensagens de confirmao, arquivamento, e outros requisitos do aplicativo. Como alternativa, os resultados podem ser inseridos em uma tabela ou em uma varivel tabela. SQL Server 2005 Books Online OUTPUT Clause (Transact-SQL)(N. do T.) Exemplo escrito pelo tradutor, no fazendo parte do manual original.

[1]

[2]

Anterior

Principal

Prxima

DECLARE

Acima

DROP AGGREGATE