Sunteți pe pagina 1din 219

SQL

Parte II
Captulos
1. Sentencias Bsicas de SQL
2. Restriccin y Ordenamiento de Datos
3. Funciones de SQL
4. Obteniendo Datos desde Mltiples Tablas
5. Obteniendo Datos usando Funciones de Agrupacin
6. Sub-Consultas
7. Manejo de los Valores de Entrada con SQL*Plus
8. Manipulando Datos
9. Creacin y Manipulacin de Tablas
10. Restricciones de Integridad
11. Vistas
12. Secuencias, ndices y Sinnimos
Captulo 1
Sentencias Bsicas de SQL
Parte II - SQL
Sentencias Bsicas Restriccin y
Funciones de SQL
de SQL Ordenamiento de Datos

Obteniendo Datos
Obteniendo Datos
Usando Funciones de Sub-Consultas
desde Mltiples Tablas
Agrupacin

Manejo de los Valores


de Entrada con Manipulando Datos Creacin y
SQL*Plus Manipulacin de Tablas

Restricciones de Secuencias, Indices y


Vistas
Integridad Sinnimos
Objetivos
Mostrar las capacidades que tienen las sentencias
SQL
Ejecutar algunas sentencias bsicas
Diferenciar entre las sentencias SQL y los comandos
SQL*Plus
SQL
(Structured Query Language)
Es un Lenguaje Estructurado de Consultas
Permite la comunicacin con el DBMS y tiene las
siguientes ventajas:
Eficiente
Fcil de aprender y usar
Funcionalmente completo (SQL permite definir, recuperar y
manipular los datos en las tablas)
Sentencias SQL
Sentecias
SQL

Re cuperacin Le nguaje de Le nguaje de Control de Le nguaje de


de Datos M anipulacin De finicin de Transacciones Control de
de Datos Datos Cambios
SELECT (DML) (DDL) COMM IT (DCL)
ROLLBACK
INSERT CREATE SAVEPOINT GRANT
UPDATE ALTER REVOKE
DELETE DROP
RENAM E
TRUNCATE
Caractersticas de una Sentencia
SELECT
Seleccin Proyeccin

Tabla 1 Join Tabla 1

Tabla 1 Tabla 2
Estructura de una Sentencia SQL
SELECT [distinct] {*| columnas [alias]| ...}
FROM tabla
[WHERE condicion(es)];

SELECT identifica que columnas (proyeccin)


FROM identifica que tabla (join)
WHERE restringe la consulta (seleccin, join)
Seleccionando Columnas
Se pueden mostrar todas las columnas de una tabla
usando el asterisco (*)

SQL> SELECT * SQL> SELECT cod,nombre,apellido,


2 FROM empleados; 2 salario, fecha_nac,
3 lugar_nac, suc_cod
4 FROM empleados;

COD NOMBRE APELLIDO SALARIO FECHA_NAC LUGAR_NAC SUC_COD


-------------------------------------------------------------
5 JUAN PEREZ 500 12-NOV-70 COCHABAMBA 3
7 MARIA SILEZ 350 08-ABR-75 LA PAZ 2
9 RICARDO QUIROGA 120 25-JUN-77 COCHABAMBA 7
Seleccionando Columnas
Para seleccionar columnas especficas se tiene
que especificar en la parte del SELECT los
nombres de las columnas que interesan

SQL> SELECT nombre, apellido


2 FROM empleados;

NOMBRE APELLIDO
----------------------------------
JUAN PEREZ
MARIA SILEZ
RICARDO QUIROGA
Definicin de una Columna Alias
Renombra el ttulo de una columna
Es til con clculos
Es lo que sigue despus del nombre de una
columna; opcionalmente se puede escribir AS entre
el nombre de la columna y el alias
Requiere doble comilla si el alias contiene espacios o
caracteres especiales
Columnas Alias
SQL> SELECT nombre Nombre, salario Sueldo,
2 lugar_nac Lugar de Nacimiento
3 FROM empleados ;

Nombre Sueldo Lugar de Nacimiento


--------------------------------------------------
JUAN 500 COCHABAMBA
MARIA 350 LA PAZ
RICARDO 120 COCHABAMBA
Definicin de una Tabla Alias
Renombra el ttulo de una tabla
Es un sobrenombre que se le da a una tabla y que
debe ser nico para toda la consulta
Es lo que sigue despus del nombre de la tabla
Es til cuando se quiera recuperar datos de ms de
una tabla
Tablas Alias
SQL> SELECT emp.nombre, emp.apellido,
2 emp.salario, emp.lugar_nac
3 FROM empleados emp
4 WHERE emp.lugar_nac = COCHABAMBA;

NOMBRE APELLIDO SALARIO LUGAR_NAC


--------------------------------------------------
JUAN PEREZ 500 COCHABAMBA
RICARDO QUIROGA 120 COCHABAMBA
GUSTAVO HERRERA 300 COCHABAMBA
...
Definicin del Valor NULL
NULL es un valor desconocido o inaplicable
NULL no es lo mismo que cero tampoco un espacio
en blanco
Tipos de Datos
Las columnas pueden ser de los siguientes tipos de
datos:
Tipo Dato Descripcin

NUMBER(p,s) Valor del numero tiene como mximo p


dgitos y s dgitos para redondeo

VARCHAR2(s) Valor de caracteres variable con longitud


mxima de s
DATE Fecha y tiempo comprendida entre el 1 de
enero del 4712 A.C. y el 31 de diciembre del
9999 D.C.
CHAR(s) Valor de caracteres con longitud mxima de
s
Tipo Number(p,e)
Donde p (precisin) es el numero total de dgitos,
mximo 38 dgitos de precisin y e (escala) indica
donde se produce el redondeo
Contiene dgitos en el rango de 1.0x10-129 a
9.99x10124
Acepta nmeros positivos o negativos
Contiene punto decimal
Se los puede escribir con notacin regular o cientfica
Expresiones Aritmticas

Se pueden crear expresiones aritmticas sobre


Nmeros y Fechas (solo + y -) usando operadores
aritmticos

Operador Descripcin
+ Adicin
- Sustraccin
* Multiplicacin
/ Divisin
Operadores Aritmticos
SQL> SELECT nombre, salario, salario+20
2 FROM empleados;

NOMBRE SALARIO SALARIO+20


------------------------------------
JUAN 500 520
MARIA 350 370
RICARDO 120 140
Tipo Varchar2(s)
Permite almacenar cadenas de caracteres de
longitud s
La longitud es variable a diferencia del tipo Char que
es fija
Funciones
Concatenacin (||)
To_Char
Length
...
Operador Concatenacin
Permite concatenar dos o ms cadenas de caracteres
Es representado por dos lneas verticales (||)

SQL> SELECT nombre||apellido AS Nombres


2 FROM empleados;

Nombres
--------------------------------
JUANPEREZ
MARIASILEZ
RICARDOQUIROGA
Funcion To_Char
Convierte un nmero o fecha a una cadena de
caracteres VARCHAR2 de acuerdo al formato
especificado en la mscara

SQL> SELECT nombre, TO_CHAR(fecha_nac,DD-MM-YY)


2 FROM empleados;

NOMBRE TO_CHAR(FECHA_NAC,DD-MM-YY)
--------------------------------------------
JUAN 12-11-70
MARIA 08-04-75
RICARDO 25-06-77
Cadena de Caracteres Literales

Un literal es un valor explcito (numrico, caracter,


cadena o booleano) que no esta representado por un
identificador
En el caso de un literal de cadena es una secuencia
de caracteres encerrados entre comillas simples
Cadena de Caracteres Literales
SQL> SELECT nombre|| ||tiene un
2 salario de|| ||salario
3 AS Detalle de Empleados
4 FROM empleados;

Detalle de Empleados
--------------------------------
JUAN tiene un salario de 500
MARIA tiene un salario de 350
RICARDO tiene un salario de 120
Tipo Date
Almacena una fecha vlida segn el formato
establecido en una mscara
Fecha y tiempo comprendida entre el 1 de enero del
4712 A.C. y el 31 de diciembre del 9999 D.C.
Todo literal que sea fecha debe de estar encerrado
entre comillas simples
Funciones
To_Date
Funcion To_Date
Convierte una cadena de caracteres representando una
fecha a un valor fecha de acuerdo al formato especificado
en la mscara (si el formato es omitido, el formato ser
DD-MON-YY)

SQL> SELECT nombre|| estar de vacacin el ||


2 TO_DATE(20-DIC-2002,DD-MM-YY) AS vacaciones
3 FROM empleados;

VACACIONES
--------------------------------------------
JUAN estar de vacacin el 20-12-02
MARIA estar de vacacin el 20-12-02
RICARDO estar de vacacin el 20-12-02
Filas Duplicadas
Los resultados obtenidos de las consultas son todas las
filas, incluyendo duplicados

SQL>SELECT lugar_nac SQL> SELECT ALL lugar_nac


2 FROM empleados; 2 FROM empleados;

LUGAR_NAC
---------------------------
COCHABAMBA
LA PAZ
COCHABAMBA
Eliminacin de Filas Duplicadas
Se pueden eliminar las filas duplicadas escribiendo
DISTINCT en la clusula SELECT

SQL> SELECT DISTINCT lugar_nac


2 FROM empleados;

LUGAR_NAC
---------------------------
COCHABAMBA
LA PAZ
SQL*Plus
SQL*Plus es una herramienta de Oracle que
reconoce y acepta las sentencias SQL en el Servidor
Oracle para su ejecucin
Contiene adems su propio lenguaje de comandos
Capacidades de SQL*Plus
Describe la estructura de las tablas
Permite ejecutar sentencias SQL
Guarda y aade sentencias SQL en archivos
Ejecuta archivos guardados
Carga comandos desde un archivo al buffer para
editar
Interaccin entre SQL y SQL*Plus
Sentencias SQL Sentencias SQL
Buffer

SQL*Plus Servidor
BD

Comandos Resultado
SQL*Plus Consulta

Reporte con
Formato
Sentencias SQL Vs. Comandos
SQL*Plus
SQL SQL*Plus
Un lenguaje Un ambiente
ANSI standard Propio de Oracle
Palabras reservadas no Palabras reservadas
pueden ser abreviadas pueden ser abreviadas
Sentencias manipulan Comandos no permiten
datos y definiciones de la manipulacin de
tablas en la base de valores en la base de
datos datos
Ingreso SQL*Plus
Desde un Ambiente Windows:

