Está en la página 1de 27

UNIVERSIDAD CENTRAL DEL ECUADOR

FACULTAD DE INGENIERIA
ESCUELA DE CIENCIAS

ESCUELA DE CIENCIAS

ORACLE
MATERIA BASE DE DATOS II
CECILIA TULCÁN

2009-2010
Ing. Jorge Gordillo
Contenido
Contenido.....................................................................................................................................1
CARACTERISTICAS DE UNA BASE DE DATOS.................................................................................2
Definición de base de datos.....................................................................................................3
Características..........................................................................................................................3
Sistema de Gestión de Base de Datos (SGBD)..........................................................................3
TIPOS DE RELACIONES..................................................................................................................4
Relación identificadora y no identificadora..............................................................................4
GRADOS DE NORMALIZACION.....................................................................................................4
PRIMERA FORMA NORMAL......................................................................................................4
SEGUNDA FORMA NORMAL.....................................................................................................5
TERCERA FORMA NORMAL......................................................................................................5
MANIPULACION DE DATOS..........................................................................................................5
Tipos de sentencias SQL...........................................................................................................5
Sentencias de definición de datos (DDL)..............................................................................5
Sentencias de manipulación de datos (DML).......................................................................6
FUNCIONES DE AGREGACION......................................................................................................9
USO DE LA CLAUSULA GROUP BY...............................................................................................11
USO DE LA CLAUSULA HAVING...................................................................................................14
SELECT ANIDADOS......................................................................................................................16
JOINS..........................................................................................................................................22
JOIN EQUIJOINS......................................................................................................................22
SELECT SINCRONIZADOS............................................................................................................24

1
CARACTERISTICAS DE UNA BASE DE DATOS

Definición 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 informació n
de una empresa o negocio en particular.

Características

Entre las principales características de los sistemas de base de datos podemos


mencionar:
 Independencia ló gica y física de los datos.
 Redundancia mínima.
 Acceso concurrente por parte de mú ltiples usuarios.
 Integridad de los datos.
 Consultas complejas optimizadas.
 Seguridad de acceso y auditoría.
 Respaldo y recuperació n.
 Acceso a través de lenguajes de programació n está ndar.

Sistema de Gestión de Base de Datos (SGBD)

Los Sistemas de Gestió n de Base de Datos (en inglés DataBase Management


System) son un tipo de software muy específico, dedicado a servir de interfaz entre
la base de datos, el usuario y las aplicaciones que la utilizan. Se compone de un
lenguaje de definició n de datos, de un lenguaje de manipulació n de datos y de un
lenguaje de consulta.

2
TIPOS DE RELACIONES

Relación identificadora y no identificadora

Relaciones Identificadores

 Las llaves primarias de la entidad origen pasa a formar parte de la entidad


destino.
 Se representa con línea 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 má s grandes.

Relaciones no Identificadoras

 Las llaves primarias de la entidad origen no pasan a formar parte de la


entidad destino.
 Se representa con línea punteada.
 Las llaves primarias solo tienen un atributo.

GRADOS DE NORMALIZACION

Existen bá sicamente tres niveles de normalizació n:


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 normalizació n. Por ejemplo una
base de datos cumple con todas las reglas del segundo nivel de normalizació n, 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 má s alto de
normalizació n, esto puede llevar a un nivel de complejidad que pudiera ser evitado
si estuviera en un nivel má s bajo de normalizació n. En general el nivel apropiado
de normalizació n dependerá del diseñ o 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 fá cil de seguir.

Como un ejemplo podríamos 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
habrían que definir varios campos correspondientes a producto1, producto2,
producto3, así la tabla contendría varias columnas repetidas por los que
tendríamos que crear una tabla aparte para los productos.

3
SEGUNDA FORMA NORMAL

Una relació n está en 2FN si está en 1FN y si los atributos que no forman parte de
ninguna clave dependen de forma completa de la clave principal. Es decir que no
existen dependencias parciales.

