8 sql subconsultas

868 views
688 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
868
On SlideShare
0
From Embeds
0
Number of Embeds
107
Actions
Shares
0
Downloads
33
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

8 sql subconsultas

  1. 1. Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002SubconsultasSubconsultas
  2. 2. 1-178 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002ObjetivosObjetivosAl completar esta lección, debería sercapaz de hacer lo siguiente:• Describir los tipos de problemas que lassubconsultas pueden resolver.• Definir subconsultas.• Enumerar los tipos de subconsultas.• Escribir subconsultas que afecten a unsolo registro, o a más de uno.Al completar esta lecciAl completar esta leccióón, debern, deberíía sera sercapaz de hacer lo siguiente:capaz de hacer lo siguiente:• Describir los tipos de problemas que lassubconsultas pueden resolver.• Definir subconsultas.• Enumerar los tipos de subconsultas.• Escribir subconsultas que afecten a unsolo registro, o a más de uno.
  3. 3. 1-179 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002Uso de una Subconsulta paraResolver un ProblemaUso de una Subconsulta paraResolver un Problema“¿Quién tiene un salario superior al de Jones?”“¿“¿QuiQuiéén tiene un salario superior al den tiene un salario superior al de JonesJones??””“¿Qué empleados tienen un salariosuperior al salrio de Jones?”Consulta Principal??“¿Cuál es el salario de Jones?”??Subconsulta
  4. 4. 1-180 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002SubconsultasSubconsultas•• LaLa subconsultasubconsulta se ejecuta una vez yse ejecuta una vez yantes de la consulta principal.antes de la consulta principal.•• El resultado de laEl resultado de la subconsultasubconsulta es usadoes usadopor la consulta principal externa.por la consulta principal externa.SELECT select_listFROM tableWHERE expr operator(SELECT select_listFROM table);
  5. 5. 1-181 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.0022975SQL> SELECT ename2 FROM emp3 WHERE sal >4 (SELECT sal5 FROM emp6 WHERE empno=7566);Usando una SubconsultaUsando una SubconsultaENAME----------KINGFORDSCOTTENAME----------KINGFORDSCOTT
  6. 6. 1-182 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002Guía para el Uso deSubconsultasGuía para el Uso deSubconsultas• Encierre las subconsultas entreparéntesis.• Una subconsulta debe aparecer a laderecha del operador.• No añada una cláusula ORDER BY a unasubconsulta.• Utilice operadores a nivel de fila parasubconsultas que devuelvan solo una fila.• Utilice operadores que actúan sobrevarios registros para subconsultas quedevuelvan más de una fila.• Encierre las subconsultas entreparéntesis.• Una subconsulta debe aparecer a laderecha del operador.• No añada una cláusula ORDER BY a unasubconsulta.• Utilice operadores a nivel de fila parasubconsultas que devuelvan solo una fila.• Utilice operadores que actúan sobrevarios registros para subconsultas quedevuelvan más de una fila.
  7. 7. 1-183 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002Tipos de SubconsultasTipos de Subconsultas• Subconsulta mono-registro• Subconsulta mono-registroCons. PrincipalSubquerydevuelvedevuelveCLERKCLERK• Subconsulta multi-registro• Subconsulta multi-registroCLERKCLERKMANAGERMANAGERCons. PrincipalSubquerydevuelvedevuelve• Subconsulta multi-columna• Subconsulta multi-columnaCLERK 7900CLERK 7900MANAGER 7698MANAGER 7698Cons. PrincipalSubquerydevuelvedevuelve
  8. 8. 1-184 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002Subconsultas Mono-registroSubconsultas Mono-registro• Devuelven un único registro.• Se utilizan operadores de comparación.• Devuelven un único registro.• Se utilizan operadores de comparación.Operador=>>=<<=<>SignificadoIgual aMayor queMayor que o igual aMenor queMenor que o igual aNo igual a
  9. 9. 1-185 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002Ejecución de Subc. Mono-registroEjecución de Subc. Mono-registroCLERK1100ENAME JOB---------- ---------MILLER CLERKENAME JOB---------- ---------MILLER CLERKSQL> SELECT ename, job2 FROM emp3 WHERE job =4 (SELECT job5 FROM emp6 WHERE empno = 7369)7 AND sal >8 (SELECT sal9 FROM emp10 WHERE empno = 7876);
  10. 10. 1-186 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002Uso de Funciones de Grupoen una SubconsultaUso de Funciones de Grupoen una Subconsulta800ENAME JOB SAL---------- --------- ---------SMITH CLERK 800ENAME JOB SAL---------- --------- ---------SMITH CLERK 800SQL> SELECT ename, job, sal2 FROM emp3 WHERE sal =4 (SELECT MIN(sal)5 FROM emp);
  11. 11. 1-187 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002La Cláusula HAVING enSubconsultasLa Cláusula HAVING enSubconsultas• El Servidor Oracle8 ejecuta primero lassubconsultas.• El Servidor Oracle8 devuelve elresultado a la cláusula HAVING de laconsulta principal.• El Servidor Oracle8 ejecuta primero lassubconsultas.• El Servidor Oracle8 devuelve elresultado a la cláusula HAVING de laconsulta principal.800SQL> SELECT deptno, MIN(sal)2 FROM emp3 GROUP BY deptno4 HAVING MIN(sal) >5 (SELECT MIN(sal)6 FROM emp7 WHERE deptno = 20);
  12. 12. 1-188 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002¿Qué está mal en estaSentencia?¿Qué está mal en estaSentencia?ERROR:ORA-01427: single-row subquery returns more thanone rowno rows selectedERROR:ORA-01427: single-row subquery returns more thanone rowno rows selectedSQL> SELECT empno, ename2 FROM emp3 WHERE sal =4 (SELECT MIN(sal)5 FROM emp6 GROUP BY deptno);““Operador monoOperador mono--registroenregistroensubconsultasubconsultamultimulti--registroregistro””
  13. 13. 1-189 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002¿Funcionaría esta Sentencia?¿Funcionaría esta Sentencia?no rows selectedno rows selectedLaLaSubconsultaSubconsultaNOdevuelveregistrosNOdevuelveregistrosSQL> SELECT ename, job2 FROM emp3 WHERE job =4 (SELECT job5 FROM emp6 WHERE ename=SMYTHE);
  14. 14. 1-190 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002Subconsultas Multi-registroSubconsultas Multi-registro• Devuelven más de un registro.• Use comparadores multi-registro.• Devuelven más de un registro.• Use comparadores multi-registro.OperadorINANYALLSignificadoIgual a los valores de cierta listaCompara los valores con cada valordevuelto por la subconsultaCompara los valores con cada uno de losvalores devueltos por la subconsulta
  15. 15. 1-191 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002Uso del Operador ANY enUso del Operador ANY en95080011001300EMPNO ENAME JOB--------- ---------- ---------7654 MARTIN SALESMAN7521 WARD SALESMANEMPNO ENAME JOB--------- ---------- ---------7654 MARTIN SALESMAN7521 WARD SALESMANSQL> SELECT empno, ename, job2 FROM emp3 WHERE sal < ANY4 (SELECT sal5 FROM emp6 WHERE job = CLERK)7 AND job <> CLERK;Subconsultas Multi-registroSubconsultas Multi-registro
  16. 16. 1-192 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002Uso del Operador ALL enUso del Operador ALL en2916.666721751566.6667EMPNO ENAME JOB--------- ---------- ---------7839 KING PRESIDENT7566 JONES MANAGER7902 FORD ANALYST7788 SCOTT ANALYSTEMPNO ENAME JOB--------- ---------- ---------7839 KING PRESIDENT7566 JONES MANAGER7902 FORD ANALYST7788 SCOTT ANALYSTSQL> SELECT empno, ename, job2 FROM emp3 WHERE sal > ALL4 (SELECT avg(sal)5 FROM emp6 GROUP BY deptno)Subconsultas Multi-registroSubconsultas Multi-registro
  17. 17. 1-193 Javier Balbuena / José Manuel Ferrer. Curso 2.001 / 2.002ResumenResumenLas Subconsulas resultan muy útilescuando una consulta esta basada envalores que no conocemos.LasLas SubconsulasSubconsulas resultan muyresultan muy úútilestilescuando una consulta esta basada encuando una consulta esta basada envalores que no conocemos.valores que no conocemos.SELECT select_listFROM tableWHERE expr operator(SELECT select_listFROM table);

×