Вы находитесь на странице: 1из 30

Aprendiendo Practicando GCOS/Ejercicios version 1.

0, Para cualquiera sugerencia


Cuaderno Ejercicios
Ac a d e mi a C d i g o Li b r e
M a r zo 2 0 1 4 .

Documentacin realizada por:


Ing. Jos Paredes
GNU/Instructor GCOS/GCOPL/GCOA ______________________________________

Cristian Bolges
GNU/Asistente Administrativo Aprendiendo Practicando GCOS/Ejercicios version 1.0, Para cualquiera sugerencia
Cuaderno de Ejercicios GNU Certified Oracle SQL
Este cuaderno presenta a los estudiantes los fundamentos de SQL que utilizan la tecnologa de base
de datos Oracle Database 11g. En este curso los estudiantes aprenden los conceptos de bases de
datos relacionales y el potente lenguaje de programacin SQL. Este curso proporciona los
conocimientos de SQL esenciales que permiten a los desarrolladores escribir consultas en una o
varias tablas, manipular datos en tablas y crear objetos de base de datos.

Objetivos:
Recuperar datos de filas y columnas de las tablas con la sentencia SELECT
Crear informes de datos ordenados y restringidos
Mostrar datos de varias tablas.
Utilice las sentencias DML para administrar los datos.
Utilice sentencias DDL para administrar objetos de base de datos

1. Convierte a maysculas el department_name, el cual es de tipo carcter.


SQL> SELECT department_id, upper(department_name) FROM departments;
2. Convierte a minsculas los nombres de pases.
SQL> SELECT lower(country_name) FROM countries;

3. Convierte a minsculas el primer nombre, selecciona solo los que contiene la


palabra cla en minsculas en el primer nombre.

SQL> SELECT lower(first_name)


FROM employees
WHERE lower(first_name) LIKE '%cla%';
4. Se aplica la funcin initcap a las columnas country_id, country_name y region_id que es numrica.
SQL> SELECT INITCAP(country_id), INITCAP(country_name), INITCAP(region_id) FROM
countries;
5. Primero se convierte a maysculas la direccin y posteriormente se aplica initcap.
SQL> SELECT INITCAP(UPPER(street_address)) FROM locations;
Aprendiendo Practicando GCOS/Ejercicios version 1.0, Para cualquiera sugerencia

6. Primero se convierte a minsculas la direccin y posteriormente se aplica initcap.


SQL> SELECT INITCAP(LOWER(street_address)) FROM locations;
7. Concatenar dos campos anidando las funciones concat y por ultimo convertir en maysculas.
SQL> SELECT UPPER(CONCAT(CONCAT(first_name, ' '), last_name)) FROM employees;
8. Concatenar literal carcter con fecha de hoy mas 10 das.
SQL> SELECT CONCAT('La Fecha De Hoy: ', SYSDATE + 10) FROM dual;
9. Concatenar literal carcter con numero o expresin numrica.
SQL> SELECT CONCAT('LA SUMA DE 1500 + 2000 = ', 1500 + 2000) FROM dual;
10. Longitud de un campo numrico, es convertido implcitamente en carcter para medir su longitud.
SQL> SELECT employee_id, LENGTH(employee_id) FROM employees;
11. Longitud de una expresin numrico,se evalu y es convertido implcitamente en carcter para
medir su longitud.
SQL> SELECT employee_id, LENGTH(employee_id * 1000) FROM employees;
12. Longitud de un campo fecha, es convertido implcitamente en carcter para medir su longitud.
SQL> SELECT hire_date, LENGTH(hire_date + 100) FROM employees;
13. Longitud de un campo numero, se convierte implcitamente en carcter para medir su longitud.
SQL> SELECT salary, LENGTH(salary) FROM employees;
Aprendiendo Practicando GCOS/Ejercicios version 1.0, Para cualquiera sugerencia

14. En este ejemplo se muestra como se rellena con una cadena de dos caracteres siempre se
mantiene la cadena original y se rellena con la cadena de relleno de izquierda a derecha.
SQL> SELECT LPAD(min_salary,10,'ABC'), RPAD(max_salary,10,'ABC') FROM jobs;

15. Cuando se especifica una longitud menor, la funcin corta la cadena fuente,
desde el inicio hasta la longitud especificada, y no se realiza ningn de relleno, en
este ejemplo no se especifico carcter de relleno y por defecto es el espacio.

SQL> SELECT RPAD(region_id || ' - ' || region_name, 10) FROM regions;

SQL> SELECT LPAD(salary, 10, '0') lsalary, salary FROM employees


ORDER BY salary DESC;

16. Elimina los espacios en blanco de izquierda y derecha.


SQL> SELECT TRIM(' ' || first_name || ' ') FROM employees;
SQL> SELECT ' ' || 'SANTIAGO' || ' ' FROM dual;
17. Elimina los asteriscos del final de la cadena.
SQL> SELECT 'Derek Iverson ************' FROM DUAL;
SQL> SELECT TRIM(TRAILING '*' FROM ' Derek Iverson ************') FROM DUAL;
18. Elimina los asteriscos de ambos lados de la cadena.
SQL> SELECT '******************* Derek Iverson ************' FROM DUAL;
SQL> SELECT TRIM(BOTH '*' FROM '**************** Derek Iverson ************')
FROM DUAL;
Aprendiendo Practicando GCOS/Ejercicios version 1.0, Para cualquiera sugerencia

19. Elimina los asteriscos de ambos lados de la cadena fuenta, el comportamiento por defecto es
BOTH.
SQL> SELECT '******************* Derek Iverson ************' FROM DUAL;
SQL> SELECT TRIM('*' FROM '**************** Derek Iverson ************') FROM
DUAL;
20. Si no se especifica ningn parmetro el comportamiento de trim es, TRIM(BOTH ' ' FROMS).
SQL> SELECT ' SANTIAGO FROM DUAL;
SQL> SELECT TRIM(' SANTIAGO ') FROM DUAL;
21. Busca la posicin de la coma, primero se evalu la expresin numrica.
SQL> SELECT INSTR(10000 + 123.3,',') FROM DUAL;
22. Busca la diagonal dentro de una fecha.
SQL> SELECT SYSDATE FROM DUAL;
SQL> SELECT INSTR(SYSDATE, '/') FROM DUAL;
SQL> SELECT INSTR(SYSDATE, '/', 1, 2) FROM DUAL;
23. Para busca la primera palabra de un texto.
SQL> SELECT SUBSTR(street_address,1,INSTR(street_address, ' ')) FROM LOCATIONS;
24. Extrae desde la posicin 4 tres caracteres.
SQL> SELECT SYSDATE FROM DUAL;
Aprendiendo Practicando GCOS/Ejercicios version 1.0, Para cualquiera sugerencia

SQL> SELECT SUBSTR(SYSDATE,4,3) FROM DUAL;