En otras palabras podríamos 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 A de X significa que
la dependencia no es mantenida, esto es que A Є X, (X – {A}) -x-> Y. Una
dependencia funcional es una dependencia parcial si hay algunos atributos
que pueden ser eliminados de X y la dependencia todavía se mantiene, esto
es A Є X, (X – {A}) -> Y.

Por ejemplo {DNI, ID_PROYECTO} HORAS_TRABAJO (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
HORAS_TRABAJO ni ID_PROYECTO HORAS_TRABAJO mantienen la dependencia.
Sin embargo {DNI, ID_PROYECTO} NOMBRE_EMPLEADO es parcialmente
dependiente dado que DNI NOMBRE_EMPLEADO mantiene la dependencia.

TERCERA FORMA NORMAL

Una relació n esta en 3FN si esta en 2FN y ademá s se debe eliminar y separar
cualquier dato que no sea clave. Todos los valores deben identificarse ú nicamente
por la clave.

MANIPULACION DE DATOS

Tipos de sentencias SQL

Sentencias de definición de datos (DDL)

Un lenguaje de definició n de datos (Data DefinitionLanguage, DDL por sus siglas en


inglés) 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 almacenará n los datos así como de los procedimientos o funciones
que permitan consultarlos.

4
El lenguaje de programació nSQL, admite las siguientes sentencias de definició n:
CREATE, DROP 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 Objetivo


Alter procedure Recompilar un procedimiento
almacenado
Alter table Añ adir o redefinir una columna,
modificar la asignació n de
almacenamiento de una tabla
Createtable Crear una tabla
Createindex Crear un índice
Droptable Eliminar una tabla y su contenido
Dropindex Eliminar un índice

Otras que se incluyen dentro del DDL, son GRANT y REVOKE, los cuales sirven para
otorgar permisos o quitarlos, ya sea a usuarios específicos o a un rol creado dentro
de la base de datos.

Sentencias de manipulación de datos (DML)

DML son las siglas de Data Manipulation Language y se refiere a los comandos que
permiten a un usuario manipular los datos en un repositorio, es decir, añ adir,
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 transacció n, está n en el límite de lo que
podemos considerar ó rdenes DML de SQL puesto que no inciden en la
manipulació n 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 PROVINCIA


(
COD_PRO NUMBER NOT NULL,
NOM_PRO VARCHAR2(20),
DESC_PROV VARCHAR2(20),
CONSTRAINT PROVINCIA_PK PRIMARY KEY (COD_PRO ));

5
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_PRO NUMBER,
NOM_ESTUDIANTE VARCHAR2(20),
TELF_ESTUDIANTE VARCHAR2(20),
CONSTRAINT PROVINCIA_PK PRIMARY KEY (COD_ESTUDIANTE )
);

Para establecer la relació n de uno a muchos de la tabla provincia hacia estudiante


utilizamos la siguiente instrucció n SQL:

ALTER TABLE ESTUDIANTE


ADD ( FOREKIGN KEY (COD_PRO)
REFERENCES PROVINCIA);

3. Inserte datos en las tablas provincia y estudiantes haciendo uso de la


clá usula insert.

INSERT INTO provincia (cod_pro, nom_pro, desc_prov) VALUES


(001,'PICHINCHA','');
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,'PEDRO','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,'ANDRES','0977777098');

4. Actualice el nú mero de teléfono del estudiante con có digo 103

update estudiante
set telf_estudiante='11111111'
where cod_estudiante=103;

5. Borre todos los datos de los estudiantes de nombre Andrés

delete * from estudiante where nom_estudiante=’ANDRES’;

6
Ejercicios

1. Escribir la instrucció n 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 or deptno=30);

Observació n:
Nó tese que la presencia de paréntesis en la clausula and es necesaria puesto que
esta tiene mayor precedencia que la clá usula or.
La consulta anterior se puede realizar también usando la clausula in que funciona
de forma similar a la clá usula or.

