B00svu7stc Ebok
B00svu7stc Ebok
B00svu7stc Ebok
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
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.
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 *
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.
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 *
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.
AND department_id<>40
48. Seleccionar los departamentos cuya localidad no sea ni Seattle ni Toronto.
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;
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 *
FROM employees
WHERE TO_CHAR(hire_date,'YYYY')=TO_CHAR(SYSDATE, 'YYYY');
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');
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
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));
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
FROM employees
WHERE department_id=E.department_id);
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.
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 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.
109. Mostrar ttulo del trabajo, nombre del empleado, y la diferencia entre el salario mximo para el
trabajo y el salario del empleado.
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.
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.
116. Mostrar nombre del departamento, salario medio y el nmero de empleados con
commission_pct dentro del departamento.
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.
120. Mostrar ID de trabajo para puestos de trabajo con salario promedio de ms de 10.000
122. Mostrar los departamentos en los que ms de cinco empleados tienen porcentaje de comisin.
SQL> SELECT department_id
FROM employees
126. Mostrar los departamentos donde cualquier gestor est administrando ms de 5 empleados.
127. Visualizar los departamentos en los que el salario medio es mayor o igual que la media de todos
los salarios;
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
133. Buscar los departamentos que tienen ms de dos personas trabajando en la misma profesin
134. Mostrar el oficio y media de salarios de aquellos empleados cuya media de salario sea mayor
que 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.
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'.
149. Obtener de la tabla employees el ultimo da del mes para cada uno de las
fechas de alta.
159. Obtener el nombre del mes a partir de la cadena '01012001'. Antes hay que
convertir la cadena a tipo fecha.
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.
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
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 VENTAS ADD(PVP NUMBER(4)); Aprendiendo Practicando GCOS/Ejercicios version 1.0, Para cualquiera sugerencia
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;
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:
186. A partir de las tablas departments y employees creamos una vista que
contenga el employee_id, last_name, department_id y department_name.
employees.department_id,department_name
FROM employees , departments
WHERE employees.department_id=departments.department_id;
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> ALTER USER USER scott ACCOUNT UNLOCK; Aprendiendo Practicando GCOS/Ejercicios version 1.0, Para cualquiera sugerencia
Fin :)
Aprendiendo Practicando GCOS/Ejercicios version 1.0, Para cualquiera sugerencia