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

UNIVERSIDAD CENTRAL DEL ECUADOR FACULTAD DE INGENIERIA ESCUELA DE CIENCIAS

ORACLE
MATERIA BASE DE DATOS II
CECILIA TULCN

2009-2010
Ing. Jorge Gordillo

Contenido
Contenido ................................ ................................ ................................ ................................ 1 CARACTERISTICAS DE UNA BASE DE DATOS ................................ ................................ .............. 2 Definicin de base de datos................................ ................................ ................................ .. 2 Caractersticas ................................ ................................ ................................ ...................... 2 Sistema de Gestin de Base de Datos (SGBD) ................................ ................................ ....... 2 TIPOS DE RELACIONES ................................ ................................ ................................ .............. 3 Relacin identificadora y no identificadora................................ ................................ ........... 3 GRADOS DE NORMALIZACION ................................ ................................ ................................ .. 3 PRIMERA FORMA NORMAL ................................ ................................ ................................ .. 3 SEGUNDA FORMA NORMAL ................................ ................................ ................................ . 4 TERCERA FORMA NORMAL ................................ ................................ ................................ ... 4 MANIPULACION DE DATOS................................ ................................ ................................ ....... 4 Tipos de sentencias SQL ................................ ................................ ................................ ....... 4 Sentencias de definicin de datos (DDL) ................................ ................................ ........... 4 Sentencias de manipulacin de datos (DML)................................ ................................ ..... 5 FUNCIONES DE AGREGACION ................................ ................................ ................................ ... 8 USO DE LA CLAUSULA GROUP BY................................ ................................ ............................ 10 USO DE LA CLAUSULA HAVING ................................ ................................ ............................... 13 SELECT ANIDADOS................................ ................................ ................................ .................. 15 JOINS ................................ ................................ ................................ ................................ ..... 21 JOIN EQUIJOINS ................................ ................................ ................................ .................. 21 SELECT SINCRONIZADOS................................ ................................ ................................ ......... 23

CARACTERISTICAS DE UNA BASE DE DATOS


Definicin de base de datos
Se define una base de datos como una serie de datos organizados y relacionados entre s, los cuales son recolectados y explotados por los sistemas de informacin de una empresa o negocio en particular.

Caractersticas
Entre las principales caractersticas de los sistemas de base de datos podemos mencionar: y Independencia lgica y fsica de los datos. y Redundancia mnima. y Acceso concurrente por parte de mltiples usuarios. y Integridad de los datos. y Consultas complejas optimizadas. y Seguridad de acceso y auditora. y Respaldo y recuperacin. y Acceso a travs de lenguajes de programacin estndar.

Sistema de Gestin de Base de Datos (SGBD)


Los Sistemas de Gestin de Base de Datos (en ingls DataBase Management System) son un tipo de software muy especfico, dedicado a servir de interfaz entre la base de datos, el usuario y las aplicaciones que la utilizan. Se compone de un lenguaje de definicin de datos, de un lenguaje de manipulacin de datos y de un lenguaje de consulta.

TIPOS DE RELACIONES
Relacin identificadora y no identificadora
Relaciones Identificadores

 Las llaves primarias de la entidad origen pasa a formar parte de la entidad destino.  Se representa con lnea continua.  Las llaves primarias tienen algunos atributos y al relacionarse con otra entidad la llave primaria sigue amentando.  Cuando usamos relaciones identificadoras las llaves primarias se van haciendo ms grandes.
Relaciones no Identificadoras

 Las llaves primarias de la entidad origen no pasan a formar parte de la entidad destino.  Se representa con lnea punteada.  Las llaves primarias solo tienen un atributo.

GRADOS DE NORMALIZACION
Existen bsicamente tres niveles de normalizacin: Primera forma normal, segunda forma normal, tercera forma normal. Cada una de estas formas tiene sus propias reglas. Cuando una base de datos se conforma a un nivel, se considera normalizada a esa forma de normalizacin. Por ejemplo una base de datos cumple con todas las reglas del segundo nivel de normalizacin, se considera que la base de datos est en la segunda forma normal. No siempre es buena idea tener una base de datos conformada en el nivel ms alto de normalizacin, esto puede llevar a un nivel de complejidad que pudiera ser evitado si estuviera en un nivel ms bajo de normalizacin. En general el nivel apropiado de normalizacin depender del diseo de cada base de datos.

