top of page
  • Foto do escritorGabriel Quintella

Comandos DML - Parte 2 - UPDATE e SELECT

Atualizado: 14 de abr. de 2021

Salve, Salve meu povo! Espero que esteja tudo bem com vocês. No post anterior abordamos duas partes do nosso famoso CRUD e nesse estaremos fechando o quarteto fantástico. O primeiro que abordaremos em sua totalidade será o comando UPDATE e o segundo o comando SELECT. Esse último por possuir uma abrangência maior, estaremos dividindo em pequenos e objetivos posts, tudo isso para não ficar muito extenso, trazendo para você uma leitura bacana, leve e gostosa de levar.


Seguindo por aqui, um resumo em tópicos do que pretendemos falar;


- Comando UPDATE;

- Comando SELECT;

- Explicar como funciona a estrutura de cada um.

"SELECT COLUNAS FROM TABELA";

"UPDATE TABELA SET COLUNA"

- Falar sobre a cláusula WHERE;


Bora parar de bla-bla-bla e vamos pra mão na massa!


Comando UPDATE


O UPDATE é usando com um único fim, atualização de dados nas nossas tabelas de um banco de dados.


Com essa bela definição acima, vamos conseguir responder a primeira pergunta do nosso telespectador!


Vamos lá rapaz, diga qual o seu nome, de onde fala e qual a sua pergunta!

Meu nome é Gabriel, falo do Rio de Janeiro e gostaria de saber como que faço para atualizar o nome de um Cliente.


Opa, boa pergunta! Vamos primeiro explicar a sintaxe do comando UPDATE.


-- Sintaxe Comando Update

UPDATE [DatabaseName1!]TableName1   
SET Column_Name1 = eExpression1  [, Column_Name2 = eExpression2 ...]      
WHERE FilterCondition1 [AND | OR FilterCondition2 ...] 

Agora vamos responder a pergunta do Gabriel, mais antes vamos criar uma tabela com o nome Cliente e adicionar alguns registros.


-- Elimina Tabela Cliente
DROP TABLE dbo.Cliente;

-- Criar Tabeal Cliente
CREATE TABLE dbo.Cliente
(
CodigoCliente INT NOT NULL IDENTITY(1,1)
,NomeCliente VARCHAR(100) NOT NULL
,UF VARCHAR(2) NOT NULL
,ValorDesconto DECIMAL(23,2) NOT NULL
)

-- Inserção de Dados na Tabela Cliente
INSERT INTO dbo.Cliente (NomeCliente,UF,ValorDesconto) VALUES ('Zeca Pagodinho','RJ','1.5')
INSERT INTO dbo.Cliente (NomeCliente,UF,ValorDesconto) VALUES ('Romário','RJ','1.5')
INSERT INTO dbo.Cliente (NomeCliente,UF,ValorDesconto) VALUES ('Fred','RJ','1.5')
INSERT INTO dbo.Cliente (NomeCliente,UF,ValorDesconto) VALUES ('Gabi Gol','RJ','1.5')
INSERT INTO dbo.Cliente (NomeCliente,UF,ValorDesconto) VALUES ('Alok','SP','1.2')
INSERT INTO dbo.Cliente (NomeCliente,UF,ValorDesconto) VALUES ('Daniel Alves','SP','1.2')
INSERT INTO dbo.Cliente (NomeCliente,UF,ValorDesconto) VALUES ('Casagrande','SP','1.2')
INSERT INTO dbo.Cliente (NomeCliente,UF,ValorDesconto) VALUES ('Pelé','SP','1.2')
INSERT INTO dbo.Cliente (NomeCliente,UF,ValorDesconto) VALUES ('Neymar','SP','1.2')
INSERT INTO dbo.Cliente (NomeCliente,UF,ValorDesconto) VALUES ('Alexandre Pires','MG','1.8')
INSERT INTO dbo.Cliente (NomeCliente,UF,ValorDesconto) VALUES ('Hulk','MG','1.8')
INSERT INTO dbo.Cliente (NomeCliente,UF,ValorDesconto) VALUES ('Victor','MG','1.8')
INSERT INTO dbo.Cliente (NomeCliente,UF,ValorDesconto) VALUES ('Toninho Cerezo','MG','1.8')
INSERT INTO dbo.Cliente (NomeCliente,UF,ValorDesconto) VALUES ('Jenival Lacerda','RS','2')

