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.


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: 28176 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: 272 | Comentarios: 0 | Archivo: Articulos
Categorias: Transact-SQL
Visitas: 233 | Comentarios: 0 | Archivo: Articulos
Categorias: C#|ADO.NET|LinQ
Visitas: 268 | Comentarios: 1 | Archivo: Articulos
Categorias: Humor
Visitas: 185 | Comentarios: 0 | Archivo: Articulos
Categorias: WCF
Visitas: 162 | Comentarios: 0 | Archivo: Articulos
Categorias: WCF
Visitas: 247 | Comentarios: 0 | Archivo: Articulos
Categorias: ASP.NET
Visitas: 325 | Comentarios: 5 | Archivo: Articulos
Categorias: ASP.NET
Visitas: 5225 | Comentarios: 4 | Archivo: Articulos
Categorias: C#|Transact-SQL|LinQ
Visitas: 658 | Comentarios: 1 | Archivo: Articulos
Categorias: Visual Studio
Visitas: 1551 | Comentarios: 1 | Archivo: Articulos
Categorias: Transact-SQL

Útimos temas recibidos en los foros ...
INSTALAR VB.NET 2005 EXPRESS EN WINDOWS VISTA por tito2701 ... [Visual Basic .NET] 13 05/07/2007
LLave Primaria por Martin ... [ORACLE] 6 22/06/2007
dar formato a mail por Pako ... [C#] 4 16/03/2007
MP3 en Windows Vista por Alf ... [Actualidad] 3 20/04/2008
autogenerado por mily ... [Visual Basic .NET] 0 27/08/2008
Instalación de Oracle por Tatatn ... [ORACLE] 0 27/08/2008
For Update, existe alguna otra forma? por Sus ... [ORACLE] 1 27/08/2008
Cambiar el color del nodo de un treeview por Moises Bermdez Contreras ... [ASP.NET] 3 15/10/2007
librerias dinamicas por lupitaor ... [C#] 2 26/08/2008
Vista SQL 2005 limitada por Factor ... [SQL] 2 26/08/2008
Combobox por Corven ... [C#] 4 10/07/2008
Datagrid view por Jazmin ... [ASP.NET] 5 25/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 ...
28/11/2006 Definición de nuevos atributos    forma parte de...Tutorial C#
28/08/2006 Ubuntu en VmWare con VMware Tools
21/02/2007 Subconsultas    forma parte de...Tutorial SQL
27/08/2007 Enviar email con C#
09/05/2006 Como leer XML con C#
13/04/2008 String.Format
27/02/2007 ¿Permite Windows Vista reproducir peliculas descargadas o "Piratas"? SI, si lo permite
03/10/2006 Creación de objetos    forma parte de...Tutorial C#
29/09/2006 Assemblies    forma parte de...Conceptos generales .NET
18/08/2008 SQL Server 2008

 

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