5.1 Consultando dados com SELECT, WHERE e ORDER BY
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 |