Upload
gustavo-savio
View
266
Download
1
Embed Size (px)
Citation preview
Funções da SQL
SELECT <tuplas> FROM <tabela> LIMIT <n>SELECT <tuplas> FROM <tabela> LIMIT <n> OFFSET <m>
- A clausula LIMIT limita a quantidade deregistros (n) que serão retornados na consulta.
- A clausula OFFSET pula uma quantidade deregistros (n) antes que os mesmos sejam retornadosna consulta.
2
#CLAUSULAS LIMIT E OFFSET
Funções da SQLExibir o código, nome e o telefone dos três primeirosclientes cadastrados na empresa.
SELECT codigo, nome, fone FROM cliente LIMIT 3;
Resultado:
codigo | nome | fone--------+-----------------------+-----------
1 | Maria Helena Ferreira | 3225-69872 | Joao Paulo Correia | 3245-89993 | Larissa Maia | 3227-9622
3
#CLAUSULAS LIMIT E OFFSET
Funções da SQLExibir o código, nome e o telefone dos 2 primeirosclientes cadastrados na empresa ignorando os 3primeiros.
SELECT codigo, nome, fone FROM cliente LIMIT 2 OFFSET3;
Resultado:
codigo | nome | fone--------+----------------+-----------
4 | Marcos Andrade | 3338-21005 | LT Comercio | 3256-9981
4
#CLAUSULAS LIMIT E OFFSET
Funções da SQLSELECT DISTINCT <TUPLAS> FROM <TABELA>
A clausula DISTINCT elimina as linhas duplicadas queserão retornadas na consulta.
Exibir o nome de todos os clientes que já fizerampedido na empresa.
SELECT DISTINCT c.nome FROM Pedido p INNER JOIN Cliente c ON p.cliente = c.codigo
5
#CLAUSULAS DISTINCT E DISTINCT ON
Funções da SQLResultado sem DISTINCT:
nome-----------------------Joao Paulo CorreiaLT ComercioJR RepresentacoesLarissa MaiaMaria Helena FerreiraMarcos AndradeMaria Helena FerreiraJR RepresentacoesMaria Helena FerreiraMaria Helena FerreiraJR RepresentacoesMaria Helena FerreiraMarcos AndradeMarcos AndradeJR RepresentacoesMaria Helena FerreiraJR RepresentacoesJoao Paulo CorreiaJR RepresentacoesLT ComercioLarissa MaiaLarissa MaiaMaria Helena FerreiraJR RepresentacoesMarcos Andrade
(25 rows)
6
#CLAUSULAS DISTINCT E DISTINCT ON
Resultado:
nome-----------------------Joao Paulo CorreiaMaria Helena FerreiraLarissa MaiaLT ComercioJR RepresentacoesMarcos Andrade(6 rows)
Funções da SQLA clausula DISTINCT pode ser usada como parte doargumento, para eliminar as linhas repetidas,antes da aplicação das funções de agregação.
Exibir a quantidade de clientes que fizeramcompras.
SELECT COUNT (DISTINCT c.nome) FROM Pedido AS PINNER JOIN Cliente AS c ON p.cliente = c.codigo
Resultado: 6Sem DISTINCT: 25
7
#CLAUSULAS DISTINCT E DISTINCT ON
Funções da SQL
DISTINCT ON (expressão) preserva apenas a primeiralinha de cada conjunto de linhas onde asexpressões fornecidas forem iguais.
8
#CLAUSULAS DISTINCT E DISTINCT ON
Funções da SQLSELECT DISTINCT c.nome, p.cliente, p.vendedor FROMPedido 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 | 1Joao Paulo Correia | 2 | 3JR Representacoes | 6 | 2JR Representacoes | 6 | 3JR Representacoes | 6 | 4Larissa Maia | 3 | 2Larissa Maia | 3 | 3LT Comercio | 5 | 1Marcos Andrade | 4 | 1Marcos Andrade | 4 | 2Marcos Andrade | 4 | 3Maria Helena Ferreira | 1 | 2Maria Helena Ferreira | 1 | 3Maria Helena Ferreira | 1 | 4
(14 rows)
9
#CLAUSULAS DISTINCT E DISTINCT ON
Funções da SQLSELECT DISTINCT ON(c.nome) c.nome, p.cliente,p.vendedor FROM Pedido AS p INNER JOIN Cliente ASc ON p.cliente = c.codigo order by c.nome,p.cliente;
nome | cliente | vendedor-----------------------+---------+----------Joao Paulo Correia | 2 | 3JR Representacoes | 6 | 4Larissa Maia | 3 | 3LT Comercio | 5 | 1Marcos Andrade | 4 | 1Maria Helena Ferreira | 1 | 4
(6 rows)
10
#CLAUSULAS DISTINCT E DISTINCT ON
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
Funções da SQLExibir código, nome e telefone de todos os clientes, emordem alfabética (nome do cliente).
SELECT codigo, nome, foneFROM ClienteORDER BY nome
codigo | nome | fone--------+-----------------------+-----------
2 | Joao Paulo Correia | 3245-89996 | JR Representacoes | 5841-98713 | Larissa Maia | 3227-96225 | LT Comercio | 3256-99814 | Marcos Andrade | 3338-21001 | Maria Helena Ferreira | 3225-6987
(6 rows)
12
#ORDENANDO RESULTADOS
Funções da SQLExibir código, nome, estado civil e data de nascimento de todosos funcionários. Ordene o resultado do funcionário mais novopara o mais velho.
SELECT codigo, nome, estCivil, dataNascFROM FuncionarioORDER BY dataNasc DESC
codigo | nome | estcivil | datanasc--------+--------------------+----------+---------------------
3 | Luiza Costa | C | 1980-04-04 00:00:001 | Joao da Silva | S | 1978-02-05 00:00:004 | Francisco da Silva | D | 1970-06-03 00:00:002 | Maria de Souza | C | 1970-01-01 00:00:005 | Carla Tavares | C | 1969-01-08 00:00:00
(5 rows)
13
#ORDENANDO RESULTADOS
Funções da SQLExibir código, nome e tipo de todos os produtos existentesna empresa, ordenados pelo tipo em ordem ascendente e pelonome do produto em ordem descendente.
SELECT P.codigo, T.nome AS Tipo, P.nome AS ProdutoFROM Produto P INNER JOIN Tipo T ON P.tipo = T.codigoORDER BY T.nome ASC, P.nome DESC;
codigo | tipo | produto--------+--------------+---------------------
7 | Alimentacaoo | Pizza Sadia1 | Cama | Toalhas Artex3 | Decoracaoo | Abajur Alist4 | Eletro | TV Plasma5 | Eletro | Liquidificador6 | Eletro | Computador Positivo2 | Lacticinios | Iogurte Nestle
(7 rows)
14
#ORDENANDO RESULTADOS
SQL – Filtrando DadosSELECT <lista de colunas>
FROM <tabela(s)>WHERE <coluna> operador <valor>
Operadores:•
– Os operadores <, <=, >, >=, =, <> são usados paratestar valores de atributos.
– Os operadores lógicos AND, NOT, OR podem ser usadospara combinar condições.
#Filtrando Dados
15
SQL – Filtrando DadosObservações:•
– Ao usarmos os operadores AND, OR e NOT numa mesmaexpressã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
SQL – Filtrando DadosExibir o nome e a data de nascimento dosfuncionários (no formato brasileiro), que sejamdo sexo masculino e que nasceram a partir de1950.
SELECT nome, to_char(dataNasc, 'dd/mm/yyyy') ASdataNasc FROM Funcionario WHERE sexo = 'M'AND dataNasc >= '01/01/1950';
#Filtrando Dados
17
SQL – Filtrando DadosQual outra maneira de fazer esta consulta, usandofunções de data/hora, para pegar o ano da data denascimento?
SELECT nome, to_char(dataNasc, 'dd/mm/yyyy') ASdataNasc FROM Funcionario WHERE sexo = 'M'AND DATE_PART('YEAR', dataNasc) >= 1950;
#Filtrando Dados
18
SELECT <lista de colunas>FROM <tabela(s)>WHERE <coluna> BETWEEN <expressão> AND <expressão>
Exibir nome e a quantidade em estoque dosprodutos, cujo estoque esteja entre 10 e 30unidades, ordenados pelo nome do produto.
SELECT nome, quantestFROM ProdutoWHERE quantest BETWEEN 10 AND 30ORDER BY nome
#Filtrando Dados com Intervalos
19
SELECT <lista de colunas>FROM <tabela(s)>WHERE <coluna> IN <lista>
Exibir nome e bairro dos funcionários queresidam em Manaíra ou Bessa, ordenados pelobairro.
SELECT nome, bairro FROM FuncionarioWHERE bairro IN (‘Manaíra’, ‘Bessa’)ORDER BY bairro
#Filtrando Dados com Listas
20
SELECT <lista de colunas>FROM <tabela(s)>WHERE <coluna> IS [NOT] NULL
– NULL: valores nulos, ou seja, não preenchidos (ISNULL)
– NOT: opcional (p/ selecionar os valores “não nulos” - ISNOT NULL)
#Filtrando Dados com Valores Nulos
21
Exemplo: Exibir os dados dos funcionários quenão possuem email.
SELECT *FROM FuncionarioWHERE email IS NULL
Exemplo: Exibir nome e email dos funcionáriosque possuem email.
SELECT nome, emailFROM FuncionarioWHERE email IS NOT NULL
#Filtrando Dados com Valores Nulos
22
Você acha que os funcionários com email nulo sãoretornados na consulta abaixo?
SELECT nome, emailFROM FuncionarioWHERE email <> ‘[email protected]’
Qual seria a solução para que a consulta acimatambém apresente estes funcionários (email =NULL)?
SELECT nome, emailFROM FuncionarioWHERE (email <> ‘[email protected]’) OR (email IS NULL)
#Filtrando Dados com Valores Nulos
23
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
Exemplos:
– Como encontrar todos os nomes que tenham Silva emqualquer 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
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
Combinações:
– {m, n} denota a repetição de um campo: ao menos m enã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
POSIX Regular Expressions
– ~ verifica a igualdade entre os campos (consideramaiúsculo de minúsculo).
– ~* verifica a igualdade entre os campos (nãoconsidera maiúsculo de minúsculo).
– !~ verifica a não igualdade entre os camposconsidera maiúsculo de minúsculo).
– !~* verifica a igualdade entre os campos (nãoconsidera maiúsculo de minúsculo).
#Filtrando Dados com String
28
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 eM?• Usar SIMILAR TO ‘[^JM]%’
#Filtrando Dados com String
29