PRIMERA FORMA NORMAL


La primera forma normal establece que las columnas repetidas deben eliminarse y colocarse en tablas separadas, esta es una regla muy fcil de seguir. Como un ejemplo podramos considerar el caso en que se tiene una tabla correspondiente a los clientes de una empresa en donde se almacenan datos del cliente y datos correspondientes a los productos que compro el cliente en este caso habran que definir varios campos correspondientes a producto1, producto2, producto3, as la tabla contendra varias columnas repetidas por los que tendramos que crear una tabla aparte para los productos.

S DA F A A
Una r aci n est en 2FN si est en 1FN y si los atri utos que no for an parte de ninguna clave dependen de for a completa de la clave principal. Es decir que no existen dependencias parciales. En otras palabras podramos decir que la segunda forma normal est basada en el concepto de dependencia completamente funcional. Una dependencia funcional es completamente funcional si al eliminar los atributos de X significa que la dependencia no es mantenida, esto es que X, (X { }) -x-> Y. Una dependencia funcional es una dependencia parcial si hay algunos atributos que pueden ser eliminados de X y la dependencia todava se mantiene, esto es X, (X { }) -> Y. Por ejemplo {DNI, ID_PROYECTO} HOR S_TR B JO (con el DNI de un empleado y el ID de un proyecto sabemos cu ntas horas de trabajo por semana trabaja un empleado en dicho proyecto) es completamente dependiente dado que ni DNI HOR S_TR B JO ni ID_PROYECTO HOR S_TR B JO mantienen la dependencia. Sin embargo {DNI, ID_PROYECTO} NOMBRE_EMPLEADO es parcialmente dependiente dado que DNI NOMBRE_EMPLEADO mantiene la dependencia.

A F A A
Una relaci n esta en 3FN si esta en 2FN y adems se debe eliminar y separar cualquier dato que no sea clave. Todos los valores deben identificarse nicament e por la clave.

 A P A D  DA S ip d! !"#!"ci$ SQ


Sentencias de definicin de datos (DDL)
Un lenguaje de definici n de datos (Data DefinitionLanguage, DDL por sus siglas en ingls) es un lenguaje proporcionado por el sistema de gesti n de base de datos que permite a los usuarios de la misma llevar a cabo las tareas de definici n de las estructuras que almacenarn los datos as como de los procedimientos o funciones que permitan consultarlos.

El lenguaje de programacinSQL, admite las siguientes sentencias de definicin: CREATE, DR P y ALTER, cada una de las cuales se puede aplicar a las tablas , vistas , procedimientos almacenados y triggers de la base de datos.

Sentencia DDL Alter procedure Alter table

Createtable Createindex Droptable Dropindex

Objetivo Recompilar un procedimiento almacenado Aadir o redefinir una columna, modificar la asignacin de almacenamiento de una tabla Crear una tabla Crear un ndice Eliminar una tabla y su contenido Eliminar un ndice

Otras que se incluyen dentro del DDL, son GRANT y R EVOKE, los cual es sirven para otorgar permisos o quitarlos, ya sea a usuarios especficos o a un rol creado dentro de la base de datos.

Sentenci

