You are on page 1of 108

Introduccin a Oracle: SQL

Overview
SELECT / DESCBRIBE

DML
(INSERT, UPDATE, DELETE)
DDL
(CREATE, ALTER, DROP, RENAME, TRUNCATE)
TRANSACCION CONTROL
(COMMIT, ROLLBACK, SAVE POINT)
DCL
(GRANT, REVOCKE)
BLOQUES
ANONIMOS
EXCEPCIONES


PROCEDIMIENTO
FUNCIONES
PACKAGE
TRIGGERS
SQL PLSQL
1
Escribiendo sentencias
basicas de SQLPLUS
Capacidades de la sentencia
SELECT
Select es usada para retornar informacin de
la BD.
Seleccin, podemos usar criterios de seleccin
para retornar las filas deseadas
Proyeccin, logramos que pocas o muchas
columnas de una tabla retornen
Join, recibimos datos almacenados en diferentes
tablas
Sentencia Basica
SELECT identifica que columnas.

FROM identifica cuales tablas.
SELECT [DISTINCT] {* , column [alias],...} FROM table
Seleccionando todas las
columnas
SQL>SELECT * FROM dept;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
Seleccionando columnas
especificas
SQL>SELECT deptno, loc FROM dept;
DEPTNO LOC
---------- -------------
10 NEW YORK
20 DALLAS
30 CHICAGO
40 BOSTON
Manejo de columas
Justificacin default
Izquierda: datos Fecha y Carcter
Derecha: datos nmericos
Visualizacin default
Aparece en mayusculas

ENAME HIREDATE SAL
------------- --------------- ---------
SMITH 17-DEC-80 800
ALLEN 20-FEB-81 1600
Expresiones Aritmticas
Operador Descripcin
+ Suma
- Resta
* Multiplicacin
/ Divicin
Precedencia de Operaciones
Multiplicacin y Divisin tienen
prioridad sobre la suma y resta.
Operaciones de la misma prioridad
son evaluados de izquierda a
derecha.
Los parentesis son usados para
forzar la priorizacin.

* / + -
Usando precedencia
SQL>SELECT ename, sal, 12*sal+100 FROM emp;
ENAME SAL 12*SAL+100
---------- ---------- ----------------
SMITH 800 9700
ALLEN 1600 19300
WARD 1250 15100
Usando parentesis
SQL>SELECT ename, sal, 12*(sal+100) FROM emp;
ENAME SAL 12*(SAL+100)
---------- ---------- ------------------
SMITH 800 10800
ALLEN 1600 20400
WARD 1250 16200
Definiendo un valor Nulo
Los valores nulos no son lo mismo
que valor CERO.
ENAME JOB SAL COMM
---------- ----------------- ---------- ----------
JONES MANAGER 2975
MARTIN SALESMAN 1250 1400
BLAKE MANAGER 2850
CLARK MANAGER 2450
SCOTT ANALYST 3000
KING PRESIDENT 5000
TURNER SALESMAN 1500 0
SQL>SELECT ename, job, sal, comm FROM emp;
Expresiones Aritmticas con
valores nulos
Una operacin aritmtica que
contiene un valor nulo, su resultado
es NULO.

SQL>SELECT ename, 12*sal+comm
FROM emp WHERE
ename='KING'
ENAME 12*SAL+COMM
----------- -------------------
KING
Definiendo Alias a las Columnas
SQL>SELECT ename, sal, 12*(sal+100) AS suma
2 FROM emp;
ENAME SAL SUMA
---------- ---------- ----------
SQL>SELECT ename, sal, 12*(sal+100) AS "Suma "
2 FROM emp;
ENAME SAL Suma
---------- ---------- ----------
Operacin de
Concatenacin
Sirven para concatenar columnas o
cadenas de caracteres con columnas.
Es representado con barras
verticales( || ).
El resultado es una columna que es
una expresin de caracteres.
Usando Operadores de
Concatenacin
Columnas