25. Extrae desde la posicin 10 hasta el final, la posicin inicial si es mas grande que la cadena
fuente, la funcin devuelve NULL.
SQL> SELECT job_title FROM jobs;
SQL> SELECT job_title , SUBSTR(job_title,10) FROM jobs;
26. Extrae desde la posicin 1 dos caracteres.
SQL> SELECT job_id, SUBSTR(job_id, 1, 2) FROM jobs;
27. Remplaza los guiones bajo con cadena vaci. el valor por defecto de remplazo es vaci.
SQL> SELECT job_id, REPLACE(job_id,'_') FROM jobs;
28. Remplaza los guiones bajo y porcentaje por cadena vaci.
SQL> SELECT job_id, REPLACE(REPLACE(job_id,'%'),'_') FROM jobs;
29. Precisin decimal 0, redondea al entero mas cercano, si el decimal es mayor o igual a cinco el
redondeo es arriba, si el decimal es menor o igual a cuatro el redondeo es abajo.
SQL> SELECT ROUND(123456.12345) FROM DUAL;
SQL> SELECT ROUND(500012.55555) FROM DUAL;
SQL> SELECT ROUND(500012.50000) FROM DUAL;
SQL> SELECT ROUND(500012.49999) FROM DUAL;
Aprendiendo Practicando GCOS/Ejercicios version 1.0, Para cualquiera sugerencia

30. Precisin decimal 1, redondea el dgito significativo n + 1 a la derecha,


redondea del numero 1 que esta en la posicin 2 a la derecha del punto decimal.
SQL> SELECT ROUND(2900.916718,1) FROM DUAL;
SQL> SELECT ROUND(2900.506718,1) FROM DUAL;
SQL> SELECT ROUND(2900.496718,1) FROM DUAL;
SQL> SELECT ROUND(2900.9,1) FROM DUAL;

31. Precisin decimal 2, redondea el dgito significativo n + 1 a la derecha,


redondea del numero que esta en la posicin 3 a la derecha del punto decimal.
SQL> SELECT ROUND(273308.15212363,2) FROM DUAL;
SQL> SELECT ROUND(273308.15512363,2) FROM DUAL;
SQL> SELECT ROUND(273308.15612363,2) FROM DUAL;
SQL> SELECT ROUND(273308.15812363,2) FROM DUAL;
SQL> SELECT ROUND(273308.15,2) FROM DUAL;
Aprendiendo Practicando GCOS/Ejercicios version 1.0, Para cualquiera sugerencia

32. Precisin decimal -1, redondea el dgito significativo n a la izquierda del


punto decimal, redondea a la prxima decena.
SQL> SELECT ROUND(12345.12345,-1) FROM DUAL;
SQL> SELECT ROUND(12344.12345,-1) FROM DUAL;
SQL> SELECT ROUND(12343.12345,-1) FROM DUAL;
33. Precisin decimal -2, redondea el dgito significativo n a la izquierda del punto decimal,
redondea a la prxima centena.
SQL> SELECT ROUND(12345.12345,-2) FROM DUAL;
SQL> SELECT ROUND(12354.12345,-2) FROM DUAL;
SQL> SELECT ROUND(12344.52345,-2) FROM DUAL;
34. Seleccionar los empleados con salario superior a 2000.

SQL> SELECT *
FROM employees WHERE salary >20000;

35. Seleccionar los empleados con salario superior a 2000 y con el trabajo de ST_MAN.

SQL> SELECT *
FROM employees WHERE salary >20000

AND job_id='ST_MAN' ;
36. Seleccionar el n de departamento que tengan distinto department_id en la tabla employees.
SQL> SELECT DISTINCT(department_id) FROM employees;
Aprendiendo Practicando GCOS/Ejercicios version 1.0, Para cualquiera sugerencia

37. Seleccionar todos los empleados del departamento n 80 y ademas debe de estar ordenado por el
apellido y tienen que aparecer en la consulta el n del empleado, el apellido, el oficio y el n de
departamento.

SQL> SELECT employee_id last_name, job_id, department_id FROM employees


ORDER BY last_name;

38. Seleccionar los empelados que sean programadores.


SQL> SELECT first_name, job_id FROM employees
WHERE job_id LIKE '%IT_PROG%';
39. Seleccionar los empleados cuyo apellido tenga una A en la segunda posicin.
SQL> SELECT last_name apellidos FROM employees
WHERE last_name LIKE '_A%';
40. Seleccionar el apellido, el salario y el n de departamento de los empleados cuyo salario sea
mayor o igual a 125000 en los departamentos 10 o 20.

SQL> SELECT last_name, salary, department_id FROM employees


WHERE salary > 125000
AND department_id in (10,20);

41. Seleccionar la lista de empleados indicando para cada uno su apellido, oficio, fecha de alta y el
salario con un aumento del 16%.
SQL> SELECT last_name apellido, job_id oficio, hire_date fecha_al, salary, salary* 1.16 FROM
employees;
42. De cada departamento saber el nombre y la localidad.

SQL> SELECT department_name , city


FROM departments d
JOIN locations l ON (d.location_id=l.location_id);

43. Seleccionar los departamentos ordenados por el n departamento.

SQL> SELECT *
FROM departments
ORDER BY department_id ASC;
Aprendiendo Practicando GCOS/Ejercicios version 1.0, Para cualquiera sugerencia

44. Seleccionar los empleados ordenados alfabticamente por el nombre y por el oficio.
SQL> SELECT * FROM employees ORDER BY last_name ASC, job_id ASC;
45. Seleccionar los empleados que no tienen comisin.
SQL> SELECT last_name apellido, commission_pct FROM employees
WHERE commission_pct IS NULL;
46. Seleccionar los empleados de apellido Baer
SQL> SELECT last_name apellido FROM employees
WHERE last_name LIKE 'Baer';
Seleccionar los departamentos cuyo nombre acabe en 'on';
SQL> SELECT department_name
FROM departments
WHERE department_name LIKE '%on';
47. Seleccionar los empleados cuyo n de departamento no sea ni 30, ni 20 ni 40.

SQL> a) SELECT last_name apellidos, department_id FROM employees


WHERE department_id <>30
AND department_id<>20

AND department_id<>40
48. Seleccionar los departamentos cuya localidad no sea ni Seattle ni Toronto.

SQL> SELECT department_name , city


FROM departments d
JOIN locations l ON (d.location_id=l.location_id)

WHERE city NOT LIKE 'Seattle'


AND city NOT LIKE 'Toronto';
49. Seleccionar los empleados cuya fecha de alta este entre entre el 2001 y el 2005.
SQL> SELECT last_name apellido, hire_date
FROM employees
WHERE to_char(hire_date, 'YYYY') BETWEEN 2001 AND 2005;
Aprendiendo Practicando GCOS/Ejercicios version 1.0, Para cualquiera sugerencia

50. seleccionar los departamentos que terminen en n y tengan una o en su interior.


SQL> SELECT department_name
FROM departments
WHERE department_name LIKE '%o%n' OR department_name LIKE 'o%n';
51. Seleccionar los empleados que tengan una a en el nombre y una b en su ciudad en la posicin que
sea o.

SQL> SELECT department_name , city, last_name


FROM employees e
JOIN departments d ON (e.department_id=d.department_id) JOIN locations l ON
(d.location_id=l.location_id)

WHERE last_name LIKE '%a%'AND city LIKE '%o%';


