30 Nov

Consultas Básicas con SELECT

Ejercicio 5: Seleccionar columnas específicas

Seleccionar las columnas origen, destino y hora_salida de todas las filas en la tabla vuelos.

SELECT origen, destino, hora_salida
FROM vuelos;

Ejercicio 6: Reordenar columnas en la selección

Igual que el anterior, pero mostrando las columnas en el orden: origen, hora_salida, destino.

SELECT origen, hora_salida, destino
FROM vuelos;

Ejercicio 8: Eliminar duplicados (DISTINCT)

Mostrar los orígenes únicos, eliminando cualquier información redundante de la tabla vuelos.

SELECT DISTINCT origen
FROM vuelos;

Ejercicio 9: Visualizar una tabla completa

Escribir la orden para visualizar el contenido completo de la tabla vuelos. Realizarlo con dos órdenes distintas.

Método 1: Especificando todas las columnas.

SELECT num_vuelo, origen, destino, hora_salida, tipo_avion
FROM vuelos;

Método 2: Usando el comodín asterisco (*).

SELECT *
FROM vuelos;

Filtrado de Datos con WHERE

Ejercicio 10: Filtrar por una condición simple

Recuperar de la tabla vuelos solo aquellos que salen de Madrid.

SELECT *
FROM vuelos
WHERE origen = 'madrid';

Ejercicio 11: Filtrar por múltiples condiciones (AND)

Recuperar el número de vuelo 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';

Ejercicio 12: Usar el operador de desigualdad

Recuperar los vuelos (fila completa) que tengan por destino Londres pero que no salgan de Madrid.

SELECT *
FROM vuelos
WHERE destino = 'londres' AND origen <> 'madrid';

Ejercicio 13: Filtrar usando el operador IN

Recuperar todos los vuelos que viajan entre Madrid y Sevilla (en cualquier dirección).

SELECT *
FROM vuelos
WHERE origen IN ('madrid', 'sevilla') AND destino IN ('sevilla', 'madrid');

Ejercicio 14: Combinar AND con IN

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

SELECT *
FROM vuelos
WHERE origen = 'madrid' AND destino IN ('barcelona', 'sevilla');

Ejercicio 15: Filtrar por múltiples valores en una columna

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

SELECT *
FROM vuelos
WHERE origen IN ('madrid', 'barcelona', 'sevilla');

Ejercicio 16: Negar una condición con NOT IN

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

SELECT *
FROM vuelos
WHERE origen NOT IN ('copenhague', 'dublin');

Ejercicio 17: Filtrar por un rango de horas

Recuperar todos los vuelos que salgan desde las 6 hasta las 12 de la mañana (es decir, entre las 06:00 y las 11:59).

SELECT *
FROM vuelos
WHERE HOUR(hora_salida) >= 6 AND HOUR(hora_salida) < 12;

Ejercicio 18: Filtrar texto con NOT LIKE

Recuperar todos los vuelos que no son de la compañía Iberia (asumiendo que sus números de vuelo no comienzan con ‘IB’).

SELECT *
FROM vuelos
WHERE num_vuelo NOT LIKE 'ib%';

Ejercicio 19: Filtrar texto con LIKE

Recuperar todos los vuelos de la compañía Iberia (asumiendo que sus números de vuelo comienzan con ‘IB’).

SELECT *
FROM vuelos
WHERE num_vuelo LIKE 'ib%';

Ejercicio 22: Realizar comparaciones entre columnas

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

SELECT *
FROM aviones
WHERE longitud > envergadura * 1.1;

Cálculos y Funciones en Consultas

Ejercicio 21: Realizar cálculos entre columnas

Obtener la relación entre la longitud y la velocidad de crucero para todos los aviones, mostrando el resultado en una columna con alias.

SELECT tipo, longitud / velocidad_crucero AS 'relacion_longitud_velocidad'
FROM aviones;

Ejercicio 32: Usar funciones de cadena (LEN/LENGTH)

Recuperar una lista de ciudades de origen sin duplicados y la longitud del nombre de cada ciudad.

SELECT DISTINCT origen, LEN(origen) AS 'longitud_de_la_ciudad'
FROM vuelos;

Ejercicio 33: Usar funciones de subcadena (SUBSTRING)

De la lista de ciudades de origen, obtener una columna con los caracteres 2º, 3º y 4º, y otra con los caracteres 3º y 4º.

