InicioArticulos y noticiasBases de datosProgramaciónForosInternetServiciosContratacionEmail
Tutorial SQL
Introducción SQL
El lenguaje SQL
Componentes del lenguaje SQL
Tablas
Indices
Vistas
Consultar datos. SELECT
Insertar datos. INSERT
Borrado de datos. DELETE
Actualización de datos. UPDATE
Consultas combinadas. JOINS
Consultas agregadas
Subconsultas
SQL
  Tutorial SQL
SQL Server
  Tutorial de Transact-SQL
ORACLE
  Tutorial PL/SQL
.NET
  Introducción a.NET
  Conceptos generales .NET
  Tutorial C#
  LinQ
  WCF
Reina Roja
  Humor
  Bibliografia
  Acerca de ...

Afiliados
La Web del programador
MundoProgramacion


 

Subconsultas

Definición de subconsultas.

    Una subconsulta es una sentencia SELECT que aparece dentro de otra sentencia SELECT. Normalmente se utilizan para filtrar una clausula WHERE o HAVING con el conjunto de resultados de la subconsulta, aunque también pueden utilizarse en la lista de selección.

    Por ejemplo podriamos consultar el alquirer último de un cliente.


 SELECT CO_CLIENTE, NOMBRE, MARCA, MODDELO
 FROM ALQUILERES
 WHERE CO_CLIENTE = 1
 AND   FECHA_ALQUILER = (SELECT MAX(FECHA_ALQUILER)
        FROM ALQUILERES
        WHERE CO_CLIENTE = 1)

       
    En este caso, la subconsulta se ejecuta en primer lugar, obteniendo el valor de la máxima fecha de alquier, y posteriormente se obtienen los datos de la consulta principal.

    Una subconsulta tiene la misma sintaxis que una sentencia SELECT normal exceptuando que aparece encerrada entre paréntesis.

    La subconsulta se puede encontrar en la lista de selección, en la cláusula WHERE o en la cláusula HAVING de la consulta principal.

Tiene las siguientes reestricciones:

  • No puede contener la cláusula ORDER BY
  • No puede ser la UNION de varias sentencias SELECT
  • Si la subconsulta aparece en la lista de selección,o esta asociada a un operador igual "=" solo puede devolver un único registro.

Referencias externas 
 
    A menudo, es necesario, dentro del cuerpo de una subconsulta, hacer referencia al valor de una columna de la fila actual en la consulta principal, ese nombre de columna se denomina referencia externa.

    Una referencia externa es un campo que aparece en la subconsulta pero se refiere a la una de las tablas designadas en la consulta principal.

    Cuando se ejecuta una consulta que contiene una subconsulta con referencias externas, la subconsulta se ejecuta por cada fila de la consulta principal.

    En este ejemplo la subconsulta aparece en la lista de selección, ejecutandose una vez por cada fila que devuelve la consulta principal.


 SELECT CO_EMPLEADO,
     NOMBRE,
     (SELECT MIN(FECHA_NOMINA)
FROM NOMINAS
WHERE CO_EMPLEADO = EMPLEADOS.CO_EMPLEADO)
PRIMERA_NOMINA
 FROM EMPLEADOS;

Anidar subconsultas 
 
    Las subconsultas pueden anidarse de forma que una subconsulta aparezca en la cláusula WHERE (por ejemplo) de otra subconsulta que a su vez forma parte de otra consulta principal. 


 SELECT  CO_EMPLEADO,
   EMPLEADOS
 FROM EMPLEADOS
 WHERE CO_EMPLEADO IN (SELECT CO_EMPLEADO
        FROM NOMINAS
        WHERE ESTADO  IN ( SELECT ESTADO
            FROM ESTADOS_NOMINAS
            WHERE EMITIDO = 'S'
              AND PAGADO = 'N')
       )

    Los resultados que se obtienen con subconsultas normalmente pueden conseguirse a través de consultas combinadas ( JOIN ).


 SELECT  CO_EMPLEADO,
    NOMBRE
 FROM EMPLEADOS
 WHERE ESTADO IN (SELECT ESTADO
      FROM ESTADOS
      WHERE ACTIVO = 'S')

    Podrá escribirse como :


 SELECT  CO_EMPLEADO,
    NOMBRE
 FROM EMPLEADOS, ESTADOS
 WHERE EMPLEADOS.ESTADO = ESTADOS.ESTADO
   AND ESTADOS.ACTIVO = 'S' 

    Normalmente es más rápido utilizar un JOIN en lugar de una subconsulta, aunque esto depende sobre todo del diseño de la base de datos y del volumen de datos que tenga.

 Utilizacion de subconsultas con UPDATE
 
    Podemos utilizar subconsultas también en consultas de actualización conjuntamente con UPDATE. Normalmente se utilizan para "copiar" el valor de otra tabla.


 UPDATE  EMPLEADOS
  SET SALARIO_BRUTO = (SELECT SUM(SALIRO_BRUTO)
        FROM NOMINAS
        WHERE NOMINAS.CO_EMPLEADO = EMPLEADOS.CO_EMPLEADO)
 WHERE SALARIO_BRUTO IS NULL