select * from emp


where sal BETWEEN 1000 and 2500
and deptno in(10,30);

2. Repetir la misma instrucció n anterior pero presentar los datos ordenados


en forma ascendente por departamento y descendente por salario.

select * from emp


where sal BETWEEN 1000 and 2500
and deptno in(10,30)
order by deptno asc, sal desc;

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

7
3. Escribir la instrucció n SQL que presente en pantalla el nombre del
empleado, la comisió n y valor total que gana entre salario y comisió n cada
empleado.

Select ename, sal, comm, sal+nvl(comm,0) from emp;

FUNCIONES DE AGREGACION

 Avg()
Devuelve un valor que es el promedio de todos los valores vá lidos y que no estén
en blanco de campo.

Select avg(sal) from emp;

AVG(SAL)
----------------------
2073,214285714285714285714285714285714286

 Max()
Devuelve el valor vá lido má s alto del campo.

select max (sal) from emp;

MAX(SAL)
----------------------
5000

8
 Min()
Devuelve el valor vá lido má s pequeñ o y que no esté en blanco de campo.

select min (sal) from emp;

MIN(SAL)
----------------------
800

 Count()
Devuelve el nú mero de valores vá lidos y que no estén en blanco de campo.

select count (*) from emp;

COUNT(*)
----------------------
14

 Sum()
Devuelve el total de valores vá lidos y que no estén en blanco de campo.

select sum (sal) from emp;

SUM(SAL)
----------------------
29025

 Variance()
Devuelve la varianza de una muestra representada por una serie de valores que no
está n en blanco de campo.

select variance (sal) from emp;

VARIANCE(SAL)
----------------------
1398313,87362637362637362637362637362637

 Stddev()
Devuelve la desviació n está ndar de una muestra representada por una serie de
valores que no está n en blanco de campo.

Select stddev (sal) from emp;

STDDEV(SAL)
----------------------
1182,503223516271699458653359613061928508

9
USO DE LA CLAUSULA GROUP BY

Agrupa los registros similares siempre y cuando sean del mismo atributo. En el
group by van todos los atributos que estén en el select y que no tengan ninguna
funció n que tenga una aplicació n de agregació n.

Ejemplo:
Escribir la instrucció n SQL que calcule el sueldo promedio que ganan los
empleados pero sin usar la funció n avg().
select sum(sal)/count(empno) from emp;

SUM(SAL)/COUNT(EMPNO)
----------------------
2073,214285714285714285714285714285714286

Observació n:

Select deptno from emp;⇨ 14 registros


Select sum(sal) from emp; ⇨ 1 registro
Select deptno, sum(sal) from emp; ⇨ Se produce un error (no es posible match)

Sin funció n de agregació n Funció n de agregació n

Para evitar este inconveniente se debe hacer uso de la funció n Group by , en esta
funció n deben ir al menos todos los atributos que no contienen funció n de
agregació n .(Pueden ir mas)

De esta manera la instrucció n 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 instrucció n muestra el total de salarios que se paga en cada departamento.

10
Ejercicios:

1. Escribir la instrucció n SQL que presente en pantalla la suma total de


salarios, el sueldo mínimo, el sueldo má ximo y el sueldo promedio que se
paga en cada uno de los departamentos.

Select deptno, sum(sal), min(sal),max(sal),avg(sal) from emp group by deptno;

2. Escribir la instrucció n SQL que presente en pantalla el nú mero de


empleados que existe por departamento y el ingreso total que reciben los
empleados de cada departamento durante un añ o.

Select deptno, count(*), sum(sal)*12


From emp group by deptno;

DEPTNO COUNT(*) SUM(SAL)*12


---------------------- ---------------------- ----------------------
30 6 112800
20 5 130500
10 3 105000

3. Escribir la instrucció n SQL que presente en pantalla el nú mero de personas


