Estoy tratando de aprender SQL y estoy teniendo dificultades para entender las declaraciones EXISTS. Me encontré con esta cita sobre "existe" y no entiendo algo:¿Cómo funcionan las declaraciones SQL EXISTS?
Usando el operador existe, su consulta puede devolver cero, una, o muchas filas, y la condición simplemente comprueba si la subconsulta devuelve ningún filas Si observas la cláusula de selección de la subconsulta, verás que consiste en un solo literal (1); dado que la condición en la consulta que contiene solo necesita saber cuántas filas se han devuelto, los datos reales que devuelve la subconsulta son irrelevantes.
Lo que no entiendo es ¿cómo sabe la consulta externa qué fila está revisando la subconsulta? Por ejemplo:
SELECT *
FROM suppliers
WHERE EXISTS (select *
from orders
where suppliers.supplier_id = orders.supplier_id);
entiendo que si el ID del proveedor y las órdenes de partido tabla, la subconsulta devolverá verdadero y todas las columnas de la fila coincidente en la tabla de los proveedores se emitirán. Lo que no entiendo es cómo la subconsulta comunica qué fila específica (digamos la fila con el id. De proveedor 25) debe imprimirse si solo se devuelve un verdadero o falso.
Me parece que no existe relación entre la consulta externa y la subconsulta.
La combinación interna producirá resultados diferentes que EXISTS si hay más de un registro secundario asociado a un elemento primario; no son idénticos. –
Creo que mi confusión podría ser que he leído que la subconsulta con un EXISTO devuelve verdadero o falso; pero esto no puede ser lo único que devuelve, ¿verdad? ¿La subconsulta también está devolviendo a todos los "proveedores que tienen filas correspondientes en la tabla de pedidos"? Pero si lo es, ¿cómo devuelve la declaración EXISTS un resultado booleano? Todo lo que estoy leyendo en los libros de texto dice que solo devuelve un resultado booleano, así que me está costando conciliar el resultado del código con lo que me dicen que devuelve. – Dan
Lea EXISTS como una función ... EXISTS (resultset). La función EXISTS devolverá true si el conjunto de resultados tiene filas, falso si está vacío. Eso es básicamente eso. –