Cómo utilizar consultas SQL anidadas que son una prueba de la existencia
Una consulta devuelve los datos de todas las filas de la tabla de SQL que satisfagan las condiciones de la consulta. A veces muchas filas se returned- veces sólo uno regresa. A veces ninguna de las filas de la tabla cumplen las condiciones, y no hay filas se devuelven.
Puede utilizar el EXISTS y NO EXISTE predicados introducir una subconsulta. Esa estructura le indica si las filas de la tabla se encuentra en la subconsulta de DE cláusula de satisfacer las condiciones de su DÓNDE cláusula.
EXISTS y NO EXISTE subconsultas son ejemplos de subconsultas correlacionadas.
LA subconsulta correlacionada primero se encuentra la mesa y fila especificada por la declaración que encierra y después ejecuta la subconsulta en la fila en la tabla de la subconsulta que se correlaciona con la fila actual de la tabla de la declaración que encierra.
La subconsulta devuelve ya sea una o más filas o devuelve nada. Si devuelve al menos una fila, la EXISTS predicado tiene éxito, y la declaración que encierra lleva a cabo su acción. En las mismas circunstancias, la NO EXISTE predicado falla, y la declaración que encierra no realiza su acción.
Después se procesa una fila de la tabla de la declaración que encierra, se realiza la misma operación en la fila siguiente. Esta acción se repite hasta que todas las filas en la tabla de la declaración que encierra ha sido procesado.
EXISTS
Supongamos que usted es un vendedor de Zetec Corporation y que quiere llamar a su gente de contacto primario en todas las organizaciones de los clientes de Zetec en California. Pruebe la siguiente consulta:
SELECT * FROM CONTACTWHERE EXISTS (SELECT * FROM CUSTOMERWHERE CustState = 'CA'AND CONTACT.CustID = CUSTOMER.CustID) -
Note la referencia a CONTACT.CustID, que se hace referencia a una columna de la consulta externa y compararlo con otra columna, CUSTOMER.CustID, a partir de la consulta interna. Para cada fila candidata de la consulta externa, a evaluar la consulta interna, mediante el CustID valor de la corriente CONTACTAR fila de la consulta externa en el DÓNDE cláusula de la consulta interna.
Esto es lo que sucede:
los CustID columna vincula la tabla de contacto para la tabla CUSTOMER.
SQL se ve en el primer registro de la tabla CONTACTO, encuentra la fila de la tabla CLIENTE que tiene el mismo CustID, y comprueba que la fila de CustState campo.
Si CUSTOMER.CustState = 'CA', el actual CONTACTAR fila se agrega a la tabla de resultados.
El próximo CONTACTAR registro se procesa a continuación, de la misma manera, y así sucesivamente, hasta que toda la tabla de contacto ha sido procesado.
Debido a que los especifica la consulta * SELECT DE CONTACTO, todos los campos de la tabla de contactos se devuelven, incluyendo el nombre del contacto y número de teléfono.
NO EXISTE
El vendedor Zetec quiere saber los nombres y números de las personas de contacto de todos los clientes en California. Imagine que un segundo vendedor es responsable de todos los Estados Unidos, excepto California. Ella puede recuperar su gente de contacto mediante el uso de NO EXISTE en una consulta similar a la anterior:
SELECT * FROM CONTACTWHERE NO EXISTE (SELECT * FROM CUSTOMERWHERE CustState = 'CA'AND CONTACT.CustID = CUSTOMER.CustID) -
Cada fila de contacto a la que la subconsulta no devuelve una fila se agrega a la tabla de resultados.