Ejercicios de SQL para Consultas de Vuelos y Reservas

Ejercicios SQL

Ejercicios SQL

Aeropuerto

d. Consultas sencillas.

5.- Seleccionar de la tabla vuelos las columnas origen, destino y hora de salida para todas sus filas:

SELECT origen, destino, hora_salida

FROM vuelos

6.- Igual al anterior, pero que el orden de salida en listado de las columnas sea: origen, hora de salida, destino:

SELECT origen, hora_salida, destino

FROM vuelos

8.- Del resultado anterior eliminar la información que sea redundante:

SELECT DISTINCT origen, destino, hora_salida

FROM vuelos

9.- Poner la orden adecuada para visualizar el contenido de toda la tabla en el listado. Realizarlo con 2 órdenes distintas:

SELECT num_vuelo, origen, destino, hora_salida, tipo_avion

FROM vuelos

SELECT *

FROM vuelos

d. Consultas con predicado.

10.- Supongamos que se quieren recuperar de la tabla vuelos solo aquellos que salen de Madrid:

SELECT *

FROM vuelos

WHERE origen = ‘madrid’

11.- Recuperar el número de vuelos y la hora de salida de todos los vuelos que hacen el trayecto Madrid-Londres:

SELECT num_vuelo, hora_salida

FROM vuelos

WHERE origen = ‘madrid’ AND destino = ‘londres’

12.- Recuperar los vuelos (fila completa) que tengan como destino Londres, pero que no salgan de Madrid:

SELECT *

FROM vuelos

WHERE destino = ‘londres’ AND origen IS NOT ‘madrid’

13.- Recuperar todos los vuelos que haya entre Madrid y Sevilla:

SELECT *

FROM vuelos

WHERE origen = ‘madrid’ AND destino = ‘seviya’

14.- Recuperar todos los vuelos que salgan de Madrid y lleguen a Barcelona o a Sevilla:

SELECT *

FROM vuelos

WHERE origen = ‘madrid’ AND (destino = ‘barcelona’ OR destino = ‘seviya’)

15.- Recuperar los vuelos que salgan de Madrid, Barcelona o Sevilla:

SELECT *

FROM vuelos

WHERE origen IN (‘madrid’, ‘barcelona’, ‘seviya’)

16.- Recuperar todos los vuelos excepto los que salgan de Copenhague o Dublín:

SELECT *

FROM vuelos

WHERE origen NOT IN (‘copenague’, ‘dublin’)

17.- Recuperar todos los vuelos que salgan desde las 6 hasta las 12 de la mañana:

SELECT *

FROM vuelos

WHERE hora_salida BETWEEN ’06:00′ AND ’12:00′

18.- Recuperar todos los vuelos que no son de Iberia:

SELECT *

FROM vuelos

WHERE num_vuelo NOT LIKE ‘ib%’

19.- Recuperar todos los vuelos de la compañía Iberia:

SELECT *

FROM vuelos

WHERE num_vuelo LIKE ‘ib%’

e. Expresiones aritméticas y funciones.

20.- Visualizar la tabla aviones con la longitud y la envergadura expresada en pies (en la tabla está en metros), y la velocidad de crucero en millas/hora (en la tabla está en kilómetros/hora):

SELECT *

FROM aviones

WHERE num_vuelo LIKE ‘ib%’

21.- Obtener la relación entre longitud y velocidad de todos los aviones:

22.- Seleccionar los aviones cuya longitud supere a su envergadura en más de un 10%:

23.- Obtener los valores mínimos y máximos de la velocidad de crucero:

SELECT velocidad_crucero

FROM aviones

WHERE velocidad_crucero >= velocidad_cruceromin AND velocidad_crucero <= velocidad_cruceromax

24.- Obtener el primer vuelo que sale de Madrid:

25.- Se desea saber cuántas reservas permanecen con más de 50 plazas libres:

SELECT plazas_libres

FROM reservas

WHERE plazas_libres >= 50

26.- Se desea saber cuántas reservas existen en la tabla:

SELECT plazas_libres

FROM reservas

27.- Recuperar el número de destinos distintos que aparecen en la tabla vuelos:

SELECT DISTINCT destino

FROM vuelos

28.- Número de plazas que quedan en todos los vuelos del día 20 de febrero de 1992:

SELECT plazas_libres

FROM reservas

WHERE fexa_salida = ‘1992-02-20’

29.- Número total de plazas libres que existen para todos los días:

