DEV Community

Gabriel_Silvestre
Gabriel_Silvestre

Posted on • Edited on

Introdução a Manipulação de Dados - SQL

Tabela de Conteúdos


INSERT

O que é?

É um comando SQL utilizado para inserir dados em uma tabela.

Sintaxe

A sintaxe é simples, para definir a tabela e as colunas que receberão os dados devemos utilizar as palavras reservadas INSERT INTO, seguida do nome da tabela que queremos inserir os dados e por fim passamos as colunas que receberão os dados como argumento.

Após definir onde enviaremos os dados, utilizamos o comando VALUES, seguido dos valores a serem enviados como argumento.

INSERT INTO <nome da tabela> (<coluna1>, <coluna2>, ..., <colunaN>)
VALUES ('valor1', 'valor2', ..., 'valorN');
Enter fullscreen mode Exit fullscreen mode
INSERT INTO sakila.actor (first_name, last_name)
VALUES ('Tom', 'Holland');
Enter fullscreen mode Exit fullscreen mode

Variações

Inserindo múltiplas linhas

Para inserirmos múltiplas linhas em nossa tabela, podemos separar as informações passadas após o comando VALUES utilizando vírgula.

INSERT INTO <nome da tabela> (<coluna1, coluna2, >) VALUES
('valor1', 'valor2'), /* <- Nova linha */
('valor3', 'valor4'), /* <- Nova linha */
('valor5', 'valor6'); /* <- Nova linha */
Enter fullscreen mode Exit fullscreen mode
INSERT INTO sakila.actor (first_name, last_name) VALUES
('Tom', 'Holland'), /* <- Nova linha */
('Brad', 'Pitt'), /* <- Nova linha */
('Leonard', 'Dicaprio'); /* <- Nova linha */
Enter fullscreen mode Exit fullscreen mode

Ignorando linhas existentes

Ao importarmos uma grande quantidade de dados, pode ser interessante ignorarmos os erros que normalmente parariam nossa Query, dessa forma o DB automaticamente irá descartar os dados importados problemáticos e atualizar os importados com sucesso.

Para isso basta utilizar o comando IGNORE, após o INSERT e antes do INTO.

INSERT IGNORE INTO <nome da tabela> (<coluna1, coluna2, >)
VALUES ('valor1', 'valor2', );
Enter fullscreen mode Exit fullscreen mode
INSERT IGNORE INTO sakila.actor (first_name, last_name)
VALUES ('Tom', 'Holland');
Enter fullscreen mode Exit fullscreen mode

Importando de outra tabela

Podemos importar uma tabela inteira para outra tabela, desde que elas possuam a mesma quantidade de colunas e cada coluna seja do mesmo tipo. Dessa forma podemos criar cópias para testes.

Para isso utilizamos o comando INSERT INTO, seguido do SELECT FROM e por fim, podemos opcionalmente adicionar filtros com o WHERE.

INSERT INTO <tabela1> (<coluna1, coluna2>)
SELECT <coluna1>, <coluna2>
FROM <tabela2>;
Enter fullscreen mode Exit fullscreen mode
INSERT INTO sakila.actor_test (first_name, last_name)
SELECT (first_name, last_name)
FROM sakila.actor;
Enter fullscreen mode Exit fullscreen mode

Voltar ao topo


UPDATE

O que é?

É um comando para atualizar determinado dado em nosso DB.

Sintaxe

Para utilizarmos o UPDATE devemos informar a tabela que queremos acessar, a coluna queremos modificar e por fim o dado em si que sofrerá a modificação. Para selecionarmos especificamente um dado devemos utilizar um filtro, no caso o WHERE, seguido das condicionais.

UPDATE <tabela>
SET <coluna> = <novo valor>
WHERE <condicional>;
Enter fullscreen mode Exit fullscreen mode
UPDATE sakila.actor
SET first_name = 'Jorge'
WHERE first_name = 'George';
Enter fullscreen mode Exit fullscreen mode

Uma observação importante a se fazer, é que o MySQL possui uma configuração de segurança que não nos permite realizar um UPDATE ou DELETE sem informar a Key da linha que desejamos alterar.

Para desabilitar essa configuração, podemos rodar o comando SET SQL_SAFE_UPDATES = 0 em um arquivo de Query, sendo necessário rodar esse comando toda a vez que abrimos o DB.

