Attachment
Upcoming SlideShare
Loading in...5
×
 

Attachment

on

  • 1,196 views

 

Statistics

Views

Total Views
1,196
Views on SlideShare
1,196
Embed Views
0

Actions

Likes
0
Downloads
65
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • Tablas Utilizadas en el Curso Utilizaremos tres tablas principales: EMP, que da los detalles de los empleados. DEPT, que da los detalles de los departamentos. SALGRADE, que da los detalles de los salarios para varios grados. La estructura de los datos para todas las tablas se detallan en el Apéndice B.
  • Equijoins Para determinar el nombre del departamento del empleado, se compara el valor de la columna DEPTNO en la tabla EMP con los valores de DEPTNO en la tabla DEPT. La relación entre las tablas EMP y DEPT es un equijoin , ésto quiere decir que los valores en la columna DEPTNO en ambas tablas deben ser iguales. Frecuentemente, este tipo de joins incluyen complementos de clave primaria y externa. Nota: Los equijoins también se llaman joins simples o inner joins.
  • Recuperación de Registros con Equijoins En el ejemplo de la parte superior: La claúsula SELECT especifica los nombre de columna a recuperar: nombre de empleado, número de empleado y número de departamento, los cuales son columnas en la tabla EMP. número de departamento, nombre de departamento y localidad, los cuales son columnas en la tabla EMP. La claúsula FROM especifica las dos tablas a las que debe acceder la base de datos: Tabla EMP. Tabla DEPT. La claúsula WHERE especifica cómo se van a unir las tablas: EMP.DEPTNO=DEPT.DEPTNO Ya que la columna DEPTNO es igual en ambas tablas, ésta debe ir prefijada por el nombre de la tabla para evitar la ambigüedad.
  • Alias de Tablas Calificar las tablas con los nombres de tabla puede llevar mucho tiempo, especialmente si los nombres son largos. Podemos utilizar alias de tablas en lugar de nombres de tablas. Así como los alias de columnas dan a una columna otro nombre, los alias de tablas dan a una tabla otro nombre. Los alias de tablas ayudan a mantener reducido el código SQL, utilizando por lo tanto menos memoria. Observar en el ejemplo cómo los alias de tablas se identifican en la claúsula FROM. El nombre de la tabla se especifica por completo, seguido de un espacio y después el alias de la tabla. A la tabla EMP se le ha dado un alias de E, mientras que la tabla DEPT tiene un alias de D. Guía de Escritura Los alias de tablas pueden tener más de 30 caracteres de longitud, pero es mejor que sean más cortos. Si se usa un alias para un nombre de tabla en particular en la claúsula FROM, entonces debe ser sustituída a través de toda la sentencia SELECT. Los alias de tablas deberían ser significativos. El alias de tabla es válido solo en la sentencia SELECT actual.
  • Condiciones de Búsqueda Adicionales En ocasiones necesitaremos unir más de dos tablas. Por ejemplo, para visualizar el nombre, los pedidos realizados, los números de elementos, el total para cada elemento y el total de cada pedido para el cliente TKB SPORT SHOP, tendremos que unir las tablas CUSTOMER, ORD e ITEM. SQL> SELECT c.name, o.ordid, i.itemid, i.itemtot, o.total 2 FROM customer c, ord o, item i 3 WHERE c.custid = o.custid 4 AND o.ordid = i.ordid 5 AND c.name = 'TKB SPORT SHOP'; NAME ORDID ITEMID ITEMTOT TOTAL ------------ --------- --------- --------- --------- TKB SPORT SHOP 610 3 58 101.4 TKB SPORT SHOP 610 1 35 101.4 TKB SPORT SHOP 610 2 8.4 101.4
  • Non-Equijoins La relación entre las tablas EMP y SALGRADE en un non-equijoin, lo cual significa que ninguna columna en la tabla EMP se corresponde directamente con una columna en la tabla SALGRADE. La relación entre las dos tablas es que la columna SAL en la tabla EMP está entre las columnas LOSAL y HISAL de la tabla SALGRADE. La relación se obtiene utilizando un operador distinto del igual (=).
  • Non-Equijoins (continuación) El ejemplo de la parte superior, crea un non-equijoin para evaluar el grado de salario de un empleado. El salario debe estar entre cualquier par de los rangos de salario alto y bajo. Es importante observar que todos los empleados aparecen exactamente una vez cuando se ejecuta una consulta. Ningún empleado se repite en la lista. Hay dos razones para ésto: Ninguna de las filas en la tabla del grado del salario contiene grados que se solapen. Esto significa que el valor del salario de un empleado solo puede estar entre el salario más bajo y el más alto de una de las filas en la tabla del grado del salario. Todos los salarios de los empleados están dentro de los límites proporcionados por la tabla del grado del salario. Esto significa que ningún empleado gana menos del valor más bajo contenido en la columna LOSAL ni más del valor más alto contenido en la columna HISAL. Nota: Se pueden utilizar otro operadores como =, pero BETWEEN es el más simple. Al utilizar BETWEEN recordar especificar primero el valor más bajo y por último el valor más alto. Los alias de tablas se han especificado por cuestiones de rendimiento, no por ambigüedad.
  • Devolución de Registros sin Coincidencias Directas con Outer Joins Si una fila no satisface una condición de join, no aparecerá en el resultado de la consulta. Por ejemplo, en la condición de equijoin de las tablas EMP y DEPT, el departamento OPERATIONS no aparece porque nadie trabaja es ese departamento. SQL> SELECT e.ename, e.deptno, d.dname 2 FROM emp e, dept d 3 WHERE e.deptno = d.deptno; ENAME DEPTNO DNAME ---------- --------- ------------- KING 10 ACCOUNTING BLAKE 30 SALES CLARK 10 ACCOUNTING JONES 20 RESEARCH ... ALLEN 30 SALES TURNER 30 SALES JAMES 30 SALES ... 14 rows selected.
  • Devolución de Registros sin Coincidencias Directas con Outer Joins La(s) fila(s) que faltan pueden ser recuperadas si en la condición de join se uns un operador outer join. El operador es un signo más encerrado entre paréntesis (+) y se coloca en el “lado” del join que es deficiente en información. Este operador tiene el efecto de crear una o más filas NULL para que aquellas filas de la tabla sin valores conicidentes en la otra puedan ser combinadas. En la sintaxis: tabla1.columna = es la condición que combina ambas tablas tabla2.columna (+) es el símbolo de outer join, el cual se puede ubicar en cualquier lado de una condición de cláusula WHERE, pero no en ambos. Ubicar el símbolo dentrás del nombre de la tabla sin filas coincidentes.
  • Devolución de Resgistros sin Coincidencias Directas on Outer Joins El ejemplo de arriba muestra los números y los nombres de todos los departamentos. El departamento OPERATIONS, que no tiene ningún empleado, también se visualiza. Restricciones Outer Join El operador outer join puede aparecer solo en un lado de la expresión: el lado al que le falta la información. Este recupera aquellas filas de una tabla que no tiene correspondencia directa en otra tabla. Una condición que incluye un outer join no puede utilizar el operador IN o unirse a otra condición por el operador OR.
  • Combinación de una Tabla Consigo Misma En alguna ocasión necesitaremos combinar una tabla consigo misma. Para encontrar el nombre de cada jefe de empleado necesitamos combinar la tabla EMP consigo misma. Por ejemplo, para encontrar el nombre del jefe de Blake, necesitamos: Encontrar a Blake en la tabla EMP mirando en la columna ENAME. Encontrar el número de jefe de Blake mirando en la columna MGR. El número de jefe de Blake es 7839. Encontrar el nombre del jefe con EMPNO 7839 mirando en la columna ENAME. En número de empleado de King es 7839. Por lo tanto, King es el jefe de Blake. En este proceso, miramos dos veces en la tabla. La primera vez miramos en la tabla para encontrar a Blake en la columna ENAME y en MGR para encontrar el valor 7839. La segunda vez miramos en la columna EMPNO para encontrar 7839 y la columna ENAME para encontrar a King.
  • Combinación de una Tabla Consigo Misma (continuación) El ejemplo de la parte superior, combina la tabla EMP consigo misma. Para simular dos tablas en la claúsula FROM, hay dos alias, WORKER y MANAGER, para la misma tabla, EMP. En este ejemplo, la claúsula WHERE contiene la combinación que significa “dónde un jefe de un trabajador coincide con el número de empleado para el jefe”.

