Red de conocimiento informático - Problemas con los teléfonos móviles - ¿Cómo usar EXISTS en WHERE de sql?

¿Cómo usar EXISTS en WHERE de sql?

Por ejemplo, existe una consulta de este tipo en la base de datos de Northwind:

SELECT c.CustomerId,CompanyName FROM Customers c

WHERE EXISTS(

SELECCIONAR ID de pedido DE Pedidos o ¿DÓNDE o.CustomerID=c.CustomerID)?

¿Cómo funciona EXISTS aquí? La subconsulta devuelve el campo OrderId, pero la consulta externa busca los campos CustomerID y CompanyName, que definitivamente no están en OrderID, entonces, ¿cómo coincide esto?

EXISTS se utiliza para comprobar si la subconsulta devolverá al menos una fila de datos. La subconsulta en realidad no devuelve ningún dato, pero devuelve un valor de Verdadero o Falso.

Sintaxis: subconsulta EXISTS

Parámetros: la subconsulta es una instrucción SELECT restringida (la cláusula COMPUTE y la palabra clave INTO no están permitidas).

Tipo de resultado: Booleano Devuelve VERDADERO si la subconsulta contiene registros, en caso contrario devuelve FLASE.

El uso de NULL en la subconsulta seguirá devolviendo el conjunto de resultados

seleccione * de TableIn donde existe (seleccione nulo)

Equivalente: seleccione * de TableIn p>

Compara consultas usando EXISTS e IN. Tenga en cuenta que ambas consultas devuelven los mismos resultados.

seleccione * de TableIn donde existe (seleccione BID de TableEx donde BNAME=TableIn.ANAME)

seleccione * de TableIn donde ANAME esté (seleccione BNAME de TableEx)

Compara consultas usando EXISTS y = ANY. Observe que ambas consultas devuelven los mismos resultados.

seleccione * de TableIn donde existe (seleccione BID de TableEx donde BNAME=TableIn.ANAME)

seleccione * de TableIn donde ANAME=ANY (seleccione BNAME de TableEx)

NO EXISTE es lo opuesto a EXISTE. Si la subconsulta no devuelve ningún registro, se cumple la cláusula WHERE de NOT EXISTS.

Conclusión:

El valor de retorno de la cláusula EXISTS (incluido NOT EXISTS) es un valor BOOL. Hay una declaración de subconsulta (SELECT... FROM...) dentro de EXISTS, a la que llamo declaración de consulta interna de EXIST. Su declaración de consulta interna devuelve un conjunto de resultados. La cláusula EXISTS devuelve un valor booleano en función de si el conjunto de resultados de su declaración de consulta interna está vacío o no.

Una situación común puede entenderse como: en cada fila de la tabla de consulta externa, sustituya la consulta interna como prueba. Si la consulta interna devuelve un resultado no vacío, la cláusula EXISTS devuelve VERDADERO. esta fila se puede utilizar como resultado de la fila de consulta externa; de lo contrario, no se puede utilizar como resultado.

El analizador mirará la primera palabra de la declaración. Cuando encuentre que la primera palabra es la palabra clave SELECT, saltará a la palabra clave FROM, luego buscará el nombre de la tabla y usará la palabra clave FROM. a La tabla se carga en la memoria.

El siguiente paso es buscar la palabra clave WHERE. Si no se encuentra, regrese a SELECT para encontrar el campo analizado. Si se encuentra WHERE, analice las condiciones en él y luego regrese a SELECT para analizar el campo. Finalmente se forma la mesa virtual que queremos.

La palabra clave WHERE va seguida de una expresión condicional. Después de evaluar la expresión condicional, habrá un valor de retorno, que no es 0 ni 0. No 0 es verdadero (verdadero) y 0 es falso (falso).

El analizador primero encuentra la palabra clave SELECT, luego salta a la palabra clave FROM, importa la tabla ESTUDIANTE a la memoria, encuentra el primer registro a través del puntero y luego encuentra la palabra clave WHERE para calcular la expresión condicional. si es verdadero, los registros se cargan en la tabla virtual. Si es verdadero, el registro se cargará en la tabla virtual con el puntero apuntando al siguiente registro. Si es falso, el puntero apunta a la siguiente fila, no a otro registro. EXISTS es parte de una expresión condicional, que también tiene un valor de retorno (verdadero o falso).

Antes de insertar un registro, debe verificar si el registro ya existe y solo realizar la operación de inserción si el registro no existe. Puede utilizar la cláusula condicional EXISTS para evitar que se inserten registros duplicados.

¿INSERTAR EN TableIn (ANAME,ASEX)?

SELECCIONE los 1 primeros 'ZhangSan', 'Male' DE TableIn

DONDE no existe (seleccione * de TableIn donde TableIn.AID = 7)

La eficiencia de uso de EXISTS y in. existe es más eficiente que en, porque IN no indexará, pero depende de la situación real de uso:

IN es adecuado para situaciones externas pequeñas de la tabla. EXISTS es adecuado para situaciones externas pequeñas y relativamente grandes; áreas de la mesa.