Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Prcticas y Soluciones
Tabla de Contenido
Prcticas para la Leccin I ........................................................................................................ 3
Prctica I-1: Introduccin ............................................................................................... 4
Soluciones a la Prctica I-1: Introduccin ...................................................................... 5
Prcticas de la Leccin 1......................................................................................................... 11
Prctica 1-1: Recuperacin de Datos mediante la Sentencia SQL SELECT ................ 12
Soluciones a la Prctica 1-1: Recuperacin de Datos mediante la Sentencia SQL
SELECT ........................................................................................................................ 16
Prcticas de la Leccin 2......................................................................................................... 19
Prctica 2-1: Restriccin y Ordenacin de Datos ......................................................... 20
Soluciones a la Prctica 2-1: Restriccin y Ordenacin de Datos ................................ 24
Prcticas de la Leccin 3......................................................................................................... 27
Prctica 3-1: Uso de Funciones de Una Sola Fila para Personalizar la Salida ............. 28
Soluciones a la Prctica 3-1: Uso de Funciones de Una Sola Fila para
Personalizar la Salida .................................................................................................... 32
Prcticas de la Leccin 4......................................................................................................... 35
Prctica 4-1: Uso de Funciones de Conversin y Expresiones Condicionales ............. 36
Soluciones a la Prctica 4-1: Uso de Funciones de Conversin y Expresiones
Condicionales................................................................................................................ 39
Prcticas de la Leccin 5......................................................................................................... 41
Prctica 5-1: Informes de Datos Agregados con Funciones de Grupo ......................... 42
Soluciones a la Prctica 5-1: Informes de Datos Agregados con Funciones de
Grupo ............................................................................................................................ 45
Prcticas de la Leccin 6......................................................................................................... 48
Prctica 6-1: Visualizacin de Datos de Varias Tablas Utilizando Uniones ................ 49
Soluciones a la Prctica 6-1: Visualizacin de Datos de Varias Tablas Utilizando
Uniones ......................................................................................................................... 52
Prcticas de la Leccin 7......................................................................................................... 54
Prctica 7-1: Uso de Subconsultas para Solucionar Consultas ..................................... 55
Soluciones a la Prctica 7-1: Uso de Subconsultas para Solucionar Consultas ............ 57
Prcticas de la Leccin 8......................................................................................................... 59
Prctica 8-1: Uso de los Operadores de Definicin ...................................................... 60
Soluciones a la Prctica 8-1: Uso de los Operadores de Definicin ............................. 62
Prcticas de la Leccin 9......................................................................................................... 64
Prctica 9-1: Manipulacin de Datos ............................................................................ 65
Soluciones a la Prctica 9-1: Manipulacin de Datos................................................... 69
Prcticas de la Leccin 10....................................................................................................... 73
Prctica 10-1: Uso de Sentencias DDL para Crear y Gestionar Tablas ........................ 74
Soluciones a la Prctica 10-1: Uso de Sentencias DDL para Crear y Gestionar
Tablas ............................................................................................................................ 76
Prcticas de la Leccin 11....................................................................................................... 79
Prctica 11-1: Creacin de Otros Objetos de Esquema ................................................ 80
Soluciones a la Prctica 11-1: Creacin de Otros Objetos de Esquema ....................... 82
Prcticas del Apndice F ......................................................................................................... 84
Prctica F-1: Sintaxis de Unin en Oracle .................................................................... 85
Soluciones a las Prcticas F-1: Sintaxis de Unin en Oracle........................................ 88
En las prcticas, puede que haya ejercicios que estn precedidos por las frases Si tiene
tiempo o Si desea superarse a s mismo. Realice estos ejercicios slo si ha terminado
el resto de ejercicios en el tiempo asignado y si desea poner a prueba sus habilidades.
Nota
1) Todas las prcticas escritas utilizan Oracle SQL Developer como entorno de
desarrollo. Aunque se recomienda utilizar Oracle SQL Developer, tambin puede usar
SQL*Plus, disponible en este curso.
2) Para cualquier consulta, la secuencia de filas recuperadas de la base de datos puede
variar con respecto a la que se muestra en las capturas de pantalla.
Al crear una conexin, automticamente se abre una hoja de trabajo de SQL para
dicha conexin.
Verdadero/Falso
Verdadero/Falso
Parte 2
Tenga en cuenta los siguientes puntos antes de iniciar las prcticas:
Guarde todos los archivos de los ejercicios prcticos en la siguiente ubicacin:
/home/oracle/labs/sql1/labs
Introduzca las sentencias SQL en una hoja de trabajo de SQL. Para guardar un
script en SQL Developer, asegrese de que la hoja de trabajo de SQL necesaria
est activa y, a continuacin, en el men File, seleccione Save As para guardar la
sentencia SQL como un script lab_<lessonno>_<stepno>.sql. Cuando est
modificando un script existente, asegrese de que utiliza Save As para guardarlo
con un nombre de archivo diferente.
Para ejecutar una consulta, haga clic en el icono Execute Statement en la hoja de
trabajo de SQL. Como alternativa, puede pulsar [F9]. Para sentencias DML y
DDL, utilice el icono Run Script o pulse [F5].
Una vez ejecutada la consulta, asegrese de que no introduce la siguiente consulta
en la misma hoja de trabajo. Abra una hoja de trabajo nueva.
Se le ha contratado como programador de SQL para Acme Corporation. Su primera tarea
es crear algunos informes segn los datos de las tablas de recursos humanos.
7) El departamento de recursos humanos desea una consulta para mostrar todos los ID
de cargo nicos de la tabla EMPLOYEES.
Parte 3
Si tiene tiempo, realice los siguientes ejercicios:
8) El departamento de recursos humanos desea cabeceras de columna ms descriptivas
para su informe sobre empleados. Copie la sentencia de lab_01_05.sql en una
nueva hoja de trabajo de SQL. Asigne a las cabeceras de columna los nombres Emp
#, Employee, Job y Hire Date, respectivamente. A continuacin, vuelva a ejecutar
la consulta.
Verdadero/Falso
Verdadero/Falso
Parte 3
Si tiene tiempo, realice los siguientes ejercicios:
8) El departamento de recursos humanos desea cabeceras de columna ms descriptivas
para su informe sobre empleados. Copie la sentencia de lab_01_05.sql en una
nueva hoja de trabajo de SQL. Asigne a las cabeceras de columna los nombres Emp
#, Employee, Job y Hire Date, respectivamente. A continuacin, vuelva a ejecutar
la consulta.
SELECT employee_id "Emp #", last_name "Employee",
job_id "Job", hire_date "Hire Date"
FROM employees;
9) El departamento de recursos humanos ha solicitado un informe de todos los
empleados y sus ID de cargo. Muestre el apellido concatenado con el ID de cargo
(separado por una coma y un espacio) y asigne a la columna el nombre Employee
and Title.
SELECT last_name||', '||job_id "Employee and Title"
FROM employees;
2) Abra una hoja de trabajo de SQL nueva. Cree un informe que muestre el apellido y el
nmero de departamento para el nmero de empleado 176. Ejecute la consulta.
8) Cree un informe para mostrar el apellido y el puesto de todos los empleados que no
tienen un supervisor.
9) Cree un informe para mostrar el apellido, salario y comisin de todos los empleados que
perciben comisiones. Ordene los datos en orden descendente de salario y comisiones.
Utilice la posicin numrica de la columna en la clusula ORDER BY.
10) Los miembros del departamento de recursos humanos desean tener ms flexibilidad
con las consultas que est creando. Les gustara tener un informe que muestre el
apellido y el salario de los empleados que ganen ms de una cantidad especificada por
el usuario despus de una solicitud. Guarde esta consulta en un archivo denominado
lab_02_10.sql. Si introduce 12000 cuando se le solicite, el informe mostrar los
siguientes resultados:
13) Muestre los apellidos de los empleados que tengan una "a" y una "e" en su apellido.
Vuelva a escribir la consulta para que se le solicite al usuario que introduzca la letra
por la que empieza el apellido. Por ejemplo, si el usuario introduce "H" (en
mayscula) cuando se le solicita que introduzca una letra, la salida debe mostrar a
todos los empleados cuyos apellidos empiecen por la letra "H".
8) Cree una consulta que muestre los primeros ocho caracteres de los apellidos de los
empleados y que indique las cantidades de sus salarios con asteriscos. Cada asterisco
significa mil dlares. Ordene los datos en orden descendente de salarios. Etiquete la
columna como EMPLOYEES_AND_THEIR_SALARIES.
Vuelva a escribir la consulta para que se le solicite al usuario que introduzca la letra
por la que empieza el apellido. Por ejemplo, si el usuario introduce H (en mayscula)
cuando se le solicita que introduzca una letra, la salida debe mostrar a todos los
empleados cuyos apellidos empiecen por la letra "H".
Nota: debido a que esta consulta depende de la fecha de ejecucin, los valores de la
columna MONTHS_WORKED sern diferentes.
SELECT last_name, ROUND(MONTHS_BETWEEN(
SYSDATE, hire_date)) MONTHS_WORKED
FROM employees
ORDER BY months_worked;
5) Con la funcin DECODE, escriba una consulta que muestre el grado de todos los
empleados segn el valor de la columna JOB_ID, utilizando los siguientes datos:
Cargo Grado
AD_PRES A
ST_MAN B
IT_PROG C
SA_REP D
ST_CLERK E
None of the above 0
11) Cree una consulta de matriz para mostrar el cargo, el salario de ese cargo segn el
nmero de departamento y el salario total del cargo para los departamentos 20, 50, 80
y 90, proporcionando a cada columna una cabecera adecuada.
4) Cree un informe para mostrar el apellido y nmero de empleado junto con el apellido
y nmero de gestor del empleado. Etiquete las columnas como Employee, Emp#,
Manager y Mgr#, respectivamente. Guarde la sentencia SQL como
lab_06_04.sql. Ejecute la consulta.
5) Modifique lab_06_04.sql para mostrar todos los empleados, incluido King, que no
tienen gestor. Ordene los resultados por nmero de empleado. Guarde la sentencia
SQL como lab_06_05.sql. Ejecute la consulta en el archivo lab_06_05.sql.
6) Cree un informe del departamento de recursos humanos que muestre los apellidos y
nmeros de empleado y todos los empleados que trabajen en el mismo departamento
como un empleado determinado. Proporcione a cada columna una etiqueta adecuada.
Guarde el script en un archivo denominado lab_06_06.sql.
2) Cree un informe que muestre el nmero de empleado, apellido y salario de todos los
empleados que ganan ms del salario medio. Ordene los resultados en orden
ascendente de salario.
3) Escriba una consulta que muestre el nmero de empleado y el apellido de todos los
empleados que trabajan en un departamento con un empleado cuyo apellido contiene
una "u". Guarde la sentencia SQL en un archivo denominado lab_07_03.sql.
Ejecute la consulta.
7) Cree un informe que muestre una lista de todos los empleados cuyo salario sea mayor
que el salario de los empleados del departamento 60.
Si tiene tiempo, realice el siguiente ejercicio:
8) Modifique la consulta del archivo lab_07_03.sql para mostrar el nmero de
empleado, apellido y salario de todos los empleados que ganan ms del salario medio
y que trabajan en un departamento con cualquier empleado cuyo apellido contiene
una "u". Vuelva a guardar lab_07_03.sql como lab_07_08.sql. Ejecute la
sentencia en el archivo lab_07_08.sql.
3) Cree una lista de cargos para los departamentos 10, 50 y 20, en ese orden. Muestre los
ID de cargo y departamento mediante los operadores de definicin.
4) Cree un informe que muestre los ID de empleado y de cargo de los empleados que
actualmente tienen un puesto que es el mismo que tenan cuando fueron contratados
(es decir, han cambiado de cargo pero ahora han vuelto a su puesto original).
3) Cree una sentencia INSERT para agregar la primera fila de datos a la tabla
MY_EMPLOYEE a partir de los siguientes datos de ejemplo. No muestre la lista de
columnas en la clusula INSERT. No introduzca an todas las filas.
6) Escriba una sentencia INSERT en un archivo de script reutilizable para cargar las
filas restantes en la tabla MY_EMPLOYEE. El script se debe solicitar para todas las
columnas (ID, LAST_NAME, FIRST_NAME, USERID y SALARY). Guarde este script en
un archivo lab_09_06.sql.
7) Rellene la tabla con las dos siguientes filas de ejemplo mostradas en el paso 3
mediante la ejecucin de la sentencia INSERT en el script que ha creado.
8) Confirme las adiciones a la tabla.
3) Cree una sentencia INSERT para agregar la primera fila de datos a la tabla
MY_EMPLOYEE a partir de los siguientes datos de ejemplo. No muestre la lista de
columnas en la clusula INSERT.
6) Escriba una sentencia INSERT en un archivo de script reutilizable para cargar las
filas restantes en la tabla MY_EMPLOYEE. El script se debe solicitar para todas las
columnas (ID, LAST_NAME, FIRST_NAME, USERID y SALARY). Guarde este script en
un archivo denominado lab_09_06.sql.
INSERT INTO my_employee
VALUES (&p_id, '&p_last_name', '&p_first_name',
'&p_userid', &p_salary);
7) Rellene la tabla con las dos siguientes filas de ejemplo mostradas en el paso 3
mediante la ejecucin de la sentencia INSERT en el script que ha creado.
INSERT INTO my_employee
VALUES (&p_id, '&p_last_name', '&p_first_name',
'&p_userid', &p_salary);
8) Confirme las adiciones a la tabla.
SELECT *
FROM my_employee;
9) Convierta las adiciones de datos en permanentes.
COMMIT;
2) Rellene la tabla DEPT con datos de la tabla DEPARTMENTS. Incluya slo las columnas
que necesite.
3) Cree la tabla EMP segn el siguiente grfico de instancias de tabla. Guarde la
sentencia en un script denominado lab_10_03.sql y, a continuacin, ejecute el
script para crear la tabla. Confirme que se ha creado la tabla.
Column Name ID LAST_NAME FIRST_NAME DEPT_ID
Key Type
Nulls/Unique
FK Table DEPT
FK Column ID
Data type NUMBER VARCHAR2 VARCHAR2 NUMBER
Length 7 25 25 7
2) Rellene la tabla DEPT con datos de la tabla DEPARTMENTS. Incluya slo aquellas
columnas que necesite.
INSERT INTO dept
SELECT department_id, department_name
FROM departments;
Aparecer el mensaje de error Update operation not allowed on table. Por lo tanto,
no se le permitir insertar ninguna fila en la tabla porque se ha asignado un estado de
slo lectura.
INSERT INTO employees2
VALUES (34, 'Grant','Marcie',5678,10)
4) El departamento 50 necesita acceso a los datos de los empleados. Cree una vista con
el nombre DEPT50 que contenga los nmeros y apellidos de los empleados y los
nmeros de departamento de todos los empleados del departamento 50. Se le ha
pedido que etiquete las columnas de la vista como EMPNO, EMPLOYEE y DEPTNO. Por
motivos de seguridad, no permita la reasignacin de un empleado a otro departamento
a travs de la vista.
5) Visualice la estructura y el contenido de la vista DEPT50.
Parte 2
7) Necesita una secuencia que se pueda utilizar con la columna PRIMARY KEY de la
tabla DEPT. La secuencia debe empezar en 200 y tener un valor mximo de 1.000.
Aplique incrementos de 10 a la secuencia. Asigne a la secuencia el nombre
DEPT_ID_SEQ.
8) Para probar la secuencia, escriba un script para insertar dos filas en la tabla DEPT.
Asigne al script el nombre lab_11_08.sql. Asegrese de utilizar la secuencia que
ha creado para la columna ID. Agregue dos departamentos: Education y
Administration. Confirme las adiciones. Ejecute los comandos del script.
9) Cree un ndice no nico en la columna NAME de la tabla DEPT.
10) Cree un sinnimo para la tabla EMPLOYEES. Llmelo EMP.
SELECT *
FROM dept50;
6) Pruebe la vista. Intente reasignar Matos al departamento 80.
UPDATE dept50
SET deptno = 80
WHERE employee = 'Matos';
El error se debe a que la vista DEPT50 se ha creado con la restriccin WITH CHECK
OPTION. De esta forma, se garantiza que la columna DEPTNO de la vista est
protegida contra cambios.
8) Para probar la secuencia, escriba un script para insertar dos filas en la tabla DEPT.
Asigne al script el nombre lab_11_08.sql. Asegrese de utilizar la secuencia que
ha creado para la columna ID. Agregue dos departamentos: Education y
Administration. Confirme las adiciones. Ejecute los comandos del script.
INSERT INTO dept
VALUES (dept_id_seq.nextval, 'Education');
4) Cree un informe para mostrar el apellido y nmero de empleado junto con el apellido
y nmero de gestor de sus gestores. Etiquete las columnas como Employee, Emp#,
Manager y Mgr#, respectivamente. Guarde la sentencia SQL como lab_f_04.sql.
6) Cree un informe del departamento de recursos humanos que muestre los apellidos y
nmeros de empleado y todos los empleados que trabajen en el mismo departamento
como un empleado determinado. Proporcione a cada columna una etiqueta adecuada.
Guarde el script en un archivo denominado lab_f_06.sql.
5) Modifique lab_f_04.sql para mostrar todos los empleados, incluido King, que no
tienen gestor. Ordene los resultados por nmero de empleado. Guarde la sentencia
SQL como lab_f_05.sql. Ejecute la consulta en el archivo lab_f_05.sql.
SELECT w.last_name "Employee", w.employee_id "EMP#",
m.last_name "Manager", m.employee_id "Mgr#"
FROM employees w, employees m
WHERE w.manager_id = m.employee_id (+);