Está en la página 1de 25

Consulta de Datos usando Lenguaje Estructurado

de Consultas
Introduccin

En este objeto centraremos nuestra atencin en la manipulacin de datos


a travs del uso de consultas sobre la base de datos, sta es una de las
actividades que con mayor frecuencia se estar realizando sobre la base
de datos, bien sea a travs de un Sistema de Gestin de Bases de Datos
(SGBD) o desde el lenguaje de programacin.

Las consultas pueden tener diferentes grados de complejidad, desde las


que extraen la informacin de una tabla o complementando la informa-
cin desde diferentes tablas, la incorporacin de funciones de tipo esta-
dstico sobre los datos y la generacin de grupos de datos para crear nive-
les de resumen. Las cuales son implementadas en los sistemas de infor-
macin a travs de las consultas, informes o reportes a generar.

Se presenta la sintaxis as como ejemplos para las principales tipos de


consultas que el ayudarn en la construccin de las consultas requeridas
para su sistema de informacin.

Introduccin Consultar Datos

Consulta de Datos
usando Lenguaje Estructurado
de Consultas

Subconsultas Consultas de
Resumen

FAVA - Formacin en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje


Consulta de Datos usando Lenguaje Estructurado de Consultas

Estructura de contenido

Introduccin 1
Mapa conceptual 3
1. Consultar Datos, provenientes de diferentes Tablas 4
1.1. Producto cartesiano. 5
1.2. Combinaciones 7
1.2.1.Combinacin Interna INNER JOIN 7
1.2.2.Combinaciones Externas OUTER JOIN 8
1.2.3.Autocombinaciones SELF JOIN 10
1.2.4.Combinaciones de dos o ms tablas 11
2. Consultas de Resumen 12
2.1. Funciones de agregado 12
2.2. La clusula GROUP BY 14
2.3. La clusula HAVING 15
3. Subconsultas 16
3.1. Operadores 19
3.2. Referencias externas 21
Glosario 23
Bibliografa 24
Crditos 25

2
FAVA - Formacin en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje
Consulta de Datos usando Lenguaje Estructurado de Consultas

MAPA CONCEPTUAL

CONSULTA DE DATOS USANDO SQL

usa puede utilizarse para

SENTENCIA SELECT Consultas simples Consultas Multitabla Consultas de Resumen Subconsultas

para obtener puede que anidan usa


obtiene datos de usa

Campos de una tabla Funciones de Grupos resultados Operadores


Filtrar datos Ordenar resultados 1 Tabla Varias Tablas Especiales
Agregado de datos
de otras
usando usando a travs de como
como
consultas
SUM () MIN ()
Where Order By Producto Cartesiano Combinaciones EXISTS ALL
de una
como AVG () MAX ()
Consulta principal IN ANY

Outer Join COUNT ()


Inner Join
Self Join
son

Left Join Rignt Join

3
FAVA - Formacin en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje
Consulta de Datos usando Lenguaje Estructurado de Consultas

1. Consultar Datos, provenientes de diferentes Tablas

Este tipo de consultas se utiliza frecuentemente, su objetivo es visualizar


datos que estn en diferentes tablas, especficamente los datos de
aquellas que tienen llaves forneas.

En este tipo de consultas se vuelven a trabajar los alias, solo que en esta
ocasin el alias es para las tablas. El uso de alias en los nombres de tablas
mejora la legibilidad de las secuencias de comandos, facilita la escritura
de combinaciones complejas y simplifica el mantenimiento de las
consultas.

Al escribir secuencias de comandos, puede sustituir un nombre de tabla


descriptivo largo y complejo por un alias sencillo y abreviado. El alias se
utiliza en lugar del nombre completo de la tabla.

Sintaxis:
SELECT *
FROM <Nombre_tabla1>AS <alias Tabla1> INNER JOIN
<Nombre_tabla2>AS <alias Tabla2>
ON <aliasTabla1>.<Campo_llaveprimaria> =
<aliasTabla2>.<Campo_llavefornea>

