Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como a Subconsulta na instrução select funciona no oracle


É simples-
SELECT empname,
       empid,
       (SELECT COUNT (profileid)
          FROM profile
         WHERE profile.empid = employee.empid)
           AS number_of_profiles
  FROM employee;

É ainda mais simples quando você usa uma junção de tabela assim:
  SELECT e.empname, e.empid, COUNT (p.profileid) AS number_of_profiles
    FROM employee e LEFT JOIN profile p ON e.empid = p.empid
GROUP BY e.empname, e.empid;

Explicação para a subconsulta:

Essencialmente, uma subconsulta em um select obtém um valor escalar e o passa para a consulta principal. Uma subconsulta em select não é permitido passar mais de uma linha e mais de uma coluna, o que é uma restrição. Aqui, estamos passando um count para a consulta principal, que, como sabemos, sempre seria apenas um número - um valor escalar. Se um valor não for encontrado, a subconsulta retornará null para a consulta principal. Além disso, uma subconsulta pode acessar colunas do from cláusula da consulta principal, conforme mostrado na minha consulta onde employee.empid é passado da consulta externa para a consulta interna.

Editar :

Quando você usa uma subconsulta em um select cláusula, o Oracle essencialmente a trata como uma junção à esquerda (você pode ver isso no plano de explicação da sua consulta), com a cardinalidade das linhas sendo apenas uma à direita para cada linha à esquerda.

Explicação para a junção esquerda

Uma junção à esquerda é muito útil, especialmente quando você deseja substituir o select subconsulta devido às suas restrições. Não há restrições aqui no número de linhas das tabelas em ambos os lados do LEFT JOIN palavra-chave.

Para obter mais informações, leia o Oracle Docs sobre subconsultas e junção esquerda ou junção externa esquerda.