e manipulaci n de datos (DML

DML son las siglas de Data ManipulationLanguage y se refiere a los comandos que permiten a un usuario manipular los datos en un repositorio, es decir, aadir, consultar, borrar o actualizar. En SQL los comandos SELECT, INSERT, UPDATE y DELETE son comandos DML. SELECT Utilizado para consultar registros de una base datos que satisfagan un criterio determinado. INSERT Utilizado para insertar registros en una tabla. UPDATE Utilizado para modificar los valores de los campos y registros en tabla. DELETE Utilizado para borrar registros de una tabla. Otras rdenes como: COMMITo ROLLBACK, las cuales sirven para validar o deshacer los cambios dentro de una transaccin, estn en el lmite de lo que podemos considerar rdenes DML de SQL puesto que no inciden en la manipulacin o consulta de datos pero s en el proceso en que esto se realiza. Ejemplo: 1. Cree la tabla provincia con los siguientes atributos: Cod_prov, nom_prov, desc_prov. CREATE TABLE PR OVINCIA ( COD_PR O NUMBER NOT NULL, NOM_PR O VARC AR 2(20), DESC_PROV VARC AR2(20), CONSTRAINT PROVINCIA_PK PRIMAR KEY ( COD_PRO ));

2. Cree la tabla estudiante con los siguientes atributos: Cod_estudiante, cod_prov, nom_estudiante, telf_estudiante. CREATE TABLE ESTUDIANTE ( COD_ESTUDIANTE NUMBER NOT NULL, COD_PR O NUMBER, NOM_ESTUDIANTE VARC AR 2(20), TELF_ESTUDIANTE VARC AR 2(20), CONSTRAINT PROVINCIA_PK PRIMAR Y KEY (COD_ESTUDIANTE ) ); Para establecer la relacin de uno a muchos de la tabla provincia hacia estudiante utilizamos la siguiente instruccin SQL: ALTER TABLE ESTUDIANTE ADD ( FOR EKIGN KEY (COD_PRO) REFER ENCES PR OVINCIA); 3. Inserte datos en las tablas provincia y estudiantes haciendo uso de la clusulainsert. INSERT INTO provincia (cod_pro, nom_pro, desc_prov) VALUES (001,'PIC INC A',''); INSERT INTO provincia (cod_pro, nom_pro, desc_prov) VALUES (002,'GUAYAS',''); INSERT INTO ESTUDIANTE (cod_estudiante, cod_pro, nom_estudiante, telf_estudiante) VALUES (101,001,'PEDR O','09876543'); INSERT INTO ESTUDIANTE (cod_estudiante, cod_pro, nom_estudiante, telf_estudiante) VALUES (102,001,'JUAN','098888098'); INSERT INTO ESTUDIANTE (cod_estudiante, cod_pro, nom_estudiante, telf_estudiante) VALUES (103,002,'ANDR ES','0977777098'); 4. Actualice el nmero de telfono del estudiante con cdigo 103 update estudiante settelf_estudiante='11111111' wherecod_estudiante=103; 5. Borre todos los datos de los estudiantes de nombre Andrs delete * from estudiante wherenom_estudiante=ANDR ES;

Ejercicios 1. Escribir la instruccin SQL que presente en pantalla todos los datos de los empleados que ganan entre 1000 y 2500 y que trabajan en el departamento 10 y 30. Select * from emp where sal BETWEEN 1000 and 2500 and (deptno=10 ordeptno=30); Observacin: Ntese que la presencia de parntesis en la clausula and es necesaria puesto que esta tiene mayor precedencia que la clusulaor. La consulta anterior se puede realizar tambin usando la clausula in que funciona de forma similar a la clusulaor. select * from emp where sal BETWEEN 1000 and 2500 anddeptno in(10,30);

2. Repetir la misma instruccin anterior pero presentar los datos ordenados en forma ascendente por departamento y descendente por salario. select * from emp where sal BETWEEN 1000 and 2500 anddeptno in(10,30) order by deptnoasc, saldesc;

Nota: La palabra asc de ascendente puede ser omitida puesto que es el valor por defecto.

3. Escribir la instruccin SQL que presente en pantalla el nombre del empleado, la comisin y valor total que gana entre salario y comisin cada empleado. Select ename, sal, comm, sal+nvl(comm,0) from emp;

FUNCIONES DE AGREGACION
y Avg() Devuelve un valor que es el promedio de todos los valores vlidos y que no estn en blanco de campo. Selectavg(sal) from emp; AVG(SAL) ---------------------2073,214285714285714285714285714285714286 y Max() Devuelve el valor vlido ms alto del campo. select max (sal) from emp; MA (SAL) ---------------------5000

y Min() Devuelve el valor vlido ms pequeo y que no est en blanco de campo. select min (sal) from emp; MIN(SAL) ---------------------800 y Count() Devuelve el nmero de valores vlidos y que no estn en blanco de campo. select count (*) from emp; COUNT(*) ---------------------14 y Sum() Devuelve el total de valores vlidos y que no estn en blanco de campo. select sum (sal) from emp; SUM(SAL) ---------------------29025 y Variance() Devuelve la varianza de una muestra representada por una serie de valores que no estn en blanco de campo. select variance (sal) from emp; VARIANCE(SAL) ---------------------1398313,87362637362637362637362637362637 y Stddev() Devuelve la desviacin estndar de una muestra representada por una serie de valores que no estn en blanco de campo. Selectstddev (sal) from emp; STDDEV(SAL) ---------------------1182,503223516271699458653359613061928508

USO DE LA CLAUSULA GROUP BY


Agrupa los registros similares siempre y cuando sean del mismo atributo. En el groupby van todos los atributos que estn en el select y que no tengan ninguna funcin que tenga una apli cacin de agregacin. Ejemplo: Escribir la instruccin SQL que calcule el sueldo promedio que ganan los empleados pero sin usar la funcin avg(). select sum(sal)/count(empno) from emp; SUM(SAL)/COUNT(EMPNO) ---------------------2073,214285714285714285714285714285714286 Observacin: Selectdeptnofromemp; 14 registros Select sum(sal) from emp; 1 registro Selectdeptno, sum(sal) fromemp; Se produce un error (no es posible match)

Sin funcin de agregacin Funcin de agregacin Para evitar este inconveniente se debe hacer uso de la funcinGroupby , en esta funcin deben ir al menos todos los atributos que no contienen funcin de agregacin .(Pueden ir mas) De esta manera la instruccin anterior debe ser escrita de la siguiente manera: Select deptno, sum(sal) from emp group by deptno; DEPTNO SUM(SAL) ---------------------- ---------------------30 9400 20 10875 10 8750 Esta instruccin muestra el total de salarios que se paga en cada departamento.

10

Ejercicios: 1. Escribir la instruccin SQL que presente en pantalla la suma total de salarios, el sueldo mnimo, el sueldo mximo y el sueldo promedio que se paga en cada uno de los departamentos. Select deptno, sum(sal), min(sal),max(sal),avg(sal) from empgroup by deptno;

2. Escribir la instruccin SQL que presente en pantalla el nmero de empleados que existe por departamento y el ingreso total que reciben los empleados de cada departamento durante un ao. Selectdeptno, count(*), sum(sal)*12 Fromemp group by deptno;

DEPTNO COUNT(*) SUM(SAL)*12 ---------------------- ---------------------- ---------------------30 6 112800 20 5 130500 10 3 105000 3. Escribir la instruccin SQL que presente en pantalla el nmero de personas que desempea cada uno de los trabajos en la empresa. select job, count(*) from emp group by job; JOB COUNT(*) --------- ---------------------CLERK 4 SALESMAN 4 PRESIDENT 1 MANAGER 3 ANALYST 2

11

4. Cuantos empleados existen en cada departamento y que desempeen un mismo trabajo. Select deptno,job, count(*) from emp group by deptno, job; DEPTNO JOB COUNT(*) ---------------------- --------- ---------------------20 CLER K 2 30 SALESMAN 4 20 MANAGER 1 30 CLER K 1 10 PR ESIDENT 1 30 MANAGER 1 10 CLER K 1 10 MANAGER 1 20 ANALYST 2 5. Escribir la instruccin SQL que presente en pantalla la desviacin estndar del salario que reciben los empleados. Select stddev(sal) from emp; STDDEV (SAL) ---------------------1182,503223516271699458653359613061928508

6. Escribir la instruccin SQL que presente en pantalla el nmero de empleados que realice el trabajo de obrero( CLERK) en cada uno de los departamentos. Select deptno, count (*) From emp Where job='CLERK' Group by deptno; DEPTNO COUNT (*) ---------------------- ---------------------30 1 20 2 10 1

12

USO DE LA CLAUSULA HAVING


Trabaja sobre una tabla temporal que se crea cuando se utiliza el groupby es igual que el where y solo se utiliza cuando utilizamos groupby. En el where no se puede utilizar funciones de agregacin ya que trabaja en la tabla original mientras que con having se trabaja en la tabla temporal por lo que se puede utilizar cualquier funcin de agregacin Ejemplo: Escribir la instruccin SQL que presente en pantalla el nmero de empleados que tiene cada departamento de aquellos departamentos que tienen ms de 4 empleados. Selectdeptno, count(*) Fromemp group by deptno having count(*)>4; DEPTNO COUNT (*) ---------------------- ---------------------30 6 20 5 Observacin: La instruccin SQL anterior sin la clusulahaving: Selectdeptno, count(*) Fromemp group by deptno; DEPTNO COUNT(*) ---------------------- ---------------------30 6 20 5 10 3 Esta consulta crea una tabla temporal con el nmero de empleados de cada departamento, para filtrar datos o presentar datos de esta tabla temporal que cumplan una determinada condicin se usa la clusulahaving, como se puede apreciar en el ejercicio 7, en donde se usa la clusulahaving presentando solo los departamentos que tienen ms de 4 empleados. Con la clusulahaving se puede hacer uso de cualquiera de las funciones de agregacin vistas anteriormente.

13

La clusulawhereacta de igual manera filtrando datos pero que estn sobre la tabla original, con la clusulawhere no podemos hacer uso de funciones de agregacin. Ejercicios 1. Escribir la instruccin SQL que presente en pantalla el nmero de obreros (CLERK) que existe por departamento de todos aquellos departamentos que tengan ms de 1 obrero. Selectdeptno,job, count(*) fromemp where job='CLER K' group by deptno, job having count(*)>1; DEPTNO JOB COUNT(*) ---------------------- --------- ---------------------20 CLER K 2 2. Escribir la instruccin SQL que presente en pantalla el ingreso total mensual que ganan los empleados de cada departamento de aquellos departamentos que ganan ms de 10000 dlares. Selectdeptno,sum (sal+nvl(comm,0)) fromemp group by deptno having sum (sal+nvl(comm,0))>10000; DEPTNO SUM(SAL+NVL(COMM,0)) ---------------------- ---------------------30 11600 20 10875 3. Escribir la instruccin SQL que presente en pantalla el ingreso total mensual que ganan los empleados de cada departamento de aquellos departamentos que ganan ms de 5000 dlares considerando solamente a los manager, presidentes, salesman. Selectdeptno,sum (sal+nvl(comm,0)) Fromemp where job in ('M ANAGER','PRESIDENT','SALESMAN') group by deptno having sum (sal+nvl(comm,0))>5000; DEPTNO SUM(SAL+NVL(COMM,0)) ---------------------- ---------------------30 10650 10 7450

14

SELECT ANIDADOS
Los select simplemente anidados trabajan desde el select interno hasta el select externo. Los select internos pasan los datos a los select externos donde el select externo es ejecutado. En el where se hace operaciones con datos similares es decir tienen que ser del mismo tipo. Ejemplo: Escribir la instruccin SQL que presente en pantalla todos los datos de los empleados que trabajan en la ciudad de DALLAS. En este caso se puede realizar la consulta en dos pasos: y Obteniendo primero el deptno del departamento de la ciudad de DALLAS:

Select deptno from dept where loc= 'DALLAS'; DEPTNO ---------------------20 y Seleccionamos los empleados que estn asociados con este deptno: Select * from emp wheredeptno=20;

La consulta anterior puede ser realizada en un solo paso: Select * from emp wheredeptno=(select deptno from deptwhere loc='DALLAS');

15

A este tipo de consulta se le denomina con select anidado puesto que se utiliza el resultado que devuelve un selectpara utilizarlo con otro en una misma consulta.

Ejercicios: 1. Escribir la instruccin SQL que presente en pantalla todos los datos de los empleados que desempean el mismo trabajo que realizan los empleados del departamento 10. select * from emp where job in (select job from empwhere deptno=10);

2. Escribir la instruccin SQL que presente en pantalla todos los datos de los empleados de aquellos departamentos que tienen ms de 4 empleados. select * from emp wheredeptno in (select deptno from emp group by deptno having count(*)>4);

Nota: Los select se ejecutan desde el mas interno al ms externo

16

3. Escribir la instruccin SQL que presente en pantalla todos los datos de aquellos empleados que ganan el mximo salario de la empresa. Select * from emp Where sal in (select max(sal) from emp);

4. Escribir la instruccin SQL que presente en pantalla todos los datos del empleado que es el ms nuevo de la empresa.

Select * fromemp Where hiredate in (select max(hiredate) from emp);

5. Escribir la instruccin SQL que presente en pantalla todos los datos del empleado que es el ms antiguo de la empresa. Select * fromemp Where hiredate in (select min(hiredate) from emp);

6. Escribir la instruccin SQL que presente en pantalla todos los datos de los empleados que ganan un salario superior al salario promedio de la empresa. select * from emp wheresal> (select avg(sal) from emp);

17

7.

Escribir la instruccin SQL que presente en pantalla todos los datos de los empleados que ganan ms que todos los empleados del departamento 20 individualmente.

select * from emp wheresal> (select max(sal) from emp wheredeptno=20); Otra forma de obtener el mismo resultado: select * from emp wheresal>all (select sal from emp wheredeptno=20);

8. Escribir la instruccin SQL que presente en pantalla todos los datos de los empleados que ganan un salario mayor a cualquiera de los salarios ganan los empleados del departamento 10. select * from emp wheresal> (select min(sal) from emp wheredeptno=10); Otra forma de obtener el mismo resultado: select * from emp wheresal>any (select sal from emp wheredeptno=10);

18

Nota: y La expresin all es equivalente a un and puesto que debe cumplirse la condicin para todos los datos que devuelve una consulta, en el ejemplo anterior ejercicio 7:

select * from emp wheresal>all (select sal from emp wheredeptno=20); El select interno: Selectsal from emp wheredeptno=20 devuelve como resultados: SAL ---------------------800 2975 3000 1100 3000 Al hacer uso de la clusulaall el select externo sera equivalente a: Sal>800 and sal>2975 and sal>3000 and sal>1000 and sal>3000 Y se presentan los datos de los empleados que tienen un salario mayor a todos los salarios que devuelve el select interno en este caso los salario del deptno=20. y De manera similar la clusulaany es equivalente a la clusulaor.

9. Escribir la instruccin SQL que presente en pantalla todos los datos de aquellos empleados que ganan el mximo salario de la empresa. Select * from emp wheresal in (select max(sal) from emp); 10. Escribir la instruccin SQL que presente en pantalla todos los datos del empleado que es el ms nuevo de la empresa. Select * from emp wherehiredate in (select max(hiredate) from emp);

19

11. Escribir la instruccin SQL que presente en pantalla todos los datos del empleado que es el ms antiguo de la empresa. Select * from emp wherehiredate in (select min(hiredate) from emp); 12. Escribir la instruccin SQL que presente en pantalla todos los datos de los empleados que ganan un salario superior al salario promedio de la empresa. Select * from emp wheresal>(select avg(sal) from emp); 13. Escribir la instruccin SQL que presente en pantalla todos los datos de los empleados que ganan ms que todos los empleados del departamento 20 individualmente. Select * from emp Where sal>(select max (sal) from emp wheredeptno=20); Otra forma: Select * from emp Where sal> all (select sal from emp wheredeptno=20); 14. Escribir la instruccin SQL que presente en pantalla todos los datos de los empleados que ganan un salario mayor a cualquiera de los salarios que ganan los empleados del departamento 10. Select * from emp wheresal>(select min(sal) from emp wheredeptno=10); Otra forma: Select * from emp wheresal> any (select sal from emp wheredeptno=10);

15. Escribir la instruccin SQL que presente en pantalla todos los datos de los empleados que ganan el mximo salario en cada uno de sus departamentos. Select * from emp Where (detpno,sal) in (select deptno, max(sal) from emp groupbydeptno);

20

NOTA: La consulta anterior es vlida nicamente en Oracle, pero existe una forma general para obtener el mismo resultado que es vlida en cualquier base de datos, a esto se le conoce con el nombre de SELECT SINCR ONIZADO, a continuacin se da el formato de esta consulta haciendo uso de este tipo select, nicamente como una introduccin, pues ms adelante se estudiara en detalle este tipo de consultas sincronizadas. select * from emp x where sal in (select max(sal) from emp e where e.deptno = x.deptno);

JOINS
JOIN E%UIJOINS
Este tipo de join el ms usado, se usa para unir dos o ms tablas y presentar los registros relacionados entre s.Para este tipo de join es necesario colocar en la clusulawhere de la consulta al menos n-1 condiciones,donde n es el nmero de tablas que se relacionan. Ejercicios. 1. Escribir la instruccin SQL que presente en pantalla todos los datos de los empleados y de sus departamentos. select * from emp e, dept d where e.deptno=d.deptno; NOTA: Se puede hacer uso de alias para las tablas, como en el ejemplo anterior, esto facilita la escritura y simplicidad de la consulta. Una vez que se hace uso de un alias ya no se puede hacer uso del nombre de la tabla, en adelante se usa solamente el alias, en caso contrario se producir un error en la ejecucin. Como una acotacin ms en el ejemplo anterior se us el * para indicar que se seleccionen todos los datos, en este caso como se trata de un join se seleccionan todos los datos de las tablas que se encuentran en el from es decir de la tabla emp y dept. Si se desea seleccionar nicamente los datos de una tabla se debera escribir por ejemplo e.* que mostrara todos los datos de la tabla emp nicamente. 2. Escribir la instruccin SQL que presente en pantalla el cdigo del empleado, el nombre del empleado, el ingreso total que recibe cada empleado y el nombre del departamento al que pertenece de todos los empleado del departamento 20 y 30. Selectempno, ename, sal+nvl(comm,0), dname Fromemp e, dept d where e.deptno=d.deptno ande.deptno in (20,30);

21

3. Escribir la instruccin SQL que presente en pantalla el nombre del departamento y el salario total que se paga por departamento. selectdname, sum(sal+nvl(comm,0)) fromemp e, dept where e.deptno=d.deptno groupbydname; 4. Escribir la instruccin SQL que presente en pantalla todos los datos de los empleados que trabajan en la ciudad de DALLAS. select * from emp e, dept d where e.deptno=d.deptno andd.loc='DALLAS'; 5. Escribir la instruccin que presente en pantalla el nombre del departamento, el nmero de empleados y el ingreso total que reciben los empleados de cada departamento. Selectdname, count(*), sum(sal+nvl(comm,0)) fromemp e, dept d where e.deptno=d.deptno groupbydname; 6. Escribir la instruccin SQL que presente en pantalla el nombre del departamento, el salario promedio del departamento de todos aquellos departamentos que tienen ms de 4 empleados. Selectdname, count(*), avg(sal+nvl(comm,0)) fromemp e, dept d where e.deptno=d.deptno group by dname having count(*)>4; 7. Escribir la instruccin SQL que presente en pantalla todos los datos de los empleados ms el nombre del departamento en el que trabaja, de aquellos empleados que trabajan en el departamento de contabilidad y que son gerentes. select e.*, dname from emp e, dept d where e.deptno=d.deptno anddname='ACCOUNTING' andjob='MANAGER';

22

8. Escribir la instruccin SQL que presente en pantalla todos los datos de los empleados ms el nombre del departamento y la localizacin del departamento de todos aquellos empleados que trabajan en el departamento 10 o en el departamento 30 y que tienen un ingreso total anual superior a 30000 dlares. select e.*,d.dname, d.loc from emp e, dept d where e.deptno=d.deptno ande.deptno in (10,30) and (e.sal + nvl(e.comm,0))*12 >30000; 9. Escribir la instruccin SQL que presente en pantalla todos los datos de los empleados ms el nombre del departamento de todos aquellos empleados que ganen un salario superior al salario promedio de la empresa. select e.*, d.dname from emp e, dept d where e.deptno=d.deptno andsal>(select avg(sal) from emp); NOTA: Para obtener en la consulta el salario promedio de la empresa se puede colocar un select anidado. select e.*, d.dname, (select avg(sal) from emp) salario_promedio fromemp e, dept d where e.deptno=d.deptno andsal>(select avg(sal) from emp);

SELECT SINCRONIZADOS
Llamados tambin select anidados correlacionados, el select anidado interno hace referencia a la tabla de afuera es decir:

 El select interno necesita del dato externo  El select externo necesita del dato interno
Los select correlacionados no se ejecutan solos es decir el select interno depende del select externo asi como el select externo depende del select interno a diferencia de los select simplemente anidados se pueden ejecutar por si solos.

23

Ejercicios 1. Escribir la instruccin SQL que presente en pantalla todos los datos de los empleados ms el nombre del departamento de todos aquellos empleados que ganan el salario mximo de su departamento. select e.*, dname from emp e, dept d where e.deptno=d.deptno andsal =(select max(sal) from emp wheredeptno=e.deptno); 2. Escribir la instruccinsql que presente en pantalla todos los datos de los empleados ms el nombre del departamento de aquel departamento que tenga el mayor nmero de empleados. Esta consulta funcin nicamente en el R GBD ORACLE: Select deptno from emp Group by deptno Having count(*)>= all(Select cont(*) from emp Groupbydeptno) Funciona para todas las demas bases de datos: Select e.* d.dname from emp e, dept d Where e. deptno=d.deptno And e.deptno=(Select deptno from emp Group by deptno Having count(*)>= all(select count(*)from emp Groupbydeptno)) 3. Escribir la instruccin sql que presente en pantalla todos los datos de los empleados ms el nombre del departamento del empleado ms antiguo y del empleado ms nuevo. Select e.* from empe,dept d Where e.deptno=d.deptno And empno in (select empno from emp Where hiredate=(select max (hiredate) from emp) Or hiredate = (select min (hiredate) from emp)); Otra forma de hacer: Select e.* d.dname From empe ,dept d Where e.deptno=d.deptno And hiredate in (select max(hiredate)from emp),( select min(hiredate)from emp));