Após a criação vamos validar os dados como que foram cadastrados.


-- Consultar dados Tabela Cliente
SELECT * FROM dbo.Cliente


Diante dos fatos, o dono da empresa determinou que todos os clientes do RJ deveriam ter o valor de desconto ajustado para 2%.


Tudo bem, mais, como fazer isso? Calma, é bem simples! Como determinado pelo dono da empresa, precisamos ajustar o valor de desconto de todos os clientes residentes no Rio de Janeiro. Olhando para imagem acima, como que você identifica os clientes do Rio de Janeiro?



Muito bem, eu ouvi alguém falar que através da coluna UF é possível identificar.


Com a ajuda do amiguinho como que ficará o nosso script? Ótima resposta! Parabéns! Vamos precisar filtrar todos os clientes onde a coluna "UF" for igual à RJ e ajustar o valor do desconto na coluna "ValorDesconto" para 2. Vamos ver como que fica? Simbora pro código!




-- Método 01 - Atualização Clientes do RJ
UPDATE dbo.Cliente
SET ValorDesconto = 2
WHERE UF = 'RJ';

-- OR

-- Método 02 - Atualização Clientes do RJ
UPDATE Cliente
SET ValorDesconto = 2
FROM dbo.Cliente Cliente
WHERE UF = 'RJ';

Caramba, agora não entendi mais nada. Preciso fazer duas vezes o script pra alterar o valor?? Não meu jovem, apenas exemplifiquei as duas possíveis formas de escrever o comando UPDATE. A primeira digamos que é a forma mais tradicional já a segunda é uma forma que TEM que ser usada, não é opcional, quando for realizada a escrita do comando usando duas ou mais tabelas. Quando chegar no post relacionado a integridade referencial estarei comentando novamente esse ponto!


Observação importante! Notem que na instrução acima, usamos uma condição nunca comentada antes. Pois bem, apresento para vocês meu amigo WHERE. Essa cláusula diante dos 4 comandos básicos (SELECT, INSERT, DELETE e UPDATE), só não se aplica para instrução INSERT.


Essa cláusula será sempre usada quando ocorrer a necessidade de filtrar alguma informação, seja para pesquisar um determinado conjunto de dados, conforme nosso exemplo acima e ou também para eliminar algum tipo de registro. Podendo ser aplicado usando apenas uma coluna ou até uma combinação de várias.


Vamos alterar a estrutura da nossa tabela para incluir uma nova coluna e exemplificar como seria o comando o WHERE usando mais de uma coluna como filtro. Vou incluir uma coluna chamada "NomeBairro".



Basta fazer o download do arquivo e executar no seu banco. Feito isso, abaixo o resultado.



Observem as linhas destacadas. Vamos fazer outro script para atualizar o valor do desconto, porém dessa vez vamos combinar as colunas UF e NomeBairro.




-- Método 01 - Atualização Clientes do RJ
UPDATE dbo.Cliente
SET ValorDesconto = 2
WHERE UF = 'RJ'
AND NomeBairro  = 'Barra';

-- OR

-- Método 02 - Atualização Clientes do RJ
UPDATE Cliente
SET ValorDesconto = 2
FROM dbo.Cliente Cliente
WHERE UF = 'RJ'
AND NomeBairro  = 'Barra';

Reparem que novamente coloquei as duas formas possíveis! Após executar o UPDATE, vamos aos dados.



Notaram que apenas os clientes da UF igual "RJ" e bairro igual "Barra", tiveram seus descontos atualizados? Isso ocorreu pois a regra mudou e cláusula WHERE passou a receber a coluna NomeBairro igual "Barra".


Bem de forma resumida, o comando UPDATE serve para que possamos realizar a atualização de alguma informação cadastrada, podendo atualizar todos os dados de uma única vez ou apenas em um bloco de informação para isso devemos utilizar a cláusula WHERE como aliada.