52. Seleccionar los empelados cuyo salario sea mayor de 20000 y menor que 50000.
SQL> SELECT last_name apellidos, salary FROM employees
WHERE salary >20000 AND salary < 50000;
53. seleccionar de la tabla empleado aquellas filas cuyo apellido empiece por A y el oficio tenga una
e en cualquier posicin.
SQL> SELECT last_name apellido, job_id oficio
FROM employees
WHERE last_name LIKE '%A' OR job_id LIKE '%E%';
54. Mostrar los detalles de los trabajos donde el salario es mayor que 10.000.
SQL> SELECT *
FROM jobs
WHERE MIN_salary > 10000
55. Ver el primer nombre y la fecha de los trabajadores que ingresaron entre 2002 y 2005.
SQL> SELECT first_name, hire_date
FROM employees
WHERE hire_date BETWEEN TO_DATE('2001', 'yyyy') AND TO_DATE('2005', 'yyyy')
ORDER BY hire_date;
56. Muestra el nombre y fecha de los empleados, que podrn ser programador y Vendedores.
SQL> SELECT first_name, hire_date, job_id
FROM employees WHERE job_id IN ('IT_PROG', 'SA_MAN');
Aprendiendo Practicando GCOS/Ejercicios version 1.0, Para cualquiera sugerencia

57. Mostrar los trabajadores que ingresaron despus del 1 de enero de 2008.
SQL> SELECT *
FROM employees
WHERE hire_date > '01-jan-2008' ;
58. Mostrar los detalles de los empleados con ID 150 o 160.
SQL> SELECT *
FROM employees
WHERE employee_id in (150,160);
59. Muestra el nombre, salario, comisin pct y fecha de contratacin de empleados con salario
inferior a 10.000.
SQL> SELECT first_name, salary, commission_pct, hire_date FROM employees
WHERE salary < 10000;
60. Mostrar ttulo del trabajo, la diferencia entre los salarios mnimos y mximos para los puestos de
trabajo con un mximo de salario en el rango de 10000 a 20000.
SQL> SELECT JOB_TITLE, MAX_salary-MIN_salary DIFFERENCE FROM jobs WHERE
MAX_salary BETWEEN 10000 AND 20000;
61. Muestra el nombre, salario y redondear el sueldo en fraccin de miles.
SQL> SELECT first_name, salary, ROUND(salary, -3) FROM employees;
62. Mostrar los detalles de los trabajos en el orden descendente del ttulo.
SQL> SELECT *
FROM jobs ORDER BY JOB_TITLE;
63. Mostrar los empleados en el primer nombre o apellido comienza con S.
SQL> SELECT first_name, last_name
FROM employees
WHERE first_name LIKE 'S%' OR last_name LIKE 'S%';
64. Mostrar los trabajadores que ingresaron en el mes de mayo.
SQL> SELECT *
FROM employees
WHERE TO_CHAR(hire_date, 'MON')= 'MAY';
Aprendiendo Practicando GCOS/Ejercicios version 1.0, Para cualquiera sugerencia

65. Mostrar los detalles de los empleados en el porcentaje de comisin es nulo y el salario en el que
el rango es de 5000 a 10.000 y el departamento es de 30.

SQL> SELECT *
FROM employees
WHERE commission_pct IS NULL AND salary BETWEEN 5000 AND 10000
AND department_id=60;

66. Muestra el nombre y la fecha del primer sueldo de los empleados.


SQL> SELECT first_name, hire_date, LAST_DAY(hire_date)+1 AS Primer_salario FROM
employees;
67. Muestra el nombre y experiencia de los empleados.
SQL> SELECT first_name, hire_date, FLOOR((SYSDATE-hire_date)/365) Experiencia FROM
employees;
68. Mostrar nombre de los empleados que se unieron en 2001.
SQL> SELECT first_name, hire_date
FROM employees
WHERE TO_CHAR(hire_date, 'YYYY')=2001;
69. Muestra el nombre y el apellido despus de convertir la primera letra de cada nombre en
maysculas y el resto en minsculas.
SQL> SELECT INITCAP(first_name), INITCAP(last_name) FROM employees;
70. Muestra la primera palabra de puesto de trabajo.
SQL> SELECT JOB_TITLE, SUBSTR(JOB_TITLE,1, INSTR(JOB_TITLE, ' ')-1) FROM
jobs;

71. Mostrar nombre en maysculas y direccin de correo electrnico en minsculas para los
empleados, donde el primer nombre y correo electrnico son los mismos independientemente de la
causa.

SQL> SELECT UPPER(first_name), LOWER(EMAIL) FROM employees


WHERE UPPER(first_name)= UPPER(EMAIL);

72. Mostrar los trabajadores que ingresaron en el ao en curso.


Aprendiendo Practicando GCOS/Ejercicios version 1.0, Para cualquiera sugerencia

SQL> SELECT *
FROM employees
WHERE TO_CHAR(hire_date,'YYYY')=TO_CHAR(SYSDATE, 'YYYY');

73. Mostrar el nmero de das entre la fecha del sistema y el 13 de Agosto de


2013.
SQL> SELECT SYSDATE - TO_DATE('13-aug-2013') Mi Cumple FROM DUAL;

74. Muestra el nmero de empleados que se uni en cada mes del ao en curso.
SQL> SELECT TO_CHAR(hire_date,'MM'), COUNT (*)
FROM employees
WHERE TO_CHAR(hire_date,'YYYY')= TO_CHAR(SYSDATE,'YYYY') GROUP BY
TO_CHAR(hire_date,'MM');

75. Mostrar ID manager y nmero de empleados agrupado por el manager.


SQL> SELECT manager_id, COUNT(*) Cantidad FROM employees
GROUP BY manager_id;

76. Mostrar ID de empleados y la fecha en que termin su trabajo anterior.


SQL> SELECT employee_id, MAX(END_DATE) FROM JOB_HISTORY
GROUP BY employee_id

77. Mostrar el nmero de empleados se unieron despus del 15 del mes.


SQL> SELECT COUNT(*) Numero Empleado FROM employees
WHERE TO_CHAR(hire_date,'DD') > 15;

78. Muestra el ID de pas y el nmero de ciudades que tenemos en el pas.


SQL> SELECT country_id, COUNT(*) Cantidad FROM locations
GROUP BY country_id;
79. Mostrar salario promedio de los empleados en cada departamento que
tienen porcentaje de comisin.

SQL> SELECT department_id, AVG(salary) FROM employees


WHERE commission_pct IS NOT NULL GROUP BY department_id;
Aprendiendo Practicando GCOS/Ejercicios version 1.0, Para cualquiera sugerencia

80. Mostrar ID de trabajo, nmero de empleados, cantidad de salario, y la


diferencia entre el salario ms alto y salario ms bajo de los empleados del
puesto de trabajo.

SQL> SELECT job_id, COUNT(*) Cantidad, SUM(salary), MAX(salary)-MIN(salary) salario


FROM employees
GROUP BY job_id;

81. Mostrar los departamentos en que ningn empleado se unieron en los ltimos dos aos.
SQL> SELECT * FROM departments
WHERE department_id NOT IN ( SELECT department_id
FROM employees
WHERE FLOOR((SYSDATE-hire_date)/365) < 2) ;
82. Mostrar los detalles de los departamentos en los que el salario mximo es superior a 10.000 para
los empleados que hicieron un trabajo en el pasado.
SQL> SELECT * FROM departments
WHERE department_id IN (SELECT department_id

FROM employees WHERE employee_id IN (SELECT employee_id

FROM JOB_HISTORY) GROUP BY department_id


HAVING MAX(salary) >10000);

