Practica Final Base de Datos

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 16

Practica

Final
1. Cree las tablas adicionales que se utilizan en esta sección ejecutando las
siguientes sentencias:

CREATE TABLE emp

AS select * FROM employees;

CREATE TABLE dept

AS select * FROM departments;

2. Cree un informe que muestre el nombre de restricción, el tipo, el nombre de


columna y la posición de columna de todas las restricciones de la tabla
JOB_HISTORY, además de las restricciones no nulas.

CREATE TABLE my_temp_table AS (SELECT cons.constraint_name,


cons.constraint_type, cols.column_name, cols.position,
TO_LOB(cons.search_condition) search_condition
FROM user_constraints cons

INNER JOIN user_cons_columns cols

ON cons.constraint_name = cols.constraint_name
WHERE cons.table_name = 'JOB_HISTORY' );

SELECT * FROM my_temp_table WHERE NOT ( constraint_type = 'C' AND


column_name in (SELECT column_name FROM user_tab_columns WHERE table_name
= UPPER('job_history') AND nullable = 'N')

AND DBMS_LOB.COMPARE(search_condition, CONCAT('"', CONCAT(column_name,


'" IS NOT NULL'))) = 0);

3. Cree una restricción de clave primaria en la columna employee_id de la tabla


emp, Cree una clave primaria en la columna department_id de la tabla dept.

ALTER TABLE emp ADD CONSTRAINT emp_employee_id_pk PRIMARY KEY

(employee_id); ALTER TABLE dept ADD CONSTRAINT dept_department_id_pk PRIMARY

KEY (department_id);
4. Agregue una restricción ajena entre DEPT y EMP, de modo que solo se puedan
introducir departamentos válidos en la tabla EMP. Asegúrese de que puede
suprimir cualquier fila de la tabla DEPT y de que se suprimen las filas a las que
se hace referencia en la tabla EMP.

ALTER TABLE emp ADD CONSTRAINT emp_dept_department_id_fk

FOREIGN KEY (department_id)

REFERENCES dept (department_id) ON DELETE CASCADE;

5. Pruebe la restricción de clave ajena que acaba de crear


SELECT COUNT(*) FROM emp;

DELETE FROM dept WHERE department_id = 10;

6. Genere un informe que devuelva el apellido, el salario, el número de


departamento y el salario medio de todos los departamentos en los que el salario
es mayor que el salario medio.
WITH avg_sal_by_dept AS

(SELECT NVL(department_id, -1) dpt_id, AVG(NVL(salary,0))

avg_sal FROM employees

GROUP BY NVL(department_id, -1))

SELECT emp.last_name "last name",

TO_CHAR(ROUND(emp.salary,2),'$999999.99') "salary", CASE WHEN

avgqry.dpt_id = -1 THEN NULL ELSE avgqry.dpt_id END


7. Cree una vista denominada V2 que devuelva el salario más alto, el salario
más bajo, el salario medio y el nombre del departamento

CREATE OR REPLACE VIEW v2 ("highest salary", "lowest salary",

"average salary", "Department Name") AS

SELECT

TO_CHAR(ROUND(MAX(NVL(emp.salary,0)),2),'$99999

9.99'),

TO_CHAR(ROUND(MIN(NVL(emp.salary,0)),2),'$999999

.99'),

TO_CHAR(ROUND(AVG(NVL(emp.salary,0)),2),'$999999.99'),

dpt.department_name FROM departments dpt LEFT OUTER JOIN employees

emp ON dpt.department_id = emp.department_id

GROUP BY (dpt.department_id,

dpt.department_name); SELECT * FROM v2;

8. Cree una vista denominada Dept_Managers_view que devuelva una lista de


nombres de departamento junto con las iniciales y el apellido del jefe para dicho
departamento.
CREATE OR REPLACE VIEW dept_managers_view AS

SELECT DISTINCT SUBSTR(NVL(mgr.first_name, '_'),1,

1) || SUBSTR(mgr.last_name,1, 1) initials,

mgr.last_name MGR_name, dpt.department_name

FROM

employees mgr INNER JOIN employees emp ON

mgr.employee_id = emp.manager_id

LEFT OUTER JOIN departments dpt ON mgr.department_id =

dpt.department_id; SELECT * FROM Dept_Managers_view ;


9. La siguiente sentencia contiene errores.

CREATE VIEW V3 AS

SELECT *

FROM employees

SELECT *

FROM V3;

DROP view v3
10. Cree una secuencia denominada ct_seq con todos los valores por defecto.

CREATE SEQUENCE ct_seq ;


11. Observe la sentencia INSERT y corrija el error.

INSERT INTO emp

(employee_id, first_name, last_name, email, phone_number,

hire_date, job_id, salary, commission_pct, manager_id,

department_id) VALUES

(ct_seq.NEXTVAL, 'Kaare', 'Hansen', 'KHANSEN', '44965 832123',

sysdate, 'SA_REP', 6500, null, 100, 20);

12. Corrija el error en la sentencia SQL para crear el índice como se muestra en
la captura de pantalla.

SELECT * FROM all_tables WHERE REGEXP_LIKE(table_name, '(PRIV)');

13. Escriba la sentencia SQL para mostrar todas las tablas de usuario que
contienen el nombre PRIV.
SELECT * FROM all_tables WHERE REGEXP_LIKE(table_name, '(PRIV)');

14. Conceda acceso de selección a público en la tabla EMP y verifique que se ha


otorgado mediante la ejecución esta consulta. La consulta contiene errores que
debe corregir antes de poder ejecutar la sentencia SELECT.

SELECT *

FROM user_tab_privs

WHERE table_name =

'EMP
15. Mediante las uniones propiedad de Oracle, construya una instrucción que
devuelva todos los employee_id unidos a todos los department_names.

SELECT em.employee_id,

dp.department_name FROM employees

em, departments dp;

16. Vuelva a utilizar las Uniones Oracle para corregir la sentencia anterior
de modo que devuelva solo el nombre del departamento en el que está
trabajando el empleado actualmente.
SELECT em.employee_id, dp.department_name "department

name"

FROM employees em, departments dp

WHERE em.department_id =

dp.department_id

17. Vuelva a utilizar las Uniones Oracle para crear una consulta que muestre el
apellido de los empleados, el nombre de departamento, el salario y el nombre del
país de todos los empleados.

SELECT em.last_name "last name", dp.department_name "department

name",em.salary, con.country_name "country name"

FROM employees em, departments dp, locations loc,

countries con WHERE em.department_id =

dp.department_id

AND

dp.location_id =

loc.location_id(+) AND

loc.country_id = con.country_id(+)
18. Vuelva a utilizar la sintaxis de unión de Oracle para modificar la consulta
anterior de modo que incluya también incluye el registro de empleado del empleado
sin department_id, 'Grant'.

SELECT em.last_name "last name", dp.department_name

"department name",em.salary, con.country_name "country

name"

FROM employees em, departments dp, locations loc,

countries con WHERE em.department_id =

dp.department_id(+)

AND

dp.location_id =

loc.location_id(+) AND

loc.country_id = con.country_id(+);

También podría gustarte