Ejemplo

En este ejemplo se muestran los nombres de los pacientes,la


identificacin, sexo y el nombre del mdico que lo ha atendido,
informacin que se encuentra en las tablas pacientes y mdicos. Esta
consulta no utiliza alias en las tablas de la sintaxis de JOIN.

SELECT PacNombres, PacApellidos, PacSexo, MedNombres,


MedApellidos
FROM Tblpacientes INNER JOIN TblMedicos
ON TblMedicos.MedIdentificacion = Tblpacientes.
PacMedIdentifica

Ejemplo Utilizando alias para las tablas

SELECT PacNombres, PacApellidos, PacSexo, MedNombres,


MedApellidos
FROM Tblpacientes as TP INNER JOIN TblMedicos as TM
ON TM.MedIdentificacion = TP. PacMedIdentifica

4
FAVA - Formacin en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje
Consulta de Datos usando Lenguaje Estructurado de Consultas

1.1. Producto cartesiano.

Consiste en una nueva tabla formada por las filas que resulten de todas
las combinaciones posibles de las filas de la primera tabla con todas las
filas de la segunda tabla. El nmero de filas resultante es el producto de
la multiplicacin de todas las filas de la primera tabla por la segunda. Por
esta razn es imprescindible adicionar un filtro que corresponda con el
vnculo que existe entre las tablas, de otra forma los resultados no seran
coherentes con la informacin.

Cuando se realiza una consulta, se especifican en la clusula SELECT las


columnas de cada tabla que se desean visualizar, en la clusula FROM los
nombres de las tablas que contienen la informacin separadas por coma.
Por ltimo en la clusula WHERE una condicin en la cual intervienen al
menos una columna de cada tabla que representan la conexin entre las
dos tablas.

Sintaxis:
SELECT *
FROM <Nombre_tabla1> , <Nombre_tabla2>
WHERE <Tabla1>.<Campo> = <Tabla2>.<Campo>

El rendimiento en este tipo de consultas es bajo, ya que sin importar la


condicin que se establezca, se deben combinar (multiplicar) todas las
filas de una y otra tabla y luego se filtra de acuerdo con la condicin. Por
ejemplo, Se desea una lista con los pacientes que trata el medico
Guillermo Giraldo, si la tabla pacientes cuenta con 2500 pacientes y la
tabla de Mdicos con 320, la combinacin inicial da como resultado
800.000 registros ( 2500 X 320 = 800000), los cuales deben ser
cargados en memoria y posteriormente se aplicaran los filtros de
conexin (mdicos y pacientes vinculados) y por ltimo mostrara solo los
que corresponden a Guillermo Giraldo, lo cual hace que el proceso
consuma ms recursos de los necesarios.

La siguiente imagen presenta la relacin del producto cartesiano y su


perspectiva desde la teora de conjuntos y el producto cartesiano aplicado
a las bases de datos relacionales:

5
FAVA - Formacin en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje
Consulta de Datos usando Lenguaje Estructurado de Consultas

A= {1,2} 2 elementos
B= {x,y,z} 3 elementos
A B
1 x
y
2 z

AXB= {(1,x) ; (1,y) ; (1,z) ; (2,x) ; (2,y) ; (2,z)}


6 elementos

PRODUCTOS TALLAJE
CODIGO NOMBRE COLOR TALLA MEDIDA
328 Camisa Blanco XS 60
329 Buzo Azul S 80
330 Camiseta Rojo M 90
331 Topp Negro L 120
332 Sueter Caf

PRODUCTOS X TALLAJE

6
FAVA - Formacin en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje
Consulta de Datos usando Lenguaje Estructurado de Consultas

1.2. Combinaciones

Consisten en obtener los registros de las tablas a partir de diferentes tipos


de combinaciones, que estn determinadas por el cumplimiento de una
cierta condicin entre dos de sus columnas. Se especifica en la clusula
FROM y se identifica con la palabra JOIN.

