Post on 11-Jul-2015
5/11/2018 SQL-Ejercicios Modulo2 - V2 - slidepdf.com
http://slidepdf.com/reader/full/sql-ejercicios-modulo2-v2 1/11
SQL (Structured Query Language)Las operaciones sobre la base de datos están determinadas por el Lenguaje SQL, bajo estándares determinados los cuales pueden ser utilizadas deforma básica o avanzada según el DBMS utilizado.
• SELECT
• Operaciones Adicionales 1• Operaciones Adicionales 2• Operaciones Adicionales 3• Operaciones Adicionales 4
• Operaciones Adicionales 5• Operaciones Adicionales 6
• Tutorial Sql (.pdf)• EJERCICIOS
Las operaciones SQL correspondientes al SELECT se realizarán con el siguente ejempo:
PERSONAS
Cedula Nombre Primer_Apellido Segundo_Apellido Sexo Dirección Telefono Salario Cedula_Sup Cod_dep
71134534 Juan Mesa Uribe M Cra 25 22-1 2567532 1,600,000 23423445 3
23423445 Ana María Betancur Bermudez FCra 45 11-
133433444 1,700,000 43890231 2
12453535 Gloria Betancur Garces F Tr. 12 43-5 2756533 1,350,000 71134534 3
75556743 Pedro Ochoa Pelaez MCll.6ta 14-45
2686885 1,700,000 43890231 1
43533322 Patricia Angel Guzmán F Cll. 45 23-1 2674563 1,350,000 71134534 3
78900456 Carlos Betancur Agudelo M Cir. 5 12-5 4445775 1,500,000 75556743 1
5/11/2018 SQL-Ejercicios Modulo2 - V2 - slidepdf.com
http://slidepdf.com/reader/full/sql-ejercicios-modulo2-v2 2/11
73456789 Mario Gómez Angel M Cr. 53 23-1 3456789 1,200,000 23423445 2
43890231 Claudia Gonzalez Beltran F Cll. 10 14-1 2660356 1,800,000 43890231 0
78900700 Fabio Solano Pérez M Tr. 3 32-1 4345678 1,200,000 75556743 1
DEPENDIENTES
Cedula Nombre_Dep Sexo FechaN Parentesco
78900456 Juanita F 12-Abr-95 Hija
78900456 Oscar M 15-Ene-89 Hijo
23423445 Hector M 23-Dic-67 Cónyuge
71134534 María F 05-Mar-60 Cónyuge
71134534 Gloria F 27-Nov-97 Hija
75556734 Jorge M 14-Mar-96 Hijo
DEPARTAMENTOS
Codigo_Dep Nombre_Dep Cedula_Jefe
0 Gerencia 43890231
1 Teleinformatica 75556734
2 Desarrollo 23423445
3 Soporte Técnico 71134534
PROYECTOS
Numero_Proy Nombre Lugar Codigo_Dep
129001 Registro y Matrícula Bloque 21 2
139001 Red Lan Bloque 14 1
139002 Instalación nuevo Switche Bloque 21 1
5/11/2018 SQL-Ejercicios Modulo2 - V2 - slidepdf.com
http://slidepdf.com/reader/full/sql-ejercicios-modulo2-v2 3/11
129002 Notas Campus 2
129003 Paso de aplicativos FOXPRO A COBOL Bloque 21 2
149001 Inventario de HW y SW Minas 3
149002 Licenciamiento Campus 3
149003 Evaluación de equipos PC's Bloque 18 3
1. OPERACIÓN SELECT
La sintaxis básica de esta operación es:
SELECT <lista de atributos>FROM <lista de tablas>
WHERE <condiciones>
Ejemplos:
a. Select básico. Se desea obtener la cédula y el nombre de todas las personas que trabajan en la compañía.
SELECT cedula, nombreFROM personas
Similar la operación el álgebra relacional sería:
π cedula, nombre (PERSONAS)
Resultado/
Cedula Nombre
71134534 Juan
23423445 Ana María
12453535 Gloria
5/11/2018 SQL-Ejercicios Modulo2 - V2 - slidepdf.com
http://slidepdf.com/reader/full/sql-ejercicios-modulo2-v2 4/11
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,telefonoFROM personas
WHERE cedula = 12453535
Similar la operación el álgebra relacional sería:
π nombre, primer_apellido, segundo_apellido, direccion, telefono (σ cedula = 1245353 (PERSONAS) )
Resultado/
Nombre Primer_Apellido Segundo_Apellido Dirección Telefono
Gloria Betancur Garces Tr. 12 43-5 2756533
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 personasWHERE primer_apellido = 'Betancur'
AND sexo = 'M'
Resultado/
Cedula Nombre
78900456 Carlos
5/11/2018 SQL-Ejercicios Modulo2 - V2 - slidepdf.com
http://slidepdf.com/reader/full/sql-ejercicios-modulo2-v2 5/11
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 lacual se desea extraer la información:
SELECT dependientes.*
FROM personas, dependientes
WHERE primer_apellido = 'Betancur'
AND sexo = 'M'AND dependiente.cedula = personas.cedula
Resultado/
Cedula Nombre_Dep Sexo FechaN Parentesco
78900456 Juanita F 12-Abr-95 Hija
78900456 Oscar M 15-Ene-89 Hijo
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 consultaanterior:
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 F 12-Abr-95 Hija
78900456 Oscar M 15-Ene-89 Hijo
f . Cuando se necesita extraer información distintiva dentro de un grupo de tuplas, se utiliza la clausula DISTINCT. Por ejemplo, se necesita extraer los diferentes valores de salarios que se pagan en la compañía:
5/11/2018 SQL-Ejercicios Modulo2 - V2 - slidepdf.com
http://slidepdf.com/reader/full/sql-ejercicios-modulo2-v2 6/11
SELECT distinct salario
FROM personas
Resultado/
Salario
1,600,0001,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:
g.1 Mostrar el total de empleados en la compañía:
SELECT count(*)
FROM personas
Resultado/
9
g.2 Mostrar el total de proyectos que tiene asignada la dependencia 3
SELECT count(*)
FROM proyectos
WHERE codigo_dep = 3
Resultado/
3
5/11/2018 SQL-Ejercicios Modulo2 - V2 - slidepdf.com
http://slidepdf.com/reader/full/sql-ejercicios-modulo2-v2 7/11
g.3 Mostrar cuántos salarios diferentes o distintas se pagan en la compañía:
SELECT count(distinct salario)
FROM personas
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.
h.1 Forma básica:
SELECT personas.*
FROM personas, proyectosWHERE (numero_proy = 139001 OR numero_proy =139002)
AND cod_dep = codigo_dep
h.2 Forma con IN:
SELECT personas.*FROM personas, proyectos
WHERE numero_proy IN (139001,139002)AND cod_dep = codigo_dep
Resultado/PENDIENTE
i. Operación Select con anidamientos. La clausula WHERE comunmente compara los campos con valores exactos, pero también es probableutilizarla comparando sus campos con otras sentencias Select. Esta forma también es llamada Consulta anidada:
i.1 Mostrar los diferentes proyectos en donde el ingeniero OCHOA participa:
SELECT distinct numero_proyFROM proyectos
5/11/2018 SQL-Ejercicios Modulo2 - V2 - slidepdf.com
http://slidepdf.com/reader/full/sql-ejercicios-modulo2-v2 8/11
WHERE numero_proy IN (select numero_proy
from proyectos p, departamentos d, personaswhere 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 cedulafrom 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 lacláusula ALL:
SELECT nombre, primer_apellido, segundo_apellidoFROM personas
WHERE salario > ALL (select salariofrom personas
where cod_dep = 3)
j. En el select es posible validar la existencia de información nula a través de la cláusula NULL. Ejemplo, Mostrar los empleados que no tenganasignado salario:
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.
5/11/2018 SQL-Ejercicios Modulo2 - V2 - slidepdf.com
http://slidepdf.com/reader/full/sql-ejercicios-modulo2-v2 9/11
SELECT p.nombre, p.primer_apellido, p.segundo_apellido
FROM personas pWHERE EXIST (select *
from dependiente dwhere p.cedula = d.cedula
and d.sexo = p.sexoand nombre = nombre_dep)
k.2 Seleccionar los empleados que no tienen dependientes:
SELECT p.nombre, p.primer_apellido, p.segundo_apellido
FROM personas pWHERE NOT EXIST (select *
from dependiente dwhere p.cedula = d.cedula)
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 lacompañía, el máximo y el mínimo salario y el promedio pagado:
SELECT sum(salario), max(salario), min(salario), avg(salario)FROM personas
m. Agrupación de tuplas y aplicación de condiciones para ellas. Aquí se utilizan dos cláusulas nuevas: GROUP BY, la cual agrupa tuplas según las
columnas puestas en la cláusula Select; HAVING, permite hacer operaciones sobre estas agrupaciones. Veamos:
m.1 Mostrar el número y el nombre del proyecto en donde trabajen más de dos empleados
SELECT nombre, numero_proy
FROM proyectos, trabaja_en
WHERE numero_proy = numpGROUP BY nombre, numero_proy
HAVING count(*) > 1
5/11/2018 SQL-Ejercicios Modulo2 - V2 - slidepdf.com
http://slidepdf.com/reader/full/sql-ejercicios-modulo2-v2 10/11
n. La cláusula WHERE además de las anteriores instrucciones también puede utilizar la instrucción LIKE, que le sirve para encontrar información
string no precisa. Veamos el siguiente ejemplo:
SELECT nombre, numero_proy
FROM proyectos
WHERE nombre LIKE '%lic%'
o. En la cláusula Select también es posible realizar operaciones aritméticas '+', '-', '*', con los campos de valor:
SELECT salario*1.18FROM 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 personasORDER BY nombre, primer_apellido, segundo_apellido
2. EJERCICIOS CON LA CLAUSULA SELECT
Se tiene el siguiente esquema de base de datos para el manejo de información de un Sistema de Transportes intermunicipales:
TERMINALES_TRANSPORTE (cod_terminal, nombre, ciudad, estado)
VIAJES(número, transportadora, días)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)
5/11/2018 SQL-Ejercicios Modulo2 - V2 - slidepdf.com
http://slidepdf.com/reader/full/sql-ejercicios-modulo2-v2 11/11
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 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 cadamovimiento de trayecto, se mantiene RESERVA_ASIENTOS, el transporte empleado en el trayecto y las horas de salida y llegada y los terminalesespecí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.
Especifique las siguientes consultas:
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 alterminal código ‘BO001.
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 dellegada 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.
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.
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.