Sunteți pe pagina 1din 5

PRIMER PARCIAL DE BASE DE DATOS II

Construya el enunciado o describa el resultado (con palabras concretas) de las siguientes consultas:

1. SELECT nombre_emple FROM Empleado


WHERE nom_emple LIKE ‘_O%’ OR apellido LIKE ‘%E%E%’;

R/Obtener el número de las etapas donde el nombre de la ciudad de llegada tenga por segunda letra una “O” o
donde el nombre de la ciudad de salida lleve dos o más ‘e’s.

2. SELECT emp.nombre FROM Empleado

WHERE emp-nombre IN (SELECT emp.nombre FROM empleados


WHERE emp.nombre=‘Sebastian Suarez’)
AND emp.edad < (SELECT emp.edad FROM empleado
WHERE emp.nombre=‘ Sebastian Suarez’);

Obtener el nombre de los empleados compañeros de equipo de Sebastian Suarez


que sean más jóvenes que él

3. UPDATE EMPLEADOS
SET SALARIO_BRUTO = (SELECT SUM(SALIRO_BRUTO)
FROM NOMINAS
WHERE NOMINAS.CO_EMPLEADO = EMPLEADOS.CO_EMPLEADO)
WHERE SALARIO_BRUTO IS NULL

Actualizar los salarios de los empleados que estén en la tabla de nómina cuyo salario sea igual a la suma de los salarios y
que no tenga salario en nómina.

Realice las consultas para dar solución a los siguientes requerimientos:

4. Obtener los nombres de los puertos cuya altura es mayor que la media de altura de los puertos de 2ª categoría

SELECT nompuerto FROM Puerto


WHERE altura > (SELECT AVG(altura) FROM Puerto WHERE categoria = ‘2’ );

5. Obtener el nombre de cada equipo y la edad media de sus ciclistas con más de 25 años, de aquellos equipos con
más de 3 corredores mayores de 25 años.

SELECT nomeq, AVG(edad) WHERE edad > 25 from equipos


GROUP BY nomeq
HAVING COUNT(cod_corredores) > 3;

De acuerdo a las siguientes consulta coloque al frente cual sentencia (unión intersección minus) se usaría en el
select y explique por qué?

6. Obtener los nombres de las personas que son tanto empleados como directores de departamento.
El propósito del Comando SQL UNION ALL es también combinar los resultados de dos consultas juntas. La
diferencia entre UNION ALL y UNION es que, mientras UNION sólo selecciona valores distintos, UNION
ALLselecciona todos los valores.

Parecido al comando UNION, INTERSECT también opera en dos instrucciones SQL. La diferencia es que,
mientras UNION actúa fundamentalmente como un operador OR (O) (el valor se selecciona si aparece en la
primera o la segunda instrucción), el comando INTERSECT actúa como un operador AND (Y) (el valor se
selecciona si aparece en ambas instrucciones).

Cod_empleado departamento director


102015 ventas 102015
103045 compras 103045
104050 Recursos 102015
humanos

7. Obtener los nombres que aparecen en la tabla de empleados y no en la de departamentos.

minus" (diferencia) devuelve los registros de la primera consulta que no se encuentran en segunda consulta, es
decir, aquellos registros que no coincide

select nombre from empleados


minus
select nombre from departamentos;

8. Diga si esta consulta está bien o mal. Justifique su respuesta.

SELECT cod_ emple, nombre_empleado


FROM empleados
WHERE fecha = (SELECT MIN(salario) FROM empleados GROUP BY departamento)
9. CONTESTE FALSO O VERDADERO

( F ) Cuando decimos que las variables que usamos en PL/SQL se emplean para manipular datos almacenados en una
tabla de la base de datos. En estos casos no tendrá que ser la variable del mismo tipo que las columnas de las tablas.

( V ) Esta es la sentencia que me permite declarar el mismo tipo de dato de la columna a una variable : v_salarios
Empleado.salario%TYPE;

( F ) La cláusula HAVING no sólo puede ir en consultas agrupadas si no en la condición where también.

( F ) En la sentencia Group By sólo podrán aparecer las columnas por la cuales están agrupando o funciones agregadas

(V ) Es correcto la declaración de la siguiente variable en PL/SQL :


v_nombre VARCHAR2(50):='Laura';
constante CONSTANT NUMBER:=100;

( V ) El siguiente código es correcto cuando se va trabajar con la estructura de decisión?


IF apellido = ‘Pérez’ THEN salario:= salario *1.10;
ELSIF apellido =‘Martínez’ THEN salario:= salario *1.15;
ELSIF apellido=‘Alvarez’ THEN salario:= salario *1.20;
ELSE salario:= salario* 1.05; END IF;

TENGA EN CUENTA

IF condicion THEN
instrucciones;
ELSE
IF condicion2 THEN
instrucciones;
ELSE
IF condicion3 THEN
instrucciones;
END IF;
END IF;
END IF;

