Iniciar sesión con Microsoft
Iniciar sesión o crear una cuenta
Hola:
Seleccione una cuenta diferente.
Tiene varias cuentas
Elija la cuenta con la que desea iniciar sesión.

A veces, es posible que desee usar los resultados de una consulta como un campo en otra consulta o como criterio para un campo de consulta. Por ejemplo, supongamos que desea ver el intervalo entre pedidos para cada uno de sus productos. Para crear una consulta que muestre este intervalo, debe comparar cada fecha de pedido con otras fechas de pedido de ese producto. Comparar estas fechas de pedido también requiere una consulta. Puede anidar esta consulta dentro de la consulta principal mediante una subconsulta.

Puede escribir una subconsulta en una expresión o en una instrucción Lenguaje de consulta estructurado (SQL) de vista SQL.

En este artículo

Usar los resultados de una consulta como campo en otra consulta

Puede usar una subconsulta como alias de campo. Use una subconsulta como alias de campo cuando desee usar los resultados de la subconsulta como un campo en la consulta principal.

Nota: Una subconsulta que use como alias de campo no puede devolver más de un campo.

Puede usar un alias de campo de subconsulta para mostrar valores que dependen de otros valores de la fila actual, lo que no es posible sin usar una subconsulta.

Por ejemplo, vamos a volver al ejemplo en el que quieres ver el intervalo entre los pedidos de cada uno de tus productos. Para determinar este intervalo, debes comparar cada fecha de pedido con otras fechas de pedido de ese producto. Puede crear una consulta que muestre esta información con la plantilla de base de datos de Northwind.

  1. En la pestaña Archivo, haga clic en Nuevo.

  2. En Plantillas disponibles, haga clic en Plantillas de ejemplo.

  3. Haga clic en Northwind y, a continuación, haga clic en Crear.

  4. Siga las instrucciones que aparecen en la página Northwind Traders (en la pestaña de objeto Pantalla de inicio) para abrir la base de datos y, a continuación, cierre la ventana Cuadro de diálogo de inicio de sesión.

  5. En el grupo Consultas de la pestaña Crear, haga clic en Diseño de la consulta.

  6. Haga clic en la pestaña Consultas y, a continuación, haga doble clic en Pedidos de productos.

  7. Haga doble clic en el campo Id. de producto y en el campo Fecha de pedido para agregarlos a la cuadrícula de diseño de la consulta.

  8. En la fila Ordenar de la columna Id. de producto de la cuadrícula, seleccione Ascendente.

  9. En la fila Ordenar de la columna Fecha de pedido de la cuadrícula, seleccione Descendente.

  10. En la tercera columna de la cuadrícula, haga clic con el botón secundario en la fila Campo y, a continuación, haga clic en Zoom en el menú contextual.

  11. En el cuadro de diálogo Zoom , escriba o pegue la siguiente expresión:

    Prior Date: (SELECT MAX([Order Date]) 
    FROM [Product Orders] AS [Old Orders]
    WHERE [Old Orders].[Order Date] < [Product Orders].[Order Date]
    AND [Old Orders].[Product ID] = [Product Orders].[Product ID])

    Esta expresión es la subconsulta. Para cada fila, la subconsulta selecciona la fecha de pedido más reciente que es menos reciente que la fecha del pedido que ya está asociada a la fila. Observe cómo usa la palabra clave AS para crear un alias de tabla, de modo que pueda comparar los valores de la subconsulta con los valores de la fila actual de la consulta principal.

  12. En la cuarta columna de la cuadrícula, en la fila Campo , escriba la siguiente expresión:

    Interval: [Order Date]-[Prior Date]

    Esta expresión calcula el intervalo entre cada fecha de pedido y la fecha de pedido anterior de ese producto, usando el valor de fecha anterior que definimos mediante una subconsulta.

  13. En la pestaña Diseño, en el grupo Resultados, haga clic en Ejecutar.

    1. La consulta se ejecuta y muestra una lista de nombres de productos, fechas de pedidos, fechas de pedidos anteriores y el intervalo entre fechas de pedido. Los resultados se ordenan en primer lugar por id. de producto (en orden ascendente) y, después, por fecha de pedido (en orden descendente).

    2. Nota: Dado que Id. de producto es un campo de búsqueda, De forma predeterminada, Access muestra los valores de búsqueda (en este caso, el nombre del producto), en lugar de los identificadores de producto reales. Aunque esto cambia los valores que aparecen, no cambia el criterio de ordenación.

  14. Cierre la base de datos Northwind.

Principio de página

Usar una subconsulta como criterio para un campo de consulta

Puede usar una subconsulta como criterio de campo. Use una subconsulta como criterio de campo cuando desee usar los resultados de la subconsulta para limitar los valores que muestra el campo.