Desde una lnea de comandos:

sqlplus[username[/password[@database]]]
Mostrando la Estructura de las
Tablas

Para describir la estructura de una tabla se usa el


comando de SQL*Plus DESCRIBE

DESC[RIBE] tabla
Mostrando la Estructura de las
Tablas
SQL> DESCRIBE empleados;

Name Null? Type


---------------------------------------------
COD NOT NULL VARCHAR2(6)
NOMBRE NOT NULL VARCHAR2(20)
APELLIDO NOT NULL VARCHAR2(20)
SALARIO NUMBER(5)
FECHA_NAC DATE
LUGAR_NAC VARCHAR2(20)
SUC_COD NOT NULL VARCHAR2(6)
Salida de SQL*Plus
Para salir de SQL*Plus se tiene el comando EXIT

SQL> EXIT;
Captulo 2
Restriccin y Ordenamiento de Datos
Parte II - SQL
Sentencias Bsicas Restriccin y
Funciones de SQL
de SQL Ordenamiento de Datos

Obteniendo Datos
Obteniendo Datos
Usando Funciones de Sub-Consultas
desde Mltiples Tablas
Agrupacin

Manejo de los Valores


de Entrada con Manipulando Datos Creacin y
SQL*Plus Manipulacin de Tablas

Restricciones de Secuencias, Indices y


Vistas
Integridad Sinnimos
Objetivos
Limitar las filas recuperadas de la ejecucin de una
consulta
Ordenar las filas recuperadas de la ejecucin de una
consulta
Uso de la Clusula WHERE
Permite seleccionar determinadas filas de una tabla
que cumplan con una condicin

SELECT [distinct] { * | columnas [alias], ...}


FROM tabla
[WHERE condicion(es)];
Uso de la Clusula WHERE
La clusula WHERE debe de estar inmediatamente
despus de la clusula FROM

SQL> SELECT nombre, apellido


2 FROM empleados
3 WHERE nombre = MARIA;

NOMBRE APELLIDO
--------------------------------
MARIA SILEZ
Uso de la Clusula WHERE
Puede estar compuesta por varias condiciones

SQL> SELECT nombre, apellido, salario


2 FROM empleados
3 WHERE nombre = RICARDO
4 AND suc_cod = 7;

NOMBRE APELLIDO SALARIO


-------------------------------------
RICARDO QUIROGA 120
Condicin(es) en el WHERE
Una condicin en la clusula WHERE esta
compuesta por:
Condicin

Columna Operador de Columna, Constante,


Comparacin Lista de Valores

Donde la condicin podr ser verdadero o falso, y


de acuerdo a eso se seleccionarn slo las filas
que cumplen la condicin
En una condicin los valores de caracter son
sensibles a las maysculas y minsculas, y los
valores de fechas son sensibles al formato
Operadores de Comparacin
Los operadores de comparacin son usados en
condiciones que comparan una expresin con otra

Operador Descripcin
= Igual a
> Mayor que
>= Mayor que o igual a
< Menor que
<= Menor que o igual a
<> Diferente
Otros Operadores de Comparacin
BETWEEN se usa para mostrar las filas
...AND... basndose en un rango de
valores
IN (lista) se usa para ir probando o
comparando con los valores de la
lista
LIKE se usa para realizar bsquedas
sensibles
- % denota cero o mas caracteres
- _ denota un caracter
IS NULL se usa para probar con valores
nulos
Operador BETWEENAND
Se usa para recuperar filas basndose en un rango
de valores
En el rango se tiene que especificar el valor mnimo
y el valor mximo

SQL> SELECT nombre, salario


2 FROM empleados
3 WHERE salario BETWEEN 350 AND 1000;

NOMBRE SALARIO
-------------------------
JUAN 500
Valor mnimo Valor mximo
MARIA 350
JOSE 800
...
Operador IN (lista)
Se usa para ir probando o comparando con los
valores de la lista
Este operador puede ser usado con cualquier tipo

SQL> SELECT nombre, apellido, lugar_nac


2 FROM empleados
3 WHERE suc_cod IN (2,3,7);

NOMBRE APELLIDO LUGAR_NAC


--------------------------------------
JUAN PEREZ COCHABAMBA
MARIA SILEZ LA PAZ
RICARDO QUIROGA COCHABAMBA
...
Operador LIKE
Se usa para realizar bsquedas sensibles
- % Equivale a una cadena de caracteres de longitud
comprendida entre 0 y n
- _ Equivale a un nico caracter

SQL>SELECT nombre SQL> SELECT nombre


2 FROM empleados 2 FROM empleados
3 WHERE nombre LIKE (J%); 3 WHERE nombre LIKE (_A%);

NOMBRE NOMBRE
------------------- -------------------
JUAN MARIA
JOSE JANNETH
... ...
Operador IS NULL
Se usa para probar con valores nulos
No se podra usar un = porque un valor nulo no es
mismo que un nmero o un caracter o cualquier tipo
de dato

SQL> SELECT nombre, lugar_nac


2 FROM empleados
3 WHERE lugar_nac IS NULL;

NOMBRE LUGAR_NAC
------------------------------
JOSE
FERNANDO
...
Operadores Lgicos
Un operador lgico combina el resultado de dos
condiciones para producir un solo resultado
basndose en ambas, o para invertir el resultado de
una sola condicin

Operador Descripcin
AND Retorna TRUE si ambas
condiciones son verdaderas
OR Retorna TRUE si por lo
menos una condicin es
verdadera
NOT Retorna TRUE si la
condicin es falsa
Operador AND
Retorna TRUE si ambas condiciones son
verdaderas

SQL> SELECT nombre, apellido, salario


2 FROM empleados
3 WHERE lugar_nac = COCHABAMBA
4 AND suc_cod = 3;

NOMBRE APELLIDO SALARIO


-------------------------------------
JUAN PEREZ 500
GUSTAVO HERRERA 300
JIMENA TORRICO 350
...
Operador OR
Retorna TRUE si por lo menos una condicin es
verdadera

SQL> SELECT nombre, apellido, lugar_nac, suc_cod


2 FROM empleados
3 WHERE lugar_nac = LA PAZ
4 OR suc_cod = 3;

NOMBRE APELLIDO LUGAR_NAC SUC_COD


---------------------------------------------
JUAN PEREZ COCHABAMBA 3
MARIA SILEZ LA PAZ 2
JIMENA TORRICO SUCRE 3
...
Operador NOT
Retorna TRUE si la condicin es falsa

SQL> SELECT nombre, apellido, lugar_nac


2 FROM empleados
3 WHERE lugar_nac NOT IN(COCHABAMBA,LA PAZ);

NOMBRE APELLIDO LUGAR_NAC


-------------------------------------
JIMENA TORRICO SUCRE
ALVARO VARGAS ORURO
...
Uso de la Clusula ORDER BY
Ordena el resultado obtenido al ejecutar una consulta
- ASC: en orden ascendente, por defecto
- DESC: en orden descendente

SELECT expr
FROM tabla
[WHERE condicion(es)]
[ORDER BY {columna, expr}[ASC|DESC]];
Uso de la Clusula ORDER BY
La clusula ORDER BY siempre debe de estar al final de
una sentencia SELECT
Se puede ordenar por una columna que no est en la lista
SELECT
Se puede ordenar no solo por una columna sino tambin
por varias, vale decir:
ORDER BY columna1, columna2, ...

Se puede especificar una expresin o un alias para


ordenar
ORDER BY alias1, alias2,...
ORDER BY columna1||columna2
ORDER BY columna1*columna2
Uso de la Clusula ORDER BY
SQL> SELECT nombre, apellido, salario
2 FROM empleados
3 ORDER BY salario;

SQL> SELECT nombre, apellido, lugar_nac, salario


2 FROM empleados
3 ORDER BY nombre, salario;

SQL> SELECT nombre, apellido, salario*12 sueldo


2 FROM empleados
3 ORDER BY sueldo;

SQL> SELECT nombre, apellido, lugar_nac, salario


2 FROM empleados
3 ORDER BY nombre||TO_CHAR(salario);
Captulo 3
Funciones de SQL
Parte II - SQL
Sentencias Bsicas Restriccin y
Funciones de SQL
de SQL Ordenamiento de Datos

Obteniendo Datos
Obteniendo Datos
Usando Funciones de Sub-Consultas
desde Mltiples Tablas
Agrupacin

Manejo de los Valores


de Entrada con Manipulando Datos Creacin y
SQL*Plus Manipulacin de Tablas

Restricciones de Secuencias, Indices y


Vistas
Integridad Sinnimos
Objetivos
Mostrar los dos tipos de funciones disponibles en
SQL
Usar funciones para manipular caracteres, nmeros
y fechas en las sentencias SQL
Mostrar el uso de las funciones de conversin
Funciones de SQL
Las funciones son una caracterstica potente de SQL, y
pueden ser usadas para:
- Realizar clculos sobre datos
- Modificar datos individualmente
- Dar formato a las fechas y nmeros para ser mostrados
- Convertir tipos de datos entre columnas

Existen dos distintos tipos de funciones

Funciones

Funciones para Funciones para


una Fila ms de una Fila
Funciones para una Fila
Aceptan varios argumentos y retornan solo un valor
Trabajan con cada fila resultante
Retornan un resultado por fila
Pueden modificar los tipos de datos
Pueden estar anidadas

nombreFuncion(columna|expresion,[arg1, arg2,...])

Un argumento puede ser:


- Una constante
- Un valor variable
- Un nombre de columna
- Una expresin
Funciones para una Fila

Funciones para una Fila

Caracteres Conversiones

Nmeros Fechas
Funciones para Manipular Caracteres
Se dividen en:
Funciones para Conversin de Maysculas-
Minsculas
- LOWER
- UPPER
- INITCAP
Funciones para Manipulacin de Cadenas de
Caracteres
- CONCAT
- SUBSTR
- LENGTH
- INSTR
- LPAD
Funciones para Convertir
Maysculas-Minsculas
Funcin Descripcin
LOWER(columna|expresion) Convierte una cadena de
caracteres a minsculas
UPPER(columna|expresion) Convierte una cadena de
caracteres a maysculas
INITCAP(columna|expresion) Convierte el primer
caracter de cada palabra
a mayscula y los dems
a minsculas
Funciones para Convertir
Maysculas-Minsculas

