Professional Documents
Culture Documents
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
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.
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.
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.
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]
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.
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.
8
Para ejecutar un archivo de comandos existen varias posibilidades, una de ellas es ocupar los comando GET,
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.
SELECT *
FROM EMP;
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
Para seleccionar filas con el valor 40 en la columna DEPTNO de una tabla EMP debe ingresar
Para seleccionar filas con el valor 40 en la columna DEPTNO de las tablas EMP y EMP2 debe ingresar
Si EMP2 tiene como dueo otro usuario cuyo nombre de usuario es BEN ingrese
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
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.
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]
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]
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:
Para seleccionar los empleados desde el EMP, ordenados primero por los nmeros ascendentes de los
departamentos, y luego por salarios descendentes, ingrese:
Para seleccionar la misma informacin como en el SELECT previo y usar las posiciones ORDER BY, ingrese:
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;
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]]
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.
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:
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
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
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.
Operadores de caracteres
Son usados en expresiones que manipulan caracteres
21
Operadores de Comparacin
Son usados para comprar una expresin de otra.
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
Operadores Lgicos
Los operadores lgicos son usados para evaluar mltiples condiciones.
Otros operadores
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
25
Ejemplo SELECT ROUND(15.193,1) "Round" FROM DUAL;
Round
--------
15.2
26
Funciones de caracteres
Este punto muestra una lista de funciones que retornan caracteres como resultado de su operacin
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
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-
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.
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
Funciones de Conversin
Las funciones de conversin sirven para convertir valores de un tipo de dato en otro tipo de dato
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
32
Funciones de Fecha
Todas las funciones retornan un valor del tipo date excepto MINTH_BETWEEN que entrega un valor numrico.
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
34
Otras Funciones
35
TURNNER 0
JAMES NOT APPLICABLE
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:
Notas de usuario:
Las querys ( preguntas) pueden ser usados en las siguientes afirmaciones SQL:
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.
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)
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)
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:
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
este ejemplo muestra un query que une a una tabla local, (DEPT) con la tabla EMP en la base de datos
HOUSTON:
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.
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.
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
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.
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;
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;
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;
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:
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
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:
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:
Para mostrar el salario mensual total de todos los departamentos, incluso aquellos departamentos in empleados
(con unin externa), ingrese:
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:
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
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;
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.
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);
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.
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.
54
Es posible combinar las dos sentencias SQL en un solo query anidado
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.
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.
La siguiente sentencia SELECT selecciona los empleados que ganan el sueldo ms bajo en cada departamento
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.
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 > 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.
El siguiente subquery encuentra a los empleados que ganan ms que cada empleado del departamento 30
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.
57
Para construir un SELECT que obtenga el trabajo con sueldo promedio ms alto debe ingresar.
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.
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.
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.
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.
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.
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
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;
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;
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);
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.
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.
El query ms interno:
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.
Ejemplo:
Para encontrar todos los empleados cuyo departamento no esta en la tabla DEPT debe ingresar.
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
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.
Ejemplo
Este ejemplo muestra comose borrran todas las filas de la tabla EMP_ASSING
Este ejemplo elimina a los empleados que ganan menos de $100 por comisin.
65