Está en la página 1de 5

Este artculo sobre subconsultas para Microsoft SQL Server, pretende cubrir

los puntos importantes evitando todo tipo de tecnicismos que muchas veces
nos confunden a la hora de tratar este tema. Pues por ejemplo, podemos
encontrarnos con mucha informacin terica que ciertamente terminan
sumergindonos en un lo de conceptos. Aqu veremos desde cmo
aprovechar la funcionalidad de una subconsulta hasta manejar el
rendimiento de este, evaluando cuando hacer uso de ella y cuando no.
Debo decirle que haremos us, en la mayora de ejmplos, de la base de
datos Northwind y Pubs, espero se acuerde de ellos.
Como sabis, ell lenguaje SQL est compuesto por comandos (CREATE,
DROP, ALTER, SELECT, INSERT, UPDATE, DELETE), clusulas(FROM,
WHERE, GROUP BY, HAVING, ORDER BY), operadores lgicos (AND, OR,
NOT) y de comparacin (<, >, =, LIKE, IN...), y funciones de
agregado(AVG, COUNT, MAX, MIN, SUM), las cuales se combinan en las
instrucciones para crear, actualizar y manipular las base de datos. Cuando
se comprende el significado de estos comandos las consultas (tanto
consultas internas o subconsultas, y externas) pueden verse bastante
sencillas y realizar muchas operaciones contra la base datos con mucha
facillidad. Para continuar, dejo por hecho que usted tiene conocimientos
bsicos de SQL Server, entre ellas, los tipos de consultas.
entrndole a las subconsultas...
Volviendo al tema de la subconsultas, es propicio mencionar que una
subconsulta es una instruccin SELECT anidada dentro de otra instruccin
SELECT: SELECT INTO, INSERT INTO, DELETE, o UPDATE o dentro de otra
subconsulta.Los formatos para las instrucciones de subconsultas son las
siguientes:
WHERE expression [NOT] IN (subconsulta)
WHERE expression operador_comparacion [ANY | ALL]
(subconsulta)
WHERE [NOT] EXISTS (subconsulta )
Una subconsulta puede devolver:
1. Una sola columna o un solo valor en cualquier lugar en donde pueda
utilizarse una expresin de un slo valor y puede compararse usando
los siguientes operadores: =,<,>,<=,>= ,<>,!> y !<.
2. Una sola columna o muchos valores que se pueden utilizar con el
operador de comparacin de listas IN en la clusula WHERE.
3. Muchas filas que pueden utilizarse para comprobar la existencia,
usando la palabra EXISTS en la clusula WHERE.
Se puede usar el predicado ANY o SOME, para recuperar registros de la
consulta principal, que satisfagan la comparacin con cualquier otro registro
recuperado en la subconsulta. Ejemplo:

En ejemplo anterior se usa el operador de comparacin >, es as que, >ALL


significa mayor que cualquier valor; es decir, mayor que el valor mximo.
Por ejemplo, >ALL (1, 2, 3,....7) significa mayor que 7. De manera similar,
>ANY significa mayor que, como mnimo, un valor, es decir, mayor que el
mnimo. En consecuencia, >ANY (1, 2, 3, ... 7) significa mayor que 1. Aqu
otro ejemplo:

NOTA: los dos ejemplos anteriores fueron obtenidos directamente de la


Documentacin de Microsoft SQL Server.
En el proceso de trabajo con subconsultas, necesariamente manejaremos
dos tipos de consultas: consultas internas y consultas externas. Las
consultas internas no es ms que las subconsultas propiamente dichas y la
consultas externa es aquella que hace uso de los resultados devueltos por
la consulta interna o subconsulta. En todo este rollo, tambin se harn uso
del predicado IN. La consulta externa usa el predicado IN para operar con
los valores devueltos por la subconsulta. Ejemplo:

Por otra parte, cuando se presenta una subconsulta con la palabra clave
EXISTS, funciona como una prueba de existencia. La clusula WHERE de
la consulta externa comprueba la existencia de las filas devueltas por la
subconsulta. La subconsulta en realidad no produce ningn dato, devuelve
el valor TRUE o FALSE.

Subconsultas en las instrucciones UPDATE, DELETE e INSERT


Es posible anidar las subconsultas en este tipo de instrucciones. Pero
dejndo de lado la teora, creo que para entender mejor esta parte haremos
uso de unos ejemplos...
INSERT

UPDATE

DELETE

rendimiento y resultados...
En muchos casos puede usarse una operacin de combinacin en lugar de
una consulta, no obstante algunas instancias pueden procesarse solo con
una subconsulta. En algunos casos una operacin de combinacin puede
producir un mejor rendimiento que una subconsulta, pero por lo general se
observa muy poca diferencia en el rendimiento. Sin embargo, el uso de
grandes anidamientos de subconsultas puede afectar seriamente el
rendimiento. Creo que ya nos metimos en un lo entre cuestiones de
rendimiento y calidad de resultados. De manera general la utilizacin de
combinaciones producir los mejores resultados. Vemos un ejemplo...
Haciendo uso de una subconsulta podramos realizar la siguiente consulta:

Formulando la anterior subconsulta como una combinacin...

La subconsulta siempre est encerrada entre parntesis y a menos que se


vaya a ejecutar una subconsulta correlacionada termina antes de que se
procese la consulta externa. Una subconsulta puede contener otra
subconsulta, y esta subconsulta puede, a su vez, contener otra
subconsulta, ... y as sucesivamente. Los recursos del sistema(como la
memoria disponible) limitan el nmero de subconsultas que pueden
procesarce. Se puede anidar subconsultas hasta 32 niveles, pero esto como
le mencion, depende de los recursos disponibles del sistema. He aqu otro
"botn" como ejemplo.

Formulando la anterior subconsulta como una combinacin...

También podría gustarte