Sei sulla pagina 1di 2

KARINA CERVANTEZ DIAZ

BASE DE DATO
TRABAJO DE INVESTIGACION

QUE ES UNA SUBCONSULTA EN MSQL


Una subconsulta es una sentencia SELECT que aparece dentro de otra
sentencia SELECT que llamaremos consulta principal.
Se puede encontrar en la lista de seleccin, en la clusula WHERE o en la clusula
HAVING de la consulta principal.
Una subconsulta tiene la misma sintaxis que una sentencia SELECT normal exceptuando
que aparece encerrada entre parntesis, no puede contener la clusula ORDER BY, ni
puede ser la UNION de varias sentencias SELECT, adems tiene algunas restricciones en
cuanto a nmero de columnas segn el lugar donde aparece en la consulta principal.
Estas restricciones las iremos describiendo en cada caso.
Cuando se ejecuta una consulta que contiene una subconsulta, la subconsulta se ejecuta
por cada fila de la consulta principal.
Se aconseja no utilizar campos calculados en las subconsultas, ralentizan la consulta.
Las consultas que utilizan subconsultas suelen ser ms fciles de interpretar por el
usuario.

A veces tenemos que realizar operaciones ms complejas con los datos, operaciones en
las que nos interesara ayudarnos de una primera consulta auxiliar que extrajera la
informacin en la que nos queremos basar. Esta consulta auxiliar recibe el nombre de
"subconsulta" o "subquery".

Por ejemplo, si queremos saber qu clientes tenemos en la ciudad que ms habitantes


tenga, la forma "razonable" de conseguirlo sera saber en primer lugar cual es la ciudad
que ms habitantes tenga, y entonces lanzar una segunda consulta para ver qu clientes
hay en esa ciudad.

Como la estructura de nuestra base de datos de ejemplo es muy sencilla, no podemos


hacer grandes cosas, pero un caso parecido al anterior (aunque claramente ms intil)
podra ser saber qu personas tenemos almacenadas que vivan en la ltima ciudad de
nuestra lista.

Para ello, la primera consulta (la "subconsulta") sera saber cual es la ltima ciudad de
nuestra lista. Si suponemos que los cdigos numricos sob creciente, y lo hacemos
tomando la ciudad que tenga el ltimo cdigo (el mayor de ellos), la consulta podra ser:

SELECT MAX(codigo) FROM ciudades;

Vamos a imaginar que pudiramos hacerlo en dos pasos. Si llamamos "maxCodigo" a


ese cdigo obtenido, la "segunda" consulta podra ser:
KARINA CERVANTEZ DIAZ
BASE DE DATO
TRABAJO DE INVESTIGACION

SELECT * FROM personas WHERE codciudad= maxCodigo;

Pero estos dos pasos se pueden dar en uno: al final de la "segunda" consulta (la
"grande") incluimos la primera consulta (la "subconsulta"), entre parntesis, as

SELECT * FROM personas WHERE codciudad= (


SELECT MAX(codigo) FROM ciudades
);

SUBCONSULTAS QUE DEVUELVEN CONJUNTOS DE DATOS

Si la subconsulta no devuelve un nico dato, sino un conjunto de datos, la forma de


trabajar ser bsicamente la misma, pero para comprobar si el valor coincide con alguno
de la lista, no usaremos el smbolo "=", sino la palabra "in".

Por ejemplo, vamos a hacer una consulta que nos muestre las personas que viven en
ciudades cuyo nombre tiene una "a" en segundo lugar (por ejemplo, seran ciudades
vlidas Madrid o Barcelona, pero no Alicante).

Para consultar qu letras hay en ciertas posiciones de una cadena, podemos usar
SUBSTRING (en el prximo apartado veremos las funciones ms importantes de
manipulacin de cadenas, pero podemos anticipar ya que recibe tres datos: el nombre
del campo, la posicin inicial y la longitud). As, una forma de saber qu ciudades tienen
una letra A en su segunda posicin sera:

SELECT codigo FROM ciudades


WHERE SUBSTRING(nombre,2,1)='a';

Como esta subconsulta puede devolver ms de un resultado, deberemos usar IN para


incluirla en la consulta principal, que quedara de esta forma:

SELECT * FROM personas


WHERE codciudad IN
(
SELECT codigo FROM ciudades WHERE SUBSTRING(nombre,2,1)='a'
);