SELECT SUM (plazas_libres)

FROM reservas

30.- Recuperar la media de capacidad de los aviones:

SELECT AVG capacidad

FROM aviones

31.- Recuperar las columnas: tipo de avión, capacidad, longitud, relación entre capacidad y longitud con resultado decimal, velocidad de crucero, envergadura y relación entre velocidad de crucero y envergadura en formato entero:

32.- Recuperar la lista de ciudades de origen y la longitud del tamaño del nombre de la ciudad:

33.- De la lista de ciudades de origen, obtener otra lista de los caracteres 2º, 3º y 4º, y otra lista de los caracteres 3º y 4º:

34.- Obtener la lista de ciudades de origen y otra con los nombres de la ciudad de origen a las cuales se les añade, el primer carácter del nombre de la ciudad y los 3 últimos:

SELECT origen, (origen + LEFT(origen, 1) + RIGHT(origen, 3)) AS nombre

FROM vuelos

GROUP BY origen;

35.- ¿Qué realiza la sentencia: SELECT DISTINCT fexa_salida, YEAR(fexa_salida), MONTH(fexa_salida), DAY(fexa_salida) FROM reservas?

Seleccionas las distintas fechas de salida y muestras en diferentes campos el año, el mes y el día.

36.- ¿Qué realiza la sentencia: SELECT ora_salida, HOUR(ora_salida), MINUTE(ora_salida), SECOND(ora_salida) FROM vuelos?

Seleccionas las horas de salida y muestras en diferentes campos la hora, los minutos y los segundos.

37.- Hallar cuántos días han pasado para cada reserva entre la fecha de salida y el día 1/3/92:

f. Consultas con agrupamiento de filas.

38.- Visualizar los vuelos que despegan más pronto para cada uno de los orígenes:

39.- Visualizar los vuelos que despegan más pronto, pero teniendo en cuenta que los que tengan destino Barcelona no serán incluidos:

40.- ¿Qué realiza la sentencia: SELECT origen, MIN(ora_salida), MAX(ora_salida), COUNT(*) FROM vuelos GROUP BY origen?

Selecciona la hora del primer y último vuelo que parten de un origen.

41.- Similar al anterior, pero no se quieren visualizar los grupos cuya última hora de salida sea posterior a las 16:00 horas:

42.- Hallar para cada origen, el vuelo último que sale y cuántos salen, no visualizando los grupos cuyo último vuelo sea posterior a las 16:00 horas, que exista más de 1 vuelo, y que el origen no sea ni Dublín ni Copenhague:

43.- Obtener la hora de salida más temprana para cada origen y destino:

44.- Mostrar el total de plazas libres para cada número de vuelo:

45.- Mostrar el total de plazas libres existentes para cada número de vuelo que sea de Iberia:

46.- Se quieren ver aquellos vuelos de Iberia que tienen en total más de 150 plazas libres:

g. Consultas anidadas.

47.- Supongamos que un viajero pide un billete para el vuelo Madrid-Londres de las 20:40 el día 21 de febrero de 1992. Antes de darle el billete hay que comprobar que quedan plazas libres (esta información solo se encuentra en la tabla reservas, en la que los vuelos se identifican por su número, no por su trayecto y hora de salida). Hay que averiguar primero el número correspondiente al vuelo que se solicita:

48.- Recuperar las plazas libres que hay en cada uno de los vuelos Madrid-Londres para el 20 de febrero de 1992:

49.- Obtener los tipos de aviones y sus capacidades para aquellos en los que queden menos de 30 plazas libres:

50.- Recuperar los aviones cuya capacidad sea menor que el doble de alguno de los promedios de plazas libres por día:

51.- Recuperar los aviones cuya capacidad sea menor que el doble de alguno de los promedios de plazas libres por día:

52.- Supongamos que se quiere recuperar los aviones que hacen su recorrido en menos de 1 hora y 40 minutos. Ampliar para ello la tabla vuelos con una columna más en la que se incluye la distancia entre origen y destino. La duración aproximada de un recorrido será: distancia / velocidad de crucero:

53.- Recuperar las reservas cuyo número de plazas libres sea mayor que la media para ese mismo vuelo:

54.- Seleccionar el número de vuelo, origen y destino de aquellos vuelos con origen en Madrid para los que queden plazas libres:

55.- Recuperar los aviones (con todas sus características) que no pasan por Barcelona. Lo mismo que recuperar todos los aviones para los que no exista ningún vuelo con origen o destino Barcelona:

56.- Recuperar el número de plazas libres del vuelo Madrid-Londres de las 20:40 para el 21 de febrero de 1992:

57.- Recuperar las plazas libres que hay en cada uno de los vuelos Madrid-Londres para el 20 de febrero de 1992:

58.- Obtener los tipos de aviones y sus capacidades para aquellos en los que queden menos de 30 plazas libres:

SELECT aviones.tipo AS expr1, aviones.capacidad

FROM aviones WHERE aviones.numero_vuelo IN (SELECT reservas.numero_vuelo FROM reservas WHERE plazas_libres

59.- Obtener el número de plazas libres que quedan (entre todos los días) para cada vuelo y ordenar el resultado de mayor a menor plazas. Para el número de plazas se ordenará por el número de vuelo:

60.- Supongamos que se quiere una lista de todas las ciudades para las que hay vuelos, tanto si aparecen como origen o como destino, ordenadas. No realizar 2 consultas, ni poner varias veces las mismas ciudades:

Sentencias de actualización.

61.- Insertar una nueva fila en la tabla de reservas con los valores: ib600 para el campo num_vuelo, 23-02-92 para el campo fexa_salida y 45 para el campo de plazas libres:

62.- Insertar en la tabla reservas, el campo num_vuelo para los registros cuyo campo origen sea Sevilla:

63.- Modificar el tipo de avión del vuelo Málaga-Londres de las 15:05, poniendo D9S:

64.- Reducir la capacidad de todos los aviones en un 10%:

65.- Eliminar de la tabla de reservas, los registros que tengan menos de 50 plazas libres:

66.- Borrar todos los registros del fichero reservas:

i. Crear índices.

67.- Crear un índice llamado ixvuelos sobre la tabla vuelos, indexado por el campo origen y el campo destino en orden ascendente:

68.- Crear un índice llamado ixreservas sobre la tabla de reservas, sobre los campos num_vuelos y fexa_salida, en orden ascendente:

69.- Crear un índice sobre la tabla aviones llamado ixaviones, sobre el campo tipo:

j. Crear vistas.

70.- ¿Qué realiza la orden: CREATE VIEW vista_vuelos (v_origen, v_destino, v_ora_salida) AS SELECT (origen, destino, ora_salida) FROM vuelos?

71.- Crear una vista con los campos num_vuelo y fexa_salida de la tabla de reservas, que contenga los vuelos de Iberia:

72.- Crear otra vista similar a la anterior, pero que además contenga el campo: plazas_libres:

73.- Visualizar el contenido de las 2 vistas anteriores:

74.- Insertar en vista1 un nuevo vuelo con los campos: num_vuelo: ib999, fexa_salida: 29-02-1992, plazas_libres: 85:

75.- Hacer lo mismo en vista2:

76.- Insertar los mismos datos en vista2, pero el num_vuelo será: ba999:

77.- Similar al anterior, pero no permitir la inserción en la vista, que afecten a la tabla, sino a la vista:

78.- Insertar los valores del ejercicio 76 en vista2:

79.- Modificar en vista1 el número de plazas_libres del vuelo ib510, poniendo 0 plazas libres:

80.- Actualizar el número de vuelo ba000 al vuelo ib510:

81.- Borrar de la vista1, los registros cuya fecha de salida sea el 20-02-92:

k. Cambiar tablas.

82.- Supongamos que se quiere completar la tabla reservas especificando cuántas plazas libres son de cada clase: primera, preferente y turista:

l. Borrar tablas, índices o vistas.

83.- Borrar la tabla de vuelos:

84.- ¿Qué hace la orden: DROP INDEX ixreservas?

85.- Borrar la vista ixvuelos:

m. Sinónimos.

86.- Crear un sinónimo para usarlo como abreviatura de la tabla reservas:

87.- Crear otro sinónimo para la tabla reservas:

88.- Borrar los sinónimos creados anteriormente:

n. Autorizaciones.

89.- ¿Qué realiza la orden: GRANT SELECT, UPDATE (plazas_libres) ON TABLE reservas TO operador_reservas?

90.- Al operador llamado jefe_reservas, se le quieren conceder todas las autorizaciones sobre la tabla de reservas, además de poderlas conceder a otros usuarios. Sentencia SQL que realiza esta operación:

91.- Se le quieren quitar privilegios al operador de reservas (usuario: operador_reservas), sobre la actualización, en la tabla de reservas:

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.