La función EXISTS

    EXISTS es una función SQL que devuelve veradero cuando una subconsulta retorna al menos una fila.


 SELECT  CO_CLIENTE,
    NOMBRE
 FROM CLIENTES
 WHERE EXISTS ( SELECT *
      FROM MOROSOS
      WHERE CO_CLIENTE = CLIENTES.CO_CLIENTE
        AND PAGADO = 'N')
 

    La función EXISTS puede ser utilizada en cualquier sentencia SQL váida, SELECT, UPDATE, INSERT o DELETE


 


Inicio | Tutorial SQL Consultas agregadasTutorial SQL Versión para imprimir Foros de consulta

 
Hola por Alejandra
Respuesta recibida el [25/05/2007 11:00:46]
Me parece que este tutorial es muy bueno

 
Magnífico Tutorial por anonymous
Respuesta recibida el [28/05/2007 12:32:03]
Claro,conciso y muy bien organizado.

 
Hola por Gaudencio
Respuesta recibida el [19/06/2007 11:22:49]
Esta muy bien explicado, si sintaxis es entendible, lo recominedo

 
très bien por Mauricio
Respuesta recibida el [22/06/2007 08:49:41]
Es excelente que halla páginas como esta para las personas que apenas andamos comenzando en estas ondas

 
Tutorial Excelente por Manu
Respuesta recibida el [17/07/2007 09:54:58]
Para principiantes, muy ilustrativos gracias a sus ejemplos

 
Interesante por Johnny
Respuesta recibida el [20/07/2007 09:23:39]
Hola me parese interesante su tutorial quisiera tener amigos para intercambiar ideas en Base de Datos, y Programacion incluso hasta de sistema Operativo ... mi correo es .. luisantonio_moran@hotmail.com .. bueno amigos sin mas que decirle me despido .. espero tener muchos amigos para intercambiar ideas by cuidese

 
buena ... muy interesante por henry prado yarleque - peru
Respuesta recibida el [28/07/2007 09:41:19]
Hola, El tutorial es bueno muy concreto y conciso, gtracias por todos aquellos a los que nos son utiles estas herramientas...

 
Salut!! por Quimera!!
Respuesta recibida el [31/07/2007 01:47:40]
Hola,el tutorial me parece muy completo me a servido de mucho en estos ultimos meses para mis tareas ya que tengo una maestra muy especial...dejo mi correo para quien me quiera conocer.
angel_.13@hotmail.com

 
EXCELENTE por Manuel R. Bercián
Respuesta recibida el [07/09/2007 11:07:43]
Esto era lo que yo buscaba, EXCELENTE segui adelante!! muy buen material

 
muy bueno, lo recomiendo por Anónimo
Respuesta recibida el [13/09/2007 11:12:42]
me parece un excelente tutorial, esta muy completo

 
TENGO UN PROYECTO EN MENTE por XELA
Respuesta recibida el [19/09/2007 10:02:04]
CAUSA BUENAZO EL TUTORIAL(LO HE LEIDO TODOO...), AH DE VERDAD VALES YO HE ESTOY ESTUDIANDO PROGRAMACION RECIEN VOY EN 3° CICLO ME HA SERVIDO BASTANTE... SIGUE PONIENDO MAS TUTORIALES...
TE QUISIERA PREGUNTAR ALGO MUY PARTICULAR SOBRE UN PROYECTO QUE TENGO EN MENTE(NO SE SI TE PARECERA INTERESANTE)PERO TE DEJO MI CORREO: alex_bueno_19@hotmail.com

 
No pongais los correos en el f... por Devjoker
Respuesta recibida el [24/09/2007 01:33:52]
No pongais los correos en el foro ... que los spamers os van a freir con correo basura, abrir un foro y el sistema gestiona el envío de mails sin publicarlos.

 
MIL GRACIAS! por Nacho
Respuesta recibida el [31/10/2007 11:45:06]
no sabes cuanto me sirvio este tutorial, lo lei de Pe a Pa, mañana tengo una entrevista de trabajo y me van a evaluar y con esto refresque bastantes cosas que ya las daba por olvidadas, espero que  me vaya bien. Realmente te felicito por esto, habrás ayudado a mucha gente, de nuevo, gracias

 
Se agradece por Manuel
Respuesta recibida el [17/03/2008 01:04:50]
Creo que más allá del tutorial, quiero centrarme en la inversión de tiempo, en el amor y pasión por hacer esto y entregarlo en forma gratuita, si todo el mundo tuviera gestos de estos, sería un mundo muy distinto. Creo que el dar sin esperar, nos hace libres.
Muchas Gracias.

 
excelente por giovany
Respuesta recibida el [26/04/2008 06:52:56]
es un tutorial bastante completo me ha servido de mucho gracias.

 
Gracias por Alejandro
Respuesta recibida el [13/06/2008 03:45:57]
Esoty muy contento con el tutorial, me está facilitando las cosas y bastante. Gcias

 
Exelente por Ever
Respuesta recibida el [18/06/2008 10:35:25]
Hola buen dia muy chido el tutorial gracias!!

 
muy bueno por miguel
Respuesta recibida el [23/06/2008 03:28:20]
nice tutorial muy bueno

 
felicitaciones por Esteban
Respuesta recibida el [25/06/2008 01:20:15]
realmente es excelente este tutorial....
Me ha servido mucho para iniciarme en el desconocido mundo de SQL.
THANKS

 
agradecimiento por manuel
Respuesta recibida el [25/06/2008 04:24:14]
gracias por poner estos ejemplos que son muy utiles para resolver dudas concretas que algunos podemos tener para las consultas.

 
agradecimiento por manuel
Respuesta recibida el [25/06/2008 04:24:26]
gracias por poner estos ejemplos que son muy utiles para resolver dudas concretas que algunos podemos tener para las consultas.

 
Excelente por Pirus
Respuesta recibida el [27/06/2008 01:04:07]
Es un gran tutorial con ejemplos muy practicos gracias

 
System por Fredy
Respuesta recibida el [14/07/2008 06:56:49]
Realmente este tutorial me parece muy bueno, yo recien estoy aprendiendo es por ello que desearia tener amigos q me apoyen. Aqui les dejo mi MSN es: System_ym@hotmail.com


