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 ...


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

 
Sos un groso por Mengano
Respuesta recibida el [13/01/2009 05:40:45]
Este tutorial me sirve muchísimo muchas gracias por la info detallada y super entendible.

 
Uso de dblinks por Vero
Respuesta recibida el [05/03/2009 01:30:01]
Hola
Por favor si me pueden guiar : tengo un proceso que debe extraer datos desde una bd remota haciendo juntura entre tablas de ambos ambientes que fisicamente están en 2 países diferentes, es recomendable usar un dblink para juntar las 2 tablas, implca eso hacer un acceso a la bd remota por cada registro? se usa el indice de la tabla remota al usar el dblink?
sopn alrededor de 100 000 registros los que se necesitan juntar,
gracias

 
Gracias por Bea
Respuesta recibida el [23/03/2009 11:42:04]
Se agradece mucho que haya personas que pongan a disposición de los novatos tutoriales comoo éste.
Gracias de nuevo

 
De lo mejor! por Sebastian
Respuesta recibida el [22/04/2009 05:44:21]
Este es de los mejores tutoriales de SQL que he encontrado si no es el mejor (y he visto varios).

Además no se centra en un sistema especifico como acces o mysql, simplemente sql.

 
Subconsultas por Luz
Respuesta recibida el [30/04/2009 09:51:05]
Hola, me gustaria que se tomara un poco mas el tema de subconsultas en la lista de seleccion... 

Felicidades, tienes muy buenos tutoriales!!!!! :D

 
GRACIAS por KELVIN
Respuesta recibida el [01/05/2009 11:13:25]
Solo queria agradacerte por tu gran aporte, estaba en proceso de monografico y tus apuntes me fueron de gran utilidad, que Dios te bendiga y siga enviando al mundo personas como tu

 
gracias por ziggurat
Respuesta recibida el [15/05/2009 12:13:03]
muchas gracias x este maravilloso manual!! buscaba uno asi hace rato! lo voy a leer todo!

 
Gracias Compare por th3n1k0
Respuesta recibida el [29/05/2009 05:54:39]
A la compare de verdad que te agradesco bastante por estos buenos tutoriales que haces vas defrente al grano.. eh refrescado mi mente muy bien!!! de debo una ....

 
Gracias por scheyi
Respuesta recibida el [30/05/2009 11:42:33]
Muchas gracias por el aporte, presiso 

 
order by por maru
Respuesta recibida el [02/07/2009 03:03:03]
como se ordena un campo de una subconsulta?

 
Felicitaciones por Cabzon007
Respuesta recibida el [05/08/2009 03:36:16]
Muy didactico este manual... de verdad gracias por orcefernos su conocimiento y talento.

 
Excelente por Victor
Respuesta recibida el [18/09/2009 05:21:46]
Gracias por este tutorial muy bueno y muy sencillo. Ideal para dummies

 
server por anibal
Respuesta recibida el [06/10/2009 08:17:18]
THIS EXAMPLES ARE VERY  GOOD

 
fa por pancracio
Respuesta recibida el [14/10/2009 01:14:09]
esto esta del asco

 
q buen tutorial por chelio
Respuesta recibida el [09/11/2009 01:29:19]
no sabes cuanto me as ayudado mil gracias me sacast d un problemon jejejeje

 
Muchas Gracias por Nehemías
Respuesta recibida el [22/12/2009 09:54:05]
Muchas Gracias por compartir tus conocimientos con la humanidad. 

 
Muy Bueno! Felicitaciones por Andrés
Respuesta recibida el [29/01/2010 01:43:39]
Fantástico tutorial.Estoy repasando conceptos y a medida que leo algo, voy probando con una bd de prueba.
Excelente aporte

 
Excellent!!! por SirOne
Respuesta recibida el [05/02/2010 10:44:50]
Exceeeelente! aporte para la comunidad informática. Justo lo que he andado buscando....

Gracias!

 
calificacion Diez por GeeeR
Respuesta recibida el [21/02/2010 08:19:14]
el tutorial esta muy entendible, lo recomiendo.

 
Sos un capo , muchas gracias!!... por Felix
Respuesta recibida el [25/02/2010 03:30:23]
Sos un capo , muchas gracias!!!

 
Muy bueno por Luis.Martinez
Respuesta recibida el [09/03/2010 10:14:18]
El tutorial está muy bueno, 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: 71486 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: 110 | Comentarios: 3 | Archivo: Articulos
02/02/2010 iPad vs Telesketch
Visitas: 809 | Comentarios: 2 | Archivo: Articulos
Categorias: Humor
Visitas: 765 | Comentarios: 3 | Archivo: Articulos
Visitas: 3177 | Comentarios: 2 | Archivo: Articulos
Categorias: C#
Visitas: 14564 | Comentarios: 7 | Archivo: Articulos
Categorias: C#|Seguridad
Visitas: 1499 | Comentarios: 3 | Archivo: Articulos
Visitas: 695 | Comentarios: 2 | Archivo: Articulos
Visitas: 369 | Comentarios: 0 | Archivo: Articulos
Visitas: 2034 | Comentarios: 2 | Archivo: Articulos
Categorias: C#

Útimos temas recibidos en los foros ...
peticion urgente mi nombre es juan pablo osorio cardona cc 71115218 por juancho ... [Actualidad] 0 14/03/2010
peticion por juancho ... [Actualidad] 0 14/03/2010
estrato de pencion por carlos antonio mateus gomez ... [Actualidad] 0 14/03/2010
quiero aprender c# por alcapego ... [C#] 4 16/02/2008
certificado pensiones horizonte por angela patricia rodriguez ... [Actualidad] 140 26/01/2010
certificado de penciones y cesantias por fredy ... [Actualidad] 2 29/01/2010
certificado por jhon jairo vargas ... [Actualidad] 1 13/03/2010
devolver consulta en form builder de oracle con like por cesar10lb ... [ORACLE] 0 13/03/2010
certificado de cesantias horizonte por yeimmy ... [Actualidad] 4 13/03/2010
solicito certificado de pensiones y sesantias para laborar por maria eugenia garcia m. ... [Actualidad] 0 13/03/2010
certificado de fondos de pensiones horizonte por mona ... [Actualidad] 6 03/03/2010
certificado pensiones por nelly moreno ... [Actualidad] 0 13/03/2010

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 ...
11/03/2008 Problemas en la instalación de Visual Studio 2008-Visual studio web authoring component
12/06/2007 Estructuras de control en Transact SQL    forma parte de...Tutorial de Transact SQL
22/10/2005 Consultar datos. SELECT    forma parte de...Tutorial SQL
19/08/2006 Virtualización. Maquinas Virtuales.
04/03/2006 Bloques PL/SQL    forma parte de...Tutorial PL/SQL
22/03/2008 Problemas al conectar a redes wifi con Windows Vista
13/10/2006 Destructores    forma parte de...Tutorial C#
13/11/2006 Excepciones    forma parte de...Tutorial C#
01/04/2006 Estructuras de control en PL/SQL    forma parte de...Tutorial PL/SQL
26/08/2007 Transacciones en Transact SQL    forma parte de...Tutorial de Transact SQL

 

Encuesta
¿A que perfil te adaptas mejor?




[Ver] [Votar]