SQL>SELECT ename || job AS "Empeados", sal
FROM emp
Empeados SAL
------------------- ----------
SMITHCLERK 800
ALLENSALESMAN 1600
Usando Operadores de
Concatenacin
SQL>SELECT ename || ' tiene el cargo de '|| job AS "Empeados", sal
FROM emp;
Cadena de caracteres

Empeados SAL
--------------------------------------- ----------
SMITH tiene el cargo de CLERK 800
ALLEN tiene el cargo de SALESMAN 1600
WARD tiene el cargo de SALESMAN 1250
Registros Duplicados
La visualizacin por default de una
consulta, nos muestra inclusive
registros duplicados.
SQL>SELECT deptno FROM dept;
DEPTNO
----------
10
10
20
30
30
40
Eliminando registros duplicados
Usamos la palabra clave DISTINCT
en la clausula SELECT.
DEPTNO
----------
10
20
30
40
SQL>SELECT DISTINCT deptno FROM dept;
Mostrando la Estructura de la
tabla
Se utiliza el comando DESCRIBE

SQL>DESC[RIBE] tabla;
Mostrando la Estructura
El orden en que se muestran las columnas
son las que se usaron para su creacin.

SQL>DESCRIBE dept;
Name Null? Type
--------------------------------- -------- -------------
DEPTNO NOT NULL NUMBER(2)
DNAME VARCHAR2(14)
LOC VARCHAR2(13)
SQL>DESC dept;
2
Restringiendo y
Sorteando Datos
Limitando registros usando
seleccin
Listar a los empleados del
departamento 10.

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
7788 SCOTT ANALYST 7566 19-APR-87 3000 20
7839 KING PRESIDENT 17-NOV-81 5000 10
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
7876 ADAMS CLERK 7788 23-MAY-87 100 20
Limitando registros usando
seleccin
Utilizamos la clausula WHERE.
WHERE siempre va luego de la clausula FROM.
SELECT [DISTINCT] {* , column [alias],...}
FROM table
[WHERE condicion(s)];
Usando la clausula WHERE
SQL> SELECT ename, job,deptno
2 FROM emp
3 WHERE job='CLERK';
ENAME JOB DEPTNO
---------- --------- ----------
SMITH CLERK 20
ADAMS CLERK 20
JAMES CLERK 30
MILLER CLERK 10
Caracteres y Fecha
Los valores Caracteres y Fecha son
encerrados con comillas simples( ' ' ) .
Los valores Caracteres son case sensitive
(CARLOS<>Carlos) y los valores Fecha son
de formato sensitive(11-ENE-73<>11-01-73)
El formato por default es DD-MON-YY.
Evaluando Caracteres
SQL> SELECT ename, job,deptno
2 FROM emp
3 WHERE job='CLERK';
ENAME JOB DEPTNO
---------- --------- ----------
SMITH CLERK 20
ADAMS CLERK 20
JAMES CLERK 30
MILLER CLERK 10
Evaluando Fecha
SQL> SELECT *
2 FROM emp
3 WHERE hiredate = '12-12-80' ;
SQL>ERROR at line 3:
ORA-01843: not a valid month
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- --------- ---------- ----------
7369 SMITH CLERK 7902 17-DEC-80 800 20
Operadores de comparacin
Operador Descripcin
= Igual a
> Mayor que
>= Mayor igual
< Menor que
<= Menor igual
<> Diferente que
Usando operadores de
comparacin
SQL> SELECT ename, sal , comm
2 FROM emp
3 WHERE sal <= comm;
ENAME SAL COMM
---------- ---------- ----------
MARTIN 1250 1400
Otros operadores de
comparacin
Operador Descripcin
BETWEEN... AND ... Entre dos valores(inclusive)
IN(list) Igual a la lista de valores
LIKE Iguala a un caracter
IS NULL Es un valor nulo
Usando operador BETWEEN
Usado para visualizar registros
entre un rango de valores.
SQL> SELECT ename, sal
2 FROM emp
3 WHERE sal BETWEEN 1000 AND 1500;
ENAME SAL
---------- ----------
WARD 1250
MARTIN 1250
TURNER 1500
ADAMS 1100
MILLER 1300
Usando operador IN
Usado para visualizar valores de
una lista
SQL> SELECT empno, ename, sal, mgr
2 FROM emp
3 WHERE mgr IN (7902,7566,7788);
EMPNO ENAME SAL MGR
---------- ---------- ---------- ----------
7369 SMITH 800 7902
7788 SCOTT 3000 7566
7876 ADAMS 1100 7788
7902 FORD 3000 7566
SQL> SELECT empno, ename, sal, mgr
2 FROM emp
3 WHERE ename IN ('FORD','ALLEN');
Usando Operador LIKE
Utilizado para realizar busqueda de
caracteres en valores validos.
%Denota cero o muchos caracteres.
_ Denota un carcter.
SQL> SELECT ename
2 FROM emp
3 WHERE ename LIKE 'S%';
ENAME
----------
SMITH
SCOTT
Usando Operador LIKE
combinando caracteres
SQL> SELECT ename
2 FROM emp
3 WHERE ename LIKE '_A%';
ENAME
---------
WARD
MARTIN
JAMES
SQL> SELECT ename, hiredate
2 FROM emp
3 WHERE hiredate LIKE '%81';
SQL> SELECT ename, hiredate
2 FROM emp
3 WHERE hiredate LIKE '%1981';
Hiredate=20-FEB-81
Usando operador IS NULL
Es un operador de prueba.
Utilizado para verificar la
precenecia de valores nulos.
SQL> SELECT ename, mgr
2 FROM emp
3 WHERE mgr IS NULL;
ENAME MGR
---------- ----------
KING
Operadores Lgicos
Operador Descripcin
AND Retorna valores solo si las dos
condiciones es verdadera
OR Retorna valores si uno o las dos
condiciones son verdaderas
NOT Retorna valor solo si la
condicion es falsa
Usando operador AND
Se requiere que ambas
condiciones sea verdadera.
SQL> SELECT empno, ename, job, sal
2 FROM emp
3 WHERE sal <= 1100
4 AND job = 'CLERK';
EMPNO ENAME JOB SAL
---------- ---------- --------- ----------
7369 SMITH CLERK 800
7876 ADAMS CLERK 1100
7900 JAMES CLERK 950
Usando operador OR
Se requiere que una de ellas debe
ser verdadera.
SQL> SELECT empno, ename, job, sal
2 FROM emp
3 WHERE sal <= 1100
4 OR job = 'CLERK';
EMPNO ENAME JOB SAL
---------- ---------- --------- ----------
7369 SMITH CLERK 800
7876 ADAMS CLERK 1100
7900 JAMES CLERK 950
7934 MILLER CLERK 1300
Usando operador NOT
SQL> SELECT ename, job
2 FROM emp
3 WHERE job
4 NOT IN ('CLERK','MANAGER','ANALYST');
ENAME JOB
---------- ---------
ALLEN SALESMAN
KING PRESIDENT
Continuacin...
SQL> SELECT ename, job
2 FROM emp
3 WHERE ename NOT LIKE 'A%';
SQL> SELECT *
2 FROM emp
3 WHERE mgr IS NOT NULL;
SQL> SELECT *
2 FROM emp
3 WHERE sal NOT BETWEEN 1000 AND 2500;
Reglas de precedencia
Orden de Evaluacin Operadores
1 Todos los operadores de
comparacin(Between,in,like,is
null)
2 NOT
3 AND
4 OR
Reglas de precedencia
ejemplo
SQL> SELECT ename, job, sal
2 FROM emp
3 WHERE job = 'SALESMAN'
4 OR job = 'PRESIDENT'
5 AND sal > 2000;
ENAME JOB SAL
---------- ------------------- ----------
ALLEN SALESMAN 1600
WARD SALESMAN 1250
MARTIN SALESMAN 1250
KING PRESIDENT 5000
TURNER SALESMAN 1500
ENAME JOB SAL
---------- --------- ----------
JONES MANAGER 2975
BLAKE MANAGER 2850
CLARK MANAGER 2450
SCOTT ANALYST 3000
KING PRESIDENT 5000
FORD ANALYST 3000
SQL> SELECT ename, job, sal
2 FROM emp
3 WHERE job='SALESMAN'
4 AND job='PRESIDENT'
5 OR sal>2000
Clausula ORDER BY
Permite hacer un ordenamiento de los
registros antesde ser visualizados.