Funcin Resultado
LOWER(CADENA caracter) cadena caracter
UPPER(CADENA caracter) CADENA CARACTER
INITCAP(CADENA caracter) Cadena Caracter
Funciones para Manipulacin de
Cadenas de Caracteres
Funcin Descripcin
CONCAT(columna1|expresion1, Permite concatenar dos cadenas
columna2|expresion2) de caracteres
SUBSTR(columna|expresion,m[,n]) Retorna caracteres especficos
empezando desde la posicin m,
n caracteres adelante
LENGTH(columna|expresion) Retorna la longitud de la cadena
de caracteres
INSTR(columna|expresion,c) Retorna la posicin del caracter c
en la cadena
LPAD(columna|expresion,n,cadena) Si es que el primer argumento
tiene una longitud menor que n
se completar desde derecha a
izquierda con cadena
Funciones para Manipulacin de
Cadenas de Caracteres
Funcin Resultado
CONCAT(Cadena, Grande) CadenaGrande
SUBSTR(Cadena, 1, 3) Cad
LENGTH(Cadena) 6
INSTR(Cadena, e) 4
LPAD(salario,10,*) *******500
Funciones para Manipular Nmeros
Funcin Descripcin
ROUND(columna| Redondea la columna,
expresin, n) expresin o valor a n lugares
decimales o si n es omitido,
sin lugares decimales
TRUNC(columna| Trunca la columna, expresin
expresin, n) o valor a n lugares decimales
o si n es omitido, sin lugares
decimales
MOD (m , n) Retorna el residuo de la
divisin de m entre n
Funciones para Manipular Nmeros
Funcin Resultado
ROUND(24.416, 2) 24.42

TRUNC(24.416, 2) 24.41

MOD(150, 20) 10
Funciones para Manipular Fechas
Funcin Descripcin
MONTHS_BETWEEN Numero de meses entre dos
fechas
ADD_MONTHS Aade un mes calendario a
una fecha
NEXT_DAY Siguiente da en una fecha
especifica
LAST_DAY Ultimo da del mes
ROUND Redondea una fecha
TRUNC Trunca un fecha
Funciones para Manipular Fechas
MONTHS_BETWEEN(fecha1, fecha2)
Encuentra el nmero de meses entre la fecha1 y la fecha2. El
resultado puede ser positivo como negativo. Si la fecha1 es mayor
que la fecha2, es resultado es positivo, si es menor el resultado
ser negativo

ADD_MONTHS(fecha, n)
Aade n nmeros de meses calendario a la fecha. El valor de n
debe ser entero y puede ser negativo

NEXT_DAY(fecha, caracter)
Encuentra la fecha del siguiente da de la semana especificado en
caracter a partir de fecha

LAST_DAY(fecha)
Encuentra la fecha del ltimo da del mes que contiene fecha
Funciones para Manipular Fechas

Funcin Resultado
MONTHS_BETWEEN(01-SEP-95,11-JAN-94) 19.6774194

ADD_MONTHS(05-JAN-99, 6) 05-JUL-99

NEXT_DAY(14-SEP-98,FRIDAY) 18-SEP-98

LAST_DAY(09-NOV-98) 30-NOV-98
Funciones para Manipular Fechas
ROUND(fecha[,fmt])
Retorna la fecha redondeada a la unidad especificada por el
formato fmt (que puede ser aos, meses). Si el formato fmt
es omitido, la fecha ser redondeada al da ms cercano

TRUNC(fecha[,fmt])
Retorna la fecha con el tiempo truncado a la unidad
especificada por el formato fmt (que puede ser aos,
meses). Si el formato fmt es omitido, la fecha ser truncada
al da ms cercano
Funciones para Manipular Fechas

Funcin Resultado
ROUND(25-JUL-98,MONTH) 01-AUG-98

ROUND(25-JUL-98,YEAR) 01-JAN-99

TRUNC(25-JUL-98,MONTH) 01-JUL-98

TRUNC(25-JUL-98,YEAR) 01-JAN-98
Funciones para Realizar Conversiones
Funcin Descripcin
TO_CHAR(numero|fecha[,fmt]) Convierte un numero o fecha a una
cadena de caracteres VARCHAR2
con el formato fmt
TO_NUMBER(cadena[,fmt]) Convierte una cadena de
caracteres conteniendo dgitos a
un numero con el formato opcional
fmt
TO_DATE(cadena[,fmt]) Convierte una cadena de
caracteres representando una
fecha a un valor fecha de acuerdo
al formato fmt especificado(si el
formato fmt es omitido, el formato
ser DD-MON-YY)
Funciones para Realizar Conversiones

Funcin Resultado
TO_CHAR(8500, 99,999) 8,500

TO_CHAR(05-NOV-99, DD-MM-YYYY) 05-11-1999

TO_NUMBER(1435) 1435

TO_DATE(06-02-97,DD/MON/YYYY) 06/FEB/1997
Funciones Anidadas
Las funciones pueden estar anidadas en cualquier
nivel
Las funciones anidadas son evaluadas desde del
nivel mas interno al mas externo

F3(F2(F1(columna,arg1),arg2),arg3)

Resultado1

Resultado2

Resultado3
Funciones Anidadas
Funcin Resultado
ADD_MONTHS(TO_DATE(05-JAN-99,DD-MON-YY ),6) 05-JUL-99

TO_CHAR(NEXT_DAY(14-SEP-98,FRIDAY),DD/MM/YYYY) 18/09/1998

TO_CHAR(ROUND(25-JUL-98,MONTH),DD-MM-YYYY) 01-08-1998
Captulo 4
Obteniendo Datos desde Mltiples Tablas
Parte II - SQL
Sentencias Bsicas Restriccin y
Funciones de SQL
de SQL Ordenamiento de Datos

Obteniendo Datos
Obteniendo Datos
Usando Funciones de Sub-Consultas
desde Mltiples Tablas
Agrupacin

Manejo de los Valores


de Entrada con Manipulando Datos Creacin y
SQL*Plus Manipulacin de Tablas

Restricciones de Secuencias, Indices y


Vistas
Integridad Sinnimos
Objetivos
Escribir sentencias SQL para acceder a datos de
mas de una tabla usando joins internos y non-
equijoins
Ver los datos que generalmente no satisfacen una
condicin join usando el join externo
Hacer join de una tabla a si misma
Obteniendo Datos desde
Mltiples Tablas
EMPLEADOS SUCURSALES

COD NOMBRE APELLIDO ... SUC_COD COD DESCR TELEFONO ...


------------------------------------- -------------------------------------
5 JUAN PEREZ 3 1 SUD 225874
7 MARIA SILEZ 2 2 NORTE 501458
9 RICARDO QUIROGA 7 3 CENTRAL 255656
14 JIMENA TORRICO 3 7 SACABA 298756
18 JOSE VARGAS 3 9 QUILLACOLLO 268751
... ...

COD NOMBRE SUC_COD DESCR


-------------------------------------
5 JUAN 3 CENTRAL
7 MARIA 2 NORTE
9 RICARDO 7 SACABA
14 JIMENA 3 CENTRAL
18 JOSE 3 CENTRAL
...
Uso de la Sentencia JOIN
Se usa un join para realizar una consulta a ms de
una tabla
SELECT tabla1.columna, tabla2.columna
FROM tabla1, tabla2
WHERE tabla1.columna1 = tabla2.columna2;

Se escribe la condicin join en la parte de la clusula


WHERE
En necesario el nombre de la columna con el nombre
de la tabla cuando el mismo nombre de columna
aparece en mas de una tabla
Tipos de Join
Join Descripcin
Join Interno =
Non-Equijoin BETWEEN
Join Externo (+)
Self Join Con una tabla
Join Interno

EMPLEADOS SUCURSALES

COD NOMBRE APELLIDO ... SUC_COD COD DESCR TELEFONO ...


------------------------------------- -------------------------------------
5 JUAN PEREZ 3 1 SUD 225874
7 MARIA SILEZ 2 2 NORTE 501458
9 RICARDO QUIROGA 7 3 CENTRAL 255656
14 JIMENA TORRICO 3 7 SACABA 298756
18 JOSE VARGAS 3 9 QUILLACOLLO 268751
... ...

Llav e Foranea Llav e Primaria

Es la relacin que existe entre dos tablas a travs de


sus llaves primarias y forneas
Join Interno
SQL> SELECT empleados.nombre, empleados.apellido
2 empleados.suc_cod, sucursales.cod,
3 sucursales.descr
4 FROM empleados, sucursales
5 WHERE empleados.suc_cod = sucursales.cod;

NOMBRE APELLIDO SUC_COD COD DESCR


-------------------------------------------------
JUAN PEREZ 3 3 CENTRAL
MARIA SILEZ 2 2 NORTE
RICARDO QUIROGA 7 7 SACABA
...
Non-Equijoin
EMPLEADOS BONOS

COD NOMBRE APELLIDO SALARIO FECHA_NAC ... CATEGORIA FECHA_MIN FECHA-MAX AUMENTO
----------------------------------------------- -------------------------------------------
5 JUAN PEREZ 500 12-NOV-70 1 01-JAN-70 31-DIC-75 15
7 MARIA SILEZ 350 08-ABR-75 2 01-JAN-76 31-DIC-81 10
9 RICARDO QUIROGA 120 25-JUN-77 3 01-JAN-82 31-DIC-87 5
14 JIMENA TORRICO 380 01-DIC-76 4 01-JAN-88 31-DIC-93 1
18 JOSE VARGAS 800 19-JUN-78 ...
...

La fecha de nacimiento de la tabla EMPLEADOS


esta entre la fecha m nima y la fecha mxima en
la tabla BONOS
Non-Equijoin
SQL> SELECT e.nombre, e.apellido, e.fecha_nac,
2 e.salario, b.categoria, b.aumento
3 FROM empleados e, bonos b
4 WHERE e.fecha_nac
5 BETWEEN b.fecha_min AND b.fecha_max;

