DDL

Informática. Sistema Gestor de Bases de Datos. Lenguaje de Definición de Datos SQL (Structured Query Language). Sentencias

  • Enviado por: El remitente no desea revelar su nombre
  • Idioma: castellano
  • País: España España
  • 12 páginas
publicidad
publicidad

SOLUCIONES PRÁCTICA 1 DDL del SQL

1.- Visualice, para cada destino, la mayor distancia recorrida hacia el, por vuelos realizados por aviones con longitud mayor que la media, ordenados alfabéticamente.

SELECT destino, MAX(distancia)

FROM vuelos

WHERE tipo_avion IN

(SELECT tipo FROM aviones

WHERE longitud > (SELECT AVG(longitud) FROM aviones)

)

GROUP BY destino

ORDER BY 1

Mediante JOIN:

SELECT destino, MAX(distancia)

FROM vuelos v, aviones a

WHERE v.tipo_avion = a.tipo

AND longitud > (SELECT AVG (longitud) FROM aviones)

GROUP BY destino

ORDER BY 1

Empleando EXISTS:

SELECT destino, MAX(distancia)

FROM vuelos v

WHERE EXISTS

(SELECT 1 FROM aviones a

WHERE v.tipo_avion = a.tipo

AND longitud > (SELECT AVG(longitud) FROM aviones)

)

GROUP BY destino

ORDER BY 1

2.- Visualice el numero de parte menor para cada fecha que corresponda a vuelos que ni parten ni llegan a Madrid y que recorren una distancia mayor que la media de los realizados por Iberia, ordenados de menor a mayor.

SELECT fecha, MIN (num_parte)

FROM partes

WHERE num_vuelo IN

(SELECT num_vuelo FROM vuelos

WHERE origen <> 'MADRID'

AND destino <> 'MADRID'

AND distancia > (SELECT AVG (distancia) FROM vuelos

WHERE num_vuelo LIKE 'IB%')

)

GROUP BY fecha

ORDER BY 2

Mediante JOIN:

SELECT fecha, MIN (num_parte)

FROM partes p, vuelos v

WHERE p.num_vuelo = v.num_vuelo

AND origen <> 'MADRID'

AND destino <> 'MADRID'

AND distancia > (SELECT AVG (distancia)

FROM vuelos

WHERE num_vuelo LIKE 'IB%')

GROUP BY fecha

ORDER BY 2

Empleando EXISTS:

SELECT fecha, MIN (num_parte)

FROM partes p

WHERE EXISTS

(SELECT 1 FROM vuelos v

WHERE p.num_vuelo = v.num_vuelo

AND origen <> 'MADRID'

AND destino <> 'MADRID'

AND distancia > (SELECT AVG (distancia)

FROM vuelos

WHERE num_vuelo LIKE 'IB%')

)

GROUP BY fecha

ORDER BY 2

3.- Visualice los tipos de avión, el doble de su envergadura y el cuadrado de su longitud para aquellos aviones con longitud menor que la media y que realizan vuelos con origen o destino en una ciudad que comience por la letra 'M', ordenándolos de mayor a menor envergadura.

SELECT tipo, envergadura*2, longitud*longitud

FROM aviones

WHERE longitud <(SELECT AVG (longitud) FROM aviones)

AND tipo IN (SELECT tipo_avion

FROM vuelos

WHERE origen LIKE 'M%' OR destino LIKE 'M%')

ORDER BY 2 DESC

Mediante JOIN:

SELECT DISTINCT tipo, envergadura*2, longitud*longitud

FROM aviones a, vuelos v

WHERE a.tipo = v.tipo_avion

AND longitud <(SELECT AVG (longitud) from aviones)

AND (origen LIKE 'M%' OR destino LIKE 'M%')

ORDER BY 2 DESC

Utilizando EXISTS:

SELECT tipo, envergadura*2, longitud*longitud

FROM aviones a

WHERE longitud <(SELECT AVG (longitud) from aviones)

AND EXISTS (SELECT 1

FROM vuelos v

WHERE a.tipo="v.tipo_avion"

AND (origen LIKE 'M%' OR destino LIKE 'M%')

)

