4.1 LIMITE

Se você espera que sua consulta SQL retorne muitos dados, pode limitar o número máximo com antecedência. Afinal, as tabelas podem conter milhares ou até milhões de linhas.

O SQL torna muito fácil limitar o número de linhas no resultado de uma consulta usando a extensão LIMIT. Essa palavra-chave é usada bem no final da consulta SQL e tem a seguinte aparência:

LIMIT quantity

Vamos escrever uma consulta na tabela de produtos, que contém uma lista dos produtos de nossa loja. Mas como temos uma loja de muito sucesso e vendemos muitos produtos, queremos obter apenas as 10 primeiras linhas da resposta. Veja como seria essa solicitação:

SELECT * FROM product
LIMIT 10

E obtemos o seguinte resultado da consulta:

eu ia nome marca preço contar
1 Mesa IKEA 20h00 15
2 Cadeira IKEA 5,00 45
3 Sofá IKEA 80,00 10
4 Cama IKEA 75,00 10
5 Armário Bosch 125,00 15
6 Prateleira Prateleira 25h00 114
7 televisão LG 350,00 4
8 Lâmpada LG 15h00 100
9 Cômoda IKEA 99,00 10
10 Placa Bosch 199,00 10

Agora vamos solicitar apenas as primeiras 5 linhas. Veja como seria essa solicitação:

SELECT * FROM product
LIMIT 5

Obtemos o seguinte resultado da consulta:

eu ia nome marca preço contar
1 Mesa IKEA 20h00 15
2 Cadeira IKEA 5,00 45
3 Sofá IKEA 80,00 10
4 Cama IKEA 75,00 10
5 Armário Bosch 125,00 15

4.2 DESVIO

Da última vez, aprendemos como limitar o número de linhas na resposta do servidor. E agora, em vez de milhares de linhas da tabela de produtos, podemos obter as 10 primeiras linhas e exibi-las ao usuário. É perfeitamente. Mas como exibimos as segundas 10 linhas? E o terceiro?

Se escrevermos LIMIT 20, ou LIMIT 30, o servidor não retornará 20 e 30 linhas respectivamente?

É para esse caso que o SQL possui uma palavra-chave especial OFFSETcom a qual você pode solicitar ao servidor que pule N linhas em sua resposta. Esta palavra-chave é usada no final da consulta SQL (depois de LIMIT) e se parece com:

OFFSET quantity

Vamos escrever uma consulta na tabela de produtos e tentar obter os registros de 11 a 15. Em outras palavras, estamos pedindo ao servidor que retorne 5 linhas para nós, mas pule as primeiras 10 linhas da resposta primeiro. Veja como seria essa solicitação:

SELECT * FROM product
LIMIT 5
OFFSET 10

Obtemos o seguinte resultado da consulta:

eu ia nome marca preço contar
onze Cadeirão Bosch 44,00 8
12 vaso de flores flor inteligente 99,00 9
13 Ficar IKEA 100,00 10

O servidor retornou apenas 3 linhas, o que significa que havia 13 linhas no total em nossa tabela. O servidor pulou os primeiros 10 e retornou os próximos 5.

4.3 SELECIONE DISTINTO

Outra palavra-chave útil é DISTINCT. É usado quando há registros duplicados na tabela e queremos remover as duplicatas.

De onde vêm as duplicatas em nossa tabela? Pode não haver duplicatas na tabela, mas como resultado da consulta, é fácil. Vamos escrever uma consulta que retornará as marcas de todos os produtos que vendemos. Veja como seria essa solicitação:

SELECT brand FROM product

Obtemos o seguinte resultado da consulta:

marca
IKEA
IKEA
IKEA
IKEA
Bosch
Bosch
LG
LG
IKEA
Bosch
Bosch
flor inteligente
IKEA

É fácil ver que existem linhas duplicadas nesta tabela. É para garantir que não haja duplicatas e você precise usar a palavra-chave DISTINCT. Veja como ficará a solicitação corrigida:

SELECT DISTINCT brand
FROM product

Obtemos o seguinte resultado da consulta:

marca
IKEA
Bosch
LG
flor inteligente

Muito melhor. Não é? ;)

4.4 PEDIDO POR

E finalmente chegamos à classificação . Para classificar os resultados de uma consulta, você precisa usar a palavra-chave ORDER BY. Tecnicamente, são duas palavras, mas a essência não é importante. Duas palavras, um operador.

Deve ser escrito após a palavra-chave WHERE, mas antes LIMITe OFFSET. Se você escrever ORDER BYdepois de LIMIT, o servidor SQL simplesmente retornará um erro para você.

Em geral, esse operador se parece com isso:

ORDER BY column order

Onde coluna é o nome da coluna na tabela/resultado de classificação. E a ordem é a ordem de classificação.

A ordem de classificação pode ser de três tipos:

  • ASC(de Ascendente) - ascendente;
  • DESC(de Descendente) - descendente;
  • Não especificado - será usadoASC

Vamos escrever uma consulta que retornará uma lista de produtos classificados por preço em ordem crescente. Veja como seria essa solicitação:

SELECT * FROM product
ORDER BY price ASC
LIMIT 10

Obtemos o seguinte resultado da consulta:

eu ia nome marca preço contar
2 Cadeira IKEA 5,00 45
8 Lâmpada LG 15h00 100
1 Mesa IKEA 20h00 15
6 Prateleira Bosch 25h00 114
onze Cadeirão Bosch 44,00 8
4 Cama IKEA 75,00 10
3 Sofá IKEA 80,00 10
12 vaso de flores flor inteligente 99,00 9
9 Cômoda IKEA 99,00 10
13 Ficar IKEA 100,00 10

Obteremos o mesmo resultado se não especificarmos a ordem de classificação - pularemos a palavra ASC.

4.5 ORDER BY em várias colunas

O operador ORDER BYpermite classificar o resultado por várias colunas. Isso pode ser muito útil quando a primeira coluna tiver muitos elementos duplicados. A forma geral deste operador é a seguinte:

ORDER BY column 1 order 1, column 2 order 2, column 3 order 3

Em outras palavras, se após a classificação pela primeira coluna você tiver vários valores idênticos próximos, eles serão classificados pela segunda coluna e assim por diante.

Vamos escrever uma consulta que classificará nossos produtos por marca e, para produtos da mesma marca, em ordem decrescente de número. Veja como seria essa solicitação:

SELECT * FROM product
ORDER BY brand ASC, count
DESC

Obtemos o seguinte resultado da consulta:

eu ia nome marca preço contar
6 Prateleira Bosch 25h00 114
5 Armário Bosch 125,00 15
10 Placa Bosch 199,00 10
onze Cadeirão Bosch 44,00 8
2 Cadeira IKEA 5,00 45
1 Mesa IKEA 20h00 15
9 Cômoda IKEA 99,00 10
13 Ficar IKEA 100,00 10
4 Cama IKEA 75,00 10
3 Sofá IKEA 80,00 10
8 Lâmpada LG 15h00 100
7 televisão LG 350,00 4
12 vaso de flores flor inteligente 99,00 9

Observe atentamente a tabela - suas linhas são classificadas por nome de marca (ordem alfabética) e as linhas com o mesmo nome de marca são classificadas por número de produto em ordem decrescente (última coluna).