Como usar Nested consultas SQL que são um Teste de Existência

A consulta retorna dados de todas as linhas da tabela SQL que satisfaçam as condições da consulta. Às vezes, muitas linhas são returned- às vezes apenas uma volta. Às vezes, nenhuma das linhas na tabela satisfazer as condições, e nenhuma linha é retornada.

Você pode usar o EXISTE e NÃO EXISTE predicados para introduzir uma subconsulta. Essa estrutura informa se quaisquer linhas na tabela localizada na subconsulta de A PARTIR DE cláusula de cumprir as condições em sua ONDE cláusula.

EXISTE e NÃO EXISTE subconsultas são exemplos de subconsultas correlacionadas.

UMA subconsulta correlacionada primeiro encontra a tabela e linha especificada pela instrução de inclusão e, em seguida, executa a subconsulta na linha na tabela de subconsulta que se correlaciona com a linha atual da tabela da instrução de inclusão.

A subconsulta quer retorna uma ou mais linhas ou ele retorna nenhum. Se ela retorna pelo menos uma linha, a EXISTE predicado for bem-sucedido, e a declaração que encerra realiza sua ação. Nas mesmas condições, o NÃO EXISTE predicado falha, ea declaração de inclusão não executa a sua acção.

Depois de uma linha da tabela da instrução envolvente é processado, a mesma operação é executada na próxima linha. Esta ação é repetida até que cada linha na tabela de declaração de inclusão foi processado.

EXISTE

Suponha que você é um vendedor de Zetec Corporation e você quer chamar o seu povo de contacto primários em todas as organizações de clientes da Zetec na Califórnia. Tente a seguinte consulta:

SELECT * DE CONTACTWHERE existe (SELECT * FROM CUSTOMERWHERE CustState = 'CA'AND CONTACT.CustID = CUSTOMER.CustID) -

Observe a referência a CONTACT.CustID, que é referência a uma coluna da consulta externa e compará-lo com outra coluna, CUSTOMER.CustID, a partir da consulta interna. Para cada linha candidata da consulta externa, você avaliar a consulta interna, usando o CustID valor da actual CONTATO linha da consulta externa na ONDE cláusula da consulta interna.

Eis o que acontece:

  1. o CustID coluna une a tabela de contato para a tabela CUSTOMER.

  2. SQL olha para o primeiro registro na tabela CONTACT, encontra a linha na tabela do CLIENTE que tem o mesmo CustID, e verifica essa linha de CustState campo.

  3. E se CUSTOMER.CustState = 'CA', o atual CONTATO linha é adicionada à tabela de resultados.

  4. Nas próximas CONTATO ficha é então processado da mesma forma, e assim por diante, até que a tabela CONTACTO inteiro foi processado.

  5. Porque especifica consulta * SELECT FROM CONTACT, todos os campos da tabela do contato são devolvidos, incluindo o nome do contato e número de telefone.

NÃO EXISTE

O vendedor Zetec quer saber os nomes e números das pessoas de contacto de todos os clientes na Califórnia. Imagine que um segundo vendedor é responsável por todos os Estados Unidos, exceto Califórnia. Ela pode recuperar o seu povo de contato usando NÃO EXISTE em uma consulta semelhante à anterior:

SELECT * DE CONTACTWHERE NÃO EXISTE (SELECT * FROM CUSTOMERWHERE CustState = 'CA'AND CONTACT.CustID = CUSTOMER.CustID) -

Cada linha de contato para que a subconsulta não retornar uma linha é adicionada à tabela de resultados.

menu