que desempeñ a 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 desempeñ en un
mismo trabajo.

Select deptno, job, count(*) from emp


group by deptno, job;

DEPTNO JOB COUNT(*)


---------------------- --------- ----------------------
20 CLERK 2
30 SALESMAN 4
20 MANAGER 1
30 CLERK 1
10 PRESIDENT 1
30 MANAGER 1
10 CLERK 1
10 MANAGER 1
20 ANALYST 2

5. Escribir la instrucció n SQL que presente en pantalla la desviació n está ndar


del salario que reciben los empleados.
Select stddev(sal) from emp;

STDDEV (SAL)
----------------------
1182,503223516271699458653359613061928508

6. Escribir la instrucció n SQL que presente en pantalla el nú mero 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 group by es igual
que el where y solo se utiliza cuando utilizamos group by. En el where no se
puede utilizar funciones de agregació n ya que trabaja en la tabla original mientras
que con having se trabaja en la tabla temporal por lo que se puede utilizar
cualquier funció n de agregació n

Ejemplo:

Escribir la instrucció n SQL que presente en pantalla el nú mero de empleados que


tiene cada departamento de aquellos departamentos que tienen má s de 4
empleados.

Select deptno, count(*)


From emp
group by deptno
having count(*)>4;

DEPTNO COUNT (*)


---------------------- ----------------------
30 6
20 5

Observació n:

La instrucció n SQL anterior sin la clá usula having:

Select deptno, count(*)


From emp
group by deptno;

DEPTNO COUNT(*)
---------------------- ----------------------
30 6
20 5
10 3

Esta consulta crea una tabla temporal con el nú mero de empleados de cada
departamento, para filtrar datos o presentar datos de esta tabla temporal que
cumplan una determinada condició n se usa la clá usula having, como se puede
apreciar en el ejercicio 7, en donde se usa la clá usula having presentando solo los
departamentos que tienen má s de 4 empleados.

Con la clá usula having se puede hacer uso de cualquiera de las funciones de
agregació n vistas anteriormente.

13
La clá usula where actú a de igual manera filtrando datos pero que está n sobre la
tabla original, con la clá usula where no podemos hacer uso de funciones de
agregació n.

Ejercicios

1. Escribir la instrucció n SQL que presente en pantalla el nú mero de obreros


(CLERK) que existe por departamento de todos aquellos departamentos que
tengan má s de 1 obrero.

Select deptno, job, count(*)


from emp
where job='CLERK'
group by deptno, job
having count(*)>1;

DEPTNO JOB COUNT(*)


---------------------- --------- ----------------------
20 CLERK 2

2. Escribir la instrucció n SQL que presente en pantalla el ingreso total


mensual que ganan los empleados de cada departamento de aquellos
departamentos que ganan má s de 10000 dó lares.

Select deptno,sum (sal+nvl(comm,0))


from emp
group by deptno
having sum (sal+nvl(comm,0))>10000;

DEPTNO SUM(SAL+NVL(COMM,0))
---------------------- ----------------------
30 11600
20 10875

3. Escribir la instrucció n SQL que presente en pantalla el ingreso total