Por ejemplo, supongamos que desea revisar una lista de pedidos procesados por empleados que no son representantes de ventas. Para generar esta lista, debe comparar el id. de empleado de cada pedido con una lista de los identificadores de empleado de los empleados que no son representantes de ventas. Para crear esta lista y usarla como criterio de campo, use una subconsulta, como se muestra en el procedimiento siguiente:

  1. Abra Northwind.accdb y habilite su contenido.

  2. Cierre el formulario de inicio de sesión.

  3. En la ficha Crear, en el grupo Otros, haga clic en Diseño de la consulta.

  4. En la pestaña Tablas , haga doble clic en Pedidos y empleados.

  5. En la tabla Pedidos, haga doble clic en el campo Id. de empleado , el campo Id. de pedido y el campo Fecha de pedido para agregarlos a la cuadrícula de diseño de la consulta. En la tabla Empleados, haga doble clic en el campo Puesto para agregarlo a la cuadrícula de diseño.

  6. Haga clic con el botón secundario en la fila Criterios de la columna Id. de empleado y, a continuación, haga clic en Zoom en el menú contextual.

  7. En el cuadro Zoom , escriba o pegue la siguiente expresión:

    IN (SELECT [ID] FROM [Employees] 
    WHERE [Job Title]<>'Sales Representative')

    Esta es la subconsulta. Selecciona todos los identificadores de empleados en los que el empleado no tiene un puesto de representante de ventas y proporciona el resultado establecido en la consulta principal. A continuación, la consulta principal comprueba si los id. de empleado de la tabla Pedidos están en el conjunto de resultados.

  8. En la pestaña Diseño, en el grupo Resultados, haga clic en Ejecutar.

    La consulta se ejecuta y los resultados de la consulta muestran una lista de pedidos procesados por empleados que no son representantes de ventas.

Principio de página

Palabras clave de SQL comunes que puede usar con una subconsulta

Hay varias palabras clave de SQL que puede usar con una subconsulta:

Nota: Esta lista no es exhaustiva. Puede usar cualquier palabra clave de SQL válida en una subconsulta, excluyendo las palabras clave de definición de datos.

  • TODO    Use ALL en una cláusula WHERE para recuperar las filas que cumplen la condición en comparación con todas las filas devueltas por la subconsulta.

    Por ejemplo, supongamos que está analizando datos de estudiantes en una universidad. Los estudiantes deben mantener un GPA mínimo, que varía de mayor a mayor. Las asignaturas principales y sus GPO mínimos se almacenan en una tabla denominada Asignaturas principales y la información relevante de los alumnos se almacena en una tabla denominada Student_Records.

    Para ver una lista de las asignaturas principales (y sus GPO mínimos) para los que todos los alumnos con dicha asignatura superan el GPA mínimo, puede usar la consulta siguiente:

    SELECT [Major], [Min_GPA] 
    FROM [Majors]
    WHERE [Min_GPA] < ALL
    (SELECT [GPA] FROM [Student_Records]
    WHERE [Student_Records].[Major]=[Majors].[Major]);
  • CUALQUIER    Use ANY en una cláusula WHERE para recuperar las filas que cumplen la condición en comparación con al menos una de las filas devueltas por la subconsulta.

    Por ejemplo, supongamos que está analizando datos de estudiantes en una universidad. Los estudiantes deben mantener un GPA mínimo, que varía de mayor a mayor. Las asignaturas principales y sus GPO mínimos se almacenan en una tabla denominada Asignaturas principales y la información relevante de los alumnos se almacena en una tabla denominada Student_Records.

    Para ver una lista de las asignaturas principales (y sus GPO mínimos) para los que cualquier estudiante con dicha asignatura no cumple el GPA mínimo, puede usar la siguiente consulta:

    SELECT [Major], [Min_GPA] 
    FROM [Majors]
    WHERE [Min_GPA] > ANY
    (SELECT [GPA] FROM [Student_Records]
    WHERE [Student_Records].[Major]=[Majors].[Major]);

    Nota: También puede usar la palabra clave SOME para el mismo propósito; la palabra clave SOME es sinónimo de ANY.

  • EXISTS     Use EXISTS en una cláusula WHERE para indicar que una subconsulta debe devolver al menos una fila. También puede prefacio EXISTE con NO, para indicar que una subconsulta no debe devolver ninguna fila.

    Por ejemplo, la consulta siguiente devuelve una lista de productos que se encuentran en al menos un orden existente:

    SELECT *
    FROM [Products]
    WHERE EXISTS
    (SELECT * FROM [Order Details]
    WHERE [Order Details].[Product ID]=[Products].[ID]);

    Con NO EXISTE, la consulta devuelve una lista de productos que no se encuentran en al menos un orden existente:

    SELECT *
    FROM [Products]
    WHERE NOT EXISTS
    (SELECT * FROM [Order Details]
    WHERE [Order Details].[Product ID]=[Products].[ID]);
  • EN    Use IN en una cláusula WHERE para comprobar que un valor de la fila actual de la consulta principal forma parte del conjunto que devuelve la subconsulta. También puede usar IN con NO para comprobar que un valor de la fila actual de la consulta principal no forma parte del conjunto que devuelve la subconsulta.

    Por ejemplo, la siguiente consulta devuelve una lista de pedidos (con fechas de pedido) que procesaron los empleados que no son representantes de ventas:

    SELECT [Order ID], [Order Date]
    FROM [Orders]
    WHERE [Employee ID] IN
    (SELECT [ID] FROM [Employees]
    WHERE [Job Title]<>'Sales Representative');

    Si usa NO EN, puede escribir la misma consulta de esta manera:

    SELECT [Order ID], [Order Date]
    FROM [Orders]
    WHERE [Employee ID] NOT IN
    (SELECT [ID] FROM [Employees]
    WHERE [Job Title]='Sales Representative');

Principio de página

¿Necesita más ayuda?

¿Quiere más opciones?

Explore las ventajas de las suscripciones, examine los cursos de aprendizaje, aprenda a proteger su dispositivo y mucho más.

Las comunidades le ayudan a formular y responder preguntas, enviar comentarios y leer a expertos con conocimientos extensos.

¿Le ha sido útil esta información?

¿Cuál es tu grado de satisfacción con la calidad del lenguaje?
¿Qué ha afectado a su experiencia?
Si presiona Enviar, sus comentarios se usarán para mejorar los productos y servicios de Microsoft. El administrador de TI podrá recopilar estos datos. Declaración de privacidad.

¡Gracias por sus comentarios!

×