83. Mostrar los detalles de trabajo actual para los empleados que trabajaban como programadores
informticos en el pasado.
SQL> SELECT * FROM jobs
WHERE job_id IN (SELECT job_id
FROM employees
WHERE employee_id IN (SELECT employee_id FROM JOB_HISTORY WHERE
job_id='IT_PROG'));
84. Mostrar los detalles de los empleados de dibujo el salario ms alto en el departamento.
SQL> SELECT department_id, first_name, salary
FROM employees OUTER WHERE salary = (SELECT MAX(salary)
FROM employees
WHERE department_id = OUTER.department_id)
Aprendiendo Practicando GCOS/Ejercicios version 1.0, Para cualquiera sugerencia

85. Ver la ciudad de los empleados cuyo nmero de empleado es igual al105.
SQL> SELECT city
FROM locations
WHERE location_id = (SELECT location_id
FROM departments
WHERE department_id = (SELECT department_id FROM employees WHERE
employee_id=105));

86. Mostrar tercer salario ms alto de todos los empleados.

SQL> SELECT salary


FROM employees main
WHERE 2 = (SELECT count( distinct salary ) FROM employees
WHERE salary > main.salary);
87. Mostrar los detalles de los departamentos en los que el salario mximo es de ms de 10.000.
SQL> SELECT *
FROM departments
WHERE department_id IN ( SELECT department_id FROM employees
GROUP BY department_id HAVING MAX(salary)>10000);
88. Mostrar los detalles de los departamentos gestionados por 'Jennifer'.

SQL> SELECT * FROM departments


WHERE manager_id IN (SELECT employee_id FROM employees
WHERE first_name='Jennifer');

89. Mostrar los empleados que no hicieron ningn trabajo en el pasado.


SQL> SELECT *
FROM employees
WHERE employee_id NOT IN (SELECT employee_id FROM JOB_HISTORY); Aprendiendo Practicando
GCOS/Ejercicios version 1.0, Para cualquiera sugerencia

90. Mostrar ttulo del trabajo y el salario promedio de los empleados que
hicieron un trabajo en el pasado.
SQL> SELECT JOB_TITLE, AVG(salary)
FROM jobs NATURAL

JOIN employees WHERE employee_id IN (SELECT employee_id FROM JOB_HISTORY)


GROUP BY JOB_TITLE ;

91. Mostrar nombre del pas, la ciudad, y el nmero de departamentos en los


que el departamento cuenta con ms de 5 empleados.
SQL> SELECT country_name, city, COUNT(department_id) FROM countries
JOIN locations USING (country_id)
JOIN departments USING (location_id)

WHERE department_id IN (SELECT department_id FROM employees


GROUP BY department_id HAVING COUNT(department_id)>5) GROUP BY country_name,
city;

92. Mostrar los detalles de los gerentes que administran ms de 5 empleados.

SQL> SELECT first_name


FROM employees

WHERE employee_id IN (SELECT manager_id FROM employees GROUP BY manager_id


HAVING COUNT(*)>5);

93. Seleccionar el apellido de los empleados que trabajen en Canada o Germany.


SQL> SELECT last_name apellido
FROM employees

WHERE department_id in (SELECT d.department_id


FROM countries c
JOIN locations l ON (c.country_id=l.country_id) JOIN departments d ON
(d.location_id=l.location_id)

WHERE country_name in ('Canada','Germany'));


94. Visualizar el apellido, el salario y el nmero de departamento de aquellos empleados de la tabla
employees cuyo salario supere a la media en su departamento.
SQL> SELECT last_name apellido, salary salario, department_id FROM employees E
WHERE salary >(SELECT AVG(salary)

FROM employees
WHERE department_id=E.department_id);
Aprendiendo Practicando GCOS/Ejercicios version 1.0, Para cualquiera sugerencia

95. Visualizar el apellido, el salario y el nmero de departamento de aquellos empleados de la tabla


employees cuyo salario sea el mayor de su departamento.
SQL> SELECT last_name apellido, salary salario , department_id FROM employees E
WHERE salary IN (SELECT MAX(salary)
FROM employees
WHERE department_id=E.department_id);
96. Seleccionar el apellido y el oficio de todos los empleados del departamento 50 cuyo trabajo sea
idntico al de los empleados del departamento Shipping.

SQL> SELECT last_name apellido, job_id oficio


FROM employees
WHERE department_id =50
AND job_id in( SELECT job_id
FROM employees
WHERE department_id =(SELECT department_id FROM departments
WHERE department_name='SALES'));
97. Obtener el apellido y salario de los empleados con el mismo oficio y el salario de 'Baida'.
SQL> SELECT last_name apellido, salary salario FROM employees
WHERE (job_id,salary)= (SELECT job_id,salary FROM employees WHERE
last_name='Baida');
98. Mostrar los empleados (nombre, oficio ,salario y fecha de alta) que desempeen el mismo oficio
que Everett o que tengan el salario mayor o igual a Dellinger.
SQL> SELECT last_name apellido,job_id oficio,salary salario,hire_date hire_date FROM
employees
WHERE job_id = (SELECT job_id
FROM employees
WHERE last_name = 'Everett')
OR salary >= (SELECT salary
FROM employees
WHERE last_name = 'Dellinger');
99. Mostrar por pantalla el nombre, el oficio y el salario de los empleados del departamento de Ellen
que tengan su mismo salario.
SQL> SELECT last_name apellido,salary salario, job_id oficio FROM employees
WHERE (department_id, salary) in (SELECT department_id, salary FROM employees
WHERE first_name = 'Ellen' );
Aprendiendo Practicando GCOS/Ejercicios version 1.0, Para cualquiera sugerencia

100. visualizar los departamentos con mayor numero de empleados y que tengan un salario mayor que
20000.
SQL> SELECT department_name
FROM departments
WHERE department_id = (SELECT department_id
FROM employees
WHERE employee_id = (SELECT max(employee_id) FROM employees
WHERE salary = (SELECT salary FROM employees WHERE salary > 20000 )));
101. Presentar los nombres y oficios de los empleados que tienen el mismo trabajo que Doran.
SQL> SELECT last_name apellido, job_id oficio FROM employees
WHERE job_id = (SELECT job_id
FROM employees
WHERE last_name = 'Doran');
102. Muestra el nombre del departamento y el nmero de empleados en el departamento.

SQL> SELECT department_name, COUNT(*) Cantidades FROM employees NATURAL


JOIN departments GROUP BY department_name;

103. Mostrar ttulo del trabajo, identificacin de empleado, el nmero de das entre la fecha de fin y
la fecha de partida para todos los puestos de trabajo en el departamento 80 de la historia laboral.

SQL> SELECT employee_id, JOB_TITLE, END_DATE-START_DATE DAYS FROM


JOB_HISTORY NATURAL
JOIN jobs
WHERE department_id=80;
104. Mostrar nombre de departamento y director de nombre.