mensual que ganan los empleados de cada departamento de aquellos
departamentos que ganan má s de 5000 dó lares considerando solamente a
los manager, presidentes, salesman.
Select deptno, sum (sal+nvl(comm,0))
From emp
where job in ('MANAGER','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 instrucció n 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:

 Obteniendo primero el deptno del departamento de la ciudad de DALLAS:

Select deptno from dept


where loc= 'DALLAS';

DEPTNO
----------------------
20
 Seleccionamos los empleados que está n asociados con este deptno:

Select * from emp


where deptno=20;

La consulta anterior puede ser realizada en un solo paso:

Select * from emp


where deptno=(select deptno from dept where 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 instrucció n SQL que presente en pantalla todos los datos de los
empleados que desempeñ an el mismo trabajo que realizan los empleados
del departamento 10.

select * from emp


where job in (select job from emp where deptno=10);

2. Escribir la instrucció n SQL que presente en pantalla todos los datos de los
empleados de aquellos departamentos que tienen má s de 4 empleados.
select * from emp
where deptno in (select deptno from emp
group by deptno
having count(*)>4);

Nota:
Los select se ejecutan desde el mas interno al má s externo

16
3. Escribir la instrucció n SQL que presente en pantalla todos los datos de
aquellos empleados que ganan el má ximo salario de la empresa.

Select * from emp


Where sal in (select max(sal) from emp);

4. Escribir la instrucció n SQL que presente en pantalla todos los datos del
empleado que es el má s nuevo de la empresa.

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

5. Escribir la instrucció n SQL que presente en pantalla todos los datos del
empleado que es el má s antiguo de la empresa.

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

6. Escribir la instrucció n 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


where sal> (select avg(sal) from emp);

17
7. Escribir la instrucció n SQL que presente en pantalla todos los datos de los
empleados que ganan má s que todos los empleados del departamento 20
individualmente.

select * from emp


where sal> (select max(sal) from emp
where deptno=20);

Otra forma de obtener el mismo resultado:

select * from emp


where sal>all (select sal from emp
where deptno=20);

8. Escribir la instrucció n 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


where sal> (select min(sal) from emp
where deptno=10);

Otra forma de obtener el mismo resultado:

select * from emp


where sal>any (select sal from emp
where deptno=10);

18
Nota:

 La expresió n all es equivalente a un and puesto que debe cumplirse la


condició n para todos los datos que devuelve una consulta, en el ejemplo
anterior ejercicio 7:

select * from emp


where sal>all (select sal from emp
where deptno=20);

El select interno:

Select sal from emp


where deptno=20

devuelve como resultados:

SAL
----------------------
800
2975
3000
1100
3000

Al hacer uso de la clá usula all el select externo sería 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.

 De manera similar la clá usula any es equivalente a la clá usula or.

9. Escribir la instrucció n SQL que presente en pantalla todos los datos de


aquellos empleados que ganan el má ximo salario de la empresa.

Select * from emp


where sal in (select max(sal) from emp);

10. Escribir la instrucció n SQL que presente en pantalla todos los datos del
empleado que es el má s nuevo de la empresa.

Select * from emp


where hiredate in (select max(hiredate) from emp);

19
11. Escribir la instrucció n SQL que presente en pantalla todos los datos del
empleado que es el má s antiguo de la empresa.

Select * from emp


where hiredate in (select min(hiredate) from emp);

12. Escribir la instrucció n 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


where sal>(select avg(sal) from emp);

13. Escribir la instrucció n SQL que presente en pantalla todos los datos de los
empleados que ganan má s que todos los empleados del departamento 20
individualmente.

Select * from emp


Where sal>(select max (sal) from emp
where deptno=20);

Otra forma:

Select * from emp


Where sal> all (select sal from emp
where deptno=20);

14. Escribir la instrucció n 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


where sal>(select min(sal) from emp
where deptno=10);

Otra forma:

Select * from emp


where sal> any (select sal from emp
where deptno=10);

15. Escribir la instrucció n SQL que presente en pantalla todos los datos de los
empleados que ganan el má ximo salario en cada uno de sus departamentos.

Select * from emp


Where (detpno,sal) in (select deptno, max(sal) from emp
group by deptno);

20
NOTA:
La consulta anterior es vá lida ú nicamente en Oracle, pero existe una forma general
para obtener el mismo resultado que es vá lida en cualquier base de datos, a esto se
le conoce con el nombre de SELECT SINCRONIZADO, a continuació n se da el
formato de esta consulta haciendo uso de este tipo select, ú nicamente como una
introducció n, pues má s 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 EQUIJOINS

Este tipo de join el má s usado, se usa para unir dos o má s tablas y presentar los
registros relacionados entre sí.Para este tipo de join es necesario colocar en la
clá usula where de la consulta al menos n-1 condiciones,donde n es el nú mero de
tablas que se relacionan.
Ejercicios.

1. Escribir la instrucció n 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 ejecució n.

Como una acotació n má s 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 debería escribir
por ejemplo e.* que mostraría todos los datos de la tabla emp ú nicamente.

2. Escribir la instrucció n SQL que presente en pantalla el có digo 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.

Select empno, ename, sal+nvl(comm,0), dname


From emp e, dept d
where e.deptno=d.deptno
and e.deptno in (20,30);

21
3. Escribir la instrucció n 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
group by dname;

4. Escribir la instrucció n 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 instrucció n que presente en pantalla el nombre del


departamento, el nú mero de empleados y el ingreso total que reciben los
empleados de cada departamento.

Select dname, count(*), sum(sal+nvl(comm,0))


from emp e, dept d
where e.deptno=d.deptno
group by dname;

6. Escribir la instrucció n SQL que presente en pantalla el nombre del


departamento, el salario promedio del departamento de todos aquellos
departamentos que tienen má s de 4 empleados.

Select dname, count(*), avg(sal+nvl(comm,0))


from emp e, dept d
where e.deptno=d.deptno
group by dname
having count(*)>4;

7. Escribir la instrucció n SQL que presente en pantalla todos los datos de los
empleados má s 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
and dname='ACCOUNTING'
and job='MANAGER';

22
8. Escribir la instrucció n SQL que presente en pantalla todos los datos de los
empleados má s el nombre del departamento y la localizació n 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 dó lares.

select e.*,d.dname, d.loc from emp e, dept d


where e.deptno=d.deptno
and e.deptno in (10,30)
and (e.sal + nvl(e.comm,0))*12 >30000;

9. Escribir la instrucció n SQL que presente en pantalla todos los datos de los
empleados má s 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
and sal>(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


from emp e, dept d
where e.deptno=d.deptno
and sal>(select avg(sal) from emp);

SELECT SINCRONIZADOS

Llamados también 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 instrucció n SQL que presente en pantalla todos los datos de los
empleados má s el nombre del departamento de todos aquellos empleados
que ganan el salario má ximo de su departamento.

select e.*, dname from emp e, dept d


where e.deptno=d.deptno
and sal =(select max(sal) from emp
where deptno=e.deptno);

2. Escribir la instrucció n sql que presente en pantalla todos los datos de los
empleados má s el nombre del departamento de aquel departamento que
tenga el mayor nú mero de empleados.

Esta consulta funció n ú nicamente en el RGBD ORACLE:

Select deptno from emp


Group by deptno
Having count(*)>= all(Select cont(*) from emp
Group by deptno)

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
Group by deptno))
3. Escribir la instrucció n sql que presente en pantalla todos los datos de los
empleados má s el nombre del departamento del empleado má s antiguo y
del empleado má s nuevo.
Select e.* from emp e,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 emp e , dept d
Where e.deptno=d.deptno
And hiredate in (select max(hiredate)from emp),( select min(hiredate)from emp));

24
4. Escribir la instrucció n sql que presente en pantalla todos los datos del
departamento má s 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
group by deptno));

El mismo ejercicio anterior pero que la respuesta salga el total del salario.
Select e.deptno,d.dname,d.loc,sum(e.sal) from dept d,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
group by deptno));

5. Escribir la instrucció n sql que presente en pantalla todos los datos del
empleado má s 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 instrucció n 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 desepeñ an el trabajo de
obrero,

Select e.* from emp e, dept d


Where e.deptno=d.deptno
And loc=’NEY YORK’
And job = ‘CLERK’;

7. Escribir la instrucció n sql que presente en pantalla todos los datos del
empleado má s el nombre del departamento de todos aquellos empleados
que ganan una comisió n 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

También podría gustarte