ASC: orden ascendente , Default.

DESC: orden desendente.
Orden ascendente
SQL>SELECT ename, job, hiredate
2 FROM emp
3 ORDER BY hiredate;
ENAME JOB HIREDATE
---------- --------- ---------
SMITH CLERK 17-DEC-80
ALLEN SALESMAN 20-FEB-81
TURNER SALESMAN 08-SEP-81
MARTIN SALESMAN 28-SEP-81
KING PRESIDENT 17-NOV-81
FORD ANALYST 03-DEC-81
SCOTT ANALYST 19-APR-87
ADAMS CLERK 23-MAY-87
Orden descendente
SQL> SELECT ename, job, hiredate
2 FROM emp
3 ORDER BY hiredate desc;
ENAME JOB HIREDATE
---------- --------- ---------
ADAMS CLERK 23-MAY-87
SCOTT ANALYST 19-APR-87
MILLER CLERK 23-JAN-82
KING PRESIDENT 17-NOV-81
MARTIN SALESMAN 28-SEP-81
TURNER SALESMAN 08-SEP-81
ALLEN SALESMAN 20-FEB-81
SMITH CLERK 17-DEC-80
Ordenamiento de columnas con
Alias
SQL> SELECT ename, job Trabajo , hiredate
2 FROM emp
3 ORDER BY Trabajo;
ENAME TRABAJO HIREDATE
---------- --------- ---------
SCOTT ANALYST 19-APR-87
FORD ANALYST 03-DEC-81
SMITH CLERK 17-DEC-80
JAMES CLERK 03-DEC-81
JONES MANAGER 02-APR-81
BLAKE MANAGER 01-MAY-81
KING PRESIDENT 17-NOV-81
ALLEN SALESMAN 20-FEB-81
Sorteando multiples
columnas
SQL> SELECT ename, job Trabajo , hiredate
2 FROM emp
3 ORDER BY ename,job,trabajo;
ENAME TRABAJO HIREDATE
---------- --------- ---------
ADAMS CLERK 23-MAY-87
ALLEN SALESMAN 20-FEB-81
BLAKE MANAGER 01-MAY-81
CLARK MANAGER 09-JUN-81
.....
MILLER CLERK 23-JAN-82
SCOTT ANALYST 19-APR-87
SQL> SELECT ename, job Trabajo , hiredate
2 FROM emp
3 ORDER BY 1,2,3;
3
Funciones Simples
Tipos de Funciones
FUNCION
SIMPLE MULTIPLE
Datos
Datos
Funciones de Caracteres
F. de Conversin
LOWER, UPPER, INITCAP