Attachment Attachment Presentation Transcript

  • Base de Datos Docente: Manuel Reyes O.
  • UNIDAD V Lenguaje de consulta Estandar SQL
  • Objetivos
    • Utilizar SQL para formular consultas simples sobre base de datos relacionales
    • Aplicar restricciones y ordenamientos en las consultas a una base de datos
    • Desplegar datos desde múltiples tablas a través de consultas
    • Formula consultas usando funciones grupales
  • Tablas Utilizadas EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO --------- ---------- --------- --------- --------- --------- --------- --------- 7839 KING PRESIDENT 17-NOV-81 5000 10 7698 BLAKE MANAGER 7839 01-MAY-81 2850 30 7782 CLARK MANAGER 7839 09-JUN-81 1500 10 7566 JONES MANAGER 7839 02-APR-81 2975 20 7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30 7900 JAMES CLERK 7698 03-DEC-81 950 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 7902 FORD ANALYST 7566 03-DEC-81 3000 20 7369 SMITH CLERK 7902 17-DEC-80 800 20 7788 SCOTT ANALYST 7566 09-DEC-82 3000 20 7876 ADAMS CLERK 7788 12-JAN-83 1100 20 7934 MILLER CLERK 7782 23-JAN-82 1300 10 EMP
  • Tablas Utilizadas DEPT DEPTNO DNAME LOC --------- -------------- ---------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON GRADE LOSAL HISAL --------- --------- --------- 1 700 1200 2 1201 1400 3 1401 2000 4 2001 3000 5 3001 9999 SALGRADE
  • Sentencia Select Selección Projección Tabla 1 Tabla 2 Tabla 1 Tabla 1 Join
  • Sentencia Básica SELECT [DISTINCT] {*, column [ alias ],...} FROM table;
    • SELECT identifica qué columnas
    • FROM identifica qué tablas
  • Selección de todas las columnas DEPTNO DNAME LOC --------- -------------- ------------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON SQL> SELECT * 2 FROM dept;
  • Selección Especifica de Columnas DEPTNO LOC --------- ------------- 10 NEW YORK 20 DALLAS 30 CHICAGO 40 BOSTON SQL> SELECT deptno, loc 2 FROM dept;
  • Uso de Operadores Aritméticos Operador + - * / Descripción Suma Resta Multiplicación División
  • Uso de Operadores Aritméticos SQL> SELECT ename, sal, sal+300 2 FROM emp; ENAME SAL SAL+300 ---------- --------- --------- KING 5000 5300 BLAKE 2850 3150 CLARK 2450 2750 JONES 2975 3275 MARTIN 1250 1550 ALLEN 1600 1900 ... 14 rows selected.
  • Valores NULL
      • NULL es un valor que es inaccesible, sin valor desconocido o inaplicable.
      • NULL no representa ni un cero (0) ni un espacio en blanco.
    SQL> SELECT ename, job, comm 2 FROM emp; ENAME JOB COMM ---------- --------- --------- KING PRESIDENT BLAKE MANAGER ... TURNER SALESMAN 0 ... 14 rows selected.
  • Uso de alias SQL> SELECT ename AS name, sal salary 2 FROM emp; NAME SALARY ------------- --------- ... SQL> SELECT ename "Name", 2 sal*12 "Annual Salary" 3 FROM emp; Name Annual Salary ------------- ------------- ...
  • Filas Duplicadas
    • Las consultas, por defecto, muestran todas las filas incluyendo las duplicadas.
    SQL> SELECT deptno 2 FROM emp; DEPTNO --------- 10 30 10 20 ... 14 rows selected.
  • Eliminación de Filas Duplicadas
    • Las filas duplicadas se eliminan usando DISTINCT en la cláusula SELECT.
    SQL> SELECT DISTINCT deptno 2 FROM emp; DEPTNO --------- 10 20 30
  • Limitar las Filas Seleccionadas
      • Restringir las filas recuperadas usando la cláusula WHERE.
      • La cláusula WHERE se escribe después de la cláusula FROM.
    SELECT [DISTINCT] {*, column [ alias ], ...} FROM table [WHERE condition(s) ];
  • Cláusula WHERE SQL> SELECT ename, job, deptno 2 FROM emp 3 WHERE job='CLERK'; ENAME JOB DEPTNO ---------- --------- --------- JAMES CLERK 30 SMITH CLERK 20 ADAMS CLERK 20 MILLER CLERK 10
  • Campos de Tipo Carácter SQL> SELECT ename, job, deptno 2 FROM emp 3 WHERE ename = 'JAMES';
  • Operadores de Comparación SQL> SELECT ename, sal, comm 2 FROM emp 3 WHERE sal<=comm; ENAME SAL COMM ---------- --------- --------- MARTIN 1250 1400 Operador = > >= < <= <> Significado Igual a Mayor que Mayor que o igual a Menor que Menor que o igual a No igual a
  • Otros Operadores Operador BETWEEN ...AND... IN(list) LIKE IS NULL Significado Entre dos valores (inclusive) Lista de valores Se ajusta a un patrón Es un valor nulo
  • Operador BETWEEN
    • Use el operador BETWEEN para visualizar registros basados en un rango de valores.
    ENAME SAL ---------- --------- MARTIN 1250 TURNER 1500 WARD 1250 ADAMS 1100 MILLER 1300 SQL> SELECT ename, sal 2 FROM emp 3 WHERE sal BETWEEN 1000 AND 1500; Limite Inferior Limite Superior
  • Operador IN
    • Use el operador IN para localizar valores coincidentes con una determinada lista.
    SQL> SELECT empno, ename, sal, mgr 2 FROM emp 3 WHERE mgr IN (7902, 7566, 7788); EMPNO ENAME SAL MGR --------- ---------- --------- --------- 7902 FORD 3000 7566 7369 SMITH 800 7902 7788 SCOTT 3000 7566 7876 ADAMS 1100 7788
  • Operador LIKE
    • Usar el operador LIKE para ejecutar búsquedas en cadenas de caracteres que incluyan comodines.
    • Las condiciones de búsqueda pueden contener caracteres o números.
      • &quot;%&quot; denota cero o varios caracteres.
      • &quot;_&quot; denota un solo caracter.
    SQL> SELECT ename 2 FROM emp 3 WHERE ename LIKE '_A%'; ENAME ---------- JAMES WARD
  • Operador IS NULL
    • Verificar la presencia de valores nulos con el operador IS NULL.
    SQL> SELECT ename, mgr 2 FROM emp 3 WHERE mgr IS NULL; ENAME MGR ---------- --------- KING
  • Operadores Lógicos Operador AND OR NOT Significado Devuelve TRUE si ambas condiciones son TRUE Devuelve TRUE si alguna de las condiciones es TRUE Devuelve TRUE si la siguiente condición es FALSE
  • Operador AND
    • AND requiere que ambas condiciones sean TRUE
    SQL> SELECT empno, ename, job, sal 2 FROM emp 3 WHERE sal>=1100 4 AND job='CLERK'; EMPNO ENAME JOB SAL --------- ---------- --------- --------- 7876 ADAMS CLERK 1100 7934 MILLER CLERK 1300
  • Operador OR
      • OR requiere que alguna condición sea TRUE
    SQL> SELECT empno, ename, job, sal 2 FROM emp 3 WHERE sal>=1100 4 OR job='CLERK'; EMPNO ENAME JOB SAL --------- ---------- --------- --------- 7839 KING PRESIDENT 5000 7698 BLAKE MANAGER 2850 7782 CLARK MANAGER 2450 7566 JONES MANAGER 2975 7654 MARTIN SALESMAN 1250 ... 14 rows selected.
  • Operador NOT SQL> SELECT ename, job 2 FROM emp 3 WHERE job NOT IN ('CLERK','MANAGER','ANALYST'); ENAME JOB ---------- --------- KING PRESIDENT MARTIN SALESMAN ALLEN SALESMAN TURNER SALESMAN WARD SALESMAN
  • Cláusula ORDER BY
    • Ordenar filas con la cláusula ORDER BY.
    • ASC – orden ascendente, constituye la opción por defecto.
    • DESC – orden descendente.
    • La cláusula ORDER BY siempre va al final del SELECT
    SQL> SELECT ename, job, deptno, hiredate 2 FROM emp 3 ORDER BY hiredate; ENAME JOB DEPTNO HIREDATE ---------- --------- --------- --------- SMITH CLERK 20 17-DEC-80 ALLEN SALESMAN 30 20-FEB-81 ... 14 rows selected.
  • Ordenar Múltiples Campos
      • Puede ordenar por una columna no seleccionada.
    SQL> SELECT ename, deptno, sal 2 FROM emp 3 ORDER BY deptno, sal DESC; ENAME DEPTNO SAL ---------- --------- --------- KING 10 5000 CLARK 10 2450 MILLER 10 1300 FORD 20 3000 ... 14 rows selected.
  • Consulta a Varias tablas EMPNO DEPTNO LOC ----- ------- -------- 7839 10 NEW YORK 7698 30 CHICAGO 7782 10 NEW YORK 7566 20 DALLAS 7654 30 CHICAGO 7499 30 CHICAGO ... 14 rows selected. EMP DEPT EMPNO ENAME ... DEPTNO ------ ----- ... ------ 7839 KING ... 10 7698 BLAKE ... 30 ... 7934 MILLER ... 10 DEPTNO DNAME LOC ------ ---------- -------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON
  • ¿Qué es un JOIN?
    • Use un join para consultar datos de más de una tabla.
      • Escriba la condición de join en la claúsula WHERE.
      • Preceda el nombre de la columna con el de la tabla, cuando el mismo nombre de columna, aparezca en más de una tabla.
    SELECT table.column, table.column FROM table1, table2 WHERE table1.column1 = table2.column2 ;
  • Producto Cartesiano
    • Se establece un producto cartesiano cuando:
      • Se omite una condición de join.
      • Se define una condición de join inválida.
      • Se combinan todas las filas de la primer tabla con todas las filas de la segunda.
    • Para evitar un producto cartesiano, se debe incluir siempre una condición de join válida en la cláusula WHERE.
  • Tipos de JOIN
      • Equijoin
      • Non-equijoin
      • Outer join
      • Self join
  • ¿Qué es un Equijoin? EMP DEPT EMPNO ENAME DEPTNO ------ ------- ------- 7839 KING 10 7698 BLAKE 30 7782 CLARK 10 7566 JONES 20 7654 MARTIN 30 7499 ALLEN 30 7844 TURNER 30 7900 JAMES 30 7521 WARD 30 7902 FORD 20 7369 SMITH 20 ... 14 rows selected. DEPTNO DNAME LOC ------- ---------- -------- 10 ACCOUNTING NEW YORK 30 SALES CHICAGO 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 30 SALES CHICAGO 30 SALES CHICAGO 30 SALES CHICAGO 30 SALES CHICAGO 20 RESEARCH DALLAS 20 RESEARCH DALLAS ... 14 rows selected. Primary key Foreign key
  • Recuperación de Registros con Equijoins SQL> SELECT emp.empno, emp.ename, emp.deptno, 2 dept.deptno, dept.loc 3 FROM emp, dept 4 WHERE emp.deptno=dept.deptno; EMPNO ENAME DEPTNO DEPTNO LOC ----- ------ ------ ------ --------- 7839 KING 10 10 NEW YORK 7698 BLAKE 30 30 CHICAGO 7782 CLARK 10 10 NEW YORK 7566 JONES 20 20 DALLAS ... 14 rows selected.
  • Uso de Alias de Tabla
    • Ayudan a simplificar las consultas
    SQL> SELECT emp.empno, emp.ename, emp.deptno, 2 dept.deptno, dept.loc 3 FROM emp, dept 4 WHERE emp.deptno=dept.deptno; SQL> SELECT e.empno, e.ename, e.deptno, 2 d.deptno, d.loc 3 FROM emp e, dept d 4 WHERE e.deptno=d.deptno;
  • Combinando Más de Dos Tablas NAME CUSTID ----------- ------ JOCKSPORTS 100 TKB SPORT SHOP 101 VOLLYRITE 102 JUST TENNIS 103 K+T SPORTS 105 SHAPE UP 106 WOMENS SPORTS 107 ... ... 9 rows selected. CUSTOMER CUSTID ORDID ------- ------- 101 610 102 611 104 612 106 601 102 602 106 604 106 605 ... 21 rows selected. ORD ORDID ITEMID ------ ------- 610 3 611 1 612 1 601 1 602 1 ... 64 rows selected. ITEM
  • Non-Equijoins EMP SALGRADE EMPNO ENAME SAL ------ ------- ------ 7839 KING 5000 7698 BLAKE 2850 7782 CLARK 2450 7566 JONES 2975 7654 MARTIN 1250 7499 ALLEN 1600 7844 TURNER 1500 7900 JAMES 950 ... 14 rows selected. GRADE LOSAL HISAL ----- ----- ------ 1 700 1200 2 1201 1400 3 1401 2000 4 2001 3000 5 3001 9999 “ el salario en la tabla EMP, está entre el salario más bajo y el salario más alto de la tabla SALGRADE”
  • Recuperación de Registros con Non-Equijoins ENAME SAL GRADE ---------- --------- --------- JAMES 950 1 SMITH 800 1 ADAMS 1100 1 ... 14 rows selected. SQL> SELECT e.ename, e.sal, s.grade 2 FROM emp e, salgrade s 3 WHERE e.sal 4 BETWEEN s.losal AND s.hisal;
  • Outer Joins EMP DEPT ENAME DEPTNO ----- ------ KING 10 BLAKE 30 CLARK 10 JONES 20 ... DEPTNO DNAME ------ ---------- 10 ACCOUNTING 30 SALES 10 ACCOUNTING 20 RESEARCH ... 40 OPERATIONS No hay empleados en el departamento OPERATIONS
  • Outer Joins
      • Usar Outer Join para ver las filas que no cumplen la condición de join.
      • El operador de un Outer Join es el signo más (+) .
    SELECT table.column, table.column FROM table1, table2 WHERE table1.column (+) = table2.column ; SELECT table.column, table.column FROM table1, table2 WHERE table1.column = table2.column (+) ;
  • Uso de Outer Joins SQL> SELECT e.ename, d.deptno, d.dname 2 FROM emp e, dept d 3 WHERE e.deptno(+) = d.deptno 4 ORDER BY e.deptno; ENAME DEPTNO DNAME ---------- --------- ------------- KING 10 ACCOUNTING CLARK 10 ACCOUNTING ... 40 OPERATIONS 15 rows selected.
  • Self Joins EMP (WORKER) EMP (MANAGER) EMPNO ENAME MGR ----- ------ ---- 7839 KING 7698 BLAKE 7839 7782 CLARK 7839 7566 JONES 7839 7654 MARTIN 7698 7499 ALLEN 7698 EMPNO ENAME ----- -------- 7839 KING 7839 KING 7839 KING 7698 BLAKE 7698 BLAKE “ MGR en la tabla WORKER es igual a EMPNO en la tabla MANAGER”
  • Combinación de una Tabla Consigo Misma WORKER.ENAME MANAGER.MANAG ------------------------------- BLAKE KING CLARK KING JONES KING MARTIN BLAKE ... 13 rows selected. SQL> SELECT worker.ename,manager.ename 2 FROM emp worker, emp manager 3 WHERE worker.mgr = manager.empno;
  • Funciones de Grupo
    • Las Funciones de Grupo operan sobre conjuntos de registros para dar un resultado a nivel de grupo.
    EMP “ máximo salario en la tabla EMP” DEPTNO SAL --------- --------- 10 2450 10 5000 10 1300 20 800 20 1100 20 3000 20 3000 20 2975 30 1600 30 2850 30 1250 30 950 30 1500 30 1250 MAX(SAL) --------- 5000
  • Tipos de Funciones de Grupo
      • AVG ( n )
      • COUNT ({*| n })
      • MAX (n)
      • MIN (n
      • SUM (n)
  • AVG(SAL) MAX(SAL) MIN(SAL) SUM(SAL) -------- --------- --------- --------- 1400 1600 1250 5600 SQL> SELECT AVG(sal), MAX(sal), 2 MIN(sal), SUM(sal) 3 FROM emp 4 WHERE job LIKE 'SALES%'; SQL> SELECT MIN(hiredate), MAX(hiredate) 2 FROM emp ; MIN(HIRED MAX(HIRED --------- --------- 17-DEC-80 12-JAN-83
  • COUNT(*) --------- 6 SQL> SELECT COUNT(*) 2 FROM emp 3 WHERE deptno = 30; SQL> SELECT COUNT(comm) 2 FROM emp 3 WHERE deptno = 30; COUNT(COMM) ----------- 4
  • Creando Grupos de Datos EMP “ media de salarios en EMP para cada departamento” DEPTNO SAL --------- --------- 10 2450 10 5000 10 1300 20 800 20 1100 20 3000 20 3000 20 2975 30 1600 30 2850 30 1250 30 950 30 1500 30 1250 DEPTNO AVG(SAL) ------- --------- 10 2916.6667 20 2175 30 1566.6667 2916.6667 2175 1566.6667
  • Creando Grupos de Datos: La Cláusula GROUP BY SELECT column , group_function FROM table [WHERE condition ] [GROUP BY group_by_expression ] [ORDER BY column ];
    • Divide los registros de una tabla en grupos más pequeños, por medio de GROUP BY.
  • Cláusula GROUP BY
    • Todas las columnas mencionadas en la SELECT que no son funciones de grupo, tienen que estar en la cláusula GROUP BY.
    SQL> SELECT deptno, AVG(sal) 2 FROM emp 3 GROUP BY deptno; DEPTNO AVG(SAL) --------- --------- 10 2916.6667 20 2175 30 1566.6667
  • Exclusión de Resultados de un Grupo “ máximo salario por departamento mayor de 2900$” EMP DEPTNO SAL --------- --------- 10 2450 10 5000 10 1300 20 800 20 1100 20 3000 20 3000 20 2975 30 1600 30 2850 30 1250 30 950 30 1500 30 1250 DEPTNO MAX(SAL) --------- --------- 10 5000 20 3000 5000 3000 2850
  • Exclusión de Resultados de un Grupo: Cláusula HAVING
    • Use la cláusula HAVING para restringir grupos:
        • Los registros son agrupados.
        • Se aplica la función de grupo.
        • Los grupos que se corresponden con la cláusula HAVING se visualizan.
    SELECT column , group_function FROM table [WHERE condition ] [GROUP BY group_by_expression ] [HAVING group_condition ] [ORDER BY column ];
  • Cláusula HAVING SQL> SELECT deptno, max(sal) 2 FROM emp 3 GROUP BY deptno 4 HAVING max(sal)>2900; DEPTNO MAX(SAL) --------- --------- 10 5000 20 3000
  • SubConsultas
    • “ ¿Quién tiene un salario superior al de Jones?”
    “ ¿Qué empleados tienen un salario superior al salrio de Jones?” Consulta Principal ? “ ¿Cuál es el salario de Jones?” ? Subconsulta
  • Uso de subconsultas SQL> SELECT ename 2 FROM emp 3 WHERE sal > 4 (SELECT sal 5 FROM emp 6 WHERE empno=7566); ENAME ---------- KING FORD SCOTT 2975
  • Subconsultas Multi-registro
      • Devuelven más de un registro.
      • Use comparadores multi-registro.
    Operador IN ANY ALL Significado Igual a los valores de cierta lista Compara los valores con cada valor devuelto por la subconsulta Compara los valores con cada uno de los valores devueltos por la subconsulta
  • Operador ANY EMPNO ENAME JOB --------- ---------- --------- 7654 MARTIN SALESMAN 7521 WARD SALESMAN SQL> SELECT empno, ename, job 2 FROM emp 3 WHERE sal < ANY 4 (SELECT sal 5 FROM emp 6 WHERE job = 'CLERK') 7 AND job <> 'CLERK'; 950 800 1100 1300