You are on page 1of 65

CURSO SQL*PLUS

INTRODUCCION AL SQL PLUS.........................................................................................................................................4


OBJETIVOS. ...........................................................................................................................................................................4
INTRODUCCIN. .....................................................................................................................................................................4
INICIO DE UNA SESIN ...........................................................................................................................................................4
DIFERENCIAS ENTRE SQL Y SQL*PLUS.............................................................................................................................5
COMANDOS SQL*PLUS .......................................................................................................................................................5
SQL*PLUS Y SU BUFFER. ....................................................................................................................................................7
FUNCIONES DE EDICIN ........................................................................................................................................................7
MODIFICACIN DEL BUFFER CON EL EDITOR DE TEXTO DEL SISTEMA. .................................................................................8
CREACIN DE ARCHIVOS DE SALIDA. ....................................................................................................................................8
GUARDAR Y RECUPERAR ARCHIVOS. ....................................................................................................................................8
ARCHIVOS DE COMANDOS. ....................................................................................................................................................9
VARIABLES DE SUSTITUCIN. ................................................................................................................................................9
INTRODUCCION AL SQL ..................................................................................................................................................10
OBJETIVOS...........................................................................................................................................................................10
INTRODUCCIN ....................................................................................................................................................................10
SELECCIN DE COLUMNAS ..................................................................................................................................................11
CLUSULA FROM. ..............................................................................................................................................................11
CLUSULA WHERE ............................................................................................................................................................12
CLUSULA WHERE ( ENDOSADO SQL )...........................................................................................................................14
CLUSULA ORDER BY ......................................................................................................................................................15
CLUSULA CURRENT OF.................................................................................................................................................16
CLUSULAS CONNECT BY Y START WITH..................................................................................................................17
PRIOR ................................................................................................................................................................................18
START WITH.....................................................................................................................................................................18
USO DE ORDER BY...........................................................................................................................................................18
TIPOS DE DATOS ..................................................................................................................................................................19
TIPOS FORMATOS ................................................................................................................................................................19
FORMATOS NUMRICOS ......................................................................................................................................................20
FORMATOS DE FECHA .........................................................................................................................................................20
OPERADORES.....................................................................................................................................................................21
OPERADORES ARITMTICOS ...............................................................................................................................................21
OPERADORES DE CARACTERES ..........................................................................................................................................21
OPERADORES DE COMPARACIN .......................................................................................................................................22
OPERADOR NOT IN ............................................................................................................................................................23
OPERADORES LGICOS ......................................................................................................................................................23
OTROS OPERADORES ..........................................................................................................................................................23
FUNCIONES..........................................................................................................................................................................25
FUNCIONES DE UNA SOLA FILA ................................................................................................................................25
FUNCIONES DE CARACTERES ..............................................................................................................................................27
FUNCIONES DE STRING QUE RETORNAN VALORES NUMRICOS .........................................................................................29
FUNCIONES DE GRUPO .......................................................................................................................................................30
FUNCIONES DE CONVERSIN ..............................................................................................................................................31
FUNCIONES DE FECHA ........................................................................................................................................................33
OTRAS FUNCIONES .............................................................................................................................................................35
QUERIES ...............................................................................................................................................................................37
QUERY .................................................................................................................................................................................37
QUERY CORRELATIVO .........................................................................................................................................................39
QUERYS DISTRIBUIDOS........................................................................................................................................................41
IDENTIFICANDO TABLAS REMOTAS:.....................................................................................................................................41
RESTRICCIONES A QUERYS DISTRIBUIDOS: ........................................................................................................................41

2
MANEJO DE DATOS EN CONJUNTO ............................................................................................................................42
OBJETIVOS...........................................................................................................................................................................42
INTRODUCCIN ....................................................................................................................................................................42
CLUSULA GROUP BY Y HAVING..................................................................................................................................42
CLUSULA HAVING............................................................................................................................................................43
CONSULTAS CON MLTIPLES TABLAS......................................................................................................................44
SIMPLE JOIN ........................................................................................................................................................................44
PRODUCTO CARTESIANO. ...................................................................................................................................................45
OUTER JOIN .....................................................................................................................................................................46
JOINS ...................................................................................................................................................................................48
EQUI-JOIN ............................................................................................................................................................................48
USANDO ALIAS .....................................................................................................................................................................49
PRODUCT.............................................................................................................................................................................49
NO EQUI-JOIN. ....................................................................................................................................................................49
OTROS MTODOS DE JOIN. .................................................................................................................................................51
UNION ................................................................................................................................................................................52
INTERSECT.......................................................................................................................................................................52
MINUS ................................................................................................................................................................................52
ORDER BY ............................................................................................................................................................................53
EJERCICIOS .........................................................................................................................................................................54
SUBQUERYES .....................................................................................................................................................................54
OBJETIVOS...........................................................................................................................................................................54
QUERIES ANIDADOS ............................................................................................................................................................54
COMPARANDO MS DE UN VALOR .......................................................................................................................................56
OPERADORES ANY Y ALL..................................................................................................................................................56
CLUSULA HAVING CON SUBQUERIES ANIDADOS ............................................................................................................57
ORDENANDO LOS DATOS CON SUBQUERY. .........................................................................................................................58
ANIDANDO SUBQUERIES......................................................................................................................................................58
INSERCION DE DATOS EN UNA TABBLA (INSERT) .................................................................................................59

MODIFICACION DE DATOS EN UNA TABLA (UPDATE) ...........................................................................................60


SUBQUERIES CORRELACIONADOS.......................................................................................................................................62
OPERADORES ......................................................................................................................................................................64
OPERADOR EXISTS. ..........................................................................................................................................................64
PORQUE USAR SUBQUERIES CORRELACIONADOS? ............................................................................................................64
CONSIDERACIONES DE EFICIENCIA .....................................................................................................................................64
ELIMINACIN DE FILAS (DELETE). ...............................................................................................................................65

3
INTRODUCCION AL SQL PLUS

Objetivos.
Comprender las diferencia entre SQL y SQL*PLUS.
Editar el contenido del buffer.
Conocer comandos de SQL*PLUS.

Introduccin.
SQL*PLUS nos permite crear y ejecutar consultas en SQL y ejecutar bloques de cdigo en PL/SQL con la
finalidad de obtener resultados en forma inmediata.

SQL*PLUS nos provee de las siguientes funciones:


Trabajo interactivo en Oracle por medio de SQL.
Ambiente interactivo ya que los comandos SQL se pueden ejecutar inmediatamente.
Ayuda en lnea de los comandos del SQL y SQL*PLUS que necesite ocupar.

Inicio de una sesin


Para ingresar al ambiente SQL*PLUS trabajando en ambiente UNIX debe estar conectado a una cuenta UNIX y
tener acceso a ejecutar SQL*PLUS en este caso debe efectuar los siguientes pasos.

SQL*Plus: Release 3.1.3.7.1 - Production on Mon Mar 29 09:41:05 1999

Copyright (c) Oracle Corporation 1979, 1994. All rights reserved.

Enter user-name:usuario
Enter password:password

Connected to:
Oracle7 Server Release 7.1.6.2.0 - Production Release
With the distributed, replication and parallel query options
PL/SQL Release 2.1.6.2.0 - Production

SQL>

4
Diferencias entre SQL y SQL*PLUS

No se debe confundir SQL con SQL*PLUS. SQL es un lenguaje de consulta que nos permite efectuar consultas,
modificaciones, etc. ala base de datos y tambin puede ser usado en otras herramientas de Oracle u otros
productos. SQL*PLUS en una de las herramientas que nos permite utilizar SQL.

Funciones de comando SQL Uso de comandos


Consultas Editar, almacenar y ejecutar comandos SQL.
Manipular datos Formatear, realizar clculos, e imprimir resultados de consultas.
Control de datos Acceso y copiado de entre base de datos.

Comandos SQL*PLUS
Estos comandos nos permiten trabajar en el ambiente Sql*Plus de Oracle, con ellos podemos definir variables
de ambiente, trabajar con archivos, generar reportes, etc.

Comando Descripcin
@ Ejecuta un archivo de comandos
/ Ejecuta un bloque de comandos SQL o
SQL*Plus almacenados en el buffer
ACCEPT Lee un valor desde el teclado y lo almacena en
una variable de usuario.
APPEND Agrega texto al final de la lnea del buffer.
BREAK Especifica cuando y donde se realizara un corte
de control en el report
BTITLE Especifica el formato del titulo que aparecer el
final de cada pagina en el report
CHANGE Cambia texto en la lnea actual de buffer
CLEAR Resetea o borra los valores tomando por las
variables tales como BREAKS o COLUMNS
COLUMN Especifica los atributos desplegados por las
columnas seleccionadas
COMPUTE Calcula e imprime lneas de resumen
CONNECT Conecta a un determinado usuario a Oracle
COPY Copia datos desde u query a una tabla local o
remota
DEFINE Especifica las variables de usuario
DEL Borra la lnea actual de buffer
DESCRIBE Lista de descripcin de una tabla, vista o
sinnimo

5
DISCONNECT Graba los cambios pendientes en la base de
datos, desconectndose del usuario y no se sale
de Sql*plus esperando que se conecte por
medio del comando CONNECT
EDIT Realiza una llamada al sistema para el editor de
texto
EXECUTE Ejecuta una sentencia PL/SQL
EXIT Graba los cambios pendientes en la base de
datos y termina la ejecucin del SQL*Plus
GET Carga un archivo de comandos en el buffer
HELP Muestra la ayuda del sistema
HOST Realiza una llamada al sistema para ejecutar un
comando del sistema operativo
INPUT Agrega una lnea al final de la lnea actual de
buffer
LIST Muestra lo que esta en el buffer
PAUSE Despliega los datos con una pausa, para
continuar presione ENTER
PRINT Lista las variables
REMARK Comienza una lnea de comentario
RUN Lista y ejecuta comandos SQL o PL/SQL
RUNFOM Llama a una aplicacin de SQL*Forms
SAVE Almacena en un archivo lo que esta en el buffer
SET Establece los principales aspectos de ambiente
de SQL*Plus
SHOW Lista los valores de las variables de ambiente de
SQL*Plus
SPOOL Almacena los resultados en un archivo
SQLPLUS Ejecuta SQL*Plus
START Ejecuta el contenido de un archivo de comandos
TITLE Coloca y formatea un titulo en el principio de
cada pagina del report

6
SQL*PLUS y su buffer.
Los comandos SQL que queramos ejecutar estarn almacenados en un espacio de memoria llamado buffer,
este espacio nos permite tener almacenado el ltimo comando que hayamos ejecutado, nos permite efectuar
modificaciones a la sentencia SQL.

SQLPLUS>
1 SELECT *
2 FROM EMP
3/
SQLPLUS>

Una vez hayamos digitado nuestra sentencia SQL esta puede ser ejecutada de distintas formas
Aadiendo un punto y coma (;) Al final de toda la sentencia SQL.
Una vez que hayamos editado y visualizado la sentencia SQL puede utilizar RUN.
Cuando no hayamos visualizado la sentencia podemos utilizar /.

El buffer guarda la ultima sentencia SQL y esta permanece activa hasta que se ingrese otra sentencia SQL

Funciones de edicin

Existen dos formas para modificar el contenido de una sentencia SQL que este en el buffer. Una es ocupando el
editor que este definido por el sistema UNIX y la otra es modificando directamente el buffer.

Modificacin del buffer.


LIST Lista el contenido completo el buffer.
LIST n Lista la lnea n para su posterior edicin, convirtiendo en la lnea actual.
APPEND Aade caracteres a la lnea actual.
DEL Borra la lnea actual.
INPUT Espera la introduccin de lneas adicionales que sern colocadas inmediatamente despus de
la lnea actual.
CHANGE Reemplaza en la lnea actual la cadena1 por la cadena2. Dentro de la cadena

Cabe destacar que los comandos descritos en el punto anterior pueden ser abreviados usando solo la primera
letra excepto el comando DEL.

7
Modificacin del buffer con el editor de texto del sistema.

El contenido del buffer tambin puede ser modificado mediante el editor de texto del sistema que este
utilizando. SQL*PLUS crear un archivo llamado afiedt.buf con la sentencia SQL cada vez que usted efecte
una llamada el editor del sistema. Una vez dentro del editor de texto del sistema usted efectuara las
modificaciones necesarias y luego debe salirse del editor normalmente con la finalidad de retornar al ambiente
SQL*PLUS y ejecutar la sentencia SQL.
En el caso que usted quiera guardar el contenido de un archivo con un determinado nombre debe ingresar el
siguiente comando.

