Vimos que a linguagem de consulta estruturada SQL (Structured Query Language) possui comandos para a criação de definições de dados (criação e modificação) e para a manipulação do banco de dados (consultas e ordenações de dados), e é importante que o DBA saiba manipular esses comandos no dia a dia. Os comandos CRUD representam as quatro principais operações que são realizadas em banco de dados, que são: atualizar os dados, excluir os dados, inserir os dados e realizar a consulta de dados (DATE, 2003).
Dessa forma, o objetivo desta lição é proporcionar a você o conhecimento mais aprofundado nos comandos CRUD, usando a prática nas operações de manipulação das tabelas do banco de dados, para os primeiros passos com SQL, em que aprenderemos sobre definição de esquemas, criação de tabelas, inserção, alteração e exclusão de dados e consulta de dados. Ao final desta lição, você estará apto(a) a trabalhar com os comandos CRUD, usando a linguagem de consulta SQL, e entender como manipular os dados em um banco de dados.
Neste momento, convido-o(a) a refletir sobre: como as nossas informações são armazenadas e espalhadas por diversos bancos de dados? No nosso dia a dia, conectamo-nos a muitos aplicativos e sistemas para uso pessoal ou profissional. São muitas conexões e, constantemente, inserimos nossas informações nestes sistemas. Tudo fica registrado, no seu e-mail, o que você pesquisa e o que você posta nas redes sociais. Para que essas informações fiquem armazenadas, as operações create (criação), read (leitura), update (atualização) e delete (exclusão) são executadas nos bancos de dados. Essas operações pertencem ao agrupamento Data Manipulation Language (DML), utilizado na linguagem SQL.
Muito conhecida por DBAs e desenvolvedores, a linguagem SQL é um recurso para a execução de comandos em bancos de dados relacionais, em que criamos tabelas, colunas e índices, atribuímos permissões a usuários e realizamos consultas a dados. Se uma empresa tem mais de 100 funcionários e quer consultar o nome e o sobrenome desses funcionários, o que pode ser feito? Ela pode consultar todos os registros da tabela “funcionário”, mostrando apenas os campos com “nome” e “sobrenome”. Neste caso, podemos usar o seguinte comando:
select sobrenome, nome
from funcionário
Mas e se a empresa quisesse saber qual seria o salário de cada funcionário se eles recebessem um aumento de 10%? Neste caso, podemos usar o seguinte comando:
select sobrenome, salário
as atual, salário * 1.1
as proposta from funcionário;
É por meio da linguagem SQL que “conversamos” com o banco de dados para obtermos as informações desejadas.
Os comandos CRUD representam as quatro principais operações realizadas em banco de dados: create, read, update e delete, que, em português, pode-se traduzir, respectivamente, como: criar, ler, atualizar e excluir, tanto no modelo relacional (SQL) quanto no não-relacional (NoSQL) (SILBERSCHATZ, 2020). São comandos que englobam os principais comandos da linguagem SQL para a manipulação de dados: insert (inserir), read (select), update (alterar) e delete (remover).
O comando insert é usado para inserir dados em uma tabela. Toda vez que for adicionar algo novo, você precisa usar o comando insert, seguido do campo e do valor que você quer adicionar. Segue um exemplo de uso do comando insert:
insert into funcionario (id_Funcionario, Nome)
values (1, ‘Ana Paula’);
Vamos entender a sintaxe do comando:
insert into empregados(codigo,nome, salario)
select codigo,nome,salario
from empregados_filial
where departamento = 3
No exemplo anterior, todos os empregados da tabela empregados_filial foram cadastrados na tabela empregados. Caso o nome dos campos não for citado no comando insert, o comando select retorna os valores para todos os campos disponíveis na tabela de destino. O comando update permite atualizar registros em uma tabela, e ele só pode ser aplicado em uma única tabela. Caso seja necessário modificar os valores de atributos de mais de uma tabela, vários comandos update precisarão ser executados. Vamos a um exemplo do comando:
update funcionario
set idade = 40
where nome = ‘Paulo’;
No exemplo anterior, modificamos o valor do atributo idade cujo nome é Paulo. Ao executar o comando update no banco de dados, identificando o campo na cláusula where, temos a garantia de que um único registro será modificado. A cláusula where é opcional no comando update. Nesse caso, todas as linhas da tabela informada serão selecionadas para a execução das modificações solicitadas. Vamos a outro exemplo, agora, executando operações aritméticas.
update funcionario
set salario = salario * 1.1;
Nesse exemplo, demonstramos a execução de operações aritméticas com os valores dos atributos das tabelas, em que atualizamos para 10% acima o salário de todos os funcionários. E se você quisesse aumentar em 10% o salário dos funcionários que têm mais de 40 anos? Seria escrito da seguinte forma:
Update pedido_item
Set valor = valor * 1.1
Where valor >=10
A cláusula where é usada para atualizar somente os registros que correspondem ao filtro aplicado, sendo ela opcional. Caso ela não seja informada, toda a tabela será atualizada, ou seja, todos os registros. O comando delete é usado para remover os dados de uma ou mais linhas de uma tabela. Esse comando não exclui as estruturas do banco, apenas os dados armazenados nele. Da mesma forma, a cláusula where é usada para remover somente os registros que correspondem ao filtro aplicado, sendo ela opcional. Caso ela não seja informada, toda a tabela será removida, ou seja, o resultado será uma tabela vazia, e o comando delete só pode ser aplicado a uma única tabela de cada vez. Vamos a um exemplo do comando:
delete from aluno
where id_aluno = 5;
Podemos ter subconsultas, que são instruções select aninhadas dentro de outra instrução select, insert, delete ou update. Veja, a seguir, alguns exemplos usando predicados:
Para usar comparação: [any|some|all] (instrução sql)
Expressão [not] in (instrução sql)
Expressão [not] exists (instrução sql)
Os predicados any e some são utilizados para recuperar os registros na consulta principal que satisfaçam a comparação com qualquer registro da subconsulta. Vamos a um exemplo: usando duas tabelas, aplicaremos o comando para os registros da tabela 1 que forem maiores do que qualquer registro da subconsulta selecionada.
select * from tab1
where B > any (select B from tab2 where A>20)
Vamos a outro exemplo, em que retornarão todos os produtos com preço maior que o preço de qualquer outro produto que foi vendido com um desconto de 15%.
select * from produto where preço > any
(select preço
from pedido_detalhes
where desconto>= .15);
Podemos usar o predicado in, para recuperar apenas os registros na consulta principal, para os quais alguns registros na subconsulta contêm um valor igual. Vamos a um exemplo, em que retornarão todos os produtos com um desconto de 15% ou mais:
select * from produto where id_produto in
(select id_produto
from pedido_detalhes
where desconto>= .15);
Podemos usar o predicado NOT IN, para recuperar apenas os registros na consulta principal, para os quais não existam registros com valores iguais na subconsulta. Também podemos usar aliases de nomes de tabelas em uma subconsulta, em que pode fazer referência às tabelas listadas em uma cláusula FROM que estejam fora da subconsulta. Vamos a um exemplo:
select sobrenome, nome, salário, função
from funcionário as tabA
where salário>= (select avg(salário)
from funcionário
where tabA tabA.funcao = funcionário.função)
order by funcao;
O exemplo anterior retorna os nomes dos funcionários que tenham salários iguais ou superiores à média de salários de todos os funcionários na mesma função e à tabela funcionário foi dado o nome (alias) tabA. Vamos a outro exemplo de subconsulta, em que queremos listar os produtos cujo preço seja igual ao do Suco Laranja Apti.
select nomeproduto, preço
from produto
where preço = (select preço from [produto]
where nomeproduto = "suco laranja apti");
Para finalizar nossa lição e para você fixar bem o conteúdo, aumentaremos o valor do pedido de venda em 10% e o valor do frete em 5% para produtos de embarque no estado do Paraná. Para isso, usaremos o comando a seguir:
update pedido_venda
set valor_pedido = valor)pedido * 1.1, frete = frete * 1.05
where estado_embarque = "PR";
Agora, aumentaremos o preço de todos os produtos que não estão suspensos (inativos na tabela produtos) do fornecedor 7 em 15%. Para isso, usaremos o comando:
update produto set preço = preço * 1.5
where id_fornecedor = 7
and suspenso = no;
E se você quisesse remover todos os registros de funcionários que tenham a função de “estagiário” do banco de dados? Para isso, usaremos o seguinte comando:
delete *from funcionário
where função= "estagiário";
Agora, veremos como ficaria o comando para listar os funcionários com a função representante de vendas que tenham salários superiores aos gerentes e diretores da empresa.
select sobrenome, nome, função, salário
from funcionário
where função like "representante" and salário> all
(select salário from funcionário
where (função like "gerente")
or (função like "diretor"));
Agora, você pode testar os comandos CRUD que englobam os principais comandos da linguagem SQL para a manipulação de dados: insert (inserir), read (select), update (alterar) e delete (remover). Agora é com você.
DATE, C. J. Introdução a Sistemas de Banco de Dados. Rio de Janeiro: Elsevier, 2003.
SILBERSCHATZ, A. Sistema de Banco de Dados. São Paulo: Grupo GEN, 2020.