F . de Manipulacin de Caracteres
CONCAT (columna1|expresin1,columna2)
SUBSTR (columna|expresin,1,n)
LENGTH(columna|expresin)

Conversin de funciones
SQL> SELECT UPPER(ename) Mayusculas, LOWER(ename) minusculas,
INITCAP(ename) Titulo
2 FROM emp;
MAYUSCULAS minusculas TITULO
---------- ---------- --------
SMITH smith Smith
ALLEN allen Allen
WARD ward Ward
JONES jones Jones
MARTIN martin Martin
BLAKE blake Blake
CLARK c lark Clark
SCOTT scott Scott
KING king King
TURNER turner Turner
ADAMS adams Adams
Continuacin ....
SQL> SELECT empno, ename, deptno
2 FROM emp
3 WHERE ename=UPPER('blake');
SQL> SELECT empno, ename, deptno
2 FROM emp
3 WHERE LOWER(ename) ='blake';
EMPNO ENAME DEPTNO
---------- ---------- ----------
7698 BLAKE 30
Manipulacin de funciones
CONCAT(Buena, Comida) Buena comida

SUBSTR(Buena,1,3) Bue

LENGTH(Buena ) 5
Continuacin.....
SQL> SELECT ename, CONCAT(ename, job), LENGTH(ename)
2 FROM emp
3 WHERE SUBSTR(job,1,5) = 'SALES';
ENAME CONCAT(ENAME,JOB) LENGTH(ENAME)
---------- ------------------- -------------
ALLEN ALLENSALESMAN 5
WARD WARDSALESMAN 4
MARTIN MARTINSALESMAN 6
TURNER TURNERSALESMAN 6
Funciones Numricas
ROUND
ROUND(45.926,2) 45.93

