oracle sep 05 consultas avanzadas

8
UNIVERSIDAD NACIONAL JOSE FAUSTINO SANCHEZ CARRION FACULTAD DE INGENIERIA ESCUELA ACADEMICO PROFESIONAL DE INGENIERIA INFORMATICA CURSO BASE DE DATOS II SEPARATA Nº 05 CONSULTAS AVANZADAS Y SUB CONSULTAS DOCENTE ING. EDWIN IVAN FARRO PACIFICO HUACHO-LIMA PERU

Upload: jean-pierre-quispe

Post on 27-Dec-2015

31 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Oracle Sep 05 Consultas Avanzadas

UNIVERSIDAD NACIONALJOSE FAUSTINO SANCHEZ CARRION

FACULTAD DE INGENIERIA

ESCUELA ACADEMICO PROFESIONAL DEINGENIERIA INFORMATICA

CURSOBASE DE DATOS II

SEPARATA Nº 05CONSULTAS AVANZADAS Y SUB CONSULTAS

DOCENTEING. EDWIN IVAN FARRO PACIFICO

HUACHO-LIMAPERU

Page 2: Oracle Sep 05 Consultas Avanzadas

Universidad Nacional José Faustino Sánchez Carrión Ing. CIP Edwin Iván Farro Pacífico

Ing. CIP Edwin Iván Farro Pacífico Pag 2

CONSULTAS AVANZADAS

JOIN DE TABLASUn join o consulta correlacionada, permite mostrar datos a partir de múltiples tablas y las muestra enúnico resultado.Pero que sucede si realizamos la siguiente consulta:

SQL> SELECT ename,dname FROM emp,dept;

Obtenemos un producto cartesiano sin ninguna

EQUIJOINRecupera filas de una o más tablas unidas sobre la base de una condición de igualdad en lacláusula WHERE.

Ejemplo 1Listar el nombre del empelado y el nombre al departamento al que pertenece:

SQL> SELECT emp.ename,dept.dname FROM emp ,dept2 WHERE emp.deptno=dept.deptno;

Ó

SQL> SELECT e.ename,d.dname FROM emp e,dept d2 WHERE e.deptno=d.deptno;

Ejemplo 2Listar el código del empleado, nombre, nro de departamento de los que sean vendedores:

SQL> SELECT e.empno,e.ename,d.deptno2 FROM emp e,dept d3 WHERE d.deptno=e.deptno AND e.job='SALESMAN';

NON-EQUIJOINRecupera filas de dos o más tablas teniendo como base una relación diferente a la condición deigualdad en la cláusula WHERE.

EMPempnoenamejobmgrhiredatesalcommdeptno

DEPTdeptnodnameloc

Page 3: Oracle Sep 05 Consultas Avanzadas

Universidad Nacional José Faustino Sánchez Carrión Ing. CIP Edwin Iván Farro Pacífico

Ing. CIP Edwin Iván Farro Pacífico Pag 3

Se utiliza cuando por ejemplo se busca rangos

Ejemplo 3Listar el nombre de los empleados la categoría y a la que pertenecen, de acuerdo al rango en quese encuentra el salario.

SQL>SELECT e.ename as Empleado,s.grade as CategoríaFROM emp e,salgrade sWHERE e.sal BETWEEN s.losal AND s.hisal;

Ejemplo 4Mostrar el nombre del empleado y el salario sólo de aquellos empleados cuyo salario esta en elgrado 3

SQL> SELECT e.ename,e.sal2 FROM emp e,salgrade s3 WHERE (e.sal BETWEEN s.losal AND s.hisal)4 AND s.grade=3

Insertar el siguiente registro:

SQL> INSERT INTO emp(empno,ename)2 VALUES (7999,'SALAS');

JOIN EXTERNOCombina dos o más tablas para recuperar aquellas filas de una tabla que no tienen un relacióndirecta de correspondencia en la otra tabla.Ingresar los siguientes registros

empno ename job mgr hiredate sal comm Detno7950 ROMYNA VENDEDOR 7941 10/05/02 10007951 ANDREA VENDEDOR 11/12/02 1000 2007952 TORIBIA VENDEDOR 7941 20/08/03 10007953 URSULA VENDEDOR 7941 21/09/03 1000 150

Ejemplo 5Mostrar todos los empleados así estos no tengan asociado un número de departamento.

SQL> SELECT e.empno,e.ename,d.deptno,d.dnameFROM emp e,dept dWHERE e.deptno=d.deptno(+)

Ejemplo 6Mostrar todos los departamentos así estos no tengan asociado ningún empelado.

SQL> SELECT e.empno,e.ename,d.deptno,d.dnameFROM emp e,dept dWHERE e.deptno(+)=d.deptno

Nota: (+) se le conoce como operador Outerjoin

Page 4: Oracle Sep 05 Consultas Avanzadas

Universidad Nacional José Faustino Sánchez Carrión Ing. CIP Edwin Iván Farro Pacífico

Ing. CIP Edwin Iván Farro Pacífico Pag 4

AUTOJOINHace un join de una tabla consigo misma como si se trataran de dos tablas diferentes.

Ejemplo 7Mostrar el número , nombre del empleado y cargo, también el número el nombre de su jefe y cargoutilizando alias para las columnas.

SQL> SELECT e.empno cod_emp,e.ename nom_emp,j.empno cod_jefe,j.ename nom_jefeFROM emp j,emp eWHERE e.mgr=j.empnoORDER BY 1,3