SQL> SELECT department_name, first_name


FROM departments D
JOIN employees E ON (D.manager_id=E.employee_id);

105. Mostrar nombre del departamento, nombre del gestor, y la ciudad.

SQL> SELECT department_name, first_name, city FROM departments D


JOIN employees E ON (D.manager_id=E.employee_id) JOIN locations L USING (location_id);
Aprendiendo Practicando GCOS/Ejercicios version 1.0, Para cualquiera sugerencia

106. Muestra el nombre del pas, ciudad y nombre del departamento.

SQL> SELECT country_name, city, department_name FROM countries JOIN locations USING
(country_id) JOIN departments USING (location_id);

107. Mostrar ttulo del trabajo, nombre del departamento, empleado, apellido, fecha de todos los
puestos de trabajo a partir de 2000 a 2005.

SQL> SELECT JOB_TITLE, department_name, last_name, START_DATE FROM


JOB_HISTORY
JOIN jobs USING (job_id)
JOIN departments USING (department_id)
JOIN employees USING (employee_id)

WHERE TO_CHAR(START_DATE,'YYYY') BETWEEN 2000 AND 2005;


108. Mostrar ttulo del trabajo y el salario promedio de los empleados

SQL> SELECT JOB_TITLE, AVG(salary) FROM employees NATURAL JOIN jobs


GROUP BY JOB_TITLE;

109. Mostrar ttulo del trabajo, nombre del empleado, y la diferencia entre el salario mximo para el
trabajo y el salario del empleado.

SQL> SELECT JOB_TITLE, first_name, MAX_salary-salary DIFFERENCE FROM employees


NATURAL
JOIN jobs;

110. Mostrar apellido, ttulo del trabajo de los empleados que tienen porcentaje de comisin y
pertenece al departamento de 30.
SQL> SELECT JOB_TITLE, first_name, MAX_salary-salary DIFFERENCE FROM employees
NATURAL
JOIN jobs WHERE department_id = 30;
111. Mostrar los detalles de los trabajos que se realizaron por cualquier empleado que est
elaborando en la actualidad ms de 15.000 de salario.

SQL> SELECT JH.*


FROM JOB_HISTORY JH
JOIN employees E ON (JH.employee_id = E.employee_id)

WHERE salary > 15000;


Aprendiendo Practicando GCOS/Ejercicios version 1.0, Para cualquiera sugerencia

112. Mostrar nombre del departamento, nombre del gestor, y el sueldo del director para todos los
gerentes, cuya experiencia es de ms de 5 aos.

SQL> SELECT department_name, first_name, salary FROM departments D


JOIN employees E ON (D.manager_id=E.manager_id)

WHERE (SYSDATE-hire_date) / 365 > 5 ;


113. Muestra el nombre del empleado, si el empleado se uni antes de su manager.
SQL> SELECT e1.first_name
FROM employees E1
JOIN employees E2 ON (E1.manager_id=E2.employee_id) WHERE E1.hire_date <
E2.hire_date;
114. Muestra el nombre del empleado, cargo para el empleado lo hizo en el pasado en que el trabajo
ya mas de dos meses.

SQL> SELECT first_name, JOB_TITLE


FROM employees E
JOIN JOB_HISTORY JH ON (JH.employee_id = E.employee_id) JOIN jobs J ON( JH.job_id =
J.job_id)
WHERE MONTHS_BETWEEN(END_DATE, START_DATE) > 2;

115. Muestra el nombre del empleado y el pas en el que est trabajando.

SQL> SELECT first_name, country_name FROM employees


JOIN departments USING(department_id) JOIN locations USING( location_id) JOIN countries
USING ( country_id);

116. Mostrar nombre del departamento, salario medio y el nmero de empleados con
commission_pct dentro del departamento.

SQL> SELECT department_name, AVG(salary), COUNT(commission_pct) FROM departments


JOIN employees USING (department_id)
GROUP BY department_name;
Aprendiendo Practicando GCOS/Ejercicios version 1.0, Para cualquiera sugerencia

117. Muestra el mes en el que ms de un trabajadores se unio en un departamento ubicado en Sydney.


SQL> SELECT TO_CHAR(hire_date,'MON-YY') Mes FROM employees
JOIN departments USING (department_id) JOIN locations USING(location_id)

WHERE city = 'Seattle'


GROUP BY TO_CHAR(hire_date,'MON-YY') HAVING COUNT(*) > 1;

118. Muestra el nombre del empleado, cargo, fecha de inicio y fecha de finalizacin de los trabajos
anteriores de todos los empleados con comisin porcentual nula.

SQL> SELECT first_name, JOB_TITLE, START_DATE, END_DATE FROM JOB_HISTORY


JH
JOIN jobs J USING (job_id)
JOIN employees E ON ( JH.employee_id =E.employee_id)

WHERE commission_pct IS NULL;


119. Seleccionar el apellido, el oficio y la localidad de los departamentos donde trabajan los
analistas.

SQL> SELECT last_name apellido,job_id oficio,location_id FROM employees e,departments d


WHERE e.department_id=d.department_id AND job_id='IT_PROG';

120. Mostrar ID de trabajo para puestos de trabajo con salario promedio de ms de 10.000

SQL> SELECT job_id, AVG(salary) FROM employees


GROUP BY job_id
HAVING AVG(salary)>10000;

121. Mostrar el ao en el que ms de 10 empleados se unieron.

SQL> SELECT TO_CHAR(hire_date,'YYYY') FROM employees


GROUP BY TO_CHAR(hire_date,'YYYY') HAVING COUNT(employee_id) > 10;
Aprendiendo Practicando GCOS/Ejercicios version 1.0, Para cualquiera sugerencia

122. Mostrar los departamentos en los que ms de cinco empleados tienen porcentaje de comisin.
SQL> SELECT department_id
FROM employees

WHERE commission_pct IS NOT NULL GROUP BY department_id


HAVING COUNT(commission_pct)>5;

123. Mostrar los empleados que hicieron ms de un trabajo en el pasado.

SQL> SELECT employee_id FROM JOB_HISTORY GROUP BY employee_id

HAVING COUNT(*) > 1;


124. Mostrar el ID de trabajo que se realizaron que tuvieron ms de 1 empleados por ms de 100
das.
SQL> SELECT job_id
FROM JOB_HISTORY

WHERE END_DATE-START_DATE > 100 GROUP BY job_id


HAVING COUNT(*) > 1;

125. Desplegar el departamento, ao y nmero de empleados que se unieron.

SQL> SELECT department_id, TO_CHAR(hire_date,'YYYY'), COUNT(employee_id) FROM


employees
GROUP BY department_id, TO_CHAR(hire_date, 'YYYY')
ORDER BY department_id;

126. Mostrar los departamentos donde cualquier gestor est administrando ms de 5 empleados.

SQL> SELECT DISTINCT department_id FROM employees


GROUP BY department_id, manager_id HAVING COUNT(employee_id) > 5;

127. Visualizar los departamentos en los que el salario medio es mayor o igual que la media de todos
los salarios;

SQL> SELECT department_id, avg(salary) FROM employees


GROUP BY department_id
HAVING avg(salary) >= (SELECT avg(salary)

FROM employees);
Aprendiendo Practicando GCOS/Ejercicios version 1.0, Para cualquiera sugerencia