Existen diferentes tipos de combinaciones, las cuales se presentan a


continuacin:

1.2.1. Combinacin Interna INNER JOIN

Las combinaciones internas combinan tablas mediante la comparacin de


los valores de las columnas que son comunes a ambas tablas. En este
caso slo se retornan las filas que cumplen las condiciones de la
combinacin.

Se relaciona en la teora de conjuntos con la operacin de Interseccin, tal


como se describe en las siguientes imgenes.

A B

SELECT NOMBRE, COLOR, CANTIDAD


FROM PRODUCTOS AS P INNER JOIN DETALLE_PEDIDO AS DP
ON P.CODIGO = DP.CODPROD

7
FAVA - Formacin en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje
Consulta de Datos usando Lenguaje Estructurado de Consultas

Sintaxis:

SELECT *
FROM <Nombre_tabla1>AS <alias Tabla1> INNER JOIN
<Nombre_tabla2>AS <alias Tabla2>
ON <aliasTabla1>.<Campo_llaveprimaria> =
<aliasTabla2>.<Campo_llavefornea>

1.2.2. Combinaciones Externas OUTER JOIN

En este tipo de combinaciones existe una tabla de tipo dominante en la


consulta y las otras sern subordinadas, los registros de la tabla
dominante sern incorporados al resultado final, ms los registros
provenientes de la interseccin de las tablas.

Las combinaciones externas izquierda y derecha combinan filas de dos


tablas que cumplen una condicin, ms las filas de la tabla izquierda o
derecha que no la cumplen, tal como se especifique en la clusula JOIN.
Las filas que no cumplen la condicin de combinacin presentan NULL en
el conjunto de resultados. Tambin se pueden utilizar combinaciones
externas completas para presentar todas las filas de las tablas
combinadas, independientemente de si hay valores que coincidan en las
tablas.

Sintaxis:

SELECT *
FROM <Nombre_tabla1>AS <alias Tabla1> RIGHT/LEFT JOIN
<Nombre_tabla2> AS <alias Tabla2>
ON <aliasTabla1>.<Campo_llaveprimaria> =
<aliasTabla2>.<Campo_llavefornea>

8
FAVA - Formacin en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje
Consulta de Datos usando Lenguaje Estructurado de Consultas

Las siguientes imgenes representan las combinaciones externas:

RIGHT OUTER JOIN LEFT OUTER JOIN

A B A B

FULL OUTER JOIN


A B

Clientes Ventas
ID_ Cliente Nombre ID_ Cliente ID_ Producto Cantidad
234 Ramn Pea 234 23B78 3
456 Cesar Garca 576 23J45 12
576 Carol Valencia 576 45A45 5
632 Andres Muoz 234 34B34 22
456 67C32 8

SELECT Clientes.ID_Cliente, Clientes.Nombre, Ventas.Cantidad


FROM Clientes LEFT OUTER JOIN Ventas
ON CLientes.id_Cliente=Ventas.ID_Cliente

ID_ Cliente Nombre Cantidad


234 Ramn Pea 3
234 Ramn Pea 22
576 Carol Valencia 12
576 Carol Valencia 5
456 Cesar Garca 1
632 Andres Muoz NULL

9
FAVA - Formacin en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje
Consulta de Datos usando Lenguaje Estructurado de Consultas

1.2.3. Autocombinaciones SELF JOIN

Es posible que se necesite combinar una tabla consigo misma, esto es lo


que se denomina un self-join. Puede ser til cuando se dese comparar
valores de una columna con otra en la misma tabla. Para utilizarlo slo es
necesario colocar alias a la tabla como si se tratase de dos tablas
diferentes y utilizar la estructura del JOIN que se requiera.
.
Sintaxis:

SELECT *
FROM <Nombre_tabla1>AS <alias 1> INNER JOIN
<Nombre_tabla1>AS <alias 2>
ON <alias1>.<Campo> = <alias2>.<Campo>

En el ejemplo siguiente se utiliza una autocombinacin interna para