SQLPLUS>
1 SELECT *
2 FROM EMP
SQLPLUS> SAVE archivo_sql [ENTER]

Creacin de archivos de salida.

El resultado de una sentencia SQL puede ser guardada permanentemente mediante el comando SPOOL o su
abreviacin SPO nombre_archivo.
SQLPLUS>
1 SELECT ENAME,HIDEDATE
2 FROM EMP;
SQLPLUS>SPO archivo_salida
ENAME HIDERATE
----------- ---------------
.............. ....................
.............. ....................
SQLPLUS>SPO OFF

Estos pasos enviaron el resultado de la consulta a un archivo representado por medio del nombre
archivo_salida, si posteriormente quisiramos editar el contenido del archivo podemos hacerlo por medio del
editor del sistema que estemos utilizando.

Guardar y recuperar archivos.

El ambiente SQL*PLUS nos permite guardar archivos de comandos con la finalidad de utilizarlos
posteriormente.
Por medio de l comando SAVE usted tiene la posibilidad de guardar la sentencia SQL que construy.

SQLPLUS>SAVE nombre_archivo [APPEND CREATE REPLACE]

8
Para ejecutar un archivo de comandos existen varias posibilidades, una de ellas es ocupar los comando GET,

START y el smbolo arroba como se muestra a continuacin

SQLPLUS>GET nombre_archivo [list,no list]


SQLPLUS>GET START nombre_archivo

Archivos de comandos.

Los archivos de comandos son conjuntos de comandos SQL que pueden estar acompaados de otros
comandos SQL*PLUS tales como comentarios, constantes, variables locales y de ambiente y sentencias SQL.

Variables de sustitucin.

Estas variables sirven para reemplazar en el momento de ejecucin un valor determinado. Los valores que
puede tomar son de carcter, numricos y fechas. Las variables de sustitucin se estn representadas por el
smbolo & que se pone delante del nombre de la variable, un ejemplo seria

SELECT ENAME
FROM EMP
WHERE DEPTNO=&var_deptno;
SQL>Enter value for var_deptno: 30

Si usted desea que SQL*PLUS pregunte solo la primera vez por el valor de una variables de sustitucin esta
debe estar precedida de dos smbolos &, sea &&var_deptno.

9
INTRODUCCION AL SQL

Objetivos

1. Realizacin de Clculos
2. Manipulacin Valores Nulos Correctamente
3. Especificacin de Columnas en forma alternativa
4. Concatenacin de columnas
5. Ordenamiento de filas
6. Ingreso de Criterios de bsqueda

Introduccin
Sql es un lenguaje que permite la comunicacin entre el usuario y Sistema de Base de datos Oracle.
Oracle tiene las siguientes caractersticas.

1. Unificado.
Es un lenguaje para todo tipo de usuarios
2. Similar al idioma ingles.
3. No procedimental.
El usuario especifica QUE quiere y no COMO ni DONDE.
4. Completamente Relacional
Permite realizar consultas a bases de datos.
El nombre SQL esta dado por la composicin de Structured Query Languaje, pero esto no significa que Sql
sea solo un lenguaje de consultas. Sql, es un poderoso lenguaje capaz de actualizar, definir datos,
consistencia, etc.
5. Todas las consultas son realizadas con una sola sentencia SELECT
6. El usuario utiliza la sentencia SELECT a un nivel de complejidad adecuado para l. Por esto las consultas
simples son muy sencillas de realizar y por otra parte el grado de complejidad es ilimitado.
7. La consulta de datos se realiza por asociacin de valores y no por localizacin
8. Los datos pueden ser representados en un orden determinado.

10
Seleccin de columnas
Vamos a trabajar con las tablas EMP y DEPT.

Seleccin de todas las columnas de una tabla.


SELECT EMP_NO, APELLIDO, OFICIO, DIR, FECHA_ALT,
SALARIO, COMISION, DEPTNO
FROM EMP;

SELECT *
FROM EMP;

Seleccin de determinadas columnas

SELECT DNAME, DEPTNO


FROM DEPT;

Clusula FROM.

Propsito:
Especifica la tabla o las tablas para la sentencia SELECT o UPDATE
Requisitos:
Ninguno
Sintaxis:
En la sentencia DELETE
DELETE [FROM] [user.] [table@databaselink] [alias]
[WHERE Condicin]

En la sentencia SELECT
SELECT select_list
FROM [user.] table [alias] [@databaselink] ,..
Palabras Clave:
User Es el dueo de la tabla o vista.
Table Es el nombre de la tabla o vista
Alias Es el nombre temporal asignado a la tabla o columna un alias permite que la misma tabla sea
referenciada en un query correlativo. Este alias tambin permite abreviar el nombre de una tabla
en un query.
Databaselink Es un link vlido de la base de datos que hace referencia otra base de datos remota

11
Notas:
FROM es una clusula requerida en la sentencia SELECT y es opcional en la sentencia DELETE. Identifica la
tabla de la cual se borraran filas o identifica la tabla o las tablas de las cuales se seleccionaran datos.
La sentencia REVOKE tiene una clusula FROM que tiene otras funciones. Esta descripcin no se aplica a esta
sentencia.

Si la tabla es propiedad de otro usuario el nombre de la tabla debe ser identificado con el nombre del usuario
dueo. El nombre de usuario y el nombre de la tabla estn separados por un punto.

Ejemplos:
Para borrar filas con el valor 50 en la columna DEPTNO de una tabla EMP debe ingresar

DELETE FROM EMP WHERE DEPTNP=50;

Para seleccionar filas con el valor 40 en la columna DEPTNO de una tabla EMP debe ingresar

SELECT * FROM EMP WHERE DEPTNP=40;

Para seleccionar filas con el valor 40 en la columna DEPTNO de las tablas EMP y EMP2 debe ingresar

SELECT * FROM EMP, EMP2 WHERE EMP.EMPNO=EMP2.EMPNO AND DEPTNP=40;

Si EMP2 tiene como dueo otro usuario cuyo nombre de usuario es BEN ingrese

SELECT * FROM EMP, BEN.EMP2 WHERE EMP.EMPNO=EMP2.EMPNO AND DEPTNP=40;

Clusula WHERE

Objetivo:
Restringe cuales filas son devueltas desde la tabla en una afirmacin SELECT, o cuando se acta sobre una
afirmacin DELETE o UPDATE.

Pre requisitos:
Ninguno.

Sintaxis:
DELETE ...
WHERE Condicin

12
SELECT...
WHERE Condicin

UPDATE...
WHERE Condicin

- Palabras claves y parmetros:


condicin:
es una expresin lgica que puede hacer referencia a las variables anfitrionas o variables anfitrionas arrays (
La clusula WHERE de la SELECT puede no contener variables anfitrionas arrays) las condiciones de
bsqueda podran contener un query.

Notas de Usuario:
El objetivo de la clusula WHERE es para especificar una condicin. La afirmacin que contenga la clusula
WHERE actuar sobre las filas que satisfagan la condicin.
La condicin es definida por expresin lgica. Por ejemplo:
DEPTNO=30.
Es una expresin lgica que es verdadera si el valor de DEPTNO es 30, de lo contrario es falsa.
AND y OR pueden ser usados para formar expresiones compuestas y lgicas. Por ejemplo, la expresin:
DEPTNO=30 AND JOB='SALESMAN'
Es verdadera slo si ambas expresiones compuestas son verdaderas.
NOT puede ser usada para revertir el sentido de una expresin. Por ejemplo,
NOT (DEPTNO=30 AND JOB='SALESMAN')
Es verdadera s
DEPTNO=30 AND JOB='SALESMAN'

Es falsa.

Ejemplos:
Esta afirmacin selecciona todas las filas en las que el valor de DEPTNO no es igual a 30:
SELECT * FROM ESMP WHERE DEPTNO!=30;

Esta afirmacin actualiza todas las filas en las que el valor de COMM en nulo:
UPDATE EMP SET SAL=(1.1*SAL) WHERE COMM IS NULL;

Esta afirmacin usa un querr correlacionado para borrar todos los departamentos que no tengan empleados:
DELETE FROM DEP A WHERE NOT EXISTS
(SELECT 'TRUE' FROM ESMP B
WHERE A.DEPTNO = B.DEPTNO)

13
Para cada fila en la tabla DEPT, ORACLE realiza los siguientes pasos:
1 Determina el DEPTNO de la fila
2 Utiliza el DEPTNO de esa fila para determinar si dicho DEPTNO existe en la tabla EMP.
3 Si el DEPTNO no existe en la tabla EMP, borra la fila. Si el DEPTNO existe para cualquiera de las filas de la
tabla EMP, no borre la fila.

Note que este DELETE utiliz un query correlacionado ya que el query hace referencia a la tabla de un
query emparentado. El constante TRUE reserva el lugar y puede ser reemplazado por cualquier constante o
columna de la tabla EMP. El operador NOT EXISTS especifica que la fila en cuestin ser borrada si ninguna
fila es devuelta por el query.

Clusula WHERE ( Endosado SQL )

Objetivo:
Restringe que filas son devueltas de la tabla en las afirmaciones SELECT, DELETE y UPDATE.

Pre requisitos:
Ninguno

Sintaxis:
La sintaxis para una clusula WHERE endosada es:

SELECT ...
FROM....
WHERE [Condicin | CURRENT OF cursor_name]

Palabras claves y parmetros:


condicin: es una expresin lgica que puede hacer referencia a las variables anfitrionas o variables anfitrionas
arrays ( La clusula WHERE de la SELECT puede no contener variables anfitrionas arrays) las condiciones
de bsqueda podran contener un query.

CURRENT OF ( nombre_cursor ) Slo puede ser usado con DELETE o UPDATE; Se refiere a la ultima
fila procesada por la afirmacin FETCH asociada con el cursor nombrado.

Notas de Usuario:
Si una clusula WHERE es omitida en una afirmacin DELETE o UPDATE, entonces el 5to componente del
sqlwarn ( SQLCA) es puesto en W como seal de advertencia y la accin EXECSQL WHENEVER
SQLWARNING es tomada.

14
Si todas las variables anfitrionas usadas en la clusula de bsqueda condicionada WHERE son arryas, el
resultado es el mismo que si la afirmacin hubiese sido ejecutada una vez por cada conjunto de componentes
arrays.
Si cualquiera de las variables anfitrionas utilizadas en la clusula WHERE son arrays, entonces todas las
variables anfitrionas en la clusula WHERE deben ser arrays.
Los arrays pueden ser de distintos tamaos, en cuyo caso el de menor tamao (o el valor especificado en una
clusula FOR opcional) es utilizado para especificar la cantidad de veces que la afirmacin SQL con la clusula
WHERE es utilizada.
La clusula WHERE de la afirmacin SELECT podra no contener variables anfitrionas arrays.

Clusula ORDER BY

Objetivo:
Arregla el resultado de una pregunta.
Requisito:
Ninguno.
Sintaxis:

SELECT...
ORDER BY {Expr | position} [ASC|DESC]

Palabras claves y Parmetros:


Expr es una expresin basada en una o ms columnas en la clusula SELECT o de una de las tablas
en la clusula FROM.
Position Es un nmero que identifica la posicin de una columna en la clusula SELECT. Por
ejemplo, en vez de ordenar por nombres de columnas, position permite que ordenes de acuerdo a la primera
columna de la lista seleccionada. S el operador UNION; INTERSECT o MINUS es usada, los tems ORDER BY
deben ser especificados por position.
ASC / DESC especifica ordenes ascendentes o descendentes de acuerdo a la secuencia. Los valores nulos
siguen a todos los dems en orden ascendente y proceden a los dems en orden descendente. Por lo tanto, los
nulos quedan mas altos.

Notas de usuario:
Use la clusula ORDER BY para especificar el orden en que los resultados de la pregunta deben ser
mostrados. La clusula ORDER BY es la nica manera en que se garantiza el orden de las filas.

Las filas son ordenadas por valor del primer expr. o position. Las filas con el mismo valor son ordenadas por el
valor del segundo tem (si es que alguno es especificado) y as sucesivamente.

