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á usado
ASC
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).
GO TO FULL VERSION