ORDER BY 2 DESC

4.- Visualice, para cada origen, la menor distancia recorrida desde el por vuelos realizados por aviones con capacidad (butacas) menor que la media ordenados alfabéticamente.

SELECT origen, MIN (distancia)

FROM vuelos

WHERE tipo_avion IN

(SELECT tipo FROM aviones

WHERE butacas <(SELECT AVG (butacas) FROM aviones)

)

GROUP BY origen

ORDER BY 1

Mediante JOIN:

SELECT origen, MIN (distancia)

FROM vuelos v, aviones a

WHERE v.tipo_avion = a.tipo

AND butacas <(SELECT AVG (butacas) FROM aviones)

GROUP BY origen

ORDER BY 1

Utilizando EXISTS:

SELECT origen, MIN (distancia)

FROM vuelos v

WHERE EXISTS

(SELECT 1 FROM aviones a

WHERE v.tipo_avion = a.tipo

AND butacas <(SELECT AVG (butacas) FROM aviones)

)

GROUP BY origen

ORDER BY 1

5.- Visualice las tres primeras letras de los orígenes y destinos de los vuelos realizados por aviones con longitud mayor que la media y envergadura menor que 2/3 la máxima envergadura, ordenados alfabéticamente por destino.

SELECT substring (origen, 1, 3), substring (destino, 1, 3)

FROM vuelos

WHERE tipo_avion IN

(SELECT tipo FROM aviones

WHERE longitud > (SELECT AVG (longitud) FROM aviones)

AND envergadura < (SELECT MAX(envergadura)*2/3 FROM aviones)

)

ORDER BY 2

Mediante JOIN:

SELECT substring (origen, 1, 3), substring (destino, 1, 3)

FROM vuelos v, aviones a

WHERE v.tipo_avion = a.tipo

AND longitud > (SELECT AVG (longitud) FROM aviones)

AND envergadura <(SELECT MAX(envergadura)*2/3 FROM aviones)

ORDER BY 2

Empleando EXISTS:

SELECT substring (origen, 1, 3), substring (destino, 1, 3)

FROM vuelos v

WHERE EXISTS (SELECT 1 FROM aviones a

WHERE v.tipo_avion = a.tipo

AND longitud > (SELECT AVG (longitud)

FROM aviones)

AND envergadura <(SELECT MAX(envergadura)*2.0/3.0

FROM aviones)

)

ORDER BY 2

6.- Visualice los diferentes dos primeros caracteres de los num_vuelo y el origen de los vuelos a que corresponden partes con numero de parte entre 200 y 800 y que recorren distancias mayores que la media, ordenándolos alfabéticamente por origen.

SELECT DISTINCT substring (num_vuelo, 1, 2), origen

FROM vuelos

WHERE num_vuelo IN (SELECT num_vuelo FROM partes

WHERE num_parte BETWEEN 200 AND 800)

AND distancia > (SELECT AVG (distancia) FROM vuelos)

ORDER BY 2

Mediante JOIN:

SELECT DISTINCT substring (v.num_vuelo, 1, 2), origen

FROM vuelos v, partes p

WHERE v.num_vuelo = p.num_vuelo

AND num_parte BETWEEN 200 AND 800

AND distancia > (SELECT AVG (distancia) FROM vuelos)

ORDER BY 2

Con EXISTS:

SELECT DISTINCT substring (num_vuelo, 1, 2), origen

FROM vuelos v

WHERE EXISTS

(SELECT 1 FROM partes p

WHERE v.num_vuelo = p.num_vuelo

AND num_parte BETWEEN 200 AND 800)

AND distancia > (SELECT AVG (distancia) FROM vuelos)

ORDER BY 2

7.- Visualice los números de vuelo, las tres primeras letras del origen y las tres primeras letras del destino para los vuelos realizados por aviones con m s alcance que la media de todos y con longitud menor que 2/3 la máxima longitud, ordenándolos por numero de vuelo.

SELECT num_vuelo, substring (origen,1,3), substring (destino,1,3)

FROM vuelos

WHERE tipo_avion IN