15
Ordenando por positn es til cuando se ordena una expresin larga. En vez de escribir de nuevo toda la
expresin en la clusula ORDER BY, puedes simplemente suplir la posicin de la expresin en la clusula
SELECT. Ordenando por posicin es necesario cuando se usa UNION, INTERSECT, o MINUS ya que las
tablas a las que se les hace referencia por estos operadores no tienen que necesariamente tener columnas con
el mismo nombre.
No puedes hacer referencia a una columna alias en la clusula ORDER BY.
La clusula ORDER BY est sujeta a las siguientes restricciones:
- La clusula ORDER BY deber estar especificada despus de todas las otras clusulas, excepto por la clusula
FOR UPDATE OF. Ambas clusulas no pueden intercambiarse.
- La clusula ORDER BY y el operador DISTINCT estn especificadas. La clusula ORDER BY no puede hacer
referencia a columnas que no estn mencionadas en la clusula SELECT.
- La clusula ORDER BY no est permitida en las su preguntas en INSERT; UPDATE; CRATE TABLE o
CRATE VIEW.
- Un limite del sistema se aplica al total de bytes en todas las expresiones de ORDER BY.

Esta clusula se aplica despus de CONNECT BY. Se recomienda que no uses ORDER BY en conjuncin con
CONNECT BY ya que su uso negar el efecto de CONNECT BY.

Ejemplo:
Para seleccionar los rcords de un vendedor desde el EMP, y pedir una entrega por comisin en orden
descendente, ingrese:

SELECT * FROM EMP WHERE JOB='SAESMAN'


ORDER BY COMM DESC;

Para seleccionar los empleados desde el EMP, ordenados primero por los nmeros ascendentes de los
departamentos, y luego por salarios descendentes, ingrese:

SELECT * FROM EMP WHERE JOB='SAESMAN'


ORDER BY DEPTNO ASC, SALARY DESC;

Para seleccionar la misma informacin como en el SELECT previo y usar las posiciones ORDER BY, ingrese:

SELECT * FROM EMP WHERE JOB='SAESMAN'


ORDER BY 2 ASC, 3 DESC;

Clusula CURRENT OF
Si la clusula CURRENT OF es usada en una afirmacin UPDATE, entonces el cursor debe haber sido
previamente declarado, usando la clusula FOR UPDATE en la afirmacin SELECT. El cursor debe ser abierto

16
y puesto en una fila. Si no se ha hacho FETCH, o si el cursor no est abierto, la clusula CURRENT OF resulta
en un error y regresa cero filas.

Ejemplo:
Para actualizar la fila de tablas EMP, y poner el salario en 2000, ingrese:
UPDATE EMP SAL=2000 WHERE CURRENT OF CURSOR EMP_CURSOR;

Clusulas CONNECT BY Y START WITH

Objetivo:
Mostrar data basada en relaciones jerrquicas.

Pre requisitos:
Ninguno.

Sintaxis:

SELECT ...
FROM...
...
[CONECT BY {PRIOT expr operator expr
| expr operator PRIOR expr}
[START WITH condicin]]

Palabras claves y parmetros:


Prior: especifica direccin del rbol transversal. ORACLE visitar el nudo PRIOR antes de visitar el
nudo sin la clusula PRIOR.
Expr - es una expresin basada en una o ms columnas en la clusula SELECT o de una de las tablas
en la clusula FROM.

Notas de Usuarios:
La clusula CONNECT BY es usada para consultar acerca de relaciones jerrquicas. La clusula CONNECT
BY especifica que ciertas filas deben ser retiradas en orden jerrquico, y define la relacin que se deben usar
para conectar filas de tablas jerrquicamente.

17
PRIOR
La clusula PRIOR especifica el orden de retiro (padres primeros, o hijos primero)
La clusula PRIOR debe ser usada ante una de las expresiones de la clusula CONNECT BY. El lado PRIOR
representa al padre en cada relacin padre-hijo; La otra parte es el hijo. Por ejemplo, CONNECT BY PRIOR
EMPNO = MGR, significa que CONNECT BY regresar los ejecutivos (identificados por EMPNO) antes que los
empleados (identificados por MGR). CONNECT BY EMPNO = PRIOR MGM significa que los empleados sern
mostrados antes que los ejecutivos.
El numero de niveles CONNECT BY es limitado por la disponibilidad de memoria de usuario.
No puedes usar la clusula CONNECT BY en conjuncin con sub preguntas o uniones.

START WITH
START WITH identifica la (s) fila (s) que pueden ser usados en la (s) raz (es) del rbol, especificando una
condicin que se debe satisfacer. La omisin de START WITH es igual a comenzar con todas las filas que
satisfacen la clusula WHERE de la afirmacin SELECT.

Las sub preguntas estn permitidas en la clusula START WIH.

Cuando una afirmacin SELECT contiene la clusula CONNECT BY, podra usar la pseudo columna LEVEL.
LEVEL regresa un valor numrico de 1 para una nudo de raz, 2 para una raz hijo, 3 para un nieto, y as
sucesivamente.

Uso de ORDER BY
El uso de ORDER BY destruye la orden por la cual CONNECT BY devuelve filas. Hay un ORDER BY implcito
cuando usas CONNECT BY. Si el nivel de una fila es menos que el nivel de la fila previa, esa fila es
considerada un hijo de la fila previa. Por lo tanto, ORDER BY, disfrazar el orden implcito de las filas devueltas
por CONNECT BY. Aunque no hay errores devueltos, el uso de ORDER BY niega el efecto de CONNECT BY.

Ejemplo:

SELECT LPAD(' '2*LEVEL) || ENAME ORG_CHART, EMPNO, MGR, JOR


FROM EMP
CONECT BY PRIOT EMPNO=MGR
START WITH ENAME='KING';

ORG_CHART EMPNO MGR JOB


------------------ ---------- ------- ----------------
KING 7839 PRESIDENT
JONES 7566 7566 MANAGER
SCOTT 7788 7788 ANALYST

18
ADAMS 7816 7788 CLERK
FORD 7902 7566 ANALYST
SMITH 7369 7902 CLERK
BLAKE 7698 7698 MANAGER
ALLEN 7499 7698 SALESMAN
WARD 7521 7698 SALESMAN
MARTIN 7654 7698 SALESMAN

Tipos de datos

Tipode dato Descripcin


CHAR(largo) Variable de tipo carcter su largo mximo es de
255.
CHARECTER VARCHAR2(largo) Es igual que el CHAR
DATE Es una variable de tipo fecha, su formato por
defecto es dia-mes-ao de la siguiente forma
DD-MON-YY
LONG Es una variable de tipo carcter que puede
almacenar hasta 65535 caracteres, solo se
puede definir un campo de tipo LONG por tabla.
NUMBER Es una variable de tipo numerico, su formato es
el aiguiente NUMBER(n,m) n es el largo de la
variable y m es la cantidad de decimales
contenidos en n, es decir un NUMBER(12,4)
representa 8 enteros 4 decimales.

Tipos Formatos
Los formatos se pueden usar por dos razones
Para formatear la columna al momento de desplegarla
Suplir los valores entregados por Oracle con formatos de otro tipo.
Los modelos de formatos que son usados afectan solo a los valores desplegados cuando se efecta un
SELECT. Estos formatos no afectan a los valores almacenados internamente por Oracle.

19
Formatos Numricos

Elemento Ejemplo Descripcin


9 9999 Numrico de 9
0 0999 Despliega ceros
$ $9999 Prefijo $
B B9999 Despliega cero si es blanco
MI 9999MI Despliega - como valor
negativo
PR 9999PR Despliega un valor negativo con
()
Comma 9,999 Despliega una "," en esta
posicin
Period 99.99 Despliega un punto como
decimal
V 999V99 Multiplica el valor por 10
E 9.999EEEE Despliega en Notacin
cientfica
DATE DATE Despliega la fecha almacenada
en nmeros

Formatos de Fecha

Elemento Significado
MONTH Despliega el nombre del mes en un largo
mximo de 9 caracteres
MON El nombre del mes abreviado en 3 letras
WW El numero de semana (1-52) del ao
W El numero de la semana del mes (1-5)
DDD Da del ao(1-366)
DD Da del mes (1-31)
D Da de la semana (1-7)
DAY Nombre del da en un mximo de 9 letras
DY Nombre del da abreviado en 3 letras
J Numero (juliano) de das desde 1,4712 BC
AM or PM Indicador meridiano
A.M. o P.M. Indicador meridiano
HH o HH12 Hora del da (1-12)
HH24 Hora del da (0-23)

20
MI Minutos (0:59)
SS Segundos (0:59)
SSSS Segundos pasado la media noche

OPERADORES

Los operadores y funciones realizan similares tareas, los dos aceptan cero o ms argumentos y tambin
retornan uno o ms resultados

Operadores Aritmticos
Se usan en operaciones de suma, resta, multiplicacin y divisin y el resultado de la operacin es un valor
numrico.

Operador Funcin Ejemplo


() Denota la precedencia en las SELECT (X+Y)/(X-Y)
operaciones
+ Denota una expresin positiva WHERE SAL>0
o negativa
*/ Multiplicacin Divisin SELECT 2*X+1
WHERE X>Y/2
+ Suma, Resta SELECT 2*X+1
WHERE X>Y-Z

Operadores de caracteres
Son usados en expresiones que manipulan caracteres

Operador Funcin Ejemplo


|| Concatena caracteres SELECT 'MI NOMBRE
'||ENAME

21
Operadores de Comparacin
Son usados para comprar una expresin de otra.

Operador Funcin Ejemplo


() Este operador se aplica en el NOT (A=1 OR B=1)
uso de las reglas de
precedencia
= Igual a WHERE SAL=10000
!= , ^= , <> Distinto WHERE SAL!=10000
> Mayor que WHERE SAL>10000
< Menor que WHERE SAL<10000
>= Mayor o igual que WHERE SAL>=10000
<= Menor o igual que WHERE SAL<=10000
IN Igual a cualquier miembro de WHERE JOB IN
Equivalente a ANY ('CLERK','ANALYST')
NOT IN Es equivalente a!=ALL WHERE SAL NOT IN (SELECT
SAL FROM EMP WHERE
DEPTNO =30)
ANY Compara cada valor retornado WHERE SAL ANY=(SELECT
por la lista o subquery FROM EMP WHERE
DEPTNO=30)
ALL Compara todos los valores WHERE (SAL,COMM)>=ALL
retornados por la lista o ((1400,300),(3000,0))
subquery
[NOT] BETWEEN [Not] compara un valor que sea WHERE A BETWEEN 1 AND 9
mayor o igual a un rango entre
xey
[NOT] EXISTS Es verdadero si el query retorna WHERE EXISTS (SELECT SAL
[falso si no retorna] al menos FROM EMP WHERE
una fila DEPTNO=30)
[NOT] LIKE Sirve para buscar una palabra o WHERE STATE LIKE "T%"
un patrn de palabra dentro de
caracteres, el smbolo % se usa
para reemplazar uno o ms
caracteres
IS [NOT] NULL Compara valores que sean WHERE JOB IS NULL
nulos o [No nulos]

22
Operador NOT IN
Todas las filas son evaluadas si es falso (si no retorna filas) si cualquier miembro de la lista de valores es
referenciado por un NOT IN la operacin es nula, por ejemplo

SELECT 'TRUE' FROM EMP WHERE DEPTO NO IN (5,15,NULL);

Retorna verdadero si NO existen DEPTNO 5,15 o nulos.

Es equivalente a DEPTNO!=5 AND DEPTNO!=15 AND DEPTNO!=NULL;

Operadores Lgicos
Los operadores lgicos son usados para evaluar mltiples condiciones.

Operador Funcin Ejemplo


() Denota la precedencia de las WHERE X=Y AND (A=B OR
comparaciones lgicas P=Q)
NOT Reversa el resultado de la WHERE NOT (JOB IS NULL)
operacin WHERE NOT (CODE LIKE
'T%')
WHERE NOT (SAL BETWEEN
500 AND 999)

AND Expresin lgica que retorna WHERE A=1 AND B=2


verdadero si la expresin es
verdadera
OR Expresin lgica que retorna WHERE A=1 OR B=2
verdadero si una condicin se
cumple

Otros operadores

Operador Funcin Ejemplo