obtener los nombres de los jefes de los empleados que corresponden a
otros empleados en la misma tabla.

Empleados A Empleados B
ID_Empl Nombre ID_Jefe ID_Empl Nombre ID_Jefe
1 Juan Prez 1 Juan Prez
2 Lina Luna 1 2 Lina Luna 1
3 Pedro Blanco 2 3 Pedro Blanco 2
4 Harry Arcila 2 4 Harry Arcila 2
5 Mariana Lpez 1 5 Mariana Lpez 1

SELECT A.ID_Empl, A.Nombre, B.Nombre as Jefe


FROM Empleados as A INNER JOIN Empleados as B
ON A.ID_Jefe=B.ID_Empl
WHERE Id_Jefe IS NOT NULL
ID_Empl Nombre Jefe
2 Lina Luna Juan Prez
3 Pedro Blanco Lina Luna
4 Harry Arcila Lina Luna
5 Mariana Lpez Juan Prez

Cuando se usan autocombinaciones, cada fila que coincida consigo misma


y las parejas que coincidan entre ellas se repiten, por lo que se devuelven
filas duplicadas, por tanto se debe utilizar una clusula WHERE para
eliminar dichas filas duplicadas.

10
FAVA - Formacin en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje
Consulta de Datos usando Lenguaje Estructurado de Consultas

1.2.4. Combinaciones de dos o ms tablas

Las consultas de combinacin pueden incluir cualquier nmero de tablas


agrupndolas teniendo en cuenta los campos en comn para establecer
los grupos. La sintaxis que se presenta a continuacin, permite agrupar
tres tablas teniendo en cuenta los atributos llave de la relacin entre las
tres tablas.

Sintaxis:

SELECT *
FROM <Nombre_tabla1>AS <alias 1> INNER JOIN
<Nombre_tabla1>AS <alias 2>
ON <alias1>.<Campo> = <alias2>.<Campo> INNER JOIN
<Nombre_tabla3>AS <alias 3> ON <alias1>.<Campo> =
<alias2>.<Campo>

El ejemplo que se presenta en la imagen permite combinar tres tablas


para obtener los datos del cliente, el nombre y cantidades de los
productos que ha comprado.

Productos Ventas
ID_Productos Nombre ID_Cliente ID_Producto Cantidad
23B78 Cuaderno Argollado 234 23B78 3
23J45 Carpeta Plastificada 576 23J45 12
45A45 Block Papel Carta 576 45A45 5
34B34 Libreta Apuntes mini 234 34B34 22
67C32 Micropunta negro 456 67C32 8

ID_Cliente Nombre Nombre Cantidad


234 Ramn Pea Cuaderno Argollado 3
234 Ramn Pea Libreta Apuntes mini 22
576 Carol Valencia Carpeta Plastificada 12
576 Carol Valencia Block Papel Carta 5
456 Cesar Garca Micropunta negro 1

11
FAVA - Formacin en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje
Consulta de Datos usando Lenguaje Estructurado de Consultas

2. Consultas de Resumen

Con mucha frecuencia las consultas deben sufrir un tratamiento adicional


que permite que los resultados se puedan agrupar y aplicar sobre esos
grupos operaciones particulares. En estas consultas que se denominaran
de resumen cada fila de datos que se visualiza puede corresponder con
varias filas de las tablas originales, por esto reciben el nombre de
resumen, por esta caracterstica particular tiene una serie de
restricciones particulares que se abordaran a continuacin.

SELECCT CODPROD, SUM (CANTIDAD)


FROM DETALLEPEDIDO
GROUP BY COPROD

2.1. Funciones de agregado

En la lista de seleccin de una consulta, se incluyen funciones que


implementan diferentes frmulas a aplicar sobre el conjunto de datos de
una columna.

Las funciones disponibles pueden variar dependiendo del SGBD que se


utilice, a continuacin se presentan las ms comunes:

SUM ( Expresin): Calcula la suma del conjunto de datos determinado