(SELECT tipo FROM aviones

WHERE alcance > (SELECT AVG (alcance) FROM aviones)

AND longitud * 3.0/2.0 <(SELECT MAX (longitud) FROM aviones)

)

ORDER BY 1

Mediante JOIN:

SELECT num_vuelo, substring(origen,1,3), substring(destino,1,3)

FROM vuelos v, aviones a

WHERE v.tipo_avion = a.tipo

AND alcance > (SELECT AVG (alcance) FROM aviones)

AND longitud * 3.0/2.0 <(SELECT MAX (longitud) FROM aviones)

ORDER BY 1

Mediante EXISTS:

SELECT num_vuelo, substring (origen,1,3), substring (destino,1,3)

FROM vuelos v

WHERE EXISTS

(SELECT 1 FROM aviones a

WHERE v.tipo_avion = a.tipo

AND alcance > (SELECT AVG (alcance) FROM aviones)

AND longitud * 3.0/2.0 <(SELECT MAX (longitud) FROM aviones)

)

ORDER BY 1

8.- Visualice los diferentes dos primeros caracteres de los números de vuelo y el destino de los vuelos a que corresponden partes con combustibles consumidos mayores que un tercio de la media de todos los combustibles consumidos, ordenados alfabéticamente por destinos.

SELECT DISTINCT substring (num_vuelo,1,2), destino

FROM vuelos

WHERE num_vuelo IN

(SELECT num_vuelo FROM partes

WHERE comb_consumido > (SELECT AVG (comb_consumido)*1.0/3.0

FROM partes)

)

ORDER BY 2

Mediante JOIN:

SELECT DISTINCT substring (v.num_vuelo,1,2), destino

FROM vuelos v, partes p

WHERE v.num_vuelo = p.num_vuelo

AND comb_consumido > (SELECT AVG (comb_consumido)*1.0/3.0 FROM partes)

ORDER BY 2

Utilizando EXISTS:

SELECT DISTINCT substring (num_vuelo,1,2), destino

FROM vuelos v

WHERE EXISTS

(SELECT 1 FROM partes p

WHERE v.num_vuelo = p.num_vuelo

AND comb_consumido > (SELECT AVG (comb_consumido)*1.0/3.0

FROM partes)

)

ORDER BY 2

9.- Visualice el total de plazas reservadas por numero de vuelo para los realizados desde Madrid a Barcelona o Sevilla y que recorran una distancia mayor que la media de todos los vuelos que salen de Madrid, ordenándolos de menor a mayor.

SELECT num_vuelo, SUM (plazas)

FROM reservas

WHERE num_vuelo IN

(SELECT num_vuelo FROM vuelos

WHERE origen = 'MADRID'

AND destino IN ('BARCELONA','SEVILLA')

AND distancia > (SELECT AVG (distancia)

FROM vuelos

WHERE origen = 'MADRID')

)

GROUP BY num_vuelo

ORDER BY 2

Mediante JOIN:

SELECT v.num_vuelo, SUM (plazas)

FROM reservas r, vuelos v

WHERE r.num_vuelo = v.num_vuelo

AND origen = 'MADRID'

AND destino IN ('BARCELONA','SEVILLA')

AND distancia > (SELECT AVG (distancia)

FROM vuelos

WHERE origen = 'MADRID')

GROUP BY v.num_vuelo

ORDER BY 2

Con EXISTS:

SELECT num_vuelo, SUM (plazas)

FROM reservas r

WHERE EXISTS

(SELECT 1 FROM vuelos v

WHERE r.num_vuelo = v.num_vuelo

AND origen = 'MADRID'

AND destino IN ('BARCELONA','SEVILLA')

AND distancia > (SELECT AVG (distancia)

FROM vuelos

WHERE origen = 'MADRID')

)

GROUP BY num_vuelo

ORDER BY 2

10.- Visualice la media de plazas reservadas por numero de vuelo para los realizados desde Barcelona o Sevilla a Madrid y que recorren una distancia menor que la media de todos los vuelos que llegan a Madrid, ordenados de menor a mayor.

SELECT num_vuelo, AVG (plazas)

