O documento discute funções da linguagem SQL. Ele explica que as funções SQL existem para facilitar a manipulação de dados e são categorizadas em funções matemáticas, de cadeia de caracteres, de data/hora, de agregação e de formatação. Exemplos de funções de cada categoria são fornecidos como ABS, CONCAT, NOW, COUNT e TO_CHAR. Além disso, exercícios sobre funções de agregação são apresentados.
2. Funções da SQL
As funções de SQL existem para facilitar a
manipulação dos dados armazenados na base de
dados.
Elas são ferramentas projetadas para desempenhar
uma tarefa única e bem definida.
As funções de SQL são chamadas dentro de uma
consulta SQL pelo seu nome:
– Algumas recebem argumento, outras não.
– Todas elas retornam um valor.
2
#Funções
3. Categorias Gerais de Funções
Categoria de Função Descrição
Matemáticas Funções usadas para realizar cálculos matemáticos
específicos, como as funções trigonométricas e outras.
Cadeia de Caracteres Funções que realizam manipulação de cadeia de
caracteres, tais como: localizar padrões dentro de
cadeias de caracteres, inserir caracteres, concatenar
cadeias de caracteres, descobrir o comprimento,
converter para maiúsculo e minúsculo.
Data/Hora Funções utilizadas para retornar informações sobre
data/hora correntes, formatar data e hora como cadeia
de caracteres, realizar cálculos baseado em horários,
etc.
Agregação Funções utilizadas para fazer agrupamento.
Formatação Funções utilizadas para retornar informações
formatadas.
3
#Funções
4. SQL - Funções Matemáticas
Algumas funções Matemáticas (PostgreSQL):
– valor % valor: retorna o valor do resto da divisão
entre dois números.
– Valor ^ valor: retorna o valor elevado a potência.
– valor!: retorna o valor fatorial do número.
– @(valor): retorna o valor absoluto.
4
#Funções Matemáticas
5. SQL - Funções Matemáticas
Algumas funções Matemáticas (PostgreSQL):
– |/ valor: retorna o valor da raiz quadrada.
– ||/ valor: retorna o valor da raiz cúbica.
– ABS(valor): retorna o valor absoluto (positivo).
– CEIL(valor): retorna o valor arredondado.
5
#Funções Matemáticas
6. SQL - Funções Matemáticas
Algumas funções Matemáticas (PostgreSQL):
– FLOOR(valor): retorna o valor truncado.
– MOD(x, y): retorna o valor do resto de divisão de x/y.
– PI(): retorna o valor de PI.
– POWER(x, y): retorna o valor de x elevado a y.
6
#Funções Matemáticas
7. SQL - Funções Matemáticas
Algumas funções Matemáticas (PostgreSQL):
– RANDOM(): retorna o valor aleatório entre 0 e 1.
– ROUND(valor): retorna o valor arredondado.
– SQRT(valor): retorna o valor da raiz quadrada.
– TRUNC(valor): retorna o valor truncado.
7
#Funções Matemáticas
8. SQL - Funções Matemáticas
Algumas funções Matemáticas (PostgreSQL):
– GREATEST(valor1, valor2,...valorN): retorna o maior
valor de uma lista.
– LEAST(valor1, valor2,...valorN): retorna o menor valor
de uma lista.
8
#Funções Matemáticas
9. SQL - Funções Matemáticas
• Exemplo:
SELECT ABS(-1.0) AS ‘Absoluto’, FLOOR(20.25) AS
‘Inteiro’,
ROUND(0.75,1) AS ‘Arred’, POWER(3,4) AS
‘Potencia’
• Resultado:
Absoluto Inteiro Arred Potencia
1.0 20 0.8 81
9
#Funções Matemáticas
10. SQL - Funções de Caracteres
Algumas funções de Cadeia de Caracteres
(PostgreSQL):
– texto || texto: concatena duas strings.
– CHAR_LENGTH(texto): retorna a quantidade de uma cadeia
de caracteres.
– UPPER(texto): converte uma cadeia para maiúsculo.
– LOWER(expressão): converte uma cadeia para minúsculo.
10
#Funções de cadeia de caracteres
11. SQL - Funções de Caracteres
Algumas funções de Cadeia de Caracteres
(PostgreSQL):
– POSITION(procurar IN texto): retorna a posição do
caractere.
– STRPOS(texto, procurar): retorna a posição do
caractere.
– SUBSTRING(texto FROM inicio FOR fim): retorna a
substring do texto.
11
#Funções de cadeia de caracteres
12. SQL - Funções de Caracteres
Algumas funções de Cadeia de Caracteres
(PostgreSQL):
– SUBSTR(procurar, inicio, fim): retorna a substring do
texto.
– TRANSLATE(texto, procurar, modificar): Substitui todos
os caracteres.
– TRIM(texto): remove caracteres em branco da direita e
esquerda.
12
#Funções de cadeia de caracteres
13. SQL - Funções de Caracteres
Algumas funções de Cadeia de Caracteres
(PostgreSQL):
– MD5(texto): retorna o código hash usando o algoritmo
md5.
– REPEAT(texto, quantidade): repete um texto N vezes.
– REPLACE(texto, procurar, modificar): sobrescreve um
trecho de uma string.
– SPLIT_PART(texto, delimitador, posicao): divide uma
string de acordo com o delimitador retornando o campo
especificado pela posicao (começando de 1).
13
#Funções de cadeia de caracteres
14. SQL - Funções de Caracteres
Algumas funções de Cadeia de Caracteres
(PostgreSQL):
– RTRIM(texto, remover): remove os caracteres da
direita. O padrão é espaço em branco.
– LTRIM(texto, remover): remove os caracteres da
esquerda. O padrão é espaço em branco.
– INITCAP(texto): Capitaliza uma cadeia de caracteres.
– REVERSE(texto): retorna uma String reversa.
14
#Funções de cadeia de caracteres
15. SQL - Funções de CaracteresExemplo - Exibir o nome dos produtos em minúsculo,
maiúsculo e os 10 primeiros caracteres do nome também em
maiúsculo.
SELECT LOWER(nome) AS nome_minusculo,
• UPPER(nome) AS nome_maiusculo,
• UPPER(SUBSTR(nome, 1, 10)) AS nome_reduzido
FROM Produto
Resultado:
nome_minusculo nome_maiusculo nome_reduzido
abajur alist ABAJUR ALIST ABAJUR ALI
computador positivo COMPUTADOR POSITIVO COMPUTADOR
iogurte nestle IOGURTE NESTLE IOGURTE NE
liquidificador LIQUIDIFICADOR LIQUIDIFIC
15
#Funções de cadeia de caracteres
16. SQL - Funções de Data/Hora
Algumas funções de Data/Hora (PostgreSQL):
– SELECT TIMESTAMP '2014-08-08' + INTERVAL '48 hours';
INTERVAL: utiliza as unidades SECOND, MINUTE, HOUR, DAY,
WEEK, MONTH, YEAR, DECADE, CENTURY, MILLENNIUM e
plurais dessas unidades.
16
#Funções de data/hora
17. SQL - Funções de Data/Hora
Algumas funções de Data/Hora (PostgreSQL):
– AGE: Diferença entre datas.
Retorna um INTERVAL
Subtrai da data atual:
SELECT AGE (TIMESTAMP'2013-08-08')
Subtrai o período entre duas datas:
SELECT AGE(TIMESTAMP '2014-08-08', TIMESTAMP '2013-04-
09')
17
#Funções de data/hora
18. SQL - Funções de Data/HoraAlgumas funções de Data/Hora (PostgreSQL):
– EXTRACT: Extrai informações de um DATE ou TIMESTAMP.
Retorna um Double.
Extraindo dados de um TIMESTAMP:
SELECT EXTRACT (YEAR FROM (TIMESTAMP'2013-08-08'))
SELECT EXTRACT (SECOND FROM (TIMESTAMP '2013-08-08
01:06:12'));
SELECT EXTRACT (MONTH FROM (TIMESTAMP '2013-08-08
01:06:12'));
18
#Funções de data/hora
19. SQL - Funções de Data/Hora
Algumas funções de Data/Hora (PostgreSQL):
Extrair a diferença de anos entre duas datas:
SELECT EXTRACT(YEAR FROM AGE('2014-08-08', TIMESTAMP
'1987-02-23'));
19
#Funções de data/hora
20. SQL - Funções de Data/HoraAlgumas funções de Data/Hora (PostgreSQL):
Obter data e hora atual:
SELECT CURRENT_DATE;
SELECT CURRENT_TIME;
SELECT CURRENT_TIME(0);
SELECT CURRENT_TIMESTAMP;
SELECT CURRENT_TIMESTAMP(0);
NOW() (TIMESTAMP WITH ZONE);
SELECT TIMESTAMP WITH TIME ZONE '2001-02-16
20:38:40-05' AT TIME ZONE 'MST';
Retornam DATE ou TIMESTAMP
20
#Funções de data/hora
21. SQL - Funções de Data/Hora
Algumas funções de Data/Hora (PostgreSQL):
– DATE_PART: Extrai informações de um DATE ou
TIMESTAMP.
Retorna uma String.
Obter parte de um Data/Hora:
SELECT DATE_PART('DAY', TIMESTAMP '2014-08-10
09:59:00') AS dia, DATE_PART('MONTH', TIMESTAMP '2014-
08-10 09:59:00') AS mes, DATE_PART('YEAR', TIMESTAMP
'2014-08-10 09:59:00') AS ano
21
#Funções de data/hora
22. SQL - Funções de Agregação
Algumas funções de Agregação (PostgreSQL):
– COUNT(*): conta a quantidade de registros.
– COUNT(DISTINCT expressão): conta a quantidade de
registros filtrando pela expressão.
– SUM ( ): soma os valores de uma coluna de dados
numéricos.
– AVG ( ): calcula a média de uma coluna de dados
numéricos.
– MAX ( ): determina o maior valor de uma coluna.
– MIN ( ): determina o menor valor de uma coluna.
22
#Funções de Agregação
23. SQL - Funções de Agregação
Algumas funções de formatação (PostgreSQL):
– TO_CHAR(tipo_de_dado, text) – Converte um tipo de dado
em uma string seguindo um padrão.
Tipos suportados: TIMESTAMP, INTERVAL, INT, DOUBLE,
NUMERIC, TEXT.
to_char(current_timestamp, 'HH12:MI:SS')
to_char(interval '15h 2m 12s', 'HH24:MI:SS')
to_char(125, '999')
to_char(125.8::real, '999D9')
to_date('05 Dec 2000', 'DD Mon YYYY')
23
#Funções de Formatação
24. SQL - Funções de Agregação
Casting (PostgreSQL):
– CAST(expressão AS tipo) – Efetua um CAST entre tipos
de dados.
– Expressão::tipo – Efetua um cast entre tipos de
dados
SELECT CAST('10 08 2014' AS DATE);
SELECT '10 08 2014’::DATE;
24
#Funções de Casting
25. SQL - Funções de Agregação
1 – Agrupar a quantidade de pedidos de um determinado
cliente (tabela pedido) considerando que só devem ser
retornadas a tuplas que possuam clientes com mais de 2
pedidos.
Resultado esperado:
cliente | quantidade_pedidos
---------+--------------------
1 | 7
3 | 3
4 | 4
6 | 7
25
#Exercícios
27. SQL - Funções de Agregação3 – Obter as seguintes informações da loja: Um relatório contendo as
informações: o último nome do cliente, o nome do vendedor que o atendeu
e a soma de todos os produtos que o mesmo vendeu para o cliente.
Considere os descontos.
Resultado esperado:
nome | vendedor | preco
----------------+--------------------+---------
Representacoes | Francisco da Silva | 22.45
Representacoes | Luiza Costa | 92.00
Representacoes | Maria de Souza | 162.40
Correia | Joao da Silva | 395.60
Correia | Luiza Costa | 2845.00
Comercio | Joao da Silva | 1374.90
Maia | Luiza Costa | 955.00
Maia | Maria de Souza | 15.00
Andrade | Joao da Silva | 2890.60
Andrade | Luiza Costa | 663.35
Andrade | Maria de Souza | 6.90
Ferreira | Francisco da Silva | 3.70
Ferreira | Luiza Costa | 628.60
Ferreira | Maria de Souza | 1295.21
27
#Exercícios
28. SQL - Funções de Agregação
4 – Obter o valor médio de produtos vendidos de cada
funcionário. Considere os descontos.
Resultado esperado:
nome | media_venda
--------------------+-------------
Luiza Costa | 863,99
Joao da Silva | 665,87
Maria de Souza | 123,29
Francisco da Silva | 6,54
2014.2 Gustavo Sávio <prof.gustavosavio@gmail.com> 28
#Exercícios
29. SQL - Funções de Agregação
1 – SELECT CLIENTE, COUNT(cliente) AS QUANTIDADE_PEDIDOS
FROM PEDIDO GROUP BY cliente HAVING COUNT(cliente) > 2
ORDER BY CLIENTE
2 - SELECT COUNT(DISTINCT cliente) AS QUANTIDADE_CLIENTES
FROM PEDIDO;
3- SELECT REVERSE(SUBSTRING(REVERSE(cl.nome) FROM 0 FOR
POSITION(' ' IN REVERSE(cl.nome)))) AS nome, f.nome AS
vendedor, SUM(i.preco) as preco FROM cliente AS cl JOIN
pedido AS p ON cl.codigo = p.cliente JOIN funcionario AS
f ON p.vendedor = f.codigo JOIN itens AS i ON p.codigo =
i.pedido GROUP BY cl.codigo, f.codigo ORDER BY cl.nome,
f.nome;
29
#Exercícios - Gabarito
30. SQL - Funções de Agregação
4 – SELECT f.nome,TO_CHAR(AVG(i.preco::NUMERIC –
i.desconto::NUMERIC), '999D99') AS media_venda FROM
FUNCIONARIO AS f JOIN pedido p ON f.codigo = p.vendedor
JOIN itens i ON p.codigo = i.pedido GROUP BY f.nome ORDER
BY media_venda DESC;
30
#Exercícios - Gabarito