Comando SELECT


Quem vem acompanhando a série "Um de Muitos", já se deparou algumas vezes com esse comando. A sua principal finalidade é consultar/selecionar uma ou várias linhas em uma ou várias tabelas.


Vamos analisar a sintaxe do comando SELECT.



-- Sintaxe comando SELECT
SELET Coluna, Coluna, ..., Coluna 
FROM Tabela

O comando SELECT possui uma particularidade. Conforme sintaxe acima, após o comando SELECT vem a listagem das colunas que podemos retornar, caso queira selecionar todas de uma única vez, basta informar "*" (asterisco) conforme abaixo.



-- Sintaxe selecionando todos os campos e registros da tabela Cliente
SELET *
FROM dbo.Cliente;


Ao executar o comando acima, todas as colunas e registros existentes na tabela serão retornados. Mais, tenha cuidado e utilize com moderação. Procure sempre selecionar o que realmente irá usar, evite desperdício de recursos, se não vai usar todas as informações, não traga, seja objetivo e especifique somente aquilo que irá precisar!


Lembre-se sempre das boas práticas e foque sempre na performance dos seus scripts!


Agora uma explicação muito importante, poucos falam sobre isso. Como que o comando é interpretado pela engine do SGBD?


Vamos dividir em três níveis. Olhando para a query posso dizer será feita uma busca do nome e da data de nascimento dos clientes. Certo? Você apostou tudo que tinha em afirmar que a query escrita é interpretada da mesma forma foi escrita. Mais nesse caso a resposta é NÃO! A lógica de interpretação durante seu processamento, segue um curso bem diferente.


Vejamos como o Microsoft SQL Server interpreta em uma consulta simples. E depois vamos avançando, saindo do nível fraldinha até chegar no nível legendário!



SELECT nome, dataNascimento
FROM Cliente

Para o exemplo acima, ao contrário do que muitos pensam, o pontapé inicial do Microsoft SQL Server em uma query é o FROM, ou seja, primeiro ele carrega em memória todos o(s) dado(s) da(s) tabela(s) e na sequência ele aplica a seleção das colunas no SELECT.


Partindo desse principio, teremos a seguinte ordem:


1° – FROM (origem dos dados);

2° – SELECT (dados que pretendemos retornar).


Curtiu? Fácil de entender? Se sua resposta foi SIM, PARABÉNS GUERREIRO! Você acabou de avançar para o próximo nível! Simbora meu povo...



SELECT nome, dataNascimento
FROM Cliente
WHERE codigoCliente = 1

Xiiiiiiii...está querendo complicar colocando mais um nível? Lógico, nem tudo são flores! Incluímos a cláusula WHERE, e agora como que ficamos? Segue o jogo...


No outro exemplo, o pontapé inicial continuará sendo o FROM (origem dos dados) porém, entretanto, agora surgiu uma nova condição para estes dados. Quando isso ocorre, o Microsoft SQL Server aplica a condição que está na clausula WHERE e logo após a(s) colunas descritas no SELECT.


Nosso ranking agora ficou assim:


1° – FROM (origem dos dados);

2° – WHERE (condições);

3° – SELECT (dados que pretendemos retornar)


Ao escrever uma instrução SELECT, sempre é preciso pensar na forma com que a engine trabalha e diante disso conseguiremos ter uma boa performance na disponibilização das informações.


E na forma mais Legendária possível, a lógica de processamento da engine segue a seguinte ordem.


1° – FROM

2° – WHERE

3° – GROUP BY

4° – HAVING

5° – SELECT

6° – ORDER BY








Com isso terminamos mais um post. Nos próximos abordaremos com mais detalhes o comando SELECT, será do tipo série, não pretendo abordar tudo que envolve o comando SELECT em um único post pra não ficar extenso e cansativo, mais juro que nos próximos pegarei pesado! Bons estudos e nos vemos em breve...


Grande Abraço!


41 visualizações0 comentário

Posts recentes

Ver tudo

Comments


bottom of page