128. A partir de la tabla employees, visualizar el nmero de vendedores del departamento 'Sales';
SQL> SELECT count(*) FROM employees
WHERE department_id = (SELECT department_id FROM departments
WHERE department_name ='Sales' );
129. Partiendo de la tabla employees, visualizar por cada oficio de los empleados del departamento
'Sales' la suma de salarios.
SQL> SELECT sum(salary), job_id
FROM employees
WHERE department_id in (SELECT department_id
FROM departments
WHERE department_name LIKE 'Sales') GROUP BY job_id;
130. Seleccionar aquellos pedidos de la tabla empleado cuyo salario sea igual a la media de su
salario en su departamento.
SQL> SELECT last_name apellido, salary salario
FROM employees
WHERE (salary,department_id) in (SELECT avg(salary),department_id FROM employees
GROUP BY department_id);
131. A partir de la tabla employees, visualizar el numero de empleados de cada departamento cuyo
oficio sea 'FI_ACCOUNT'
SQL> SELECT department_id, count(*) Cantidades FROM employees
WHERE job_id LIKE 'FI_ACCOUNT' GROUP BY department_id;
132. Desde la tabla employees, visualizar el departamento que tenga ms empleados cuyo oficio sea
'IT_PROG'
SQL> SELECT department_id,department_name
FROM departments
WHERE department_id=(SELECT department_id
FROM employees

WHERE job_id= 'IT_PROG'


GROUP BY department_id
HAVING count(*)=(SELECT max(count(*))

FROM employees WHERE job_id='IT_PROG' GROUP BY department_id));


Aprendiendo Practicando GCOS/Ejercicios version 1.0, Para cualquiera sugerencia

133. Buscar los departamentos que tienen ms de dos personas trabajando en la misma profesin

SQL> SELECT department_id,count(*) FROM employees


GROUP BY department_id,job_id HAVING count(*)>2;

134. Mostrar el oficio y media de salarios de aquellos empleados cuya media de salario sea mayor
que 20000

SQL> SELECT avg(salary), job_id FROM employees


GROUP BY job_id
HAVING avg(salary)>20000;

135. Mostrar el nombre y la comisin de aquellos empleados que tengan una comisin mayor que la
de Hall
SQL> SELECT last_name apellido, commission_pct
FROM employees
WHERE commission_pct > (SELECT commission_pct FROM employees
WHERE last_name LIKE 'Hall');
136. Mostrar el nombre salario y n de departamento de aquellos empleados que ganan el salario
mximo de su departamento.
SQL> SELECT last_name apellido, salary salario, department_id FROM employees
WHERE salary in (SELECT max(salary)
FROM employees
GROUP BY department_id);
137. Mostrar el nombre del departamento que tanga mas empleados cuyo oficio sea AD_ASST.
SQL> SELECT department_name
FROM departments
GROUP BY department_name
HAVING count(*) = (SELECT max(count(*)) FROM employees
WHERE job_id LIKE 'AD_ASST' GROUP BY department_id);
138. Mostrar el numero de gerentes de la tabla employees que sean del departamento produccin.

SQL> SELECT count(manager_id)


FROM employees
WHERE department_id = (SELECT department_id

FROM departments
WHERE department_name = 'IT');
Aprendiendo Practicando GCOS/Ejercicios version 1.0, Para cualquiera sugerencia

