Vamos dar uns toques de SQL? VII
Por Pedro Gaspar para o PPLWARE
Comandos: INSERT INTO, UPDATE e DELETE
Nas semanas anteriores temos aprendido a obter registos através de linguagem SQL, mas ate ao momento ainda não se falou de como alterar esses mesmos registos. Hoje vamos aprender a criar novos registos, alterar os mesmos e por fim a apaga-los utilizando apenas linguagem SQL.
Para apresentar alguns exemplos, utilizei a tabela tbl_pplware (com algumas alterações desde a semana passada) com os seguintes dados:
Antes de podermos fazer listagens (como temos feito nas semanas anteriores) temos que ter dados na nossa base de dados, muito bem, para inserirmos esses mesmos dados utilizamos o INSERT cuja sintaxe de utilização é a seguinte:
INSERT INTO nome_tabela (nome_campo [,nome_campo2, nome_campo3]) VALUES (valor_campo [, valor_campo2, valor_campo3]) |
EXEMPLO 1
Objectivo: Adicionar uma nova pessoa a tabela Query:
INSERT INTO tbl_pplware( nome, telefone, cor_cabelo, nascimento, morada ) VALUES ('Joana Silva', 21876598, 'louro', 1988, 'Lisboa') |
Nota: Não é necessário especificar o campo id_pessoa porque esse campo esta especificado como sendo de auto incrementação Resultado:
EXEMPLO 2
Objectivo: Adicionar 3 pessoas da família Lopes Query:
INSERT INTO tbl_pplware( nome, telefone, cor_cabelo, nascimento, morada ) VALUES ('Rui Lopes', 239456732, 'castanho', 1982, 'coimbra'), ('Silvia Lopes', 239891267, 'ruivo', 1979, 'leiria'), ('Paulo Lopes', 233876547, 'preto', 1977, 'coimbra') |
Resultado: A partir deste ponto já podemos inserir novos registos na nossa tabela, então e se tivermos necessidade de alterar alguns desses registos ?
Nesse caso utilizamos o UPDATE, o UPDATE permite-nos actualizar um ou mais campos na nossa tabela sendo que a sintaxe de utilização é a seguinte:
UPDATE tabela SET nome_campo = ‘valor’ [, nome_campo2 = ‘valor2’, nome_campo3 = valor3] [WHERE clausula] |
Por norma utilizamos o WHERE quando queremos actualizar algum campo, mas também é possível fazer uma actualização geral a tabela e nesse caso não necessitamos de utilizar o WHERE
EXEMPLO 3
Objectivo: Actualizar o numero de telefone da Joana Silva Query:
UPDATE tbl_pplware SET telefone = 219345678 WHERE nome = 'Joana Silva' |
Resultado:
(SELECT nome, telefone FROM `tbl_pplware` WHERE nome = 'joana silva')
EXEMPLO 4
Objectivo: Adicionar 2 anos ao nascimento de cada membro da família Lopes Query:
UPDATE tbl_pplware SET nascimento = nascimento +2 WHERE nome LIKE '%Lopes' |
Resultado:
(SELECT nome, nascimento FROM tbl_pplware WHERE nome LIKE '%Lopes')
Agora que ja sabemos como colocar e alterar registos com SQL só nos falta saber apagar esses mesmos registos caso seja necessário, para isso usaremos o DELETE cuje a sintaxe de utilização e a seguinte:
DELETE FROM tabela [WHERE clausula] |
Atenção caso não utilizem o WHERE eliminarão todos os registos da tabela
EXEMPLO 5
Objectivo: Apagar o registo de Joana Silva Query:
DELETE FROM `tbl_pplware` WHERE nome = 'Joana Silva' |
Estado final da tabela:
Artigos relacionados
Este artigo tem mais de um ano
Mais um excelente post de comandos SQL. Obrigado e continuem o excelente trabalho.
Não tinha conhecimento desta rubrica, mas fiquei agradado com os artigos anteriores. Talvez já esteja planeado, mas poderiam também falar de subqueries e inner joins: na minha opinião, acho que é fundamental quando trabalhamos com base de dados relacionais.
Boa continuação de artigos!
Concordo, mas muito bem explicado como se fossemos muito burros…. Acho que os inner joins são um bocado complexos de compreender.
obrigado pelo apoio 🙂
quando la chegar vou tentar explicar a coisa de forma simples 😉
Boas,
Apesar de ser um pouco off-topic, precisava de uma ajuda.
Preciso de saber como elaborar um select, que vá buscar à base de dados todos os registos que têm mais de 15 dias.
Por exemplo, tenho um campo com o nome data_entrada, e preciso de saber quais os registos que têm mais de 15 dias, comparando com a data de “hoje”.
Lê o artigo anterior que fala sobre as datas: https://pplware.sapo.pt/tutoriais/vamos-dar-uns-toques-de-sql-vi-2/
Mas seria algo do tipo: SELECT * FROM tabela WHERE data_entrada < DATE_SUB(NOW(), INTERVAL 15 DAY);
Pedro Gaspar, parabéns! Mais um bom artigo da série de SQL.
Acrescentando.. além da sintaxe demonstrada para o comando INSERT existe uma segunda opção que é a ausência dos nomes dos campos.
ex: INSERT INTO tabela VALUE (valor1, valor2, ..valorN)
@HM
Lê o artigo anterior que fala sobre as datas: https://pplware.sapo.pt/tutoriais/vamos-dar-uns-toques-de-sql-vi-2/
Mas seria algo do tipo: SELECT * FROM tabela WHERE data_entrada < DATE_SUB(NOW(), INTERVAL 15 DAY)
O a sintaxe do exemplo 2 (mais que um “INSERT” utilizando “VALUES”) é específica do MySQL, e não é aceite pelo menos em MS SQL Server.