NOMBRE APELLIDO FECHA_NAC SALARIO CATEGORIA AUMENTO


------------------------------------------------------------
JUAN PEREZ 12-NOV-70 500 1 15
MARIA SILEZ 08-ABR-75 350 1 15
...
Join Externo
EMPLEADOS SUCURSALES

COD NOMBRE APELLIDO ... SUC_COD COD DESCR TELEFONO ...


------------------------------------- -------------------------------------
5 JUAN PEREZ 3 1 SUD 225874
7 MARIA SILEZ 2 2 NORTE 501458
9 RICARDO QUIROGA 7 3 CENTRAL 255656
14 JIMENA TORRICO 3 7 SACABA 298756
18 JOSE VARGAS 3 ...
...
9 QUILLACOLLO 268751

No existen emplea dos en la


sucursal 9 QUILLACOLLO
Join Externo
Se usa el join externo para ver tambin las filas que
no satisfacen la condicin
Es representado con el signo (+)
SQL> SELECT e.nombre, s.cod, s.descr
2 FROM empleados e, sucursales s
3 WHERE e.suc_cod (+) = s.cod
4 ORDER BY e.suc_cod;

NOMBRE COD DESCR


---------------------------------------------
MARIA 2 NORTE
JUAN 3 CENTRAL
RICARDO 7 SACABA
...
9 QUILLACOLLO
Self join

CLIENTE(TITULAR) CLIENTE(AUTORIZADO)

COD CI NOMBRE APELLIDO ... CLI_COD COD CI NOMBRE APELLIDO ... CLI_COD
---------------------------------------- ----------------------------------------
14 4587962 GUSTAVO ALVAREZ 31 4854896 KAREN ACHA 10
19 4788965 MARCELA SANCHEZ 41 4755166 MARCO ALCOCER 14
22 4155877 CARLOS ZENTENO 66 4877514 PAOLA CACERES 35
35 3587442 HERMAN CACERES 87 4621547 LUIS CACERES 35
... ...

Cod en la tabla CLIENTE(TITULAR) es


el mismo que cli_cod en la tabla
CLIE NTE(AUTORIZADO)
Self join
SQL> SELECT autorizado.nombre|| es autorizado por
2 ||titular.nombre
3 FROM clientes titular, clientes autorizado
4 WHERE autorizado.cli_cod = titular.cod;

AUTORIZADO.NOMBRE|| ES AUTORIZADO POR ||TITULAR.NOMBRE


---------------------------------------------------------
KAREN es autorizado por MARISOL
MARCO es autorizado por GUSTAVO
PAOLA es autorizado por HERNAN
LUIS es autorizado por HERMAN
ANA es autorizado por CARLOS
...
Captulo 5
Obteniendo Datos Usando Funciones de Agrupacin
Parte II - SQL
Sentencias Bsicas Restriccin y
Funciones de SQL
de SQL Ordenamiento de Datos

Obteniendo Datos
Obteniendo Datos
Usando Funciones de Sub-Consultas
desde Mltiples Tablas
Agrupacin

Manejo de los Valores


de Entrada con Manipulando Datos Creacin y
SQL*Plus Manipulacin de Tablas

Restricciones de Secuencias, Indices y


Vistas
Integridad Sinnimos
Objetivos
Identificar las funciones de agrupacin disponibles
Describir el uso de las funciones de agrupacin
Agrupar datos usando la clusula GROUP BY
Incluir o excluir filas agrupadas usando la clusula
HAVING
Qu son las Funciones de
Agrupacin?
Las funciones de agrupacin operan sobre conjuntos
de filas para dar un resultado por grupo

EMPLEADOS

COD NOMBRE APELLIDO SALARIO ...


-------------------------------------------
5 JUAN PEREZ 500 MIN(SALARIO)
7 MARIA SILEZ 350 Salario Mnimo ------------
9 RICARDO QUIROGA 120 de la tabla 120
18 JOSE VARGAS 400 EMPLEADOS
14 JIMENA TORRICO 350
...
Tipos de Funciones de Agrupacin
Funcin Descripcin
AVG([DISTINCT|ALL]n) Valor promedio de n,
ignora valores nulos
COUNT({*|[DISTINCT|ALL]expr}) Cuenta el N de filas de
una columna
MAX([DISTINCT|ALL]expr) Calcula el valor mximo
de una columna
Tipos de Funciones de Agrupacin
Funcin Descripcin
MIN([DISTINCT|ALL]expr) Calcula el valor mnimo de
una columna
STDDEV([DISTINCT|ALL]n) Desviacin estndar de n,
ignora valores nulos
SUM ([DISTINCT|ALL]n) Suma los valores de n,
ignora valores nulos
VARIANCE ([DISTINCT|ALL]n) Varianza de n, ignora
valores nulos
Funciones AVG y SUM
Se pueden usar las funciones AVG y SUM para datos
numricos
SQL> SELECT AVG(salario), MAX(salario),
2 MIN(salario), SUM(salario)
3 FROM empleados;

AVG(SALARIO) MAX(SALARIO) EMPLEADOS

------------ ------------- COD NOMBRE APELLIDO SALARIO ...


-------------------------------------------
344 500 5
7
JUAN
MARIA
PEREZ
SILEZ
500
350
9 RICARDO QUIROGA 120
18 JOSE VARGAS 400
14 JIMENA TORRICO 350
MIN(SALARIO) SUM(SALARIO)
------------ -------------
120 1720
Funciones MIN y MAX
Se pueden usar las funciones MIN y MAX para
cualquier tipo de dato

SQL> SELECT MIN(fecha_nac), MAX(fecha_nac)


2 FROM empleados;

MIN(FECHA_NAC) EMPLEADOS

-------------- COD NOMBRE APELLIDO ... FECHA_NAC ...


----------------------------------------------
5 JUAN PEREZ 12-NOV-70
12-NOV-70 7 MARIA SILEZ 08-ABR-75
9 RICARDO QUIROGA 25-JUN-77
MAX(FECHA_NAC) 18
14
JOSE VARGAS
JIMENA TORRICO
19-JUN-78
01-DIC-76

--------------
19-JUN-78
Funcin COUNT
COUNT(*) devuelve el nmero de filas en una tabla.
Tiene dos formatos:
- COUNT(*) incluye nulos
- COUNT(expr) No toma en cuenta nulos
SQL> SELECT COUNT(*)
2 FROM empleados
3 WHERE suc_cod = 3;

EMPLEADOS

COD NOMBRE APELLIDO ... SUC_COD


COUNT(*) ---------------------------------------
5 JUAN PEREZ 3
--------- 7
9
MARIA SILEZ
RICARDO QUIROGA
2
7

3 14
18
JIMENA TORRICO
JOSE VARGAS
3
3
Creando Grupos de Datos
EMPLEADOS

COD ... SALARIO SUC_COD


-------------------------------
7 350 2 235
15 120 2 Salario SUC_COD AVG(SALARIO)
5 500 3 Promedio de la ----------------------
18 400 3 400 tabla 2 235
14 350 3 EMPLEADOS 3 400
21 350 3 por sucursal 5 333.33
2 350 5
333.33 7 260
17 300 5
22 350 5
9 120 7
260
11 400 7
Uso de la Clusula GROUP BY

SELECT columna, funcion_agrupacion(columna)


FROM tabla
[WHERE condicion]
[GROUP BY expresion_agrupacion]
[ORDER BY columna];

La clusula GROUP BY sirve para dividir una tabla en


grupos de filas que comparten caractersticas comunes
Uso de la Clusula GROUP BY
Todas las columnas en la lista SELECT que no estn
entre funciones de agrupacin deben de estar en la
clusula GROUP BY
SQL> SELECT suc_cod, AVG(salario)
2 FROM empleados
3 GROUP BY suc_cod;

SUC_COD AVG(SALARIO)
----------------------------
2 350
3 400
5 333.33
7 260
Uso de la Clusula HAVING
Se usa la clusula HAVING para restringir los grupos
obtenidos
- Primero las filas son agrupadas
- La funcin de agrupacin es aplicada
- Los grupos que cumplen la clusula HAVING sern mostrados

SELECT columna, funcion_agrupacion


FROM tabla
[WHERE condicion]
[GROUP BY expresion_group_by]
[HAVING condicion_agrupacion]
[ORDER BY columna];
Uso de la Clusula HAVING
SQL> SELECT suc_cod, MAX(salario)
2 FROM empleados
3 GROUP BY suc_cod
4 HAVING MAX(salario)> 370;

EMPLEADOS
SUC_COD MAX(SALARIO) COD ... SALARIO SUC_COD
--------------------- ------------------------------
7 350 2
15 120 2
3 500 5 500 3
18 400 3
7 400 14 350 3
21 350 3
2 350 5
17 300 5
22 350 5
9 120 7
11 400 7
Funciones de Agrupacin Anidadas
As como las funciones de SQL, las funciones de
agrupacin pueden ser anidadas

SQL> SELECT MAX(AVG(salario))


2 FROM empleados
3 GROUP BY suc_cod;

MAX(AVG(SALARIO))
AVG(SALARIO)
------------------- ----------------
235
400 400
333.33
260
Captulo 6
Sub-Consultas
Parte II - SQL
Sentencias Bsicas Restriccin y
Funciones de SQL
de SQL Ordenamiento de Datos

Obteniendo Datos
Obteniendo Datos
Usando Funciones de Sub-Consultas
desde Mltiples Tablas
Agrupacin

Manejo de los Valores


de Entrada con Manipulando Datos Creacin y
SQL*Plus Manipulacin de Tablas

Restricciones de Secuencias, Indices y


Vistas
Integridad Sinnimos
Objetivos
Describir que es una sub-consulta
Tipos de sub-consultas
Escribir algunos ejemplos
Sub-Consultas
Es una sentencia SELECT que esta dentro de una
clusula de otra sentencia SELECT
SELECT lista_select
FROM tabla
WHERE expr operador
(SELECT lista_select
FROM tabla);

Puede existir tanto en la clusula FROM como en la


clusula WHERE
La sub-consulta (consulta interna) se ejecuta antes de
la consulta principal
El resultado de la sub-consulta es usado por la consulta
principal (consulta externa)
Uso de una Sub-Consulta
SQL> SELECT nombre
2 FROM empleados
120
3 WHERE salario >
4 ( SELECT salario
5 FROM empleados
6 WHERE cod = 9);

