Sei sulla pagina 1di 9

Bases de Datos

Práctico de Laboratorio Nº3

A) UTILIZANDO FUNCIONES:

1.- Escriba una consulta SQL que despliegue la fecha actual. Nombre esa columna como
FECHA. Ejecute su consulta.

SELECT sysdate AS "FECHA"


FROM dual;

2.- Escriba una consulta que por cada empleado despliegue su código, apellido, salario y salario
incrementado en un 15% expresado como un número entero. Nombre esta última columna como
NUEVO SALARIO. Ejecute su consulta.

SELECT empleado_id,apellido,salario,(salario+salario*0.15) AS "nuevo salario"


FROM empleados;

EMPLEADO_ID APELLIDO SALARIO NUEVO SALARIO


----------- ------------------------- ---------- -------------
100 King 24000 27600
101 Kochhar 17000 19550
................
205 Higgins 12000 13800
206 Gietz 8300 9545
20 filas seleccionadas
3.- Modifique su consulta del problema anterior y agregue una columna que muestre la resta entre
el nuevo salario y el antiguo y llámela DIFERENCIA. Ejecute su consulta.

SELECT empleado_id,apellido,salario,(salario+salario*0.15) AS "nuevo


salario",((salario+salario*0.15)-salario) AS "diferencia"
FROM empleados;

EMPLEADO_ID APELLIDO SALARIO NUEVO SALARIO DIFERENCIA


----------- ------------------------- ---------- ------------- ----------
100 King 24000 27600 3600
101 Kochhar 17000 19550 2550
……………………
205 Higgins 12000 13800 1800
206 Gietz 8300 9545 1245

4.- Escriba una consulta que despliegue el nombre de cada empleado con la primera letra en
mayúscula y todas las otras en minúscula y el largo de su nombre para todos los empleados
cuyo nombre comience con la letra J, M o A. Póngale a cada columna un nombre apropiado y
ordene esta consulta por el nombre de empleado. Ejecute su consulta.

SELECT INITCAP(nombre)AS "NOMBRE EMPLEADO",LENGTH(nombre) AS


"LARGO NOMBRE"
FROM empleados
WHERE nombre like 'A%' OR nombre like 'M%' OR nombre like 'J%';

Nombre Empleado Largo Nombre


-------------------- ------------
Alexander 9
Jennifer 8
Jonathon 8
Michael 7

5.- Escriba una consulta que por cada empleado despliegue el apellido y calcule el número de
meses entre hoy y la fecha en que el ingresó. Llame a esta última columna como MESES
TRABAJADOS. Ordene esta consulta por el número de meses trabajados. Redondee el número
de meses en un número entero. Ejecute su consulta.
Nota : Con sysdate 25/03/04

SELECT apellido,round(MONTHS_BETWEEN('25/03/04',fecha_ing))AS"meses
trabajados"
FROM empleados
ORDER BY "meses trabajados" desc;

APELLIDO Meses Trabajados


------------------------- ----------------
King 201.27348
Kochhar 174.14445
………………..
Higgins 117.59606
Gietz 117.59606
20 filas seleccionadas
6.- Escriba una consulta ( usando la función CONCAT) que produzca la siguiente salida para
cada empleado: <apellido> gana <salario> mensualmente, pero desearía ganar < 3 veces su
salario>. Llame a esta columna como Salario Soñado. Ejecute su consulta.