por la expresin, estos deben ser de tipo numrico y el resultado ser del
mismo tipo.

Ejemplo:

SELECT SUM (precio)


FROM Ventas /* Calcula el total de las ventas */

12
FAVA - Formacin en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje
Consulta de Datos usando Lenguaje Estructurado de Consultas

MIN (Expresin): Obtiene el menor de los valores correspondientes con


el conjunto de datos determinado por la expresin.

Ejemplo:
SELECT MIN (precio)
FROM Productos /* Obtiene el menor precio de los productos */

MAX (Expresin): Obtiene el mayor de los valores correspondientes con


el conjunto de datos determinado por la expresin.

Ejemplo:
SELECT MAX (precio)
FROM Productos /* Obtiene el precio ms alto de los productos*/

AVG (Expresin): Calcula el valor promedio (media aritmtica) del


conjunto de datos determinado por la expresin, estos deben ser de tipo
numrico y el resultado puede variar.

Ejemplo:
SELECT AVG (Precio)
FROM Ventas /* Calcula el precio promedio de venta de los productos */

COUNT(campo): Calcula el nmero de filas (registros) que contiene


informacin en el campo especificado

Ejemplo:
SELECT COUNT (email)
FROM Clientes /* Obtiene el nmero de clientes que registraron un email
*/

COUNT(*): Cuenta el nmero de registros (filas) resultantes en una


consulta.

Ejemplo:
SELECT COUNT (*)
FROM Ventas /* Obtiene el nmero de ventas que se han hecho */
.22
Noo.
A N
ENNA
SSE

Es de aclarar que en una consulta se pueden utilizar varias funciones a la


vez.

13
FAVA - Formacin en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje
Consulta de Datos usando Lenguaje Estructurado de Consultas

2.2. La clusula GROUP BY

Las funciones de agregado hasta ahora slo se han aplicado al conjunto


total de registros de la tabla, produciendo un nico resultado, sin
embargo en ocasiones es necesario que las funciones se apliquen sobre
grupos particulares, produciendo subtotales. La clusula GROUP BY se
utiliza para identificar los grupos sobre los cuales debe aplicarse las
funciones y produce una fila de resultado por cada grupo.

En la lista de seleccin slo


pueden aparecer los mismos
campos que estn en la clusu-
la GROUP BY, valores constan-
Sintaxis: tes o funciones de agregado.

SELECT <Nombre_campos_grupo> , <constantes> ,


<funcin_de_agregado>
FROM <Nombre_tabla>
WHERE <Condicin>
GROUP BY <Nombre_campos_grupo>

Ejemplo:

SELECCT CODPROD, SUM (CANTIDAD)


FROM DETALLEPEDIDO
GROUP BY COPROD

En la consulta de la derecha se generaron grupos por el cdigo del


producto obteniendo la cantidad total vendida de cada producto, para
esto se aplic la funcin SUM y se estableci en la clusula GROUP BY el
campo codprod.

14
FAVA - Formacin en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje
Consulta de Datos usando Lenguaje Estructurado de Consultas

2.3. La clusula HAVING

En las consultas de resumen se pueden aplicar filtros a travs de la


clusula WHERE, estos se aplicaran antes de generar los grupos, sin
embargo es posible que se requiera aplicar filtros a los resultados despus
de establecer los grupos y aplicar las funciones. Esto se realiza gracias a
la clusula HAVING que acta directamente sobre los resultados de las
funciones de agregado.

Sintaxis:

SELECT <Nombre_campos_grupo> , <constantes> ,


<funcin_de_agregado>
FROM <Nombre_tabla>
WHERE <Condicin>
GROUP BY <Nombre_campos_grupo>
HAVING <Condicin sobre columnas calculadas>

Ejemplo

SELECCT CODPROD, SUM (CANTIDAD)


FROM DETALLEPEDIDO
GROUP BY COPROD

15
FAVA - Formacin en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje
Consulta de Datos usando Lenguaje Estructurado de Consultas