SELECT DISTINCT origen, 
       SUBSTRING(origen, 2, 3) AS 'caracteres_2_3_4',
       SUBSTRING(origen, 3, 2) AS 'caracteres_3_4'
FROM vuelos;

Ejercicio 35: Explicación de una sentencia con funciones de fecha

Pregunta: ¿Qué realiza la siguiente sentencia?

SELECT DISTINCT fecha_salida, YEAR(fecha_salida), MONTH(fecha_salida), DAY(fecha_salida) 
FROM reservas;

Respuesta: Esta sentencia selecciona y muestra cada fecha de salida única de la tabla reservas, junto con el desglose de esa fecha en columnas separadas para el año, el mes y el día.

Ejercicio 36: Explicación de una sentencia con funciones de tiempo

Pregunta: ¿Qué realiza la siguiente sentencia?

SELECT hora_salida, HOUR(hora_salida), MINUTE(hora_salida), SECOND(hora_salida) 
FROM vuelos;

Respuesta: Esta sentencia muestra todas las horas de salida de la tabla vuelos y, para cada una, extrae y muestra en columnas separadas la hora, el minuto y el segundo.

Ejercicio 37: Calcular diferencia entre fechas (DATEDIFF)

Hallar cuántos días han pasado para cada reserva entre la fecha de salida y el día 1 de marzo de 1992.

SELECT '01/03/1992' AS 'fecha_referencia', 
       fecha_salida,
       DATEDIFF(day, fecha_salida, '1/3/92') AS 'diferencia_en_dias'
FROM reservas;

Funciones de Agregación y Agrupación

Ejercicio 23: Obtener valores mínimos y máximos (MIN, MAX)

Obtener los valores mínimos y máximos de la velocidad de crucero de la tabla aviones.

SELECT MIN(velocidad_crucero) AS 'velocidad_minima_crucero',
       MAX(velocidad_crucero) AS 'velocidad_maxima_crucero'
FROM aviones;

Ejercicio 24: Obtener el primer evento de un grupo

Obtener la hora del primer vuelo que sale de Madrid.

SELECT MIN(hora_salida) AS 'primer_vuelo_sale_de_madrid'
FROM vuelos
WHERE origen = 'madrid';

Ejercicio 25: Contar filas que cumplen una condición

Se desea saber cuántas reservas tienen más de 50 plazas libres.

SELECT COUNT(*) AS 'reservas_con_mas_de_50_plazas'
FROM reservas
WHERE plazas_libres > 50;

Nota: El ejercicio original seleccionaba todas las columnas (SELECT *), pero la pregunta pide «cuántas reservas», lo que implica usar COUNT(*).

Ejercicio 26: Contar todas las filas de una tabla (COUNT)

Se desea saber cuántas reservas existen en total en la tabla.

SELECT COUNT(*) AS 'numero_de_reservas'
FROM reservas;

Ejercicio 27: Contar valores distintos

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

SELECT COUNT(DISTINCT destino) AS 'numero_destinos_distintos'
FROM vuelos;

Nota: El ejercicio original listaba los destinos con GROUP BY, pero la pregunta pide «el número de destinos», lo que se logra más eficientemente con COUNT(DISTINCT ...).

Ejercicio 28: Seleccionar datos por fecha

Obtener el número de plazas que quedan en todos los vuelos del día 20 de febrero de 1992.

SELECT num_vuelo, plazas_libres
FROM reservas
WHERE fecha_salida = '20/02/1992';

Nota: El ejercicio original usaba SELECT *, pero la pregunta se centra en el «número de plazas».

Ejercicio 29: Sumar valores por grupo (SUM, GROUP BY)

Calcular el número total de plazas libres que existen para cada vuelo, agrupando por número de vuelo.

SELECT num_vuelo, SUM(plazas_libres) AS 'total_plazas_libres'
FROM reservas 
GROUP BY num_vuelo;

Ejercicio 30: Calcular el promedio (AVG)

Recuperar la capacidad media de los aviones.

SELECT AVG(capacidad) AS 'capacidad_media_aviones'
FROM aviones;

Ejercicio 38: Agrupar por múltiples columnas

Visualizar la hora del primer vuelo que despega para cada combinación de origen y destino.

SELECT origen, destino, MIN(hora_salida) AS 'primer_vuelo'
FROM vuelos 
GROUP BY origen, destino;

