Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Ejercicios Resueltos SQLPDF
Ejercicios Resueltos SQLPDF
SQL
Dadas las siguientes tablas responda a las consultas en SQL
4. Listar los nombres de los estudiantes cuyo apellido comience con la letra G?
SELECT nombre
FROM estudiante
WHERE nombre LIKE "* G*" ;
)
);
SELECT *
FROM autor
WHERE nacionalidad ='USA' OR nacionalidad ='Francia' ;
SELECT *
FROM autor
WHERE nacionalidad IN('USA','Francia') ;
10. Listar los nombres de los estudiante que se prestaron Libros de Base de Datos
SELECT *
FROM estudiante
WHERE idlector IN
(
SELECT idlector
FROM prestamo
WHERE idlibro IN
(
SELECT idlibro
FROM libro
WHERE area='Base de Datos'
)
);
15. Listar los datos de los estudiantes cuya edad es mayor al promedio
SELECT *
FROM estudiante
WHERE edad > ( SELECT avg(edad) FROM estudiante )
0
2
Las operaciones SQL correspondientes al SELECT se realizarán con el siguente ejempo:
PERSONAS
DEPENDIENTES
DEPARTAMENTOS
PROYECTOS
a. Select básico. Se desea obtener la cédula y el nombre de todas las personas que trabajan
en la compañía.
Resultado/
Cedula Nombre
71134534 Juan
23423445 Ana María
12453535 Gloria
75556743 Pedro
43533322 Patricia
78900456 Carlos
b. Select con clausula WHERE. Se desea obtener toda la información de la persona cuya
cédula sea igual a 12453535.
SELECT nombre,primer_apellido,segundo_apellido,direccion,telefono
FROM personas
WHERE cedula = 12453535
Resultado/
c. En la clausula WHERE es posible utilizar los conectores lógicos AND - OR. Se necesita
la cédula y el nombre de las personas cuyo apellido sea BETANCUR y su sexo sea
MASCULINO:
SELECT cedula,nombre
FROM personas
WHERE primer_apellido = 'Betancur'
AND sexo = 'M'
Resultado/
Cedula Nombre
78900456 Carlos
d. Select combinando tablas y utilización del comodín '*'. Se desea obtener la información
de todos los dependientes de las personas cuyo apellido sea BETANCUR y su sexo sea
MASCULINO. Cuando se trabaja con varias tablas y se utiliza el '*', se le debe anteponer
el nombre de la tabla de la cual se desea extraer la información:
SELECT dependientes.*
FROM personas, dependientes
WHERE primer_apellido = 'Betancur'
AND sexo = 'M'
AND dependiente.cedula = personas.cedula
Resultado/
e. Utilizando alias o sinónimos de trabajo a las tablas del Select. Estos se utilizan por
facilidad en el manejo de la instrucción. La misma consulta anterior:
SELECT d.*
FROM personas p, dependientes d
WHERE primer_apellido = 'Betancur'
AND sexo = 'M'
AND d.cedula = p.cedula
Resultado/
Resultado/
Salario
1,600,000
1,700,000
1,350,000
1,500,000
1,200,000
1,800,000
g. Una de las clausulas más significativas en el Select es el COUNT, la cual se utiliza para
contar la cantidad de registros que cumplen con una condición específica:
SELECT count(*)
FROM personas
Resultado/
9
SELECT count(*)
FROM proyectos
WHERE codigo_dep = 3
Resultado/
3
Resultado/
6
h. Cláusula WHERE compara sus campos comunmente con valores únicos, pero tambien es
posible comparar con un "conjunto" de valores. Esto es realizable a través del operador
IN. Ejemplo, se desea saber qué empleados están involucrados en los proyectos 139001 o
139002.
SELECT personas.*
FROM personas, proyectos
WHERE (numero_proy = 139001 OR numero_proy =139002)
AND cod_dep = codigo_dep
SELECT personas.*
FROM personas, proyectos
WHERE numero_proy IN (139001,139002)
AND cod_dep = codigo_dep
Resultado/
PENDIENTE
SELECT personas.*
FROM personas
WHERE cedula_sup IN (select cedula
from personas
where primer_apellido = 'Betancur'
and segundo_apellido = 'Bermudez')
i.3 Mostrar el nombre de los empleados cuyo salario es mayor que el de todos los
empleados del departamento 3. Aquí se utiliza la utilización de la cláusula ALL:
SELECT *
FROM personas
WHERE salario IS NULL
k. Otra cláusula que es posible utilizar en el Select es EXIST, la cual ayuda a validar si el
resultado de una consulta anidada es vacio o no.
k.1 Seleccionar todos los empleados cuyo dependiente tenga la misma cedula, sexo y
nombre.
l. Con la operación de Select también es posible utilizar funciones agregadas para: sumar
(SUM), maximizar (MAX), minimizar (MIN) y promediar (AVG). Se pueden utilizar al
nivel de la cláusula SELECT o en la cláusual HAVING (que veremos posteriormente.
Ejemplo, el total pagado por la compañía, el máximo y el mínimo salario y el promedio
pagado:
m.1 Mostrar el número y el nombre del proyecto en donde trabajen más de dos empleados
o. En la cláusula Select también es posible realizar operaciones aritméticas '+', '-', '*', con
los campos de valor:
SELECT salario*1.18
FROM personas
WHERE salario < 1200000
p. Una cláusula más que podemos utilizar en la operación Select es la que me permite dale
un orden a las tuplas, ORDER BY, según el o los criterios indicados a través de columnas.
SELECT *
FROM personas
ORDER BY nombre, primer_apellido, segundo_apellido
3.
Se tiene el siguiente esquema de base de datos para el manejo de información de un
Sistema de Transportes intermunicipales:
El anterior esquema describe una base de datos con información sobre viajes de líneas
aéreas. Cada VIAJE se identifica con un número de viaje, y consta de uno o más
TRAYECTO_VIAJE con num_trayecto 1, 2, 3, etc. Cada trayecto tiene horas y terminales
de salida y de llegada programados, y tiene muchos TRAYECTO_VIAJE, uno por cada
fecha en que tiene lugar el viaje. Se mantienen TARIFAS para cada viaje. Para cada
movimiento de trayecto, se mantiene RESERVA_ASIENTOS, el transporte empleado en el
trayecto y las horas de salida y llegada y los terminales específicos. Un TRANSPORTE se
identifica con id_transporte y es de un cierto tipo_transporte. VIAJES AUTORIZADOS
relaciona los tipo_transporte con los terminales en los que puede aterrizar. Cada
TERMINAL se identifica con un cod_terminal.
1. Prepare una lista con los números de viaje y los días de todos los viajes o trayectos de
viaje que salen del terminal codigo ‘CA001’ y llegan al terminal código ‘BO001.
Solución 1:
SELECT num_viaje, num_trayecto,fecha
FROM viajes_realizados
WHERE cod_terminal_sale = 'CA001'
AND cod_terminal_llega = 'BO001';
Solución 2:
SELECT distinct numero, dias
FROM viajes_realizados, viajes
WHERE cod_terminal_sale = 'CA001'
AND cod_terminal_llega = 'BO001'
AND numero = num_viaje
2. Obtenga una lista con los números de viaje, códigos de terminal de salida, horas de salida
programadas, códigos de terminal de llegada, horas de llegada programadas y días de todos
los viajes o trayectos de viajes que salgan de algún terminal de la ciudad de Santa Marta y
lleguen a algún terminal de la ciudad de Buenaventura.
Solución 1:
SELECT tv.*, dias
FROM trayecto_viaje tv, terminales_transporte tt, viajes
WHERE (ciudad = 'Santa Marta' AND cod_terminal_sale = tt.cod_terminal)
AND (ciudad = 'Buenaventura' AND cod_terminal_llega = tt.cod_terminal)
AND (numero = num_viaje);
Solución 2:
SELECT tv.*, dias
FROM trayecto_viaje tv, viajes
WHERE cod_terminal_sale = (SELECT cod_terminal
FROM terminales_transporte
WHERE ciudad = 'Santa Marta')
AND cod_terminal_llega = (SELECT cod_terminal
FROM terminales_transporte
WHERE ciudad = 'Buenaventura')
AND numero = num_viaje;
3. Liste las diferentes tarifas que se aplicaron a los viajes que se realizaron entre los
terminales de Santa Marta y Medellín, en el año 1999.
Solución 1:
SELECT distinct cod_tarifa, monto
FROM viajes_realizados vr, tarifas ta, terminales_transporte
WHERE (ciudad = 'Santa Marta' AND cod_terminal_sale = cod_terminal)
AND (ciudad = 'Medellín' AND cod_terminal_llega = cod_terminal)
AND fecha between '01/01/00' and '31/12/99'
AND ta.num_viaje = vr.num_viaje;
Solución 2:
SELECT distinct cod_tarifa, monto
FROM viajes_realizados vr, tarifas ta, terminales_transporte
WHERE cod_terminal_sale = (SELECT cod_terminal
FROM terminales_transporte
WHERE ciudad = 'Santa Marta')
AND cod_terminal_llega = (SELECT cod_terminal
FROM terminales_transporte
WHERE ciudad = 'Medellín')
AND fecha between '01/01/00' and '31/12/99'
AND ta.num_viaje = vr.num_viaje;
4. Liste los terminales que tienen el mayor tráfico en un día (haga el ejemplo con cualquier
fecha).
5. Muestre los viajes con los correspondientes transportes, que tuvieron más de 50 pasajero
con reservas.
SELECT num_viaje, id_transporte
FROM viajes_realizados
WHERE num_viaje IN (SELECT num_viaje
FROM reserva_asientos
GROUP BY num_viaje
HAVING count(*) > 50);
____________________________________________________
Ejemplos:
NUMBER - es el "default".
Ejemplos:
Ejemplos:
Hay otros tipos de datos tales como: LONG, RAW, LONG RAW y otros.
"CONSTRAINT"
Ejemplo 1
Ejemplo 2
ALTER TABLE
DROP TABLE
TRUNCATE TABLE
INSERT INTO
UPDATE
UPDATE tabla1
SET campo2 = 'xyzwv'
WHERE campo1 = 1234567;
DELETE
COMMIT;
ROLLBACK;
DESC tabla
DESC tabla
FUNCIONES
"Single values"
Por ejemplo si nos presenta 23.5 días, quiere decir que han pasado 23
días y 12 horas (que equivale al .5 de un día)
SELECT AVG(salary)
FROM s_emp;
En este ejemplo se proyecta el promedio de los sueldos de todos los
empleados.
SELECT MAX(salary)
FROM s_emp;
SELECT COUNT(*)
FROM s_emp;
SELECT SUM(salary)
FROM s_emp;
OPERACIONES
Ejemplos:
SELECT last_name||first_name
FROM s_emp;
SELECT last_name||','||first_name
FROM s_emp;
FUNCIONES
Respecto a funciones para manejar cadenas de caracteres hay una gran
variedad. Lea el Capítulo 5 -"Getting text information and changing it" del
libro de texto. A continuación mostraremos el uso de algunas solamente.
SELECT last_name
FROM s_emp
WHERE LENGTH(last_name) =5;
SELECT LOWER(last_name)
FROM s_emp;
NOMBRE______________ __ID
Nagayama Midori................. 3
Urguhart,Molly...................... 6
Menchu,Roberta................... 7
FUNCIONES
Creación de Views
DEFINICION
Un view es una tabla "virtual" que podemos diseñar para que los usuarios
puedan hacer consultas. OJO: la creaci2n de un view no crea una tabla
físicamente en la base de datos ni en el sistema.
VENTAJAS
EJEMPLOS
SELECT *
FROM emp45;
UPDATE emp45
SET dept_id = 10
WHERE id = 10;
OJO: Antes de crear este view elimina el anterior con DROP VIEW
emp45;
DESCRIBE user_views
SELECT *
FROM user_views;