Consultas SQL – Vamos aprender!!!

porPaulo Henrique Corrêa Cardoso

Consultas SQL – Vamos aprender!!!

Fala pessoal, tudo bem ?

Dando continuidade nos nossos artigos referente ao conhecimento do SQL, vamos ver hoje um pouco de uma parte da linguagem SQL chamada de DQL (Data Query Language ou Linguagem de Consulta de Dados).

Essa parte da linguagem trata especificamente de comandos utilizados para realizar consultas no banco de dados.

Estrutura Básica.

A estrutura básica deste comando é a seguinte:

SELECT [campo1],[campo2],[campo3] FROM [Tabela] WHERE [condicao1] = [valorCondicao]

Olhando bem essa estrutura, vemos que a mesma é composta pela clausula SELECT, que é utilizada para definirmos os campos que queremos retornar em nossa consulta ao lado, lembrando que caso necessitemos trazer todos os campos, podemos utilizar o operador coringa *, porém o mesmos deve ser utilizado com cautela, pois em uma consulta com muitos registros e colunas, pode acabar gerando lentidões desnecessárias.

Na sequência utilizamos a clausula FROM, que definirá a tabela que gostaríamos de buscar os registros.

Depois temos a clausula opcional (mas que podemos quase sempre considerar indispensável), WHERE, a mesma é utilizada para definir os parâmetros de busca de nossa consulta.

Temos mais algumas clausulas que podemos utilizar e veremos mais a frente.

Agora veja um exemplo da utilização deste estrutura.

SELECT IdProduto, DescProduto, Preco 
FROM Produto 
WHERE IdProduto = 1

Neste exemplo, buscamos 3 colunas da nossa tabela Produto onde o IdProduto = 1

Na clausula WHERE temos alguns operadores lógicos e relacionais que podemos utilizar:

Operadores SQL
Operador Descrição Exemplo
= Igual IdProduto = 1
<> ou != Diferente IdProduto <> 1
> Maior que Preco > 1000
>= Maior ou igual que Preco >= 1000
< Menor que Preco < 1000
<= Menor ou igual que Preco <= 1000
IN Está contido IdProduto IN (1,2,3)
NOT IN Não está contido IdProduto NOT IN (2,3)
BETWEEN Intervalo entre IdProduto BETWEEN 1 AND 2
LIKE Parte do registro DescProduto LIKE ‘TV%’
AND Ambas condições verdareiras IdProduto BETWEEN 1 AND 2 AND Preco > 1000
OR Uma condição verdadeira IdProduto BETWEEN 1 AND 2 OR Preco > 1000

Agrupando registros e suas funções.

Também temos alguma funções de agregação que podemos utilizar. Estas função dependem da utilização da clausula GROUP BY que deve ser utilizada após a clausula WHERE.

MAX

Função responsável por retornar o maior valor dentro da busca e do agrupamento solicitado na consulta.

SELECT MAX(Preco) MaiorPreco, IdCategoria
FROM Produto 
WHERE Ativo = 1
GROUP BY IdCategoria

No exemplo acima estamos buscando o maior preço de produto, agrupado pela categoria.

Veja que definimos a clausula GROUP BY com o campo IdCategoria.


MIN

Função responsável por retornar o menor valor dentro da busca e do agrupamento solicitado na consulta.

SELECT MIN(Preco) MenorPreco, IdCategoria
FROM Produto 
WHERE Ativo = 1
GROUP BY IdCategoria

No exemplo acima estamos buscando o menor preço de produto, agrupado pela categoria.


AVG

Função responsável por retornar a média de um valor dentro da busca e do agrupamento solicitado na consulta.

SELECT AVG(Preco) MenorPreco, IdCategoria
FROM Produto 
WHERE Ativo = 1
GROUP BY IdCategoria

No exemplo acima estamos buscando a média do preço de produto, agrupado pela categoria.


SUM

Função responsável por somar valores dentro da busca e do agrupamento solicitado na consulta.

SELECT SUM(Preco) SomaPreco, IdCategoria
FROM Produto 
WHERE Ativo = 1
GROUP BY IdCategoria

No exemplo acima estamos buscando a soma do preço dos produtos, agrupado pela categoria.


COUNT

Função responsável por contar as linhas dentro da consulta.

