Introducción a los operadores
Los operadores EXISTS , NOT EXISTS y WITH son términos predefinidos en SQL. Se utilizan principalmente junto con las sentencias SQL SELECT, UPDATE o DELETE. Su propósito es probar la existencia de registros en una subconsulta.
Uso de los operadores EXISTS y NOT EXISTS
Los operadores EXISTS y NOT EXISTS se utilizan en una verificación de existencia en una subconsulta. Ambos operadores deben usarse junto con otros comandos SQL y no son independientes por sí mismos. La Figura 1 a continuación se utilizará para explicar cómo se pueden utilizar los operadores EXISTS y NOT EXISTS. La primera tabla almacena la relación proveedor-artículo y se denomina itemSupplier, mientras que la segunda tabla almacena la información maestra del artículo y se denomina artículo.
![]() |
Como se mencionó, los operadores EXISTS y NOT EXISTS se usan para probar la existencia de registros en una subconsulta y DEBEN usarse junto con otra declaración SQL. Por ejemplo, suponga que se recibe una solicitud para enumerar los ID de artículo de todos los números de pieza que aún no tienen un proveedor asignado. ¿Cómo se puede lograr esto con el operador EXISTS?
La siguiente declaración puede lograr esto:
SELECCIONE item.itemID FROM item
DONDE EXISTE (
SELECT itemID
FROM itemSupplier
DONDE itemSupplier.itemID = item.itemID
);
La subconsulta (SELECT itemID FROM itemSupplier WHERE itemSupplier.itemID = item.itemID) enumera los itemID para todos los elementos que existen en la tabla itemSupplier (es decir, itemIDs I000000001, I000000002 e I000000003). El operador EXISTS comprueba para asegurarse de que los itemID seleccionados de la tabla de elementos existen en el conjunto de itemID devueltos por la subconsulta. Posteriormente los resultados que contienen la lista I000000001, I000000002 y I000000003 es el resultado final obtenido.
De manera similar, la siguiente declaración SQL con el operador NOT EXISTS enumerará todos los ID de elemento en la tabla de elementos que no existen en la tabla de proveedores de elementos.
SELECCIONE itemID DEL elemento
DONDE NO EXISTE
(
SELECCIONE itemID DEL itemSupplier DONDE itemSupplier.itemID = item.itemID
);
Además de la instrucción SELECT, el operador EXISTS también se puede utilizar con las instrucciones UPDATE y DELETE SQL. En la declaración UPDATE a continuación, el campo uom en la tabla de elementos para todos los registros con los ID de elemento existentes en la tabla de proveedores de elementos se concatenará con una ‘s’.
ACTUALIZAR
CONJUNTO de ítems uom = concat
(
TRIM (uom), 's')
DONDE EXISTE
(
SELECCIONE EL ID DE ítem DISTINTO DE itemSupplier b DONDE itemSupplier.itemID = item.itemID
)
);
Finalmente, en la siguiente declaración SQL, se eliminarán todos los registros de la tabla de elementos con el valor de ID de elemento existente en la tabla de proveedores de elementos.
ELIMINAR DEL elemento
DONDE EXISTE
(
SELECCIONE EL ID del elemento DISTINTO DEL proveedor del elemento DONDE el proveedor del elemento.ID del elemento = el ID del elemento
);
Tenga en cuenta que también hay otras declaraciones SQL que pueden sustituir al operador EXISTS para lograr el mismo objetivo. Los operadores IN y ANY que se muestran a continuación son similares a nuestro ejemplo anterior con el operador EXISTS y devolverán los mismos resultados:
SELECCIONE itemID DEL artículo DONDE itemID IN (SELECCIONE ID de artículo DISTINTO DEL proveedor de artículos);
Y:
SELECCIONE item.itemID FROM item DONDE item.itemID = CUALQUIER (SELECCIONE DISTINCT itemID FROM itemsupplier)
Uso del operador WITH
El operador SQL WITH se usa con CTE (Common Table Expression) y siempre debe usarse junto con otra declaración SQL principal. La cláusula WITH se usa para crear una tabla temporal como una vista SQL. La diferencia es que las vistas de SQL se almacenan permanentemente como parte del esquema de la base de datos, mientras que el CTE solo está disponible cuando se usa junto con su consulta vinculada. Una vez que la consulta complete la ejecución, el CTE se eliminará y ya no se podrá acceder a él.
A continuación se muestra un ejemplo de instrucción WITH SQL:
Defina el nombre de la expresión CTE y la lista de columnas.
CON PODetail_CTE (PONumber, Supplier, TotalSales)
COMO
Defina la consulta CTE.
(
Podetail.ponumber SELECT, poheader.supplierID, sum (podetail.qtyordered * itemsupplier.price)
AS VentasTotales
DE poheader, podetail, itemsupplier
DONDE poheader.ponumber = podetail.ponumber Y poheader.supplierID = itemsupplier.supplierID Y podetail.itemID = itemsupplier .itemID GROUP BY b.ponumber, a.supplierID
Defina la consulta externa que hace referencia al nombre de CTE.
SELECCIONE SUM (totalSales)
DE PODetail_CTE
En la declaración anterior, WITH se utiliza para crear la tabla denominada PODetail_CTE con tres campos denominados ‘PONumber’, ‘Supplier’ y ‘TotalSales’. Los valores para estos campos se obtienen ejecutando la consulta CTE interna que extrae los valores requeridos de las tablas ‘poheader’, ‘podetail’ y ‘itemSupplier’. Una vez que se crea la tabla PODetail_CTE y se completa con datos, la consulta SQL principal externa puede hacer referencia a esta tabla por su nombre y realizar el procesamiento necesario requerido.
La cláusula WITH también se puede utilizar con las sentencias UPDATE o DELETE SQL. Considere el siguiente ejemplo que muestra cómo se usa la cláusula WITH con una instrucción SQL UPDATE:
CON item_CTE (itemID, UOM)
AS
(
SELECT itemID, UOM FROM item
WHERE itemID = 'I000000005'
)
ACTUALIZAR item_CTE SET UOM = 'PCs';
En este ejemplo, se crea la tabla item_CTE y contendrá registros con itemID con el valor de ‘I000000005’. La declaración principal de SQL UPDATE actualiza la tabla base vinculada a la tabla item_CTE (es decir, la tabla de elementos) y establece el valor del campo UOM en ‘PC’. Tenga en cuenta que la declaración ACTUALIZAR aquí en realidad actualiza los elementos de la tabla base al valor ‘PC’. No se requiere una actualización de item_CTE y no tiene sentido, ya que la tabla item_CTE se eliminará una vez que se complete la consulta UPDATE. De manera similar, si se usa la instrucción SQL DELETE, los registros que cumplen los criterios también se eliminarán de la tabla base.
La cláusula WITH también se puede usar en una situación ligeramente diferente cuando se usa junto con las funciones ROLLUP o CUBE . Las cláusulas WITH ROLLUP y WITH CUBE se utilizan para agregar datos. Esencialmente, se utilizan como operaciones agregadas que trabajan en varios niveles de una jerarquía. La Figura 2 a continuación se utilizará para ilustrar cómo funcionan las funciones WITH ROLLUP y WITH CUBE:
![]() |
A continuación se muestra un ejemplo de la cláusula WITH ROLLUP:
SELECCIONE poheader.ponumber, podetail.itemid, SUM (podetail.qtyOrdered * itemsupplier.price) de poheader, podetail, itemsupplier
DONDE poheader.ponumber = podetail.ponumber Y podetail.itemID = itemsupplier.itemID AND poheader.supplierIDs = itemsupplier
GROUP POR poheader.ponumber, podetail.itemID
WITH rollup;
El resultado de esta declaración SQL es como se muestra en la Figura 3. Observe cómo la cláusula WITH ROLLUP puede agregar en función del campo ponumber. Hay totales resumidos para cada número (es decir, las cantidades de todos los ID de artículo dentro del mismo número sumadas), así como el total general generado.
![]() |
De manera similar, la cláusula WITH CUBE se agrega en función de más dimensiones.
SELECCIONE poheader.ponumber, podetail.itemid, SUM (podetail.qtyOrdered * itemsupplier.price) de poheader, podetail, itemsupplier
DONDE poheader.ponumber = podetail.ponumber Y podetail.itemID = itemsupplier.itemID AND poheader.supplierIDs = itemsupplier
GROUP POR poheader.ponumber, podetail.itemID
WITH cube;
En el ejemplo anterior, agrega las cantidades basadas en los campos ponumber y itemID y genera el total general como la cláusula WITH ROLLUP. Los resultados se describen en la Figura 4 a continuación:
![]() |
Resumen de la lección
Los operadores EXISTS , NOT EXISTS y WITH son algunas características predefinidas disponibles en todos los sistemas SQL para permitir que los datos se manipulen de manera efectiva. Los operadores EXISTS y NOT EXISTS se utilizan para comprobar la existencia y actúan como una subconsulta a una declaración SQL principal. La cláusula WITH se utiliza como CTE (Common Table Extension), donde se crea una tabla temporal para simplificar y facilitar el procesamiento posterior.
Continúa con:
- Negocios
Lenguaje de consulta estructurado: manipulación de bases de datos mediante SQL
Manipular una base de datos Una de las funciones principales de un sistema de gestión...
- Negocios
Aplicación práctica de introducción a SQL: vistas
Descripción general de la lección y conocimientos necesarios Para completar esta lección práctica, debe poder...
- Negocios
SQL: instrucción INSERT
¿Cómo agregamos información a la tabla? Una tabla de base de datos es excelente, pero...
- Negocios
Restricción SQL DROP: Tutorial y descripción general
¿Qué es una restricción? Una declaración de lenguaje de consulta estructurado o SQL es un...




