Sei sulla pagina 1di 11

SUBCONSULTAS

Qu es una Subconsulta en SQL?


mayo 27, 2014 James Revelo

Una subconsulta es una consulta contenida dentro de otra consulta o una sentencia SQL. Estas se
usan para comparar un valor con una o varias filas con el fin de obtener un resultado.

Las

subconsultas

pueden

usarse

en

la

clausula

WHERE

de

la

sentencia SELECT, INSERT, UPDATEy DELETE. Adems de ello podemos usar los operadores
lgicos y de comparacin para manipular la condicin establecida.

Reglas para crear una subconsulta

Las subconsultas siempre deben encerrarse dentro de parntesis.

La clausula ORDER BY no puede usarse dentro de una subconsulta.

Las subconsultas que retornen varias filas solo pueden operarse con operadores de mltiples
valores como el ALL o IN.

El operador BETWEEN no puede usarse con una subconsulta, pero si puede ser usado dentro
de la subconsulta.

Ejemplo
Considera la siguiente tabla CLIENTE:

Tabla CLIENTE

Seleccione los clientes que tengan una edad mayor que el promedio de todas las edades:
SELECT * FROM CLIENTE

WHERE EDAD>(SELECT AVG(EDAD) FROM CLIENTE);

En la anterior subconsulta usamos el operador de comparacin mayor qu. En el lado izquierda esta
el atributo EDAD que vamos a consultar y en el lado derecho hay una subconsulta que devolver un
solo valor, el promedio de las edades.

Subconsultas en la sentencia SELECT


mayo 28, 2014 James Revelo

Usar subconsultas dentro de un sentencia SELECT en SQL permite seleccionar resultados


orientados con respecto a una o varias filas en la clausula WHERE.

Sintaxis
SELECT columna1,
FROM tabla1,
WHERE columna1 OPERADOR
(SELECT columna1,
FROM tabla1,
[WHERE])

Ejemplo 1, Subconsulta de una columna que retorna una sola fila

La subconsulta mas bsica y sencilla es aquella que devuelve un solo resultado o fila, por lo que puede
compararse con un operador binario( < , > , = , != , etc). Para este y los otros ejemplos usaremos la
siguiente tabla llamada CLIENTE:

Tabla CLIENTE

Obtenga el nombre, apellido y telfono de los clientes que tengan la mayor edad:

SELECT NOMBRE, APELLIDO, TELEFONO


FROM CLIENTE

WHERE EDAD=(SELECT MAX(EDAD) FROM CLIENTE);

En esta subconsulta usamos el operador de igualdad, para declarar que necesitamos los registros que
tengan el valor maximo de edades dentro de la tabla.

Ejemplo 2, Subconsulta de una columna que retorna mltiples filas


Como indica su nombre, la subconsulta retornar varias filas, por ende ya no podemos usar operadores
binarios para la condicin del WHERE. Debemos usar operadores para mltiples resultados
como ALL, IN, ANY, etc.
Obtengan los clientes que tengan distinta edad de aquellos clientes que tienen un cdigo mayor
a 5:
SELECT ID,NOMBRE, APELLIDO, TELEFONO
FROM CLIENTE
WHERE EDAD<>ALL(SELECT EDAD FROM CLIENTE WHERE ID>5);

Resultado de la consulta
Para este ejemplo usamos el operador ALL en el WHERE. Bsicamente lo que hicimos fue cotejar
los primero 5 registros con los ltimos 5, comparando las edades para encontrar solo los clientes que
tuvieran edades nicas.

Ejemplo 3, mltiples subconsultas


Al igual que las expresiones simples en un WHERE podemos usar el operador AND para reunir varias
subconsultas al mismo tiempo.

Seleccione los clientes cuya edad est entre el mnimo y el promedio de las edades (MIN,AVG):
SELECT ID,NOMBRE, APELLIDO, EDAD
FROM CLIENTE
WHERE

EDAD> (SELECT MIN(EDAD) FROM CLIENTE)

AND EDAD< (SELECT AVG(EDAD) FROM CLIENTE);

Resultados de la consulta

Subconsultas en la sentencia INSERT


mayo 28, 2014 James Revelo

Las subconsultas tambin nos permiten insertar informacin dentro de una tabla. Obviamente la tabla
donde asignaremos los datos debe tener la misma estructura de los resultados de la consulta.

Sintaxis
INSERT INTO tabla (columna1,)
SELECT columna1,
FROM tablaX,
WHERE VALOR OPERADOR SUBCONSULTA

Ejemplo
Inserte en la tabla CLIENTES_MADUROS los clientes que tengan una edad mayor o igual al
promedio de edades de la tabla CLIENTE:

INSERT INTO CLIENTES_MADUROS (ID, NOMBRE,APELLIDO, EDAD)


SELECT ID,NOMBRE,APELLIDO,EDAD
FROM CLIENTE
WHERE EDAD >= (SELECT AVG(EDAD) FROM CLIENTE );

Subconsultas en la sentencia UPDATE


mayo 28, 2014 James Revelo

Usar subconsultas al modificar las filas de una tabla permite flexibilidad a la hora de asignar valores
especficos a una columna. Para implementar una subconsulta en la sentencia UPDATE debemos
incluirla en la clausula WHERE.

Sintaxis
UPDATE tabla
SET columna = nuevoValor

WHERE Valor OPERADOR SUBCONSULTA


Ejemplo

Asigne al vendedor con mayor volumen de ventas un incremento del 15% en su salario base:
UPDATE EMPLEADO
SET SALARIO = SALARIO*1,15
WHERE ID IN

(SELECT ID FROM EMPLEADO WHERE VENTAS=(SELECT MAX(VENTAS) FROM


EMPLEADO));
En el anterior ejemplo usamos una subconsulta anidada. La subconsulta interior busca el valor
mximo de ventas entre todos los registros. Una vez encontrado ese valor la subconsulta exterior
busca el cdigo de los empleados con ese volumen. A los empleados encontrados se les asigna un
15% mas en su salario base.

Ejemplo 2
Asigne prioridad ALTA(A) a los clientes que hayan comprado mas de 2000 dolares:
UPDATE CLIENTE
SET PRIORIDAD=A

WHERE ID IN (SELECT IDCLIENTE FROM FACTURA WHERE TOTAL>=2000);

Subconsultas en la sentencia DELETE


mayo 28, 2014 James Revelo

Las subconsultas pueden ser usadas para eliminar registros de una tabla en SQL. Simplemente
debemos incluir la subconsulta en la sentencia WHERE para personalizar aquellas filas a eliminar.

Sintaxis
DELETE FROM TABLE_NAME
WHERE VALOR OPERADOR SUBCONSULTA

Ejemplo 1
Elimine las facturas de aquellos clientes que han sido considerados como prioridad
BAJA(B):
DELETE FROM FACTURA

WHERE IDCLIENTE IN (SELECT ID FROM CLIENTE WHERE PRIORIDAD=B );


La subconsulta anterior retorna en los cdigos de aquellos clientes que estn considerados como
prioridad baja para la empresa. Luego podemos comparar la llave fornea IDCLIENTE con cada
cdigo de cliente para precisar que facturas sern eliminadas.

Potrebbero piacerti anche