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.
Menu
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:
o CustID coluna une a tabela de contato para a tabela CUSTOMER.
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.
E se CUSTOMER.CustState = 'CA', o atual CONTATO linha é adicionada à tabela de resultados.
Nas próximas CONTATO ficha é então processado da mesma forma, e assim por diante, até que a tabela CONTACTO inteiro foi processado.
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.