Buscar

SQL Avançado


Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 19 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 19 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 19 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Anotar Marcar como concluído
Artigos
Artigo
SQL Avançado
Veja nesse artigo algumas funções avançadas de SQL, assim como
trabalhar com datas, conversões e relacionamento entre tabelas.
Invista em você! Saiba como a DevMedia pode
ajudar sua carreira.
82
SQL Avançado https://www.devmedia.com.br/sql-avancado/28889
1 of 19 12/07/2022 22:33
https://www.devmedia.com.br/pro/?utm_source=devmedia&utm_medium=banner&utm_campaign=Caneca%20DevMedia
https://www.devmedia.com.br/pro/?utm_source=devmedia&utm_medium=banner&utm_campaign=Caneca%20DevMedia
https://www.devmedia.com.br/pro/?utm_source=devmedia&utm_medium=banner&utm_campaign=Caneca%20DevMedia
https://www.devmedia.com.br/pro/?utm_source=devmedia&utm_medium=banner&utm_campaign=Caneca%20DevMedia
https://www.devmedia.com.br/pro/?utm_source=devmedia&utm_medium=banner&utm_campaign=Caneca%20DevMedia
https://www.devmedia.com.br/pro/?utm_source=devmedia&utm_medium=banner&utm_campaign=Caneca%20DevMedia
https://www.devmedia.com.br/pro/?utm_source=devmedia&utm_medium=banner&utm_campaign=Caneca%20DevMedia
https://www.devmedia.com.br/pro/?utm_source=devmedia&utm_medium=banner&utm_campaign=Caneca%20DevMedia
https://www.devmedia.com.br/artigos/
https://www.devmedia.com.br/artigos/
https://www.devmedia.com.br/artigos/
https://www.devmedia.com.br/sql-avancado/28889#modulo-mvp
https://www.devmedia.com.br/sql-avancado/28889#modulo-mvp
https://www.devmedia.com.br/sql-avancado/28889#modulo-mvp
https://www.devmedia.com.br/sql-avancado/28889#modulo-mvp
https://www.devmedia.com.br/sql-avancado/28889#modulo-mvp
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
Banco de Dados
SQL Avançado
Após vermos algumas funções básicas em SQL , podemos começar a nos aprofundar
mais no assunto.
Como sabemos o SQL é uma linguagem de comunicação com Banco de dados e é
a mais utilizada do mundo.
Trabalhando com Funções
NVL
A função NVL é utilizada para substituir O código abaixo apenas para exibição. o
valor nulo do campo pesquisado por outro valor determinado.
O código abaixo seleciona o campo punit dos registros da tabela pcmov,
atribuindo valor 0 se for nulo.
Listagem 1: NVL
NVL2
A função NVL2 é utilizada para substituir O código abaixo apenas para exibição. o
valor do campo, sendo este nulo ou não.
O código abaixo seleciona o campo vpago dos registros da tabela pcprest,
select nvl punit 0 from pcmov( , )1
82
SQL Avançado https://www.devmedia.com.br/sql-avancado/28889
2 of 19 12/07/2022 22:33
https://www.devmedia.com.br/artigos/banco-de-dados
https://www.devmedia.com.br/artigos/banco-de-dados
https://www.devmedia.com.br/artigos/banco-de-dados
http://www.devmedia.com.br/sql-basico/28877
http://www.devmedia.com.br/sql-basico/28877
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
atribuindo valor 0 se NÃO for nulo, e atribuindo 2 se for nulo.
Listagem 2: NVL2
NULLIF
A função NULLIF compara dois valores. Se os valores forem iguais, a função
retornará valor nulo. Se os valores dos campos valor e vpago forem iguais, a
função retornará valor nulo. Se os valores desses campos forem diferentes, a
função retornará o primeiro valor.
Listagem 3: NULLIF
COALESCE
A função COALESCE veri�ca os valores da expressão e retorna o primeiro valor
não nulo.
O código abaixo seleciona dos registros da tabela pcprest, dentre os campos
vldesconto, vpago e valor o primeiro que apresentar valor não nulo.
Listagem 4: Usando a função COALESCE
DECODE
select nvl2 vpago 0 2 from pcprest( , , )1
select valor vpago nullif valor vpago from pcprest, , ( , ) ;1
select coalesce vldesconto vpago valor from pcprest( , , ) ;1
82
SQL Avançado https://www.devmedia.com.br/sql-avancado/28889
3 of 19 12/07/2022 22:33
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
A função Decode tem como objetivo ʻdecodi�carʼ o valor do campo selecionado,
atribuindo um valor de resposta para cada valor de condição estipulado.
O código abaixo mostra como selecionar dos registros da tabela pcmov o campo
numnota, e exibe mensagem de acordo com as condições: se o campo numnota
for igual a 100, exibe ʻCEM,̓ se for 200, exibe ʻDUZENTOS ,̓ se for 300, exibe
ʻTREZENTOS ,̓ se não for nenhum dos anteriores, exibe ʻNENHUM.̓
Listagem 5: Usando função decode
CASE
A função CASE é utilizada para determinar a exibição do resultado a partir de
condições especi�cadas dentro da função.
O código abaixo seleciona dos registros da tabela pcmov o campo numnota, e
exibe mensagem de acordo com as condições: caso o campo numnota seja menor
que 100, exibe a mensagem ʻMENOR QUE 100 ,̓ caso o campo numnota esteja entre
101 e 200, exibe a mensagem ʻENTRE 101 E 200 ,̓ caso contrário, exibe a mensagem
ʻMAIOR QUE 200 .̓
Listagem 6: Usando Case
Obs.: Para melhor entendimento da função: para todo ʻcaseʼ deve existir um ʻend,̓
select numnota decode numnota 100 ‘CEM’ 200 ‘DUZENTOS’ 300 ‘TREZENTOS, ( , , , , , ,1
select numnota case when numnota < 100 then ‘MENOR QUE 100’,
 when numnota between 101 and 
else ‘MAIOR QUE 200’ end “RESULTADO
from pcmov;
1
2
3
4
82
SQL Avançado https://www.devmedia.com.br/sql-avancado/28889
4 of 19 12/07/2022 22:33
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
e para todo ʻwhenʼ deve existir um ʻthen.̓ O ʻelseʼ existe sozinho, como última
alternativa da função.
LOWER
O código abaixo seleciona dos registros da tabela pcempr os campos matricula e
nome, convertendo o conteúdo do campo nome para que seja exibido todo em
caracterees minúsculos.
Listagem 7: Usando função Lower
UPPER
O código abaixo seleciona dos registros da tabela pcempr os campos matricula e
nome, convertendo o conteúdo do campo nome para que seja exibido todo em
caracterees maiúsculos.
Listagem 8: Usando função Upper
INITCAP
O código abaixo seleciona dos registros da tabela pcempr os campos matricula e
nome, convertendo o conteúdo docampo nome para que seja exibido com as
iniciais em caracterees maiúsculos.
Listagem 9: Usando função initcap
select matricula lower nome from pcempr, ( ) ;1
select matricula upper nome from pcempr, ( ) ;1
82
SQL Avançado https://www.devmedia.com.br/sql-avancado/28889
5 of 19 12/07/2022 22:33
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
SUBSTR
A função SUBSTR tem como objetivo extrair parte do conteúdo do campo
selecionado, de acordo com os parâmetros informados na função, independente
do tipo do campo (numérico, texto ou data).
O código abaixo seleciona dos registros da tabela pcempr os campos matricula e
nome, exibindo, do campo nome, apenas o conteúdo a partir do primeiro
caractere, os próximos 5 caracterees.
Listagem 10: Usando Substr
LENGTH
A função LENGTH tem como objetivo exibir o tamanho do valor que está gravado
no campo selecionado.
O código abaixo seleciona dos registros da tabela pcempr os campos matricula e
nome, e exibe, logo em seguida, o tamanho do conteúdo do campo nome.
Listagem 11: Usando Length
REPLACE
select matricula initcap nome from pcempr, ( ) ;1
select matricula substr nome 1 5 from pcempr, ( , , ) ;1
select matricula nome length nome from pcempr, , ( ) ;1
82
SQL Avançado https://www.devmedia.com.br/sql-avancado/28889
6 of 19 12/07/2022 22:33
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
A função REPLACE tem como objetivo possibilitar a substituição de caracteres
especí�cos por outros.
O código abaixo seleciona dos registros da tabela pcempr os campos matricula e
nome, e exibe, logo em seguida, o campo nome, substituindo o caractere A̒̓ por ʻ* .̓
Listagem 12: Usando replace
Obs.: Podem ser substituídos 1 caracteree por vários, vários caracterees por 1,
vários por vários, ou até mesmo 1 ou vários por nenhum caracteree. Para
substituir por nenhum caractere, basta abrir e fechar as aspas simples, não
informando nenhum valor.
ROUND
A função ROUND tem como objetivo efetuar o arredondamento de números para
a quantidade de casas decimais determinada na função.
O código abaixo seleciona dos registros da tabela pctabpr os campos codprod,
numregiao, ptabela, e exibe, logo em seguida, o campo ptabela com seu valor
arredondado para 2 casas decimais.
Listagem 13: Usando Round
TRUNC
select matricula nome replace nome 'A' '*' from pcempr, , ( , , ) ;1
select codprod numregiao ptabela roundO ptabela 2 from pctabpr, , , ( , ) ;1
82
SQL Avançado https://www.devmedia.com.br/sql-avancado/28889
7 of 19 12/07/2022 22:33
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
A função TRUNC tem como objetivo efetuar o truncamento(corte) de números
para a quantidade de casas determinada na função.
O código abaixo seleciona dos registros da tabela pctabpr os campos codprod,
numregiao, ptabela, e exibe, logo em seguida, o campo ptabela com seu valor
truncado na segunda casa decimal.
Listagem 14: Usando função Trunc
MOD
A função MOD tem como objetivo exibir o resto da divisão de um valor por outro.
O código abaixo seleciona dos registros ds tabela pcprest, o resto da divisão do
campo valor por 2.
Listagem 15: Usando MOD
Obs.: para facilitar o entendimento desta função, recomendamos utilizar a
seleção da divisão informada, com truncamento para nenhuma casa decimal.
Exemplo: select trunc(( valor/2),0) from pcprest;
Trabalhando com Datas
Função SYSDATE
select codprod numregiao ptabela trunc ptabela 2 from pctabpr, , , ( , ) ;1
select mod valor 2 from pcprest( , ) ;1
82
SQL Avançado https://www.devmedia.com.br/sql-avancado/28889
8 of 19 12/07/2022 22:33
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
O código abaixo seleciona a data do sistema.
Listagem 16: Selecionando data do sistema com Sysdate
Aritmética com Datas
O código abaixo seleciona a data do sistema adicionando 2 dias.
Listagem 17: Adicionando dias
O código abaixo seleciona a data do sistema subtraindo 2 dias.
Listagem 18: Subtraindo dias
O código abaixo seleciona dos registros da tabela pcnfsaid os campos numnota,
dtsaida, dtentrega, e exibe, logo em seguida, a diferença entre os campos
dtentrega e dtsaida, apelidando o campo com o nome de ʻdiferenca.̓
Listagem 19: Diferença entre datas
Funções de Conversão
select sysdate from dual;1
select sysdate+2 from dual;1
select sysdate-2 from dual;1
select numnota dtsaida dtentrega dtentrega-dtsaida diferenca from, , ,1
82
SQL Avançado https://www.devmedia.com.br/sql-avancado/28889
9 of 19 12/07/2022 22:33
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
O código abaixo seleciona dos registros da tabela pcmov os campos dtmov e
numnota e, logo em seguida, o campo numnota sendo convertido para caractere,
no formato de 6 dígitos.
Listagem 20: NUMBER to VARCHAR
O código abaixo seleciona dos registros da tabela pcmov os campos dtmov e
numnota e, logo em seguida, o campo dtmov sendo convertido para caractere, no
formato ʻdd/mm.̓
Listagem 21: DATE to VARCHAR
Elementos para formatação de data
YYYY é ano completo em números
YEAR é ano escrito por extenso
MM é mês em dois dígitos
MONTH é mês escrito por extenso
MON é mês escrito com as 3 primeiras letras iniciais
DY é dia escrito com a abreviação em 3 letras
DAY é dia escrito por extenso
DD é dia em dois dígitos
D é dia da semana O código abaixo de 1 a 7.
DDD é dia do ano O código abaixo de1 a 356.
WW é número da semana dentro do ano
select dtmov numnota to_char numnota '000000' from pcmov, , ( , ) ;1
select dtmov numnota to_char dtmov 'dd/mm' from pcmov, , ( , ) ;1
82
SQL Avançado https://www.devmedia.com.br/sql-avancado/28889
10 of 19 12/07/2022 22:33
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
W é número da semana dentro do mês
Funções de Grupo (AVG, COUNT, MAX, MIN, SUM)
AVG
A função AVG tem como �nalidade efetuar o cálculo de média simples do campo
informado na função. O código abaixo seleciona a média dos valores do campo
vltotal dos registros da tabela pcnfsaid.
Listagem 22: Usando função AVG
COUNT
A função COUNT tem como �nalidade efetuar a contagem do campo informado
na função.
O código abaixo efetua contagem do campo numnota dos registros da tabela
pcnfsaid.
Listagem 23: Usando função Count
MAX
A função MAX tem como �nalidade exibir o maior valor encontrado no campo
informado na função.
select avg vltotal from pcnfsaid( ) ;1
select count numnota from pcnfsaid( ) ;1
82
SQL Avançado https://www.devmedia.com.br/sql-avancado/28889
11 of 19 12/07/2022 22:33
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
O código abaixo seleciona o maior valor encontrado no campo vltotal dentre todos
os registros da tabela pcnfsaid.
Listagem 24: Usando função MAX
MIN
Assim como acontece na função MAX, a função MIN faz exatamente o inverso, ou
seja, exibe o menor valor encontrado no campo informado na função.
O código abaixo seleciona o menor valor encontrado no campo vltotal dentre
todos os registros da tabela pcnfsaid.
Listagem 25: Usando função MIN
SUM
A função SUM tem como �nalidade efetuar a soma dos valores do campo
informado na função.
O código abaixo seleciona a soma dos valores do campo vltotal de todos os
registros da tabela pcnfsaid.
Listagem 26: Usando função SUM
select max vltotal from pcnfsaid( ) ;1
select min vltotal from pcnfsaid( ) ;1
select sum vltotal from pcnfsaid( ) ;1
82
SQL Avançado https://www.devmedia.com.br/sql-avancado/28889
12 of 19 12/07/2022 22:33
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
GROUP BY
Sempre que algumas das funções de grupo citadas no item 6 for utilizada, e
também forem selecionados campos ʻpurosʼ das tabelas utilizadas, é necessário
utilizar a expressão ʻGROUP BYʼ para determinar o agrupamento das informações
que serão exibidas.
O código abaixo seleciona dos registros da tabela pcmov os campos dtmov,
codprod, a soma do campo qt, onde o campo codprod for 0 ou 1, agrupando as
informações pelos campos codprod e dtmov.
Listagem 27: Usando Group By
Relacionamento entre tabelas
Em boa parte das pesquisas de dados, pode ser necessário exibir informações de
campos existentes em mais de uma tabela. Para que isso seja possível, é
necessário determinar a junção/relacionamento que será empregada nas tabelas
que estão sendo utilizadas.
O código abaixo seleciona os campos codcli[pcnfsaid], cliente[pcclient] e
numnota[pcnfsaid], dos registros das tabelas pcnfsaid e pcclient, onde o valor do
campo codcli da tabela pcnfsaid for igual ao valor do campo codcli da tabela
pcclient. Os resultados serão exibidos apenas se essa condição for obedecida.
Listagem 28: Relacionamento entre tabelas
select dtmov codprod sum qt, , ( )
from pcmov where codprod in 0 1( , )
group by codprod dtmov, ;
1
2
3
82
SQL Avançado https://www.devmedia.com.br/sql-avancado/28889
13 of 19 12/07/2022 22:33
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
O código abaixo seleciona os campos codcli[pcnfsaid], cliente[pcclient] e
numnota[pcnfsaid], dos registros das tabelas pcnfsaid e pcclient, onde o valor do
campo codcli da tabela pcnfsaid for igual ao valor do campo codcli da tabela
pcclient. Caso os valores dos campos não sejam iguais, as informações solicitadas
da tabela pcnfsaid serão exibidas, e os campos da tabela pcclient serão exibidos
em branco.
Listagem 29: Exibindo resultados apenas se a condição for obedecida
O código abaixo seleciona os campos codusur[pcnfsaid], nome[pcusuari],
codsupervisor[pcusuari] e nome[pcsuperv], dos registros das tabelas pcnfsaid,
pcusuari e pcsuperv, onde o valor do campo codusur da tabela pcnfsaid for igual
ao valor do campo codusur da tabela pcusuari, e o valor do campo codsupervisor
da tabela pcusuari for igual ao valor do campo codsupervisor da tabela pcsuperv.
Os resultados serão exibidos apenas se ambas as condições forem obedecidas.
Listagem 30: Exibindo campos em branco
select pcnfsaid codcli pcclient cliente pcnfsaid numnota. , . , .
from pcnfsaid pcclient,
where pcnfsaid codcli = pccleint codcli. . ;
1
2
3
select pcnfsaid codcli pcclient cliente pcnfsaid numnota. , . , .
from pcnfsaid pcclient,
where codcli = codcli +( );
1
2
3
select pcnfsaid codusur pcusuari nome pcusuari codsupervisor pcsuperv. , . , . ,
from pcnfsaid pcusuari pcsuperv, ,
where pcnfsaid codusur = pcusuari codusur. .
and pcusuari codsupervisor = pcsuperv codsupervisor. . ;
1
2
3
4
82
SQL Avançado https://www.devmedia.com.br/sql-avancado/28889
14 of 19 12/07/2022 22:33
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
O código abaixo seleciona os campos codusur[pcnfsaid], nome[pcusuari],
codsupervisor[pcusuari] e nome[pcsuperv], dos registros das tabelas pcnfsaid,
pcusuari e pcsuperv, onde o valordo campo codusur da tabela pcnfsaid for igual
ao valor do campo codusur da tabela pcusuari, e o valor do campo codsupervisor
da tabela pcusuari for igual ao valor do campo codsupervisor da tabela pcsuperv.
Caso os valores dos campos codsupervisor[pcusuari] e codsupervisor[pcsuperv]
não forem iguais, as demais informações serão exibidas normalmente, porém, as
informações da tabela pcsuperv não serão exibidas.
Listagem 31: Exemplo de relacionamento
Cláusula HAVING
A cláusula HAVING tem funcionamento muito parecido ao funcionamento das
cláusulas de restrição WHERE, porém, com uma grande diferença. Enquanto a
cláusula WHERE é utilizada para efetuar restrições de informações baseadas em
campos das tabelas, a cláusula HAVING é utilizada para efetuar restrições de
informações baseadas em resultados das funções de grupo (SUM, AVG, MAX, MIN
e COUNT).
O código abaixo seleciona dos registros da tabela pcnfsaid os campos codcli e a
soma do campo vltotal, agrupando as informações pelo campo codcli.
As informações só serão exibidas se o valor da soma do campo vltotal for maior
select pcnfsaid codusur pcusuari nome pcusuari codsupervisor pcsuperv. , . , . ,
from pcnfsaid pcusuari pcsuperv, ,
where pcnfsaid codusur = pcusuari codusur. .
and pcusuari codsupervisor = pcsuperv codsupervisor +. . ( );
1
2
3
4
82
SQL Avançado https://www.devmedia.com.br/sql-avancado/28889
15 of 19 12/07/2022 22:33
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
que 10000.
Listagem 32: Usando Having
Sub-select’s
Como o próprio nome diz, sub-select s̓ são select s̓ que podem ser utilizados
dentro de um select maior, com o objetivo de auxiliar na extração de dados, seja
através da consulta de uma nova informação, ou através da utilização de seus
resultados no processo de restrição de dados.
O código abaixo seleciona todos os campos dos registros da tabela pcprodut, onde
o valor do campo codprod não existir na lista distinta de valores do campo
codprod de todos os registros da tabela pcmov.
Listagem 33: Usando sub-selects
Conclusão
Esses foram mais alguns comandos importantíssimos no desenvolvimento de
pro�ssionais que vão atuar como programadores ou administradores de banco de
dados.
select codcli sum vltotal, ( )
from pcnfsaid
group by codcli
having sum vltotal > 10000( ) ;
1
2
3
4
select * from pcprodut
where codprod not in select distinct codprod from pcmov( ( ) );
1
2
82
SQL Avançado https://www.devmedia.com.br/sql-avancado/28889
16 of 19 12/07/2022 22:33
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
Espero que tenham gostado e até a próxima.
Veja também
Cálculos avançados em SQL - Revista SQL Magazine 104
Escrevendo queries otimizadas - SQL Magazine 84
Anotar Marcar como concluído
Entre na turma de julho e
receba uma caneca CSS
* Apenas 37 unidades disponíveis
Por 12x de R$ 54,90
82
SQL Avançado https://www.devmedia.com.br/sql-avancado/28889
17 of 19 12/07/2022 22:33
http://www.devmedia.com.br/calculos-avancados-em-sql-revista-sql-magazine-104/25969
http://www.devmedia.com.br/calculos-avancados-em-sql-revista-sql-magazine-104/25969
http://www.devmedia.com.br/escrevendo-queries-otimizadas-sql-magazine-84/19068
http://www.devmedia.com.br/escrevendo-queries-otimizadas-sql-magazine-84/19068
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
Por Paulo
Em 2013
POR QUE A
DEVMEDIA?
Comece agora
Acesso completo
Projetos reais
Professores online
Exercícios gami�cados
Certi�cado de
autoridade
82
SQL Avançado https://www.devmedia.com.br/sql-avancado/28889
18 of 19 12/07/2022 22:33
https://www.devmedia.com.br/shop/
https://www.devmedia.com.br/shop/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
RECEBA NOSSAS NOVIDADES
Informe o seu e-mail Receber Newsletter
Tecnologias
Exercicios
Cursos
Artigos
Revistas
Quem Somos
Fale conosco
Plano para Instituição de ensino
Assinatura para empresas
Assine agora
Hospedagem web por Porta 80 Web Hosting
82
SQL Avançado https://www.devmedia.com.br/sql-avancado/28889
19 of 19 12/07/2022 22:33
https://www.devmedia.com.br/tecnologia/
https://www.devmedia.com.br/tecnologia/
https://www.devmedia.com.br/tecnologia/novos-desafios/
https://www.devmedia.com.br/tecnologia/novos-desafios/
https://www.devmedia.com.br/cursos/
https://www.devmedia.com.br/cursos/
https://www.devmedia.com.br/artigos/
https://www.devmedia.com.br/artigos/
https://www.devmedia.com.br/revistas/
https://www.devmedia.com.br/revistas/
https://www.devmedia.com.br/quem-somos/
https://www.devmedia.com.br/quem-somos/
https://www.devmedia.com.br/fale-conosco/
https://www.devmedia.com.br/fale-conosco/
https://www.devmedia.com.br/marketing/educacional/
https://www.devmedia.com.br/marketing/educacional/
https://www.devmedia.com.br/empresarial/
https://www.devmedia.com.br/empresarial/
https://www.devmedia.com.br/shop/
https://www.devmedia.com.br/shop/
https://github.com/DevMedia
https://github.com/DevMedia
https://github.com/DevMedia
https://www.facebook.com/devmedia.com.br/
https://www.facebook.com/devmedia.com.br/
https://www.facebook.com/devmedia.com.br/
http://twitter.com/devmedia
http://twitter.com/devmedia
http://twitter.com/devmedia
https://www.instagram.com/devmedia.com.br/
https://www.instagram.com/devmedia.com.br/
https://www.instagram.com/devmedia.com.br/
https://www.instagram.com/devmedia.com.br/
https://www.instagram.com/devmedia.com.br/
https://www.youtube.com/c/DevmediaBrasil
https://www.youtube.com/c/DevmediaBrasil
https://www.youtube.com/c/DevmediaBrasil
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/
https://www.devmedia.com.br/https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/busca/
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#
https://www.devmedia.com.br/sql-avancado/28889#