Ejercicio 39: Filtrar grupos con HAVING

Visualizar la hora del primer vuelo para cada combinación de origen y destino, excluyendo aquellos vuelos cuyo destino sea Barcelona.

SELECT origen, destino, MIN(hora_salida) AS 'primer_vuelo'
FROM vuelos
GROUP BY origen, destino 
HAVING destino <> 'barcelona';

Ejercicio 43: Obtener el valor mínimo por grupo

Obtener la hora de salida más temprana para cada par de origen y destino.

SELECT origen, destino, MIN(hora_salida) AS 'primer_vuelo'
FROM vuelos
GROUP BY origen, destino;

Ejercicio 44: Obtener la suma por grupo

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

SELECT num_vuelo, SUM(plazas_libres) AS 'total_plazas_libres'
FROM reservas
GROUP BY num_vuelo;

Ejercicio 45: Filtrar grupos con HAVING y LIKE

Mostrar el total de plazas libres para cada vuelo de Iberia.

SELECT num_vuelo, SUM(plazas_libres) AS 'total_plazas_libres'
FROM reservas
GROUP BY num_vuelo 
HAVING num_vuelo LIKE 'ib%';

Ejercicio 46: Combinar condiciones en HAVING

Mostrar aquellos vuelos de Iberia que tienen en total más de 150 plazas libres.

SELECT num_vuelo, SUM(plazas_libres) AS 'total_plazas_libres'
FROM reservas 
GROUP BY num_vuelo 
HAVING num_vuelo LIKE 'ib%' AND SUM(plazas_libres) > 150;

Manipulación de Datos (DML)

Ejercicio 61: Insertar una nueva fila (INSERT INTO)

Insertar una nueva fila en la tabla reservas con los valores: ‘ib600’ para num_vuelo, ’23-02-92′ para fecha_salida y 45 para plazas_libres.

INSERT INTO reservas (num_vuelo, fecha_salida, plazas_libres)
VALUES ('ib600', '23-02-92', 45);

Ejercicio 62: Insertar filas basadas en una consulta

Insertar en la tabla reservas el número de vuelo para todos los registros cuyo origen es Sevilla, con una fecha y plazas por defecto.

INSERT INTO reservas (num_vuelo, fecha_salida, plazas_libres)
SELECT num_vuelo, '2-2-92', 0
FROM vuelos
WHERE origen = 'sevilla';

Ejercicio 63: Modificar registros (UPDATE)

Modificar el tipo de avión del vuelo Málaga-Londres de las 15:05, asignándole el valor ‘d9s’.

UPDATE vuelos 
SET tipo_avion = 'd9s' 
WHERE origen = 'malaga' 
  AND destino = 'londres' 
  AND HOUR(hora_salida) = 15 
  AND MINUTE(hora_salida) = 5;

Para comprobar el resultado:

SELECT * 
FROM vuelos
WHERE origen = 'malaga' 
  AND destino = 'londres' 
  AND HOUR(hora_salida) = 15 
  AND MINUTE(hora_salida) = 5;

Ejercicio 64: Modificar todos los registros de una tabla

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

UPDATE aviones 
SET capacidad = capacidad * 0.9;

Para comprobar el resultado:

SELECT * 
FROM aviones;

Ejercicio 65: Eliminar registros con condición (DELETE)

Eliminar de la tabla reservas los registros que tengan menos de 50 plazas libres.

DELETE FROM reservas 
WHERE plazas_libres < 50;

Para comprobar el resultado:

SELECT num_vuelo, fecha_salida, plazas_libres
FROM reservas;

Ejercicio 66: Eliminar todos los registros de una tabla

Borrar todos los registros de la tabla reservas.

DELETE FROM reservas;

Definición y Eliminación de Objetos (DDL)

Ejercicio 83: Borrar una tabla (DROP TABLE)

Borrar la tabla completa de vuelos.

DROP TABLE vuelos;

Ejercicio 84: Explicación de una sentencia DDL

Pregunta: ¿Qué hace la orden DROP INDEX ixreservas?

Respuesta: Borra el índice llamado ixreservas de la base de datos actual. Esto elimina la estructura del índice, pero no los datos de la tabla asociada.

Ejercicio 85: Borrar una vista (DROP VIEW)

Borrar la vista llamada ixvuelos.

DROP VIEW ixvuelos;

Deja un comentario