sql >> Base de Datos >  >> RDS >> SQLite

SQLite EXISTE

Resumen :en este tutorial, aprenderá a usar SQLite EXISTS operador para probar la existencia de filas devueltas por una subconsulta.

Introducción a SQLite EXISTS operador

El EXISTS operator es un operador lógico que comprueba si una subconsulta devuelve alguna fila.

Esta es la sintaxis básica de EXISTS operador:

EXISTS(subquery)
Code language: SQL (Structured Query Language) (sql)

En esta sintaxis, la subconsulta es SELECT instrucción que devuelve cero o más filas.

Si la subconsulta devuelve una o más filas, EXISTS el operador devuelve verdadero. De lo contrario, EXISTS el operador devuelve falso o NULL .

Tenga en cuenta que si la subconsulta devuelve una fila con NULL , el resultado de EXISTS operador sigue siendo verdadero porque el conjunto de resultados contiene una fila con NULL.

Para negar el EXISTS operador, utiliza el NOT EXISTS operador de la siguiente manera:

NOT EXISTS (subquery)Code language: SQL (Structured Query Language) (sql)

El NOT EXISTS operador devuelve verdadero si la subconsulta no devuelve ninguna fila.

SQLite EXISTS ejemplo de operador

Ver los siguientes Customers y Invoices tablas de la base de datos de ejemplo:

La siguiente declaración encuentra clientes que tienen facturas:

SELECT
    CustomerId,
    FirstName,
    LastName,
    Company
FROM
    Customers c
WHERE
    EXISTS (
        SELECT 
            1 
        FROM 
            Invoices
        WHERE 
            CustomerId = c.CustomerId
    )
ORDER BY
    FirstName,
    LastName; 
Code language: SQL (Structured Query Language) (sql)

La siguiente imagen muestra el conjunto de resultados parciales:

En este ejemplo, para cada cliente, EXISTS el operador verifica si la identificación del cliente existe en las invoices mesa.

  • En caso afirmativo, la subconsulta devuelve una fila con el valor 1 que provoca el EXISTS operador evalúa a verdadero. Por lo tanto, la consulta incluye el cliente en el conjunto de resultados.
  • En caso de que la identificación del cliente no exista en las Invoices tabla, la subconsulta no devuelve filas, lo que hace que EXISTS operador para evaluar a falso, por lo tanto, la consulta no incluye al cliente en el conjunto de resultados.

Tenga en cuenta que puede usar el IN operador en lugar de EXISTS operador en este caso para lograr el mismo resultado:

SELECT
   CustomerId, 
   FirstName, 
   LastName, 
   Company
FROM
   Customers c
WHERE
   CustomerId IN (
      SELECT
         CustomerId
      FROM
         Invoices
   )
ORDER BY
   FirstName, 
   LastName;Code language: SQL (Structured Query Language) (sql)

Una vez que la subconsulta devuelve la primera fila, EXISTS El operador deja de buscar porque puede determinar el resultado. Por otro lado, el IN el operador debe escanear todas las filas devueltas por la subconsulta para determinar el resultado.

En términos generales, el EXISTS el operador es más rápido que IN operador si el conjunto de resultados devuelto por la subconsulta es grande. Por el contrario, el IN el operador es más rápido que EXISTS operador si el conjunto de resultados devuelto por la subconsulta es pequeño.

SQLite NOT EXISTS ejemplo de operador

Consulte la siguiente tabla de artistas y álbumes de la base de datos de ejemplo:

Esta consulta encuentra todos los artistas que no tienen ningún álbum en la tabla de álbumes:

SELECT
   *
FROM
   Artists a
WHERE
   NOT EXISTS(
      SELECT
         1
      FROM
         Albums
      WHERE
         ArtistId = a.ArtistId
   )
ORDER BY Name;Code language: SQL (Structured Query Language) (sql)

Aquí está la salida parcial:

En este tutorial, ha aprendido a usar SQLite EXISTS operador para probar la existencia de filas devueltas por una subconsulta.