TRUNC
TRUNC(45.926,2) 45.92

MOD
MOD(1600,300) 100
Usando ROUND
SQL> SELECT ROUND(45.923,2), ROUND(45.923,0),ROUND(45.926,1)
2 FROM DUAL;
ROUND(45.923,2) ROUND(45.923,0) ROUND(45.926,1)
--------------- --------------- ----------------
45.92 46 45.9
Dual: tabla de memoria
Usando TRUNC
SQL>SELECT TRUNC(45.923,2), TRUNC(45.923,0),TRUNC(45.926,1)
2 FROM DUAL
TRUNC(45.923,2) TRUNC(45.923,0) TRUNC(45.926,1)
----------------------- ------------------------- -----------------------
45.92 45 45.9
Usando MOD
SQL> SELECT ename, sal, comm, MOD(sal, comm)
2 FROM emp
3 WHERE job='SALESMAN';
ENAME SAL COMM MOD(SAL,COMM)
---------- ---------- ---------- -----------------------
ALLEN 1600 300 100
WARD 1250 500 250
MARTIN 1250 1400 1250
TURNER 1500 0 1500
Trabajando con Fechas
Oracle almacena las fechas en formato
numrico: Centuria, aos, meses, das,
horas, minutos, segundos.
El formato por Default : DD-MON-YY.
La funcion SYSDATE retorna la fecha
actual.
SQL> SELECT sysdate FROM dual;
Aritmtica con fechas
Sumando o restando un nmero a
una fecha, el resultado sera una
fecha.
Restando dos fechas,el resultado
sera nmero de das.
Podemos sumar horas a una
fecha(hora/24)
Ejemplos
SQL> SELECT SYSDATE + 1 FROM DUAL;
SQL> SELECT SYSDATE - 1 FROM dual;
SQL> SELECT ename,ADD_MONTHS(hiredate,6) Fecha
FROM emp
2 WHERE hiredate BETWEEN '17-JUN-81' AND '17-MAY-82'
3 ORDER BY fecha ASC;
Conversin de tipos de
Datos
De A
Varchar2 o Char Number
Varchar2 o Char Date
Number Varchar2
Date Varchar2
Funcin
TO_CHAR con FECHA
YYYY 2004
MM 01
MOTH ENERO
DY MIE
DAY MIERCOLES
HH24:MI:SSAM 2004
DD de MONTH 01 de Enero
SQL> ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY.HH24:MI:SS';
SQL> ALTER SESSION SET NLS_LANGUAGE='SPANISH';
SQL> SELECT SYSDATE FROM DUAL;
SYSDATE
--------------------
12-DIC-2004.17:45:58
Usando TO_CHAR
SQL> SELECT ename, TO_CHAR(hiredate, 'fmDD Month YYYY') Hiredate
2 FROM emp;
ENAME HIREDATE
---------- ------------------
SMITH 17 Diciembre 1980
ALLEN 20 Febrero 1981
SQL> SELECT ename, TO_CHAR(sysdate, 'fmDD Month YYYY HH24:MI:SS AM')
2 FROM emp;
SQL> SELECT ename, TO_CHAR(sysdate, 'fmDD Month YYYY HH12:MI:SS AM')
2 FROM emp;
Funcin
TO_CHAR con Nmeros
SQL> SELECT to_char(sal) FROM emp;
TO_CHAR(SAL)
---------------
800
1600
1250
SQL> select to_char(325.25) FROM DUAL;
SQL> SELECT TO_NUMBER(TO_CHAR(325.5)) FROM DUAL;
Funcin NVL
Convierte valores nulos a uno
deseado.(date,character,number).