NOMBRE
---------------------
JUAN
MARIA
...
Uso de una Sub-Consulta
SQL> SELECT nombre
Siempre tiene que
2 FROM empleados e, tener un alias
3 ( SELECT salario
4 FROM empleados
5 WHERE cod = 9) sueldo9
120
6 WHERE e.salario > sueldo9.salario;

NOMBRE
---------------------
JUAN
MARIA
...
Al usar una Sub-Consulta
Encerrar las sub-consultas entre parntesis
Colocar las sub-consultas del lado derecho del
operador de comparacin
No escribir la clusula ORDER BY en una sub-
consulta
Usar operadores que devuelven una fila con sub-
consultas que devuelven una fila
Usar operadores que devuelven mas de una fila con
sub-consultas que devuelven mas de una fila
Clases de Sub-Consultas
Sincrnicas
Existen columnas de la consulta principal en la sub-consulta

SELECT e.nombre, ... Existen columnas de la


FROM empleados e consulta principal
WHERE .... >
( SELECT ...
FROM sucursales
WHERE cod = e.suc_cod);
Clases de Sub-Consultas
Asincrnicas
Ambas consultas son independientes

SELECT ... Son independientes


FROM empleados
WHERE .... >
( SELECT ...
FROM sucursales
WHERE cod = 7 );
Tipos de Sub-Consultas
Sub-Consultas que devuelven una fila
Consulta Principal

Retorna
Sub Consulta JUAN

Sub-Consultas que devuelven ms de una fila


Consulta Principal

Retorna
Sub Consulta JUAN
MARIA

Sub-Consultas que devuelven ms de una columna


Consulta Principal

Retorna
JUAN 500
Sub Consulta
MARIA 350
Sub-Consultas que devuelven
una fila
Retornan solo una fila
Se pueden usar los siguientes operadores:

Operador Descripcin
= Igual a
> Mayor que
>= Mayor o igual que
< Menor que
<= Menor o igual que
<> Diferente
Ejecutando Sub-Consultas que
devuelven una fila
SQL> SELECT nombre, lugar_nac
2 FROM empleados
COCHABAMBA
3 WHERE lugar_nac =
4 ( SELECT lugar_nac
5 FROM empleados
6 WHERE cod = 9)
7 AND salario > 500
8 ( SELECT salario
9 FROM empleados
10 WHERE cod = 5);

NOMBRE LUGAR_NAC
----------------------
JUAN COCHABAMBA
Sub-Consultas que devuelven
ms de una fila
Retornan ms de una fila
Se puede usar los siguientes operadores:

Operador Descripcin
IN Igual a cualquier elemento de
una lista
ANY Compara un valor con cada
valor resultante de la sub-
consulta
ALL Compara un valor con todos
los valores resultantes de la
sub-consulta
Ejecutando Sub-Consultas que
devuelven ms de una fila
SQL> SELECT nombre, salario, suc_cod
2 FROM empleados
3 WHERE salario IN
4 ( SELECT MIN(salario)
5 FROM empleados
6 GROUP BY suc_cod);

NOMBRE SALARIO SUC_COD


----------------------------------
FERNANDO 180 1
MARCOS 150 2
VANIA 120 3
GUSTAVO 180 7
RICARDO 120 9
Ejecutando Sub-Consultas que
devuelven ms de una fila
Para los casos en que se usen los operadores ANY y
ALL, el comportamiento ser el siguiente:
WHERE a > ALL (SELECT a FROM ....) ser mas o menos
equivalente a un AND
Compara a con 5
cada uno de estos 8
Valores 9

WHERE a > ANY (SELECT a FROM ....) ser mas o menos


equivalente a un OR
Compara a con 5
cualquiera de estos 8
Valores 9
Sub-Consultas que devuelven
ms de una columna
Retornan ms de una columna

SELECT columna, columna, ...


FROM tabla
WHERE (columna, columna, ...) IN
SELECT columna, columna, ...
FROM tabla
WHERE condicion);
Ejecutando Sub-Consultas que
devuelven ms de una columna
SQL> SELECT cod, descr, costo
2 FROM videos
3 WHERE (cod, descr) IN
4 ( SELECT cod, descr
5 FROM videos
6 WHERE cat_cod = 3)
7 AND cat_cod <> 3;

COD DESCR COSTO


---------------------------------------
005 DURO DE MATAR 3
008 MAXIMA VELOCIDAD 3.5
016 TOP GUN 3
Captulo 7
Manejo de los Valores de Entrada con SQL*Plus
Parte II - SQL
Sentencias Bsicas Restriccin y
Funciones de SQL
de SQL Ordenamiento de Datos

Obteniendo Datos
Obteniendo Datos
Usando Funciones de Sub-Consultas
desde Mltiples Tablas
Agrupacin

Manejo de los Valores


de Entrada con Manipulando Datos Creacin y
SQL*Plus Manipulacin de Tablas

Restricciones de Secuencias, Indices y


Vistas
Integridad Sinnimos
Objetivos
Escribir consultas que requieren una variable de
entrada
Usar algunos caracteres especiales para la
sustitucin de variables
Definir variables de usuario
Sustitucin de Variables
Se usa la sustitucin de variables en SQL*Plus para
almacenar temporalmente valores
Se puede sustituir variables de la siguiente manera:
- Ampersand (&)
- Doble Ampersand (&&)
- Comandos DEFINE y ACCEPT
Uso de & para la Sustitucin de
Variables
Se usa el ampersand(&) antecediendo a una
variable para permitir al usuario el ingreso de una
valor para esa variable

SQL> SELECT nombre, apellido, salario


2 FROM empleados
3 WHERE cod = &codigo_emp;

Enter value for codigo_emp: 7


NOMBRE APELLIDO SALARIO
-----------------------------------
MARIA SILEZ 350
Sustitucin de Variables con
valores de tipo Fecha y Caracter
Se tiene que usar comillas simples para sustituir
valores de tipo fecha y caracter

SQL> SELECT nombre, apellido, salario


2 FROM empleados
3 WHERE lugar_nac = &lugar;

Enter value for lugar: COCHABAMBA


NOMBRE APELLIDO SALARIO
-----------------------------------
JUAN PEREZ 500
RICARDO QUIROGA 120
Especificando nombres de
columnas, expresiones y textos
en tiempo de ejecucin
Se puede usar la sustitucin de variables para
especificar:
- Condicin WHERE
- Clusula ORDER BY
- Expresiones de Columnas
- Nombres de Tablas
- Sentencia SELECT entera
Especificando nombres de
columnas, expresiones y textos
en tiempo de ejecucin
SQL> SELECT nombre, apellido, lugar_nac, &columna
2 FROM empleados
3 WHERE &condicion
4 ORDER BY &orden_columna;

Enter value for columna: salario


Enter value for condicion: salario >= 500
Enter value for orden_columna: nombre
NOMBRE APELLIDO LUGAR_NAC SALARIO
---------------------------------------------
JUAN PEREZ COCHABAMBA 500
OSCAR VARGAS LA PAZ 800
...
Uso de && para la Sustitucin
de Variables
Se usa el doble ampersand(&&) si se quiere reusar
el valor de una variable sin necesidad de volver a
escribirlo nuevamente
SQL> SELECT nombre, apellido, &&columna
2 FROM empleados
3 ORDER BY &columna;

Enter value for columna: salario


NOMBRE APELLIDO SALARIO
-----------------------------------
RICARDO QUIROGA 120
MARIA SILEZ 350
JUAN PEREZ 500
...
Definicin de Variables de
Usuario
Se puede predefinir variables usando uno de los
siguientes comandos:
- DEFINE: crea una variable de usuario de tipo
CHAR
- ACCEPT: lee una lnea de entrada de datos del
usuario y lo almacena en una variable
Si se necesita predefinir una variable que incluye
espacios, se debe de encerrar el valor entre comillas
simples cuando se use el comando DEFINE
Definicin de Variables de
Usuario
Comando Descripcin
DEFINE variable = valor Crea una variable de usuario de
tipo CHAR y le asigna el valor
DEFINE variable Muestra la variable, su valor y
su tipo de dato
DEFINE Muestra todas las variables de
usuario con su valor y su tipo de
dato
ACCEPT Lee una lnea de entrada de
datos del usuario y lo almacena
en una variable
Comando ACCEPT
Crea una entrada de datos personalizada cuando el
usuario ingrese el valor a una variable
Oculta el ingreso del valor a una variable por razones
de seguridad

ACCEPT variable [tipo_dato] [FORMAT formato]


[PROMPT texto] [HIDE]
Comando ACCEPT
ACCEPT columna PROMPT Ingrese el Lugar de Nacimiento:
SELECT nombre, apellido, lugar_nac
FROM empleados
WHERE lugar_nac = UPPER(&columna);
/

Ingrese el Lugar de Nacimiento: cochabamba


NOMBRE APELLIDO LUGAR_NAC
--------------------------------------
JUAN PEREZ COCHABAMBA
RICARDO QUIROGA COCHABAMBA
...
Comandos DEFINE y UNDEFINE
Una variable se mantiene definida hasta que se haga
lo siguiente:
- Se use el comando UNDEFINE para limpiarla
- Se salga de SQL*Plus
Se puede verificar los cambios con el comando
DEFINE
Para definir variables en cada sesin, hay que
modificar el archivo login.sql para que las variables
sean creadas desde el inicio
Usando el Comando DEFINE
Crear una variable para mantener el lugar de
nacimiento:
SQL> DEFINE lugar = cochabamba
SQL> DEFINE

DEFINE LUGAR = cochabamba

Usar esa variable como cualquier otra variable


SQL> SELECT *
2 FROM empleados
3 WHERE lugar_nac = UPPER(&lugar);
Usando el Comando UNDEFINE
Para borrar una variable, se usa el comando
UNDEFINE

SQL> UNDEFINE lugar


SQL> DEFINE

symbol lugar is UNDEFINED


Captulo 8
Manipulando Datos
Parte II - SQL
Sentencias Bsicas Restriccin y
Funciones de SQL
de SQL Ordenamiento de Datos

Obteniendo Datos
Obteniendo Datos
Usando Funciones de Sub-Consultas
desde Mltiples Tablas
Agrupacin