FROM reservas

WHERE num_vuelo IN

(SELECT num_vuelo FROM vuelos

WHERE origen IN ('BARCELONA','SEVILLA')

AND destino = 'MADRID'

AND distancia <(SELECT AVG (distancia)

FROM vuelos

WHERE destino="MADRID" )

)

GROUP BY num_vuelo

ORDER BY 2

Mediante JOIN:

SELECT v.num_vuelo, AVG (plazas)

FROM reservas r, vuelos v

WHERE r.num_vuelo = v.num_vuelo

AND origen IN ('BARCELONA','SEVILLA')

AND destino = 'MADRID'

AND distancia <(SELECT AVG (distancia)

FROM vuelos

WHERE destino="MADRID" )

GROUP BY v.num_vuelo

ORDER BY 2

Con EXISTS:

SELECT num_vuelo, AVG (plazas)

FROM reservas r

WHERE EXISTS

(SELECT 1 FROM vuelos v

WHERE r.num_vuelo = v.num_vuelo

AND origen IN ('BARCELONA','SEVILLA')

AND destino = 'MADRID'

AND distancia <(SELECT AVG (distancia)

FROM vuelos

WHERE destino="MADRID" )

)

GROUP BY num_vuelo

ORDER BY 2

11.- Visualice el numero de parte mayor para cada fecha, que corresponda a vuelos desde o hacia Madrid y que recorran una distancia inferior a la media de la que recorren los vuelos de Iberia, ordenados de menor a mayor.

SELECT fecha, MAX (num_parte)

FROM partes

WHERE num_vuelo IN

(SELECT num_vuelo FROM vuelos

WHERE 'MADRID' IN (origen, destino)

AND distancia <(SELECT AVG (distancia)

FROM vuelos

WHERE num_vuelo LIKE 'IB%')

)

GROUP BY fecha

ORDER BY 2

Mediante JOIN:

SELECT fecha, MAX (num_parte)

FROM partes p, vuelos v

WHERE p.num_vuelo = v.num_vuelo

AND (origen = 'MADRID' OR destino = 'MADRID')

AND distancia <(SELECT AVG (distancia)

FROM vuelos

WHERE num_vuelo LIKE 'IB%')

GROUP BY fecha

ORDER BY 2

Mediante EXISTS:

SELECT fecha, MAX (num_parte)

FROM partes p

WHERE EXISTS

(SELECT 1 FROM vuelos v

WHERE p.num_vuelo = v.num_vuelo

AND (origen = 'MADRID' OR destino = 'MADRID')

AND distancia <(SELECT AVG (distancia)

FROM vuelos

WHERE num_vuelo LIKE 'IB%')

)

GROUP BY fecha

ORDER BY 2

12.- Recupere todas las características de los aviones que nunca han pasado por Barcelona.

SELECT * FROM aviones

WHERE tipo NOT IN

(SELECT tipo_avion FROM vuelos

WHERE origen = 'BARCELONA' OR destino = 'BARCELONA')

Mediante JOIN:

No se puede resolver mediante JOIN.

Con EXISTS:

SELECT * FROM aviones a

WHERE NOT EXISTS

(SELECT 1 FROM vuelos v

WHERE v.tipo_avion = a.tipo

AND (origen = 'BARCELONA' OR destino = 'BARCELONA')

)

14.- Indique el total de plazas reservadas existentes para cada número de vuelo de Iberia.

SELECT num_vuelo, SUM (plazas)

FROM reservas

WHERE num_vuelo LIKE 'IB%'

GROUP BY num_vuelo

También:

SELECT num_vuelo, SUM (plazas)

FROM reservas

GROUP BY num_vuelo

HAVING num_vuelo LIKE 'IB%'

15.- Seleccione, para cada origen, aquellos vuelos cuya distancia sea superior a la media de ese origen.

SELECT origen, num_vuelo

FROM vuelos A

WHERE distancia >

(SELECT AVG (distancia) FROM vuelos B

WHERE A.origen = B.origen)