24

4. Escribir la instruccin sql que presente en pantalla todos los datos del departamento ms el valor total de sueldos que se pag por departamento de aquel departamento en el que se pag el mayor valor total de sueldos. Select * from dept Where deptno in (select deptno from emp Group by deptno Having sum(sal)>=all(select sum(sal) from emp groupbydeptno)); El mismo ejercicio anterior pero que la respuesta salga el total del salario. Select e.deptno,d.dname,d.loc,sum(e.sal) from deptd,emp e Where e.deptno=d.deptno Group by e.deptno,d.dname Having e.deptno in (select deptno from emp Group by deptno Having sum(sal)>=all(select sum(sal) from emp groupbydeptno));

5. Escribir la instruccin sql que presente en pantalla todos los datos del empleado ms el nombre del departamento de todos aquellos empleados que tienen un ingreso total anual superior al ingreso total anual de cualquiera de los empleados del departamento 20. Select e.*, d.dname from emp e, dept d Where e.deptno = d.deptno And (sal+nvl(comm,0))*12 > any (select (sal+nvl(com,0))*12 from emp Where deptno=20); 6. Escribir la instruccin sql que presente en pantalla todos los datos del empleado y todos los datos del departamento de todos aquellos empleados que trabajan en la ciudad de NEY YORK y que desepean el trabajo de obrero, Select e.* from emp e, dept d Where e.deptno=d.deptno And loc=NEY YOR K And job = CLER K; 7. Escribir la instruccin sql que presente en pantalla todos los datos del empleado ms el nombre del departamento de todos aquellos empleados que ganan una comisin superior al 20% de su salario. Select e.*, d.dname from emp e, dept d Where e.deptno = d.deptno And comm>(select sal*0.12 from emp x Where e.empno = x.empno);

25

Otra forma sin el uso de select sincronizados Select e.*, d.dname from emp e, dept d Where e.deptno = d.deptno And comm>sal*0.12;

26