3. Subconsultas

Una subconsulta es una sentencia SELECT que aparece dentro de otra


sentencia SELECT y se puede encontrar en la lista de seleccin, como
parte del origen de datos, o como parte del criterio de seleccin
(condicin) bien sea a travs de la clusula WHERE o en la clusula
HAVING de la consulta principal.

La sintaxis de la subconsulta es la misma frente a las consultas vistas, sin


embargo se presenta encerrada entre parntesis, aun as existen algunas
restricciones a considerar para su uso:

No pueden incluir clusulas de ordenamiento


Dependiendo del nmero de columnas que presente, existen
restricciones referentes al lugar donde puede implementarse.
De preferencia no utilizar campos calculados ya que le bajan el
rendimiento a la consulta.

Las imgenes presentadas a continuacin indican las posibles ubicaciones


de las subconsultas dentro de las consultas principales y las restricciones
respecto al nmero de filas y columnas que pueden retornar

Ejemplo 1: Subconsulta ubicada en la lista de seleccin:

El resultado de la subconsulta
debe retornar una nica fila de
resultados

SELECT <campo1>,(SELECT <campox> FROM <Tabla> WHERE <condicin>)


FROM <tabla>
WHERE <condicin>

Crear una consulta que obtenga la lista de precios de cada producto junto
con el precio promedio de los mismos.

16
FAVA - Formacin en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje
Consulta de Datos usando Lenguaje Estructurado de Consultas

PRODUCTOS
CODIGO NOMBRE COLOR PRECIO
328 Camisa Blanco 35000
329 Buzo Azul 42000
330 Camiseta Rojo 38000
331 Top Negro 20000
332 Sueter Caf 40000

SELECT CODIGO, NOMBRE, PRECIOS, (SELECT AVG(PRECIO) AS PRECIO PROMEDIO


FROM PRODUCTOS)
FROM PRODUCTOS

CODIGO NOMBRE PRECIO PRECIO PROMEDIO


328 Camisa 35000 33000
329 Buzo 42000 33000
330 Camiseta 38000 33000
331 Top 20000 33000
332 Sueter 40000 33000

Ejemplo 2: Subconsulta ubicada en el origen de datos

Los campos de la lista de selec-


cin deben estar includos en el
conjunto de los resultado de la
consulta

SELECT <campo1>, <campo2>,...


FROM (SELECT... ... ... FROM <Tabla> WHERE <condicin>)
WHERE <condicin>

En este caso se comporta como una consulta independiente que se


ejecuta al inicio y del conjunto de resultados se extrae la informacin
solicitada por el select principal.

17
FAVA - Formacin en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje
Consulta de Datos usando Lenguaje Estructurado de Consultas

Ejemplo 3: Subconsulta ubicada como parte de la condicin o


filtro.

SELECT <campo1>; <campo2>,...


FROM <tabla>
WHERE <condicin> <operador> (SELECT... ... ...FROM <Tabla> WHERE <condicin>)

El nmero de filas y columnas


devueltas depende del opera-
dor utilizado

Este tipo de subconsultas pueden usarse en las clusulas WHERE o


HAVING cuando los datos que queremos visualizar estn en una tabla
(consulta principal) pero para seleccionar las filas de esa tabla
necesitamos un dato que est en otra tabla (obtenidas a partir de la
SELCT Nombre, Precio
subconsulta).
FROM Productos
Productos Ventas
WHERE ID_Prodcuto IN ( SELECT
ID_Producto Nombre Precio ID_Cliente ID_producto Cantidad
23B78 Cuaderno Argollado 35000 234 23B78 3
23J45 Carpeta Plastificada 42000 576 23J45 12
45A45 Block Papel Carta 28000 576 45A45 5
34B34 Libreta Apuntes mini 20000 234 34B34 22
67C32 Micropunta negro 40000 456 67C32 8
SELCT Nombre, Precio 3 ID_Client
)
FROM Productos 1
576
WHERE ID_Prodcutos IN ( SELECT ID_prodcuto 2
FROM Ventas ID_Client ID_producto
WHERE ID_Cliente = ( SELECT ID_Cliente 2 576 23J45
FROM Clientes 1
576 45A45
WHERE Nombre = Carol Valencia
)
ID_producto Nombre
)
3 23J45 Carpeta Plastificada
45A45 Block Papel Carta