PRODUCTO CARTESIANOSe crea cuando se omite un Join en una sentencia SELECT, lo que provoca que Oracle relacionetodas las filas de la primera tabla a todas las filas de la segunda tabla.

Ejemplo 8SQL> SELECT e.empno,e.ename,d.dname

FROM emp e,dept d

NATURAL JOINS (Versión 9i y posteriores)Es un enlace entre dos tablas que comparten el mismo nombre para la columna común. Simplificande manera importante las combinaciones de tablas, eliminando los alias de tablas y los joins decomparación.

Ejercicio 9Listar los nombres de los empleados y el departamento al que pertenecen

SQL> SELECT ename,deptno,dname2 FROM emp NATURAL JOIN dept;

OPERACIONES CON CONJUNTOSCombinan dos o más consultas en un solo resultado. Se cuentan con los siguientes operadores.

UnionUne dos conjuntos de resultados

Ejercicio 10

SQL> SELECT ename2 FROM emp3 WHERE deptno IN (10,30)4 UNION5 SELECT ename6 FROM emp7 WHERE deptno IN (10,20);

Page 5: Oracle Sep 05 Consultas Avanzadas

Universidad Nacional José Faustino Sánchez Carrión Ing. CIP Edwin Iván Farro Pacífico

Ing. CIP Edwin Iván Farro Pacífico Pag 5

IntersectInterfecta dos conjuntos resultados

Ejercicio 11

SQL> SELECT ename2 FROM emp3 WHERE deptno IN (10,30)4 INTERSECT5 SELECT ename6 FROM emp7 WHERE deptno IN (10,20);

MinusResta dos conjuntos de resultados.

Ejercicio 12

SQL> SELECT ename2 FROM emp3 WHERE deptno IN (10,30)4 MINUS5 SELECT ename6 FROM emp7 WHERE deptno IN (10,20);

FUNCIONES DE GRUPOSUM (campo)AVG (campo)MAX (campo)MIN (campo)COUNT (campo)

Ejercicio 13Suma de todos los salarios

SQL> SELECT SUM(sal) FROM emp;

Ejercicio 14Suma de todos los salaries cuyo número de departamento sea 20

SQL> SELECT SUM(sal) FROM emp2 WHERE deptno=20;

Ejercicio 15Listar las suma de los salarios, el mayor y menor salario del departamento 20

Ejercicio 16Contar todos los empleados del departamento 20

Page 6: Oracle Sep 05 Consultas Avanzadas

Universidad Nacional José Faustino Sánchez Carrión Ing. CIP Edwin Iván Farro Pacífico

Ing. CIP Edwin Iván Farro Pacífico Pag 6

Ejercicio 17Contar el número empleados que han comisionado.

Ejercicio 18Listar el promedio de las comisiones

Ejercicio 19Listar el mayor sueldo por cada departamento (sólo con el código)

Ejercicio 20Listar el mayor sueldo por cada departamento (mostrar el nombre del departamento)

Ejercicio 21Listar los sueldos promedio por departamento

Ejercicio 22Listar el número de personas con el mismo cargo

SUB CONSULTASSeleccionan filas de una tabla con una condición que depende de los valores de otra consulta.Una subconsulta puede recuperar un solo valor para completar la condición de la cláusula WHERE,opuede haber una subconsulta multifila que recupera mas de una valor para completar la cláusulaWHERE.Las subconsultas pueden aparecer en la cláusula WHERE de las siguientes sentencias:

SELECT INSERT UPDATE DELETE

Ejercicio 23Empleados que ganan más que smithSQL> select ename,sal from emp

2 where sal>(select sal3 from emp where ename='SMITH');

SQL> select ename,sal from emp2 where sal<(select avg(sal)3 from emp) and sal>(select min(sal)4 from emp where deptno=10);

Page 7: Oracle Sep 05 Consultas Avanzadas

Universidad Nacional José Faustino Sánchez Carrión Ing. CIP Edwin Iván Farro Pacífico

Ing. CIP Edwin Iván Farro Pacífico Pag 7

Ejercicio 24Quienes trabajan en el mismo departamento que SmithSQL> select ename from emp where deptno=(select deptno

2 from emp where ename='SMITH') and ename<>'SMITH';

Operadores:IN : Busca que debe ser igual a alguno de los elementos de la subconsultaANY : mayor que el menorALL : mayor que el mayor

Ejercicio 25Quienes trababajn en el departamento que tienen el sueldo más altoSQL> select ename

2 from emp3 where deptno in4 (select deptno5 from emp6 where sal=(select max(sal) from emp));

Ejercicio 26Empleados que ganan más que todos los vendedores.SQL> select ename

2 from emp3 where sal>all4 (select sal from emp5 where job='SALESMAN');

Ejercicio 27Quienes son los que ganan más que el vendedor que gana menos.SQL> select ename

2 from emp3 where sal>any(select sal4 from emp5 where job='SALESMAN');

Ejercicio 28Los empleados que nos son jefes.SQL> select ename

2 from emp3 where empno not in(select MGR from emp4 where MGR is not null);

Ejercicio 29El empleado que trabaja en el mismo departamento de un empleado que su nombre tenga S.SQL> select ename from emp

2 where deptno in3 (select deptno from emp4 where ename like '%S%');

Page 8: Oracle Sep 05 Consultas Avanzadas

Universidad Nacional José Faustino Sánchez Carrión Ing. CIP Edwin Iván Farro Pacífico

Ing. CIP Edwin Iván Farro Pacífico Pag 8

Ejercicio 30Empleados cuyo jefe sea KINGSQL> select ename from emp

2 where MGR=(select empno3 from emp where ename='KING');