Manejo de los Valores


de Entrada con Manipulando Datos Creacin y
SQL*Plus Manipulacin de Tablas

Restricciones de Secuencias, Indices y


Vistas
Integridad Sinnimos
Objetivos
Describir cada sentencia DML
Insertar filas en una tabla
Actualizar las filas de una tabla
Eliminar filas en una tabla
Control de transacciones
Lenguaje de Manipulacin de Datos
(DML)
Las sentencias DML permiten:
- Insertar nuevas filas en una tabla
- Modificar datos existentes en una tabla
- Eliminar datos existentes en una tabla

Una transaccin consiste en una coleccin de


sentencias DML que forman una unidad lgica de
trabajo
La Sentencia INSERT
Para aadir nuevas filas en una tabla se debe de
usar la sentencia INSERT

INSERT INTO tabla [(columna [, columna...])]


VALUES (valor [, valor...]);

Solo una fila es insertada cuando se ejecuta esta


sentencia con esta sintaxis
Uso de la Sentencia INSERT
Se inserta una nueva fila conteniendo valores para
cada columna
La lista de valores a insertar por defecto esta en el
orden de las columnas de la tabla
Es opcional la lista de las columnas de la tabla en la
sentencia INSERT
Se tiene que encerrar entre comillas simples los
valores de tipo caracter o fecha
Uso de la Sentencia INSERT
SQL> INSERT INTO clientes(cod, ci, nombre, apellido,
2 telefono, cli_cod)
3 VALUES (12,4578213,GUSTAVO,SOTO,257841,08);

SQL> INSERT INTO clientes


2 VALUES (12,4578213,GUSTAVO,SOTO,257841,08);

SQL> INSERT INTO clientes(cod, apellido, nombre, ci,


2 cli_cod, telefono)
3 VALUES (12,SOTO,GUSTAVO,4578213,08,257841);
Insertando filas con Valores Nulos
Mtodo Implcito: se omite la columna de la lista de
columnas

SQL> INSERT INTO clientes(cod,ci,nombre,apellido)


2 VALUES (12,4578213,GUSTAVO,SOTO);

Mtodo Explcito: se especifica la palabra NULL

SQL> INSERT INTO clientes(cod,ci,nombre,apellido,


2 telefono, cli_cod)
3 VALUES(12,4578213,GUSTAVO,SOTO,NULL,NULL);
Insertando Valores usando
Sustitucin de Variables
SQL> INSERT INTO clientes(cod, ci, nombre, apellido,
2 telefono, cli_cod)
3 VALUES (&codigo,&ci,&nombre,&apellido,
4 &fono,&cliente_autorizador);

Enter value for codigo: 19


Enter value for ci: 4875321
Enter value for nombre: MARCELO
Enter value for apellido: SANCHEZ
Enter value for fono: 268874
Enter value for cliente_autorizador: 12

1 row created.
La Sentencia UPDATE
Para modificar las filas de una tabla se usa la
sentencia UPDATE

UPDATE tabla
SET columna = valor [, columna = valor]
[WHERE condicion];

Se actualiza mas de una fila a la vez, si es que fuese


necesario
Uso de la Sentencia UPDATE
Una fila especfica o varias filas pueden ser
modificadas cuando se especifica la clusula WHERE

SQL> UDPATE empleados


2 SET suc_cod = 7
3 WHERE cod = 5;

Todas las filas de la tabla son modificadas si se omite


la clusula WHERE
SQL> UDPATE empleados
2 SET suc_cod = 7;
La Sentencia DELETE
Para eliminar las filas existentes en una tabla se usa
la sentencia DELETE

DELETE [FROM] tabla


[WHERE condicion];
Uso de la Sentencia DELETE
Una fila especfica o varias filas pueden ser eliminadas
cuando se especifica la clusula WHERE

SQL> DELETE FROM empleados


2 WHERE cod = 5;

Todas las filas de la tabla son eliminadas si se omite la


clusula WHERE

SQL> DELETE FROM empleados;


Transacciones en la Base de Datos

Consiste en una de las siguientes sentencias:


- Sentencias DML que realizan cambios en los datos
- Una sentencia DDL
- Una sentencia DCL
Transacciones en la Base de Datos
Comienza cuando la primera sentencia SQL
ejecutable es ejecutada
Termina con uno de los siguientes eventos:
- Se ejecuta un COMMIT o ROLLBACK
- Sentencias DDL o DCL son ejecutadas (commit automtico)
- El usuario sale
- El sistema falle
Ventajas de las Sentencias
COMMIT y ROLLBACK
Aseguran la consistencia de los datos
Se pueden ver los cambios en los datos antes de
volverlos permanentes
Control de Transacciones
Sentencia Descripcin
COMMIT Termina la transaccin actual y hace
todos los cambios en los datos
permanentes
SAVEPOINT name Marca un savepoint dentro la
transaccin actual
ROLLBACK [TO ROLLBACK termina la transaccin
SAVEPOINT name] actual y deshace todos los cambios
realizados en los datos; ROLLBACK
TO SAVEPOINT name deshace todos
los cambios realizados en los datos
pero solo hasta el savepoint name
Control de Transacciones
Transaccin

INSERT UPDATE INSERT DELETE

COMM IT Savepoint A Savepoint B

ROLLBACK to Savepoint B

ROLLBACK to Savepoint A

ROLLBACK
Captulo 9
Creacin y Manipulacin de Tablas
Parte II - SQL
Sentencias Bsicas Restriccin y
Funciones de SQL
de SQL Ordenamiento de Datos

Obteniendo Datos
Obteniendo Datos
Usando Funciones de Sub-Consultas
desde Mltiples Tablas
Agrupacin

Manejo de los Valores


de Entrada con Manipulando Datos Creacin y
SQL*Plus Manipulacin de Tablas

Restricciones de Secuencias, Indices y


Vistas
Integridad Sinnimos
Objetivos
Describir los objetos ms importantes de la Base de
Datos
Crear tablas
Modificar la estructura de las tablas
Eliminar, renombrar y truncar tablas
Objetos de la Base de Datos
Objeto Descripcin
Tabla Unidad bsica de almacenamiento
compuesta por filas y columnas

Vista Unidad lgica que representa un


subconjunto de datos de una o ms tablas
Secuencia Objeto que genera nmeros en secuencia
que pueden ser usados por columnas de las
tablas
Indice Objeto que permite mejorar el rendimiento
de algunas consultas
Sinnimos Permite dar nombres alternativos a objetos
Sentencia CREATE TABLE
Para crear una tabla se usa la sentencia CREATE
TABLE
Para usar esta sentencia se debe tener:
- Privilegios para crear tablas
- Un rea de almacenamiento

CREATE TABLE [esquema.] tabla


(columna tipo_dato [DEFAULT expr] [,...]);

Se debe de especificar:
- Nombre de la tabla
- Nombre de columna, tipo de dato de la columna y longitud de
la columna
Uso de la Sentencia CREATE TABLE
Creacin de una tabla

CREATE TABLE empleados (


cod VARCHAR2 (6) NOT NULL,
nombre VARCHAR2 (30) NOT NULL,
apellido VARCHAR2 (30) NOT NULL,
salario NUMBER (8,2) NOT NULL,
fecha_nac DATE,
lugar_nac VARCHAR2 (20),
suc_cod VARCHAR2 (6) NOT NULL );

Confirmacin de la creacin de la tabla

SQL> DESCRIBE empleados;


Tablas en la Base de Datos Oracle
Tablas de Usuario (User Tables)
- Coleccin de tablas creadas y mantenidas por el usuario
- Contiene informacin del usuario

Diccionario de Datos (Data Dictionary)


- Coleccin de tablas creadas y mantenidas por el servidor
Oracle
- Contiene informacin de la base de datos
Sentencia ALTER TABLE
Se puede usar la sentencia ALTER TABLE para:
- Aadir una nueva columna
- Modificar una columna existente

ALTER TABLE tabla


ADD (columna tipo_dato [DEFAULT expr]
[, columna tipo_dato]...);

ALTER TABLE tabla


MODIFY (columna tipo_dato [DEFAULT expr]
[, columna tipo_dato]...);
Aadiendo una Columna
Se usa la clusula ADD para aadir columnas

SQL> ALTER TABLE empleados


2 ADD (est_civil VARCHAR2(3));

La nueva columna llegar a ser la ultima columna de la


tabla
Se puede aadir o modificar columnas, pero no se
puede eliminarlas de la tabla
Modificando una Columna
Se puede cambiar el tipo de dato de una columna,
longitud y valor por defecto usando la clusula
MODIFY

SQL> ALTER TABLE empleados


2 MODIFY (nombre VARCHAR2(25),
3 apellido VARCHAR2(25));

Un cambio en los valores por defecto afectar solo a


las inserciones posteriores que se hagan en la tabla
Sentencia DROP TABLE
Cuando se quiera eliminar una tabla se usa la
sentencia DROP TABLE

DROP TABLE tabla;

Todos los datos y la estructura de la tabla es borrada


Cualquier transaccin pendiente es terminada
(commit)
Todos los ndices son borrados
No se puede hacer un ROLLBACK a esta sentencia
Cambio de Nombre a un Objeto
Para cambiar el nombre a una tabla, vista, secuencia o
sinnimo se ejecuta la sentencia RENAME

RENAME antiguo_nombre TO nuevo_nombre;

Se debe ser el propietario de ese objeto


Sentencia TRUNCATE TABLE
Con esta sentencia se puede:
- Remover todas las filas de una tabla
- Liberar el espacio de almacenamiento usado por una tabla

TRUNCATE TABLE tabla;

No se puede hacer un ROLLBACK de las filas


removidas cuando se use TRUNCATE
Para remover todas las filas de una tabla se puede
usar tambin la sentencia DELETE
Captulo 10
Restricciones de Integridad
Parte II - SQL
Sentencias Bsicas Restriccin y
Funciones de SQL
de SQL Ordenamiento de Datos

Obteniendo Datos
Obteniendo Datos
Usando Funciones de Sub-Consultas
desde Mltiples Tablas
Agrupacin

Manejo de los Valores


de Entrada con Manipulando Datos Creacin y
SQL*Plus Manipulacin de Tablas