El ejemplo a continuacin tiene tres niveles de anidamiento, la


subconsulta ms interna es la primera que se ejecuta, en este caso
retorna el cdigo del cliente llamado Carol Valencia, este cdigo lo pasa
a la segunda subconsulta, que lista los cdigos de los productos vendidos
al cliente con ese cdigo y por ltimo va a la tabla productos y extrae los
nombres y precios de los productos que corresponden con esos cdigos.

18
FAVA - Formacin en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje
Consulta de Datos usando Lenguaje Estructurado de Consultas

Note que los operadores utilizados para las subconsultas dependen del
nmero de filas y columnas que retornen stas.
SELCT Nombre, Precio
FROM Productos
SELCT Nombre, Precio
WHERE ID_Prodcuto IN ( SELECT ID_prodcuto
FROM Productos FROM Ventas
WHERE ID_Prodcuto IN ( SELECT ID_prodcuto
WHERE ID_Cliente = ( SELECT ID_Cliente
FROM Ventas FROM Clientes
WHERE ID_Cliente = ( SELECT ID_Cliente
WHERE Nombre =
FROM Clientes
)
) WHERE Nombre = Carol
)
)
3.1. Operadores

Para anidar subconsultas como parte de los criterios de seleccin se


utilizan diferentes tipos de operadores de acuerdo con las caractersticas
del conjunto de resultados que retorna la subconsulta.
3
_prodcuto A continuacin se establecen los posibles operadores a utilizar para anidar
2
OM Ventas subconsultas:
ERE ID_Cliente = ( SELECT ID_Cliente
Comparacin simple: Se utiliza cuando se requiere comparar uno de los
FROM Clientes
campos de la WHERE
fila actual de la= consulta
Nombre principal con el valor retornado por
Carol Valencia
una subconsulta,
) es requisito que la subconsulta slo retorne UN (1) valor
en este caso los operadores a usar son:

expresin = subconsulta
<>
<
<=
>
>=

SELECT ID_producto Retorna un solo campo


FROM Ventas
WHERE ID_Cliente = (SELECT ID_Cliente
FROM Clientes
WHERE Nombre = Carol Valencia
)

19
FAVA - Formacin en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje
Consulta de Datos usando Lenguaje Estructurado de Consultas

Comparacin cuantificada: se utiliza para comparar un campo de la


consulta principal con un conjunto de campos retornados por la
subconsulta.
3
Se utiliza el operador simple ms la expresin ANY
(cualquiera) o ALL (todos) dependiendo de si requiere que coincida con al
3 2 menos uno o si es obligatorio que se cumpla la condicin con todos los
elementos del conjunto.
2
1
Carol Valencia
SELECT ID_producto Retorna la lista de clien-
alencia tes de cali
FROM Ventas
WHERE ID_Cliente = ANY (SELECT ID_Cliente
FROM Clientes
WHERE Ciudad = Cali
)

SELECT ID_producto Retorna la lista de


FROM Ventas precios de los productos
WHERE precio_venta < ALL (SELECT precio_compra
FROM Productos
Compara que el precio )
de venta sea menor que
todos los precios de
compra

Comparacin con conjunto: Se utiliza para comparar el valor de una


expresin con un conjunto de datos retornados por la subconsulta. Utiliza
el operador IN.

SELECT nombre, direccin, ciudad Retorna la lista de clien-


FROM Clientes tes que compraron en
una fecha determinada
WHERE ID_Cliente IN (SELECT ID_Cliente
FROM Ventas
Compara que el cdigo WHERE Fecha_Venta=14/02/2013
de cliente est dentro )
del conjunto dado por la
subconsulta