Gracias!!!

 
ghv fgrd trrtesrtr por ttrwesfdggvf gfc
Respuesta recibida el [02/08/2008 01:19:13]
dhfgh jghfdfnbmnvncm,vbcvxcv,mcbmcvnbcvcxx slrj  gsjajgfk k  lerg?

 
MUY COMP0LETO EL MANUAL por ELIXA
Respuesta recibida el [14/08/2008 12:32:42]
es un excelente manual pero alguien me ayudaria a conseguir un manual para server 2005 y la sintaxis que necesita de antemano grax

 
manual de sql server 2005 por ELIXA
Respuesta recibida el [14/08/2008 12:34:13]
les dejo mi mail elisagm_14@yahoo.com.mx

 
Para ELIXA por devjoker
Respuesta recibida el [14/08/2008 05:15:04]
En esta misma web.

http://www.devjoker.com/asp/indice_contenido.aspx?co_grupo=TSQL&as_categoria=2

PD:Nio dejes tu mail ... si no quieres tener cientos de mails de publicidad

 
Gracias por Carlos Alberto
Respuesta recibida el [15/08/2008 03:31:22]
Aunque es corto es 100% práctico, sin ejemplos de juguete que encuentras en cientos de libros y escuelas.   Muchas gracias


Añadir comentario ... Para preguntar utiliza los foros
Autor:

Título:


Para preguntar utiliza los foros.



Inicio | Tutorial SQL Consultas agregadasTutorial SQL Versión para imprimir

Subconsultas
Autor: Pedro Herrarte Sánchez
Visitas: 27754 Fecha de publicación: 21/02/2007
Pedro Herrarte, es consultor independiente, ofreciendo sercivios de consultoría, análisis, desarrollo y formación.

Posee mas de diez años de experiencia trabajando para las principales empresas de España.

Es especialista en tecnologías .NET, entornos Web, bases de datos (SQL Server y ORACLE) e integración de sistemas.

Es experto en desarrollo (C#, ASP.NET, VB.Net, T-SQL, PL/SQL, , ASP, CGI , C, Pro*C, Java, Essbase, Vignette, PowerBuilder y Visual Basic ...) y bases de datos (SQL Server y ORACLE).

Es fundador, diseñador y programador de www.devjoker.com.




18/08/2008 SQL Server 2008
Visitas: 39 | Comentarios: 0 | Archivo: Articulos
Categorias: Transact-SQL
Visitas: 131 | Comentarios: 0 | Archivo: Articulos
Categorias: C#|ADO.NET|LinQ
Visitas: 161 | Comentarios: 1 | Archivo: Articulos
Categorias: Humor
Visitas: 154 | Comentarios: 0 | Archivo: Articulos
Categorias: WCF
Visitas: 123 | Comentarios: 0 | Archivo: Articulos
Categorias: WCF
Visitas: 210 | Comentarios: 0 | Archivo: Articulos
Categorias: ASP.NET
Visitas: 278 | Comentarios: 5 | Archivo: Articulos
Categorias: ASP.NET
Visitas: 4990 | Comentarios: 4 | Archivo: Articulos
Categorias: C#|Transact-SQL|LinQ
Visitas: 602 | Comentarios: 1 | Archivo: Articulos
Categorias: Visual Studio
Visitas: 1402 | Comentarios: 1 | Archivo: Articulos
Categorias: Transact-SQL

Útimos temas recibidos en los foros ...
Y lo mismo en WEB por systemat ... [C#] 1 18/08/2008
Manual del minicom de Linux con fotos. por Meta ... [UNIX] 4 17/08/2008
PROGRAMACION por JUANMA ... [Visual Basic .NET] 1 19/08/2008
Conectar ASP con B.D Informix por Franco ... [ASP] 9 02/05/2007
Codigo salir por Jazmin ... [ASP.NET] 1 18/08/2008
EXPORTAR DATOS A ARCHIVOS PLANOS. por WIX ... [ORACLE] 10 06/08/2007
formulario por artdark ... [C#] 2 04/08/2008
Codigo salir por Jazmin ... [ASP.NET] 0 18/08/2008
cambiar de modo un gried view por ivan ... [ASP.NET] 0 18/08/2008
ayuda urgente porfavor por vicancer ... [ASP.NET] 0 18/08/2008
pollo por hajaj ... [Actualidad] 1 15/08/2008
DIOS TE BENDIGA por El You ... [WIN 98/NT/2000/XP] 1 16/08/2008

Access CGI JSP ORACLE UNIX
Actualidad HTML/DHTML/XHTML LINUX PHP Visual Basic .NET
ASP ISAPI MS DOS Power Builder Visual Basic 6.0
ASP.NET Java mySQL SQL WIN 98/NT/2000/XP
C# JavaScript Opinion SQL Server

devjoker  Te recomendamos además ...
29/04/2008 Leer un campo XML de SQL Server 2005 con C#
21/02/2007 Subconsultas    forma parte de...Tutorial SQL
22/10/2005 El lenguaje SQL    forma parte de...Tutorial SQL
16/10/2006 Delegados y eventos    forma parte de...Tutorial C#
22/10/2005 Introducción SQL    forma parte de...Tutorial SQL
19/10/2005 Configurar el IIS para ejecutar aplicaciones ASP.net
27/10/2006 Eventos    forma parte de...Tutorial C#
31/03/2006 Tipos de datos en PL/SQL    forma parte de...Tutorial PL/SQL
22/10/2005 Actualización de datos. UPDATE    forma parte de...Tutorial SQL
22/10/2005 Componentes del lenguaje SQL    forma parte de...Tutorial SQL

 

Encuesta
Si trabajas con .NET ¿Que entorno utilizas?
[Ver] [Votar]