Buscar en Asptutor     
Demo Tienda Virtual Tutorcar
 Navegacion->Inicio | Tutorial de SQL  

La web de los recursos y ejemplos de asp

 

 
 

Mis mas sinceros agradecimientos a Claudio Casares por este excelente tutorial


Tutorial de SQL

 

7. SubConsultas

Una subconsulta es una instrucción SELECT anidada dentro de una instrucción SELECT, SELECT...INTO, INSERT...INTO, DELETE, o UPDATE o dentro de otra subconsulta.

Puede utilizar tres formas de sintaxis para crear una subconsulta:

    comparación [ANY | ALL | SOME] (instrucción sql)
    expresión [NOT] IN (instrucción sql)
    [NOT] EXISTS (instrucción sql)

En donde:

comparación

Es una expresión y un operador de comparación que compara la expresión con el resultado de la subconsulta.

expresión

Es una expresión por la que se busca el conjunto resultante de la subconsulta.

instrucción sql

Es una instrucción SELECT, que sigue el mismo formato y reglas que cualquier otra instrucción SELECT. Debe ir entre paréntesis.

Se puede utilizar una subconsulta en lugar de una expresión en la lista de campos de una instrucción SELECT o en una cláusula WHERE o HAVING. En una subconsulta, se utiliza una instrucción SELECT para proporcionar un conjunto de uno o más valores especificados para evaluar en la expresión de la cláusula WHERE o HAVING.

Se puede utilizar el predicado ANY o SOME, los cuales son sinónimos, para recuperar registros de la consulta principal, que satisfagan la comparación con cualquier otro registro recuperado en la subconsulta. El ejemplo siguiente devuelve todos los productos cuyo precio unitario es mayor que el de cualquier producto vendido con un descuento igual o mayor al 25 por ciento.:

    SELECT * FROM Productos WHERE PrecioUnidad > ANY
    (SELECT PrecioUnidad FROM DetallePedido WHERE Descuento >= 0 .25);

El predicado ALL se utiliza para recuperar únicamente aquellos registros de la consulta principal que satisfacen la comparación con todos los registros recuperados en la subconsulta. Si se cambia ANY por ALL en el ejemplo anterior, la consulta devolverá únicamente aquellos productos cuyo precio unitario sea mayor que el de todos los productos vendidos con un descuento igual o mayor al 25 por ciento. Esto es mucho más restrictivo.

El predicado IN se emplea para recuperar únicamente aquellos registros de la consulta principal para los que algunos registros de la subconsulta contienen un valor igual. El ejemplo siguiente devuelve todos los productos vendidos con un descuento igual o mayor al 25 por ciento.:

    SELECT * FROM Productos WHERE IDProducto IN
    (SELECT IDProducto FROM DetallePedido WHERE Descuento >=  0.25);

Inversamente se puede utilizar NOT IN para recuperar únicamente aquellos registros de la consulta principal para los que no hay ningún registro de la subconsulta que contenga un valor igual.

El predicado EXISTS (con la palabra reservada NOT opcional) se utiliza en comparaciones de verdad/falso para determinar si la subconsulta devuelve algún registro.

Se puede utilizar también alias del nombre de la tabla en una subconsulta para referirse a tablas listadas en la cláusula FROM fuera de la subconsulta. El ejemplo siguiente devuelve los nombres de los empleados cuyo salario es igual o mayor que el salario medio de todos los empleados con el mismo título. A la tabla Empleados se le ha dado el alias T1::

    SELECT Apellido, Nombre, Titulo, Salario FROM Empleados AS T1
    WHERE Salario >= (SELECT Avg(Salario) FROM Empleados
    WHERE T1.Titulo = Empleados.Titulo) ORDER BY Titulo;

En el ejemplo anterior , la palabra reservada AS es opcional.

    SELECT Apellidos, Nombre, Cargo, Salario FROM Empleados
    WHERE Cargo LIKE "Agente Ven*" AND Salario > ALL (SELECT Salario FROM
    Empleados WHERE (Cargo LIKE "*Jefe*") OR (Cargo LIKE "*Director*"));

    Obtiene una lista con el nombre, cargo y salario de todos los agentes de ventas cuyo salario es mayor que el de todos los jefes y directores.

    SELECT DISTINCTROW NombreProducto, Precio_Unidad FROM Productos
    WHERE (Precio_Unidad = (SELECT Precio_Unidad FROM Productos WHERE
    Nombre_Producto = "Almíbar anisado");

    Obtiene una lista con el nombre y el precio unitario de todos los productos con el mismo precio que el almíbar anisado.

    SELECT DISTINCTROW Nombre_Contacto, Nombre_Compañia, Cargo_Contacto,
    Telefono FROM Clientes WHERE (ID_Cliente IN (SELECT DISTINCTROW
    ID_Cliente FROM Pedidos WHERE Fecha_Pedido >= #04/1/93# <#07/1/93#);

    Obtiene una lista de las compañías y los contactos de todos los clientes que han realizado un pedido en el segundo trimestre de 1993.

    SELECT Nombre, Apellidos FROM Empleados AS E WHERE EXISTS
    (SELECT * FROM Pedidos AS O WHERE O.ID_Empleado = E.ID_Empleado);

    Selecciona el nombre de todos los empleados que han reservado al menos un pedido.

    SELECT DISTINCTROW Pedidos.Id_Producto, Pedidos.Cantidad,
    (SELECT DISTINCTROW Productos.Nombre FROM Productos WHERE
    Productos.Id_Producto = Pedidos.Id_Producto) AS ElProducto FROM
    Pedidos WHERE Pedidos.Cantidad > 150 ORDER BY Pedidos.Id_Producto;

    Recupera el Código del Producto y la Cantidad pedida de la tabla pedidos, extrayendo el nombre del producto de la tabla de productos.

 
 

Volver

Incio

Salir

Siguiente

Alojado en:


urbe-networks.com

Recomienda esta pagina a un amigo

Servicios Gratuitos

Articulos relacionados

Utilizar GetRows()

Tienda Virtual - Carrito de compra

Messenger a través de BD en ASP

Miniaplicacion de comercio electronico

Objeto Datagrid de ASP.NET en ASP

Acotación de resultados

Combo-box enlazados con datos de una B.D

Como vaciar un array

Codigo de un Libro de visitas(I)

Tabla de asignación de colores

Dando formato a los numeros (Función FormatDateTime)

Como poner las fechas en castellano

Combo-box enlazados con datos de una B.D

Listado en dos columnas

Redireccion de vuelta después de un login

Redireccionar una pagina con un Timer


Enlaces recomendados

   
 

Descargas de manuales¦ Ejemplos de código ¦ Artículos mas visitados ¦ Envía tu articulo ¦ Foros ¦
  Libro de visitas ¦Crea un enlace con ASPTutor 
 

    © 2001-Hasta hoy  Pedro Rufo Martín  contactar