Restricciones de Secuencias, Indices y


Vistas
Integridad Sinnimos
Objetivos
Describir restricciones de integridad
Crear y mantener restricciones de integridad
Restricciones de Integridad
Las restricciones de integridad (constraints) aseguran
la consistencia de los datos a nivel de las tablas
Previenen la eliminacin de una tabla si existen
dependencias
Las siguientes restricciones de integridad son validas
en Oracle:
- NOT NULL
- UNIQUE
- PRIMARY KEY
- FOREIGN KEY
- CHECK
Tipos de Restricciones de
Integridad
Restriccin Descripcin
NOT NULL Especifica que para una columna no contenga
valores nulos
UNIQUE Especifica que para columna o combinacin de
columnas sus valores sean nicos para todas
las filas de la tabla
PRIMARY KEY Identifica nicamente a cada fila de la tabla
FOREIGN KEY Establece y asegura una relacin de llave
fornea entre una columna y la llave primaria
de una tabla referenciada
CHECK Especifica una condicin que debe de ser
verdadera
Creacin de una Restriccin de
Integridad
CREATE TABLE [esquema.] tabla
(columna tipo_dato [DEFAULT expr]
[constraint_columna],
...
[constraint_tabla] [,...]);

CREATE TABLE empleados (


cod VARCHAR2 (6) NOT NULL,
nombre VARCHAR2 (30) NOT NULL,
...
suc_cod VARCHAR2 (6) NOT NULL,
CONSTRAINT emp_pk
PRIMARY KEY (cod));
Creacin de una Restriccin de
Integridad
Restriccin de Integridad a nivel de columna

columna [CONSTRAINT nombre_constraint] tipo_constraint,

Restriccin de Integridad a nivel de tabla

columna, ...
[CONSTRAINT nombre_constraint] tipo_constraint
(columna, ...),
Restriccin de Integridad NOT NULL
Asegura que valores nulos no sean ingresados en las
columnas

EMPLEADOS
COD NOMBRE APELLIDO LUGAR_NAC ... SUC_COD
5 JUAN PEREZ COCHABAMBA 3
7 MARIA SILEZ LA PAZ 2
9 RICARDO QUIROGA COCHABAMBA 7
90 OSCAR VARGAS 7
...

Restriccin NOT NULL (las filas Ausencia de la restriccin NOT NULL Restriccin NOT
no pueden contener un valor (cualquier fila puede contener un NULL
nulo para esta columna) valor nulo para esta columna)
Restriccin de Integridad NOT NULL
Definida solo para nivel de columnas

SQL> CREATE TABLE empleados (


2 cod VARCHAR2 (6) NOT NULL,
3 nombre VARCHAR2 (30) NOT NULL,
4 apellido VARCHAR2 (30) NOT NULL,
5 salario NUMBER (8,2) NOT NULL,
6 fecha_nac DATE,
7 lugar_nac VARCHAR2 (20),
8 suc_cod VARCHAR2 (6) NOT NULL );
Restriccin de Integridad UNIQUE
Restriccin UNIQUE
CATEGORIAS
COD DESCR
1 DRAMA
2 ACCION
3 COMEDIA
4 TERROR
5 SUSPENSO

INSER INTO
6 ACCION No permitido (ACCION ya existe)
7 INFANTIL
Permitido
Restriccin de Integridad UNIQUE

Definida para ambos niveles, tanto a nivel de tablas


como tambin a nivel de columnas

SQL> CREATE TABLE categorias (


2 cod VARCHAR2 (6) NOT NULL,
3 descr VARCHAR2 (100) NOT NULL,
4 CONSTRAINT cat_descr_uk UNIQUE(descr));
Restriccin de Integridad
PRIMARY KEY
CATEGORIAS
PRIMARY KEY

COD DESCR
1 DRAMA
2 ACCION
3 COMEDIA
4 TERROR
5 SUSPENSO

INSER INTO
2 CIENCIA FICCION
No permitido (el cdigo 20 ya existe)

INFANTIL No permitido (el cdigo es nulo)


Restriccin de Integridad
PRIMARY KEY
Definida para ambos niveles, tanto a nivel de tablas
como tambin a nivel de columnas

SQL> CREATE TABLE categorias (


2 cod VARCHAR2 (6) NOT NULL,
3 descr VARCHAR2 (100) NOT NULL,
4 CONSTRAINT cat_descr_uk UNIQUE(descr)
5 CONSTRAINT cat_cod_pk PRIMARY KEY(cod));
Restriccin de Integridad
FOREIGN KEY
SUCURSALES
PRIMARY KEY COD DESCR DIRECCION ...
2 NORTE C. VENUS 28
3 CENTRAL C. BAPTISTA 145
EMPLEADOS
COD NOMBRE APELLIDO LUGAR_NAC ... SUC_COD FOREIGN KEY
5 JUAN PEREZ COCHABAMBA 3
7 MARIA SILEZ LA PAZ 2
...
No permitido
(la sucursal 5
INSER INTO no existe en
14 JOSE LOPEZ LA PAZ ... 5 sucursales)

15 JAIME CACERES COCHABAMBA ... 2 Permitido


Restriccin de Integridad
FOREIGN KEY
Definida para ambos niveles, tanto a nivel de tablas
como tambin a nivel de columnas

SQL> CREATE TABLE empleados (


2 cod VARCHAR2 (6) NOT NULL,
3 nombre VARCHAR2 (30) NOT NULL,
4 apellido VARCHAR2 (30) NOT NULL,
5 salario NUMBER (8,2) NOT NULL,
6 fecha_nac DATE,
7 lugar_nac VARCHAR2 (20),
8 suc_cod VARCHAR2 (6) NOT NULL,
9 CONSTRAINT emp_suc_fk FOREIGN KEY (suc_cod)
10 REFERENCES sucursales (cod));
Restriccin de Integridad
FOREIGN KEY
FOREIGN KEY
Define la columna en la tabla hija
REFERENCES
Identifica la tabla y columna en la tabla maestro
ON DELETE CASCADE
Permite la eliminacin en la tabla maestro y
eliminacin de las filas dependientes en la tabla hija
Restriccin de Integridad
CHECK
Define una condicin que cada fila debe satisfacer

..., cod VARCHAR2(6) NOT NULL,


CONSTRAINT emp_cod_ck
CHECK (cod BEWTEEN 1 AND 100),...
Adicionar Restricciones de
Integridad
ALTER TABLE tabla
ADD [CONSTRAINT constraint] tipo (columna);

Se puede adicionar o eliminar, pero no modificar una


restriccin de integridad
Se puede habilitar o deshabilitar restricciones de
integridad
Se puede adicionar la restriccin NOT NULL pero
usando la clusula MODIFY
Eliminar Restricciones de
Integridad
ALTER TABLE tabla
DROP PRIMARY KEY | UNIQUE (columna) |
CONSTRAINT constraint [CASCADE]);

SQL> ALTER TABLE sucursales


2 DROP PRIMARY KEY CASCADE;

SQL> ALTER TABLE empleados


2 DROP CONSTRAINT emp_suc_fk;
Deshabilitar Restricciones de
Integridad
ALTER TABLE tabla
DISABLE CONSTRAINT constraint [CASCADE];

Se ejecuta la clusula DISABLE de la sentencia


ALTER TABLE para desactivar una restriccin de
integridad
Se usa la opcin CASCADE para deshabilitar
restricciones de integridad dependientes
Habilitar Restricciones de
Integridad
ALTER TABLE tabla
ENABLE CONSTRAINT constraint;

Para habilitar una restriccin de integridad


deshabilitada en la definicin de una tabla se usa la
clusula ENABLE
Un ndice UNIQUE o PRIMARY KEY es
automticamente creado si se habilita una restriccin
de integridad UNIQUE o PRIMARY KEY
Visualizar Objetos de la Base
de Datos
Se pueden mostrar los objetos creados en la Base de
Datos accediendo a las tablas del diccionario de
datos:
- USER_TABLES
Muestra las tablas de un usuario
- USER_OBJECTS
Muestra los distintos tipos de objetos de un usuario
- USER_CATALOG
Muestra las tablas, vistas, sinnimos y secuencias de un
usuario
- USER_CONSTRAINTS
Muestra las restricciones de integridad de un usuario
Visualizar Restricciones de
Integridad
La consulta a la tabla USER_CONSTRAINTS muestra
todas las definiciones y nombres de restricciones de
integridad

SQL> SELECT constraint_name, constraint_type,


2 search_condition
3 FROM user_constraints
4 WHERE table_name = EMPLEADOS;

CONSTRAINT_NAME CONSTRAINT_TYPE SEARCH_CONDITION


-----------------------------------------------------
SYS_C00674 C COD IS NOT NULL
SYS_C00675 C NOMBRE IS NOT NULL
EMP_SUC_FK R
Captulo 11
Vistas
Parte II - SQL
Sentencias Bsicas Restriccin y
Funciones de SQL
de SQL Ordenamiento de Datos

Obteniendo Datos
Obteniendo Datos
Usando Funciones de Sub-Consultas
desde Mltiples Tablas
Agrupacin

Manejo de los Valores


de Entrada con Manipulando Datos Creacin y
SQL*Plus Manipulacin de Tablas

Restricciones de Secuencias, Indices y


Vistas
Integridad Sinnimos
Objetivos
Definir una vista
Crear vistas
Recuperar datos a travs de una vista
Modificar vistas
Eliminar una vista
Qu es una Vista?
TABLA EMPLEADOS
COD NOMBRE APELLIDO LUGAR_NAC ... SUC_COD
5 JUAN PEREZ COCHABAMBA 3
7 MARIA SILEZ LA PAZ 2
9 RICARDO QUIROGA COCHABAMBA 7

90 OSCAR VARGAS 7
...

VISTA EMPLEADOSVI

COD NOMBRE APELLIDO


9 RICARDO QUIROGA

90 OSCAR VARGAS

Es una tabla lgica basada en una tabla u otra vista


Porqu usar Vistas?
Restringir el acceso a la Base de Datos
Hacer las consultas complejas mas sencillas
Permitir la independencia de datos
Presentar diferentes vistas para los mismos datos
Vistas Simples y Complejas

Caracterstica Vistas Simples Vistas Complejas


