5.1 Consultando dados com SELECT, WHERE e ORDER BY#

Praticamente, qualquer consulta em SQL inicia-se com o comando SELECT (é um equivalente ao “=” de uma função de EXCEL). Ele permite recuperar os dados de um objeto do banco de dados e na sua forma mais simples tem a seguinte sintaxe:

SELECT <nome_do_campo1, nome_do_campo2,...> 
FROM nome_da_tabela

Ao fazer uma consulta, podemos passar o nome das colunas que queremos retornar ou usar o caractere * (leia-se star) que significa “todas as colunas”. Primeiramente vamos consultar 10 nomes de produtos e seus preços da tabela Product (o comando LIMIT abaixo limita os resultados nas 10 primeiras linhas da consulta):

%%sql

SELECT ProductName,UnitPrice FROM 'Product' LIMIT 10;
ProductName UnitPrice
Chai 18
Chang 19
Aniseed Syrup 10
Chef Anton's Cajun Seasoning 22
Chef Anton's Gumbo Mix 21.35
Grandma's Boysenberry Spread 25
Uncle Bob's Organic Dried Pears 30
Northwoods Cranberry Sauce 40
Mishi Kobe Niku 97
Ikura 31

No segundo caso, queremos todas as informações sobre os produtos usando o caractere “*”:

%%sql
SELECT * FROM 'Product' LIMIT 10
Id ProductName SupplierId CategoryId QuantityPerUnit UnitPrice UnitsInStock UnitsOnOrder ReorderLevel Discontinued
1 Chai 1 1 10 boxes x 20 bags 18 39 0 10 0
2 Chang 1 1 24 - 12 oz bottles 19 17 40 25 0
3 Aniseed Syrup 1 2 12 - 550 ml bottles 10 13 70 25 0
4 Chef Anton's Cajun Seasoning 2 2 48 - 6 oz jars 22 53 0 0 0
5 Chef Anton's Gumbo Mix 2 2 36 boxes 21.35 0 0 0 1
6 Grandma's Boysenberry Spread 3 2 12 - 8 oz jars 25 120 0 25 0
7 Uncle Bob's Organic Dried Pears 3 7 12 - 1 lb pkgs. 30 15 0 10 0
8 Northwoods Cranberry Sauce 3 2 12 - 12 oz jars 40 6 0 0 0
9 Mishi Kobe Niku 4 6 18 - 500 g pkgs. 97 29 0 0 1
10 Ikura 4 8 12 - 200 ml jars 31 31 0 0 0

Em muitos casos não queremos consultar todos os dados de uma tabela, mas apenas um subconjunto desses dados ou mesmo um único dado. Para isso usamos a cláusula WHERE que funciona retornando todos os registros onde a condição é verdadeira:

SELECT <nome_do_campo1, nome_do_campo2,...> 
FROM nome_da_tabela
WHERE condicao 

Agora vamos utilizar a cláusula WHERE para listar todos os clientes do Brasil:

%%sql

SELECT Id,CompanyName,Address,City,Region,PostalCode 
FROM 'Customer' 
WHERE Country = 'Brazil'
Id CompanyName Address City Region PostalCode
COMMI Comércio Mineiro Av. dos Lusíadas, 23 Sao Paulo South America 05432-043
FAMIA Familia Arquibaldo Rua Orós, 92 Sao Paulo South America 05442-030
GOURL Gourmet Lanchonetes Av. Brasil, 442 Campinas South America 04876-786
HANAR Hanari Carnes Rua do Paço, 67 Rio de Janeiro South America 05454-876
QUEDE Que Delícia Rua da Panificadora, 12 Rio de Janeiro South America 02389-673
QUEEN Queen Cozinha Alameda dos Canàrios, 891 Sao Paulo South America 05487-020
RICAR Ricardo Adocicados Av. Copacabana, 267 Rio de Janeiro South America 02389-890
TRADH Tradição Hipermercados Av. Inês de Castro, 414 Sao Paulo South America 05634-030
WELLI Wellington Importadora Rua do Mercado, 12 Resende South America 08737-363

Podemos tornar os filtros mais poderosos usando outros operadores além da igualdade:

Operador

Descrição

Exemplo Sintaxe

=

Igual a

SELECT * FROM Customers WHERE Country = ‘Brazil’

>

Maior que

SELECT * FROM Products WHERE UnitPrice > 10

<

Menor que

SELECT * FROM Products WHERE UnitPrice < 10

>=

Maior ou igual a

SELECT * FROM Products WHERE UnitPrice >= 10

<=

Menor ou igual a

SELECT * FROM Products WHERE UnitPrice <= 10

<> ou !=

Diferente de

SELECT * FROM Customers WHERE Country <> ‘Brazil’

AND

E

SELECT * FROM Customers WHERE Country = ‘Brazil’ AND City = ‘Campinas’

OR

OU

SELECT * FROM Customers WHERE City = ‘Campinas’ OR City = ‘Resende’

IN

Contém algum de

SELECT * FROM Customers WHERE City IN (‘Campinas’, ‘Resende’)

NOT

Não contém nenhum de

SELECT * FROM Customers WHERE City NOT IN (‘Campinas’, ‘Resende’)

BETWEEN

Entre

SELECT * FROM Products WHERE UnitPrice BETWEEN 10 AND 20

LIKE

Corresponde a padrão textual

SELECT * FROM Products WHERE ProductName LIKE ‘a%’

Um terceiro comando fundamental do SQL é o de ordenação: ORDER BY. Com ele conseguimos obter respostas a perguntas como “Quais os 5 produtos mais caros?” ou “Quais foram os pedidos com maior valor de compra?” e muito mais. A sua sintaxe é muito simples:

SELECT <nome_do_campo1, nome_do_campo2,...> 
FROM nome_da_tabela
ORDER BY  <nome_do_campo1, nome_do_campo2,...> 

Retomando nosso primeiro exemplo, queremos consultar os 5 primeiros produtos em ordem alfabética de nosso catálogo:

%%sql
SELECT ProductName,UnitPrice
FROM 'Product'  
ORDER BY ProductName 
LIMIT 5;
ProductName UnitPrice
Alice Mutton 39
Aniseed Syrup 10
Boston Crab Meat 18.4
Camembert Pierrot 34
Carnarvon Tigers 62.5

Para inverter a ordem usamos o operador DESC, necessário se quisermos consultar os 10 produtos com maior preço do catálogo:

%%sql
SELECT ProductName,UnitPrice
FROM 'Product' 
ORDER BY UnitPrice 
DESC 
LIMIT 10;
ProductName UnitPrice
Côte de Blaye 263.5
Thüringer Rostbratwurst 123.79
Mishi Kobe Niku 97
Sir Rodney's Marmalade 81
Carnarvon Tigers 62.5
Raclette Courdavault 55
Manjimup Dried Apples 53
Tarte au sucre 49.3
Ipoh Coffee 46
Rössle Sauerkraut 45.6