SELECT CONCAT(apellido,CONCAT(' gana ',CONCAT(salario,CONCAT('


mensualmente, pero desearía ganar ',salario*3))))
FROM empleados;

Salario Soñado
-----------------------------------------------------------------
King gana 24000 mensualmente, pero desearía ganar 72000
Kochhar gana 17000 mensualmente, pero desearía ganar 51000
.............................
Higgins gana 12000 mensualmente, pero desearía ganar 36000
Gietz gana 8300 mensualmente, pero desearía ganar 24900
20 filas seleccionadas

7.- Escriba una consulta que despliegue el apellido y salario de todos los empleados. El formato
del salario es de largo 15 y debe justificarlo a la izquierda con el signo ‘$’. Nombre a esta última
columna como SALARIO. Ejecute su consulta.

SELECT apellido, LPAD(salario,15,'$') "salario"


FROM empleados;

APELLIDO SALARIO
------------------------- ---------------
King SSSSSSSSSS24000
Kochhar SSSSSSSSSS17000
………………
Higgins SSSSSSSSSS12000
Gietz SSSSSSSSSSS8300
20 filas seleccionadas
8.- Escriba una consulta SQL que despliegue para cada empleado, su apellido, nombre, fecha de
ingreso y los años y meses de servicio. Ponga nombres apropiados a cada columna. Ejecute su
consulta.
NOTA : Con sysdate 25/08/03

APELLIDO NOMBRE FECHA_IN Años Trabajados Meses Trabajados


------------------------- -------------------- -------- --------------- -----------------
King Steven 17/06/87 16,2013678 194,274169
Kochhar Neena 21/09/89 13,9356144 167,145137
……………
Higgins Shelley 07/06/94 9,22328561 110,59675
Gietz William 07/06/94 9,22328561 110,59675
20 filas seleccionadas
B) USANDO FUNCIONES DE CONVERSIÓN DE TIPOS DE DATOS

9.- Construya una Consulta SQL que para cada empleado despliegue su apellido, fecha de ingreso
y la fecha en que se revisó su salario que es el primer lunes después de 6 meses de servicio.
Nombre esta columna como REVISIÓN. El formato de salida de la fecha debe ser similar a
“Lunes, 01 de Septiembre de 2003”.

SELECT apellido,fecha_ing,
TO_CHAR(NEXT_DAY(ADD_MONTHS(fecha_ing,6),'LUNES'), 'DAY ", " DD "DE"
MONTH"," YYYY') AS "REVISION"
FROM empleados;

APELLIDO FECHA_IN REVISION


------------------------- -------- ---------------------------------------
King 17/06/87 lunes , 21 de diciembre de 1987
Kochhar 21/09/89 lunes , 26 de marzo de 1990
...........................
Higgins 07/06/94 lunes , 12 de diciembre de 1994
Gietz 07/06/94 lunes , 12 de diciembre de 1994
20 filas seleccionadas
10.- Escriba una consulta SQL que despliegue el apellido, fecha de ingreso y el día de la semana
en que el empleado empezó a trabajar. Nombre esta columna como DIA.

SELECT apellido, fecha_ing, TO_CHAR(fecha_ing,'DAY') "DIA"


from EMPLEADOS;

APELLIDO FECHA_IN DIA


------------------------- -------- ---------
King 1 7/06/87 miércoles
Kochhar 21/09/89 jueves
.....................
Higgins 07/06/94 martes
Gietz 07/06/94 martes
20 filas seleccionadas

11.- Escriba una consulta SQL que despliegue el apellido, y comisión para todos los empleados,
use alias para esta última columna. Si un empleado no gana comisión ponga SIN COMISIÓN.

SELECT apellido, NVL2(comision_porc,TO_CHAR(comision_porc), 'SIN COMISION')


"COMISION"
from EMPLEADOS;

APELLIDO COMISIÓN
------------------------- -----------------
King Sin comisión
Kochhar Sin comisión
...................
Zlotkey ,2
Abel ,3
Taylor ,2
Grant ,15
.....................
Higgins Sin comisión
Gietz Sin comisión
20 filas seleccionadas
12.- Use la función DECODE para escribir una consulta que despliegue para todos sus empleados
su apellido, cargo_id y grado considerando la siguiente tabla.

CARGO_ID GRADO
AD_PRES A
ST_MAN B
IT_PROG C
SA_REP D
ST_CLERK E
Ninguno de los anteriores 0

SELECT APELLIDO, CARGO_ID,DECODE (CARGO_ID, 'AD_PRES','A',


'ST_MAN', 'B', 'IT_PROG','C', 'SA_REP','D', 'ST_CLERK','E', '0') AS "GRADO"
from EMPLEADOS;

APELLIDO CARGO_ID G
------------------------- ---------- -
King AD_PRES A
Kochhar AD_VP 0
De Haan AD_VP 0
Hunold IT_PROG C
……………….
Mourgos ST_MAN B
Rajs ST_CLERK E
Davies ST_CLERK E
…………….
Abel SA_REP D
Taylor SA_REP D
………………………
Higgins AC_MGR 0
Gietz AC_ACCOUNT 0
20 filas seleccionadas
13.- Resuelva el problema anterior, usando la expresión CASE.
SELECT APELLIDO, CARGO_ID,
CASE CARGO_ID
WHEN 'AD_PRES' THEN 'A'
WHEN 'ST_MAN' THEN 'B'
WHEN 'IT_PROG' THEN 'C'
WHEN 'SA_REP' THEN 'D'
WHEN 'ST_CLERK' THEN 'E'
ELSE '0'
END "GRADO"
FROM EMPLEADOS;

Potrebbero piacerti anche