16.- Indique los tipos de avión, el doble de su longitud y su envergadura, para los aviones con envergadura mayor que la media y que realicen vuelos desde o hacia Madrid, ordenándolos de mayor a menor longitud.

SELECT tipo, longitud*2, envergadura

FROM aviones

WHERE envergadura > (SELECT AVG (envergadura) FROM aviones)

AND tipo IN (SELECT tipo_avion FROM vuelos

WHERE (origen = 'MADRID' OR

destino = 'MADRID'))

ORDER BY 2 DESC

Mediante JOIN:

SELECT DISTINCT tipo, longitud*2, envergadura

FROM aviones a, vuelos v

WHERE a.tipo = v.tipo_avion

AND envergadura > (SELECT AVG (envergadura) FROM aviones)

AND (origen = 'MADRID' OR destino = 'MADRID')

ORDER BY 2 DESC

Con EXISTS:

SELECT tipo, longitud*2, envergadura

FROM aviones a

WHERE envergadura > (SELECT AVG (envergadura) FROM aviones)

AND EXISTS (SELECT * FROM vuelos v

WHERE a.tipo = v.tipo_avion

AND (origen = 'MADRID' OR

destino = 'MADRID')

)

ORDER BY 2 DESC

17.- Obtenga los diferentes orígenes de todos los vuelos cuyos aviones tienen una capacidad de 160 pasajeros y tienen la salida después de las 10 y cuarto de la mañana.

SELECT DISTINCT origen

FROM vuelos

WHERE hora_salida > '10:15'

AND tipo_avion IN (SELECT tipo FROM aviones

WHERE butacas = 160)

Mediante JOIN:

SELECT DISTINCT origen

FROM vuelos v, aviones a

WHERE a.tipo = v.tipo_avion

AND hora_salida > '10:15'

AND butacas = 160

Con EXISTS:

SELECT DISTINCT origen

FROM vuelos v

WHERE hora_salida > '10:15'

AND EXISTS (SELECT * FROM aviones a

WHERE v.tipo_avion = a.tipo

AND butacas = 160)

18.- Indique a cuántos destinos diferentes se vuela desde cada uno de los orígenes, mostrando la salida ordenada de mayor a menor numero de destinos.

SELECT origen, COUNT (DISTINCT destino)

FROM vuelos

GROUP BY origen

ORDER BY 2 DESC

19.- Visualice los tipos de avión, el doble de su longitud y su envergadura, para aquellos aviones con envergadura mayor que la media y que realizan vuelos desde o hacia Barcelona, ordenándolos de mayor a menor longitud.

SELECT tipo, longitud*2, envergadura

FROM aviones

WHERE envergadura > (SELECT AVG (envergadura) from aviones)

AND tipo IN (SELECT tipo_avion FROM vuelos

WHERE origen = 'BARCELONA'

OR destino = 'BARCELONA')

ORDER BY 2 DESC

Mediante JOIN:

SELECT tipo, longitud*2, envergadura

FROM aviones a, vuelos v

WHERE a.tipo = v.tipo_avion

AND envergadura > (SELECT AVG (envergadura) from aviones)

AND (origen = 'BARCELONA' OR destino = 'BARCELONA')

ORDER BY 2 DESC

Con EXISTS:

SELECT tipo, longitud*2, envergadura

FROM aviones a

WHERE envergadura > (SELECT AVG (envergadura) from aviones)

AND EXISTS (SELECT * FROM vuelos v

WHERE a.tipo = v.tipo_avion

AND (origen = 'BARCELONA' OR

destino = 'BARCELONA')

)

ORDER BY 2 DESC

20.- Indique cuantos tipos de aviones diferentes salen de cada origen de la tabla vuelos, mostrando la salida ordenada de mayor a menor numero de aviones.

SELECT origen, COUNT (DISTINCT tipo_avion)

FROM vuelos

GROUP BY origen

ORDER BY 2 DESC

21.- ¿Cuántas horas de salida diferentes hay para cada tramo (origen-destino) de la tabla vuelos?

SELECT origen, destino, COUNT (DISTINCT hora_salida)

FROM vuelos

GROUP BY origen, destino

