You are on page 1of 59

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
EMP
EMPNO --------7839 7698 7782 7566 7654 7499 7844 7900 ENAME ---------KING BLAKE CLARK JONES MARTIN ALLEN TURNER JAMES JOB MGR HIREDATE SAL COMM DEPTNO --------- --------- --------- --------- --------- --------PRESIDENT 17-NOV-81 5000 10 MANAGER 7839 01-MAY-81 2850 30 MANAGER MANAGER SALESMAN SALESMAN SALESMAN CLERK 7839 7839 7698 7698 7698 7698 09-JUN-81 02-APR-81 28-SEP-81 20-FEB-81 08-SEP-81 03-DEC-81 1500 2975 1250 1600 1500 950 10 20 30 30 30 30

1400 300 0

7521 7902 7369 7788 7876 7934

WARD FORD SMITH SCOTT ADAMS MILLER

SALESMAN ANALYST CLERK ANALYST CLERK CLERK

7698 7566 7902 7566 7788 7782

22-FEB-81 03-DEC-81 17-DEC-80 09-DEC-82 12-JAN-83 23-JAN-82

1250 3000 800 3000 1100 1300

500

30 20 20 20 20 10

Tablas Utilizadas
DEPT
DEPTNO DNAME LOC --------- -------------- ---------10 ACCOUNTING NEW YORK

20 RESEARCH 30 SALES 40 OPERATIONS

DALLAS CHICAGO BOSTON

SALGRADE
GRADE LOSAL HISAL

--------- --------- --------1 700 1200 2 1201 1400 3 1401 2000 4 2001 3000 5 3001 9999

Sentencia Select Selección Projección Tabla 1 Join Tabla 1 Tabla 1 Tabla 2 .

