Este documento discute funções da linguagem SQL para seleção e filtragem de dados em bancos de dados. Ele explica o uso das cláusulas LIMIT, OFFSET, DISTINCT e ORDER BY para limitar, ignorar, eliminar duplicatas e ordenar resultados de consultas SQL respectivamente. Também apresenta operadores e expressões para filtrar dados com base em condições, intervalos, listas, valores nulos e padrões de string.
2. Funções da SQL
SELECT <tuplas> FROM <tabela> LIMIT <n>
SELECT <tuplas> FROM <tabela> LIMIT <n> OFFSET <m>
- A clausula LIMIT limita a quantidade de
registros (n) que serão retornados na consulta.
- A clausula OFFSET pula uma quantidade de
registros (n) antes que os mesmos sejam retornados
na consulta.
2
#CLAUSULAS LIMIT E OFFSET
3. Funções da SQL
Exibir o código, nome e o telefone dos três primeiros
clientes cadastrados na empresa.
SELECT codigo, nome, fone FROM cliente LIMIT 3;
Resultado:
codigo | nome | fone
--------+-----------------------+-----------
1 | Maria Helena Ferreira | 3225-6987
2 | Joao Paulo Correia | 3245-8999
3 | Larissa Maia | 3227-9622
3
#CLAUSULAS LIMIT E OFFSET
4. Funções da SQL
Exibir o código, nome e o telefone dos 2 primeiros
clientes cadastrados na empresa ignorando os 3
primeiros.
SELECT codigo, nome, fone FROM cliente LIMIT 2 OFFSET
3;
Resultado:
codigo | nome | fone
--------+----------------+-----------
4 | Marcos Andrade | 3338-2100
5 | LT Comercio | 3256-9981
4
#CLAUSULAS LIMIT E OFFSET
5. Funções da SQL
SELECT DISTINCT <TUPLAS> FROM <TABELA>
A clausula DISTINCT elimina as linhas duplicadas que
serão retornadas na consulta.
Exibir o nome de todos os clientes que já fizeram
pedido na empresa.
SELECT DISTINCT c.nome FROM Pedido p INNER JOIN
Cliente c ON p.cliente = c.codigo
5
#CLAUSULAS DISTINCT E DISTINCT ON
6. Funções da SQL Resultado sem DISTINCT:
nome
-----------------------
Joao Paulo Correia
LT Comercio
JR Representacoes
Larissa Maia
Maria Helena Ferreira
Marcos Andrade
Maria Helena Ferreira
JR Representacoes
Maria Helena Ferreira
Maria Helena Ferreira
JR Representacoes
Maria Helena Ferreira
Marcos Andrade
Marcos Andrade
JR Representacoes
Maria Helena Ferreira
JR Representacoes
Joao Paulo Correia
JR Representacoes
LT Comercio
Larissa Maia
Larissa Maia
Maria Helena Ferreira
JR Representacoes
Marcos Andrade
(25 rows)
6
#CLAUSULAS DISTINCT E DISTINCT ON
Resultado:
nome
-----------------------
Joao Paulo Correia
Maria Helena Ferreira
Larissa Maia
LT Comercio
JR Representacoes
Marcos Andrade
(6 rows)
7. Funções da SQL
A clausula DISTINCT pode ser usada como parte do
argumento, para eliminar as linhas repetidas,
antes da aplicação das funções de agregação.
Exibir a quantidade de clientes que fizeram
compras.
SELECT COUNT (DISTINCT c.nome) FROM Pedido AS P
INNER JOIN Cliente AS c ON p.cliente = c.codigo
Resultado: 6
Sem DISTINCT: 25
7
#CLAUSULAS DISTINCT E DISTINCT ON
8. Funções da SQL
DISTINCT ON (expressão) preserva apenas a primeira
linha de cada conjunto de linhas onde as
expressões fornecidas forem iguais.
8
#CLAUSULAS DISTINCT E DISTINCT ON
9. Funções da SQLSELECT DISTINCT c.nome, p.cliente, p.vendedor FROM
Pedido AS P INNER JOIN Cliente AS c ON p.cliente =
c.codigo order by c.nome, p.cliente;
nome | cliente | vendedor
-----------------------+---------+----------
Joao Paulo Correia | 2 | 1
Joao Paulo Correia | 2 | 3
JR Representacoes | 6 | 2
JR Representacoes | 6 | 3
JR Representacoes | 6 | 4
Larissa Maia | 3 | 2
Larissa Maia | 3 | 3
LT Comercio | 5 | 1
Marcos Andrade | 4 | 1
Marcos Andrade | 4 | 2
Marcos Andrade | 4 | 3
Maria Helena Ferreira | 1 | 2
Maria Helena Ferreira | 1 | 3
Maria Helena Ferreira | 1 | 4
(14 rows)
9
#CLAUSULAS DISTINCT E DISTINCT ON
10. Funções da SQL
SELECT DISTINCT ON(c.nome) c.nome, p.cliente,
p.vendedor FROM Pedido AS p INNER JOIN Cliente AS
c ON p.cliente = c.codigo order by c.nome,
p.cliente;
nome | cliente | vendedor
-----------------------+---------+----------
Joao Paulo Correia | 2 | 3
JR Representacoes | 6 | 4
Larissa Maia | 3 | 3
LT Comercio | 5 | 1
Marcos Andrade | 4 | 1
Maria Helena Ferreira | 1 | 4
(6 rows)
10
#CLAUSULAS DISTINCT E DISTINCT ON
11. Funções da SQL
Sintaxe:
SELECT <lista de colunas>
FROM <tabela(s)>
ORDER BY <coluna> [ASC] [DESC]
– O default é a ordenação ascendente (ASC).
11
#ORDENANDO RESULTADOS
12. Funções da SQLExibir código, nome e telefone de todos os clientes, em
ordem alfabética (nome do cliente).
SELECT codigo, nome, fone
FROM Cliente
ORDER BY nome
codigo | nome | fone
--------+-----------------------+-----------
2 | Joao Paulo Correia | 3245-8999
6 | JR Representacoes | 5841-9871
3 | Larissa Maia | 3227-9622
5 | LT Comercio | 3256-9981
4 | Marcos Andrade | 3338-2100
1 | Maria Helena Ferreira | 3225-6987
(6 rows)
12
#ORDENANDO RESULTADOS
13. Funções da SQL
Exibir código, nome, estado civil e data de nascimento de todos
os funcionários. Ordene o resultado do funcionário mais novo
para o mais velho.
SELECT codigo, nome, estCivil, dataNasc
FROM Funcionario
ORDER BY dataNasc DESC
codigo | nome | estcivil | datanasc
--------+--------------------+----------+---------------------
3 | Luiza Costa | C | 1980-04-04 00:00:00
1 | Joao da Silva | S | 1978-02-05 00:00:00
4 | Francisco da Silva | D | 1970-06-03 00:00:00
2 | Maria de Souza | C | 1970-01-01 00:00:00
5 | Carla Tavares | C | 1969-01-08 00:00:00
(5 rows)
13
#ORDENANDO RESULTADOS
14. Funções da SQLExibir código, nome e tipo de todos os produtos existentes
na empresa, ordenados pelo tipo em ordem ascendente e pelo
nome do produto em ordem descendente.
SELECT P.codigo, T.nome AS Tipo, P.nome AS Produto
FROM Produto P INNER JOIN Tipo T ON P.tipo = T.codigo
ORDER BY T.nome ASC, P.nome DESC;
codigo | tipo | produto
--------+--------------+---------------------
7 | Alimentacaoo | Pizza Sadia
1 | Cama | Toalhas Artex
3 | Decoracaoo | Abajur Alist
4 | Eletro | TV Plasma
5 | Eletro | Liquidificador
6 | Eletro | Computador Positivo
2 | Lacticinios | Iogurte Nestle
(7 rows)
14
#ORDENANDO RESULTADOS
15. SQL – Filtrando DadosSELECT <lista de colunas>
FROM <tabela(s)>
WHERE <coluna> operador <valor>
Operadores:
•
– Os operadores <, <=, >, >=, =, <> são usados para
testar valores de atributos.
– Os operadores lógicos AND, NOT, OR podem ser usados
para combinar condições.
#Filtrando Dados
15
16. SQL – Filtrando DadosObservações:
•
– Ao usarmos os operadores AND, OR e NOT numa mesma
expressão, temos a seguinte ordem de avaliação: NOT,
AND e OR.
– Para mudar a ordem de precedência dos operadores,
devemos usar os parênteses.
#Filtrando Dados
16
17. SQL – Filtrando DadosExibir o nome e a data de nascimento dos
funcionários (no formato brasileiro), que sejam
do sexo masculino e que nasceram a partir de
1950.
SELECT nome, to_char(dataNasc, 'dd/mm/yyyy') AS
dataNasc FROM Funcionario WHERE sexo = 'M'
AND dataNasc >= '01/01/1950';
#Filtrando Dados
17
18. SQL – Filtrando DadosQual outra maneira de fazer esta consulta, usando
funções de data/hora, para pegar o ano da data de
nascimento?
SELECT nome, to_char(dataNasc, 'dd/mm/yyyy') AS
dataNasc FROM Funcionario WHERE sexo = 'M'
AND DATE_PART('YEAR', dataNasc) >= 1950;
#Filtrando Dados
18
19. SELECT <lista de colunas>
FROM <tabela(s)>
WHERE <coluna> BETWEEN <expressão> AND <expressão>
Exibir nome e a quantidade em estoque dos
produtos, cujo estoque esteja entre 10 e 30
unidades, ordenados pelo nome do produto.
SELECT nome, quantest
FROM Produto
WHERE quantest BETWEEN 10 AND 30
ORDER BY nome
#Filtrando Dados com Intervalos
19
20. SELECT <lista de colunas>
FROM <tabela(s)>
WHERE <coluna> IN <lista>
Exibir nome e bairro dos funcionários que
residam em Manaíra ou Bessa, ordenados pelo
bairro.
SELECT nome, bairro
FROM Funcionario
WHERE bairro IN (‘Manaíra’, ‘Bessa’)
ORDER BY bairro
#Filtrando Dados com Listas
20
21. SELECT <lista de colunas>
FROM <tabela(s)>
WHERE <coluna> IS [NOT] NULL
– NULL: valores nulos, ou seja, não preenchidos (IS
NULL)
– NOT: opcional (p/ selecionar os valores “não nulos” - IS
NOT NULL)
#Filtrando Dados com Valores Nulos
21
22. Exemplo: Exibir os dados dos funcionários que
não possuem email.
SELECT *
FROM Funcionario
WHERE email IS NULL
Exemplo: Exibir nome e email dos funcionários
que possuem email.
SELECT nome, email
FROM Funcionario
WHERE email IS NOT NULL
#Filtrando Dados com Valores Nulos
22
23. Você acha que os funcionários com email nulo são
retornados na consulta abaixo?
SELECT nome, email
FROM Funcionario
WHERE email <> ‘franc@uol.com.br’
Qual seria a solução para que a consulta acima
também apresente estes funcionários (email =
NULL)?
SELECT nome, email
FROM Funcionario
WHERE (email <> ‘franc@uol.com.br’) OR (email IS NULL)
#Filtrando Dados com Valores Nulos
23
24. SELECT <lista de colunas>
FROM <tabela(s)>
WHERE <coluna> <LIKE ou ILIKE> <string>
Combinações:
– % (porcentagem): seqüência de caracteres.
– _ (sublinhado): combina com um único caractere
#Filtrando Dados com String
24
25. Exemplos:
– Como encontrar todos os nomes que tenham Silva em
qualquer lugar?
• Usar LIKE ‘%Silva%’
– Como encontrar todos os nomes que começam por
“J”seguido de um caractere qualquer e depois “a”?
• Usar LIKE 'J_a%';
#Filtrando Dados com String
25
26. SELECT <lista de colunas>
FROM <tabela(s)>
WHERE <coluna> SIMILAR TO <string>
Combinações:
– | denota ou.
– * denota a repetição de um campo: 0 ou mais vezes.
– * denota a repetição de um campo: 1 ou mais vezes.
– ? denota a repetição de um campo: 0 ou uma vez.
– {m} denota a repetição de um campo: exatamente m
vezes.
– {m,} denota a repetição de um campo: m ou mais
vezes.
#Filtrando Dados com String
26
27. Combinações:
– {m, n} denota a repetição de um campo: ao menos m e
não mais que n.
– () denota um grupo de itens.
– [] denota uma classe de caracteres (apenas para
expressão regular POSIX)
#Filtrando Dados com String
27
28. POSIX Regular Expressions
– ~ verifica a igualdade entre os campos (considera
maiúsculo de minúsculo).
– ~* verifica a igualdade entre os campos (não
considera maiúsculo de minúsculo).
– !~ verifica a não igualdade entre os campos
considera maiúsculo de minúsculo).
– !~* verifica a igualdade entre os campos (não
considera maiúsculo de minúsculo).
#Filtrando Dados com String
28
29. Exemplos:
– Como encontrar todos os nomes que começam com J ou M?
• Usar SIMILAR TO ‘[J|M]%';
– Como encontrar todos os nomes que começam com J até M?
• Usar SIMILAR TO '[J-M]%';
– Como encontrar todos os nomes que não começam com J e
M?
• Usar SIMILAR TO ‘[^JM]%’
#Filtrando Dados com String
29