Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Ejercicios Resueltos SQL PDF
Ejercicios Resueltos SQL PDF
SQL
Dadas las siguientes tablas responda a las consultas en SQL
5. Quines son los autores del libro Visual Studio Net, listar solamente los nombres?
SELECT nombre
FROM autor
WHERE idautor IN
(
SELECT idautor
FROM libaut
WHERE idlibro IN
(
SELECT idlibro
FROM libro
WHERE titulo='Visual Studio Net'
)
);
6. Qu autores son de nacionalidad USA o Francia?
SELECT *
FROM autor
WHERE nacionalidad ='USA' OR nacionalidad ='Francia' ;
SELECT *
FROM autor
WHERE nacionalidad IN('USA','Francia') ;
13. Listar los ttulos de los libros que deban devolverse el 10/04/07
SELECT *
FROM libro
WHERE idlibro IN
(
SELECT idlibro
FROM prestamo
WHERE fechadevolucion=#04/10/07#
AND devuelto=No
)
14. Hallar la suma de las edades de los estudiantes
SELECT sum(edad) AS [La suma de las edades es: ]
FROM estudiante
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 realizarn con el siguente ejempo:
PERSONAS
Nombre
Primer_Apelli
Segundo_Apellido
do
Sexo
Direccin
Telefono
Salario
71134534
Juan
Mesa
Uribe
Cra 25 22-1
2567532
1,600,000 23423445
23423445
Ana
Mara
Betancur
Bermudez
1,700,000 43890231
12453535
Gloria
Betancur
Garces
Tr. 12 43-5
2756533
1,350,000 71134534
75556743
Pedro
Ochoa
Pelaez
1,700,000 43890231
43533322
Patricia Angel
Guzmn
Cll. 45 23-1
2674563
1,350,000 71134534
78900456
Carlos
Betancur
Agudelo
Cir. 5 12-5
4445775
1,500,000 75556743
73456789
Mario
Gmez
Angel
Cr. 53 23-1
3456789
1,200,000 23423445
43890231
Claudia Gonzalez
Beltran
Cll. 10 14-1
2660356
1,800,000 43890231
78900700
Fabio
Prez
Tr. 3 32-1
4345678
1,200,000 75556743
Solano
DEPENDIENTES
Cedula
Nombre_Dep
Sexo FechaN
Parentesco
78900456
Juanita
Hija
12-Abr-95
Cedula_Su
p
Cod_de
p
Cedula
78900456
Oscar
15-Ene-89
Hijo
23423445
Hector
23-Dic-67
Cnyuge
71134534
Mara
05-Mar-60
Cnyuge
71134534
Gloria
27-Nov-97
Hija
75556734
Jorge
14-Mar-96
Hijo
DEPARTAMENTOS
Codigo_Dep Nombre_Dep
Cedula_Jefe
Gerencia
43890231
Teleinformatica 75556734
Desarrollo
23423445
Soporte
Tcnico
71134534
PROYECTOS
Numero_Proy Nombre
Lugar
Codigo_Dep
129001
Registro y Matrcula
Bloque 21
139001
Red Lan
Bloque 14
139002
Bloque 21
129002
Notas
Campus
129003
149001
Inventario de HW y SW
Minas
149002
Licenciamiento
Campus
149003
Bloque 18
a. Select bsico. Se desea obtener la cdula y el nombre de todas las personas que trabajan
en la compaa.
SELECT cedula, nombre
FROM personas
Resultado/
Cedula
Nombre
71134534
Juan
23423445
Ana Mara
12453535
Gloria
75556743
Pedro
43533322
Patricia
78900456
Carlos
b. Select con clausula WHERE. Se desea obtener toda la informacin de la persona cuya
cdula sea igual a 12453535.
SELECT nombre,primer_apellido,segundo_apellido,direccion,telefono
FROM personas
WHERE cedula = 12453535
Resultado/
Nombre Primer_Apellido
Segundo_Apellido
Direccin
Gloria
Garces
Betancur
Telefono
c. En la clausula WHERE es posible utilizar los conectores lgicos AND - OR. Se necesita
la cdula 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 utilizacin del comodn '*'. Se desea obtener la informacin
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 informacin:
SELECT dependientes.*
FROM personas, dependientes
WHERE primer_apellido = 'Betancur'
Nombre_Dep
Sexo FechaN
Parentesco
78900456
Juanita
12-Abr-95
Hija
78900456
Oscar
15-Ene-89
Hijo
e. Utilizando alias o sinnimos de trabajo a las tablas del Select. Estos se utilizan por
facilidad en el manejo de la instruccin. La misma consulta anterior:
SELECT d.*
FROM personas p, dependientes d
WHERE primer_apellido = 'Betancur'
AND sexo = 'M'
AND d.cedula = p.cedula
Resultado/
Cedula
Nombre_Dep
Sexo FechaN
Parentesco
78900456
Juanita
12-Abr-95
Hija
78900456
Oscar
15-Ene-89
Hijo
Resultado/
PENDIENTE
i. Operacin Select con anidamientos. La clausula WHERE comunmente compara los
campos con valores exactos, pero tambin es probable utilizarla comparando sus campos
con otras sentencias Select. Esta forma tambin es llamada Consulta anidada:
i.1 Mostrar los diferentes proyectos en donde el ingeniero OCHOA participa:
SELECT distinct numero_proy
FROM proyectos
WHERE numero_proy IN (select numero_proy
from proyectos p, departamentos d, personas
where p.codigo_dep = d.codigo_dep
and primer_apellido = 'Ochoa')
i.2 Mostrar los empleados cuyo jefe es de apellidos BETANCUR BERMUDEZ:
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 utilizacin de la clusula ALL:
SELECT nombre, primer_apellido, segundo_apellido
FROM personas
WHERE salario > ALL (select salario
from personas
where cod_dep = 3)
k.1 Seleccionar todos los empleados cuyo dependiente tenga la misma cedula, sexo y
nombre.
SELECT p.nombre, p.primer_apellido, p.segundo_apellido
FROM personas p
WHERE EXIST (select *
from dependiente d
where p.cedula = d.cedula
and d.sexo = p.sexo
and nombre = nombre_dep)
k.2 Seleccionar los empleados que no tienen dependientes:
SELECT p.nombre, p.primer_apellido, p.segundo_apellido
FROM personas p
WHERE NOT EXIST (select *
from dependiente d
where p.cedula = d.cedula)
l. Con la operacin de Select tambin es posible utilizar funciones agregadas para: sumar
(SUM), maximizar (MAX), minimizar (MIN) y promediar (AVG). Se pueden utilizar al
nivel de la clusula SELECT o en la clusual HAVING (que veremos posteriormente.
Ejemplo, el total pagado por la compaa, el mximo y el mnimo salario y el promedio
pagado:
SELECT sum(salario), max(salario), min(salario), avg(salario)
FROM personas
3.
Se tiene el siguiente esquema de base de datos para el manejo de informacin de un
Sistema de Transportes intermunicipales:
TERMINALES_TRANSPORTE (cod_terminal, nombre, ciudad, estado)
VIAJES(nmero, transportadora, das)
TARIFAS(num_viaje, cod_tarifa, monto, restricciones)
TRAYECTO_VIAJE(num_viaje, num_trayecto, cod_terminal_sale,
hora_salida_programada, cod_terminal_llega, hora_llegada_programada)
VIAJES_REALIZADOS(num_viaje, num_trayecto, fecha, num_asientos_disponibles,
id_transporte, cod_terminal_sale, hora_salida, cod_terminal_llega, hora_llegada)
VIAJES_AUTORIZADOS(tipo_transporte, cod_terminal)
TRANSPORTE(id_transporte, total_de_asientos, tipo_transporte)
RESERVA_ASIENTOS(num_viaje, num_trayecto, fecha, num_asiento, nombre_cliente,
tel_cliente)
El anterior esquema describe una base de datos con informacin sobre viajes de lneas
areas. Cada VIAJE se identifica con un nmero de viaje, y consta de uno o ms
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
1. Prepare una lista con los nmeros de viaje y los das de todos los viajes o trayectos de
viaje que salen del terminal codigo CA001 y llegan al terminal cdigo BO001.
Solucin 1:
SELECT num_viaje, num_trayecto,fecha
FROM viajes_realizados
WHERE cod_terminal_sale = 'CA001'
AND cod_terminal_llega = 'BO001';
Solucin 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 nmeros de viaje, cdigos de terminal de salida, horas de salida
programadas, cdigos de terminal de llegada, horas de llegada programadas y das de todos
los viajes o trayectos de viajes que salgan de algn terminal de la ciudad de Santa Marta y
lleguen a algn terminal de la ciudad de Buenaventura.
Solucin 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);
Solucin 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
3. Liste las diferentes tarifas que se aplicaron a los viajes que se realizaron entre los
terminales de Santa Marta y Medelln, en el ao 1999.
Solucin 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 = 'Medelln' AND cod_terminal_llega = cod_terminal)
AND fecha between '01/01/00' and '31/12/99'
AND ta.num_viaje = vr.num_viaje;
Solucin 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 = 'Medelln')
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 trfico en un da (haga el ejemplo con cualquier
fecha).
CREATE TABLE tmp (term varchar2(5), total number(10));
INSERT INTO tmp (term, total)
SELECT cod_terminal, count(*)
FROM terminales_transporte, viajes_realizados
WHERE fecha = '21/10/00'
AND cod_terminal_sale = cod_terminal
OR cod_terminal_llega = cod_terminal
GROUP BY cod_terminal;
SELECT term, MAX(total)
FROM tmp
GROUP BY term;
5. Muestre los viajes con los correspondientes transportes, que tuvieron ms de 50 pasajero
con reservas.
____________________________________________________
Hay otros tipos de datos tales como: LONG, RAW, LONG RAW y otros.
"CONSTRAINT"
Sirven para especificar condiciones sobre los campos, tales
como especificar los "primary key", los "foreign key" o requisitos
de validacin.
A cada constraint se le identtifica con un nombre, ese nombre
debe ser alusivo a su funcin o propsito.
etc. );
camp3 varchar2(20),
camp4 number)5),
CONSTRAINT keytabla2 PRIMARY KEY(camp1,camp2)
CONSTRAINT foreignkeytabla1 FOREIGN KEYcamp4
REFERENCES tabla1(campo1)
);
Para ms informacin leer el Captulo 16 del libro de texto (Koch &
Loney).
DROP TABLE
Esta instruccin nos permite eliminar la estructura de la tabla al igual
que los datos que hayan.
campo2
varchar2(5),
);
y queremos cambiar el campo2 por 'xyzwv' lo podemos hacer con:
UPDATE tabla1
SET campo2 = 'xyzwv'
WHERE campo1 = 1234567;
DELETE
Esta instruccin nos permite eliminar rcords de una tabla ya creada
y ya poblada.
Por ejemplo si tenemos la tabla TABLA1 creada de la forma siguiente:
CREATE TABLE tabla1 (
campo1 number(7) PRIMARY KEY,
campo2 varchar2(5),
);
y queremos eliminar el rcord con "primary key" igual 12345, esto lo
podemos hacer con:
DELETE FROM tabla1
WHERE campo1 = 1234567;
COMMIT;
Esta instruccin nos permite confirmar una operacin de "insert",
"update" o "delete" en una tabla.
Si se realiza una de esas operaciones y no se hace inmediatamente un
COMMIT ese cambio no se hace en la base de datos, claro est se
hace un COMMIT implcito si usted sale de la cuenta (con exit o quit) o
hace un create table, create view, drop table, drop view, grant, revoke,
connect, disconnect, alter, audit o noaudit.
ROLLBACK;
Esta instruccin nos permite eliminar una operacin de "insert",
"update" o "delete" en una tabla si no se ha hecho un COMMIT.
GROUP BY title
HAVING COUNT(title) >2;
Este ejemplo muestar los puestos (title) contando cuntas personas
estn en los diferentes puestos, esto ltimo lo hace la clasula GROUP
BY. Adems solo se expondrn los puestos donde hay ms de dos
personas con ese puesto, esto lo controla la clasula HAVING
COUNT(title) >2.
OPERACIONES
La operacin concatenar quiere decir unir dos cadenas de caracteres. Aqu
se usan los smbolos || para indicar la concatenacin.
Ejemplos:
SELECT last_name||first_name
FROM s_emp;
En este ejemplo se produce una columna pegando el apellido al nombre. (no
deja espacio en blanco entre ambos, por ejemplo mostrara el nombre as :
RiveraJos )
SELECT last_name||','||first_name
FROM s_emp;
En este ejemplo se produce una columna con el apellido y el nombre.
(separndolos por coma, por ejemplo mostrara el nombre as :
Rivera,Jos )
SELECT last_name||' '||first_name
FROM s_emp;
En este ejemplo se produce una columna con el apellido y el nombre.
(separndolos con un espacio en blanco, por ejemplo mostrara el nombre
as : Rivera Jos )
FUNCIONES
SELECT LOWER(last_name)
FROM s_emp;
Aqu se presentan los apellidos en letras minsculas.
3
6
7
FUNCIONES
Hay una gran variedad de funciones con fechas. A continuacin veremos un
ejemplo donde le aadimos 6 meses a la fecha en que el empleado comenz:
SELECT last_name "Apellido", first_name "Nombre",
start_date "Fecha de inicio",
ADD_MONTHS(start_date,6) "Fecha de evaluacin"
FROM s_emp;
Veamos otro ejemplo:
SELECT last_name, first_name,
MONTHS_BETWEEN(SYSDATE, start_date) MONTHS
FROM s_emp;
El Captulo 7 del texto presenta muchos ejemplos de como se pueden
combinar funciones y/o operaciones, inclusive combinando con funciones
aritmticas tales como ROUNd y TRUNC .
Creacin de Views
DEFINICION
Un view es una tabla "virtual" que podemos disear para que los usuarios
puedan hacer consultas. OJO: la creaci2n de un view no crea una tabla
fsicamente en la base de datos ni en el sistema.
VENTAJAS
1. Seguridad - restringe al ususario de stos los datos que pueden ver.
2. Conveniencia - una consulta compleja se puede obtener de forma sencilla
seleccionando datos del view.
SINTAXIS
CREATE VIEW nombre
AS query
WITH CHECK OPTION (constraint);
EJEMPLOS
1-
2-
UPDATE emp45
SET dept_id = 10
WHERE id = 10;