Ausência de dados consultados não só sugere momento presente. Um registro faltando, no entanto, são dados que poderia ou deveria estar presente, mas não é. Por exemplo, os detalhes e pedidos residem em tabelas Customers e Orders. A lista de clientes é solicitado, e você, o programador, assumem cada cliente tem uma ordem. Oferecendo aos clientes a partir de ordens deve fornecer a lista de clientes correto, mas não é? Listagem clientes de clientes podem render mais, sugerindo ordens de alguns clientes perdidos. Você deve verificar quais os clientes estão faltando ordens e, em seguida, compreender se esta circunstância é por design ou um bug.
Exibir clientes distintos na tabela CLIENTES. Por exemplo:
SELECIONE c.CustomerID DISTINCT
De clientes CExibir clientes distintos na tabela encomendas. Por exemplo:
SELECIONE O.CUSTOMERID DISTINCT
DE ORDENS ODeterminar os clientes com encomendas em falta através da combinação de Passos 1 e 2 em uma subconsulta correlacionada.
SELECIONE c.CustomerID DISTINCT
De clientes C
ONDE NÃO EXISTE
(SELECT *DE ORDENS O
ONDE O.CUSTOMERID = c.CustomerID)
EXISTE é uma função do Oracle que testa para a existência de registros subconsulta retornou. prefaciando com "NÃO" testes para a ausência de registros. Aqui, a subconsulta corresponde clientes em ambas as tabelas. Jogos retornar resultados, o que excluiria aqueles combinado CUSTOMERID de do principal conjunto de resultados. seria exibido apenas CUSTOMERID Com páreo O.CUSTOMERID.
Alternativamente, determinar registros perdidos a partir de uma visão composta de mesas cusotmer e da ordem.
SELECIONE c.CustomerID DISTINCT
De clientes C, ORDENS O
ONDE c.CustomerID = O.CUSTOMERID (+)e O.CUSTOMERID é nulo
Se você suspeitar que a tabela Order poderia estar faltando registros, em seguida, tente esta consulta para exibir lado c.CustomerID e O.CUSTOMERID a lado. O (+) invoca uma junção externa esquerda, que informa Oracle para mostrar todos os dados correspondentes da instrução WHERE mais qualquer c.CustomerID de, pelo lado esquerdo, mesa de mão que não têm O.CUSTOMERID correspondentes da na tabela do lado direito.
Se houver c.CustomerID de sem O.CUSTOMERID correspondentes de, eles vão mostrar com valores nulos para o inexistente O.CUSTOMERID de. As linhas que possuem tais valores nulos representam os registros de pedidos em falta.
Se a lista é muito longa para a inspeção visual, a segunda instrução WHERE garante os resultados são limitados a c.CustomerID Com ordens desaparecidas.
dicas & avisos
- A consulta é considerado correlacionado porque as referências subconsulta C.CUSTOMER, que existe em uma tabela não referenciada na subconsulta. Oracle vai processar a subconsulta um registro de cada vez, tentando corresponder cada O.CUSTOMER a um C.CUSTOMER em sucessão, retornando um registro nulo nulo ou não, dependendo do resultado da partida.
- Uma subconsulta não correlacionada não tem nenhuma referência a um campo fora das suas tabelas de referência. Isso força a Oracle para executar a subconsulta e combinar o resultado completo definido para a consulta principal, à procura de jogos para as condições da cláusula WHERE.
- Deixar de pegar registros perdidos podem impactar o seu relatório final ao não apresentar o escopo completo dos dados.