.. • SELECT identifica qué columnas • FROM identifica qué tablas ..} table.Sentencia Básica SELECT FROM [DISTINCT] {*. column [alias].

DEPTNO --------10 20 30 40 DNAME -------------ACCOUNTING RESEARCH SALES OPERATIONS LOC ------------NEW YORK DALLAS CHICAGO BOSTON .Selección de todas las columnas SQL> SELECT * 2 FROM dept.

Selección Especifica de Columnas SQL> SELECT deptno. DEPTNO --------10 20 30 40 LOC ------------NEW YORK DALLAS CHICAGO BOSTON . loc 2 FROM dept.

Uso de Operadores Aritméticos Operador + * / Descripción Suma Resta Multiplicación División .

.--------. 14 rows selected.Uso de Operadores Aritméticos SQL> SELECT ename. .--------KING 5000 5300 BLAKE 2850 3150 CLARK 2450 2750 JONES 2975 3275 MARTIN 1250 1550 ALLEN 1600 1900 . ENAME SAL SAL+300 ---------.. sal+300 2 FROM emp. sal.

comm emp. ENAME JOB COMM ---------.. – NULL no representa ni un cero (0) ni un espacio en blanco.Valores NULL – NULL es un valor que es inaccesible. sin valor desconocido o inaplicable. 14 rows selected. job. SQL> SELECT 2 FROM ename.--------. TURNER SALESMAN 0 . ....--------KING PRESIDENT BLAKE MANAGER .

. NAME SALARY ------------. SQL> SELECT ename "Name".. sal salary 2 FROM emp. 2 sal*12 "Annual Salary" 3 FROM emp.--------.Uso de alias SQL> SELECT ename AS name...------------- .. Name Annual Salary ------------.

. por defecto. SQL> SELECT deptno 2 FROM emp. 14 rows selected. muestran todas las filas incluyendo las duplicadas. . DEPTNO --------10 30 10 20 .Filas Duplicadas • Las consultas..

SQL> SELECT DISTINCT deptno 2 FROM emp. DEPTNO --------10 20 30 .Eliminación de Filas Duplicadas • Las filas duplicadas se eliminan usando DISTINCT en la cláusula SELECT.

– La cláusula WHERE se escribe después de la cláusula FROM.} table condition(s)]. . column [alias].Limitar las Filas Seleccionadas – Restringir las filas recuperadas usando la cláusula WHERE. ... SELECT FROM [WHERE [DISTINCT] {*.

deptno 2 FROM emp 3 WHERE job='CLERK'. job.--------CLERK 30 CLERK 20 CLERK 20 CLERK 10 . ENAME ---------JAMES SMITH ADAMS MILLER JOB DEPTNO --------.Cláusula WHERE SQL> SELECT ename.

. job.Campos de Tipo Carácter SQL> SELECT 2 FROM 3 WHERE ename. deptno emp ename = 'JAMES'.

sal.--------MARTIN 1250 1400 . ENAME SAL COMM ---------.--------. comm 2 FROM emp 3 WHERE sal<=comm.Operadores de Comparación Operador = > >= < <= <> Significado Igual a Mayor que Mayor que o igual a Menor que Menor que o igual a No igual a SQL> SELECT ename.

. IN(list) LIKE IS NULL Significado Entre dos valores (inclusive) Lista de valores Se ajusta a un patrón Es un valor nulo .AND....Otros Operadores Operador BETWEEN .

Operador BETWEEN • Use el operador BETWEEN para visualizar registros basados en un rango de valores. sal emp sal BETWEEN 1000 AND 1500. ENAME SAL ---------. SQL> SELECT 2 FROM 3 WHERE ename.--------MARTIN 1250 TURNER 1500 WARD 1250 ADAMS 1100 MILLER 1300 Limite Inferior Limite Superior .

7566.--------FORD 3000 7566 SMITH 800 7902 SCOTT 3000 7566 ADAMS 1100 7788 . EMPNO --------7902 7369 7788 7876 ENAME SAL MGR ---------. SQL> SELECT 2 FROM 3 WHERE empno. ename. 7788).Operador IN • Use el operador IN para localizar valores coincidentes con una determinada lista.--------. sal. mgr emp mgr IN (7902.

– "_" denota un solo caracter. Las condiciones de búsqueda pueden contener caracteres o números. .Operador LIKE • • Usar el operador LIKE para ejecutar búsquedas en cadenas de caracteres que incluyan comodines. SQL> SELECT 2 FROM 3 WHERE ENAME ---------JAMES WARD ename emp ename LIKE '_A%'. – "%" denota cero o varios caracteres.

SQL> SELECT 2 FROM 3 WHERE ename. ENAME MGR ---------.Operador IS NULL • Verificar la presencia de valores nulos con el operador IS NULL. mgr emp mgr IS NULL.--------KING .

Operadores Lógicos Operador AND OR 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 NOT .

Operador AND • AND requiere que ambas condiciones sean TRUE SQL> 2 3 4 SELECT FROM WHERE AND empno. ename. sal emp sal>=1100 job='CLERK'. job. JOB SAL --------.--------CLERK 1100 CLERK 1300 EMPNO --------7876 7934 ENAME ---------ADAMS MILLER .

.---------.--------. EMPNO ENAME JOB SAL --------. sal emp sal>=1100 job='CLERK'. 14 rows selected. job. .--------7839 7698 7782 7566 7654 KING BLAKE CLARK JONES MARTIN PRESIDENT MANAGER MANAGER MANAGER SALESMAN 5000 2850 2450 2975 1250 .Operador OR OR requiere que alguna condición sea TRUE SQL> 2 3 4 SELECT FROM WHERE OR empno.. ename.

'ANALYST').'MANAGER'. job 2 FROM emp 3 WHERE job NOT IN ('CLERK'. ENAME ---------KING MARTIN ALLEN TURNER WARD JOB --------PRESIDENT SALESMAN SALESMAN SALESMAN SALESMAN .Operador NOT SQL> SELECT ename.

• ASC – orden ascendente.--------. deptno.--------SMITH CLERK 20 17-DEC-80 ALLEN SALESMAN 30 20-FEB-81 . 14 rows selected.--------..Cláusula ORDER BY • Ordenar filas con la cláusula ORDER BY. • DESC – orden descendente. ENAME JOB DEPTNO HIREDATE ---------. . constituye la opción por defecto. hiredate 2 FROM emp 3 ORDER BY hiredate.. • La cláusula ORDER BY siempre va al final del SELECT SQL> SELECT ename. job.

• Puede ordenar por una columna no seleccionada. deptno. ENAME DEPTNO SAL ---------..--------.. . sal DESC.Ordenar Múltiples Campos SQL> SELECT ename. 14 rows selected. sal 2 FROM emp 3 ORDER BY deptno.--------KING 10 5000 CLARK 10 2450 MILLER 10 1300 FORD 20 3000 .

.. . 10 ... 14 rows selected... -----.. EMPNO DEPTNO LOC ----.. 7934 ENAME ----KING BLAKE .Consulta a Varias tablas EMP EMPNO -----7839 7698 . 30 10 DEPT DEPTNO -----10 20 30 40 DNAME ---------ACCOUNTING RESEARCH SALES OPERATIONS LOC -------NEW YORK DALLAS CHICAGO BOSTON MILLER .------...... DEPTNO .-------7839 10 NEW YORK 7698 30 CHICAGO 7782 10 NEW YORK 7566 20 DALLAS 7654 30 CHICAGO 7499 30 CHICAGO ..

cuando el mismo nombre de columna. – Preceda el nombre de la columna con el de la tabla.column.¿Qué es un JOIN? • Use un join para consultar datos de más de una tabla. table2 table1. – Escriba la condición de join en la claúsula WHERE. table.column2. SELECT FROM WHERE table. aparezca en más de una tabla.column1 = table2. .column table1.

• Para evitar un producto cartesiano. se debe incluir siempre una condición de join válida en la cláusula WHERE. – Se define una condición de join inválida.Producto Cartesiano • Se establece un producto cartesiano cuando: – Se omite una condición de join. . – Se combinan todas las filas de la primer tabla con todas las filas de la segunda.

Tipos de JOIN Equijoin Non-equijoin Outer join Self join .

.. 14 rows selected..------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 .. LOC -------NEW YORK CHICAGO NEW YORK DALLAS CHICAGO CHICAGO CHICAGO CHICAGO CHICAGO DALLAS DALLAS Primary key Foreign key . DEPT DEPTNO ------10 30 10 20 30 30 30 30 30 20 20 .------. 14 rows DNAME ---------ACCOUNTING SALES ACCOUNTING RESEARCH SALES SALES SALES SALES SALES RESEARCH RESEARCH selected.¿Qué es un Equijoin? EMP EMPNO ENAME DEPTNO -----.

empno.deptno.ename. emp.deptno.deptno.Recuperación de Registros con Equijoins SQL> SELECT 2 3 FROM 4 WHERE emp.-----.. 14 rows selected. . dept emp.-----. dept.deptno=dept. EMPNO ENAME DEPTNO DEPTNO LOC ----.loc emp.-----. dept.--------7839 KING 10 10 NEW YORK 7698 BLAKE 30 30 CHICAGO 7782 CLARK 10 10 NEW YORK 7566 JONES 20 20 DALLAS .. emp.

e.empno. SQL> SELECT e. d.deptno. dept d 4 WHERE e.ename. 2 d. emp.deptno.loc 3 FROM emp.deptno.deptno. dept.empno. .deptno=d. 2 dept.deptno.deptno.Uso de Alias de Tabla • Ayudan a simplificar las consultas SQL> SELECT emp.loc 3 FROM emp e.deptno=dept. dept 4 WHERE emp.ename. e. emp.

... ORD CUSTID ORDID ------. . 611 1 612 1 601 1 602 1 . 9 rows selected. 64 rows selected. .... 610 3 21 rows selected.------..------101 610 102 611 104 612 106 601 102 602 ITEM 106 604 ORDID ITEMID 106 605 -----.Combinando Más de Dos Tablas CUSTOMER NAME CUSTID ---------------JOCKSPORTS 100 TKB SPORT SHOP 101 VOLLYRITE 102 JUST TENNIS 103 K+T SPORTS 105 SHAPE UP 106 WOMENS SPORTS 107 ..

-----1 700 1200 2 1201 1400 3 1401 2000 4 2001 3000 5 3001 9999 “el salario en la tabla EMP.------.-----7839 KING 5000 7698 BLAKE 2850 7782 CLARK 2450 7566 JONES 2975 7654 MARTIN 1250 7499 ALLEN 1600 7844 TURNER 1500 7900 JAMES 950 . está entre el salario más bajo y el salario más alto de la tabla SALGRADE” .Non-Equijoins EMP EMPNO ENAME SAL -----.. SALGRADE GRADE LOSAL HISAL ----..----. 14 rows selected.

Recuperación de Registros con Non-Equijoins SQL> 2 3 4 SELECT FROM WHERE BETWEEN e.--------JAMES 950 1 SMITH 800 1 ADAMS 1100 1 .--------.grade emp e. ENAME SAL GRADE ---------. s. e.hisal. salgrade s e.losal AND s. 14 rows selected.sal s. .sal.ename...

40 DNAME ---------ACCOUNTING SALES ACCOUNTING RESEARCH OPERATIONS No hay empleados en el departamento OPERATIONS ..Outer Joins EMP ENAME ----KING BLAKE CLARK JONES .. DEPTNO -----10 30 10 20 DEPT DEPTNO -----10 30 10 20 ...

column FROM table1. SELECT table.column FROM table1.column.column = table2. table2 WHERE table1.column. table. .column(+) = table2. – El operador de un Outer Join es el signo más (+).column. SELECT table. table2 WHERE table1.Outer Joins – Usar Outer Join para ver las filas que no cumplen la condición de join.column(+). table.

------------KING 10 ACCOUNTING CLARK 10 ACCOUNTING .ename.deptno e.deptno. dept d e.dname emp e.--------.. d. 40 OPERATIONS 15 rows selected. . ENAME DEPTNO DNAME ---------..deptno(+) = d.Uso de Outer Joins SQL> 2 3 4 SELECT FROM WHERE ORDER BY e. d.deptno.

-------7839 7839 7839 7698 7698 KING KING KING BLAKE BLAKE “MGR en la tabla WORKER es igual a EMPNO en la tabla MANAGER” .Self Joins EMP (WORKER) EMPNO ----7839 7698 7782 7566 7654 7499 ENAME -----KING BLAKE CLARK JONES MARTIN ALLEN MGR ---7839 7839 7839 7698 7698 EMP (MANAGER) EMPNO ENAME ----.

ename 2 FROM emp worker. emp manager 3 WHERE worker..ename.empno.. . WORKER.ENAME MANAGER.Combinación de una Tabla Consigo Misma SQL> SELECT worker.manager.MANAG ------------------------------BLAKE KING CLARK KING JONES KING MARTIN BLAKE .mgr = manager. 13 rows selected.

EMP DEPTNO SAL --------.Funciones de Grupo • Las Funciones de Grupo operan sobre conjuntos de registros para dar un resultado a nivel de grupo.--------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 “máximo salario en la tabla EMP” 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) -------.SQL> SELECT 2 3 FROM 4 WHERE AVG(sal). MAX(sal).--------17-DEC-80 12-JAN-83 . MIN(sal).--------.--------. SUM(sal) emp job LIKE 'SALES%'. MIN(HIRED MAX(HIRED --------.--------1400 1600 1250 5600 SQL> SELECT 2 FROM MIN(hiredate). MAX(hiredate) emp.

. SQL> SELECT 2 FROM 3 WHERE COUNT(COMM) ----------4 COUNT(comm) emp deptno = 30.SQL> SELECT 2 FROM 3 WHERE COUNT(*) --------6 COUNT(*) emp deptno = 30.

6667 1566.--------en EMP 2175 10 2916.--------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 2916.6667 “media de DEPTNO AVG(SAL) salarios ------.6667 para cada departamento” 20 2175 30 1566.6667 .Creando Grupos de Datos EMP DEPTNO SAL --------.

. group_function table condition] group_by_expression] column]. • Divide los registros de una tabla en grupos más pequeños.Creando Grupos de Datos: La Cláusula GROUP BY SELECT FROM [WHERE [GROUP BY [ORDER BY column. por medio de GROUP BY.

--------10 2916. tienen que estar en la cláusula GROUP BY.Cláusula GROUP BY • Todas las columnas mencionadas en la SELECT que no son funciones de grupo. AVG(sal) 2 FROM emp 3 GROUP BY deptno. DEPTNO AVG(SAL) --------. SQL> SELECT deptno.6667 20 2175 30 1566.6667 .

Exclusión de Resultados de un Grupo EMP DEPTNO SAL --------.--------10 5000 20 3000 2850 .--------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 5000 “máximo salario por departamento 3000 mayor de 2900$” DEPTNO MAX(SAL) --------.

. • Se aplica la función de grupo. • Los grupos que se corresponden con la cláusula HAVING se visualizan.Exclusión de Resultados de un Grupo: Cláusula HAVING • Use la cláusula HAVING para restringir grupos: • Los registros son agrupados. SELECT FROM [WHERE [GROUP BY [HAVING [ORDER BY column. group_function table condition] group_by_expression] group_condition] column].

Cláusula HAVING SQL> 2 3 4 SELECT FROM GROUP BY HAVING deptno. max(sal) emp deptno max(sal)>2900.--------10 5000 20 3000 . DEPTNO MAX(SAL) --------.

SubConsultas • “¿Quién tiene un salario superior al de Jones?” Consulta Principal ? “¿Qué empleados tienen un salario superior al salrio de Jones?” Subconsulta ? “¿Cuál es el salario de Jones?” .

Uso de subconsultas SQL> SELECT ename 2 FROM emp 2975 3 WHERE sal > 4 (SELECT sal 5 FROM emp 6 WHERE empno=7566). ENAME ---------KING FORD SCOTT .

Operador IN Significado Igual a los valores de cierta lista ANY Compara los valores con cada valor devuelto por la subconsulta Compara los valores con cada uno de los valores devueltos por la subconsulta ALL .Subconsultas Multi-registro – Devuelven más de un registro. – Use comparadores multi-registro.

Operador ANY SQL> 2 3 4 5 6 7 SELECT FROM WHERE empno. JOB --------SALESMAN SALESMAN AND EMPNO --------7654 7521 ENAME ---------MARTIN WARD . ename. job 1300 1100 emp 800 sal < ANY 950 (SELECT sal FROM emp WHERE job = 'CLERK') job <> 'CLERK'.