139. Obtener la fecha de hoy con el siguiente formato(en maysculas)hoy es dieciocho de 0ctubre del
dos mil cuatro.
SQL> SELECT to_char (sysdate, '"Hoy Es" DAY- "del Mes" MONTH "Del Ao"-YEAR')
FROM dual;
140. Si hoy es 18/10/04 del lunes que da sera el lunes de la semana que viene.
SQL> SELECT next_day (sysdate,'Monday') FROM dual;
141. Escribir una consulta que visualice en una sola columna el nombre y apellido de las personas de
la tabla nacimiento y la fecha de nacimiento en un formato especifico.
SQL> SELECT concat (concat(first_name,last_name), to_char (hire_date, 'DAY dd
MONTHyy')) FROM employees;
142. seleccionar los empleados que hayan trabajado mas de 5 aos y sumarles 10000 pts a su salario.
SQL> SELECT last_name apellido, salary + 10000 Salario FROM employees
WHERE months_BETWEEN (sysdate, hire_date)/12>5;
143. A partir de la tabla employees, visualizar cuantos apellidos de los empleados empiezan por la
letra A.
SQL> SELECT COUNT (last_name) FROM employees
WHERE last_name LIKE 'A%';
144. Dada la tabla employees, obtener el sueldo medio, el nmero de commission_pct no nulas , el
mximo sueldo y el minimo sueldo de los empleados del departamento 30.
SQL> SELECT AVG(salary), COUNT(commission_pct), MAX(salary), MIN(salary) FROM
employees
WHERE department_id= 30;
145. A partir de la tabla employees, obtener el apellido de los empleados que lleven mas de 10 aos
trabajando.
SQL> SELECT last_name, hire_date
FROM employees
WHERE TO_CHAR(sysdate,'YYYY')-TO_CHAR(hire_date,'YYYY')> 10;
Aprendiendo Practicando GCOS/Ejercicios version 1.0, Para cualquiera sugerencia

146. Seleccionar el apellido de los empleados de la tabla employees que lleven mas de 18 aos
trabajando en el en el departamento 'Ventas'.

SQL> SELECT last_name, hire_date


FROM employees
WHERE TO_CHAR(sysdate,'YYYY')-TO_CHAR(hire_date,'YYYY') > 8 AND department_id
= (SELECT department_id
FROM departments
WHERE department_name = 'Sales');

147. Dada la tabla employees, sumar dos meses a la fecha.


SQL> SELECT add_months(hire_date,2) FROM employees;

148. Dada la tabla employees, restar dos meses a la fecha de alta.


SQL> SELECT months_BETWEEN(hire_date,hire_date -2) FROM employees;

149. Obtener de la tabla employees el ultimo da del mes para cada uno de las
fechas de alta.

SQL> SELECT last_day(hire_date) FROM employees;

150. Calcular la edad de Jos Paredes.


SQL> SELECT months_BETWEEN(sysdate, '13/aug/1978')/12 FROM dual;

151. Si hoy es domingo 25 de julio de 2013 (fecha del sistema "sysdate"). Qu


fecha ser el prximo jueves?
SQL> SELECT next_day(sysdate,'wednesday') FROM dual;

152. A partir de la tabla employees, obtener la fecha de alta (columna hire_date)


formateada, de manera que aparezca el nombre del mes con todas sus letras
(month), el numero del da del mes(dd) y el ao (yyyy).
SQL> SELECT to_char(hire_date,'month,dd yyyy') FROM employees;
Aprendiendo Practicando GCOS/Ejercicios version 1.0, Para cualquiera sugerencia

153. Obtener la fecha de hoy con el siguiente Formato: Hoy es


NOMBRE_DIA,DIA_MES de NOMBRE_MES de AO.
SQL> SELECT to_char(sysdate,'"Hoy es " day "," dd "de" month "de" yyyy') FROM dual;

154. Visualizar la suma de los formateados de la tabla employees de manera tal


que aparezca el smbolo de la moneda, el punto para los miles y la coma para los
decimales.
SQL> SELECT to_char(sum(salary),'L9,999,999.99') FROM employees;
155. No se suministra el ao, Oracle coloca el mes, ao actual.

SQL> SELECT TO_DATE('01','DD') FROM dual;

156. convierte una fecha completa.

SQL> SELECT TO_DATE('01-ENE-2013 20:59:00','DD-MON-YYYY HH24:MI:SS') FROM


dual;

157. Para cambiar el formato de la fecha de la sesin actual.

SQL> ALTER SESSION SET NLS_DATE_FORMAT='DD-MM-YYYY';

158. Convertir la cadena a tipo date.

SQL> SELECT TO_DATE('13AUG2014') FROM dual;

159. Obtener el nombre del mes a partir de la cadena '01012001'. Antes hay que
convertir la cadena a tipo fecha.

SQL> SELECT to_char(TO_DATE('13AUG2014'), 'month') FROM dual;

160. Obtener el nombre del da, el nombre del mes, el da y el ao en ingles a


partir de la fecha '12121997'

SQL> SELECT to_char(TO_DATE('13AUG2014'), 'day,month dd yyyy') FROM dual;


Aprendiendo Practicando GCOS/Ejercicios version 1.0, Para cualquiera sugerencia

161. Cambiar el salario del empleado 115 a 8000 si el salario actual es inferior a
6000.

SQL> UPDATE employees SET salary = 8000 WHERE employee_id = 115 AND salary < 6000;

162. Insertase usted mismo como un nuevo empleado en los empleados con
todos los detalles necesarios.

SQL> INSERT INTO employees (employee_id, first_name, last_name, EMAIL,


PHONE_NUMBER, hire_date,job_id, salary, department_id) VALUES (207, 'ANGELA',
'SNYDER','ANGELA','215 253 4737', SYSDATE, 'SA_MAN', 12000, 80);

163. Eliminar el departamento 20.

SQL> DELETE FROM departments WHERE department_id=20;


164. Cambiar ID de trabajo de los empleados de ID 110 a IT_PROG si el
empleado pertenece al departamento 10 y el ID de trabajo existente no inicie
con TI.

SQL> UPDATE employees SET job_id= 'IT_PROG'


WHERE employee_id=110 AND department_id=10 AND NOT job_id LIKE 'IT%';

165. Insertar una fila en la tabla de departamentos.

SQL> INSERT INTO departments (150,'SPORTS',120,1200);

166. Crear la tabla fabricantes con las siguientes condiciones:

- la clave primaria es cod_fabricante


- las columnas nombre y pais han de almacenarse en maysculas

SQL> CREATE TABLE FABRICANTES(


COD_FABRICANTE NUMBER(3) CONSTRAINT PK_FA
PRIMARY KEY, NOMBRE VARCHAR2(15) CONSTRAINT CK_NO
CHECK(NOMBRE=UPPER(NOMBRE)), PAIS VARCHAR2(15)
CONSTRAINT CK_PA CHECK(PAIS=UPPER(PAIS)) );
Aprendiendo Practicando GCOS/Ejercicios version 1.0, Para cualquiera sugerencia

167. Crear la tabla artculos con las siguientes condiciones:


- la clave primaria esta formada por las columnas: articulo, cod_fabricante, peso y categora.
- cod_fabricante es clave ajena que referencia a la tabla fabricantes.
- precio_venta, precio_costo han de ser >0.
- categora ha de ser 'primera','segunda ' o 'tercera'.

SQL> CREATE TABLE ARTICULOS(


ARTICULO VARCHAR2(20)NOT NULL,
COD_FABRICANTE NUMBER(3) NOT NULL,
PESO NUMBER(3) NOT NULL
CONSTRAINT CK1_AR CHECK (PESO>0),
CATEGORIA VARCHAR2(10) NOT NULL,
PRECIO_VENTA NUMBER (4)
CONSTRAINT CK2_AR CHECK (PRECIO_VENTA>0),
PRECIO_COSTO NUMBER (4)
CONSTRAINT CK3_AR CHECK (PRECIO_COSTO>0),
EXISTENCIAS NUMBER (5),
CONSTRAINT PK_ART PRIMARY KEY

(ARTICULO, COD_FABRICANTE, PESO, CATEGORIA),


CONSTRAINT FK_ARFA FOREIGN KEY (COD_FABRICANTE) REFERENCES
FABRICANTES,
CONSTRAINT CK_CAT CHECK(CATEGORIA IN('Primera','Segunda', 'Tercera')) );

168. Crear la tabla tiendas con las siguientes condiciones:


- la clave primaria es NIF
- provincia ha de almacenarse en may sculas.

SQL> CREATE TABLE TIENDAS (


NIF VARCHAR2(10) NOT NULL CONSTRAINT PK_TI PRIMARY KEY, NOMBRE
VARCHAR2(20),
DIRECCIN VARCHAR2(20),

POBLACIN VARCHAR2(20),
PROVINCIA VARCHAR2(20)
CONSTRAINT CK_PRO CHECK(PROVINCIA=UPPER(PROVINCIA)), CODPOSTAL
NUMBER(5) );
Aprendiendo Practicando GCOS/Ejercicios version 1.0, Para cualquiera sugerencia

169. Crear la tabla pedidos con las siguientes condiciones:


- la clave primaria esta formada por las columnas:NIF, articulo,cod_fabricante,peso,categora y fecha de pedido.
- cod_febricante es clave ajena que referencia a la tabla fabricantes.
- unidades pedidas ha de ser: >0
- categora ha de ser 'primera','segunda ' o 'tercera'.
- las columnas articulo, cod_fabricante, peso y categora son clave ajena y referencia a la tabla artculos. Realizar un borrado en cascada.
- NIF es clave ajena y referencia a la tabla tiendas.

SQL> CREATE TABLE PEDIDOS(


NIF VARCHAR2(10) NOT NULL
CONSTRAINT FK_PETI REFERENCES TIENDAS,

ARTICULO VARCHAR2(20) NOT NULL,


COD_FABRICANTE NUMBER(3) NOT NULL
CONSTRAINT FK_PEFA REFERENCES FABRICANTES,
PESO NUMBER(3) NOT NULL,
CATEGORIA VARCHAR2(10) NOT NULL,
FECHA_PEDIDO DATE NOT NULL,
UNIDADES_PEDIDAS NUMBER(4)
CONSTRAINT CK_PEUP CHECK (UNIDADES_PEDIDAS>0), CONSTRAINT

PK_PED PRIMARY KEY


(NIF,ARTICULO, COD_FABRICANTE, PESO, CATEGORIA, FECHA_PEDIDO),
CONSTRAINT CK_CATPE CHECK(CATEGORIA IN('Primera','Segunda','Tercera')),
CONSTRAINT FK_PEAR FOREIGN KEY
(ARTICULO, COD_FABRICANTE, PESO, CATEGORIA) REFERENCES ARTICULOS ON
DELETE CASCADE );
Aprendiendo Practicando GCOS/Ejercicios version 1.0, Para cualquiera sugerencia
170. Crear la tabla ventas con las siguientes condiciones:
- la clave primaria esta formada por la por las columnas: nif, articulo,cod_fabricantepeso,categora y fecha venta.
- cod fabricante es clave ajena que referencia a la tabla fabricantes.
- unidades_vendidas ha de ser >0
- categora ha de ser 'primera','segunda ' o 'tercera'.
- Las columnas articulo, cod_fabricante, peso, y categora son clave ajena y referencia de la tabla artculos. Realizar un borrado en cascada.
- NIF es clave ajena y referencia a la tabla tiendas

SQL> CREATE TABLE VENTAS(


NIF VARCHAR2(10) NOT NULL
CONSTRAINT FK_VETI REFERENCES TIENDAS,

ARTICULO VARCHAR2(20) NOT NULL,


COD_FABRICANTE NUMBER(3) NOT NULL
CONSTRAINT FK_VEFA REFERENCES FABRICANTES,
PESO NUMBER(3) NOT NULL,
CATEGORIA VARCHAR2(10) NOT NULL
CONSTRAINT CK_CATVE
CHECK(CATEGORIA IN('Primera','Segunda','Tercera')),
FECHA_VENTA DATE NOT NULL,
UNIDADES_VENDIDAS NUMBER(4)
CONSTRAINT CK_VEUV CHECK (UNIDADES_VENDIDAS>0),
CONSTRAINT PK_VEN PRIMARY KEY
(NIF,ARTICULO, COD_FABRICANTE, PESO, CATEGORIA, FECHA_VENTA),
CONSTRAINT FK_VEAR FOREIGN KEY
(ARTICULO, COD_FABRICANTE, PESO, CATEGORIA) REFERENCES ARTICULOS
ON DELETE CASCADE );

171. Visualizar los constraints definidos para las tablas anteriores.

SQL> SELECT TABLE_NAME, CONSTRAINT_NAME


FROM USER_CONSTRAINTS
WHERE TABLE_NAME IN('ARTICULOS','TIENDAS', 'FABRICANTES',
'PEDIDOS','VENTAS');

Modificar las columnas de las tablas pedidos y ventas para que las unidades
vendidas y las unidades pedidas puedan almacenar cantidades numricas de 6
dgitos.

SQL> ALTER TABLE PEDIDOS MODIFY (UNIDADES_PEDIDAS NUMBER(6)); ALTER


TABLE VENTAS MODIFY (UNIDADES_VENDIDAS NUMBER(6));

172. Impedir que se den mas de alta tiendas en la provincia de toledo.

SQL> ALTER TABLE TIENDAS ADD CONSTRAINT CK_TIENTO CHECK (PROVINCIA


!='TOLEDO');
173. Aadir a las tablas pedidos y ventas una nueva columna para que
almacenen el lpvp dep articulo.

SQL> ALTER TABLE VENTAS ADD(PVP NUMBER(4)); Aprendiendo Practicando GCOS/Ejercicios version 1.0, Para cualquiera sugerencia

174. Agregar comentario a la tabla ventas.

SQL> COMMENT ON TABLE ventas IS 'Aqui Solo Hay Ventas';

175. Crear una vista que se llame dep30 que contiene el apellido, oficio y el
salario de los empleados de la tabla employees del departamento 30.

SQL> CREATE VIEW dep30 AS SELECT last_name, job_id ,salary FROM employees

WHERE department_id=30;

176. Hacer una descripcin de la vista creada anteriormente.

SQL> DESC dep30;

177. Hacer una consulta que muestre el contenido de la vista dep30.

SQL> SELECT * FROM dep30;

178. Crear una vista dando nombre a las columnas ape, ofi y sal:

SQL> CREATE OR REPLACE VIEW dep30 (ape, ofi , sal) AS SELECT last_name, job_id
,salary
FROM employees

WHERE department_id=30;

179. Hacer una consulta de las vistas creadas junto con sus textos:

SQL> SELECT view_name, text FROM user_views;

180. Consultar los apellidos de los PU_MAN dela vista dep30:

SQL> SELECT ape


FROM dep30
WHERE ofi='PU_MAN';

181. Modificar la vista dep30, modificamos el apellido 'Himuro', almacenndolo


en minsculas y cambiamos el salario a 200000;

SQL> UPDATE dep30


SET ape='Martin', sal=200000 WHERE ape='Himuro'; Aprendiendo Practicando GCOS/Ejercicios version 1.0, Para cualquiera sugerencia

182. Consultamos la vista y la tabla asociada para comprobar los resultados.

SQL> SELECT ape, sal FROM dep30


WHERE ape='Himuro;
SQL> SELECT last_name, salary FROM employees
WHERE department_id=30;

183. Crear una vista a partir de la tabla departments.

SQL> CREATE OR REPLACE VIEW vdep AS SELECT department_id, department_name


FROM departments;

184. Insertar valores en la vista vdep.

SQL> INSERT INTO vdep VALUES (66,'DESARROLLO');

185. borramos el departamento 66 y observamos como este departamento


desaparece de la tabla departments.

SQL> DELETE vdep WHERE department_id = 66;

186. A partir de las tablas departments y employees creamos una vista que
contenga el employee_id, last_name, department_id y department_name.

SQL> CREARTE OR REPLACE VIEW dept_emp(employee_id, last_name,department_id


,department_name) AS SELECT employee_id, last_name,

employees.department_id,department_name
FROM employees , departments
WHERE employees.department_id=departments.department_id;

187. Insertar una fila en la vista creada

SQL> INSERT INTO dept_emp VALUES (2222,'SUELA',20,'INVESTIGACIN');

188. Borrar la vista dep30

SQL> DROP VIEW dep30; Aprendiendo Practicando GCOS/Ejercicios version 1.0, Para cualquiera sugerencia
189. Creacin de un sinnimo publico para la tabla sales del usuario

SQL> CONN sys/kiklas as sysdba


CREATE OR REPLACE PUBLIC SYNONYM em FOR hr.employees;

190. Mostrando datos desde el Synonum em.

SQL> CONN hr/kikla


SELECT * FROM em;

191. Para borrar el SYNONYM em.

SQL> CONN sys/kiklas as sysdba DROP PUBLIC synonym em;

192. Vamos a crear un sequence llamado s_clase.

SQL> CREATE SEQUENCE s_clase MINVALUE 1


START WITH 13
INCREMENT BY 1 NOCACHE;

193. Obtener el siguiente valor del sequence s_clase.

SQL> SELECT s_clase.NEXTVAL FROM DUAL;

194. Obtener el valor actual del sequence s_clase.

SQL> SELECT s_clase.CURRVAL FROM DUAL;

195. Eliminar el Sequence s_clase.

SQL> DROP SEQUENCE s_clase;

196. Para desbloquear el usuario scott.

SQL> ALTER USER USER scott ACCOUNT UNLOCK; Aprendiendo Practicando GCOS/Ejercicios version 1.0, Para cualquiera sugerencia

197. Asignar o modificar contrasea del usuario scott.

SQL> ALTER USER scott IDENTIFIED BY kikla;

Fin :)
Aprendiendo Practicando GCOS/Ejercicios version 1.0, Para cualquiera sugerencia

Вам также может понравиться