________DIFERENTE A____________________________________________________________________
IF apellido =„Pérez‟ THEN
salario:= salario *1.10; <span class="comentario">--aumento de salario en un 10%</s
pan>
ELSIF apellido =‘Martínez’ THEN
salario:= salario *1.15; <span class="comentario">--aumento de salario en un 15%</s
pan>
ELSIF apellido=‘Alvarez’ THEN
salario:= salario *1.20; <span class="comentario">--aumento de salario en un 20%</s
pan>
ELSE
salario:= salario* 1.05; <span class="comentario">--aumento de salario en un 5%</sp
an>
END IF;

10. ( F )¿El siguiente código es correcto cuando se va trabajar con la estructura del for?

FOR loop_counter IN 1..10 LOOP


DBMS_OUTPUT.PUT_LINE('Number: ' || loop_counter);
END FOR; END;

RESPUESTA ES

FOR contador IN [REVERSE] inicio..final LOOP


-- Instrucciones
END LOOP;
EVALUACION PRACTICA

1. Realice un programa en pl/sql para saber el aumento que se le va a realizar


a los empleados de acuerdo a su tiempo de trabajo, sabiendo que el cobra el
mínimo (540000). Los criterios son:

a. Si lleva más de 10 años en la empresa se le aplica un aumento del 10%.


b. Si lleva menos de 10años pero más que 5 se le aplica un aumento del 7%.
c. Si lleva menos de 5 años pero más que 3 se le aplica un aumento del 5%.
d. Si lleva menos de 3 años se le aplica un aumento del 3%.
SET serveroutput ON;
SET VERIFY OFF;
DECLARE
emple VARCHAR2(15);
tiempo NUMBER(3);
sueldo DOUBLE(10);

BEGIN
emple:='&Ingrese_nombre_empleado: ';
tiempo:='&Ingrese_el_tiempo_laborado_en_años: ';

if(tiempo<3) then
sueldo:=540000*0.03;
DBMS_OUTPUT.PUT_LINE('El trabajador ' || emple || 'por llevar ' || tiempo ||
'años trabajando gana ' || sueldo);
elsif (tiempo>3 and tiempo<5) then
sueldo:=540000*0.05;
DBMS_OUTPUT.PUT_LINE('El trabajador ' || emple || 'por llevar ' || tiempo ||
'años trabajando gana ' || sueldo);
elsif (tiempo>5 and tiempo<10) then
sueldo:=540000*0.07;
DBMS_OUTPUT.PUT_LINE('El trabajador ' || emple || 'por llevar ' || tiempo ||
'años trabajando gana ' || sueldo);
elsif(tiempo>10) then
sueldo:=540000*0.10;
DBMS_OUTPUT.PUT_LINE('El trabajador ' || emple || 'por llevar ' || tiempo ||
'años trabajando gana ' || sueldo);
else
DBMS_OUTPUT.PUT_LINE('Ta cucho');
END IF;
END

2. Realice un programa en pl/sql que pide 10 números y calcula y muestra la suma de


todos los que fueron pares.
SOLUCION 1

SET ServerOutput ON;


SET VERIFY OFF;

DECLARE

numero1 NUMBER;
numero2 NUMBER;
numero3 NUMBER;
numero4 NUMBER;
numero5 NUMBER;
numero6 NUMBER;
numero7 NUMBER;
numero8 NUMBER;
numero9 NUMBER;
numero10 NUMBER;
suma NUMBER;

BEGIN

suma:=0;
numero1 :=&num;
numero2 :=&num;
numero3 :=&num;
numero4 :=&num;
numero5 :=&num;
numero6 :=&num;
numero7 :=&num;
numero8 :=&num;
numero9 :=&num;
numero10 :=&num;

if mod(numero1,2)=0 then
suma:=suma+numero1;
end if;
if mod(numero2,2)=0 then
suma:=suma+numero2;
end if;
if mod(numero3,2)=0 then
suma:=suma+numero3;
end if;
if mod(numero4,2)=0 then
suma:=suma+numero4;
end if;
if mod(numero5,2)=0 then
suma:=suma+numero5;
end if;
if mod(numero6,2)=0 then
suma:=suma+numero6;
end if;
if mod(numero7,2)=0 then
suma:=suma+numero7;
end if;
if mod(numero8,2)=0 then
suma:=suma+numero8;
end if;
if mod(numero9,2)=0 then
suma:=suma+numero9;
end if;
if mod(numero10,2)=0 then
suma:=suma+numero10;
end if;

dbms_output.put_line('La suma es: '||suma);

END;

SOLUCION 2
SET ServerOutput ON;
SET VERIFY OFF;

DECLARE
num NUMBER;
num2 number:=0;
v_numeros number:=0;
sumapares number:=0;
num_v number:=0;

BEGIN

FOR num2 IN 1..10 LOOP


DBMS_OUTPUT.PUT_LINE('Valor: '|| num2);

if(MOD(num2,2)=1)then
DBMS_OUTPUT.PUT_LINE('');
else
sumapares:=sumapares+num2;
end if;
end loop;
DBMS_OUTPUT.PUT_LINE('la suma de los pares es: '||sumapares);

END;
/

S-ar putea să vă placă și