0% encontró este documento útil (0 votos)
147 vistas18 páginas

Ejercicios SQL: Consultas Básicas y Avanzadas

Este documento contiene varios ejercicios de SQL para practicar consultas simples y multitabla. El primer ejercicio pide obtener una lista de todos los productos mostrando su identificador, descripción, precio y precio con IVA. Los ejercicios siguientes solicitan obtener datos de pedidos, empleados, clientes y oficinas utilizando joins y donde clauses.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOC, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
147 vistas18 páginas

Ejercicios SQL: Consultas Básicas y Avanzadas

Este documento contiene varios ejercicios de SQL para practicar consultas simples y multitabla. El primer ejercicio pide obtener una lista de todos los productos mostrando su identificador, descripción, precio y precio con IVA. Los ejercicios siguientes solicitan obtener datos de pedidos, empleados, clientes y oficinas utilizando joins y donde clauses.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOC, PDF, TXT o lee en línea desde Scribd

Ejercicios Resueltos - Prctica en Lenguaje SQL

Ejercicios tema 2. Las consultas simples


La lista de seleccin
1. Obtener una lista de todos los productos indicando para cada uno su idfab, idproducto, descripcin, precio y
precio con I.V.A. incluido (es el precio anterior aumentado en un 15%).
2. De cada pedido ueremos saber su n!mero de pedido, fab, producto, cantidad, precio unitario e importe.
SELECT numpedido !a" producto cant importe # cant $S precio%unitario importe
&R'( pedidos
). "istar de cada empleado su nombre, n# de d$as ue lle%a traba&ando en la empresa y su a'o de nacimiento
(suponiendo ue este a'o ya (a cumplido a'os).
'rdenacin de !ilas.
*. Obtener la lista de los clientes a)rupados por cdi)o de representante asi)nado, %isuali*ar todas la
columnas de la tabla.
SELECT +
&R'( clientes
'R,ER -. repclie
/. Obtener las oficinas ordenadas por orden alfab+tico de re)in y dentro de cada re)in por ciudad, si (ay
m,s de una oficina en la misma ciudad, aparecer, primero la ue ten)a el n!mero de oficina mayor.
-abla empleados
-abla o!icinas
-abla clientes
-abla productos
-abla pedidos.
SELECT id!a" idproducto descripcion
precio 0precio 1 0precio + 2.1/33 $S
i4a%incluido
&R'( productos
"os par+ntesis son opcionales, tambi+n se puede poner
como frmula de c,lculo. precio / precio 0 15 1122.
SELECT nom"re date03 - contrato $S
dias%tra"ajados 5ear0date033 - edad $S
a6o%nacimiento
&R'( empleados
Au$ (emos utili*ado la funcin date() ue de%uel%e el
d$a actual y (emos utili*ado la diferencia de fec(as para
saber cu,ntos d$as (an transcurrido entre las dos fec(as.
3ara saber el a'o de nacimiento restamos al a'o actual
la edad del empleado. 3ara obtener el a'o actual
aplicamos la funcin year() (ue de%uel%e el a'o de una
fec(a) sobre la fec(a actual (date())
SELECT +
&R'( o!icinas
'R,ER -. region ciudad o!icina ,ESC
7. Obtener los pedidos ordenados por fec(a de pedido.
SELECT +
&R'( pedidos
'R,ER -. !ec8apedido
Seleccin de !ilas.
9. "istar las cuatro l$neas de pedido m,s caras (las de mayor importe).
:. Obtener las mismas columnas ue en el e&ercicio 4 pero sacando unicamente las 5 l$neas de pedido de
menor precio unitario.
;. "istar toda la informacin de los pedidos de mar*o.
12. "istar los n!meros de los empleados ue tienen una oficina asi)nada.
SELECT T'P * +
&R'( pedidos
'R,ER importe ,ESC
3ara obtener las m,s caras tenemos ue ordenar por
importe y en orden descendente para ue apare*ca las m,s
caras primero. Adem,s como slo ueremos las cuatro
primeras utili*amos la cl,usula -O3 5.
SELECT T'P / numpedido !a"
producto cant importe # cant $S
precio%unitario importe
&R'( pedidos
'R,ER -. /
Ordenamos los pedidos por precio unitario
utili*ando el n# de columna, el precio unitario es la
uinta columna dentro de la lista de seleccin. 6n
este caso la ordenacin debe ser ascendente.
SELECT +
&R'( pedidos
<=ERE ('>T=0!ec8apedido3 ? )
7O8-9(fec(a) de%uel%e el n!mero de mes de
la fec(a.
SELECT numemp
&R'( empleados
<=ERE o!icina @S >'T >ALL
"os empleados ue tienen asi)nada una oficina
son los ue tienen un %alor en el campo oficina.
11. "istar los n!meros de las oficinas ue no tienen director.
12. "istar los datos de las oficinas de las re)iones del norte y del este (tienen ue aparecer primero las del
norte y despu+s las del este).
1). "istar los empleados de nombre :ulia.
1*. "istar los productos cuyo idproducto acabe en ;.
SELECT +
&R'( productos
<=ERE idproducto L@BE C+DC

Ejercicios tema ). Las consultas multita"la
1. "istar las oficinas del este indicando para cada una de ellas su n!mero, ciudad, n!meros y nombres de sus
empleados. 9acer una %ersin en la ue aparecen slo las ue tienen empleados, y (acer otra en las ue
apare*can las oficinas del este ue no tienen empleados.
SELECT o!icina
&R'( o!icinas
<=ERE dir @S >ALL
6l campo dir es el ue nos dice uien es el
director de la oficina.
SELECT +
&R'( o!icinas
<=ERE region @> 0CnorteCCesteC3
'R,ER -. region ,ESC
"os %alores se ponen entre comillas simples o dobles ya
ue son %alores alfanum+ricos. -ambi+n se puede poner
<96=6 re)ion > ?norte? O= re)ion > ?este?.
Ordenamos desc para ue primero apare*can las del
norte.
SELECT +
&R'( empleados
<=ERE nom"re L@BE CEulia +C
"os empleados cuyo nombre empiece por :ulia,
obser%ar ue antes del 0 (ay un espacio en blanco
para for*ar a ue el si)uiente car,cter despu+s de la
a sea un blanco y no co&a por e&emplo :ulian.
2. "istar los pedidos mostrando su n!mero, importe, nombre del cliente, y el l$mite de cr+dito del cliente
correspondiente (todos los pedidos tienen cliente y representante).
). "istar los datos de cada uno de los empleados, la ciudad y re)in en donde traba&a.
*. "istar las oficinas con ob&eti%o superior a @22.222 pts indicando para cada una de ellas el nombre de su
director.
1. SELECT o!icinas.o!icina
ciudad numemp nom"re
&R'( o!icinas @>>ER E'@>
empleados '> o!icinas.o!icina ?
empleados.o!icina
<=ERE region ? CesteC
[Link] la columna de empare&amiento [Link] es cla%e
principal en la tabla oficinas, es me&or utili*ar el :OI8 ue un
producto cartesiano. 6mpare&amos las dos tablas por el campo
oficina. "as oficinas ue no ten)an empleados no salen (es un
I886=).
Aomo ueremos slo las oficinas del este a'adimos la cl,usula
<96=6 con la condicion. 6l %alor este debe ir entre comillas (es
un %alor alfanum+rico).
Obser%ar ue en la lista de seleccin la columna oficina est,
cualificada (su nombre est, precedido del nombre de la tabla), es
necesario cualificarla porue en las dos tablas e;iste una
columna llamada oficina y el sistema no sabr$a cu,l de las dos
esco)er.
2. SELECT o!icinas.o!icina
ciudad numemp nom"re
&R'( o!icinas LE&T E'@>
empleados '> o!icinas.o!icina ?
empleados.o!icina
<=ERE region ? CesteC
4. Bi ueremos ue tambi+n apare*can las oficinas ue no tienen
empleados cambiamos I886= por "6C- (ueremos todas las
oficinas y la tabla oficinas est, a la i*uierda de la palabra :OI8).
O&o, si en la lista de seleccin ponemos [Link] en
%e* de [Link], en las filas de oficinas ue no tienen
empleados el n!mero de oficina aparece nulo.
). SELECT o!icinas.o!icina
ciudad numemp nom"re
&R'( empleados R@F=T E'@>
o!icinas '> o!icinas.o!icina ?
empleados.o!icina
<=ERE region ? CesteC
D. 6sta B6"6A- es eui%alente a la anterior pero (emos
cambiado "6C- por =IE9- porue a(ora la tabla oficinas est, a
la derec(a de la palabra :OI8.
SELECT numpedido importe
[Link]"re $S cliente limitecredito
&R'( pedidos @>>ER E'@> clientes '>
[Link] ? [Link]
6n este e&ercicio no pueden (aber pedidos sin
cliente, y lo ue nos interesa son los pedidos, lue)o
tampoco tienen ue aparecer los clientes ue no
tienen pedidos, por lo tanto utili*amos un I886=
:OI8.
SELECT empleados.+ ciudad region
&R'( empleados LE&T E'@> o!icinas '>
empleados.o!icina ? o!icinas.o!icina
Au$ (emos utili*ado "6C- :OI8 para ue tambi+n
sal)an los empleados ue no tienen oficina
asi)nada.
Aomo ueremos todos los datos del empleado
utili*amos empleados.0 para acortar.
/. "istar los pedidos superiores a 45.222 pts, incluyendo el nombre del empleado ue tom el pedido y el
nombre del cliente ue lo solicit.
7. 9allar los empleados ue reali*aron su primer pedido el mismo d$a en ue fueron contratados.
9. "istar los empleados con una cuota superior a la de su &efeF para cada empleado sacar sus datos y el
n!mero, nombre y cuota de su &efe.
SELECT o!icinas.+ nom"re $S director
&R'( empleados R@F=T E'@> o!icinas '>
empleados.o!icina ? o!icinas.o!icina
<=ERE o"jeti4o G 722222
8os interesan las oficinas con ob&eti%o superior a
@22.222pts. lue)o nos tenemos ue ase)urar ue
sal)an todas incluso si no tienen director
asi)nado por eso utili*amos =IE9- :OI8.
6n los %alores num+ricos no utili*ar el punto para
separar los miles (lo considerar$a coma decimal y
entender$a @22 en %e* de @22222).
SELECT numpedido
importe
[Link]"re $S
representante
[Link]"re $S cliente
&R'( 0pedidos @>>ER
E'@> clientes '>
[Link] ?
clientes.numclie3 @>>ER
E'@> empleados '>
[Link] ?
[Link]
<=ERE importe G 2/222
6n este e&ercicio no pueden (aber pedidos sin representante ni cliente, y
lo ue nos interesa son los pedidos, lue)o tampoco tienen ue aparecer
los representantes ue no tienen pedidos ni los clientes ue no tienen
pedidos, por lo tanto utili*amos un I886= :OI8.
3rimero a'adimos a cada l$nea de pedido los datos del cliente
corespondiente (con el primer I886=) y a cada fila resultante a'adimos
los datos del representante correspondiente.
8ota. el representante ue nos interesa es el ue (a reali*ado el pedido
y ese dato lo tenemos en el campo rep de pedidos por eso la condicin
de empare&amiento es [Link] > [Link].
Bi (ubiesemos uerido el nombre del representante asi)nado al cliente,
la condicin (ubiera sido [Link] > [Link].
SELECT empleados.+
&R'( empleados @>>ER E'@> pedidos '>
[Link] ? [Link]
<=ERE !ec8apedido ? contrato

"os representantes ue buscamos tienen un pedido con
la misma fec(a ue la de su contrato, tenemos ue
a'adir a los pedidos los datos del representante
correspondiente para poder comparar los dos campos.
SELECT empleados.+ je![Link] $S
num%je!e je![Link]"re $S nom"re%je!e
je![Link] $S cuota%je!e
&R'( empleados @>>ER E'@> empleados
je!es '> [Link]!e ? je![Link]
<=ERE [Link] G je![Link]
6n una misma l$nea necesito los datos del empleado y
los datos de su &efe, lue)o ten)o ue combinar
empleados con empleados. 8o interesan los empleados
ue no tienen &efe lue)o utili*o I886=. 6l alias de tabla
es obli)atorio ya ue combino empleados con la misma.
:. "istar los cdi)os de los empleados ue tienen una l$nea de pedido superior a 12.222 ptas o ue ten)an una
cuota inferior a 12.222 pts.
SELECT numemp
&R'( empleados LE&T E'@> pedidos '>
[Link] ? [Link]
<=ERE importe G 12222 'R cuota H
12222

Gna posible solucin es combinar pedidos con
empleados para poder seleccionar las l$neas de importe
H 12222 o cuota I 12222. 9ay ue utili*ar "6C- para
ue puedan aparecer empleados con cuota I 12222
ue no ten)an pedidos.
SELECT rep
&R'( pedidos
<=ERE importe G 12222
A>@'>
SELECT numemp
&R'( empleados
<=ERE cuota H 12222
6sta es otra solucin, obtener por una parte los cdi)os
de los empleados con una l$nea de pedido H 12222, por
otra parte los cdi)os de los empleados con cuota I
12222 y finalmente unir las dos listas con una G8IO8.
Ejercicios tema *. Las consultas de resumen
1. JAu,l es la cuota media y las %entas medias de todos los empleadosK
2. 9allar el importe medio de pedidos, el importe total de pedidos y el precio medio de %enta (el precio de %enta
es el precio unitario en cada pedido).
). 9allar el precio medio de los productos del fabricante AAI.
*. JAu,l es el importe total de los pedidos reali*ados por el empleado Vicente 3antallaK
/. 9allar en u+ fec(a se reali* el primer pedido (suponiendo ue en la tabla de pedidos tenemos todos los
pedidos reali*ados (asta la fec(a).
7. 9allar cu,ntos pedidos (ay de m,s de 45222 ptas.
9. "istar cu,ntos empleados est,n asi)nados a cada oficina, indicar el n!mero de oficina y cu,ntos (ay
asi)nados.
SELECT $IF0cuota3 $S cuota%media
$IF04entas3 $S 4entas%media
&R'( empleados
Bale una !nica fila con el resultado deseado. Biempre ue se
utilicen e;presiones o funciones en la lista de seleccin,
ueda me&or utili*ar un alias de columna para ue ese
apare*ca en el encabe*ado del resultado.
SELECT $IF0importe3 $S importe%medio
SA(0importe3 $S importe%total
$IF0importe#cant3 $S
precio%4enta%medio
&R'( pedidos
6l precio medio de %enta es la media aritm+tica de los
precios unitarios de cada pedido. 6l precio unitario se
calcula di%idiendo el importe del pedido por la cantidad
del pedido. importe1cant, por lo ue ponemos
AVE(importe1cant).
SELECT $IF0precio3 $S p%medio%$C@
&R'( productos
<=ERE id!a" ? C$C@C
A(ora no nos interesan todos los productos sino
unicamente los del fabricante AAI, por lo ue a'adimos
la cl,usula <96=6 para ue antes de calcular la media,
elimine del ori)en de datos los re)istros ue no cumplan
la condicin.
SELECT SA(0importe3 $S
total%pedidos%I%Pantalla
&R'( empleados @>>ER E'@> pedidos '>
[Link] ? [Link]
<=ERE nom"re ? CIicente PantallaC
6l importe total lo tenemos ue sacar de la tabla de
pedidos, y adem,s slo nos interesan los de Vicente
3antalla. Aomo nos dan el nombre del representante en
%e* de su n!mero y en el pedido slo tenemos el
n!mero de representante tenemos ue a'adir a las
l$neas de cada pedido, los datos del representante
correspondiente, por lo ue el ori)en de datos debe ser
el ue aparece en la C=O7.
SELECT (@>0!ec8apedido3 $S
primer%pedido
&R'( pedidos
"a fec(a del primer pedido es la fec(a m,s anti)ua de la
tabla de pedidos.
SELECT C'A>T0+3 $S
cuantos%pedidos%ma5ores
&R'( pedidos
<=ERE importe G 2/222
Be pod$a (aber utili*ado tambi+n AOG8-(numpedido) o
cualuier nombre de columna ue no pueda contener
%alores nulos, pero AOG8-(0) es me&or por ser m,s
r,pido (la diferencia se nota con tablas muy
%oluminosas).
:. 3ara cada empleado, obtener su n!mero, nombre, e importe %endido por ese empleado a cada cliente
indicando el n!mero de cliente.
;. 3ara cada empleado cuyos pedidos suman m,s de D2.222 ptas, (allar su importe medio de pedidos. 6n el
resultado indicar el n!mero de empleado y su importe medio de pedidos.
SELECT o!icina C'A>T0+3 $S
cuantos%empleados
&R'( empleados
FR'AP -. o!icina
Solucin 2
SELECT o!icinas.o!icina
C'A>T0numemp3 $S cuantos%empleados
&R'( empleados R@F=T E'@> o!icinas '>
empleados.o!icina ? o!icinas.o!icina
FR'AP -. o!icinas.o!icina
Aon esta solucin obtenemos el listado pedido pero no
aparecen las oficinas ue no tienen empleados
asi)nados ya ue sacamos la informacin de la tabla
empleados y aparece una fila con %alor nulo en oficina
ue contiene el n!mero de empleados ue no tienen
oficina. Bi uisieramos listar incluso las ue no ten)an
empleados (abr$a ue recurrir a la solucin 4
Gtili*amos un =IE9- :OI8 para ue el ori)en de datos
incluya tambi+n una fila por cada oficina ue no ten)a
empleados.
6n el E=OG3 LM y en la lista de seleccin (ay ue
indicar el campo oficina de la tabla oficinas, si ponemos
el de la tabla empleados, a)rupar, todas las oficinas ue
no tienen empleados en una fila (la columna
[Link] contiene %alor nulo para esas filas).
Au$ no podemos utili*ar AOG8-(0) por ue las oficinas
sin empleados aparecer$an con 1 en la columna
cuantosNempleados ya ue para esa oficina (ay una fila.
SELECT numemp nom"re
clie $S cliente SA(0importe3
$S total%4endido
&R'( empleados @>>ER
E'@> pedidos '>
[Link] ?
[Link]
FR'AP -. numemp
nom"re clie

8ecesitamos la tabla de pedidos para el importe %endido a u+ cliente,
necesitamos la tabla empleados para el nombre del representante, la
de clientes no la necesitamos ya ue nos piden el n!mero de cliente y
este est, en pedidos.
"a a)rupacin b,sica ue debemos reali*ar es por numemp y despu+s
por clie, pero como aparece el nombre del empleado en la lista de
seleccin, (ay ue incluirlo tambi+n en el E=OG3 LM.
Despu+s de determinar la a)rupacin b,sica ue nos (ace falta,
siempre ue se incluye una columna adicional en el E=OG3 LM (ay
ue comprobar ue esa nue%a columna no cambia la a)rupacin
b,sica.
3or e&emplo no podr$amos a'adir al E=OG3 LM la columna
fec(apedido ya ue se formar$an m,s )rupos.
Solucin 2
SELECT numemp nom"re
clie $S cliente SA(0importe3
$S total%4endido
&R'( empleados LE&T E'@>
pedidos '> [Link] ?
[Link]
FR'AP -. numemp
nom"re clie
Bi ueremos ue sal)an todos los empleados incluso los ue no
apare*can en los pedidos (abr$a ue sustituir el I886= por un "6C-.
12. "istar de cada producto, su descripcin, precio y cantidad total pedida, incluyendo slo los productos cuya
cantidad total pedida sea superior al O5% del stocPF y ordenado por cantidad total pedida.
11. Baber cu,ntas oficinas tienen empleados con %entas superiores a su cuota, no ueremos saber cuales sino
cu,ntas (ay.
ConsultaJ distintas%o!icinas
SELECT ,@ST@>CT o!icina
&R'( empleados
<=ERE 4entas G cuota
ConsultaJ sumaria11
SELECT C'A>T0+3 $S
cuantas%o!icinas
&R'( distintas%o!icinas


Bi contamos las oficinas directamente de la tabla empleados nos
salen Q oficinas ya ue la funcin AOG8-(nb columna) cuenta los
%alores no nulos pero los %alores repetidos los cuenta tantas %eces
como se repiten, como tenemos oficinas de se repiten en la
columna oficina de la tabla oficinas, esas oficinas son contadas
%arias %eces, (ay ue contar los %alores distintos.
6n otros BR" la funcin AOG8- puede lle%ar delante del nombre
de la columna la cl,usula DIB-I8A- ue indica ue slo se tienen
ue tener en cuenta %alores distintos (no cuenta los repetidos), por
e&emplo AOG8-(DIB-I8A- oficina), es una opcin muy !til ue
des)raciadamente no incluye el BR" de 7icrosoft :6-. 3ara
solucionar el problema se resuel%e con dos consultas, una con la
cual nos uedamos con los %alores distintos (en la solucin la
consulta se llama distintasNoficinas), y la otra ue nos cuenta esos
%alores
Ejercicios tema /. Las su"consultas
1. "istar los nombres de los clientes ue tienen asi)nado el representante Al%aro :aumes (suponiendo ue no
pueden (aber representantes con el mismo nombre).
SELECT rep $IF0importe3 $S
importe%medio
&R'( pedidos
FR'AP -. rep
=$I@>F SA(0importe3 G )2222
8o ueremos todos los empleados, unicamente los ue
ten)an un importe total pedido superior a D2.222, lue)o
tenemos ue poner la condicin BG7(importe) H D2222.
Aomo esta condicin contiene una funcin de columna
(BG7()) se tiene ue poner en la cl,usula 9AVI8E ya
ue selecciona filas de la tabla resultante no del ori)en
de datos.
SELECT descripcion precio
SA(0importe3 $S total%pedido
&R'( productos @>>ER E'@> pedidos '>
pedidos.!a" ? [Link]!a" $>,
[Link] ? [Link]
FR'AP -. id!a" idproducto descripcion
precio eDistencias
=$I@>F SA(0importe3 G eDistencias + 2.9/
'R,ER -. )

"a a)rupacin b,sica es por idfab e idproducto ya ue
son los dos campos ue con&untamente identifican un
producto.
Aomo descripcin y precio aparecen en la lista de
seleccin y no modifican la a)rupacin b,sica los
incluimos en el E=OG3 LM.
Aomo e;istencias aparece en el 9AVI8E y no modifica
la a)rupacin b,sica lo incluimos tambi+n el el E=OG3
LM.
3ara calcular el O5% de las e;istencias multiplicamos
e;istencias por 2,O5F obser%ar ue en la sentencia BR"
(ay ue utili*ar el punto para indicar los decimales.
3ara indicar la columna de ordenacin no podemos
utili*ar el alias campo, utili*amos el n!mero de orden de
la columna dentro de la lista de seleccin. 6n este caso
la suma de importes es la tercera columna.
2. "istar los %endedores (numemp, nombre, y n# de oficina) ue traba&an en oficinas SbuenasS (las ue tienen
%entas superiores a su ob&eti%o).
). "istar los %endedores ue no traba&an en oficinas diri)idas por el empleado 12T.
Solucin 2
SELECT numemp nom"re o!icina
&R'( empleados
<=ERE 0 o!icina >'T @> 0 SELECT o!icina
&R'( o!icinas <=ERE dir ? 12:3 3 'R
0 o!icina @S >ALL3K
Aon la subconsulta obtenemos la lista de las oficinas
diri)idas por el empleado 12T. Al final se obtienen los
empleados cuya oficina no est+ en esa lista. 3ero no
salen los empleados ue no tienen oficina asi)nada ya
ue su campo oficina es nulo por lo ue el resultado de
la comparacin es nulo, no es %erdadero y no se
seleccionan.
SELECT numemp nom"re o!icina
&R'( empleados
<=ERE o!icina HG $LL 0 SELECT o!icina
&R'( o!icinas <=ERE dir ? 12:3K

Aon esta solucin tenemos el mismo problema ue con
>'T @> , cuando la oficina del empleado es nula todos
los resultados de las comparaciones indi%iduales son
nulos por los ue el test $LL da nulo y no se
seleccionan los empleados con oficina nula.
*. "istar los productos (idfab, idproducto y descripcin) para los cuales no se (a recibido nin)!n pedido de
45222 o m,s.
SELECT id!a" idproducto descripcion
&R'( productos
<=ERE >'T EL@STS 0SELECT + &R'(
6n este caso es m,s cmodo utili*ar >'T EL@STS ya
ue (ay ue pre)untar por el idfab e idproducto a la %e*.
SELECT nom"re
&R'( clientes
<=ERE repclie ? 0SELECT numemp &R'(
empleados <=ERE nom"re ? C$l4aro
EaumesC 3K
9emos supuesto ue no pueden (aber dos empleados con el
mismo nombre, de lo contrario (abr$a ue a'adir $>. antes de
la subconsulta.
Solucin 1
SELECT numemp nom"re o!icina
&R'( empleados
<=ERE o!icina @> 0 SELECT o!icina &R'(
o!icinas <=ERE 4entas G o"jeti4o 3K
Aon esta solucin buscamos ue la oficina del empleado est+
en la lista de oficinas ue tienen %entas superiores a su
ob&eti%o.

Solucin )
SELECT numemp nom"re o!icina
&R'( empleados
<=ERE o!icina ? $>. 0 SELECT o!icina &R'(
o!icinas <=ERE 4entas G o"jeti4o 3K
Aon esta otra comparamos la oficina del empleado
con cada una de las oficinas ue ten)an %entas
superiores a su ob&eti%o, si la oficina del empleado
es i)ual a al)una de esas oficinas aparece el
empleado en el resultado. 6l resultado ser, el
mismo ue con la solucin 1.
Solucin 1
SELECT numemp nom"re o!icina
&R'( empleados
<=ERE >'T EL@STS 0 SELECT + &R'(
o!icinas <=ERE empleados.o!icina ?
o!icinas.o!icina $>, dir ? 12:3K
Obtenemos los empleados tales ue no e;ista una
oficina i)ual a la suya ue adem,s est+ diri)ida por el
empleado 12T, con esta solucin s$ aparecen los
empleados ue no tienen oficina.
pedidos <=ERE !a" ? id!a" $>, producto
? idproducto $>, importe G? 2/2223K
/. "istar los clientes asi)nados a Ana Lustamante ue no (an remitido un pedido superior a D222 pts.
SELECT numclie nom"re
&R'( clientes
<=ERE repclie @> 0 SELECT numemp
&R'( empleados <=ERE nom"re ? C$na
-ustamanteC 3
$>, numclie >'T @> 0 SELECT clie &R'(
pedidos <=ERE importe G )2223K

7. "istar las oficinas en donde (aya un %endedor cuyas %entas representen m,s del 55% del ob&eti%o de su
oficina.
SELECT +
&R'( o!icinas
<=ERE EL@STS 0 SELECT + &R'(
empleados <=ERE 4entas G o"jeti4o +
2.//3K
6n una subconsulta todos los campos no cualificados se
presuponen de la tabla ori)en de la subconsulta y slo si
no e;iste nin)una columna con ese nombre, la considera
como referencia e;terna, por eso no es necesario
cualificar %entas porue interpreta ue es el campo
%entas de la tabla empleados.
7. "istar las oficinas en donde todos los %endedores tienen %entas ue superan al 52% del ob&eti%o de la oficina.
SELECT +
&R'( o!icinas
<=ERE 0o"jeti4o + 2./3 H? $LL 0 SELECT 4entas
&R'( empleados <=ERE empleados.o!icina ?
o!icinas.o!icina 3K
6sta solucin no %ale porue salen las oficinas
ue no tienen empleados.
9ay ue a'adir una condicin para ue se
consideren slo las oficinas con empleados
como muestra la solucin 1.
Solucin 1
SELECT +
&R'( o!icinas
<=ERE 00o"jeti4o + 2./3 H? $LL 0 SELECT 4entas
&R'( empleados <=ERE empleados.o!icina ?
o!icinas.o!icina 3 3
$>, 0 EL@STS 0 SELECT + &R'( empleados
<=ERE empleados.o!icina ? o!icinas.o!icina 3 3K

Solucin 2
SELECT +
&R'( o!icinas
<=ERE 0o"jeti4o + ./3 H? 0SELECT (@>04entas3
&R'( empleados <=ERE empleados.o!icina ?
o!icinas.o!icina3K
6sta es otra posible solucin, calculamos la menor
%enta de los empleados de la oficina y si esta es
mayor ue el 52% del o&eti%o de la oficina uiere
decir ue todos los empleados de esa oficina
tienen %entas i)uales o superiores. Bi la oficina no
tiene empleados, la subconsulta no de%uel%e
nin)una fila y como estamos utili*ando una
comparacin simple el resultado es nulo, lue)o no
salen las oficinas ue no tienen empleados.
:. "istar las oficinas ue ten)an un ob&eti%o mayor ue la suma de las cuotas de sus %endedores
SELECT +
&R'( o!icinas
<=ERE o"jeti4o G 0 SELECT SA(0cuota3 &R'( empleados <=ERE empleados.o!icina ? o!icinas.o!icina3K
Ejercicios tema 7. $ctualiMacin de datos
1. Arear una tabla (llamarla nuevaempleados) ue conten)a las filas de la tabla empleados
SELECT + @>T' nue4aempleados
&R'( empleadosK
2. Arear una tabla (llamarla nuevaoficinas) ue conten)a las filas de la tabla oficinas.
SELECT + @>T' nue4ao!icinas
&R'( o!icinasK
). Arear una tabla (llamarla nuevaproductos) ue conten)a las filas de la tabla productos.
SELECT + @>T' nue4aproductos
&R'( productosK
*. Arear una tabla (llamarla nuevapedidos) ue conten)a las filas de la tabla pedidos.
SELECT + @>T' nue4apedidos
&R'( pedidosK
/. Bubir un 5% el precio de todos los productos del fabricante ACI.
AP,$TE productos
SET precio ? precio + 1.2/ <=ERE id!a" ? C$C@CK
-ambi+n se puede poner precio > precio /
precio02.25
7. A'adir una nue%a oficina para la ciudad de Madrid, con el n!mero de oficina 30, con un ob&eti%o de 100000 y
re)in Centro.
Solucin 1
@>SERT @>T' o!icinas 0 o!icina region
ciudad o"jeti4o 3
I$LAES 0 )2 CcentroCC(adridC 122222 3K
Aomo no asi)namos %alor a todos los campos, no (ace
falta poner todas las columnas en la lista de columnas.
"os campos dir y ventas se rellenar,n con el %alor
predeterminado.
UO&oV Bi la tabla oficinas tiene definido en la columna dir
el %alor predeterminado 0, al intentar e&ecutar la I8B6=-
ocurrir, un error porue asi)na 0 al campo dir , como dir
es cla%e a&ena, antes de insertar comprueba ue el %alor
insertado en la cla%e a&ena e;iste en la tabla empleados,
y el empleado 0 no e;iste por lo ue no puede insertar la
oficina, el %alor predeterminado de dir debe ser nulo.
Solucin 2
@>SERT @>T' o!icinas
0o!icinaregionciudaddiro"jeti4o4entas3
Aon esta solucin nos ase)uramos ue el %alor de dir
sea nulo independientemente del %alor predeterminado y
I$LAES 0)2 CcentroC C(adridC null
12222223 K
nos ase)uramos ue ventas sea i)ual a cero.
Solucin )
@>SERT @>T' o!icinas
I$LAES 0)2 C(adridC CcentroC null
12222223 K
6n este caso como no especificamos una lista de
columnas tenemos ue poner los %alores en el mismo
orden ue las columnas en %ista dise'o de la tabla.
9. Aambiar los empleados de la oficina 21 a la oficina 30.
AP,$TE empleados SET o!icina ? )2
<=ERE o!icina ? 21K
Bi e&ecutamos esta sentencia antes de (aber creado la
oficina 30, el sistema nos de%uel%e un error.
:. 6liminar los pedidos del empleado 105.
,ELETE &R'( pedidos <=ERE rep ? 12/K
;. 6liminar las oficinas ue no ten)an empleados.
Solucin 1
,ELETE &R'( o!icinas <=ERE >'T
EL@STS 0SELECT +
&R'( empleados <=ERE
empleados.o!icina ? o!icinas.o!icina3K
Bi la oficina no tiene empleados asi)nados, no e;iste nin)!n
empleado con el n!mero de esa oficina.
Solucin 2
,ELETE &R'( o!icinas <=ERE
o!icina >'T @> 0SELECT o!icina
&R'( empleados3 K
-ambi+n se puede %er como las oficinas cuyo n!mero no se
encuentra entre las oficinas asi)nados a los empleados.
Solucin )
,ELETE o!icinas.+
&R'( o!icinas LE&T E'@> empleados
'> o!icinas.o!icina?
empleados.o!icina
<=ERE [Link] @S
>ALL K
Otro planteamiento ser$a unir los empleados con sus oficinas
y ue tambi+n sal)an las oficinas ue no tienen empleados
(por eso "6C- en %e* de I886=) a partir de a($
seleccionamos las filas ue no tienen %alor en el campo
numemp, estas son las no tienen nin)!n empleado
relacionado. Aomo adem,s el ori)en est, basado en dos
tablas es obli)atorio poner oficinas.0 para indicar ue se
tienen ue borrar las filas de la tabla oficinas y no de
empleados.
12. =ecuperar los precios ori)inales de los productos a partir de la tabla nuevosproductos.
AP,$TE productos @>>ER E'@>
nue4aproductos
'> 0 [Link]!a" ?
[Link]!a"3 $>,
[Link] ?
nue4aproductos.idproducto3
SET [Link] ?
[Link]
Gnimos la tabla de productos con la tabla
nuevaproductos para tener en una misma fila el precio
ue ueremos cambiar y el precio anti)uo (el %alor ue
ueremos de&ar).
11. =ecuperar las oficinas borradas a partir de la tabla nuevaoficinas.
@>SERT @>T' o!icinas
SELECT + &R'( nue4ao!icinas
<=ERE o!icina >'T @> 0SELECT o!icina
&R'( o!icinas3K
6n este caso insertamos en oficinas las oficinas de
nuevaoficinas cuyo n!mero de oficina no est, en
oficinas (es decir las ue se (an borrado).
12. =ecuperar los pedidos borrados en el e&ercicio T a partir de la tabla nuevapedidos.
@>SERT @>T' pedidos
SELECT + !rom nue4apedidos <=ERE rep
? 12/K
Insertamos en pedidos los pedidos del empleados 105
ue se encuentran en la tabla nuevapedidos.
1). A los empleados de la oficina 30 asi)narles la oficina 21
AP,$TE empleados
SET o!icina ? 21 <=ERE o!icina ? )2K
Bi no (emos recuperado las oficinas borradas, no
permitir, cambiar el campo oficina a 41 ya ue la oficina
41 es de las ue se (an borrado en el e&ercicio Q.
Ejercicios tema 9. Re!erencias cruMadas
1. Rueremos saber de cada empleado sus %entas mensuales del a'o 1QQ2.
TR$>S&'R( SA(0importe3
SELECT rep $S empleado
&R'( pedidos
<=ERE 5ear0!ec8apedido3?1;;2
FR'AP -. rep
P@I'T ('>T=0!ec8apedido3K
Rueremos calcular la suma de importes de los pedidos
reali*ados durante el a'o 1QQ2 a)rupando por empleado
y mes, ueremos una fila por empleado lue)o E=OG3
LM rep, ueremos ue los meses apare*can como
columnas din,micas, lue)o 3IVO-
7O8-9(fec(apedido), el calculo se (ace en base a los
pedidos de 1QQ2 lue)o el ori)en de la C=O7 es pedidos
con el <96=6 para seleccionar los pedidos de 1QQ2,
como columna fi&a ueremos el n!mero de empleado
lue)o la lista de seleccin ser, rep con un alias para ue
el resultado sal)a m,s aseado.
2. 7odificar el e&ercicio 1 para ue &unto al n!mero de empleado tambi+n apare*ca el nombre del empleado.
TR$>S&'R( SA(0importe3
SELECT numemp $S empleado nom"re
&R'( pedidos @>>ER E'@> empleados '>
[Link]?[Link]
<=ERE 5ear0!ec8apedido3?1;;2
FR'AP -. numemp nom"re
P@I'T ('>T=0!ec8apedido3K
A(ora ueremos ue adem,s apare*ca el nombre del
empleado, como no est, en la tabla pedidos sino en
empleados, (ay ue a'adir a los pedidos los datos del
empleado con el I886= :OI8, a(ora ueremos dos
columnas fi&as, la del n!mero de empleado y su nombre
lue)o en la lista de seleccin a'adimos nombre, y como
estamos en una sumaria nombre no puede estar en la
lista de seleccin si no est, en el E=OG3 LM lue)o lo
a'adimos a la cl,usula E=OG3 LM.
). Rueremos saber las %entas mensuales de cada oficina distin)uiendo meses de distintos a'os.
TR$>S&'R( SA(0importe3
SELECT o!icina
&R'( pedidos R@F=T E'@> empleados '>
[Link]?[Link]
FR'AP -. o!icina
P@I'T
5ear0!ec8apedido3NO#ON('>T=0!ec8apedido3K
A(ora ueremos a)rupar por oficina, a'o y mes, el
pi%ote ser$a a'o y mes pero no se pueden poner dos
campos en la cl,usula 3IVO-, lo ue (acemos es
unir los dos campos en uno mediantela
concatenacin W adem,s para ue ueden los
%alores m,s claros los separamos por una barra.

*. Be necesita una estad$stica de cu,ntos empleados fueron contratados por a'o en cada oficina.
TR$>S&'R( C'A>T0numemp3
SELECT o!icina
&R'( empleados
FR'AP -. o!icina
P@I'T 5ear0contrato3K
6n este caso ele)imos como pi%ote el a'o y como
encabe*ado de fila la oficina ya ue normalmente abr,n
m,s oficinas ue a'os.
/. Rueremos saber por a'o las %entas reali*adas en las distintas re)iones
TR$>S&'R( SA(0importe3
SELECT .E$R0!ec8apedido3 $S an5o
&R'( 0pedidos @>>ER E'@> empleados
'> [Link]?empleados.numemp3
@>>ER E'@> o!icinas '>
empleados.o!icina?o!icinas.o!icina
FR'AP -. .E$R0!ec8apedido3
P@I'T regionK
6n este e&ercicios necesitamos los pedidos para el
importe %endido y la tabla oficinas para la re)in y para
unirlas debemos utili*ar la tabla empleados para
relacionar los pedidos con las oficinas de los empleados
ue (an reali*ado el pedido.
Ejercicios tema :. El ,,L Lenguaje de ,e!inicin de ,atos
1. Arear la tabla empleados y definir su cla%e principal en la misma instruccin de creacin.
2. Arear la tabla oficinas con su cla%e principal y su cla%e for,nea ( la columna dir contiene el cdi)o de
empleado del director de la oficina lue)o es un campo ue (ace referencia a un empleado lue)o es cla%e
for,nea y (ace referencia a la tabla empleados).
). Arear la tabla productos con su cla%e principal.
CRE$TE T$-LE empleados 0
numemp @>TEFER PR@($R. BE.
nom"re TELT0)23 >'T >ALL
edad @>TEFER
o!icina @>TEFER
titulo C=$R0223
contrato ,$TET@(E >'T >ALL
director @>TEFER
cuota CARRE>C.
4entas ('>E.3K
"a solucin propuesta es una de la muc(as posibles ya ue cada
uno puede ele)ir el tipo de datos ue prefiera siempre y cuando
ese tipo permita introducir los datos ue tenemos en las tablas
de e&emplo. -ambi+n la cl,usula 8O- 8G"" se puede poner en
m,s campos de los ue tiene la solucin e;cepto en las
columnas ue ten)an filas sin %alor en las tablas de e&emplo. 3or
e&emplo en oficina (el empleado 112 no tiene oficina), en director
(el empleado 12@ no tiene director) y en cuota (el empleado 112
no tiene cuota asi)nada. 3ero las columnas edad, titulo y %entas
s$ las podemos definir con la restriccin 8O- 8G"". 3ara definir
las columnas cuota y %entas (emos ele)ido el tipo moneda
(AG==68AM y 7O86M son sinnimos).
CRE$TE T$-LE o!icinas 0
o!icina @>T PR@($R. BE.
ciudad TELT0)23
region TELT0223
dir @>T C'>STR$@>T c!%dir RE&ERE>CES
empleados
o"jeti4o CARRE>C.
4entas CARRE>C. 3K
3ara definir la columna dir como cla%e for,nea (emos
ele)ido una restriccin1 (poner la definicin dentro de la
definicin de la columna).
CRE$TE T$-LE productos 0
id!a" TELT0123
idproducto TELT0223
descripcion TELT0)23 >'T >ALL
precio CARRE>C. >'T >ALL
eDistencias @>T
C'>STR$@>T cp PR@($R. BE.
0id!a"idproducto3 3K
6n este caso la cla%e principal est, formada por dos
columnas idfab e idproducto lue)o para definirla
tenemos ue utili*ar necesariamente una restriccin4.

*. Arear la tabla clientes tambi+n con todas sus cla%es y sin la columna limitecredito.
CRE$TE T$-LE clientes 0
numclie @>T
nom"re TELT0)23 >'T >ALL
repclie @>T C'>STR$@>T c!%repclie
RE&ERE>CES empleados
C'>STR$@>T cp PR@($R. BE. 0numclie3 3 K
"a cla%e principal se puede definir en una restriccin4
aunue est+ compuesta por una sola columna.
/. Arear la tabla pedidos sin cla%e principal, con la cla%e for,nea ue (ace referencia a los productos, la ue
(ace referencia a clientes y la ue indica el representante (empleado) ue (a reali*ado el pedido.
CRE$TE T$-LE pedidos 0
codigo C'A>TER
numpedido @>T PR@($R. BE.
!ec8apedido ,$TET@(E >'T >ALL
clie @>T >'T >ALL
rep @>T >'T >ALL
!a" TELT0123 >'T >ALL
producto TELT0223 >'T >ALL
cant @>T >'T >ALL
importe CARRE>C. >'T >ALL
C'>STR$@>T c!%clie &'RE@F> BE. 0clie3
RE&ERE>CES clientes
C'>STR$@>T c!%rep &'RE@F> BE. 0rep3
RE&ERE>CES empleados
C'>STR$@>T c!%prod &'RE@F> BE.
0!a"producto3 RE&ERE>CES productos 3K
3ara e;poner m,s formas de definir una tabla au$ te
(emos definido todas las cla%es como restriccin4 la
!nica ue es obli)atoria en una restriccin4 es la cfNprod
ya ue est, compuesta por %arias columnas.

7. A'adir a la definicin de clientes la columna limitecredito.
$LTER T$-LE clientes
$,, C'LA(> limitecredito ('>E.K
3ara a'adir una nue%a columna a una tabla ue ya
e;iste debemos emplear la sentencia A"-6= -AL"6, y
en nuestro caso la cl,usula ADD AO"G78 (AO"G78
es opcional).
9. A'adir a la tabla empleados las cla%es for,neas ue le faltan. (Bi no tienes claro cuales son te lo decimos
a(ora. la columna oficina indica la oficina donde traba&a el empleado y la columna director indica ui+n diri)e al
empleado, su &efe inmediato).
$LTER T$-LE empleados
$,, C'>STR$@>T c!%o!icina &'RE@F>
BE. 0o!icina3 RE&ERE>CES o!icinas
C'>STR$@>T c!%director &'RE@F> BE.
0director3 RE&ERE>CES empleadosK
3ara a'adir una definicin de cla%e for,nea (ay ue
a'adir una restriccin4, se pueden a'adir %arias
restricciones en la misma sentencia A"-6= -AL"6.
:. 9acer ue no puedan (aber dos empleados con el mismo nombre.
Solucin 1
$LTER T$-LE empleados
$,, C'>STR$@>T u%nom"re A>@QAE
0nom"re3K
Solucin 2
CRE$TE A>@QAE @>,EL u%nom"re '>
empleados 0nom"re3K
3ara ue no se puedan repetir los %alores en la columna
nombre (ay ue definir un $ndice !nico, o bien
definiendo una restriccin sobre la columna como te
indicamos en la solucin 1 o bien creando el $ndice !nico
como te indicamos en la solucin 4.
;. A'adir a la tabla de pedidos la definicin de cla%e principal.
Solucin 1
$LTER T$-LE pedidos
$,, C'>STR$@>T cp PR@($R. BE.
0numpedido3K
3ara a'adir una definicin de cla%e primaria (ay ue
a'adir una restriccin4.
Solucin 2
CRE$TE @>,EL cp '> pedidos
0numpedido3 <@T= PR@($R. K
Otra solucin es crear un $ndice con la cl,usula <I-9
3=I7A=M.
12. Definir un $ndice sobre la columna re)ion de la tabla de oficinas.
CRE$TE @>,EL i%region '> o!icinas
0region3 K

11. 6liminar el $ndice creado.
,R'P @>,EL i%region '> o!icinas K

También podría gustarte