22.- Obtener el número de vuelos diarios de Madrid a Barcelona.

SELECT COUNT(*)

FROM vuelos

WHERE origen ='MADRID'

AND destino = 'BARCELONA'

AND hora_salida BETWEEN '0:0' AND '23:59'

23.- Cree una vista sobre la tabla partes con las columnas num_parte y comb_consumido para los vuelos en que se consumió más de 1500 litros.
¿Cuántos partes hay en la vista?
Borre la vista.

CREATE VIEW vista_1

AS

SELECT num_parte, comb_consumido

FROM partes

WHERE comb_consumido > 1500

go

SELECT COUNT(*) FROM vista_1

go

DROP VIEW vista_1

go

30.- Cree una vista sobre la tabla partes con las columnas num_parte y comb_consumido para los partes con fecha entre el 28 y el 30 de octubre de 1993.
Visualice todo el contenido de la vista.
Borre la vista.

CREATE VIEW vista_2

AS

SELECT num_parte, comb_consumido

FROM partes

WHERE fecha BETWEEN '1993/10/28' AND '1993/10/30'

go

SELECT * from vista_2

go

DROP VIEW vista_2

go

31.- Cree una vista sobre la tabla vuelos con las columnas num_vuelo y tipo_avion con las distancias recorridas mayores a 900.
Visualice los datos de la vista para los vuelos de Iberia.
Borre la vista.

CREATE VIEW vista_3

AS

SELECT num_vuelo, tipo_avion

FROM vuelos

WHERE distancia > 900

go

SELECT * from vista_3

WHERE num_vuelo LIKE 'IB%'

go

DROP VIEW vista_3

go

32.- Cree una vista sobre la tabla vuelos con las columnas num_vuelo y destino para los vuelos procedentes de Málaga, Bilbao o Sevilla.
¿Cuantos destinos diferentes hay en la vista que empiecen por la letra 'M'?
Borre la vista.

CREATE VIEW vista_4

AS

SELECT num_vuelo, destino

FROM vuelos

WHERE origen IN ('MALAGA','BILBAO','SEVILLA')

go

SELECT COUNT(DISTINCT destino)

FROM vista_4

WHERE destino LIKE 'M%'

go

DROP VIEW vista_4

go

33.- Cree una vista con los vuelos que no son de Iberia y la media de la distancia de esos vuelos.
¿Cuantas filas tiene la vista?
Borre la vista.

CREATE VIEW vista_5

AS

SELECT num_vuelo, AVG (distancia)

FROM vuelos

WHERE num_vuelo NOT LIKE 'IB%'

GROUP BY num_vuelo

go

SELECT COUNT(*) FROM vista_5

go

DROP VIEW vista_5

go

34.- Cree una vista con el origen y el destino de los vuelos que no sean de Iberia y que no parten de Madrid.
¿Cuantos vuelos hay en la vista que lleguen a ciudades que no comiencen por la letra 'M'?
Borre la vista.

CREATE VIEW vista_6

AS

SELECT origen, destino

FROM vuelos

WHERE num_vuelo NOT LIKE 'IB%'

AND origen <> 'MADRID'

go

SELECT COUNT (*)

FROM vista_6

WHERE origen NOT LIKE 'M%'

go

DROP VIEW vista_6

go

35.- Obtener la ultima hora de salida para cada destino de los vuelos realizados por aviones con un alcance mayor que un tercio de la media del que tienen los otros aviones.

SELECT destino, MAX (hora_salida)

FROM vuelos

WHERE tipo_avion IN

(SELECT tipo FROM aviones A

WHERE alcance * 3 >

(SELECT AVG (alcance)

FROM aviones B

WHERE A.tipo <> B.tipo)

)

GROUP BY destino

Mediante JOIN:

SELECT destino, MAX (hora_salida)

FROM vuelos v, aviones A

WHERE v.tipo_avion = A.tipo

AND alcance * 3 > (SELECT AVG (alcance)

FROM aviones B

WHERE A.tipo <> B.tipo)

GROUP BY destino

Mediante EXISTS:

SELECT destino, MAX (hora_salida)

FROM vuelos V