NVL(comm,0)
NVL(hiredate,01-JAN-74)
NVL(job,Trabajo en )
Usando NVL
SQL> SELECT ename, NVL(comm,'Trabajo en ') FROM emp;
ERROR at line 1:
ORA-01722: invalid number
SQL> SELECT ename, NVL(comm,2004) FROM emp;
ENAME NVL(COMM,2004)
---------- --------------
SMITH 2004
ALLEN 300
WARD 500
JONES 2004
Continua....
SQL> SELECT ename, sal, comm,(sal*12)+NVL(comm,0)
2 FROM emp;
ENAME SAL COMM (SAL*12)+NVL(COMM,0)
---------- ---------- ---------- --------------------
SMITH 800 9600
ALLEN 1600 300 19500
WARD 1250 500 15500
JONES 2975 35700
MARTIN 1250 1400 16400
Funcin DECODE
Es una funcin similar a IF-THEN-
ELSE

DECODE(column|exp, busca1,resultado1,
[ busca2, resulatdo2,]
[ busca3, resultado3,]
default)
Ejemplos....
SQL> SELECT job, sal, DECODE( JOB, 'ANALYST', SAL*1.1,
'CLERK',SAL*1.2,
'MANAGER',1.3,
SAL) SAL_REVISADO
2 FROM emp;
JOB SAL SAL_REVISADO
--------- ---------- ------------
CLERK 800 960
SALESMAN 1600 1600
SALESMAN 1250 1250
MANAGER 2975 1.3
SALESMAN 1250 1250
MANAGER 2850 1.3
MANAGER 2450 1.3
4
Visualizando datos
de multiples tablas
Que es un Join?
Se usa en una consulta para enlazar
dos tablas o mas tablas.
Se escribe en la clausula WHERE.
Se fija con nombre de la columna de
una tabla y con el nombre la columna
de otra tabla que contengan datos que
se relacionen.
Producto Cartesiano
Es el resultado de un JOIN:
Omitido, Invalido,Todos los registros de un tabla
son enlasados a todos los de la segunda tabla.
Siendo el resultado una cantidad de registros
muy lago, no siendo util.

Para evitar un Producto Cartesiano, siempre
debemos realizar condiciones JOIN validos
Tipos de Joins
Equijoin
No-equijoin
Adicionales:
Outer join
Self join
EquiJoin
Cuando en dos tablas la relacin(join)
se realiza mediante la PK o FK.
Table emp Deptno
Table dept Deptno