Esta função possui a seguinte estrutura:
COUNT ( { [ [ ALL | DISTINCT ] coluna1 ] | * } )

Desta forma conseguimos contar uma determinada coluna, e os valores nulos serão desconsiderados na contagem, ou podemos contar uma coluna utilizando a clausula DISTINCT e retornar somente a quantidade de valores diferentes ou então contar todas as linhas da consulta utilizando o operador *.

Veja os exemplos.

SELECT IdCategoria, COUNT(IdCategoria)QtdCateg 
FROM Produto 
WHERE Ativo = 1
GROUP BY IdCategoria


SELECT IdCategoria, COUNT(DISTINCT IdCategoria)QtdCateg 
FROM Produto 
WHERE Ativo = 1
GROUP BY IdCategoria

SELECT  COUNT(*)QtdProdutos 
FROM Produto 
WHERE Ativo = 1

No primeiro exemplo, utilizamos o COUNT com o campo e também utilizamos o GROUP BY para retornar a quantidade de itens dentro de uma categoria.

No segundo exemplo fizemos o mesmo SELECT, porem utilizando o DISTINCT dentro do COUNT, veja que ele trouxe tudo com o valor 1 pois desconsiderou as duplicidades no campo informado. Imagine que neste exemplo você pode desconsiderar, produtos cadastrado com o mesmo código de barras ou desconsiderar qualquer tipo de duplicidade.

No terceiro exemplo contamos todas as linhas da tabela Produto.

Agora que já aprendemos a usar as funções de agregação vamos aprender a filtrar nossa consulta a partir da agregação realiza.

Para isso vamos utilizas a clausula HAVING. Esta clausula tem a mesma função do WHERE, porém ela é especifica para as funções de agregação, isso é necessário porque a clausula WHERE não comporta esse tipo de função.

Vamos aos exemplos.

SELECT SUM(Preco) SomaPreco, IdCategoria
FROM Produto 
WHERE Ativo = 1
GROUP BY IdCategoria
HAVING SUM(Preco) > 1000


SELECT SUM(Preco) SomaPreco, IdCategoria
WHERE Ativo = 1
GROUP BY IdCategoria
HAVING SUM(Preco) < 1000

Nestes exemplos utilizamos a clausula HAVING para filtrar a soma de preço das categorias.

No primeiro caso, buscamos as categorias que possuem a soma do preço maior que 1000.

No segundo caso, buscamos as categorias que possuem a soma do preço menor que 1000.

Ordenando registro.

Por último em nossa apresentação da parte básica do DQL, temos a clausula ORDER BY que é responsável pela ordenação dos registros.

Esta clausula deve ser utilizada ao final da consulta e deve seguir a estrutura abaixo.

ORDER BY [coluna1][ASC|DESC], [coluna2][ASC|DESC]

Neste caso, ASC ou DESC são utilizados para definirmos se a ordenação da coluna será crescente ou decrescente, lembrando que não é necessário utilizar o ASC, pois o mesmo é o default para a ordenação.

Vamos ao exemplo.

SELECT IdProduto, DescProduto, Preco 
FROM Produto 
WHERE Ativo = 1
ORDER BY Preco DESC, DescProduto


SELECT IdProduto, DescProduto, Preco 
FROM Produto 
WHERE Ativo = 1
ORDER BY Preco

No primeiro exemplo definimos que o resultado venha ordenado de forma decrescente pelo preço, e caso tenha produtos com preços iguais os mesmo sejam ordenados de forma crescente pela descrição.

No segundo exemplo o resultado foi ordenado de forma crescente pelo preço.

Bom pessoal, está é a parte básica da estrutura do SELECT e da parte da DQL da Linguagem SQL.

No próximo artigo vamos avançar um pouco mais.

Espero que ajude muito a todos.

Até a próxima!!!

Sobre o Autor

Paulo Henrique Corrêa Cardoso administrator

Analista de sistemas, formado pela Faculdade de Informática e Administração Paulista . Com mais de 12 anos de experiência em SQL e diversas linguagens de programação. Administrador e desenvolvedor de ERP TOTVS Protheus.

2 Comentários até agora

CesarPostado em3:34 pm - ago 6, 2020

Excelente explicação… Parabéns!!!

Deixe uma resposta

%d blogueiros gostam disto: