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

 
Excelente por JulioDuran
Respuesta recibida el [24/08/2008 11:20:05]
Muchisimas gracias, era lo que buscaba.

 
manual excelente por maria daboin
Respuesta recibida el [02/09/2008 09:25:10]
hola, de verdad que la informaciòn suministrada es muy concreta y aclara facilmente cualquier duda. exito para el desarrollador de esta pagina.

 
cojan oficio por nana
Respuesta recibida el [26/09/2008 04:19:46]
cojan oficiooooooooooooooooooooooooooooo

 
De los mejores por netmen
Respuesta recibida el [29/09/2008 12:54:05]
muy bueno el tutorial de echo es de los mejores que he encontrado en la web.

 
PROBLEMAS CON MYSQL DEL AJAX por JOSE LUIS
Respuesta recibida el [04/11/2008 12:16:01]
Me da el problema sigiente:You can't specify target table 'lux_impresiones' for update in FROM claus

UPDATE
lux_impresiones
SET
click = click+1
WHERE
id = '410' AND fecha= (SELECT MAX(fecha) FROM lux_impresiones WHERE
id = '410' )
no entiendo porque.

 
Muy bueno por Eddie Lopez
Respuesta recibida el [11/11/2008 03:11:33]
El tutorial es muy bueno yo lo tengo en mis favoritos me a servido bastaten, aplaudo al cuate que hizo esto, me quito el sombrero

 
Como he aprendido!!! por MilooliM
Respuesta recibida el [28/11/2008 03:51:34]
Ahora voy para el de T-SQL jejeej
Otra vez muchas gracias

 
AYUUUUUUUUDA por boom
Respuesta recibida el [01/12/2008 08:16:29]
oigan porfa el que sepa de visual basic 2008 y me pude ayudar : boom_dumer@hotmail.com


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: 36708 Fecha de publicación: 21/02/2007
Pedro Herrarte, es consultor independiente, ofreciendo servicios 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.




Visitas: 42 | Comentarios: 0 | Archivo: Articulos
Visitas: 109 | Comentarios: 0 | Archivo: Articulos
Visitas: 155 | Comentarios: 0 | Archivo: Articulos
Categorias: ASP.NET
Visitas: 33 | Comentarios: 0 | Archivo: Articulos
Categorias: TFS
Visitas: 285 | Comentarios: 1 | Archivo: Articulos
Categorias: Visual Basic .NET|C#
Visitas: 842 | Comentarios: 2 | Archivo: Articulos
Categorias: C#|ASP.NET|HTML DHTML|XML|JavaScript|ASP.NET|ASP|PHP|Visual Studio
Visitas: 712 | Comentarios: 1 | Archivo: Articulos
Categorias: Administración|Tutorial SQL
Visitas: 451 | Comentarios: 0 | Archivo: Articulos
Categorias: ASP.NET
Visitas: 1053 | Comentarios: 1 | Archivo: Articulos
Categorias: ASP.NET|CSS|ASP.NET
Visitas: 250 | Comentarios: 0 | Archivo: Articulos
Categorias: TFS

Útimos temas recibidos en los foros ...
FORMULARIO ACCESS por jcifuentes ... [Access] 11 29/05/2007
Ysmael por Ysmael ... [SQL] 0 08/01/2009
Reflection por Maurito22 ... [C#] 2 06/01/2009
Programador por Robert ... [ORACLE] 0 07/01/2009
como insertar registros en un formulario de visual basic.net desde la base de datos sql server por orlan ... [SQL Server] 8 09/06/2008
quierocodigo de autogenerado del seguro por edwin garcia ramirez ... [Visual Basic .NET] 0 07/01/2009
Video gratis sobre AJAX con ASP.NET por alexxe ... [ASP.NET] 1 06/01/2009
calcular saldo acumulativo por cben ... [SQL] 5 30/12/2008
comparar 2 campos de 2 tablas usando el like por nani ... [SQL Server] 1 06/01/2009
Apagar ordenador remoto en C# por victoryiyo ... [C#] 1 07/01/2009
numero de AUTOGENERADO IPSS por carlos ... [Visual Basic .NET] 5 30/10/2008
Como mandar mensaje a Celular por Pako ... [C#] 63 13/03/2007

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 ...
22/10/2005 Vistas    forma parte de...Tutorial SQL
21/02/2006 Acerca de ...
09/11/2006 Interfaces    forma parte de...Tutorial C#
08/09/2007 Funciones en Transact SQL    forma parte de...Tutorial de Transact SQL
01/01/2006 Consultas agregadas    forma parte de...Tutorial SQL
22/10/2005 Insertar datos. INSERT    forma parte de...Tutorial SQL
21/02/2006 Bibliografia
07/11/2006 Enumeraciones    forma parte de...Tutorial C#
22/10/2005 Introducción SQL    forma parte de...Tutorial SQL
13/10/2006 Constructores    forma parte de...Tutorial C#

 

Encuesta
¿A que perfil te adaptas mejor?
[Ver] [Votar]