WHERE EXISTS

(SELECT 1 FROM aviones A

WHERE V.tipo_avion = A.tipo

AND alcance * 3 >

(SELECT AVG (alcance)

FROM aviones B

WHERE A.tipo <> B.tipo)

)

GROUP BY destino

36.- Obtener la hora de salida mas temprana para cada uno de los orígenes de los vuelos realizados por aviones con un alcance menor que 2/3 de la media del alcance de los otros aviones.

SELECT origen, MIN (hora_salida)

FROM vuelos

WHERE tipo_avion IN

(SELECT tipo FROM aviones A

WHERE alcance * 3.0/2.0 <(SELECT AVG (alcance)

FROM aviones B

WHERE A.tipo <> B.tipo)

)

GROUP BY origen

Mediante JOIN:

SELECT origen, MIN (hora_salida)

FROM vuelos v, aviones A

WHERE v.tipo_avion = A.tipo

AND alcance * 3.0/2.0 <(SELECT AVG (alcance)

FROM aviones B

WHERE A.tipo <> B.tipo)

GROUP BY origen

Mediante EXISTS:

SELECT origen, MIN (hora_salida)

FROM vuelos V

WHERE EXISTS

(SELECT 1 FROM aviones A

WHERE V.tipo_avion = A.tipo

AND alcance * 3.0/2.0 <(SELECT AVG (alcance)

FROM aviones B

WHERE A.tipo <> B.tipo)

)

GROUP BY origen

37.- Obtener los números de parte de los partes que corresponden a vuelos que recorren una distancia mayor que la media de la distancia de los otros vuelos.

SELECT num_parte

FROM partes

WHERE num_vuelo IN

(SELECT num_vuelo FROM vuelos A

WHERE distancia <(SELECT AVG (distancia)

FROM vuelos B

WHERE A.num_vuelo <> B.num_vuelo)

)

Mediante JOIN:

SELECT num_parte

FROM partes p, vuelos A

WHERE p.num_vuelo = A.num_vuelo

AND distancia <(SELECT AVG (distancia)

FROM vuelos B

WHERE A.num_vuelo <> B.num_vuelo)

Mediante EXISTS:

SELECT num_parte

FROM partes P

WHERE EXISTS

(SELECT 1 FROM vuelos A

WHERE P.num_vuelo = A.num_vuelo

AND distancia <(SELECT AVG (distancia)

FROM vuelos B

WHERE A.num_vuelo <> B.num_vuelo)

)

39.- Obtener los números de parte de los partes que corresponden a vuelos que recorren una distancia menor que 2/3 de la media de las distancias de los otros vuelos.

SELECT num_parte FROM partes

WHERE num_vuelo IN

(SELECT num_vuelo FROM vuelos A

WHERE distancia*3/2 <(SELECT AVG (distancia)

FROM vuelos B

WHERE A.num_vuelo <> B.num_vuelo)

)

Mediante JOIN:

SELECT num_parte

FROM partes p, vuelos A

WHERE p.num_vuelo = A.num_vuelo

AND distancia*3/2 <(SELECT AVG (distancia)

FROM vuelos B

WHERE A.num_vuelo <> B.num_vuelo)

40.- Obtener la capacidad de aquellos aviones con capacidad mayor que la media de los otros aviones y envergadura menor que la media de las diferentes envergaduras de los otros aviones.

SELECT butacas

FROM aviones A

WHERE butacas > (SELECT AVG (butacas) FROM aviones B

WHERE A.tipo <> B.tipo)

AND envergadura <(SELECT AVG (DISTINCT envergadura)

FROM aviones C

WHERE A.tipo <> C.tipo)

41.- Obtener la longitud de aquellos aviones con longitud menor que la media de los otros aviones y capacidad mayor que la media de las diferentes capacidades de los otros aviones.

SELECT longitud FROM aviones A

WHERE longitud <(SELECT AVG (longitud)

FROM aviones B

WHERE A.tipo <> B.tipo)

AND butacas > (SELECT AVG (DISTINCT butacas)

FROM aviones C

WHERE A.tipo <> C.tipo)