20
FAVA - Formacin en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje
Consulta de Datos usando Lenguaje Estructurado de Consultas

Comparacin de existencia: En ocasiones slo se requiere conocer si la


consulta arroja o no resultados sin importar la cantidad de filas o
columnas que retorna, en este caso se utiliza el operador EXISTS y debe
incluir una referencia externa.

SELECT Nombre, Precio


FROM Productos
WHERE EXISTS (SELECT *
FROM Ventas
WHERE Productos.IDproducto=Ventas.IDproducto
)
Correlacin en la sub-
consulta

El siguiente cuadro resume la utilizacin de los operadores teniendo en


cuenta la cantidad de filas y columnas que retorne la subconsulta.

TIPO DE Una columna Varias columnas


RETORNO

Una fila = , < , > , <= , >= EXISTS

Varias Filas IN , =ANY , <ANY , >ANY , EXISTS

<=ANY , >=ANY , =ALLL ,

<ALL , >ALL , <=ALL , >=ALL

21
FAVA - Formacin en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje
Consulta de Datos usando Lenguaje Estructurado de Consultas

3.2. Referencias externas

En ocasiones es necesario comparar un valor en la fila actual, respecto a


un resultado particular en la subconsulta, para poder realizar esta
operacin, se utiliza una referencia externa en la subconsulta, que
consiste en tener en la condicin de la subconsulta una comparacin con
alguna de las columnas de la tabla de la consulta externa.

SELECT Nombre, Precio


FROM Productos
WHERE EXISTS (SELECT *
FROM Ventas
WHERE Productos.IDproducto=Ventas.IDproducto
)
Correlacin en la sub-
consulta

En el ejemplo anterior al ejecutarse la consulta externa se va ubicando


producto por producto en su tabla y por cada uno de ellos va y verifica que
su cdigo se encuentre presente en la subconsulta que hace referencia al
cdigo del producto de la tabla ventas. Este valor cambia con cada fila de
la consulta externa.

A diferencia de las subconsultas anteriores que se ejecutaban, obtenan


un resultado y posteriormente este valor era usado en la condicin de la
consulta externa, ahora el resultado de la subconsulta vara por cada fila
que se correlacione.

22
FAVA - Formacin en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje
Consulta de Datos usando Lenguaje Estructurado de Consultas

GLOSARIO

ALIAS: nombre con el que se puede remplazar un campo o una tabla de


la base de datos, una vez se le ha asignado el alias, en adelante se utili-
zar como referencia al elemento.

NOT NULL: Tipo de identificador utilizado para impide que un campo sea
vaco.

SGBD: Sistema de Gestin de Base de datos es un conjunto de progra-


mas que permiten el almacenamiento, modificacin y extraccin de la
informacin en una base de datos.

10
FAVA - Formacin en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje

23
FAVA - Formacin en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje
Consulta de Datos usando Lenguaje Estructurado de Consultas

BIBLIOGRAFA

Groff James R., W. P. (1991). Applique SQL. Osborne/McGraw-Hill.

G.Quintana, M. M. (2008). Aprende SQL. Publicaciones La universitat


Jaume.

924
FAVA - Formacin en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje
Consulta de Datos usando Lenguaje Estructurado de Consultas

CREDITOS

Control de documento
Construccin Objeto de Aprendizaje
Consulta de Datos usando Lenguaje Estructurado de Consultas

Desarrollador de contenido Magda Milena Garca Gamboa


Experto temtico Ana Yaqueline Chavarro Parra

Asesor pedaggico Claudia Milena Hernndez Naranjo

Carlos Alberto Espinosa Gmez


Produccin multimedia
William Fernando Ramrez Velandia

Programador Daniel Martnez

Lder expertos temticos Ana Yaqueline Chavarro Parra

Lder lnea de produccin Santiago Lozada Garcs

25
FAVA - Formacin en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje

También podría gustarte