Numero de Tablas Una Una o mas
Contienen Funciones No Si
Contienen Grupos de Datos No Si
DML a travs de una vista Si Nunca
Creacin de Vistas
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW vista
[(alias[, alias]...)]
AS sub-consulta
[WITH CHECK OPTION [CONSTRAINT constraint]]
[WITH READ ONLY]

Se puede crear una vista usando la sentencia


CREATE VIEW
La sub-consulta puede contener sentencias SELECT
complejas
La sub-consulta no puede contener clusulas
ORDER BY
Creacin de Vistas
SQL> CREATE VIEW empleadosvi
2 AS SELECT cod, nombre, apellido
3 FROM empleados
4 WHERE suc_cod = 7;

SQL> CREATE VIEW empleadosvi2


2 AS SELECT cod CODIGO, nombre NOMBRE_EMP,
3 apellido APELLIDO_EMP
4 FROM empleados
5 WHERE suc_cod = 3;
Modificacin de Vistas
Se puede modificar una vista usando el comando
CREATE OR REPLACE VIEW
Los alias de columnas en la clusula CREATE VIEW
estarn listados en el mismo orden de las columnas de
la sub-consulta

SQL> CREATE OR REPLACE VIEW empleadosvi2


2 (codigo, empleado_nombre, empleado_apellido)
3 AS SELECT cod, nombre, apellido
4 FROM empleados
5 WHERE suc_cod = 7;
Creacin de Vistas
Complejas
Una vista compleja contiene funciones de agrupacin
para mostrar los valores de dos tablas

SQL> CREATE VIEW emp_sucursales_vi


2 (codigo, sucursal, salario_min, salario_max)
3 AS SELECT e.suc_cod, s.descr, MIN(e.salario),
4 MAX(e.salario)
5 FROM empleados e, sucursales s
6 WHERE e.suc_cod = s.cod
7 GROUP BY e.suc_cod, s.descr;
Reglas para realizar operaciones
DML en Vistas
Se pueden realizar operaciones DML sobre vistas
simples
No se pueden eliminar filas si la vista contiene lo
siguiente:
- Funciones de agrupacin
- Una clusula GROUP
- La palabra DISTINCT
Reglas para realizar operaciones
DML en Vistas
No se pueden modificar los datos en una vista si sta
contiene lo siguiente:
- Funciones de agrupacin
- Una clusula GROUP
- La palabra DISTINCT
- Columnas definidas por expresiones
Reglas para realizar operaciones
DML en Vistas
No se pueden aadir datos si existen:
- Funciones de agrupacin
- Una clusula GROUP
- La palabra DISTINCT
- Columnas definidas por expresiones
- Columnas NOT NULL en las tablas base que no hayan sido
seleccionadas por la vista
Clusula WITH CHECK OPTION
Se puede asegurar que operaciones DML con la vista
estn dentro el dominio de sta usando la clusula
WITH CHECK OPTION
SQL> CREATE OR REPLACE VIEW empvi7
2 AS SELECT *
3 FROM empleados
4 WHERE suc_cod = 7
5 WITH CHECK OPTION CONSTRAINT empvi7_ck;

SQL> UPDATE empvi7


2 SET suc_cod = 3
3 WHERE cod = 9;

ERROR at line 1:
ORA-01402: VIEW CHECK OPTION where-clause violation
Denegando Operaciones DML
Se puede asegurar que operaciones DML no ocurran
usando la opcin WITH READ ONLY
Cualquier intento de realizar una operacin DML llevar
a un mensaje del Servidor Oracle

SQL> CREATE OR REPLACE VIEW empvi7


2 AS SELECT cod, nombre, apellido, salario
3 FROM empleados
4 WHERE suc_cod = 7
5 WITH READ ONLY;
Eliminacin de Vistas
Al eliminar una vista no se pierden los datos porque la
vista esta basada en las tablas de la Base de Datos

DROP VIEW vista


Captulo 12
Secuencias, ndices y Sinnimos
Parte II - SQL
Sentencias Bsicas Restriccin y
Funciones de SQL
de SQL Ordenamiento de Datos

Obteniendo Datos
Obteniendo Datos
Usando Funciones de Sub-Consultas
desde Mltiples Tablas
Agrupacin

Manejo de los Valores


de Entrada con Manipulando Datos Creacin y
SQL*Plus Manipulacin de Tablas

Restricciones de Secuencias, Indices y


Vistas
Integridad Sinnimos
Objetivos
Definir secuencias, ndices y sinnimos
Crear, mantener y usar secuencias
Crear, mantener y usar ndices
Crear, mantener y usar sinnimos
Qu es una Secuencia?
Genera automticamente nmeros nicos
Es un objeto compartible
Es usado generalmente para crear valores de llaves
primarias
Reduce cdigo de la aplicacin
Acelera la eficiencia de acceso a los valores de la
secuencia cuando es cargada en la memoria cache
Sentencia CREATE SEQUENCE
Define una secuencia para generar automticamente
nmeros secuenciales

CREATE SEQUENCE secuencia


[INCREMENT BY n]
[START WITH n]
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE n | NOCACHE}];
Sentencia CREATE SEQUENCE
SQL> CREATE SEQUENCE sec_emp
2 INCREMENT BY 1
3 START WITH 91
4 MAXVALUE 100
5 NOCACHE
6 NOCYCLE;

Se puede verificar los valores de secuencia en la tabla


del diccionario de datos USER_SEQUENCES
SQL> SELECT sequence_name, min_value, max_value,
2 increment_by, last_number
3 FROM user_sequences;

La columna LAST_NUMBER muestra el siguiente


nmero de secuencia disponible
Pseudocolumnas NEXTVAL y
CURRVAL
NEXTVAL retorna el siguiente valor de secuencia
disponible
- El valor que retorna es nico cada vez que ste es
referenciado por diferentes usuarios

CURRVAL obtiene el valor de secuencia actual


- NEXTVAL debe de ser declarado para la secuencia antes de
que CURRVAL contenga un valor
Reglas para usar NEXTVAL y
CURRVAL
Se puede usar NEXTVAL y CURRVAL en:
- La lista SELECT de una sentencia SELECT que no es
parte de una sub-consulta
- La lista SELECT de una sub-consulta en una sentencia
INSERT
- La clusula VALUES de una sentencia INSERT
- La clusula SET de una sentencia UPDATE
Reglas para usar NEXTVAL y
CURRVAL
No se puede usar NEXTVAL y CURRVAL en:
- La lista SELECT de una vista
- Una sentencia SELECT con la palabra DISTINCT
- Una sentencia SELECT con las clusulas GROUP BY,
HAVING o ORDER BY
- Una sub-consulta en sentencias SELECT, DELETE o
UPDATE
- Una expresin DEFAULT en las sentencias CREATE
TABLE o ALTER TABLE
Sentencia ALTER SEQUENCE
Permite cambiar el valor de incremento, valor mximo,
valor mnimo, opcin cycle u opcin cache

ALTER SEQUENCE secuencia


[INCREMENT BY n]
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE n | NOCACHE}];
Sentencia ALTER SEQUENCE
Para modificar una secuencia se debe ser el dueo o
tener privilegios ALTER para la secuencia
Solo los futuros nmeros secuenciales sern afectados
La secuencia debe ser eliminada o re-creada para
empezar la secuencia en un numero diferente
Algunas validaciones son realizadas

SQL>ALTER SEQUENCE sec_emp


2 INCREMENT BY 1
3 MAXVALUE 99999
4 NOCACHE
5 NOCYCLE;
Sentencia DROP SEQUENCE
Para eliminar una secuencia del diccionario de datos se
usa la sentencia DROP SEQUENCE
Una vez eliminada, la secuencia no podr ser
referenciada

DROP SEQUENCE secuencia

SQL> DROP SEQUENCE sec_emp;


Qu es un Indice?
Es un objeto esquema
Es usado por el Servidor Oracle para acelerar la
recuperacin de filas usando un puntero
Es independiente de la tabla en la que esta indexado
Es usado y mantenido automticamente por el
Servidor Oracle
Cmo son creados los Indices?
Automticamente
Un ndice nico es creado automticamente cuando se
define restricciones de PRIMARY KEY o UNIQUE en la
definicin de una tabla

Manualmente
Los usuarios pueden crear ndices no nicos en las
columnas para acelerar el tiempo de acceso a las filas
Sentencia CREATE INDEX
Se puede crear un ndice para una o ms columnas

CREATE INDEX indice


ON tabla (columna [, columna]...);

SQL> CREATE INDEX emp_suc_idx


2 ON empleados(suc_cod);

La vista del diccionario de datos USER_INDEXES


contiene el nombre del ndice y si ste es nico
La vista USER_IND_COLUMNS contiene el nombre del
ndice, el nombre de la tabla y el nombre de la columna
Cuando crear un Indice
La columna es usada frecuentemente en la clusula
WHERE o en una condicin de join
La columna contiene un amplio rango de valores
La columna contiene un nmero grande de valores null
Dos o ms columnas son usadas frecuentemente juntas
en la clusula WHERE o en una condicin join
La tabla es grande y se espera que la mayora de las
consultas recuperen menos que un 2-4% de las filas
Cuando no crear un Indice
La tabla es pequea
Las columnas no son a menudo usadas como una
condicin de consulta
La mayora de las consultas esperadas recuperen mas
que un 2-4% de las filas
La tabla es actualizada frecuentemente
Sentencia DROP INDEX
Elimina un ndice del diccionario de datos
Para eliminar un ndice se debe de ser el dueo del
ndice o tener privilegios DROP ANY INDEX

DROP INDEX indice;

SQL> DROP INDEX emp_suc_idx;


Sinnimos
Se puede simplificar el acceso a objetos creando un
sinnimo (otro nombre para un objeto)
Se puede hacer referencia a una tabla que es de otro
usuario
Reduce los nombres de objetos largos

CREATE [PUBLIC] SYNONYM sinonimo


FOR objeto;
Creacin y Eliminacin de
Sinnimos
Crear un nombre corto para la vista
EMP_SUCURSALES_VI

SQL> CREATE SYNONYM suc_vi


2 FOR emp_sucursales_vi;

Eliminar el sinnimo

SQL> DROP SYNONYM suc_vi;

S-ar putea să vă placă și