A linguagem de consulta estruturada SQL (Structured Query Language) possui muitos comandos para a manipulação do banco de dados, entre eles, consultas e ordenações de dados, realização de cálculos, filtragens, agrupamentos, entre outros. Segundo Silberschatz (2020), a linguagem SQL é especialmente útil, além da programação usada por profissionais que utilizam muitos dados, ela é muito importante na vida dos DBAs (administradores de banco de dados). Se você pretende seguir na área de tecnologia, é muito importante que aprenda e memorize os principais comandos do SQL.
No dia a dia, os comandos SQL são muito usados e, por isso, é importante saber as diferenças entre cada um deles, onde devem ser utilizados e como usar para, se necessário, sair de situações difíceis na empresa.
Desta forma, o objetivo desta lição é continuar a proporcionar a você o conhecimento com os comandos SQL, na qual aprenderemos: ordenação de resultados de consultas, realização de cálculos, filtragem, união, intersecção, junção, agregação, agrupamento e subqueries. Ao final desta lição, você estará apto a usar os comandos da linguagem de consulta SQL e entender como manipular os dados de um banco de dados.
Neste momento, eu te convido a refletir sobre a Linguagem SQL ser usada ativamente por Analistas de Dados e Cientistas de Dados para muitas tarefas, entre elas, a extração e manipulação de dados.
A linguagem SQL possui uma variedade de comandos e funções que permitem que os analistas e os cientistas possam ler, manipular e alterar dados de forma rápida, fácil e segura. Sem a existência dessa linguagem você acha que seria possível extrair e manipular dados com a mesma precisão que acontece quando ela é utilizada?
Como você já aprendeu a sintaxe básica dos comandos SQL, podemos nos aventurar em consultas um pouco mais complexas. E para começarmos, que tal nos aprofundarmos ainda mais nos comandos SQL?
Quando falamos em banco de dados, precisamos pensar que muitas vezes vamos recuperar ou extrair dados mais do que inserir dados. E um poderoso comando para retornar as importantes informações que foram inseridas no banco de dados é o SELECT.
O comando SELECT é um comando da linguagem de consulta estruturada SQL (Structured Query Language), que permite recuperar os dados a partir de uma ou mais tabelas do banco de dados (SILBERSCHATZ, 2020). O comando SELECT com a cláusula WHERE dá ao SGBD (Sistema Gerenciador de Banco de Dados) algo específico para ser pesquisado na base, com isso, somente as linhas dos dados que correspondem a condições são retornadas.
SELECT * FROM Aluno
WHERE nome = 'Rafael';
E temos o sinal de igual (=) na cláusula WHERE que é usado para testar se cada valor na coluna é igual à condição que foi especificada, se corresponder, a linha é retornada, caso não encontre, nenhuma linha é retornada. Na ausência da cláusula WHERE, os valores são devolvidos para todos os registros da tabela. Vários operadores de seleção podem ser aplicados na cláusula WHERE.
O comando SELECT é usado para a execução de operações de consulta no banco de dados, e estas consultas podem ser elaboradas, desde as simples até as mais avançadas. E uma das melhores formas de se aprender a linguagem SQL é por meio de exemplos. Veremos alguns que irão abranger cada tipo de consulta e todos serão realizados tendo-se como base as tabelas criadas na lição anterior.
Vamos iniciar falando sobre operadores lógicos. As condições dos comandos SQL podem utilizar comparadores lógicos similares aos usados em linguagens de programação. Os operadores lógicos usados são: = (igual), < (menor), <= (menor ou igual), > (maior), >= (maior ou igual) e <> (diferente). A linguagem SQL permite operadores que comparam strings, expressões aritméticas, além de comparativos entre datas (SILBERSCHATZ, 2020). Vamos considerar a seguinte consulta: “encontre todos os registros dos alunos os quais a idade é maior que 20”.
Select * From aluno
Where idade > 20
Segundo Silberschatz (2020), a linguagem SQL oferece ao usuário um controle sobre a ordem que os dados são retornados para o usuário. A cláusula ORDER BY é usada para que o resultado da busca seja ordenado de acordo com os parâmetros informados. Por padrão, a cláusula ORDER BY lista os resultados em ordem crescente (ASC). Contudo, podemos ordenar em ordem decrescente (DESC). Vamos ao exemplo 1: selecione o nome de todos os alunos por ordem alfabética crescente.
select nome from aluno order by nome asc
Agora vamos usar o comparador LIKE para definir uma busca por padrões em strings. E para isso, usamos o caractere ‘%’ que é utilizado em condições LIKE para definir zero ou mais caracteres. Exemplo 2: selecione o nome de todos os alunos cujo nome inicie com ‘C’ e ordene por nome em ordem decrescente.
SELECT nome_aluno FROM aluno
WHERE nome_aluno LIKE ‘C%’
ORDER BY nome_aluno DESC;
Outra condição usada em SQL é a BETWEEN que é utilizada para determinar intervalos de valores em comparações. Exemplo 3: selecione todos os alunos cuja idade esteja entre 14 e 18 anos.
select * from aluno
where idade
between 14 and 18;
E quando temos valores nulos? Ou seja, a ausência de informações nos registros. Na linguagem SQL, utilizamos a palavra null para verificar a presença de um valor nulo. Exemplo 4: selecione os registros que não possuem valor.
Select * From pedido_item
Where valor is null
Agora vamos usar filtros para incluir ou excluir múltiplos valores. Para filtrar múltiplos valores, deve-se usar os operadores IN (incluindo) e NOT IN (excluindo), seguidos dos valores entre parênteses e separados por vírgulas. Exemplo 5: selecione somente os alunos cujo nome seja Ana, Gabriel, Maria e Pedro.
select nome_aluno
from Alunos
where nome IN ('Ana', 'Gabriel', 'Maria', 'Pedro')
Podemos combinar mais de uma condição na mesma consulta usando as cláusulas AND (e) e OR (ou). Exemplo 6: selecione todos os alunos cuja idade seja maior que 15 anos e que more em Curitiba.
select nome_aluno, idade, cidade
from Alunos
where idade > 15
and cidade= 'Curitiba’
Podemos executar diversas consultas com SQL para criar relatórios que serão analisados e usados pelas empresas para a tomada de decisão (SILBERSCHATZ, 2020). E para criarmos consultas mais completas, precisamos utilizar várias tabelas em conjunto e para isso usamos o comando JOIN.
A cláusula JOIN corresponde a uma operação de junção em álgebra relacional, pois combina colunas de uma ou mais tabelas em um banco de dados relacional. O comando JOIN é um meio de combinar colunas de uma ou mais tabelas, usando valores comuns a cada uma delas. O SQL padrão ANSI especifica os tipos de JOIN: INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN e CROSS JOIN.
Exemplo 7: selecione todos os nomes de alunos que iniciem com a letra ‘A’ e seus respectivos telefones. Se o contato não tiver um telefone, mostre somente o nome e NULL como o valor do telefone.
select nome_aluno, telefone
from aluno
left join telefone
on aluno.id = telefone.aluno_fk
where aluno.nome like ‘a%’;
Uma das grandes vantagens da linguagem SQL e dos bancos de dados relacionais são as consultas com funções de agregação nas tabelas. Essas funções permitem uma análise resumida dos dados armazenados nas tabelas (SILBERSCHATZ, 2020).
As funções de agregação da linguagem SQL incluem: COUNT, SUM, MAX, MIN e AVG que executam as funções matemáticas de contagem, soma, valor máximo, valor mínimo e média aritmética, respectivamente. Para exemplificarmos as funções de agregação, vamos usar a tabela de Produtos a seguir:
Vamos iniciar pela função MAX que é usada para analisar um conjunto de valores e que retorna o maior entre eles. E a função MIN é usada para analisar um grupo de valores e retornar o menor entre eles. Exemplo 8: selecionar o produto que possui o preço de venda mais alto.
Select max(preco_venda)
from produtos
Exemplo 9: selecionar o produto que possui o preço de venda mais baixo.
Select min(preco_venda)
from produtos
A função SUM é usada para realizar a soma dos valores em uma única coluna e retorna esse resultado. Exemplo 10: selecionar todos os produtos de uma categoria e somar todos os preços de venda.
select sum(preco_venda)
from produtos
where categoria = 1
A função AVG é usada para calcular a média aritmética dos valores em uma única coluna. Exemplo 11: selecionar todos os produtos e calcular a média aritmética da coluna Preço de venda da tabela produtos.
select avg(precovenda)
from produtos
A função COUNT é usada para retornar o total de linhas selecionadas, podendo receber por parâmetro o nome da coluna ou um asterisco. Exemplo 12: selecionar o total de produtos em uma categoria.
select count(precovenda)
from produtos
where categoria = 5
A cláusula GROUP BY é usada para dividir os registros que são agregados em grupos de valores.
Exemplo 13: selecionar o produto com maior valor de venda de cada categoria.
select categoria, max(precovenda)
from produtos
group by categoria
A cláusula HAVING pode ser usada em conjunto com a cláusula GROUP BY para filtrar os resultados que serão submetidos à agregação. Exemplo 14: selecionar o maior preço de venda de cada categoria, incluindo apenas os produtos com preço de venda maior que 10:
select categoria, max(precovenda)
from produtos
group by categoria having max(precovenda) > 10
Muitas consultas em SQL são facilmente construídas se pudermos buscar primeiro alguns valores das tabelas e depois utilizá-los na consulta. E essas consultas diferenciadas podem ser formuladas por meio de consultas aninhadas, ou seja, uma consulta dentro de outra ou, como popularmente denominadas, as subqueries (SILBERSCHATZ, 2020). Usamos a cláusula IN (<subquery>). Esta cláusula espera um conjunto de valores sendo retornado pela subquery dentro dos parênteses, que deve ser compatível com o atributo sendo comparado pela cláusula IN. Exemplo 15: selecionar todos os telefones dos alunos com sobrenome = ‘Silva’.
select telefone
from telefone
where aluno in
( select id from aluno where sobrenome = ‘Silva’ );
Os comandos SQL aprendidos nesta lição são muito usados no dia a dia de um DBA e, por isso, é importante saber as diferenças entre cada um deles, onde devem ser utilizados e como usar para o caso de haver situações difíceis na empresa.
Chegamos ao fim da lição e, nesse ponto, você provavelmente já tem conteúdo suficiente para poder desenvolver algumas aplicações utilizando os comandos SQL no banco de dados visto até aqui. E para fixar mais o conteúdo visto, vamos criar as tabelas funcionário e subordinado.
Os comandos usados para criar as tabelas no banco de dados:
create table funcionario (
id_func int primary key,
nome_func varchar(30),
sobrenome_func varchar(30),
cargo_func varchar(30) );
create table subordinado (
id_sub int primary key,
nome_sub varchar(30),
sobrenome_sub varchar(30),
superior_fk int, FOREIGN KEY (superior_fk) REFERENCES funcionario(id) );
Agora, vamos selecionar o nome e sobrenome de todos os funcionários que possuem subordinados com o mesmo nome.
select f.nome, f.sobrenome
from funcionario as f, subordinado as s
where f.id = s.superior_fk
and f.nome = s.nome;
Agora, vamos reescrever a consulta do exemplo acima usando uma subquery:
select f.nome, f.sobrenome
from funcionario AS f
where id in(
SELECT superior_fk from subordinado AS s
where f.nome = s.nome );
No exemplo acima, a consulta foi reescrita com uma subquery utilizando atributos da consulta externa em sua cláusula WHERE. Procure testar os outros comandos SQL aprendidos na lição. 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.