42.- Obtenga la longitud de los aviones que realizan vuelos que recorren distancias mayores que la media de las distancias de los vuelos recorridos por la misma compañía.

SELECT longitud

FROM aviones

WHERE tipo IN

(SELECT tipo_avion FROM vuelos A

WHERE distancia > (SELECT AVG (distancia) FROM vuelos B

WHERE substring (A.num_vuelo,1,2) =

substring (B.num_vuelo,1,2)

)

)

Mediante JOIN:

SELECT longitud

FROM aviones a, vuelos V1

WHERE a.tipo = V1.tipo_avion

AND distancia > (SELECT AVG (distancia) FROM vuelos V2

WHERE substring (V1.num_vuelo,1,2) =

substring (V2.num_vuelo,1,2)

)

43.- Obtenga la capacidad de los aviones que realizan vuelos que recorren distancias menores que la media de las distancias de los vuelos recorridos por la misma compañía.

SELECT butacas

FROM aviones

WHERE tipo IN

(SELECT tipo_avion FROM vuelos A

WHERE distancia <(SELECT AVG (distancia)

FROM vuelos B

WHERE substring (A.num_vuelo,1,2)=

substring (B.num_vuelo,1,2)

)

)

Mediante JOIN:

SELECT DISTINCT butacas

FROM aviones a, vuelos V1

WHERE a.tipo = V1.tipo_avion

AND distancia <(SELECT AVG (distancia)

FROM vuelos V2

WHERE substring (V1.num_vuelo,1,2)=

substring (V2.num_vuelo,1,2)

)

44.- Obtener los números de vuelo de aquellos que recorren una distancia mayor que la media de las que recorren los vuelos que parten del mismo origen.

SELECT num_vuelo

FROM vuelos A

WHERE distancia > (SELECT AVG (distancia) FROM vuelos B

WHERE A.origen = B.origen)

45.- Obtenga los números de vuelo de aquellos que recorren una distancia menor que la media de las que recorren los vuelos que llegan a su mismo destino.

SELECT num_vuelo

FROM vuelos A

WHERE distancia <(SELECT AVG (distancia)

FROM vuelos B

WHERE A.destino=B.destino)

46.- Obtenga, para cada numero de vuelo, el total de plazas reservadas de los vuelos que recorren distancias mayores que la media de las distancias recorridas por vuelos de la misma compañía.

SELECT num_vuelo, SUM (plazas)

FROM reservas

WHERE num_vuelo IN

(SELECT num_vuelo FROM vuelos A

WHERE distancia > (SELECT AVG (distancia) FROM vuelos B

WHERE substring(A.num_vuelo,1,2) =

substring(B.num_vuelo,1,2)

)

)

GROUP BY num_vuelo

Mediante JOIN:

SELECT r.num_vuelo, SUM (plazas)

FROM reservas r, vuelos V1

WHERE r.num_vuelo = V1.num_vuelo

AND distancia > (SELECT AVG (distancia) FROM vuelos V2

WHERE substring (V1.num_vuelo,1,2) =

substring (V2.num_vuelo,1,2)

)

GROUP BY r.num_vuelo

47.- Obtener, para cada numero de vuelo, el total de plazas reservadas de los vuelos que recorren distancias menores que dos tercios de la media de las distancias recorridas por vuelos de otras compañías.

SELECT num_vuelo, SUM (plazas)

FROM reservas

WHERE num_vuelo IN

(SELECT num_vuelo FROM vuelos A

WHERE distancia*3/2 >

(SELECT AVG (distancia) FROM vuelos B

WHERE substring (A.num_vuelo,1,2) <>

substring (B.num_vuelo,1,2)

)

)

GROUP BY num_vuelo

Mediante JOIN:

SELECT r.num_vuelo, SUM (plazas)

FROM reservas r, vuelos V1

WHERE r.num_vuelo = V1.num_vuelo

AND distancia*3/2 >

(SELECT AVG (distancia) FROM vuelos V2

WHERE substring (V1.num_vuelo,1,2) <>

substring (V2.num_vuelo,1,2)

)

GROUP BY r.num_vuelo