SQL> SELECT empno,ename, deptno FROM emp,dept
2 WHERE emp.deptno=dept.deptno;
SELECT empno,ename, deptno
*
ERROR at line 1:
ORA-00918: column ambiguously defined
Usemos prefijos
Ejemplo......
SQL> SELECT emp.empno,emp.ename, emp.deptno,dept.deptno,dept.loc
2 FROM emp,dept
3 WHERE emp.deptno=dept.deptno;
EMPNO ENAME DEPTNO DEPT LOC
---------- ---------- ---------- ---------- -------------
7369 SMITH 20 20 DALLAS
7499 ALLEN 30 30 CHICAGO
7521 WARD 30 30 CHICAGO
7902 FORD 20 20 DALLAS
7934 MILLER 10 10 NEW YORK
..........
14 rows selected.
Mostramos la localidad de cada empleado de emp
Usando Alias
SQL> SELECT A.empno, A.ename, A.deptno,B.deptno,B.loc
2 FROM emp A,dept B
3 WHERE A.deptno=B.deptno;
EMPNO ENAME DEPTNO DEPT LOC
---------- ---------- ---------- ---------- -------------
7369 SMITH 20 20 DALLAS
7499 ALLEN 30 30 CHICAGO
7521 WARD 30 30 CHICAGO
7902 FORD 20 20 DALLAS
7934 MILLER 10 10 NEW YORK
..........
14 rows selected.
Enlazando mas de dos
tablas
Tabla CUSTOMER
Tabla ORD
Tabla ITEM
SQL> SELECT c.ename, 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';
Non equijoin
Cuando la relacin entre tablas se
realiza por columnas que no son PK o
FK.(contengan datos iguales).
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;
La consulta se basa en la tabla emp
Continua....
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
5 AND e.sal > 1500;
ENAME SAL GRADE
---------- ---------- ----------
ALLEN 1600 3
JONES 2975 4
BLAKE 2850 4
CLARK 2450 4
SCOTT 3000 4
FORD 3000 4
KING 5000 5
Outer join
Si un registro no satisface una condicin, el
registro no debera aparecer en el
resultado.
Muestra registros que usualmente no
deben verse en el resultado.
SQL> SELECT e.ename, e.deptno , d.dname
2 FROM emp e, dept d
3 WHERE e.deptno = d.deptno;
SQL> SELECT e.ename, e.deptno , d.dname
2 FROM emp e, dept d
3 WHERE e.deptno = d.deptno(+);
Selfjoin
Cuanado realizamos enlaces a la
misma tabla.
Generalemte la tabla es recursiva.
Continua....
EMPNO ENAME MGR
---------- ---------- ---------
7369 SMITH 7902
7499 ALLEN 7698
7521 WARD 7698
7566 JONES 7839
7654 MARTIN 7698
7698 BLAKE 7839
7782 CLARK 7839
7788 SCOTT 7566
7839 KING
7844 TURNER 7698
7876 ADAMS 7788
7900 JAMES 7698
7902 FORD 7566
7934 MILLER 7782
EMPNO MGR
---------- ----------
7369 7902
7499 7698
7521 7698
7566 7839
7654 7698
7698 7839
7782 7839
7788 7566
7839
7844 7698
7876 7788
7900 7698
7902 7566
7934 7782
A
B
Continua ...
SQL> SELECT a.ename ||' Trabaja para '||b.ename
2 FROM emp a, emp b
3 WHERE a.mgr=b.empno;
A.ENAME||'TRABAJADE'||B.ENAME
-------------------------------
SMITH Trabaja para FORD
ALLEN Trabaja para BLAKE
WARD Trabaja para BLAKE
JONES Trabaja para KING
MARTIN Trabaja para BLAKE
BLAKE Trabaja para KING
CLARK Trabaja para KING
SCOTT Trabaja para JONES
5
Usando Funciones de
Grupo
Que son Funciones de Grupo
Son funciones fijas a los registros
para conseguir un resultado por
grupo.

Tipos de Funciones de Grupo
AVG
COUNT
MAX
MIN
SUM

Uso