Variações

Alterando mais de uma coluna

Para alterarmos mais de uma coluna na mesma interação podemos simplesmente adicionar mais colunas após o comando SET, separando-as por vírgula.

UPDATE <tabela>
SET <coluna1> = <novo valor>, <coluna 2> = <novo valor>
WHERE <condicional>;
Enter fullscreen mode Exit fullscreen mode
UPDATE sakila.actor
SET first_name = 'Jorge', last_name = 'Amado'
WHERE first_name = 'George' AND last_name = 'Lucas';
Enter fullscreen mode Exit fullscreen mode

Alteração em massa

Opção 1

Mesmo podendo separar as alterações por vírgula, há outra forma de realizarmos alterações em massa, no caso da sintaxe de separação por vírgula ficar muito verbosa e ilegível.

Para isso temos duas opções, podemos alterar diversas colunas com um valor único, utilizado o IN como condicional e passando as condições entre parênteses.

Dessa forma, toda a coluna que for verdadeira diante da condicional, terá seu valor alterado por aquele que nós passamos.

UPDATE <tabela>
SET <coluna> = <'novo valor'>
WHERE <condicional> IN (opção 1, opção 2, opção 3, );
Enter fullscreen mode Exit fullscreen mode
UPDATE sakila.actor
SET first_name = 'Jorge'
WHERE first_name in ('George', 'Giorge', "Jurge');
Enter fullscreen mode Exit fullscreen mode
Opção 2

Ou no caso de querermos alterar diferentes valores para cada caso, devemos utilizar uma sintaxe similar ao switch/case do JS.

Após o SET abrimos parênteses e utilizamos o comando CASE, passando a coluna de comparação, seguido do comando WHEN que deve informar a condição e por fim o THEN que informa o novo valor.

Nessa sintaxe também é necessário o uso do comando ELSE ao final dos casos, informando que todos os outros dados, que não foram listados, devem permanecer iguais.

UPDATE <tabela>
SET <coluna> = (
  CASE <coluna de comparação>
    WHEN <condição> THEN <novo valor>
    WHEN <condição> THEN <novo valor>
    WHEN <condição> THEN <novo valor>
  ELSE <coluna>
END);
Enter fullscreen mode Exit fullscreen mode
UPDATE sakila.actor
SET first_name = (
  CASE first_name
    WHEN 'George' THEN 'Jorge'
    WHEN 'John' THEN 'João'
    WHEN 'Joseph' THEN 'José'
  ELSE first_name
END);
Enter fullscreen mode Exit fullscreen mode

Fazendo updates sequenciais

Podemos ainda configurar e limitar nossos updates utilizando os comandos ORDER BY e LIMIT, dessa forma as alterações serão realizadas na ordem que forem encontradas e caso houver limitação, somente um determinado número de dados será alterado.

UPDATE <tabela>
SET <coluna> = <novo valor>
WHERE <condicional>
ORDER BY <coluna de ordenação>
LIMIT <quantidade a ser alterada>;
Enter fullscreen mode Exit fullscreen mode
UPDATE sakila.actors
SET age = 18
WHERE age >= 60
ORDER BY age
LIMIT 5;
Enter fullscreen mode Exit fullscreen mode

Voltar ao topo


DELETE

O que é?

É um comando que deleta dados de uma tabela.

Sintaxe

A sintaxe do DELETE segue a mesma ideia do UPDATE, informamos a tabela a ser acessada e através de uma condição definimos os dados a serem excluídos.

Lembrando que da mesma forma que o UPDATE possui uma limitação de segurança, imposta pelo próprio MySQL, o DELETE também a possui.

DELETE FROM <DB>.<tabela>
WHERE <coluna> = <condicional>;
Enter fullscreen mode Exit fullscreen mode
DELETE FROM sakila.actors
WHERE id = 1;
Enter fullscreen mode Exit fullscreen mode

Dependências

Diferente de outros comandos, o DELETE não possui muitas variações, porém ele tem algumas limitações, isso porque muitas vezes um dados está relacionado ao outro, logo se o excluirmos estamos deixando nosso DB incoerente.

As dependências podem ser variadas, logo o melhor a se fazer é ler o erro que o DB retorna ao tentarmos excluir um dado.

Voltar ao topo

Top comments (0)