(+) Indica la precedencia de una WHERE DEPT.DEPTNO =
columna en un outer join EMP.DEPTNO(+)
[table]* Selecciona todas las columnas SELECT * FROM EMP;
de una tabla SELECT EMP.* FROM EMP;
COUNT(expr) Retorna el numero de filas de SELECT COUNT(COMM)
una tabla incluyendo las filas FROM EMP;
con valores nulos

23
ALL Retorna todas las columnas de SELECT ALL * FROM EMP
una tabla
DISTINCT Elimina los valores duplicados SELECT DISTINCT *
SELECT COUNT(DISTINCT
DEPTNO)
PRIOR Define la relacin de CONNECT BY PRIOR
parentesco en un subquery EMPNO=MGR

24
FUNCIONES

FUNCIONES DE UNA SOLA FILA


Funciones Numricas
Estas funciones aceptan numero y retornan valores numricos.

ABS Sintaxis ABS(n)


Propsito Retorna el valor absoluto de n
Ejemplo SELECT ABS(-15) "valor absoluto" FROM DUAL;
Valor absoluto
------------------
15
CEIL Sintaxis CEIL(n)
Propsito Retorna un entero mayor o igual a n
Ejemplo SELECT CEIL(15.7) "Celling" FROM DUAL;
Celling
---------
16

FLOOR Sintaxis FLOOR(n)


Propsito Retorna el entero menor o igual a n
Ejemplo SELECT FLOOR(15.7) "Floor" FROM DUAL;
Floor
-------
15
MOD Sintaxis MOD(m,n)
Propsito Retorna el resto de la divisin de m/n, si n es 0 retorna m
Ejemplo SELECT MOD(7,5) "Modula" FROM DUAL;
Modula
---------
2
POWER Sintaxis POWER(m,n)
Propsito Retorna m elevado n veces
Ejemplo SELECT POWER(3,2) "Raised" FROM DUAL;
Raised
--------
9

ROUND Sintaxis ROUND(n[,m])


Propsito Redondea n con m decimales

25
Ejemplo SELECT ROUND(15.193,1) "Round" FROM DUAL;
Round
--------
15.2

SIGN Sintaxis SIGN(n)


Propsito Si n<0 retorna -1, si n>0 retorna 1, si n=0 retorna 0
Ejemplo SELECT SIGN (-15) "Sign" FROM DUAL;
Sign
-----
-1

SQRT Sintaxis SQRT(n)


Propsito Retorna la raz cuadrada de n
Ejemplo SELECT SQRT (25) "Square root" FROM DUAL;
Square root
--------------
5

TRUNC Sintaxis TRUNC(n[,m])


Propsito Retorna n truncado en m decimales, si m es omitido trunca sin decimales
Ejemplo SELECT TRUNC (15.79,1) "Truncate" FROM DUAL;
Truncate
-----------
15.7

26
Funciones de caracteres
Este punto muestra una lista de funciones que retornan caracteres como resultado de su operacin

CHR Sintaxis CHR(n)


Propsito Retorna carcter equivalente al ASCII o EBCDIC
Ejemplo SELECT CHR(75) "Character" FROM DUAL;
Charecter
------------
K

INITICAP Sintaxis INITICAP(char)


Propsito Retorna el primer carcter de cada palabra en mayscula
Ejemplo SELECT INITICAP('MR. SAMUEL HILLHOUSE') "Capitalized" FROM DUAL;
Capitalized
---------------------------
Mr. Samuel Hillhouse

LOWER Sintaxis LOWER(char)


Propsito Retorna toda la expresin char en minsculas
Ejemplo SELECT LOWER('MR..SAMUEL HILLHOUSE') "Lowercare" FROM DUAL;
Lowercase
-------------------------
mr. samuel hillhouse

LPAD Sintaxis LPAD(char1,n[,char2])


Propsito Reemplaza a la izquierda la expresin char1 con n caracteres representados en
char2, por defecto son espacios en blanco.
Ejemplo SELECT LPAD('Pagina 1',14,'*-') "Lpad" FROM DUAL;
Lpad
--------------------
.*.*.*.*.Pagina 1

LTRIM Sintaxis LTRIM(char1[,set])