Todas las funciones exepto COUNT( * ) ignoran los
valores nulos.
SELECT [columna,] funcin_grupo(columna)
FROM tabla
WHERE condicin]
[GROUP BY]
[ORDER BY];
Usando AVG y SUM
Podemos usar AVG y SUM para
datos numricos.
SQL> SELECT AVG(sal), MAX(sal), MIN(sal), SUM(sal)
2 FROM emp
3 WHERE job LIKE 'SALES%';
AVG(SAL) MAX(SAL) MIN(SAL) SUM(SAL)
---------- ---------- ---------- ----------
1400 1600 1250 5600
Usando MIN y MAX
Podemos usar MIN y MAX para
cualquier tipo de dato.
SQL> SELECT MIN(hiredate), MAX(hiredate)
2 FROM emp;
MIN(HIRED MAX(HIRED
--------------- --------------
17-DEC-80 23-MAY-87
Usando COUNT
Nos retorna el nmero de registros de una
tabla, incluyendo datos duplicados y nulos.
SQL> SELECT COUNT( * )
2 FROM emp
3 WHERE deptno=30;
COUNT(*)
----------
6
Continua ....
Si uso COUNT(columna), el retorno
ser el nmero de registros no nulos
SQL> SELECT COUNT(deptno)
2 FROM emp;
COUNT(DEPTNO)
-------------
14
SQL> SELECT COUNT(comm)
2 FROM emp;
SQL> SELECT COUNT ( DISTINCT (deptno) )
2 FROM emp;
Valores nulos y Funciones de
Grupo
El promedio de una columna se
calcula en base a los valores validos.
( no los nulos ).
SQL> SELECT AVG(comm)
2 FROM emp;
AVG(COMM)
----------
550
Usando NVL y Funciones de
Grupo
La funcin NVL fuerza a las funciones
de grupo a incluir valores NULOS.
SQL> SELECT AVG ( NVL ( comm,0 ) )
2 FROM emp;
SQL> SELECT AVG ( comm )
2 FROM emp;
AVG(NVL(COMM,0))
----------------
157.142857
Creando Grupos de Datos
Es muy usado cuando deseamos
agrupar datos de alguna tabla.

Esto puede realizarse usando la
clusula GROUP BY.
Creando grupos de datos
SELECT [columna,] funcin_grupo(columna)
FROM tabla
WHERE condicin]
[GROUP BY expresin de grupo]
[ORDER BY columna];
Expresin de grupo, especifica las columnas cuyos
valores determinarn el agrupamiento.

Notas de GROUP BY
Debemos incluir las columas en la
clusula GROUP BY.
No es posible usar alias para las
columas en la clusula GROUP BY.
Por default los registros son sorteados
en orden ascendente por las columnas
que se muestren en la clusula
GROUP BY.
Usando Clausula GROUP BY
Todas las columnas listadas en
SELECT que no tiene funcin de grupo
deben estar en la clusula GROUP BY.
SQL> SELECT deptno, AVG(sal)
2 FROM emp
3 GROUP BY deptno;
DEPTNO AVG(SAL)
---------- ----------------
10 2916.66667
20 2175
30 1566.66667
Continua ...
La columna por la que se realizar el
agrupamiento, no necesarimente
debe formar parte de la lista en
SELECT.
SQL> SELECT AVG ( sal )
2 FROM emp
3 GROUP BY deptno;
AVG(SAL)
----------
2916.66667
2175
1566.66667
Agrupando mltiples columnas
El resultado de un agrupamiento de
datos puede ser por grupos y
subgrupos de acuerdo la relacin
de columnas que coloquemos en
GROUP BY.
SQL> SELECT deptno, job, SUM(sal)
2 FROM emp
3 GROUP BY deptno, job;
Errores comunes
SQL> SELECT deptno, AVG(sal)
2 FROM emp
3 WHERE AVG ( sal ) > 2000
4 GROUP BY deptno;
SQL> SELECT deptno, COUNT(*)
2 FROM emp;
SELECT deptno, COUNT(*)
*
ERROR at line 1:
ORA-00937: not a single-group group function
Excluyedo resultados de grupo
Usnado la clusula HAVING podemos
restringir grupos
Los registros son agrupados
La funcin grupo es aplicada
Los grupos que cumplen con la condicin
HAVING son los que se visualizn.
Esta clausula es precidida de la
clusula GROUP BY.

Clusula HAVING
SELECT [columna,] funcin_grupo(columna)
FROM tabla
WHERE condicin]
[GROUP BY exprecin de grupo]
[HAVING condicin de grupo]
[ORDER BY columna];
Usando clusula HAVING
SQL> SELECT deptno, MAX (sal)
2 FROM emp
3 GROUP BY deptno
4 HAVING MAX (sal) > 2000;
DEPTNO MAX(SAL)
---------- ----------
10 5000
20 3000
30 2850
Continua ...
SQL> SELECT deptno, MAX(sal)
2 FROM emp
3 GROUP BY deptno
4 HAVING MAX(sal) BETWEEN 800 AND 3000;
DEPTNO MAX(SAL)
---------- ----------
20 3000
30 2850
Combinando funciones de grupo
SQL> SELECT MAX(AVG(sal))
2 FROM emp
3 GROUP BY deptno;
MAX(AVG(SAL))
-------------
2916.66667

You might also like