Return to Video

RDS CAP16 2023 VA02 SQL SUBCONSULTA DE VARIAS LINHAS

  • 0:08 - 0:11
    Nós podemos trabalhar
    com a ideia de subconsultas,
  • 0:11 - 0:15
    e essas consultas podem
    retornar várias linhas.
  • 0:15 - 0:20
    Quando isso ocorre, não podemos
    usar os mesmos operadores
  • 0:20 - 0:23
    que utilizamos quando
    trabalhamos com subconsultas
  • 0:23 - 0:28
    que nos retornam apenas uma linha,
    que são os operadores relacionais.
  • 0:28 - 0:31
    Para subconsultas
    que nos retornam várias linhas,
  • 0:31 - 0:38
    os operadores que nós podemos utilizar
    são o "IN", o "NOT IN", o "ANY", e o "ALL".
  • 0:38 - 0:41
    Portanto, vamos trabalhar alguns exemplos
  • 0:41 - 0:44
    e observar como utilizar esses operadores
  • 0:44 - 0:47
    em subconsultas que nos
    retornam várias linhas.
  • 0:47 - 0:53
    Iremos apresentar um exemplo
    onde iremos utilizar uma subconsulta
  • 0:53 - 0:56
    que retornará várias linhas.
  • 0:56 - 1:00
    Para que possamos utilizar
    todas essas linhas
  • 1:00 - 1:03
    como um mecanismo
    de condição de validação
  • 1:03 - 1:07
    através da cláusula where
    na consulta principal,
  • 1:07 - 1:11
    iremos apresentar o exemplo
    utilizando o operador IN,
  • 1:11 - 1:14
    que vai avaliar todos os valores
  • 1:14 - 1:17
    recuperados através da subconsulta
  • 1:17 - 1:23
    no momento da cláusula where
    que nós temos na consulta principal.
  • 1:23 - 1:24
    Vamos ver o exemplo proposto?
  • 1:24 - 1:29
    A subconsulta irá recuperar
    o código do projeto
  • 1:29 - 1:33
    onde a data de início
    seja abril de 2012
  • 1:33 - 1:37
    ou outubro de 2013.
  • 1:37 - 1:40
    Vejamos então
    a execução da subconsulta.
  • 1:42 - 1:48
    Nós observamos aqui que essa
    subconsulta retornou duas linhas,
  • 1:48 - 1:50
    então nós temos dois valores.
  • 1:50 - 1:55
    Portanto, esses dois valores,
    que são os projetos 10002 e 10003,
  • 1:55 - 2:00
    serão utilizados como base
    de validação da cláusula where
  • 2:00 - 2:05
    da nossa consulta principal,
    ou, consulta externa.
  • 2:05 - 2:11
    Então nós iremos recuperar todas
    as implantações que ocorreram
  • 2:11 - 2:16
    para os projetos 10002 ou 10003,
  • 2:16 - 2:19
    porque estamos utilizando
    aqui o operador IN.
  • 2:19 - 2:23
    O operador IN avalia todos
    os elementos da lista.
  • 2:23 - 2:25
    Vejamos a execução completa.
  • 2:30 - 2:34
    Portanto, aqui nós temos
    todas as implantações
  • 2:34 - 2:38
    referente aos projetos 10002 e 10003,
  • 2:38 - 2:42
    e qual é o funcionário,
    através do número de matrícula,
  • 2:42 - 2:48
    que participou ou que ainda
    participa dessas implantações.
  • 2:48 - 2:51
    Então veja que aqui nós
    temos a subconsulta.
  • 2:51 - 2:54
    A subconsulta vai retornar duas linhas.
  • 2:54 - 2:58
    Como ela retorna duas linhas, eu
    não posso usar qualquer operador.
  • 2:58 - 3:02
    Eu preciso utilizar operadores
    que entendam várias linhas.
  • 3:02 - 3:07
    O IN é um deles, que permite
    que eu avalie uma lista de valores.
  • 3:07 - 3:12
    Portanto, essa lista de valores
    será utilizada como meio de condição
  • 3:12 - 3:16
    da consulta principal,
    ou, consulta externa.
  • 3:16 - 3:21
    Então observe que o grande ponto de atenção
    quando trabalhamos com subconsultas
  • 3:21 - 3:26
    que nos devolvem várias
    linhas, duas ou mais,
  • 3:26 - 3:28
    é o operador que eu posso utilizar.
  • 3:28 - 3:31
    Porque se eu tentar usar
    um operador relacional,
  • 3:31 - 3:34
    essa consulta resultará em erro.
  • 3:34 - 3:38
    Então, muita atenção, os operadores
    que podem ser utilizados,
  • 3:38 - 3:42
    dependendo da necessidade
    de recuperação que eu vou ter,
  • 3:42 - 3:46
    são o IN, o NOT IN, o ANY, e o ALL.
  • 3:46 - 3:51
    Vamos trabalhar um outro exemplo,
    agora utilizando o NOT IN,
  • 3:51 - 3:54
    ou seja, tudo que não faz parte
  • 3:54 - 3:58
    dos elementos que estão
    declarados naquela lista.
  • 3:58 - 3:59
    Vamos ver o exemplo?
  • 3:59 - 4:04
    A minha consulta interna, ou, subconsulta,
  • 4:04 - 4:06
    irá recuperar o código do projeto
  • 4:06 - 4:11
    que teve início em abril de 2012
    ou outubro de 2013.
  • 4:11 - 4:14
    Vamos executar esse trechinho.
  • 4:15 - 4:19
    Temos o projeto 10002 e 10003.
  • 4:19 - 4:23
    A ideia agora é recuperar
    todas as implantações
  • 4:23 - 4:27
    que não são dos projetos 10002 e 10003.
  • 4:27 - 4:30
    Esta é a ideia do NOT IN,
  • 4:30 - 4:32
    todos os elementos que não fazem parte,
  • 4:32 - 4:37
    que não atendem os elementos
    que estão na lista.
  • 4:37 - 4:39
    Vamos executar.
  • 4:39 - 4:43
    Veja que nós trouxemos as implantações
  • 4:43 - 4:47
    dos projetos 10005, 10004, 10001,
  • 4:47 - 4:53
    ou seja, todos os projetos
    que não são 10002 e 10003,
  • 4:53 - 4:56
    e respectivos funcionários que implantam
  • 4:56 - 4:59
    ou já implantaram esses projetos.
  • 4:59 - 5:04
    Veja então que é possível eu
    trabalhar sempre com os operadores
  • 5:04 - 5:10
    que conseguem afetar um número
    grande de linhas, duas ou mais.
  • 5:10 - 5:16
    Neste caso, o NOT IN, que vai trazer
    tudo que não faz parte da lista,
  • 5:16 - 5:20
    tudo que não atende aos elementos
    que estão declarados na minha lista.
  • 5:20 - 5:24
    E a lista é preenchida
    através da subconsulta
  • 5:24 - 5:28
    quando nós colocamos nessa subconsulta
  • 5:28 - 5:30
    aquilo que nós queremos recuperar.
  • 5:30 - 5:33
    A validação é feita, e, portanto,
  • 5:33 - 5:37
    são recuperados através
    da consulta principal
  • 5:37 - 5:42
    todos os projetos que não são
    aqueles declarados na lista.
  • 5:42 - 5:46
    Vamos trabalhar um exemplo
    utilizando o operador ANY.
  • 5:46 - 5:51
    O operador ANY vai avaliar,
    no momento da condição,
  • 5:51 - 5:56
    cada um dos valores retornados
    através da subconsulta.
  • 5:56 - 5:58
    Vamos ver um exemplo?
  • 5:58 - 6:02
    A nossa subconsulta irá recuperar
  • 6:02 - 6:07
    a média salarial
    agrupada por departamento.
  • 6:07 - 6:10
    Veja que nós temos aqui
  • 6:10 - 6:14
    a média 3770, 2720,
  • 6:14 - 6:18
    2934, 3412, 3700,
  • 6:18 - 6:22
    ou seja, a média salarial
    de cada um dos departamentos
  • 6:22 - 6:24
    que nós temos cadastrado.
  • 6:24 - 6:29
    Aqui, quando utilizamos o ANY,
    vamos fazer uma validação
  • 6:29 - 6:32
    considerando cada um desses valores.
  • 6:32 - 6:36
    Então eu vou recuperar
    através da consulta externa
  • 6:36 - 6:39
    todos os funcionários
    que tenham um salário mensal
  • 6:39 - 6:43
    menor que cada um desses valores.
  • 6:43 - 6:46
    Vejamos a execução completa.
  • 6:48 - 6:51
    Dos 15 funcionários
    que nós temos cadastrados,
  • 6:51 - 6:55
    9 funcionários atendem a condição,
  • 6:55 - 7:01
    ou seja, possuem um salário mensal
    menor que cada um dos valores
  • 7:01 - 7:06
    que foi informado, que foi
    recuperado, através da subconsulta.
  • 7:06 - 7:10
    É importante verificar aqui
  • 7:10 - 7:14
    qual operador que deve ser utilizado.
  • 7:14 - 7:17
    Veja que a subconsulta
    devolve várias linhas,
  • 7:17 - 7:21
    portanto, o uso do ANY é quando
    eu preciso de uma comparação
  • 7:21 - 7:27
    com cada um dos valores que foram
    recuperados através da subconsulta.
  • 7:27 - 7:30
    Portanto, caso você
    tenha essa necessidade,
  • 7:30 - 7:34
    e na sua subconsulta você
    recuperou várias linhas,
  • 7:34 - 7:37
    o operador que deve
    ser utilizado será o ANY.
  • 7:37 - 7:40
    Nós podemos utilizar
    também o operador ALL.
  • 7:40 - 7:45
    A ideia do operador ALL, quando
    a subconsulta recupera várias linhas,
  • 7:45 - 7:49
    é fazer uma validação que envolva
    todos os valores recuperados
  • 7:49 - 7:51
    através da subconsulta.
  • 7:51 - 7:53
    Vamos ver um exemplo?
  • 7:53 - 7:56
    No nosso exemplo, a subconsulta
  • 7:56 - 8:00
    recupera o salário mensal
  • 8:00 - 8:02
    de todos os nossos departamentos.
  • 8:02 - 8:04
    Então agrupamos por departamento
  • 8:04 - 8:08
    e calculamos a média de cada
    um desses departamentos.
  • 8:08 - 8:12
    Na subconsulta principal, nós
    recuperamos todos os funcionários
  • 8:12 - 8:18
    cujo salário mensal seja maior que todos
    esses valores que foram obtidos.
  • 8:18 - 8:22
    Então, realizando a consulta,
  • 8:22 - 8:27
    nós observamos que os funcionários
    que foram recuperados
  • 8:27 - 8:32
    foram todos aqueles
    que atendem o salário mensal
  • 8:32 - 8:36
    maior a todos os valores recuperados.
  • 8:36 - 8:40
    Portanto, nesse exemplo,
    onde nós temos também
  • 8:40 - 8:43
    uma recuperação de várias
    linhas através da subconsulta,
  • 8:43 - 8:49
    você vai utilizar o operador ALL quando
    a sua necessidade for fazer uma avaliação
  • 8:49 - 8:55
    onde tenham que ser considerados
    todos os resultados devolvidos
  • 8:55 - 8:59
    através dessa subconsulta,
    e a sua validação precisa recuperar
  • 8:59 - 9:03
    algo maior, menor ou igual,
    por exemplo, a esse resultado.
  • 9:03 - 9:05
    Nós podemos trabalhar também
  • 9:05 - 9:09
    com subconsultas correlacionadas.
  • 9:09 - 9:12
    Quando nós trabalhamos
    com consultas correlacionadas,
  • 9:12 - 9:17
    a subconsulta e a consulta
    externa se conversam
  • 9:17 - 9:20
    de modo que utilizamos
  • 9:20 - 9:24
    ou o apelido, ou a tabela, ou o campo,
  • 9:24 - 9:28
    que está associado
    à consulta principal,
  • 9:28 - 9:31
    a tabela ou as tabelas que estiverem
    na consulta principal.
  • 9:31 - 9:34
    Então é um tipo de consulta e subconsulta
  • 9:34 - 9:39
    em que não conseguimos executar
    um trechinho para ver o resultado
  • 9:39 - 9:42
    e depois o resultado como um todo.
  • 9:42 - 9:46
    Só conseguimos executar
    se executarmos o comando todo.
  • 9:46 - 9:46
    Por quê?
  • 9:46 - 9:48
    Porque elas estão correlacionadas.
  • 9:48 - 9:54
    Elas possuem uma dependência
    entre elas no momento da execução,
  • 9:54 - 9:57
    porque ela faz referência
    à tabela e ao campo
  • 9:57 - 10:00
    que estão na consulta
    externa, por exemplo.
  • 10:00 - 10:05
    Então é um tipo de consulta que é
    um pouquinho mais difícil para ser executada,
  • 10:05 - 10:11
    e, caso tenha um erro, também é um pouquinho
    mais complicado de ele ser encontrado.
  • 10:11 - 10:14
    Muitas vezes, uma consulta desse tipo
  • 10:14 - 10:17
    pode ser equivalente a uma junção.
  • 10:17 - 10:22
    Mas vamos trabalhar a ideia
    de subconsulta correlacionada
  • 10:22 - 10:26
    para que você possa entender
    a sintaxe, a execução,
  • 10:26 - 10:31
    e aquilo que é recuperado através
    de uma subconsulta correlacionada.
  • 10:31 - 10:35
    No nosso exemplo, nós
    trabalhamos a subconsulta,
  • 10:35 - 10:41
    e veja que, na subconsulta,
    nós temos uma referência
  • 10:41 - 10:43
    à consulta principal.
  • 10:43 - 10:48
    Veja que eu estou comparando
    o número de matrícula da implantação
  • 10:48 - 10:53
    com o número de matrícula
    da tabela funcionário.
  • 10:53 - 10:57
    Veja que nós temos o "F", que é
    o apelido da tabela, fazendo a referência.
  • 10:57 - 11:02
    Com isso, não é possível
    executar apenas este trecho.
  • 11:02 - 11:07
    Daria erro pois ele não
    conseguiria identificar
  • 11:07 - 11:11
    a origem desta coluna
    que nós estamos especificando.
  • 11:11 - 11:14
    Então, para ter a ideia
    do resultado total,
  • 11:14 - 11:17
    é necessário executar o comando inteiro.
  • 11:17 - 11:20
    Aqui, quando nós temos "WHERE EXISTS",
  • 11:20 - 11:26
    nós estamos querendo obter
    os funcionários que existem
  • 11:26 - 11:31
    no resultado da consulta
    à tabela implantação.
  • 11:31 - 11:32
    Então veremos a execução.
  • 11:34 - 11:37
    Só é possível executar o comando inteiro.
  • 11:37 - 11:42
    Veja então que são recuperados
    todos os funcionários
  • 11:42 - 11:48
    onde implantações foram encontradas
    associadas a esse funcionário.
  • 11:48 - 11:52
    Veja que aqui nós estamos
    comparando a matrícula,
  • 11:52 - 11:56
    o número de matrícula
    que vem da tabela funcionário,
  • 11:56 - 12:01
    com o número de matrícula
    que vem da tabela implantação.
  • 12:01 - 12:05
    Quando fazemos isso, é como
    se estivéssemos fazendo uma junção,
  • 12:05 - 12:08
    comparando chave primária
    com chave estrangeira,
  • 12:08 - 12:12
    para poder trazer o que é
    comum às duas tabelas.
  • 12:12 - 12:16
    Então, o que foi feito aqui tem
    exatamente esse mesmo efeito,
  • 12:16 - 12:18
    como se eu estivesse fazendo uma junção,
  • 12:18 - 12:23
    só que baseada em subconsulta,
    subconsulta correlacionada,
  • 12:23 - 12:27
    que utiliza a tabela
    e o campo da tabela externa
  • 12:27 - 12:31
    como comparação da subconsulta.
  • 12:31 - 12:33
    Dentro da mesma linha de pensamento,
  • 12:33 - 12:38
    nós podemos também recuperar
    através da subconsulta correlacionada
  • 12:38 - 12:41
    elementos que não existem.
  • 12:41 - 12:42
    Vamos ver o exemplo?
  • 12:42 - 12:47
    Veja que aqui nós temos
    a subconsulta correlacionada,
  • 12:47 - 12:53
    ou seja, nós temos a referência
    da matrícula da tabela funcionário
  • 12:53 - 12:56
    com a matrícula que nós
    temos aqui na tabela implantação.
  • 12:56 - 13:01
    Então estamos correlacionando
    essa subconsulta à consulta principal.
  • 13:01 - 13:04
    Só que agora a ideia é
    trazer os funcionários
  • 13:04 - 13:09
    que não foram encontrados
    associados à tabela implantação.
  • 13:09 - 13:11
    Vamos ver a execução?
  • 13:15 - 13:19
    Veja então que nós
    recuperamos os funcionários
  • 13:19 - 13:24
    que não estão participando
    de nenhuma implantação.
  • 13:24 - 13:29
    Perceba que quando utilizamos
    uma subconsulta correlacionada
  • 13:29 - 13:32
    realizando a validação
    dos que não existem,
  • 13:32 - 13:38
    é equivalente a uma junção externa,
    onde eu quero, por exemplo,
  • 13:38 - 13:43
    saber quais funcionários que não
    participam de implantações.
  • 13:43 - 13:49
    Então, a subconsulta correlacionada
    é uma alternativa à junção,
  • 13:49 - 13:52
    também podendo ser
    recuperada desta maneira.
Title:
RDS CAP16 2023 VA02 SQL SUBCONSULTA DE VARIAS LINHAS
Video Language:
Portuguese, Brazilian
Duration:
13:55

Portuguese, Brazilian subtitles

Incomplete

Revisions Compare revisions