Propsito Elimina los caracteres desde la Izquierda representados por set
Ejemplo SELECT LPAD(''xxxXxxLAST WOPRD') "Left trim example" FROM DUAL;
Left trim example
----------------------
.xxxLAST WORD

27
REPLACE Sintaxis REPLACE(char,search_string[,replace_string])
Propsito Reemplaza todos los caracteres de char representados por search_string por
los caracteres representados por replace_string
Ejemplo SELECT REPLACE('JACK & JUE','J',BL') "Changes" FROM DUAL;
Changes
----------------------
.BLACK & BLUE

RPAD Sintaxis RPAD(char,n[,char2])


Propsito Retorna char1 y le agrega n menos largo de char1 caracteres de cahr2
Ejemplo SELECT RPAD('ENAME',10,'x') "Rpad" FROM DUAL;
Rpad
------------------
TURNERxxxx

RTRIM Sintaxis RTRIM(char[,set])


Propsito Retorna char removiendo los caracteres de la derecha representados por set
Ejemplo SELECT RTRIM('TURNERxxXxx','x') "Right" FROM DUAL;
Right
-----------------
TURNERxxX

SOUNDEX Sintaxis SOUNDEX(char])


Propsito Retorna string que representa el sonido de char foneticamente
Ejemplo SELECT ENAME FROM EMP
WHERE SOUNDEX(ENAME)=SOUNDEX(SMYTHE')
ENAME
----------
SMITH

SUBSTR Sintaxis SUBSTR(char,m[,n])


Propsito Retorna una parte de char que comienza en m carcter y n caracteres de largo,
si n es omitido se roma el largo total de char
Ejemplo SELECT SUBSTR('ABCDEFG',2,3) "Substring" FROM DUAL;
Substring
------------
BCD

28
TRANSLATE Sintaxis TRANSLATE(char,from,to)
Propsito Retorna un char despus de reemplazar todas las ocurrencias expresadas por
from por las expresadas en to
Ejemplo SELECT TRANSLATE('HELLO! THERE!','!','-') "Translate" FROM DUAL;
Translate
----------------------
HELLO- THERE-

UPPER Sintaxis UPPER(char)


Propsito Retorna char en maysculas
Ejemplo SELECT UPPER('Mr. Rogers') "Upper" FROM DUAL;
Upper
-----------------
MR. ROGERS

Funciones de string que retornan valores numricos

ASCII Sintaxis ASCII(char)


Propsito Retorna el valor Asscii correspondiente al primer carcter de char
Ejemplo SELECT ASCII('Q') "Ascii" FROM DUAL;
Ascii
------
81

INSTR Sintaxis INSTR(char,char2[,n[,m]]))


Propsito
Ejemplo SELECT INSTR('MOSSISSIPPI,'S',5,2) "Instr" FROM DUAL;
Instr
------
7

LENGTH Sintaxis LENGTH(char)


Propsito Retorna el largo de char
Ejemplo SELECT LENGTH('ELEFANTE') "Length" FROM DUAL;
Length
--------
8

NLSSORT Sintaxis NLSSORT(char)

29
Propsito Retorna el largo de char
Ejemplo SELECT LENGTH('ELEFANTE') "Length" FROM DUAL;
Length
--------
8

Funciones de Grupo
Estas funciones retornan resultados basados en grupos de filas en lugar de un resultado por fila como las
funciones de una sola fila.

AVG Sintaxis AVG([DISTINCT | ALL] n)


Propsito Retorna el promedio del valor de n ignora los valores nulos
Ejemplo SELECT AVG(SAL) "Agerage" FROM EMP;
Average
--------------
2073.21429

COUNT(expr) Sintaxis COUNT([DISTINCT | ALL] expr)


Propsito Retorna el numero de filas donde expr no es nulo
Ejemplo SELECT COUNT(JOBS) "Count" FROM EMP;
Count
-------
4

COUNT(*) Sintaxis COUNT(*)


Propsito Retorna el numero de filas de la tabla incluyendo valores duplicados y nulos
Ejemplo SELECT COUNT(*) "Total" FROM EMP;
Total
------
14

MAX Sintaxis MAX([DISTINCT | ALL] expr)


Propsito Retorna el nmero mximo valor de expr
Ejemplo SELECT MAX(SAL) "Mximum" FROM EMP;
mximum
-----------
5000

30
MIN Sintaxis MIN([DISTINCT | ALL] expr)
Propsito Retorna el numero mnimo valor de expr
Ejemplo SELECT MIN(HIDERATE) "Mnimum" FROM EMP;
Mnimum
--------------
17-DEC-80

STDDEV Sintaxis STDDEV([DISTINCT | ALL] n)


Propsito Retorna la desviacin estndar
Ejemplo SELECT STDDEV(SAL) "Deviation" FROM EMP;
Deviation
--------------
1182.50322

SUM Sintaxis SUM([DISTINCT | ALL] n)


Propsito Retorna la suma de los valores de n
Ejemplo SELECT STDDEV(SAL) "Suma Total" FROM EMP;
Suma Total
--------------
29025

VARIANCE Sintaxis VARIENCE([DISTINCT | ALL] n)


Propsito Retorna la varianza de n ignorando los valores nulos
Ejemplo SELECT VARIANCE(SAL) "Variance" FROM EMP;
variance
--------------
1389313.87

Funciones de Conversin
Las funciones de conversin sirven para convertir valores de un tipo de dato en otro tipo de dato

CHARTOROWID Sintaxis CHARTOROWID(char)


Propsito Convierte un valor del tipo Char en tipo Rowid
Ejemplo SELECT ENAME FROM EMP WHERE
ROWID = CHARROWID('0000000F.0003.0001')
ENAME
-----------
SMITH

31
CONVERT Sintaxis CONVERT(char[,dest_char_set,source_char_set]])
Propsito Convierte char_set entre dos implementaciones distintas del mismo set de
caracteres. Por ejemplo Dec 8 bit multi-lenguaje a HP 8 multi-lenguaje
Ejemplo SELECT CONVERT(('NEW WORD','US7ASCII','WE8HP') "Convertion" FROM
DUAL;
Convertion
-------------
NEW WORD

TO_CHAR Sintaxis TO_CHAR(n[,fmt]) conversin a number


Propsito Convierte un valor Number a carcter, fmt debe ser un formato numrico, para
tener informacin sobre fmt mas adelante hablaremos sobre tipos de formatos.
Ejemplo SELECT TO_CHAR(17145,'$099,999') "Char" FROM DUAL;
Char
-----------
$017,145

TO_CHAR Sintaxis TO_CHAR(n[,fmt]) conversin a date


Propsito Convierte un valor Date a carcter, fmt debe ser un formato date, para tener
informacin sobre fmt mas adelante hablaremos sobre tipos de formatos.
Ejemplo SELECT TO_CHAR(HIDERATE,'Month DD, YYYY') "New date format" FROM
DUAL;
New date format
------------------------
December 17, 1980

TO_NUMBER Sintaxis TO_NUMBER(char)


Propsito Convierte un valor carcter, a number , para tener informacin sobre fmt mas
adelante hablaremos sobre tipos de formatos.
Ejemplo UPDATE EMP
SET SAL = SAL + TO_NUMBER(SUBSTR('$100 raise',2,3))
WHERE ENAME='SMITH'

32
Funciones de Fecha
Todas las funciones retornan un valor del tipo date excepto MINTH_BETWEEN que entrega un valor numrico.

ADD_MONTHS Sintaxis ADD_MONTHS(d,n)


Propsito Retorna una fecha d sumando n meses, si n es negativo se restan los n meses
Ejemplo SELECT ADD_MONTHS(HIDERATE,12) "Next Year" FROM EMP;
WHERE ENAME='SMITH'
Next Year
--------------
17-DEC-81

LAST_DAY Sintaxis LAST_DAY(d)


Propsito Retorna la fecha del ltimo da del mes d
Ejemplo SELECT LAST_DAY(SYSDATE) "Last day" FROM DUAL;
Last day
---------------
31-MAR-99

MONTHS_BETWEEN Sintaxis MONTHS_BETWEEN(d,e)


Propsito Retorna el numero de meses entre la fecha d y la fecha e, si e es mayor
que e entrega un valor positivo, si no un valor negativo
Ejemplo SELECT MONTHS_BETWEEN('02-feb-86',''01-jan-86') "Months" FROM
DUAL;
Months
--------------
1.03225806

NEW_TIME Sintaxis NEW_TIME(d,a,b)


Propsito Retorna la fecha y tiempo en la zona b cuando la fecha y tiempo de la zona a es
d, para mayor informacin sobre las zonas dirigirse al manual seccin 4-27
Ejemplo SELECT TO_CHAR(TO_DATE('17:47,'hh:24:mi'),'PST','GMT') "Greenwich
Time" FROM DUAL;
Greenwich Time
--------------------
01:47

33
NEW_TIME Sintaxis NEXT_DAY(d,char)
Propsito Retorna la fecha posterior a la fecha d del nombre del da char
Ejemplo SELECT NEXT_DAY('17-MAR-89','TUESDAY') "Next day" FROM DUAL;
Next day
---------------
21-MAR-89

ROUND Sintaxis ROUND(d[,fmt])


Propsito Retorna d redondeado segn fmt
Ejemplo SELECT ROUND(TO_DATE('17-MAR-88'),'YEAR') "Year" FROM DUAL;
Year
-------------
01-JAN-89

SYSDATE Sintaxis SYSDATE


Propsito Retorna la fecha del sistema
Ejemplo SELECT SYSDATE "Sysdate" FROM DUAL;
Sysdate
---------------
17-MAR-99

TRUNC Sintaxis TRUNC(d[,ftm])


Propsito Retorna solamente la fecha, fmt indica el criterio por el cual se esta truncando,
para mayor informacin sobre los formatos recurrir al manual de Oracle seccin
4-29
Ejemplo SELECT TRUNC(TO_DATE('28-OCT-88','YEAR') "Year" FROM DUAL;
Yerar
-------------
01-JAN-88

34
Otras Funciones

DECODE Sintaxis DECODE(expr,search1,resul1, search2,resul2,default)


Propsito la expr es compara don cada valor serach y retorna result, si expr es igual a
search, si no es igual o no es encontrado entonces retorna default, si default no
es explicitado DECODE retorna null.
Ejemplo SELECT ENAME,DECODE(MGR,7934,'SMITH',7251,'JONES',NONE) "Mgr"
FROM EMP
ENAME Mgr
------------- -------
JONES KING
CLARK KING
OAKLEY NONE
FORD JONES

GEATEST Sintaxis GEATEST(expr[,expr]...)


Propsito Retorna el mayor valor de la lista de valores.
Ejemplo SELECT GREATEST('HARRY','HARRIOT','HAROLD') "Greatest" FROM DUAL
Greatest
-------------
HARRIOT

LEAST Sintaxis LEAST(expr[,expr]...)


Propsito Retorna el menor valor de la lista de valores.
Ejemplo SELECT LEAST('HARRY','HARRIOT','HAROLD') "Least" FROM DUAL
Least
------------
HAROLD

NVL Sintaxis NVL(expr1,expr2)


Propsito Si expr1 es nulo retorna expr2, si expr1 no es nulo retorna expr1.
Ejemplo SELECT ENAME,NVL(TO_CHAR(COMM),'NOT APPLICABLE') "Commission"
FROM EMP WHERE DEPTNO=30;
ENAME Commission
------------ ---------------
ALLEN 300
WARD 500
MARTIN 1400
BLAKE NOT APPLICABLE

35
TURNNER 0
JAMES NOT APPLICABLE

UID Sintaxis UID


Propsito Retorna un entero nico asignado a cada usuario
Ejemplo SELECT USER,UID FROM DUAL;
USER UID
-------- -----
OPS$KING 9

USER Sintaxis USER


Propsito Retorna el usuario por el cual esta conectado a Oracle
Ejemplo SELECT USER,UID FROM DUAL;
USER UID
-------- -----
OPS$KING 9

VSIZE Sintaxis VSIZE(expr)


Propsito Retorna el numero de bytes almacenados internamente por Oracle en expr.
Ejemplo SELECT ENAME,VSIZE(ENAME) "BYTES" FROM EMP;
ENAME BYTES
-------- ---------
CLARCK 5
KING 4
MILLER 6

36
QUERIES

Query

Objetivo:
Una afirmacin SELECT usado dentro de otra afirmacin SQL para obtener resultados inmediatos.

Pre requisitos:
Depende de la afirmacin SQL que se use.

Sintaxis:

SELECT [ALL | DISTINCT] {* | table.* | espr [c_alias]}


[,{table.* | espr [c_alias] } ] ...}
FROM [user.] table [t_alias] [,[user.] table [t_alias]]..
WHERE condicion
CONECT BY condicin, [START WITH condicin]]
GROUP BY expr [, espr] ... [HAVING condicion] ]

Notas de usuario:
Las querys ( preguntas) pueden ser usados en las siguientes afirmaciones SQL:

CREATE ... AS query


DELETE .. WHERE expr operator [query] ..
INSERT.. query
SELECT ... WHERE expr operator (query)
... HAVING expr operator (query)
... START WITH expr operator (query)

UPDATE
SET (column, column, ...) operator (query)
WHERE expr operator (query) ...

Todas las afirmaciones normales de SELECT no requieren ni ORDER BY ni FOR UPDATE OF. Una afirmacin
SELECT es llamada query cuando aparece dentro de una condicin de WHERE en una afirmacin SELECT o
en la clusula set de la afirmacin UPDATE. Las subquerys son tambin conocidos como querys
relacionados o querys adosados. Este manual usar el termino query.

37
Los querys son usados en las siguientes situaciones:
- para definir el conjunto de filas que deben ser insertados en la tabla objetivo de una afirmacin INSERT,
CREATE TABLE, o afirmacin COPY.
- para definir uno o mas valores que sern asignados a filas existentes en una afirmacin UPDATE.
- para proveer valores de comparacin en WHERE, HAVING y STARTWITH de las afirmaciones SELECT,
UPDATE y DELETE.

No hay limites sobre los niveles de abordaje para un query.

Un query es usado para responder preguntas con mltiples partes. Por ejemplo, para responder a la pregunta,
quien trabaja en el departamento TAYLOR?, debes primero responder la pregunta En qu departamento
trabaja TAYLOR? en un sub query. Despus puedes responder la pregunta original con el query padre. El
query padre es la porcin de la afirmacin SQL que contiene el query.

Un query es evaluado una sola vez para la totalidad del query padre, en contraste con un query correlativo, el
que es evaluado una por fila en el query padre. Refirase a la descripcin de query correlativo mas adelante en
este capitulo

Ejemplos:
Para determinar quien trabaja en el departamento de TAYLOR, ingrese:

SELECT ENAME,DEPTNO
FROM DEPT
WHERE DEPTNO = (SELECT DEPTNO FROM EMP WHERE ENAME = 'TAYLOR';

Para darles a todos los empleados en la tabla EMP un aumento del 10%, si es que aun no han recibido una
bonificacin, ingrese:

UPDATE EMP
SET SAL = SAL * 1.1
WHERE EMPNO NOT IN (SELECT EMPNO FROM BONUS)

Para crear un duplicado de la tabla DEPTO, llamada NEWDEPTO, ingrese:

CREATE TABLE NEWDEPT (DEPTNO, DNAME, LOC)


AS SELECT DEPTNO, DNAME, LOC FROM DEPT;

38
Query Correlativo

Objetivo:
Evaluar un query para cada fila presente en la afirmacin padre SQL.

Pre Requisitos:
Depende de la afirmacin SQL que se use.

Sintaxis:

SELECT column_list
FROM table1 table_alias1
WHERE expr operator
(SELECT column_list
FROM table2 table_alias2
WHERE table_alias1.column operator table_alias2.colum)

UPDATE table1 table_alias1


SET column =
(SELECT expr
FROM table2 table_alias2
WHERE table_alias1.column operator table_alias2.colum)

DELETE FROM table1 table_alias1


WHERE column operator
(SELECT expr
FROM table2 table_alias2
WHERE table_alias1.column operator table_alias2.colum)

Notas de usuario:
Un query correlativo es una forma de query usado en SELECT, UPDATE o DELETE. Esta discusin se
enfocar en SELECT, aunque esto se aplique a todo tipo de sub querys correlativos.

Use un query correlativo para obligar ORACLE a que evale el query una vez por fila del query padre, en vez de
una vez para todo el query.

Un query correlativo es usado para responder preguntas de mltiples partes y cuya respuesta depende del valor
en cada fila del query padre. Por ejemplo, un query correlativo puede ser usado para responder a la pregunta;

39
Que empleados ganan mas que el promedio en su departamento?. El query correlativo es usado
especficamente para computar el salario promedio de cada departamento.

ORACLE entiende que deseas usar un query correlativo cuando haces referencia a una columna dentro del
query que pertenece a una tabla del query padre. Especificas que una columna pertenece a un query padre,
enfrentndolo con un alias de tabla asociado a una tabla query padre.

Las columnas dentro de una query correlativo deben ser pre arreglados con el nombre de la tabla o con el alias
para tener mayor claridad. Una referencia a la columna en el query padre debe ser pre arreglado con el nombre
de la tabla o con su alias si es que las tablas dentro del query contienen columnas con el mismo nombre.
Columnas no calificadas en el query son buscadas en las tablas del query padre, luego en las tablas del
siguiente query paterno, y as sucesivamente.

En el caso de una afirmacin UPDATE, un query correlativo puede ser usado para actualizar filas en una tabla,
basada en filas de otra tabla. Por ejemplo, si tienes cuatro tablas de ventas cuatrimestrales y te gustara
pasarlas a la mesa de ventas anuales, usaras un query correlativo.

En el caso de DELETE, puedes usar un query correlativo para borrar slo aquellas filas que tambin existen ya
en otras tablas.

Ejemplos:
Para mostrar la informacin acerca de empleados cuyos salarios exceden el promedio para sus departamentos,
debes usar un query correlativo. Primero, asigna un alias al EMP, la tabla que contenga la informacin de
salarios, y luego hacer referencia a ese alias en el query:

SELECT DEPTNO, ENAME, SAL


FROM EMP X
WHERE SAL > (SELECT AVG(SAL)
FROM EMP
WHERE X.DEPTNO = DEPTNO)
ORDER BYN DEPTNO;

Por cada fila de EMP, el query padre usa el query correlativo para computar el salario promedio para los
miembros de un mismo departamento. El query correlativo realiza los siguientes pasos para cada fila de la tabla
EMP.
1 La fila del DEPTNO es determinada.
2 Ese EEPTNO es luego usado para evaluar el query
3 Si el salario de esa fila es mayor que el salario promedio de las filas de ese departamento, entonces esa fila
ser regresada.

40
Por tanto, el query es evaluado una vez por fila en la tabla EMP.

Querys distribuidos
Esta seccin discute los querys distribuidos dentro de la arquitectura del sistema de manejo de la base de datos
de ORACLE. Esta arquitectura te permite acceso a data remota usando SQL*Net y un RDBMS ORACLE

Identificando Tablas remotas:


Las referencias de tabla pueden opcionalmente contener un nombre link de base de datos, como es descrito
abajo:

[user.] table [@datebale_link]

este ejemplo muestra un query que une a una tabla local, (DEPT) con la tabla EMP en la base de datos
HOUSTON:

SELECT ENAME, DNAME FROM EMP@HUSTON, DEPT


WHERE EMP.DEPTNO = DEPT.DEPTNO = DEPT.DEPTNO;

Restricciones a querys distribuidos:


Varias restricciones se aplican a procesos de distribucin con el ORACLE RDBMS. Estas se describen abajo.

Referencias a tablas remotas slo son soportadas en las siguientes reas:


1 Clusulas FROM en LAS AFIRMACIONES SELECT, INSERT INTOSELECT, CREATE TABLEAS
SELECT y CREATE VIEWAS SELECT.
2 FOR en la afirmacin CREATE SYNONYM.
3 calificador de tablas de referencias de columnas en las afirmaciones mencionadas arriba.

No puedes seleccionar columnas del tipo LONG desde tablas remotas.

Los querys enfrentados a tablas remotas utilizando la clusula CONNECT BY estn sujetas a las siguientes
restricciones.

1 La palabra clave PRIOR slo puede ser usada en conjuncin con CONNECT BY.
2 START WITH no puede contener sub querys.
3 Ni START WITH, ni CONNECT BY pueden contener la funcin USERENV(ENTRYID), o funciones de
usuarios, o la pseudo columna ROWNUM.

41
No puedes INSERT (insertar) a UPDATE o DELETE data de mesas remotas. Para hacer esto debes ingresar
directamente a la base de datos remota usando SQL*Net.

Manejo de datos en conjunto

Objetivos
En este capitulo se explicar como obtener informacin en forma de resumen de grupo de filas utilizando
funciones de grupo.
Discutiremos como dividir las filas de una tabla en conjunto mas reducidos y como especificar criterios de
bsqueda.

Introduccin
Las funciones de grupos operan sobre conjuntos de filas. Ellas retornan un resultado basadas en el grupo de
filas recuperadas mas que un resultado por fila en el caso de las funciones de fila nica. Por defecto todas las
funciones en una tabla son tratadas como un grupo. La clusula GROUP BY de la instruccin SELECT es
usada para dividir as filas en conjuntos ms reducidos.

Clusula GROUP BY y HAVING

Propsito:
Opera sobre grupos de filas que son devueltas en el query y limitan con la clusula HAVING los grupos
afectados

Sintaxis:
SELECT expr [.espr]...
FROM table [.table]...
GROUP BY expr [.expr]...
HAVING condicion;

Palabras Claves:
Expr es una expresin basada en una o ms columnas en la clusula SELECT o de una de las tablas
en la clusula FROM.
Table Es una tabla o vista a la cual se tiene acceso
Condition Es una expresin lgica que puede hacer referencia a las variables anfitrionas, las condiones de
bsqueda pueden contener un query.

42
Notas:
Utilice la clusula GROUP BY para hacer que la sentencia SELECT obtenga UN grupo resumido de datos para
cada grupo de filas seleccionadas. Cada grupo de filas seleccionadas ser agrupado sobre la base de un
mismo valor para la o las columnas o expresiones de la clusula GROUP BY

Cada expr SELECT debe:


- Ser una constante o funcin sin parmetros ( e. g. SYSDATE )
- Contener una funcin agrupadora tal como SUM, COUNT, o MAX
- calzar exactamente con un expr en la clusula GROUP BY.

Las expresiones GROUP BY pueden hacer referencia a cualquier columna en las tablas de la clusula FROM,
estn o no esas columnas mencionadas en la lista SELECT.

Especfica GROUP BY y HAVING despus de WHERE y CONNECT BY


START WITH. Si tanto las clusulas GROUP BY y HAVING estn especificadas, pueden ser especificadas en
cualquier orden.

Hay un limite que depende del Sistema sobre el total de bytes en todas las expresiones de la clusula GROUP
BY.

Clusula HAVING
Utilice la clusula HAVING para especificar que grupos del GROUP BY deben ser incluidos en el resultado.
ORACLE procesa las clusulas WHERE; GROUP BY y HAVING de la siguiente manera:
1 ORACLE remueve todas las filas que no satisfacen la clusula WHERE.
2 ORACLE calcula y forma los grupos como son especificados en la clusula GROUP BY.
3 ORACLE remueve todos los grupos que no satisfacen la clusula HAVING.

Ejemplos: Para mostrar el salario mnimo y mximo por Departamento en la tabla EMP, ingrese:

SELECT DEPTNO,MIN(SAL),MAX(SAL)
FROM EMP
GROUP BY DEPTNO;

DEPTNO MIN(SAL) MAX(SAL)


----------- ------------- ---------------
10 1300 5000
20 800 3000
30 950 2580

43
Para aplicar este query slo para los Clerks (recepcionista), ingrese:

SELECT DEPTNO,MIN(SAL),MAX(SAL)
FROM EMP
WHERE JOB='CLERCK'
GROUP BY DEPTNO;

DEPTNO MIN(SAL) MAX(SAL)


----------- ------------- ---------------
10 1300 1300
20 800 1100
30 950 950

Para lograr que el Query muestre slo los departamentos cuyo salario mas bajo es de $1000:

SELECT DEPTNO,MIN(SAL),MAX(SAL)
FROM EMP
WHERE JOB='CLERCK'
GROUP BY DEPTNO;
HAVING MIN(SAL)<1000;

DEPTNO MIN(SAL) MAX(SAL)


----------- ------------- ---------------
20 800 1100
30 950 950

Consultas con mltiples tablas.

Simple Join
Objetivo:
Combina data de mltiples tablas. El resultado puede ser mostrado o puede ser usado como informacin para
otra afirmacin SQL.

Pre requisitos:
Debes tener acceso a SELECT o debes ser el creador de cada tabla a la que haces referencia.

44
Sintaxis:

SELECT [{table | table_alias}.]column


[,{table | table_alias}.]column...
FROM table [table_alias], table [table_alias]...
[WHERE {table [table_alias].column={table [table_alias].column;

Notas de usuario:
Un join es una forma de la afirmacin SELECT que combina filas de dos a o mas tablas. Por tanto, cada fila
del resultado tendr una columna de data proveniente de mas de una tabla. Un join ocurre cuando mltiples
tablas son usadas como referencia en la clusula FROM de la afirmacin SELECT. La clusula opcional
WHERE determina como las filas de las tablas son combinadas. La siguiente discusin asume una join (unin)
de dos tablas, pero se puede aplicar a uniones de dos o ms tablas.

El tipo ms comn de uniones, la unin simple, regresa filas desde dos tablas basadas en igualdad de
condiciones. Esta condicin aparece en la clusula WHERE en esta forma:

<table1.columname> = <table2.columnname>

Las filas de la tabla1 son combinadas con las filas de la tabla2 y las filas resultantes son devueltas donde los
valores de table1.columnname y table2.columnname son equivalentes.

Las filas usadas en la condicin WHERE no necesariamente tienen el mismo nombre. Si los nombres son
idnticos, debes hacer una pre carear las columnas con el nombre de las tablas para que no haya ambigedad.
Si un alias para la mesa es usado en lugar del nombre real de la mesa en la clusula FROM, entonces ese alias
debe ser sustituido por el nombre de la tabla a lo largo de la afirmacin SELECT, incluyendo las referencias a la
tabla en la lista SELECT y clusula WHERE.

ORACLE no presenta restricciones sobre que columnas de que tabla se muestran; ninguna, algunas o todas las
columnas de ambas tablas pueden ser regresadas. Por tanto, las columnas especificadas en WHERE no tienen
que aparecer necesariamente en la clusula SELECT.

Una unin simple tambin se llama equi-join ya que usa un operador de comparacin = en WHERE.

Producto Cartesiano.
Un producto cartesiano es formado cuando las tablas son unidas sin el uso de WHERE. La omisin de WHERE
causa que todas las filas de las tablas se combinen. Un producto cartesiano siempre genera un gran nmero de
filas y su resultado rara vez es til. Por ejemplo, si dos tablas tienen cada uno 100 filas, el producto cartesiano
ser de 10 mil filas.

45
Debes siempre incluir un WHERE cuando se juntan tablas, a no ser que tengas una necesidad especifica de
combinar todas las filas de todas las tablas.

Ejemplos:
La siguiente unin simple responde a la pregunta Cuales son los nombres y el numero del departamento en
el que cada empleado trabaja?

SELECT ENAME,EMP.DEPTNO,DNAME
FROM EMP,DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO

ENAME DEPTNO DNAME


----------- ------------ --------------------
CLARK 10 ACCOUNTING
MILLER 10 ACCOUNTING
KING 10 ACCOUNTING
SMITH 20 RESEARCH
SCOTT 20 RESEARCH

Una unin es requerida ya que la data est en dos mesas distintas. Las filas de ambas mesas son juntadas de
acuerdo a la condicin WHERE.

OUTER JOIN

Objetivo:
Juntar dos o ms tablas y tambin devolver aquellas filas de una tabla que no tengan relacin directa con la otra
tabla.

Pre Requisitos:
Debes tener privilegios SELECT o ser dueo de la tabla.

Sintaxis:

SELECT...
FROM table1.table2...
WHERE table1.comun = table2.columna(+)

46
Notas de usuario:
La outer join (unin externa) es el resultado de una unin normal. Una unin externa regresa todas las filas
que son devueltas por la unin simple y tambin devuelve aquellas filas de una tabla que no calzan con las filas
de la otra tabla. Por ejemplo, si estamos seleccionando todos los empleados de EMP y sus ubicaciones por
DEPTO, pueden haber empleados cuyo DEPTO no est listado bajo DEPTO. Pero quisiramos ver su rcord
junto al de los dems.
Una unin externa puede contener un WHERE con una conduccin en una de estas formas:

table1.column = table2.column (+)


table1.column(+) = table2.column

Otras columnas nulas sern creadas temporalmente para la tabla con el operador externo (+) y juntado con
todas las filas de la otra tabla que no hubiesen regresado en una unin normal.
Con una simple afirmacin SELECT, una tabla puede ser unida exteriormente a, a lo mas, una sola tabla.

Ejemplo:
Para mostrar el salario mensual total para todos los departamentos (sin unin externa), ingrese:

SELECT DEPT.DEPTNO, DNAME,SUM(SAL) SALAY


FROM EMP,DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO
GROUP BY DEPT.DEPTNO, DNAME
ORDER BY DEPT.DEPTNO

DEPTNO DNAME SALARY


------------ --------------------- ------------
10 ACCOUNTING 8750
20 RESEARCH 10875
30 SALES 9400

Para mostrar el salario mensual total de todos los departamentos, incluso aquellos departamentos in empleados
(con unin externa), ingrese:

SELECT DEPT.DEPTNO, DNAME,SUM(SAL) SALAY


FROM EMP,DEPT
WHERE EMP.DEPTNO(+) = DEPT.DEPTNO
GROUP BY DEPT.DEPTNO, DNAME
ORDER BY DEPT.DEPTNO

47
DEPTNO DNAME SALARY
------------ -------------------- ------------
10 ACCOUNTING 8750
20 RESEARCH 10875
30 SALES 9400
40 OPERATIONS

En esta unin externa, el departamento de Operaciones fue mostrado aunque ningn empleado en la tabla
EMP perteneca a aquel departamento.

La regla de oro, es de anexar el smbolo de unin externa, siguiendo el nombre de la tabla, sin las filas
correspondientes

Joins
Un Join es usado cuando se requiere consultar datos desde ms de una tabla.
Las filas de una tabla pueden ser Joined con otra de acuerdo a un valor existente en columnas
correspondientes.
Existen dos tipos de condiciones de Join:

1. Equi-Join
2. No Equi-Join

Equi-Join
Si se desea saber por ejemplo el nombre de los empleados, su trabajo y el nombre del departamento en el que
laborar debemos efectuar relaciones entre la tabla EMP y la tabla DEPT a travs de la columna DEPTNO la que
debe tener el mismo valor en ambas tablas. Lo anterior se puede realizar mediante:

SELECT ENAME, JOB, DNAME


FROM EMP, DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO;

Veremos como son desplegados los datos de los empleados junto al respectivo nombre del departamento en
que trabajan. Las filas de tabla EMP son combinadas con las filas de la tabla DEPT y solo se retorna aquellas
en que EMP.DEPTNO es igual a DEPT.DEPTNO.

48
Para distinguir entre la columna DEPTNO de tabla EMP y la de la tabla DEPT usted debe ingresar

SELECT DEPT.DEPTNO, ENAME, JOB, DNAME


FROM EMP,DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO
ORDER BY DEPT.DEPTNO;

Note que cada numero de departamento en la tabla DEPT es combinado con aquellos nmeros de
departamentos que son iguales en la tabla EMP. Por ejemplo si hay tres empleados que trabajan en el
departamento 10 entonces los datos del departamento se repetirn para cada uno de ellos.

Usando alias
En ocasiones puede ser tedioso tipear los nombres de las tablas repetidamente. Es posible usar alias
temporales que pueden ser empleados en la clusula FROM estos alias solo tienen sentido dentro de la
instruccin SELECT en que son usados. El uso de estos alias en los querys pueden acelerar las consultas
cuando se suministra la informacin plenamente identificada.

Ejemplo.
SELECT E.ENAME, D.DEPTNO, D.DNAME
FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO
ORDER BY D.DEPTNO;

El usar alias corto es recomendable.

Product.
Cuando la condicin de Join es invlida o es omitida entonces el resultado es un producto cruz entre las dos
tablas (Producto).
Los productos tienden a generar gran cantidad de filas y raramente son tiles. Usted debera siempre incluir
condiciones de Join dentro la clusula WHERE.

No Equi-Join.
La relacin entre las tablas EMP y SALGRADE no es una Equi-Join dado que ninguna columna de la tabla EMP
corresponde directamente a una columna de la tabla SALGRADE. La relacin se obtiene utilizando un operador
distinto al = para evaluar el grado un empleado, su sueldo debe estar entre un rango mnimo y mximo que esta
almacenado en la tabla SALGRADE.

49
Ejemplo
SELECT E.ENAME, E.SAL, S.GRADE
FROM EMP E, SALGRADE S
WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL;

Otros operadores tales como <= o >= pueden ser usados, sin embargo, BETWEEN es mas simple. Recuerde
especificar el valor menor primero y luego el mayor cuando use BETWEEN. Tambin use los alias no por una
posible ambigedad si no mas bien por razones de eficiencia.

Una regla simple que se debe tener en cuenta es la siguiente

El nmero de tablas menos uno debe ser igual al mnimo de condiciones de Join
Esta regla no es aplicable si las tablas tienen llaves primarias concatenadas.

Ejercicios

1. Despliegue el nombre del empleado y del departamento en que trabajo, ordenados por nombre de
departamento.
2. Despliegue todos los nombres de los empleados y el numero y nombre del departamento en que trabaja
3. Despliegue el nombre, localizacin y nombre del departamento de aquellos empleados cuyo salario es
mayor a 1500 mensual.
4. Seleccione a los empleados y el grado correspondiente de su salario.
5. Selecciones a los empleados con grado 3
6. Selecciones a los empleados que trabajan en Dallas.

50
Otros mtodos de Join.

Si una fila no satisface una condicin de Join entonces las filas no aparecen en el resultado del query. En efecto
en le Join entre departamentos y empleados no apareca el departamento 40. Esto es por que no hay
empleados en el departamento 40.
Las filas que faltan pueden ser retornadas si se ocupa un operador de Join Externo en la condicin de Join. El
operador es un signo mas encerrado entre parntesis como se muestra a continuacin (+) y es usado en la
condicin de Join que puede presentar las filas que no se combinan. El operador tiene como efecto la creacin
de una o ms filas nulas por cada una de las filas que no se pueden combinar.

Ejemplo
SELECT E.ENAME, D.DEPTNO, D.DNAME
FROM EMP E,DEPT D
WHERE E.DEPTNO(+)=D.DEPTNO AND
D.DEPTNO IN (30,40);

Join sobre la misma tabla


Es posible usar alias para efectuar Join sobre la misma tabla como si fueran dos tablas separadas. El siguiente
query despliega todos aquellos empleados que ganan menos que su MANAGERS.

SELECT E.ENAME EMP_NAME,


E.SAL EMP_SAL,
M.ENAME MGR_NAME,
M.SAL MGR_SAL
FROM EMP E, EMP M
WHERE E.MGR = M.MGR AND
E.SAL < M.SAL;

Note que la clusula FROM se refiere a la tabla EMP dos veces con alias distintos. En este caso el alias E
significa empleados y el alias M significa managers.

Operadores de conjunto.
Durante la introduccin se discuti el concepto de operadores de conjunto, Ahora discutiremos en detalle la
Interseccin, la Unin y la diferencia.

UNION, INTERSECT, MINUS son tiles para construir consultas que se refieren a diferentes tablas. Se
combinan los resultados de dos o ms instrucciones SELECT en una sola. Un query puede consistir de una o
ms instrucciones SELECT que pueden estar enlazadas por uno o ms operadores de conjunto. Estos
operadores son llamados Join Verticales

51
UNION
Para retornar todas las filas distintas entre dos querys debe ingresar

SELECT JOB
FROM EMP
WHERE DEPTNO=10
UNION
SELECT JOB
FROM EMP
WHERE DEPTNO=30;

INTERSECT
Para retornar las filas recuperadas por ambas querys ingrese

SELECT JOB
FROM EMP
WHERE DEPTNO=10
INTERSECT
SELECT JOB
FROM EMP
WHERE DEPTNO=30;

MINUS
Para retornar las filas recuperadas por el primer query que NO estn en el segundo ingrese

SELECT JOB
FROM EMP
WHERE DEPTNO=10
MINUS
SELECT JOB
FROM EMP
WHERE DEPTNO=30;

52
Es posible construir querys con muchos operadores de conjunto. Si mltiples operadores son usados el orden
de ejecucin de las instrucciones SQL es de arriba hacia abajo. Se puede usar parntesis para alterar dicho
orden.

Order by
Usted puede usar clusulas ORDER BY en un query que emplea operadores de conjunto. Si usted usa esa
clusula ella debe ser ubicada en el ltimo query. Tambin es posible que esta clusula afecte a columnas
diferentes a las seleccionadas. Las columnas en el ORDER BY debe ser referenciadas por su posicin relativa
en la lista del SELECT

Ejemplos
SELECT EMPNO, ENAME, SAL
FROM EMP
UNION
SELECT ID,NAME,SALARY
FROM EMP_HISTORY
ORDER BY 2;

Note que el nmero dos (2) indicado en la clusula ORDER BY es usado la representar la columna ENAME.
Esto quiere decir que las filas sern ordenadas en forma ascendente por el nombre del empleado.

Reglas cuando se usan operadores de conjunto


1. Las instrucciones SELECT deben seleccionar el mismo nmero de columnas
2. Las correspondientes columnas deben tener el mismo tipo de dato.
3. Filas duplicadas son automticamente eliminadas (no se puede usar DISTINCT)
4. Los nombres de las columnas del primer query aparecen en el resultado
5. La clusula ORDER BY aparece en la ltima instruccin SELECT
6. ORDER BY referencia alas columnas por posicin
7. Los operadores de conjunto pueden ser usados en subqueries
8. Las instrucciones SELECT son ejecutadas de arriba hacia abajo.
9. Mltiples operadores de conjunto pueden ser usados y los parntesis se pueden usar para alterar la
secuencia de ejecucin

53
Ejercicios
1. Seleccione los departamentos que no tienen empleados.
2. Seleccione los empleados con nombre y nmero e indique el nmero y nombre de su manager.
3. Modifique el query anterior para desplegar al empleado King que no tiene manager.
4. Encuentre todos los empleados que fueron contratados antes que su manager.

SUBQUERYES

Objetivos
En este capitulo estudiaremos caractersticas avanzadas de la instruccin SELECT. Especficamente se
estudiaran queries que estn contenidos en la clusula WHERE O HAVING.

Queries Anidados
Un Subqueries es una instruccin SELECT que esta anidada dentro de otra instruccin SELECT que retorna
resultados intermedios que servirn de condicin a la primera sentencia SELECT.

Ejemplo

SELECT columna1,columna2
FROM tabla
WHERE columna = (SELECT columna1
FROM tabla
WHERE condicion);

El subquery esta dado por la sentencia SELECT mas interna. Ella se ejecuta primero y su salida es usada para
completar la condicin que query principal.

Subqueries que retornan una sola fila


Para seleccionar los empleados que tengan como salario mnimo en la compaa se deben seguir los siguientes
pasos.

1. Seleccione el salario mnimo


SELECT MIN(SAL) FROM EMP;
2. Ahora debemos combinar el query que nos entrega el salario mnimo con el query que nos selecciona a los
empleados que cumplan con esta condicin.
SELECT ENAME, JOB, SAL
FROM EMP
WHERE SAL=(seleccin de salario mnimo del punto 1)

54
Es posible combinar las dos sentencias SQL en un solo query anidado

SELECT ENAME, JOB, SAL


FROM EMP
WHERE SAL = (SELECT MIN(SAL)
FROM EMP);

Cmo son procesados los Subqueries?

Una instruccin SELECT puede ser considerada como un bloque de consulta. En el ejemplo anterior se pueden
distinguir dos bloques de consulta. El bloque de consulta ms interno (el subsquery) es ejecutado primero y
entrega el valor 800 como salario mnimo. El bloque principal es procesado y usa el resultado para completar la
condicin de bsqueda. En definitiva el bloque principal se puede ver de la siguiente forma.

SELECT ENAME,SAL, DEPTNO


FROM EMP
WHERE SAL = 800;

En el ejemplo visto anteriormente el valor 800 es una nica fila. El subquery que retorna el valor 800 es llamada
subquery de fila nica. Cuando un subquery retorna slo una fila entonces se deber usar un operador de fila
nica como por ejemplo (=,<=,=> =!, etc.)

Para encontrar todos los empleados que tienen el mismo trabajo que el seor BLAKE se debe ingresar.

SELECT ENAME, JOB


FROM EMP
WHERE JOB = (SELECT JOB
FROM EMP
WHERE ENAME ='BLAKE');

Subqueries que retornan mas de una fila

La siguiente sentencia SELECT selecciona los empleados que ganan el sueldo ms bajo en cada departamento

SELECT ENAME, JOB, SAL


FROM EMP
WHERE SAL IN (SELECT MIN(SAL)
FROM EMP
GROUP BY DEPTNO);

55
Cabe notar que el query ms interno tiene la clusula GROUP BY. Esto quiere decir que puede retornar mas de
un valor. En este caso se requiere utilizar operadores de comparacin de mltiples filas tales como IN y MUST.

Comparando ms de un valor
El siguiente query selecciona a los empleados que gana el sueldo ms bajo en su propio departamento.

SELECT ENAME, SAL, DEPTNO


FROM EMP
WHERE (SAL, DEPTNO) IN (SELECT MIN(SAL),DEPTNO
FROM EMP
GROUP BY DEPTNO);

Note que las columnas presentes en el WHERE externo deben corresponder a las columnas del SELECT ms
interno deben ser del mismo tipo.

Cuando un subquery retorna ms de una fila y se ocupa un operador de fila nica para efectuar una
comparacin ocurrira un error.

SELECT ENAME, SAL, DEPTNO


FROM EMP
WHERE SAL = (SELECT MIN(SAL)
FROM EMP
GROUP BY DEPTNO);

Operadores ANY y ALL


Los operadores ANY y ALL pueden ser usados para subqueries que retornan ms de una fila. Ellos son usados
en las clusulas WHERE o HAVING en conjunto con operadores lgicos (=,<,>, etc).

ANY compra un valor con cada valor retornado por un subquery


Para desplegar los empleados que ganen ms que el sueldo mnimo del DEPTNO 30 debe ingresar.

SELECT ENAME,SAL,DEPTNO
FROM EMP
WHERE SAL > ANY (SELECT DISTINCT SAL
FROM EMP
WHERE DEPTNO=30)
ORDER BY SAL DESC;

56
El salario ms ajo del departamento 30 es 950 (SR. JAMES). El query principal retorn los empleados cuyo es
mayor que el menor de los salarios en el departamento 30. As '>ANY ' significa ms que el mnimo '=ANY' es
equivalente a IN.

Cuando se usa ANY, la clusula DISTINCT es frecuentemente usada para evitar seleccionar varias veces las
mismas filas.

ALL compara un valor con cada valor retornado por un subquery.

El siguiente subquery encuentra a los empleados que ganan ms que cada empleado del departamento 30

SELECT ENAME, SAL, DEPTNO


FROM EMP
WHERE SAL > ALL (SELECT DISTINCT SAL
FROM EMP
WHERE DEPTNPO = 30)
ORDER BY SAL DESC;

El sueldo ms alto en el departamento 30 es de 2850, por lo tanto es query retornar sueldos mayores a este
valor.
Esto es mayor que al ms alto que cada salario en dicho departamento.

Clusula HAVING con subqueries anidados

Los subqueries anidados pueden usarse en la clusula HAVING.


Por ejemplo, para desplegar los departamentos que tienen un salario promedio mayor que el departamento 30
ingrese.

SELECT DEPTNO, AVG(SAL)


FROM EMP
HAVING AVG(SAL) > (SELECT AVG(SAL)
FROM EMP
WHERE DEPTNO=30)
GROUP BY DEPTNO;

57
Para construir un SELECT que obtenga el trabajo con sueldo promedio ms alto debe ingresar.

SELECT JOB, AVG(SAL)


FROM EMP
GROUP BY JOB
HAVING AVG(SAL) = (SELECT MAX(AVG(SAL))
FROM EMP
GROUP BY JOB));

El query ms interno entrega el salario promedio para caga grupo de trabajo diferente, y la funcin MAX retorna
el mayor salario promedio. Este valor (5000) es usado en la clusula HAVING. La clusula GROUP BY en que
query principal es usada por que el query principal se seleccionaron columnas agregadas y no agregadas.

Ordenando los datos con subquery.


La clusula ORDER BY en la construccin de la sentencia SELECT debe ser la ultima clusula de esta
sentencia SELECT.

Anidando Subqueries
Los Subqueries se pueden anidar uno dentro de otro, es decir el querie mas interno ir entregando resultados
para que los queries ms externos puedan entregar el resultado final esperado.
Si desea desplegar el ENAME, JOB,HIREDATE y SAL cuyo sueldo es mayor que el mas alto en el
departamento SALES debe ingresar.

SELECT ENAME, JOB, HIREDATE, SAL


FROM EMP
WHERE SAL > (SELECT MAX(SAL)
FROM EMP
WHERE DEPTNO = (SELECT DEPTNO
FROM EMP
WHERE DENAME='SALES));

No hay lmite para los queries anidados

Los queries ms internos deben ser incluidos entre parntesis y deben estar ubicados a la derecha de la
condicin.
Los subqueries no pueden tener la clusula ORDER BY.
Si hay mltiples columnas en la lista del SELECT interno deben aparecer en el mismo orden que aparecen en la
condicin del query principal. El tipo de datos y numero de columnas tambin deben corresponder.

58
Los subqueries ms internos son ejecutados primero a menos que ellos sean subqueries correlativos que sern
analizados posteriormente.
Los operadores lgicos y de SQL pueden ser usados tambin como el operador ANY y ALL.

Los subqueries pueden retornar.


Una o ms filas.
Una o ms columnas.
Utilizar GROUP BY o funciones de grupo.
Combinacin de tablas

Insercion De Datos En Una Tabbla (Insert)

Propsito:
Agrega nuevas filas a la tabla especificada o a la tabla representada por una vista

Requisitos:
Debe ser dueo de la tabla o tener privilegio de INSERT

Sintaxis:
INSERT INTO [user.] table {(column{,colum}...)}
[VALUES (value {,value}...) | query ]

Palabras reservadas:
User Es el usuario dueo de la tabla o vista
Table Es el nombre de una tabla, vista o sinnimo
Column Nombre de una columna de la tabla o vista
Value Es el valor correspondiente a la posicin de la lista de columnas, el valor debe ser del mismo
tipo de la columna de la tabla.
Query Es una sentencia SELECT que retorna mas de un valor en la lista de columnas

Notas:
Es posible insertar una nueva fila dando los valores a cada columna de la tabla, en este caso la lista de
columnas no se requiere. Es recomendable que la lista de columnas siempre sea especificada

Ejemplo:
Para insertar una nueva fila en la tabla DEPT debe ingresar.

INSERT INTO DEPT VALUES (50,PRODUCITION,SAN FRANCISCO);

59
Para insertar una fila con seis columnas en la tabla EMP, incluyendo valores nulos (NULL) se debe ingresar, los
valores que son del tipo CHAR o DATE deben ser entre comillas simples como se muestra a continuacin.

INSERT INTO EMP (EMPNO,ENAME, JOB, SAL, COMM, DEPTNO)


VALUES (7980,JINKS,CLERK,1.256,NULL,30);

Para insertar registros con un subquery en que solo inserten a los managers, presidents o empleados que su
comisin sea menor al 25% del salario entonces debe ingresar

INSERT INTO BONUS


SELECT ENAME, JOB, SAL, COMM
FROM EMP
WHERE COMM < 25 * SAL OR JOB IN (MANAGER,PRESIDENT);

Modificacion De Datos En Una Tabla (Update)

Propsito:
Modificacin los datos en la tabla especificada.

Requisitos:
Debe ser dueo de la tabla o tener privilegio de UPDATE.
Sintaxis:
UPDATE [user.]table [alias]
SET column = expr [,column = expr]...
WHERE condition;

UPDATE [user.]table [alias]


SET (column [,column]...) = (query)
[,(column [,column]...) = (query)]...
WHERE condition;

Palabras reservadas:
User Es el usuario dueo de la tabla o vista
Table Es el nombre de una tabla, vista o sinnimo
Column Nombre de una columna de la tabla o vista
Value Es el valor correspondiente a la posicin de la lista de columnas, el valor debe ser del mismo
tipo de la columna de la tabla.
Query Es una sentencia SELECT que retorna mas de un valor en la lista de columnas
Condition Es una condicin vlida que es evaluada si es verdadera o falsa.

60
Notas:
La clusula SET determina que columnas sern modificadas con nuevos valores. El WHERE determina cuales
filas sern modificadas. Si no se especifica el WHERE todas las filas sern modificadas. Por cada fila que
satisface la clausura WHERE las columnas de la izquierda del operador (=) sern modificadas con el valor
correspondiente.

Query:
Si la clusula SET contiene un subquery este debe retornar exactamente una fila por cada fila que ser
modificada. Cada valor del resultado del subquery es asignado a la columna respectiva de la lista de columnas.
Si el query no retorna filas la columna ser modificada con el valor NULL

Update Correlativo:

Ejemplos:

Este ejemplo modifica con NULL la columna COMM para los empleados en que la columna JOB sea igual a
TREINEE.

UPDATE EMP
SET COMM=NULL
WHERE JOB=TREINEE;

Otro ejemplo muestra como se pueden modificar mas de una columnas a la vez para esto debe ingresar

UPDATE EMP
SET JOB=MANAGER,
SAL=SAL+1000,
DEPTNO=20
WHERE ENAME=JONES;

Ac se muestran distintas forma de modificar los datos de una tabla.

UPDATE EMP A
SET DEPTNO=(SELECT DEPTNO
FROM DEPT
WHERE LOC=BOSTON),
(SAL,COMM)=(SELECT 1.1*AVG(SAL),1.5*AVG(COMM)
FROM EMP B

61
WHERE A.DEPTNO=B.DEPTNO)
WHERE DEPTNO IN
(SELECT DEPTNO
FROM DEPT
WHERE LOC=DALLAS OR LOC=DETROIT);

La precedencia de las modificaciones es la siguiente

Modifica solo los empleados que trabajan en Dallas o Detroit (Clusula WHERE)
Modifica DEPTNO dependiendo de que si el empleado es de Boston (subsuqey)
Modifica el salario de cada empleado y la comisin si pertenece al mismo departamento. (subquery correlativo).
Recuperar desde tablas diferentes a las indicadas en los queries ms internos.
Aparecer en un SELECT, UPDATE, DELETE, INSERT, CREATE TABLE.
Usar operadores de conjunto.

Subqueries correlacionados
Un Subquery correlacionado es un subquery anidado que es ejecutado una vez por cada fila candidata
considerada por el query principal y cuya ejecucin usa un valor de una columna en query ms interno. Esto
causa que el subquery correlacionado sea procesado de manera diferente a subquey anidado ordinario.

Un subquery relacionado es identificado por el uso de una columna de un query ms externo en alguna clusula
predicado de un query ms interno.

En un subquery anidado normal los subqueries ms internos se ejecutan primero y retornan valores a ser
empleados en el query principal. Un subquery correlacionado se ejecuta una vez para cada fila candidata
considerada por el query ms externo el query ms interno esta conducido por el query ms externo.

Pasos a ejecutar en un subquery correlacionado.


Tomar una fila candidata (recuperada por el query ms externo).
Ejecutar el query ms interno usando los valores de la fila candidata.
Usar los valores resultantes del query ms interno para calificar y descalificar candidatos.
Repetir hasta que no queden ms filas candidatas.

Aunque los subqueries correlacionados se ejecutan repetidamente no se puede concluir que sean menos
eficientes que los no correlacionados. Mas a delante veremos consideraciones de eficiencia.

Podemos usar subqueries correlacionados para encontrar los empleados que ganan un sueldo mayor que el
promedio para su propio departamento para ello debe ingresar.

62
SELECT EMPNO, ENAME, SAL, DEPTNO
FROM EMP E
WHERE SAL > (SELECT AVG(SAL)
FROM EMP
WHERE DEPTNO = E.DEPTNO)
ORDER BY DEPTNO;

Podemos ver inmediatamente que este es un query correlacionado ya que usamos una columna desde el
SELECT ms externo en la clusula WHERE del SELECT ms interno.

Note que el alias es necesario solo para evitar ambigedad en el nombre de las columnas.
Analicemos el ejemplo anterior el query principal.

Selecciona primero una fila candidata. Smith en el departamento 20 ganado 800.


La tabla EMP en la clusula FROM tiene el alias E que califica a la columna DEPTNO referenciada en el query
ms interno.
La clusula WHERE compara el 800 con el valor retornado por el query ms interno.

El query ms interno:

Calcula el sueldo promedio para los empleados del departamento.


El numero del departamento que seleccion el query ms externo es traspasado al query ms interno a travs
de E.DEPTNO.
El sueldo promedio para el departamento del seor Smith (20) es 2175.
La fila candidata no cumple la condicin y es descartada
Se repite el paso 1 para la siguiente fila candidata.
La sentencia UPDATE tambin puede usar queries correlacionados.

Ejemplo:

UPDATE EMP E
SET (SAL, COMM) = (SELECT AVG(SAL),AVG(COMM)
FROM EMP
WHERE DEPTNO=E.DEPTNO),
HIDERATE = 11-JUN-99;

63
Operadores
Cuando usted est en un query anidado los operadores lgicos son todos vlidos. Adems el operador EXISTS
puede ser empleado.

Operador EXISTS.
El operador EXISTS es frecuentemente usado por subqueries correlacionados.

Ejemplo:
Para encontrar los empleados que tengan al menos una persona que dependa de ellos, debe ingresar.

SELECT EMPNO, ENAME, JOB, DEPTNO


FROM EMP
WHERE EXISTS (SELECT EMPNO
FROM EMP
WHERE EMP.MGR = E.EMPNO)
ORDER BY EMPNO;

Ejemplo:
Para encontrar todos los empleados cuyo departamento no esta en la tabla DEPT debe ingresar.

SELECT EMPNO, ENAME, DEPTNO


FROM EMP
WHERE NOT EXISTS (SELECT DEPTNO
FROM DEPT
WHERE DEPT.DEPTNO=EMP.DEPTNO);

Porque usar subqueries correlacionados?


Los subqueries correlacionados son una forma de leer cada fila en la tabla y comparar valores contra las filas
que contiene datos relacionados. Este tipo de queries es usado para responder preguntas con muchas partes
cuyas respuestas dependen del valor de cada fila en el query patrn.

Consideraciones de eficiencia
Hasta hora hemos examinados dos tipos de subqueries. Se ha mencionado que los subqueries relacionados
con EXISTS pueden ser la forma ms eficiente de realizar algunos queries.
La performance y la eficiencia depender del uso de ndices, del numero de filas retornadas por los queries, del
tamao de las tablas y de las tablas temporales que se requiere construir para evaluar resultados intermedios.
Las tablas temporales generadas por Oracle no tienen ndice y pueden llevar a una degradacin de la eficiencia
en subqueries que ocupan IN, ANY y ALL.

64
Eliminacin de filas (DELETE).

Proposito.
Elimina filas de una tabla o vista.

Pre Requisitos
Debe ser el creador de la tabla o tener privilegios para refectuar DELETE.

Sintaxis

DELETE [FROM] [user.] table [alias] [WHERE condicin]

Parabras Reservadas
User Es el dueo de la tablas
Table Es el nombre de la tabla o vista de la cual se eliminaran las filas.
Alias Es un nombre temporal por el cual se sustituye el nombre real de la tabla, los alias
generalmente se usan cuando la sentencia DELETE tiene un query relacionado.
Condicin Es una expresin lgica que retorna un valor verdadero o falso, si es verdadero la condicn se
cumple y se ejecuta la sentencia.

Notas del usuario


Si el WHERE es omitido todas las filas son borradas. Si el WHERE es especificado todas las filas que cumplen
la condicn seran eliminadas. La condicin puede tener expresiones lgicas como tambin un query.

Ejemplo

Este ejemplo muestra comose borrran todas las filas de la tabla EMP_ASSING

DELETE FROM EMP_ASSING;

Este ejemplo elimina a los empleados que ganan menos de $100 por comisin.

DELETE FROM EMP_ASSING WHERE COMM<100;

65

You might also like