Você está na página 1de 468

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa

s
a
h
rg)
o

Oracle Database: Conceptos


sa ide
e
d
uI
Fundamentales
G
royde SQL
t
p
en
@
d
n
u
t
io
S
c
a
s
i
th del Alumno
und sI e Gua
fVolumen
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t
D64258CS10
Edicin 1.0
Enero de 2010
D73590

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa
Autores

Copyright 2010, Oracle y/o sus filiales. Todos los derechos reservados.

Salome Clement
Brian Pottle
Puja Singh

Renuncia

Colaboradores y
Revisores Tcnicos
Anjulaponni Azhagulekshmi
Clair Bennett
Zarko Cesljas
Yanti Chang
Gerlinde Frenzen
Steve Friedberg
Joel Goodman
Nancy Greenberg
Pedro Neves
Manish Pawar
Surya Rekha
Helen Robertson
Lauran Serhal
Hilda Simon
Tulika Srivastava

Este documento contiene informacin propiedad de Oracle Corporation y se


encuentra protegido por las leyes de copyright, as como por otras leyes de
propiedad intelectual. El usuario podr realizar copias o imprimir este documento
para su uso exclusivo en los cursos de formacin de Oracle. Este documento no
podr ser modificado ni alterado en modo alguno. Salvo que la legislacin de
copyright lo considere un uso legtimo, no podr utilizar, compartir, descargar, cargar,
copiar, imprimir, mostrar, representar, reproducir, publicar, conceder licencias, enviar,
transmitir ni distribuir este documento total ni parcialmente sin autorizacin expresa
por parte de Oracle.
La informacin contenida en este documento est sujeta a cambio sin previo aviso.
Si detecta cualquier problema en el documento, le agradeceremos que nos lo
comunique por escrito a: Oracle University, 500 Oracle Parkway, Redwood Shores,
California 94065 USA. Oracle Corporation no garantiza que este documento est
exento de errores.
Aviso sobre Restriccin de Derechos
Si esta documentacin se entrega al Gobierno de los EE. UU. o a cualquier entidad
que la utilice en nombre del Gobierno de los EE. UU., se aplicar la siguiente
disposicin:

s
a
h
rg)
o

sa ide
e
d
Redactor
roy nt Gu
p
Amitha Narayan
n@ tude
o
i
c is S
a
d
Diseador Grfico
n e th
u
f
(
Rajiv Chandrabhanu
A to us
S
DE nse
Publicador
Y
RO e lice
Jobi Varghese
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t
U.S. GOVERNMENT RIGHTS
The U.S. Governments rights to use, modify, reproduce, release, perform, display, or
disclose these training materials are restricted by the terms of the applicable Oracle
license agreement and/or the applicable U.S. Government contract.
Aviso de Marca Registrada

Oracle es una marca comercial registrada de Oracle Corporation y/o sus filiales.
Todos los dems nombres pueden ser marcas comerciales de sus respectivos
propietarios.

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Contenido

Introduccin
Objetivos I-2
Agenda I-3
Objetivos del Curso I-4
Agenda I-5
Apndices Utilizados en el Curso I-7
Agenda I-8
Oracle Database 11g: reas de Atencin I-9
Oracle Database 11g I-10
Oracle Fusion Middleware I-12
Oracle Enterprise Manager Grid Control I-13
Oracle BI Publisher I-14
Agenda I-15
Sistema de Gestin de Bases de Datos Relacionales y Relacionales de Objetos I-16
Almacenamiento de Datos en Diferentes Medios Fsicos I-17
Concepto de Base de Datos Relacional I-18
Definicin de una Base de Datos Relacional I-19
Modelos de Datos I-20
Modelo de Relacin de Entidades I-21
Convenciones de Modelado de Relacin de Entidades I-23
Relacin de Varias Tablas I-25
Terminologa de Bases de Datos Relacionales I-27
Agenda I-29
Uso de SQL para Consultar Base de Datos I-30
Sentencias SQL I-31
Entornos de Desarrollo para SQL I-32
Agenda I-33
Esquema Human Resources(HR) I-34
Tablas Utilizadas en el Curso I-35
Agenda I-36
Documentacin de Oracle Database I-37
Recursos Adicionales I-38
Resumen I-39
Prctica I: Visin General I-40

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

iii

Fundacin Proydesa

Recuperacin de Datos Mediante la Sentencia SQL SELECT

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Objetivos 1-2
Agenda 1-3
Capacidades de las Sentencias SQL SELECT 1-4
Sentencia SELECT Bsica 1-5
Seleccin de Todas las Columnas 1-6
Seleccin de Columnas Concretas 1-7
Escritura de Sentencias SQL 1-8
Valores por Defecto de Cabeceras de Columna 1-9
Agenda 1-10
Expresiones Aritmticas 1-11
Uso de Operadores Aritmticos 1-12
Prioridad de Operadores 1-13
Definicin de Valor Nulo 1-14
Valores Nulos en Expresiones Aritmticas 1-15
Agenda 1-16
Definicin de Alias de Columna 1-17
Uso de Alias de Columna 1-18
Agenda 1-19
Operador de Concatenacin 1-20
Cadenas de Caracteres Literales 1-21
Uso de Cadenas de Caracteres Literales 1-22
Operador de Comillas (q) Alternativo 1-23
Filas Duplicadas 1-24
Agenda 1-25
Visualizacin de la Estructura de la Tabla 1-26
Uso del Comando DESCRIBE 1-27
Prueba 1-28
Resumen 1-29
Prctica 1: Visin General 1-30

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t
2

Restriccin y Ordenacin de Datos


Objetivos 2-2
Agenda 2-3
Limitacin de Filas con una Seleccin 2-4
Limitacin de las Filas Seleccionadas 2-5
Uso de la Clusula WHERE 2-6
Fechas y Cadenas de Caracteres 2-7
Operadores de Comparacin 2-8
Uso de Operadores de Comparacin 2-9

iv

Fundacin Proydesa

Uso de Condiciones de Rango mediante el Operador BETWEEN 2-10

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Condicin de Miembro mediante el Operador IN 2-11


Coincidencia de Patrones mediante el Operador LIKE 2-12
Combinacin de Caracteres Comodn 2-13
Uso de las Condiciones NULL 2-14
Definicin de Condiciones mediante los Operadores Lgicos 2-15
Uso del Operador AND 2-16
Uso del Operador OR 2-17
Uso del Operador NOT 2-18
Agenda 2-19
Reglas de Prioridad 2-20
Agenda 2-22
Uso de la Clusula ORDER BY 2-23
Ordenacin 2-24
Agenda 2-26
Variables de Sustitucin 2-27
Uso de la Variable de Sustitucin de Un Solo Ampersand 2-29
Valores de Fecha y Carcter con Variables de Sustitucin 2-31
Especificacin de Nombres de Columna, Expresiones y Texto 2-32
Uso de Variables de Sustitucin de Dos Ampersands 2-33
Agenda 2-34
Uso del Comando DEFINE 2-35

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
se
YD e2-36
Uso del ComandoO
VERIFY
n
R e lic
Prueba 2-37
P
N 2-38rabl
O
Resumen
I
C n2:sVisin
fe General 2-39
APrctica
D
N n-tra
U
F no
3 Uso de Funciones de Una Sola Fila para Personalizar la Salida
Objetivos 3-2
Agenda 3-3
Funciones SQL 3-4
Dos Tipos de Funciones SQL 3-5
Funciones de Una Sola Fila 3-6
Agenda 3-8
Funciones de Carcter 3-9
Funciones de Conversin de Caracteres 3-11
Using Case-Conversion Functions 3-12
Uso de Funciones de Conversin de Caracteres 3-12
Funciones de Manipulacin de Caracteres 3-13
Uso de las Funciones de Manipulacin de Caracteres 3-14

Fundacin Proydesa

Agenda 3-15
Funciones Numricas 3-16
Uso de la Funcin ROUND 3-17

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de la Funcin TRUNC 3-18


Uso de la Funcin MOD 3-19
Agenda 3-20
Trabajo con Fechas 3-21
Formato de Fecha RR 3-22
Uso de la Funcin SYSDATE 3-24
Operadores Aritmticos con Fechas 3-25
Uso de Operadores Aritmticos con Fechas 3-26
Agenda 3-27
Funciones de Manipulacin de Fecha 3-28
Uso de las Funciones de Fecha 3-29
Uso de las Funciones ROUND y TRUNC con Fechas 3-30
Prueba 3-31
Resumen 3-32
Prctica 3: Visin General 3-33

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
S
cCondicionales
a
4 Uso de Funciones de Conversin y Expresiones
s
i
d
h
fun se t
Objetivos 4-2
(
Agenda 4-3
SA to u
E
e
s
Funciones de Conversin Y
4-4D
n
e
ic 4-5
RO
Conversin ImplcitaPdel
Tipo delDato
e
l
b de Dato 4-7
Conversin Explcita
ION fedelraTipo
C
Agenda
A 4-10ans
D
N de lanFuncin
-tr TO_CHAR con Fechas 4-11
FUUso
o
n del Modelo de Formato de Fecha 4-12
Elementos
Uso de la Funcin TO_CHAR con Fechas 4-16
Uso de la Funcin TO_CHAR con Nmeros 4-17
Uso de Funciones TO_NUMBER y TO_DATE 4-20
Uso de las Funciones TO_CHAR y TO_DATE con el Formato de Fecha RR 4-22
Agenda 4-23
Funciones de Anidacin 4-24
Funciones de Anidacin: Ejemplo 1 4-25
Funciones de Anidacin: Ejemplo 2 4-26
Agenda 4-27
Funciones Generales 4-28
Funcin NVL 4-29
Uso de la Funcin NVL 4-30

vi

Fundacin Proydesa

Uso de la Funcin NVL2 4-31

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de la Funcin NULLIF 4-32


Uso de la Funcin COALESCE 4-33
Agenda 4-36
Expresiones Condicionales 4-37
Expresin CASE 4-38
Uso de la Expresin CASE 4-39
Funcin DECODE 4-40
Uso de la Funcin DECODE 4-41
Prueba 4-43
Resumen 4-44
Prctica 4: Visin General 4-45

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
n e th
Uso de Funciones MIN y MAX 5-8(fu
s
SA to u
Uso de la Funcin COUNTE5-9
se 5-10
YDDISTINCT
n
Uso de la PalabraO
Clave
e
R
lic Nulos 5-11
P
Funciones de
Grupo lyeValores
Agenda
ION5-12ferab
C
ndes Grupos de Datos 5-13
DACreacin
a
r
N
t
n- de Grupos de Datos: Sintaxis de la Clusula GROUP BY 5-14
FU noCreacin
Uso de la Clusula GROUP BY 5-15
5

Informes de Datos Agregados con Funciones de Grupo


Objetivos 5-2
Agenda 5-3
Qu Son las Funciones de Grupo? 5-4
Tipos de Funciones de Grupo 5-5
Funciones de Grupo: Sintaxis 5-6
Uso de las Funciones AVG y SUM 5-7

Agrupacin de Ms de Una Columna 5-17


Uso de la Clusula GROUP BY en Varias Columnas 5-18
Consultas No Vlidas Realizadas con las Funciones de Grupo 5-19
Restriccin de Resultados de Grupo 5-21
Restriccin de Resultados de Grupo con la Clusula HAVING 5-22
Uso de la Clusula HAVING 5-23
Agenda 5-25
Anidamiento de Funciones de Grupo 5-26
Prueba 5-27
Resumen 5-28
Prctica 5: Visin General 5-29

vii

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Visualizacin de Datos de Varias Tablas Utilizando Uniones


Objetivos 6-2
Agenda 6-3
Obtencin de Datos de Varias Tablas 6-4
Tipos de Uniones 6-5
Unin de Tablas mediante la Sintaxis SQL:1999 6-6
Cualificacin de Nombres de Columna Ambiguos 6-7
Agenda 6-8
Creacin de Uniones Naturales 6-9
Recuperacin de Registros con Uniones Naturales 6-10
Creacin de Uniones con la Clusula USING 6-11
Unin de Nombres de Columna 6-12
Recuperacin de Registros con la Clusula USING 6-13
Uso de Alias de Tabla con la Clusula USING 6-14

s
a
h
Creacin de Uniones con la Clusula ON 6-15
rg)
o
Recuperacin de Registros con la Clusula ON 6-16

sa ide
e
Creacin de Uniones en 3 Direcciones con la Clusula ON 6-17
d
roy nt Gu
Aplicacin de Condiciones Adicionales a una Unin 6-18
p
n@ tude
Agenda 6-19
o
i
c is S
a
Unin de una Tabla consigo Misma 6-20
d
fun se th
Autouniones que Utilizan la Clusula ON (6-21
SA to u
Agenda 6-22
E
D nse
Uniones no igualitarias 6-23
Y
ce no Igualitarias 6-24
i
RO con
l
Recuperacin de Registros
Uniones
P
le
N
b
Agenda 6-25
a
O
er sin Coincidencia Directa con las uniones OUTER 6-26
CIde Registros
f
s
Devolucin
A
ranfrente a Uniones OUTER 6-27
ND nINNER
t
Uniones
U
F LEFTnoOUTER JOIN 6-28
RIGHT OUTER JOIN 6-29
FULL OUTER JOIN 6-30
Agenda 6-31
Productos Cartesianos 6-32
Generacin de un Producto Cartesiano 6-33
Creacin de Uniones Cruzadas 6-34
Prueba 6-35
Resumen 6-36
Prctica 6: Visin General 6-37

viii

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de Subconsultas para Solucionar Consultas


Objetivos 7-2
Agenda 7-3
Uso de una Subconsulta para Solucionar Problemas 7-4
Sintaxis de la Subconsulta 7-5
Uso de Subconsultas 7-6
Instrucciones para el Uso de Subconsultas 7-7
Tipos de Subconsultas 7-8
Agenda 7-9
Subconsultas de Una Sola Fila 7-10
Ejecucin de Subconsultas de una Sola Fila 7-11
Uso de Funciones de Grupo en una Subconsulta 7-12
Clusula HAVING con Subconsultas 7-13
Qu Parte de esta Sentencia Es Incorrecta? 7-14
La Consulta Interna No Devuelve Ningn Resultado 7-15
Agenda 7-16
Subconsultas de Varias Filas 7-17
Uso del Operador ANY en Subconsultas de Varias Filas 7-18

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
@ 7-19
Uso del Operador ALL en Subconsultas de VariasnFilas
de
u
o
t
i
c is S
Uso del Operador EXISTS 7-20
a
d
Agenda 7-21
fun se th
(
u
Valores Nulos en una Subconsulta
SA 7-22
o
t
E
D nse
Prueba 7-24
Y
Resumen 7-25
RO e lice
P
N
bl
Prctica
7: VisinaGeneral
7-26
O
r
I
e
C
A ansf
D
r los Operadores de Definicin
N8 Uso
n-tde
FU noObjetivos
8-2
Agenda 8-3
Operadores de Definicin 8-4
Instrucciones de los Operadores de Definicin 8-5
Servidor de Oracle y Operadores de Definicin 8-6
Agenda 8-7
Tablas Utilizadas en esta Leccin 8-8
Agenda 8-12
Operador UNION 8-13

Uso del Operador UNION 8-14


Operador UNION ALL 8-16
Uso del Operador UNION ALL 8-17
Agenda 8-18

ix

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Operador INTERSECT 8-19


Uso del Operador INTERSECT 8-20
Agenda 8-21
Operador MINUS 8-22
Uso del Operador MINUS 8-23
Agenda 8-24
Coincidencia de las Sentencias SELECT 8-25
Coincidencia de las Sentencias SELECT: Ejemplo 8-26
Agenda 8-27
Uso de la Clusula ORDER BY en Operaciones de Definicin 8-28
Prueba 8-29
Resumen 8-30
Prctica 8: Visin General 8-31

s
a
h
9 Manipulacin de Datos
g)
r
o

Objetivos 9-2
sa ide
e
Agenda 9-3
d
roy nt Gu
Lenguaje de Manipulacin de Datos 9-4
p
n@ tude
Adicin de una Nueva Fila a una Tabla 9-5
o
i
c is S
a
Sintaxis de las Sentencias INSERT 9-6
d
fun se th
Insercin de Filas 9-7
(
SA9-8 to u
Insercin de Filas con Valores Nulos
E
D 9-9 nse
Y
Insercin de Valores Especiales
O yliHora
ce Especficos 9-10
RFecha
Insercin de Valores
de
P
ble
Creacin deIO
un N
Script r9-11
a
fe Tabla 9-12
s
AC
Copia de
Filas de
Otra
n
D
ra
N n9-13
t
Agenda
U
F Cambio
no de Datos en la Tabla 9-14
Sintaxis de Sentencias UPDATE 9-15
Actualizacin de Filas en una Tabla 9-16
Actualizacin de Dos Columnas con una Subconsulta 9-17
Actualizacin de Filas Basada en Otra Tabla 9-18
Agenda 9-19
Eliminacin de Filas de Tablas 9-20
Sentencia DELETE 9-21
Supresin de Filas de Tablas 9-22
Supresin de Filas Basada en Otra Tabla 9-23
Sentencia TRUNCATE 9-24
Agenda 9-25
Transacciones de Base de Datos 9-26

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa

Transacciones de la Base de Datos: Inicio y Fin 9-27


Ventajas de las Sentencias COMMIT y ROLLBACK 9-28
Sentencias de Control de Transacciones Explcitas 9-29
Rollback de los Cambios de un Marcador 9-30
Procesamiento de Transacciones Implcitas 9-31
Estado de los Datos antes de COMMIT o ROLLBACK 9-33
Estado de los Datos despus de COMMIT 9-34
Confirmacin de Datos 9-35
Estado de los Datos despus de ROLLBACK 9-36
Estado de los Datos despus de ROLLBACK: Ejemplo 9-37
Rollback a Nivel de Sentencias 9-38
Agenda 9-39
Consistencia de Lectura 9-40
Implementacin de Consistencia de Lectura 9-41
Agenda 9-42
Clusula FOR UPDATE en una Sentencia SELECT 9-43

s
a
h
rg)
o

sa ide
e
Clusula FOR UPDATE: Ejemplos 9-44
d
roy nt Gu
Prueba 9-46
p
n@ tude
Resumen 9-47
o
i
c is S
a
Prctica 9: Visin General 9-48
d
fun se th
(
u
SACreartyoGestionar
10 Uso de Sentencias DDLE
para
Tablas
e
D
s
Objetivos 10-2
Y en
O
R
lic
Agenda 10-3
P
e
l
Objetos
de Base
debDatos 10-4
a
r
ION
e
C
f
10-5
AReglasadensNomenclatura
D
r
N
t
- 10-7
n
FU noAgenda
Sentencia CREATE TABLE 10-8
Referencia a Tablas de Otro Usuario 10-9
Opcin DEFAULT 10-10
Creacin de Tablas 10-11
Agenda 10-12
Tipos de Dato 10-13
Tipos de Dato de Fecha y Hora 10-15
Agenda 10-16
Inclusin de Restricciones 10-17
Instrucciones de Restriccin 10-18
Definicin de Restricciones 10-19
Restriccin NOT NULL 10-21
Restriccin UNIQUE 10-22

xi

Fundacin Proydesa

Restriccin PRIMARY KEY 10-24


Restriccin FOREIGN KEY: Palabras Clave 10-27

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Restriccin CHECK 10-28


Sentencia CREATE TABLE: Ejemplo 10-29
Violacin de Restricciones 10-30
Agenda 10-32
Creacin de una Tabla mediante una Subconsulta 10-33
Agenda 10-35
Sentencia ALTER TABLE 10-36
Tablas de Slo Lectura 10-37
Agenda 10-38
Borrado de una Tabla 10-39
Prueba 10-40
Resumen 10-41
Prctica 10: Visin General 10-42

s
a
h
rg)
o

sa ide
e
11 Creacin de Otros Objetos de Esquema
d
roy nt Gu
Objetivos 11-2
p
Agenda 11-3
n@ tude
o
i
c is S
a
Objetos de Base de Datos 11-4
d
Qu es una Vista? 11-5
fun se th
(
Ventajas de las Vistas 11-6
SA to u
E
D nse
Vistas Simples y ComplejasY11-7
RO e lice
Creacin de Vistas P11-8
l Vista 11-11
NDatosradebuna
Recuperacin
de
O
I
Modificacin
sfe 11-12
AC deanVistas
D
N nde-trVistas Complejas 11-13
Creacin
FUReglas
nopara Realizar Operaciones DML en una Vista 11-14
Uso de la Clusula WITH CHECK OPTION 11-17
Denegacin de Operaciones DML 11-18
Eliminacin de Vistas 11-20
Prctica 11: Visin General de la Parte 1 11-21
Agenda 11-22
Secuencias 11-23
Sentencia CREATE SEQUENCE: Sintaxis 11-25
Creacin de Secuencias 11-26
Pseudocolumnas NEXTVAL y CURRVAL 11-27
Uso de una Secuencia 11-29
Almacenamiento en Cach de los Valores de Secuencia 11-30
Modificacin de una Secuencia 11-31

xii

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa

Instrucciones para Modificar una Secuencia 11-32


Agenda 11-33
ndices 11-34
Cmo se Crean los ndices? 11-36
Creacin de ndices 11-37
Instrucciones de Creacin de ndices 11-38
Eliminacin de ndices 11-39
Agenda 11-40
Sinnimos 11-41
Creacin de un Sinnimo para un Objeto 11-42
Creacin y Eliminacin de Sinnimos 11-43
Prueba 11-44
Resumen 11-45
Prctica 11: Visin General de la Parte 2 11-46

s
a
h
rg)
Apndice A: Prcticas y Soluciones
o

sa ide
e
d
Apndice AP: Prcticas y Soluciones adicionales
roy nt Gu
p
n@ tude
o
i
S
Apndice B: Descripciones de las Tablas ac
s
i
d
h
fun se t
(
Apndice C: Uso de SQL Developer
A to u
S
E
Objetivos C-2
D nse
Y
O Developer?
Qu es Oracle
ce C-3
i
RSQL
l
P
le Developer C-4
Especificaciones
de
SQL
N
b
a
O
Interfaz
SQL
erDeveloper 1.5 C-5
CI de
f
s
A
ande una Conexin a la Base Datos C-7
r
ND Creacin
t
U
n de Objetos de Bases de Datos C-10
F noExamen
Visualizacin de la Estructura de la Tabla C-11
Examen de Archivos C-12
Creacin de un Objeto de Esquema C-13
Creacin de una Nueva Tabla: Ejemplo C-14
Uso de la Hoja de Trabajo de SQL C-15
Ejecucin de Sentencias SQL C-18
Guardado de Scripts SQL C-19
Ejecucin de Archivos de Script Guardados: Mtodo 1 C-20
Ejecucin de Archivos de Script Guardados: Mtodo 2 C-22
Formato del Cdigo SQL C-23
Uso de Fragmentos C-24
Uso de Fragmentos: Ejemplo C-25
Depuracin de Procedimientos y Funciones C-26
xiii

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa

Informes de Bases de Datos C-27


Creacin de un Informe Definido por el Usuario C-28
Motores de Bsqueda y Herramientas Externas C-29
Definicin de Preferencias C-30
Restablecimiento del Diseo de SQL Developer C-31
Resumen C-32
Apndice D: Uso de SQL*Plus
Objetivos D-2
Interaccin de SQL y SQL*Plus D-3
Sentencias SQL frente a Comandos SQL*Plus D-4
Visin General de SQL*Plus D-5
Conexin a SQL*Plus D-6
Visualizacin de la Estructura de la Tabla D-7
Comandos de Edicin SQL*Plus D-9
Uso de LIST, n y APPEND D-11

s
a
h
rg)
o

sa ide
Uso del Comando CHANGE D-12
e
d
Comandos de Archivos SQL*Plus D-13
roy nt Gu
p
Using the SAVE, START Commands D-14
n@ tude
o
i
c is S
Comando SERVEROUTPUT D-15
a
d
Uso del Comando SQL*Plus SPOOL D-16
fun se th
(
Uso del Comando AUTOTRACE D-17
SA to u
E
D nse
Resumen D-18
Y
RO e lice
P
NJDeveloper
bl
Apndice E: Uso
de
a
O
r
I
Objetivos
ACE-2ansfe
D
N JDeveloper
E-3
-tr
n
FUOracle
o
Database
n Navigator E-4
Creacin de Conexin E-5
Examen de Objetos de Bases de Datos E-6
Ejecucin de Sentencias SQL E-7
Creacin de Unidades de Programa E-8
Compilacin E-9
Ejecucin de una Unidad de Programa E-10
Borrado de una Unidad de Programa E-11
Ventana Structure E-12
Ventana del Editor E-13
Navegador de Aplicaciones E-14
Despliegue de Procedimientos Java Almacenados E-15
Publicacin de Java en PL/SQL E-16

xiv

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Cmo Puedo Obtener ms Informacin sobre JDeveloper 11g? E-17


Resumen E-18
Apndice F: Sintaxis de Unin en Oracle
Objetivos F-2
Obtencin de Datos de Varias Tablas F-3
Productos Cartesianos F-4
Generacin de un Producto Cartesiano F-5
Tipos de Uniones Propiedad de Oracle F-6
Unin de Tablas mediante la Sintaxis de Oracle F-7
Cualificacin de Nombres de Columna Ambiguos F-8
Uniones igualitarias F-9
Recuperacin de Registros con Uniones Igualitarias F-10
Recuperacin de Registros con Uniones Igualitarias: Ejemplo F-11
Condiciones de Bsqueda Adicionales Mediante el Operador AND F-12
Unin de Ms de Dos Tablas F-13
Uniones no Igualitarias F-14
Recuperacin de Registros con Uniones no Igualitarias F-15
Devolucin de Registros sin Coincidencia Directa con las Uniones Externas F-16
Uniones Externas: Sintaxis F-17
Uso de Uniones Externas F-18
Unin Externa: Otro Ejemplo F-19
Unin de una Tabla consigo Misma F-20
Autounin: Ejemplo F-21
Resumen F-22
Prctica F: Visin General F-23

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
N n-tr
FU ndice
no

xv

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa

Introduccin

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u los derechos reservados.
A toTodos
Copyright 2010, OracleS
y/o sus filiales.
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Objetivos
Al finalizar esta leccin, debera estar capacitado para lo
siguiente:
Definir los objetivos del curso
Enumerar las funciones de Oracle Database 11g
Describir el aspecto terico y fsico de una base de datos
relacional
Describir la implantacin del servidor de Oracle de
RDBMS y el sistema de gestin de bases de datos
s
relacionales de objetos (ORDBMS)
a
h
)
Identificar los entornos de desarrollo que se puedenorg
sa ide
e
utilizar para este curso
d
y t Gu
o
r
p
Describir la base de datos y el esquema
utilizados
en en este
@
d
n
u
curso
St
cio

a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Objetivos
le
N
b
a
O
I
En esta leccinCcomprender
erel sistema de gestin de bases de datos relacionales (RDBMS) y el
f
s
A
sistema de
de datos relacionales de objetos (ORDBMS). Se presentan tambin
Dgestintrde
anbases
NSQL
Oracle
Developer
y
SQL*Plus
como entornos de desarrollo utilizados para ejecutar sentencias
U
F non
SQL y para objetivos de formateo y creacin de informes.

Oracle Database: Conceptos Fundamentales de SQL I I-2

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Objetivos del curso, agenda y apndices utilizados en


este curso
Visin general de Oracle Database 11g y productos
relacionados
Visin general de los conceptos y terminologa de
gestin de bases de datos relacionales
Introduccin a SQL y sus entornos de desarrollo
Esquema HR y tablas utilizadas en este curso

s
a
h
Documentacin y recursos adicionales de Oracle
rg)
o

Database 11g
sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I I-3

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Objetivos del Curso


Al finalizar este curso, debera estar capacitado para:
Identificar los principales componentes de Oracle Database
Recuperar datos de filas y columnas de las tablas con la
sentencia SELECT

Crear informes de datos ordenados y restringidos


Utilizar funciones SQL para generar y recuperar datos
personalizados
Ejecutar consultas complejas para recuperar datos de varias
tablas
s
a
h
Ejecutar sentencias del lenguaje de manipulacin deodatos
rg)

sa ide
(DML) para actualizar datos en Oracle Database
e
d
Gu
roy dendatos
Ejecutar sentencias de lenguaje de definicin
t
p
@ tude
(DDL) para crear y gestionar objetos
ionde esquema

c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Objetivos del Curso
le
N
b
a
O
Iuna introduccin
Este curso ofrece
er a la tecnologa de Oracle Database. En esta clase, aprender los
C
f
s
A
conceptosDbsicos relativos
a las bases de datos relacionales y al potente lenguaje de programacin
ran los
Ncursonproporciona
t
SQL.
El
conocimientos esenciales de SQL que permiten escribir consultas en
U
F no

una o varias tablas, manipular datos en tablas, crear objetos de bases de datos y realizar consultas en
los metadatos.

Oracle Database: Conceptos Fundamentales de SQL I I-4

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Primer da:
Introduccin
Recuperacin de Datos mediante la Sentencia SQL SELECT
Restriccin y Ordenacin de Datos
Uso de Funciones de Una Sola Fila para Personalizar la
Salida
Uso de Funciones de Conversin y Expresiones
Condicionales

s
a
h
rg)
Informes de Datos Agregados con Funciones de Grupo
o

saUniones
e
e
d
i
Visualizacin de Datos de Varias Tablas Utilizando
d
y t Gu
o
r
p
Uso de Subconsultas para Solucionar@
Consultas
en
d
n
u
t
io
Uso de los Operadores de Definicin
S
c
a
s
i
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Segundo da:

Oracle Database: Conceptos Fundamentales de SQL I I-5

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Tercer da:
Manipulacin de Datos
Uso de Sentencias DDL para Crear y Gestionar Tablas
Creacin de Otros Objetos de Esquema

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I I-6

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Apndices Utilizados en el Curso

Apndice A: Prcticas y Soluciones


Apndice B: Descripciones de las Tablas
Apndice C: Uso de SQL Developer
Apndice D: Uso de SQL*Plus
Apndice E: Uso de JDeveloper
Apndice F: Sintaxis de Unin en Oracle
Apndice AP: Prcticas y Soluciones Adicionales

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I I-7

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Objetivos del curso, agenda y apndices utilizados en


este curso
Visin general de Oracle Database 11g y productos
relacionados
Visin general de los conceptos y terminologa de
gestin de bases de datos relacionales
Introduccin a SQL y sus entornos de desarrollo
Esquema HR y tablas utilizadas en este curso

s
a
h
Documentacin y recursos adicionales de Oracle
rg)
o

Database 11g
sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I I-8

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Oracle Database 11g: reas de Atencin

Grids de
Infraestructura

Gestin de
Informacin

Desarrollo de
Aplicaciones

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Oracle Database 11g: reas deleAtencin
b funciones en las siguientes reas de atencin:
a
ON
r
I11g
Oracle Database
ofrece
amplias
e
C
sf
A Infraestructura:
Grids
de
la tecnologa de Grid de la infraestructura Oracle permite que se
n
D
a
r
N pools
t
generen
de
almacenamiento
y servidores de bajo costo que ofrecen la calidad de servicio
U
F ms naltaonen lo referente a gestionabilidad,
alta disponibilidad y rendimiento. Oracle Database
11g consolida y ampla las ventajas de Grid Computing. Aparte de aprovechar al mximo Grid
Computing, Oracle Database 11g tiene funciones de garanta de cambios para gestionar cambios
de una manera rentable y controlada.
Gestin de Informacin: Oracle Database 11g ampla las capacidades de gestin de
informacin existente en la gestin de contenido, integracin de informacin y reas de gestin
del ciclo de vida de la informacin. Oracle proporciona gestin de contenido de tipos de dato
avanzados, como Extensible Markup Language (XML), texto, espacial, multimedia, imgines
mdicas y tecnologas semnticas.
Desarrollo de Aplicaciones: Oracle Database 11g tiene capacidades para utilizar y gestionar
todos los entornos de desarrollo para aplicaciones principales, como PL/SQL, Java/JDBC, .NET
y Windows, PHP, SQL Developer y Application Express.

Oracle Database: Conceptos Fundamentales de SQL I I-9

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Oracle Database 11g

Gestin
Alta disponibilidad
Rendimiento

s
a
h
rg)
o
Integracin de informacin

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Oracle Database 11g
le
N
b
a
O
I tienenfequer soportar varios terabytes de informacin para usuarios que demanda
Las organizaciones
C
A
un accesoD
rpido y a
seguro
ns a aplicaciones de negocio durante todo el da. Los sistemas de base de
r
N
t
datos
Udebenoser
n-fiables y se deben poder recuperar rpidamente en caso de cualquier tipo de fallo.
F
n
Oracle Database 11g est diseada junto con las siguientes reas de funciones para ayudar a las
Seguridad

organizaciones a gestionar los grids de infraestructura de forma sencilla y proporcionar un servicio


de gran calidad.
Gestin: mediante las funciones de garanta de cambios, automatizacin de gestin y
diagnstico de fallos, se puede aumentar la productividad de los administradores de bases de
datos (DBA), reducir costos, minimizar errores y maximizar la calidad del servicio. Algunas de
las funciones tiles que fomentan una mejor gestin son utilidad de reproduccin de bases de
datos, SQL Performance Analyzer y la utilidad de ajuste automtico de SQL.
Alta disponibilidad: mediante el uso de las funciones de alta disponibilidad, puede reducir el
riesgo de tiempo de inactividad y prdida de datos. Estas funciones mejoran las operaciones en
lnea y permiten realizar actualizaciones de la base de datos de una forma ms rpida.

Oracle Database: Conceptos Fundamentales de SQL I I-10

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa
Oracle Database 11g (continuacin)
Rendimiento: el uso de funciones como archivos seguros, compresin para procesamiento de
transacciones en lnea (OLTP), optimizaciones de Real Application Clusters (RAC), cachs de
consultas de resultados, etc., puede mejorar en gran medida el rendimiento de la base de datos.
Oracle Database 11g permite a las organizaciones gestionar sistemas grandes, escalables,
transaccionales y de almacenes de datos que proporciona un acceso rpido a los datos mediante
el almacenamiento modular de bajo coste.
Seguridad: Oracle Database 11g ayuda a las organizaciones a proteger la informacin con
configuraciones de seguridad nicas, enmascaramiento y cifrado de datos, as como capacidades
de auditora sofisticadas. Proporciona una plataforma escalable y segura para un acceso rpido y
fiable a todos los tipos de informacin mediante las interfaces estndar de la industria.
Integracin de Informacin: Oracle Database 11g tiene funciones para mejorar la integracin
de datos en toda la empresa. Tambin soporta capacidades de gestin del ciclo de vida de la
informacin avanzadas. Esto le ayudar a gestionar el cambio de datos en la base de datos.

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I I-11

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Oracle Fusion Middleware


Cartera de productos de software lderes, basados en estndares y probados
por el cliente, que abarca un abanico de herramientas y servicios que va
desde Java EE y herramientas del desarrollador hasta servicios de
integracin, anlisis de negocio, colaboracin y gestin de contenido.
Interaccin del Usuario
Portales, contenido, bsquedas,
escritorio, mvil, VoIP
Business Intelligence
ETL, preguntas y respuestas, OLAP,
informes, alertas, tiempo real
Gestin de Procesos e Integracin

Gestin de Sistemas
Servicio de aplicaciones
de sistema

a
s
a
)h
g
Servidor de Aplicaciones
r
deoIdentidad
Gestin
a
Marco y herramientas
s
ede
Java EE, WS-*, eventos, reglas
e
d
i
d
Provisionamiento
de SOA
uSingle SignG
roy directorios,
t
p
Infraestructura de Grid
enAdministracin de
On,
@
d
n
u
Clusters, metadatos, registro,
t identidad
io
S
c
seguridad
a
s
i
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Oracle Fusion Middleware
le
N
b
a
O
I
Oracle Fusion C
Middleware
eesr una familia de productos completa y bien integrada que ofrece un
f
s
A
soporte completo
desarrollo, el despliegue y la gestin de Service-Oriented Architecture
D trpara
aneleldesarrollo
NSOA
(SOA).
facilita
de servicios de negocio modulares que se pueden integrar de forma
U
n
F
o
n
sencilla y volver a utilizar, lo que reduce los costos de mantenimiento y desarrollo y proporciona una
Herramientas de
Desarrollo

Messaging, ESB, BPM, B2B, BAM,


MDM

gran calidad de los servicios. La arquitectura de conexin de Oracle Fusion Middleware permite
aprovechar la inversin en cualquier aplicacin, sistema o tecnologa existente. Su inquebrantable
tecnologa principal minimiza la interrupcin provocada por interrupciones planificadas y no
planificadas.
Algunos de los productos de la familia de Oracle Fusion Middleware son:
Enterprise Application Server: Application Server
Gestin de Procesos e Integracin: BPEL Process Manager, Oracle Business Process Analysis
Suite
Herramientas de Desarrollo: Oracle Application Development Framework, JDeveloper, SOA
Suite
Business Intelligence: Oracle Business Activity Monitoring, Oracle Data Integrator
Gestin de sistemas: Enterprise Manager
Oracle Identity Management: Oracle Identity Management
Content Management: Oracle Content Database Suite
User Interaction: Portal, WebCenter
Oracle Database: Conceptos Fundamentales de SQL I I-12

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Oracle Enterprise Manager Grid Control

Gestin eficiente de Oracle Fusion Middleware


Simplificacin de la gestin de ciclo de vida de la
infraestructura y aplicacin
Capacidades de gestin de aplicaciones y administracin
de base de datos mejoradas

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Oracle Enterprise Manager Gridle
Control
N
b
a
O
I software
Al abarcar aplicaciones,
er intermedio y gestin de bases de datos, Oracle Enterprise Manager Grid
C
f
s
A
Control proporciona
n empresarial integrada para sistemas ya sean de Oracle o no.
D tragestin
N
U
Oracle
n Manager Grid Control proporciona capacidades de gestin de Oracle Fusion Middleware
F Enterprise
o
n
avanzadas para los servicios en los que confan las aplicaciones de negocio, incluidos SOA, Business
Activity Monitoring e Identity Management.
Funcionalidad de gestin de amplio rango: se encuentra disponible para aplicaciones que incluyen
gestin de nivel de servicios, gestin del rendimiento de la aplicacin, gestin de configuracin y
automatizacin de cambios.
Funciones de automatizacin de grid incorporadas: significa que la tecnologa de la informacin
responde proactivamente a la demanda fluctuante e implanta nuevos servicios ms rpidamente, de
modo que los negocios puedan prosperar.
Diagnstico detallado y soluciones disponibles de inmediato: se puede aplicar en una amplia gama
de aplicaciones, incluidas aplicaciones personalizadas, Oracle E-Business Suite, PeopleSoft, Siebel,
Oracle Fusion Middleware, Oracle Database y la infraestructura subyacente.
Amplias capacidades de gestin de ciclo de vida: ampla grid computing al proporcionar soluciones
para el ciclo de vida de toda la aplicacin e infraestructura, incluyendo prueba, etapa y produccin
mediante las operaciones. Ha simplificado la gestin de parches con la aplicacin de parches
sincronizada, el soporte del sistema operativo adicional y funciones de deteccin de conflictos.
Oracle Database: Conceptos Fundamentales de SQL I I-13

Fundacin Proydesa

Oracle BI Publisher
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Proporciona una arquitectura central para autorizar,


gestionar y proporcionar informacin de forma segura y en
varios formatos
Reduce la complejidad y tiempo en el desarrollo, prueba y
despliegue de todos los tipos de informes
Informes financieros,facturas, pedidos de ventas o compras,
XML y EDI/EFT(documentos eText)

Permite personalizaciones flexibles


Por ejemplo, un informe de un documento de Microsoft Word
se puede generar en varios formatos, como PDF, HTML, has
Excel, RTF, etc.
rg)

o e
a
s
de Guid
y
o
HTML
pr ent
BI PUBLISHER
@
Microsoft Word
ud
on StExcel
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Oracle BI Publisher
le
N
b
a
O
I11g tambin
Oracle Database
er incluye Oracle BI Publisher, solucin de creacin de informes
C
f
s
A
empresariales
de Oracle.
Oracle BI Publisher (antes denominado XML Publisher) proporciona la
ande informes
r
ND
t
solucin
de
creacin
escalable y ms eficaz disponible para entornos complejos y
U
n
F
o
n
distribuidos.
PDF

Oracle BI Publisher reduce los elevados costos asociados al desarrollo, personalizacin y


mantenimiento de los documentos de negocio, al mismo tiempo que aumenta la eficacia de la gestin
de informes. Mediante un juego de herramientas de escritorio conocidas, los usuarios pueden crear y
mantener sus propios formatos de informe segn las consultas de datos creadas por los
desarrolladores o personal de TI.
Los formatos de informe de Oracle BI Publisher se pueden disear mediante Microsoft Word o
Adobe Acrobat, herramientas con las que la mayora de los usuarios estn familiarizados. Oracle BI
Publisher tambin permite mostrar los datos desde diferentes orgenes de datos en un nico
documento de salida. Puede proporcionar informes mediantes impresora, correo electrnico o fax.
Puede publicar el informe en un portal. Incluso puede permitir a los usuarios que colaboren en
ediciones y gestin de informes en servidores web Web-based Distributed Authoring and Versioning
(WebDav).

Oracle Database: Conceptos Fundamentales de SQL I I-14

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Objetivos del curso, agenda y apndices utilizados en


este curso
Visin general de Oracle Database 11g y productos
relacionados
Visin general de los conceptos y terminologa de
gestin de bases de datos relacionales
Introduccin a SQL y sus entornos de desarrollo
Esquema HR y tablas utilizadas en este curso

s
a
h
Documentacin y recursos adicionales de Oracle
rg)
o

Database 11g
sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I I-15

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Sistema de Gestin de Bases de Datos Relacionales


y Relacionales de Objetos

Modelo relacional y modelo relacional de objeto


Objetos y tipos de dato definidos por el usuario
Compatibilidad total con la base de datos relacional
Soporta objetos grandes y multimedia
Funciones del servidor de bases de datos de alta calidad

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Sistema de Gestin de Bases de
le Datos Relacionales y Relacionales de Objetos
N
b
a
O
I soporta
El servidor de C
Oracle
er el modelo relacional y de base de datos relacional de objeto.
f
s
A
Dde Oracle
El servidor
anampla las capacidades de modelado de datos para soportar un modelo de base
r
N
t
U
deFdatos relacional
n de objeto que proporciona programacin orientada a objetos, tipos de dato
o
n
complejos, objetos de negocio complejos y compatibilidad completa con el mundo relacional.
Incluye distintas funciones para una funcionalidad y rendimiento mejorado de las aplicaciones
OLTP, como un uso compartido mejorado de las estructuras de datos de tiempo de ejecucin, cachs
de buffers grandes y restricciones diferibles. Las aplicaciones de almacn de datos aprovechan las
mejoras, como la ejecucin en paralelo de operaciones de insercin, la actualizacin y la supresin,
adems de la particin y optimizacin de consultas de deteccin en paralelo. El modelo de Oracle
soporta aplicaciones basadas en web y de cliente/servidor distribuidas y de varias capas.
Para obtener ms informacin sobre el modelo relacional de objeto o relacional, consulte Oracle
Database Concepts for 10g or 11g database (Conceptos de Oracle Database para Base de Datos 10g u
11g).

Oracle Database: Conceptos Fundamentales de SQL I I-16

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Almacenamiento de Datos en Diferentes


Medios Fsicos

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
Hoja de clculo
Archivador de ion
udBase de Datos
t
S
c
electrnica
archivadoda
is
h
n
t
u
f
(
se
u
A
Copyright 2010, Oracle
to Todos los derechos reservados.
ESy/o sussefiliales.
D
OY licen
R
P enbDiferentes
Almacenamiento de Datos
Medios Fsicos
le
N
a
O
I tiene sus
Cada organizacin
ernecesidades de informacin. Una biblioteca conserva una lista de los
C
f
s
A
miembros,
libros, fechas
de vencimiento y sanciones. Una compaa necesita guardar la informacin
andepartamentos
r
ND
t
sobre
los
empleados,
y salarios. Esta informacin se denomina datos.
U
F non
Las organizaciones pueden almacenar datos en diferentes medios fsicos y en diferentes formatos,
como un documento impreso en un archivador de archivado o datos almacenados en hojas de clculo
electrnicas o en bases de datos.
Una base de datos es una recopilacin organizada de informacin.
Para gestionar bases de datos, necesita un sistema de gestin de bases de datos (DBMS). Un DBMS
es un programa que almacena, recupera y modifica los datos en las bases de datos a peticin. Hay
cuatro tipos principales de bases de datos: jerrquica, de red, relacional y (la ms reciente)
relacional de objeto.

Oracle Database: Conceptos Fundamentales de SQL I I-17

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Concepto de Base de Datos Relacional

El Dr. E. F. Codd propuso el modelo relacional del sistema


de bases de datos en 1970.
Es la base del sistema de gestin de bases de datos
relacionales (RDBMS).
El modelo relacional consta de lo siguiente:
Recopilacin de objetos o relaciones
Juego de operadores que actan en las relaciones
Integridad de datos para su precisin y consistencia

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Concepto de Base de Datos Relacional
le
N
b
a
O
I fue pionero
El Dr. E. F. Codd
er al describir los principios del modelo relacional en junio de 1970, en
C
f
s
A
una documentacin
n titulada A Relational Model of Data for Large Shared Data Banks. En
ND n-tratcnica
esta
documentacin
tcnica,
el Dr. Codd propuso el modelo relacional para los sistemas de bases de
U
F
o
n
datos.
Los modelos comunes utilizados hasta ese momento eran jerrquicos y de red o incluso simples
estructuras de datos de archivo plano. Los sistemas de gestin de bases de datos relacionales
(RDBMS) pronto se volvieron muy conocidos, en especial por su facilidad de uso y su flexible
estructura. Adems, un nmero de proveedores innovadores, como Oracle, complementaron los
RDBMS con una serie de productos de usuario y desarrollo de aplicaciones potentes, proporcionando
una solucin total.
Componentes del Modelo Relacional
Recopilaciones de objetos o relaciones que almacenan los datos.
Un juego de operadores que pueden actuar en las relaciones para producir otras relaciones.
Integridad de datos para su precisin y consistencia.
Para obtener ms informacin, consulte An Introduction to Database Systems, Eighth Edition
(Addison-Wesley: 2004), escrito por Chris Date.

Oracle Database: Conceptos Fundamentales de SQL I I-18

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Definicin de una Base de Datos Relacional


Una base de datos relacional es una recopilacin de relaciones
o tablas bidimensionales.
Servidor de
Oracle

a
s
a
Nombre de la tabla: EMPLOYEES Nombre de la tabla: DEPARTMENTS
)h
g
r
o e
a
s
de Guid
y
o
pr ent

@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Definicin de una Base de Datos
le Relacional
N
b
a
O
Una base de datos
erutiliza relaciones o tablas bidimensionales para almacenar informacin.
CI relacional
f
s
A
n desee almacenar informacin sobre todos los empleados de la compaa. En
D puede
Por ejemplo,
aque
r
N
t
U
una
n relacional, puede crear diferentes tablas para almacenar informacin diferente
F base ndeodatos
sobre los empleados, como una tabla de empleados, una de departamentos y una de salarios.

Oracle Database: Conceptos Fundamentales de SQL I I-19

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Modelos de Datos

Modelo del
sistema
en la mente
del cliente

Modelo de
entidades del
modelo del cliente
Modelo de tabla
del modelo de entidades

a
s
a
Servidor ) h
de Oracle
rg
o

sa ide
e
d
roy nt Gu
p
de en el disco
n@ tTablas
u
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Modelos de Datos
le
N
b
a
O
Ila base del
Los modelos son
erdiseo. Los ingenieros crean un modelo de coche para solucionar
C
f
s
A
cualquierD
problemaaantes
n de iniciar la produccin. De la misma manera, los diseadores desarrollan
r
Npara
t
modelos
explorar
ideas y mejorar el conocimiento del diseo de la base de datos.
U
F non
Objetivo de los Modelos
Los modelos ayudan a comunicar los conceptos que las personas tienen en mente. Se puede utilizar
para realizar las siguientes acciones:
Comunicar
Clasificar
Describir
Especificar
Investigar
Evolucionar
Analizar
Imitar
El objetivo es producir un modelo que se ajuste a varios de estos usos, que el usuario lo pueda
entender y que contenga los suficientes detalles para que un desarrollador cree un sistema de bases de
datos.

Oracle Database: Conceptos Fundamentales de SQL I I-20

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Modelo de Relacin de Entidades

Crear un diagrama de entidad/relacin a partir de


narrativas o especificaciones de negocio:
EMPLOYEE
#*
nmero
*
nombre
o
puesto

asignado a
compuesto por

DEPARTMENT
#*
nmero
*
nombre
o
ubicacin

Supuesto:
. . . Asignar uno o ms empleados a un
s
a
h
departamento . . .
rg)
o

. . . Algunos departamentos an no tienen empleados


sa ide
e
d
asignados. . .
Gu
roy

p ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Modelo de Relacin de Entidades
le
N
b
a
O
I los fdatos
En un sistema C
eficaz,
er se dividen en entidades o categoras discretas. Un modelo de relacin
s
A
de entidades
es
de varias entidades de un negocio y las relaciones entre ellas. Un
anunadeilustracin
r
NdeDER(ER)
t
modelo
se
deriva
las
especificaciones
o descripciones de negocio y se crea durante la fase
U
F non

de anlisis del ciclo de vida de desarrollo del sistema. Los modelos de ER separan la informacin que
necesita un negocio a partir de las actividades realizadas en el mismo. Aunque los negocios pueden
cambiar sus actividades, el tipo de informacin suele permanecer constante. Por lo tanto, las
estructuras de datos tambin tienden a ser constantes.

Oracle Database: Conceptos Fundamentales de SQL I I-21

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa
Modelo de Relacin de Entidades (continuacin)
Ventajas del Modelado de ER:
Recopila informacin para la organizacin en un formato claro y preciso.
Proporciona una imagen clara del mbito de los requisitos de la informacin.
Proporciona una asignacin grfica de fcil compresin para el diseo de la base de datos.
Ofrece un marco efectivo para integrar varias aplicaciones.
Componentes Clave
Entidad: aspecto significativo sobre qu informacin se debe conocer. Algunos ejemplos
pueden ser los departamentos, empleados y pedidos.
Atributo: algo que describe o cualifica una entidad. Por ejemplo, para la entidad de empleados,
los atributos seran el nmero de empleado, el nombre, cargo, fecha de contratacin, nmero de
departamento, etc. Cada uno de los atributos puede ser necesario u opcional. Este estado se
denomina opciones.
Relacin: asociacin con nombre entre las entidades que muestran opciones y grados. Algunos
ejemplos pueden ser los empleados y departamentos, pedidos y elementos.

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I I-22

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Convenciones de Modelado de Relacin de Entidades


Entidad:
Nombre nico en singular
Maysculas
Recuadro editable
Sinnimo entre parntesis

EMPLOYEE
#*
nmero
*
nombre
o
puesto

Atributo:
Nombre en singular
Minsculas
Atributo obligatorio
marcado con *
Atributo opcional
marcado con o

DEPARTMENT
#*
nmero
*
nombre
compuesto por o
ubicacin

asignado a

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
Identificador nico (UID)
p
e
Primario marcado con # ion@ tud
c(#) is S
Secundario marcado con
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Convenciones de Modelado deleER
N rab
Entidades CIO
sfe utilice las siguientes convenciones:
A unaaentidad,
n
D
Para representar
N nde-entidad
tr nico en singular
F UNombre
o
n de entidad en mayscula
Nombre

Recuadro editable
Nombres de sinnimos opcionales en maysculas entre parntesis: ( )
Atributos
Para representar un atributo en un modelo utilice las siguientes convenciones:
Nombre en singular y en minscula
Etiqueta de asterisco (*) para los atributos obligatorios (es decir, valores que se deben conocer)
Etiqueta de letra o para los atributos opcionales (es decir, los valores que se pueden conocer)
Relaciones
Smbolo

Descripcin

Lnea discontinua
Lnea continua
Pata de gallo

Elemento opcional que indica quizs.


Elemento obligatorio que indica debe ser.
Elemento de grado que indica uno o ms.

Una sola lnea

Elemento de grado que indica nico.


Oracle Database: Conceptos Fundamentales de SQL I I-23

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa
Convenciones de Modelado de ER (continuacin)
Relaciones
Cada direccin de la relacin contiene:
Una etiqueta: por ejemplo, enseado por o asignado a
Una opcin: debe ser o quizs
Un grado: nico o uno o ms
Nota: el trmino cardinalidad es un sinnimo del trmino grado.
Cada entidad de origen {puede ser | debe ser} nombre de relacin {nico | uno o ms} entidad de
destino.
Nota: la convencin se lee hacia la izquierda.
Identificadores nicos
Un identificador nico (UID) es cualquier combinacin de atributos o relaciones, o de ambos, que
sirve para distinguir las incidencias de una entidad. Cada incidencia de entidad se debe identificar de
forma nica.
Etiquetar cada atributo que forma parte del UID con un signo de almohadilla #.
Etiquetar los UID secundarios con un signo de almohadilla entre parntesis (#).

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I I-24

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Relacin de Varias Tablas

Cada fila de datos de una tabla se identifica como nica


mediante una clave primaria.
Puede relacionar de forma lgica desde varias tablas
mediante claves ajenas.
Nombre de la tabla: DEPARTMENTS

Nombre de la tabla: EMPLOYEES

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent

@
Clave primaria
on Stud
i
c
a his
d
Clave primaria
Clave ajena
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Relacin de Varias Tablas
le
N
b
a
O
Cada tabla contiene
I datosfequer describen exactamente una entidad. Por ejemplo, la tabla EMPLOYEES
C
s los empleados. Las categoras de datos se muestran en la parte superior
A
contiene D
informacin
nsobre
a
r
N
t
deFcada
U tablaony -los casos individuales se muestran a continuacin. Si utiliza un formato de tabla,
n
puede visualizar,
comprender y utilizar la informacin de inmediato.
Debido a que los datos sobre las diferentes entidades se almacenan en diferentes tablas, puede que
tenga que combinar dos o ms tablas para responder a una pregunta determinada. Por ejemplo, puede
que desee conocer la ubicacin del departamento en el que trabaja un empleado. En este supuesto,
necesita informacin de la tabla EMPLOYEES (que contiene datos sobre los empleados) y la tabla
DEPARTMENTS (que contiene informacin sobre los departamentos). Con RDBMS, puede
relacionar los datos de una tabla con los datos de otra utilizando las claves ajenas. Una clave ajena es
una columna (o juego de columnas) que hace referencia a una clave primaria en la misma tabla o en
otra tabla.
Tiene la posibilidad de relacionar datos de una tabla con datos de otra tabla para organizar la
informacin en unidades separadas y gestionables. Los datos de empleado se pueden mantener, de
forma lgica, separados de los datos de departamento almacenndolos en una tabla independiente.

Oracle Database: Conceptos Fundamentales de SQL I I-25

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa
Relacin de Varias Tablas (continuacin)
Instrucciones para Claves Primarias y Ajenas
No puede utilizar valores duplicados en una clave primaria.
Generalmente, las claves primarias no se pueden cambiar.
Las claves ajenas se basan en valores de datos y son punteros puramente lgicos (no fsicos).
Un valor de clave ajena debe coincidir con un valor de clave primaria o de clave nica existente
o, de lo contrario, debe ser nulo.
Una clave ajena debe hacer referencia a una columna de clave primaria o nica.

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I I-26

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Terminologa de Bases de Datos Relacionales


3
4

2
6

s
a
h
rg)
o

1
sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Terminologa de Bases de Datos
le Relacionales
N
b
a
O
I relacional
Una base de datos
erpuede contener una o ms tablas. Una tabla es la estructura bsica de
C
f
s
A
almacenamiento
deaRDBMS.
Una tabla contiene todos los datos necesarios sobre algo del mundo
n
r
NDempleados,
t
real,
como
facturas
o clientes.
U
F non
La diapositiva muestra el contenido de la tabla o relacin EMPLOYEES. Los nmeros indican lo

siguiente
1. Una nica fila (o tupla), que representa todos los datos necesarios para un empleado concreto.
Cada fila de una tabla se debe identificar por una clave primaria, que no permite duplicar filas.
El orden de las filas no es importante; especifique el orden de la fila cuando se recuperen los
datos.
2. Una columna o atributo, que contiene el nmero de empleado. El nmero de empleado identifica
un nico empleado en la tabla EMPLOYEES. En este ejemplo, la columna del nmero de
empleado est designada como clave primaria. Una clave primaria debe contener un valor y el
valor debe ser nico.
3. Una columna que no es un valor clave. Una columna representa un tipo de dato en una tabla; en
este ejemplo, los datos son los salarios de todos los empleados. El orden de las columnas no es
importante al almacenar datos; especifique el orden de la columna al recuperar los datos.

Oracle Database: Conceptos Fundamentales de SQL I I-27

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa
Terminologa de Bases de Datos Relacionales (continuacin)
4. Una columna que contiene el nmero de departamento, que tambin es una clave ajena. Una
clave ajena es una columna que define cmo se relacionan las tablas s. Una clave ajena hace
referencia a una clave primaria o nica en la misma tabla o en otra tabla. En el ejemplo,
DEPARTMENT_ID identifica de forma nica un departamento en la tabla DEPARTMENTS.
5. Un campo est en la interseccin de una fila y una columna. Slo puede contener un valor.
6. Un campo puede no contener ningn valor. Esto se denomina valor nulo. En la tabla
EMPLOYEES solo aquellos empleados que tienen el rol de vendedor tienen un valor en el campo
COMMISSION_PCT (comisiones).

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I I-28

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Objetivos del curso, agenda y apndices utilizados en


este curso
Visin general de Oracle Database 11g y productos
relacionados
Visin general de los conceptos y terminologa de
gestin de bases de datos relacionales
Introduccin a SQL y sus entornos de desarrollo
Esquema HR y tablas utilizadas en este curso

s
a
h
Documentacin y recursos adicionales de Oracle
rg)
o

Database 11g
sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I I-29

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de SQL para Consultar Base de Datos


El lenguaje de consulta estructurado (SQL) es:
Lenguaje estndar de ANSI para el funcionamiento de
bases de datos relacionales
Uso y aprendizaje sencillos y eficaces
Funcionalidad completa (con SQL, puede definir,
recuperar y manipular datos en las tablas)
SELECT department_name
FROM
departments;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Uso de SQL para Consultar Base
le de Datos
N
b
a
O
I relacional,
En una base deC
datos
er no es necesario especificar la ruta de acceso a las tablas y tampoco
f
s
A
es necesario
D sabertrcmo
an se organizan los datos de forma fsica.
N
U
Para
na la base de datos, ejecute una sentencia de lenguaje de consulta estructurado (SQL),
F acceder
o
n
que es el lenguaje estndar de ANSI (American National Standards Institute) para el funcionamiento
Servidor de
Oracle

de bases de datos relacionales. SQL es un juego de sentencias con el que todos los programas y
usuarios acceden a los datos de Oracle Database. Los programas y las herramientas de Oracle a
menudo permiten el acceso de usuarios a la base de datos sin utilizar directamente SQL, pero estas
aplicaciones a su vez deben utilizar SQL al ejecutar la solicitud del usuario.
SQL proporciona sentencias para distintas tareas, que incluyen las siguientes:
Consulta de datos
Insercin, actualizacin y supresin de filas en una tabla
Creacin, sustitucin, modificacin y borrado de objetos
Control de acceso a la base de datos y los objetos
Garanta de integridad y consistencia de la base de datos
SQL unifica todas las tareas anteriores en un lenguaje consistente y permite trabajar con datos en el
nivel lgico.

Oracle Database: Conceptos Fundamentales de SQL I I-30

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Sentencias SQL
SELECT
INSERT
UPDATE
DELETE
MERGE

Lenguaje de Manipulacin de Datos (DML)

CREATE
ALTER
DROP
RENAME
TRUNCATE
COMMENT

Lenguaje de Definicin de Datos (DDL)

a
s
a
)h
GRANT
g
r
Lenguaje de Control de Datos (DCL)
o e
REVOKE
a
s
de Guid
y
COMMIT
o
pr ent
ROLLBACK
Control de Transacciones @
SAVEPOINT
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Sentencias SQL
le
N
b
a
O
Sentencias SQL soportadas
por
el
de Oracle de los estndares de la industria Oracle
CI elnscumplimiento
fer cumplimento
CorporationA
asegura
futuro con la evolucin de los estndares mediante la
implicacin
ra activa del personal clave en los comits de estndares SQL. Los comits
ND den-forma
t
U
aceptados
por
la
industria
son ANSI e ISO (International Standards Organization). Tanto ANSI como
F no
ISO han aceptado SQL como el lenguaje estndar de las bases de datos relacionales.
Sentencia

Descripcin

SELECT
INSERT
UPDATE
DELETE
MERGE
CREATE
ALTER
DROP
RENAME
TRUNCATE
COMMENT
GRANT
REVOKE
COMMIT
ROLLBACK
SAVEPOINT

Recupera datos de la base de datos, introduce nuevas filas, cambia las existentes y
elimina las filas no deseadas de las tablas en la base de datos, respectivamente.
Conocidos colectivamente lenguaje de manipulacin de datos (DML).
Configura, cambia y elimina las estructuras de datos de las tablas. Conocidos
colectivamente como lenguaje de definicin de datos (DDL).

Proporciona o elimina los derechos de acceso a Oracle Database y a las.


estructuras que contiene.
Gestiona los cambios realizados por las sentencias DML. Los cambios en los
datos se pueden agrupar en transacciones lgicas.
Oracle Database: Conceptos Fundamentales de SQL I I-31

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Entornos de Desarrollo para SQL


Existen dos entornos de desarrollo para este curso:
La herramienta principal es Oracle SQL Developer.
Tambin se puede utilizar la interfaz de lnea de
comandos SQL*Plus.

s
a
h
)
SQL Developer
SQL*Plus org

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Entornos de Desarrollo para SQL
le
N
b
a
O
SQL Developer
CI nsfer
A
Dse desarrolla
Este curso
a mediante Oracle SQL Developer como la herramienta para la ejecucin de
r
N
t
U
sentencias
n en los ejemplos de las lecciones y prcticas. SQL Developer versin 1.5.4 se
F ntratadas
o
incluye con Oracle Database 11g y es la herramienta por defecto para esta clase.

SQL*Plus
Tambin se puede utilizar el entorno de SQL*Plus para ejecutar todos los comandos SQL tratados en
este curso.
Nota
Consulte el apndice C para obtener informacin sobre el uso de SQL Developer, que incluye
instrucciones simples sobre la instalacin de la versin 1.5.4.
Consulte el apndice D para obtener ms informacin sobre el uso de SQL*Plus.

Oracle Database: Conceptos Fundamentales de SQL I I-32

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Objetivos del curso, agenda y apndices utilizados en


este curso
Visin general de Oracle Database 11g y productos
relacionados
Visin general de los conceptos y terminologa de
gestin de bases de datos relacionales
Introduccin a SQL y sus entornos de desarrollo
Esquema HR y tablas utilizadas en este curso

s
a
h
Documentacin y recursos adicionales de Oracle
rg)
o

Database 11g
sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I I-33

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Esquema Human Resources (HR)

DEPARTMENTS
department_id
department_name
manager_id
location_id

LOCATIONS
location_id
street_address
postal_code
city
state_province
country_id

JOB_HISTORY
employee_id
start_date
end_date
job_id
department_id

EMPLOYEES
employee_id
first_name
last_name
email
phone_number
hire_date
job_id
salary
commission_pct
manager_id
department_id

COUNTRIES
country_id
country_name
region_id

s
a
h
JOBS
rg)
o

REGIONS
sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
RHuman
Descripcin del esquema
P
e Resources (HR)
l
N
b
El esquema Human
ra (HR) forma parte de los esquemas de ejemplo de Oracle que se
IOResources
e
C
f
pueden instalar
ns Database. Las sesiones prcticas de este curso utilizan datos del esquema
DA entrOracle
a
N
HR.U
F nonDescripciones de las Tablas
job_id
job_title
min_salary
max_salary

region_id
region_name

REGIONS contiene filas que representan una regin, como Amrica, Asia, etc.
COUNTRIES contiene filas para pases, que estn asociados a una regin.
LOCATIONS contiene la direccin concreta de una oficina, almacn o fbrica de una compaa
en un pas determinado.
DEPARTMENTS muestra detalles de los departamentos en los que trabajan los empleados. Cada
departamento puede tener una relacin que represente al gestor del departamento en la tabla
EMPLOYEES.
EMPLOYEES contiene detalles sobre cada empleado que trabaja en un departamento. Puede que
algunos empleados no estn asignados a ningn departamento.
JOBS contiene los tipos de cargos que puede tener cada empleado.
JOB_HISTORY contiene el historial del trabajo de los empleados. Si un empleado cambia de
departamento dentro de un mismo cargo o cambia de cargo dentro de un mismo departamento,
se insertar una nueva fila en esta tabla con la informacin del antiguo cargo del empleado.

Oracle Database: Conceptos Fundamentales de SQL I I-34

Fundacin Proydesa

Tablas Utilizadas en el Curso


Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

EMPLOYEES

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
DEPARTMENTS
JOB_GRADES
a
d
h
n
t
(fu use
A
Copyright 2010, Oracle
to Todos los derechos reservados.
ESy/o sussefiliales.
D
OY licen
R
Tablas Utilizadas en elP
Curso le
N
btablas principales utilizadas en este curso:
a
O
r
A continuacinCseI muestran
las
e
A ansfproporciona detalles de todos los empleados
Tabla
EMPLOYEES:
D
N DEPARTMENTS:
-tr
proporciona detalles de todos los departamentos
n
F UTabla
o
n
Tabla JOB_GRADES: proporciona detalles de los salarios de diferentes grados
Adems de estas tablas, tambin utilizar otras tablas mostradas en la diapositiva anterior, como
LOCATIONS y JOB_HISTORY.
Nota: la estructura y datos de todas las tablas se proporcionan en el Apndice B.

Oracle Database: Conceptos Fundamentales de SQL I I-35

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Objetivos del curso, agenda y apndices utilizados en este


curso
Visin general de Oracle Database 11g y productos
relacionados
Visin general de los conceptos y terminologa de gestin
de bases de datos relacionales
Introduccin a SQL y sus entornos de desarrollo
Esquema HR y tablas utilizadas en este curso

s
a
h
Documentacin y recursos adicionales de Oracle
rg)
o

Database 11g
sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I I-36

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Documentacin de Oracle Database

Oracle Database New Features Guide


Oracle Database Reference
Oracle Database SQL Language Reference
Oracle Database Concepts
Oracle Database SQL Developer User's Guide,
Release 1.5

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Documentacin de Oracle Database
le
N
b
a
O
I
Navegue a http://www.oracle.com/pls/db102/homepage
para acceder a la biblioteca de
er
C
f
s
A
documentacin
D detrOracle
an Database 10g.
N
U
Navegue
acceder a la biblioteca de
n
F na ohttp://www.oracle.com/pls/db112/homepagepara
documentacin de Oracle Database 11g.

Oracle Database: Conceptos Fundamentales de SQL I I-37

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Recursos Adicionales
Para obtener ms informacin sobre Oracle Database 11g,
consulte:
Oracle Database 11g: New Features eStudies
Serie Oracle by Example (OBE): Oracle Database 11g
http://www.oracle.com/technology/obe/11gr1_db/index.htm

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I I-38

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Resumen
En esta leccin, debe haber aprendido lo siguiente:
Oracle Database 11g ampla:
Las ventajas de grids de infraestructura
Las capacidades de gestin de informacin existente
Las funciones para utilizar y gestionar todos los entornos de
desarrollo para aplicaciones principales como PL/SQL,
Java/JDBC, .NET, XML y etc.

La base de datos se basa en ORDBMS


s
a
h
Las bases de datos relacionales se componen de
rg)
o
relaciones, gestionadas mediante operaciones relacionales

sa ide
e
y regidas por restricciones de integridad de datos
d
oy nt Gu
r
p
Con el servidor de Oracle, puede almacenar
y egestionar
@
d
n
u
o
informacin mediante SQL
St
aci

is
d
h
n
t
u
f
(
se
u
A
Copyright 2010, Oracle
to Todos los derechos reservados.
ESy/o sussefiliales.
D
OY licen
R
P ble
Resumen
N
ra de datos relacionales se componen de objetos o relaciones. Se
IO defebases
Los sistemas de
gestin
C
A aoperaciones
gestionanD
mediante
y se rigen por restricciones de integridad de datos.
ns
r
N
t
U
Oracle
n genera productos y servicios para cumplir las necesidades de RDBMS. Los
F Corporation
o
n
productos principales son los siguientes:

Oracle Database, que almacena y gestiona informacin mediante SQL.


Oracle Fusion Middleware , que desarrolla, despliega y gestiona servicios de negocio modulares
que se pueden integrar y volver a utilizar
Oracle Enterprise Manager Grid Control, que gestiona y automatizar tareas administrativas entre
los juegos de sistemas en un entorno de cuadrcula
SQL
El servidor de Oracle soporta SQL del estndar de ANSI y contiene extensiones. SQL es un lenguaje
que se utiliza para comunicarse con el servidor para acceder, manipular y controlar datos.

Oracle Database: Conceptos Fundamentales de SQL I I-39

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Prctica I: Visin General


En esta prctica se abordan los siguientes temas:
Inicio de Oracle SQL Developer
Creacin de una conexin a la base de datos
Examen de tablas HR

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Prctica I: Visin General
le
N
b
a
O
r
En esta prctica,
lasesiguientes
tareas:
CIrealiza
f
s
A
Iniciar
Oracle
SQL
Developer
y
crear
una nueva conexin a la cuenta ora1.
D tran
N
- SQL Developer para examinar objetos de datos en la cuenta ora1. La cuenta
Oracle
n
F UUtilizar
o
n
ora1 contiene las tablas de esquema HR.

Observe la siguiente ubicacin de los archivos de los ejercicios prcticos:


\home\oracle\labs\sql1\labs
Si se le pide que guarde algn archivo de los ejercicios prcticos, gurdelo en esta ubicacin.
En las prcticas, puede que haya ejercicios que estn precedidos por las frases Si tiene tiempo o Si
desea superarse a s mismo. Realice estos ejercicios slo si ha terminado el resto de ejercicios en el
tiempo asignado y si desea poner a prueba sus habilidades.
Realice las prcticas despacio y de forma precisa. Puede experimentar guardando y ejecutando los
archivos de comandos. Si tiene alguna duda en cualquier momento, pregunte a su instructor.
Nota: todas las prcticas escritas utilizan Oracle SQL Developer como entorno de desarrollo.
Aunque se recomienda utilizar Oracle SQL Developer, tambin puede usar SQL*Plus disponible en
este curso.

Oracle Database: Conceptos Fundamentales de SQL I I-40

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa

Recuperacin de Datos Mediante la


Sentencia SQL SELECT

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Objetivos
Al finalizar esta leccin, debera estar capacitado para lo
siguiente:
Enumerar las capacidades de las sentencias SQL SELECT
Ejecutar una sentencia SELECT bsica

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Objetivos
le
N
b
a
O
Para extraer datosI de la base
erde datos, debe utilizar la sentencia SQL SELECT. Sin embargo, puede
C
f
s
A
que necesite
restringir
nlas columnas que se muestran. Esta leccin describe todas las sentencias
apara
r
ND
t
SELECT
necesarias
realizar estas acciones. Puede que desee crear sentencias SELECT que se
U
n
F
o
n
pueden utilizar ms de una vez.

Oracle Database: Conceptos Fundamentales de SQL I 1-2

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Sentencia SELECT bsica


Expresiones aritmticas y valores NULL en la sentencia
SELECT

Alias de columnas
Uso del operador de concatenacin, cadenas de
caracteres de literales, operador de comillas alternativo y
palabra clave DISTINCT
Comando DESCRIBE

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 1-3

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Capacidades de las Sentencias SQL SELECT

Proyeccin

Seleccin

Tabla 1

Tabla 1

a
s
a
)h
g
Unin
r
o e
a
s
de Guid
y
o
pr ent
@
n
oTabla
tud
i
S
c
2
Tabla 1
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
iceSELECT
RO eSQL
l
Capacidades de las Sentencias
P
l
N recupera
binformacin
a
O
Una sentencia SELECT
de la base de datos. Con una sentencia SELECT, se
r
I
e
C
f
s
A
puede hacer
an las columnas de una tabla devueltas por una consulta. Seleccione tantas
rseleccione
ND lonsiguiente:
t

Proyeccin:
U
F columnas
no como sea necesario.
Seleccin: seleccione las filas de una tabla devueltas por una consulta. Se pueden utilizar
diferentes criterios para restringir las filas recuperadas.
Uniones: rena los datos almacenados en diferentes tablas especificando el enlace entre ellas.
Las uniones SQL se tratan de forma ms detallada en la leccin titulada Visualizacin de
Datos de Varias Tablas mediante Uniones.

Oracle Database: Conceptos Fundamentales de SQL I 1-4

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Sentencia SELECT Bsica

SELECT *|{[DISTINCT] column|expression [alias],...}


FROM
table;

SELECT identifica las columnas que se van a mostrar.


FROM identifica la tabla que contiene estas columnas.

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
Sentencia SELECT Bsica
P
l
N rabsentencia
O
En su formato ms
simple,euna
SELECT debe incluir lo siguiente:
I
f
s
AC SELECT,
Una D
clusula
que
especifica
las columnas que se van a mostrar.
n
a
r
N
t
clusula
- FROM, que identifica la tabla que contiene las columnas que se muestran en la
F UUna
clusula
nonSELECT.
En la sintaxis:
SELECT
*
DISTINCT
column|expression
alias
FROM table

es una lista de una o ms columnas.


selecciona todas las columnas.
suprime los duplicados.
selecciona la columna o expresin especificada.
proporciona diferentes cabeceras de las columnas seleccionadas.
especifica la tabla que contiene las columnas.

Nota: a lo largo de este curso, las palabras palabra clave, clusula y sentencia se utilizan como se
describe a continuacin:
Una palabra clave hace referencia a un elemento SQL individual (por ejemplo, SELECT y
FROM son palabras clave).
Una clusula es parte de una sentencia SQL (por ejemplo, SELECT employee_id,
last_name, etc.).
Una sentencia es una combinacin de dos o ms clusulas (por ejemplo, SELECT * FROM
employees).
Oracle Database: Conceptos Fundamentales de SQL I 1-5

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Seleccin de Todas las Columnas

SELECT *
FROM
departments;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Seleccin de Todas las Columnas
le
N
b
a
O
I las columnas
Puede mostrarC
todas
datos en una tabla insertando la siguiente palabra clave
e(*).r En eldeejemplo
f
s
Aun asterisco
SELECTD
con
de la diapositiva, la tabla DEPARTMENTS contiene
n
a
r
N
t
cuatro
U columnas:
n- DEPARTMENT_ID, DEPARTMENT_NAME, MANAGER_ID y LOCATION_ID. La
F
o
n
tabla contiene ocho filas, una por cada departamento.
Tambin puede mostrar todas las columnas en la tabla mostrando todas las columnas despus de la
palabra clave SELECT. Por ejemplo, la siguiente sentencia SQL (como el ejemplo de la diapositiva)
muestra todas las columnas y filas de la tabla DEPARTMENTS:
SELECT
FROM

department_id, department_name, manager_id, location_id


departments;

Nota: en SQL Developer, puede introducir la sentencia SQL en una hoja de trabajo de SQL y hacer
clic en el icono Execute Statement o pulsar [F9] para ejecutar la sentencia. La salida mostrada en
la pgina con separadores Results aparece como se muestra en la diapositiva.

Oracle Database: Conceptos Fundamentales de SQL I 1-6

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Seleccin de Columnas Concretas

SELECT department_id, location_id


FROM
departments;

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Seleccin de Columnas Concretas
le
N
b
a
O
Tambin puede utilizar
SELECT para mostrar las columnas concretas de la tabla
r
I lafesentencia
C
s
A
especificando
los nombres
de columna, separados por comas. El ejemplo de la diapositiva muestra
andepartamento
r
ND
t
todos
los
nmeros
de
y ubicacin de la tabla DEPARTMENTS.
U
F non
En la clusula SELECT, especifique las columnas que desee, en el orden en el que desee que

aparezcan en la salida. Por ejemplo, para mostrar la ubicacin antes del nmero de departamento (de
izquierda a derecha), utilice la siguiente sentencia:
SELECT location_id, department_id
FROM
departments;

Oracle Database: Conceptos Fundamentales de SQL I 1-7

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Escritura de Sentencias SQL

Las sentencias SQL no son sensibles a maysculas/


minsculas.
Las sentencias SQL se pueden introducir en una o ms
lneas.
Las palabras clave no se pueden abreviar o dividir entre
lneas.
Las clusulas se suelen colocar en lneas independientes.
El sangrado se utiliza para mejorar la legibilidad.
s
a
h
En SQL Developer, las sentencias SQL tambin pueden
rg)
o

terminar con un punto y coma (;). Los puntos y comas


sa ison
e
e
d
d
necesarios si ejecuta varias sentencias SQL.
roy nt Gu
p
En SQL*Plus, debe finalizar cada sentencia
de con un
n@ tuSQL
o
i
punto y coma (;).
dac is S

fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Escritura de Sentencias SQL le
N y directrices,
b puede construir sentencias vlidas que son fciles de leer y
a
Con estas sencillas
r
IOreglas
e
C
sf
editar: DA
n
a
Nsentencias
Las
-tr SQL no son sensibles a maysculas/minsculas (a menos que se indique).
n
F ULas
o
sentencias
SQL se pueden introducir en una o ms lneas.
n

Las palabras clave no se pueden dividir entre lneas o abreviar.


Las clusulas se suelen colocar en lneas independientes para que resulte ms fcil su lectura o
edicin.
El sangrado se debe utilizar para que sea ms fcil de leer el cdigo.
Normalmente, las palabras clave se introducen en maysculas; el resto de palabras, como
nombres de tablas y columnas, se introducen en minsculas.
Ejecucin de Sentencias SQL
En SQL Developer, haga clic en el icono Run Script o pulse [F5] para ejecutar el comando o los
comandos en la hoja de trabajo de SQL. Tambin puede hacer clic en el icono Execute Statement o
pulsar [F9] para ejecutar una sentencia SQL en la hoja de trabajo de SQL. El icono Execute
Statement ejecuta la sentencia que indica el puntero del mouse en el cuadro Enter SQL Statement
mientras que el icono Run Script ejecuta todas las sentencias del cuadro Enter SQL Statement. El
icono Execute Statement muestra la salida de la consulta en la pgina con separadores Results,
mientras que el icono Run Script emula la visualizacin SQL*Plus y muestra la salida en la pgina
con separadores Script Output.
Mediante SQL*Plus, termine la sentencia SQL con un punto y coma y, a continuacin, pulse la tecla
[Intro] para ejecutar el comando.
Oracle Database: Conceptos Fundamentales de SQL I 1-8

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Valores por Defecto de Cabeceras de Columna

SQL Developer:
Alineacin de cabeceras por defecto: alineacin a la
izquierda
Visualizacin de cabeceras por defecto: maysculas

SQL*Plus:
Las cabeceras de columna de carcter y de fecha se alinean
a la izquierda
Las cabeceras de columna de nmero se alinean a la
s
derecha
a
h
)
Visualizacin de cabeceras por defecto: maysculas org

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Valores por Defecto de Cabeceras
le de Columna
N
b
a
O
I las cabeceras
En SQL Developer,
de columna se muestran en maysculas y alineadas a la izquierda.
er hire_date,
Clast_name,
f
s
A
SELECT
salary
n
D
a
r
N
t
nFUFROMnoemployees;

Puede sustituir la visualizacin de cabecera de columna por un alias. Los alias de columna se tratarn
ms adelante en esta leccin.
Oracle Database: Conceptos Fundamentales de SQL I 1-9

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Sentencia SELECT bsica


Expresiones aritmticas y valores NULL en la sentencia
SELECT

Alias de columnas
Uso del operador de concatenacin, cadenas de
caracteres de literales, operador de comillas alternativo y
palabra clave DISTINCT
Comando DESCRIBE

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 1-10

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Expresiones Aritmticas
Crear expresiones con datos de fecha y nmeros mediante
operadores aritmticos.
Operador

Descripcin

Sumar

Restar

Multiplicar

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Expresiones Aritmticas
le
N
b
a
O
I modificar
Puede que necesite
er la forma en la que se muestran los datos, realizar clculos o consultar
C
f
s
A
casos de D
esto es posible mediante las expresiones aritmticas. Una expresin
an Todo
r
Nposibilidades.
t
aritmtica
puede
contener
nombres
de columna, valores numricos constantes y operadores
U
n
F
o
n
aritmticos.
/

Dividir

Operadores Aritmticos
La diapositiva muestra los operadores aritmticos disponibles en SQL. Puede utilizar operadores
aritmticos en cualquier clusula de una sentencia SQL (excepto en la clusula FROM).
Nota: con los tipos de dato DATE y TIMESTAMP, slo puede utilizar los operadores de suma y resta.

Oracle Database: Conceptos Fundamentales de SQL I 1-11

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de Operadores Aritmticos

SELECT last_name, salary, salary + 300


FROM
employees;

a
s
a
)h
g
r
o e
a
s
de Guid
y

o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Uso de Operadores Aritmticos
le
N
b
a
O
El ejemplo de C
la Idiapositiva
operador de suma para calcular un aumento de salario de 300
erutilizaLael diapositiva
f
s
A
dlares para
todos
los
empleados.
tambin muestra una columna SALARY+300 en la
D tran
N
salida.
FU nonTenga en cuenta que la columna calculada resultante, SALARY+300, no es una nueva columna en la
tabla EMPLOYEES; es slo para visualizacin. Por defecto, el nombre de la nueva columna procede
del clculo que lo genera, en este caso, salary+300.
Nota: el servidor de Oracle ignora los espacios en blanco antes y despus del operador aritmtico.
Prioridad de Operadores
Si una expresin aritmtica contiene ms de un operador, la multiplicacin y divisin se evalan
primero. Si los operadores en una expresin tienen la misma prioridad, la evaluacin se realiza de
izquierda a derecha.
Puede utilizar los parntesis para forzar la expresin que se incluye entre parntesis para que se
evale primero.
Reglas de Prioridad
La multiplicacin y divisin se producen antes de la suma y la resta.
Los operadores de la misma prioridad se evalan de izquierda a derecha.
Los parntesis se utilizan para sustituir la prioridad por defecto o para aclarar la sentencia.
Oracle Database: Conceptos Fundamentales de SQL I 1-12

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Prioridad de Operadores

SELECT last_name, salary, 12*salary+100


FROM
employees;

SELECT last_name, salary, 12*(salary+100)


FROM
employees;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
r
t
p
n
e
@

on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Prioridad de Operadores (continuacin)
le
N
b
a
O
I de la diapositiva
El primer ejemplo
muestra el apellido, el salario y la compensacin anual de los
er
C
f
s
A
empleados.
anual multiplicando el salario mensual por 12, ms un incentivo
D Calcula
alancompensacin
r
t
deF100
Tenga
en
cuenta
que
la
multiplicacin se realiza antes de la suma.
UNdlares.
n
o
n
Nota: utilice los parntesis para reforzar el orden estndar de prioridad y mejorar la claridad. Por
2

ejemplo, la expresin de la diapositiva se puede escribir como (12*salary)+100 sin producir


ningn cambio en el resultado.
Uso de Parntesis
Puede sustituir las reglas de prioridad utilizando parntesis para especificar el orden en el que desea
que se ejecuten los operadores.
El segundo ejemplo de la diapositiva muestra el apellido, el salario y la compensacin anual de los
empleados. Calcula la compensacin anual de la siguiente forma: suma un incentivo mensual de 100
dlares al salario mensual y, a continuacin, multiplica dicho subtotal por 12. Debido a los
parntesis, la suma tiene prioridad sobre la multiplicacin.

Oracle Database: Conceptos Fundamentales de SQL I 1-13

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Definicin de Valor Nulo

Un valor nulo es un valor que no est disponible, sin


asignar, desconocido o que no es aplicable.
Un valor nulo no es lo mismo que un cero o un espacio en
blanco.
SELECT last_name, job_id, salary, commission_pct
FROM
employees;

a
s
a

)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Definicin de Valor Nulo
le
N
b
a
O
Ide un valor
Si una fila carece
er de datos para una columna concreta, se dice que dicho valor es nulo o
C
f
s
A
que contiene
D un valor
annulo.
r
N
t
U
Un
nes un valor que no est disponible, sin asignar, desconocido o que no es aplicable. Un
Fvalor nnulo
o
valor nulo no es lo mismo que un cero o un espacio en blanco. El cero es un nmero y el espacio en
blanco es un carcter.
Las columnas de cualquier tipo de dato pueden contener valores nulos. Sin embargo, algunas
restricciones (NOT NULL y PRIMARY KEY) evitan que se utilicen valores nulos en la columna.
En la columna COMMISSION_PCT de la tabla EMPLOYEES, observe que slo pueden percibir una
comisin un director de ventas o un vendedor. El resto de los empleados no tienen derecho a percibir
comisiones. Un valor nulo representa este hecho.
Nota: por defecto, SQL Developer utiliza el literal, (null), para identificar los valores nulos. Sin
embargo, se puede definir en un valor ms relevante para el usuario. Para ello, seleccione Preferences
en el men Tools. En el cuadro de dilogo Preferences, ample el nodo Database. Haga clic en
Advanced Parameters y en el panel derecho, para Display Null value As, introduzca un valor
adecuado.

Oracle Database: Conceptos Fundamentales de SQL I 1-14

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Valores Nulos en Expresiones Aritmticas


Las expresiones aritmticas que contengan un valor nulo se
evalan como nulas.
SELECT last_name, 12*salary*commission_pct
FROM
employees;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Valores Nulos en Expresionesle
Aritmticas
N
b
a
O
I de columna
Si cualquier valor
er en una expresin aritmtica es nulo, el resultado es nulo. Por ejemplo,
C
f
s
A
si intentaD
realizar una
entre cero, recibir un error. Sin embargo, si divide un nmero entre
andivisin
r
t
unFvalor
el
resultado
ser
nulo o desconocido.
UNnulo,
n
o
n
En el ejemplo de la diapositiva, el empleado Whalen no percibe ninguna comisin. Porque la
columna COMMISSION_PCT en la expresin aritmtica es nula, por lo tanto, el resultado es nulo.
Para obtener ms informacin, consulte la seccin sobre elementos bsicos de Oracle SQL en Oracle
Database SQL Language Reference (Referencia sobre Lenguaje SQL de Oracle Database) para la
base de datos 10g u 11g.

Oracle Database: Conceptos Fundamentales de SQL I 1-15

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Sentencia SELECT bsica


Expresiones aritmticas y valores NULL en la sentencia
SELECT

Alias de columnas
Uso del operador de concatenacin, cadenas de
caracteres de literales, operador de comillas alternativo y
palabra clave DISTINCT
Comando DESCRIBE

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 1-16

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Definicin de Alias de Columna


Un alias de columna:
Cambia el nombre de una cabecera de columna
Es til para realizar clculos
Sigue inmediatamente al nombre de columna (tambin
puede ser la palabra clave opcional AS entre el nombre de
columna y el alias)
Necesita comillas dobles si contiene espacios o caracteres
especiales o si es sensible a maysculas/minsculas

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Definicin de Alias de Columna
le
N
b
a
O
I defeunar consulta, SQL Developer normalmente utiliza el nombre de la
Al mostrar el resultado
C
s la cabecera de columna. Esta cabecera puede que no sea descriptiva y,
A
columna D
seleccionada
ncomo
a
r
N
t
por
lo tanto, puede
U
n- resultar difcil de entender. Puede cambiar una cabecera de columna mediante un
F
o
n
alias de columna.
Especifique el alias despus de la columna en la lista SELECT con un espacio como separador. Por
defecto, las cabeceras de alias aparecen en mayscula. Si el alias contiene espacios o caracteres
especiales (como # o $) o si es sensible a maysculas/minsculas, incluya el alias entre comillas
dobles ("").

Oracle Database: Conceptos Fundamentales de SQL I 1-17

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de Alias de Columna

SELECT last_name AS name, commission_pct comm


FROM
employees;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@

on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Uso de Alias de Columna
le
N
b
a
O
r nombres y los porcentajes de comisin de todos los empleados.
I muestrafelos
El primer ejemplo
Cpalabra
s
A
Observe que
la
clave
opcional AS se ha utilizado antes que el nombre de alias de columna. El
D tran
N
resultado
es el mismo si se utiliza o no la palabra clave AS. Observe tambin que la
U deolanconsulta
F
n
sentencia SQL tiene los alias de columna name y comm en minscula, mientras que el resultado de
SELECT last_name "Name" , salary*12 "Annual Salary"
FROM
employees;

la consulta muestra las cabeceras de columna en mayscula. Como se indica en la diapositiva


anterior, las cabeceras de columna aparecen en mayscula por defecto.
El segundo ejemplo muestra los apellidos y los salarios anuales de todos los empleados. Debido a
que Annual Salary contiene un espacio, est incluido entre comillas dobles. Tenga en cuenta que
la cabecera de columna de la salida es exactamente la misma que en el alias de columna.

Oracle Database: Conceptos Fundamentales de SQL I 1-18

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Sentencia SELECT bsica

Expresiones aritmticas y valores NULL en la sentencia


SELECT

Alias de columnas
Uso del operador de concatenacin, cadenas de
caracteres de literales, operador de comillas alternativo y
palabra clave DISTINCT
Comando DESCRIBE

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 1-19

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Operador de Concatenacin
Un operador de concatenacin:
Enlaza columnas o cadenas de caracteres a otras columnas
Se representa con dos barras verticales (||)
Crea una columna resultante que es una expresin de
carcter
SELECT
FROM

last_name||job_id AS "Employees"
employees;

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude

o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Operador de Concatenacin le
rabcolumnas, expresiones aritmticas o valores constantes para crear
ION afeotras
Puede enlazar C
columnas
una expresin
ns con el operador de concatenacin (||). Las columnas a ambos lados del
DA detcarcter
a
r
N
operador
n- para crear una sola columna de salida.
FU nseocombinan
En el ejemplo, LAST_NAME y JOB_ID estn concatenados y se les ha otorgado el alias

Employees. Observe que el apellido del empleado y cdigo de trabajo se combinan para crear una
nica columna de salida.
La palabra clave AS antes del nombre de alias facilita la lectura de la clusula SELECT.
Valores Nulos con el Operador de Concatenacin
Si concatena un valor nulo con una cadena de caracteres, el resultado es una cadena de caracteres.
LAST_NAME || NULL tiene como resultado LAST_NAME.
Nota: tambin puede concatenar expresiones de fecha con otras expresiones o columnas.

Oracle Database: Conceptos Fundamentales de SQL I 1-20

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Cadenas de Caracteres Literales

Un literal es un carcter, un nmero o una fecha que se


incluye en la sentencia SELECT.

Los valores literales de caracteres y fecha se deben incluir


entre comillas simples.
Cada cadena de caracteres es la salida una vez para
cada fila devuelta.

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Cadenas de Caracteres Literales
le
N
b
a
O
Un literal es un carcter,
un
I
ernmero o una fecha que se incluye en la lista SELECT. No es un nombre
C
f
s
A
de columna
o un alias
nde columna. Se imprime para cada fila devuelta. Las cadenas literales de texto
apueden
r
NDlibre
t
de formato
se
incluir en el resultado de consultas y se tratan igual que la lista SELECT.
U
F non
Los literales de caracteres y fecha se deben delimitar con comillas simples (' '); no es necesario
delimitar los literales de nmero de forma similar.

Oracle Database: Conceptos Fundamentales de SQL I 1-21

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de Cadenas de Caracteres Literales

SELECT last_name ||' is a '||job_id


AS "Employee Details"
FROM
employees;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent

@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Uso de Cadenas de CaracteresleLiterales
ab los apellidos y cdigos de trabajo de todos los empleados. La
ON fermuestra
El ejemplo de C
la Idiapositiva
A la cabecera
columna D
tiene
ns Employee Details. Observe los espacios incluidos entre comillas simples
a
r
N
t
en laUsentencia
Los espacios mejoran la legibilidad de la salida.
F nonSELECT.
En el siguiente ejemplo, el apellido y el salario de cada empleado se concatenan con un literal para
proporcionar a las filas devueltas ms significado:
SELECT last_name ||': 1 Month salary = '||salary Monthly
FROM
employees;

Oracle Database: Conceptos Fundamentales de SQL I 1-22

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Operador de Comillas (q) Alternativo

Especifique su propio delimitador de entrecomillado.


Seleccione cualquier delimitador.
Aumente la legibilidad y el uso.

SELECT department_name || q'[ Department's Manager Id: ]'


|| manager_id
AS "Department and Manager"
FROM departments;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
Operador de Comillas P
(q)R
Alternativo
le
N
b
a
O
r utilizan literales de caracteres en expresiones o condiciones. Si el
I
Muchas de lasC
sentencias
SQL
ecomilla
f
s
A
propio literal
contiene
una
simple, puede utilizar el operador de comillas (q) y seleccionar su
D tran
N
propio
n- de entrecomillado.
FU delimitador
o
n
Puede seleccionar cualquier delimitador adecuado, ya sea de un solo byte o multibyte, o bien
cualquiera de los siguientes pares de caracteres: [ ], { }, ( ) o < >.
En el ejemplo, la cadena contiene una comilla simple, que normalmente se interpreta como un
delimitador de una cadena de caracteres. Sin embargo, al utilizar el operador q, los corchetes [] se
utilizan como delimitador de entrecomillado. La cadena entre los delimitadores de corchetes se
interpreta como una cadena de caracteres literales.

Oracle Database: Conceptos Fundamentales de SQL I 1-23

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Filas Duplicadas
La visualizacin por defecto de las consultas incluye todas las
filas, tambin las filas duplicadas.

SELECT department_id
FROM
employees;

SELECT DISTINCT department_id


FROM
employees;

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Filas Duplicadas
le
N
b
a
O
I lo contrario,
A menos que indique
er SQL muestra los resultados de una consulta sin eliminar las filas
C
f
s
A
duplicadas.
nejemplo de la diapositiva muestra todos los nmeros de departamento de la
raObserve
ND Elnprimer
t
tabla
EMPLOYEES.
que los nmeros de departamento se repiten.
U
F no
Para eliminar filas duplicadas en el resultado, incluya la palabra clave DISTINCT en la clusula

SELECT inmediatamente despus de la palabra clave SELECT. En el segundo ejemplo de la


diapositiva, la tabla EMPLOYEES en realidad contiene 20 filas, pero slo hay siete nmeros de
departamento nicos en la tabla.
Puede especificar varias columnas despus del cualificador DISTINCT. El cualificador DISTINCT
afecta a todas las columnas seleccionadas y el resultado es cada combinacin distinta de columnas.
SELECT
FROM

DISTINCT department_id, job_id


employees;

Nota: tambin puede especificar la palabra clave UNIQUE, que es un sinnimo de la palabra clave
DISTINCT.
Oracle Database: Conceptos Fundamentales de SQL I 1-24

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Sentencia SELECT bsica


Expresiones aritmticas y valores NULL en la sentencia
SELECT

Alias de columnas
Uso del operador de concatenacin, cadenas de
caracteres de literales, operador de comillas alternativo y
palabra clave DISTINCT
Comando DESCRIBE

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 1-25

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Visualizacin de la Estructura de la Tabla

Utilizar el comando DESCRIBE para mostrar la estructura


de una tabla.
O seleccionar la tabla en el rbol Connections y utilizar el
separador Columns para ver la estructura de la tabla.
DESC[RIBE] tablename

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Visualizacin de la Estructura lde
e la Tabla
N
b
a
O
Puede mostrar la Iestructuraede
r una tabla mediante el comando DESCRIBE. El comando muestra los
C
f
s
A
nombres D
columna
de dato e indica si una columna debe contener datos (es decir, si la
any los tiposNOT
rrestriccin
N de
t
columna
tienenuna
NULL).
U
F no
En la sintaxis, table name es el nombre de cualquier tabla existente, vista o sinnimo accesible al
usuario.
Mediante la interfaz grfica de usuario de SQL Developer, puede seleccionar el rbol Connections y
utilizar el separador Columns para ver la estructura de la tabla.
Nota: el comando DESCRIBE est soportado tanto en SQL*Plus como en SQL Developer.

Oracle Database: Conceptos Fundamentales de SQL I 1-26

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso del Comando DESCRIBE

DESCRIBE employees

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
Uso del Comando DESCRIBE
P
N rabselmuestra la informacin sobre la estructura de la tabla EMPLOYEES
O
En el ejemplo de Ila
diapositiva
C sfe
medianteD
el A
comandonDESCRIBE.
N n-traresultante, Null indica que los valores de esta columna pueden ser desconocidos.
U
En
la
visualizacin
F no
NOT NULL
indica que una columna debe contener datos. Type muestra el tipo de dato de una
columna.
Los tipos de dato se describen en la siguiente tabla:

Tipo de Dato
NUMBER(p,s)
VARCHAR2(s)
DATE

Descripcin
Valor numrico que tiene un nmero mximo de dgitos p, con
dgitos s a la derecha del punto decimal.
Valor del carcter de longitud de variable del tamao mximo s.
Valor de fecha y hora entre el 1 de enero de 4712 a.C. y el
31 de diciembre de 9999 d.C.

Oracle Database: Conceptos Fundamentales de SQL I 1-27

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Prueba
Identificar las sentencias SELECT que se ejecutan correctamente.
1. SELECT first_name, last_name, job_id, salary*12
AS Yearly Sal
FROM
employees;
2. SELECT first_name, last_name, job_id, salary*12
"yearly sal"
FROM
employees;
3. SELECT first_name, last_name, job_id, salary AS
"yearly sal"
FROM
employees;

s
a
h
rg)
o

sa ide
e
d
4. SELECT first_name+last_name AS name, job_Id,
roy nt Gu
p
salary*12 yearly sal
@ tude
n
o
i
FROM
employees;
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Respuesta: 2, 3
le
N
b
a
O
CI nsfer
A
ND n-tra
U
F no

Oracle Database: Conceptos Fundamentales de SQL I 1-28

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Resumen
En esta leccin, debe haber aprendido lo siguiente:
Escribir una sentencia SELECT que:
Devuelva todas las filas y columnas de una tabla
Devuelva las columnas especificadas de una tabla
Utilice alias de columna para mostrar cabeceras de columna
ms descriptivas

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Resumen
le
N
b
a
O
r
I haber aprendido
En esta leccin,
debe
cmo recuperar datos de una tabla de base de datos con la
AC ansfe
sentenciaD
SELECT.
N SELECT
column [alias],...}
n-tr *|{[DISTINCT]
FU noFROM
table;
SELECT *|{[DISTINCT] column|expression [alias],...}
FROM table;

En la sintaxis:
SELECT
*
DISTINCT
column|expression
alias
FROM table

es una lista de una o ms columnas.


selecciona todas las columnas.
suprime los duplicados.
selecciona la columna o expresin especificada.
proporciona diferentes cabeceras de las columnas seleccionadas.
especifica la tabla que contiene las columnas.

Oracle Database: Conceptos Fundamentales de SQL I 1-29

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Prctica 1: Visin General


En esta prctica se abordan los siguientes temas:
Seleccin de todos los datos de diferentes tablas
Descripcin de la estructura de tablas
Realizacin de clculos aritmticos y especificacin de
nombres de columna

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Prctica 1: Visin General
le
N
b
a
O
En esta prctica, Iescribir e
consultas
simples SELECT. Las consultas tratan la mayora de las
r
C
f
s
A
operaciones
y
clusulas
SELECT
que
ha aprendido en esta leccin.
D tran
N
FU non-

Oracle Database: Conceptos Fundamentales de SQL I 1-30

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa

Restriccin y Ordenacin de Datos

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Objetivos
Al finalizar esta leccin, debera estar capacitado para lo
siguiente:
Limitar las filas recuperadas por una consulta
Ordenar las filas recuperadas por una consulta
Usar la sustitucin con ampersand para restringir y
ordenar la salida en tiempo de ejecucin

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Objetivos
le
N
b
a
O
r de datos, puede que necesite realizar las siguientes acciones:
I deflaebase
Al recuperar los
datos
C
s
A
Restringir
n de datos que se muestran
aorden
rfilas
ND nlas
t

Especificar
el
en el que aparecen las filas
U
F no
Esta leccin explica las sentencias SQL que se utilizan para realizar las acciones anteriores.

Oracle Database: Conceptos Fundamentales de SQL I 2-2

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Limitacin de filas con:


Clusula WHERE
Condiciones de comparacin con las condiciones =, <=,
BETWEEN, IN, LIKE y NULL
Condiciones lgicas mediante los operadores AND, OR y NOT

Reglas de prioridad de los operadores en una expresin


Ordenacin de filas mediante la clusula ORDER BY

Variables de sustitucin
Comandos DEFINE y VERIFY

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 2-3

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Limitacin de Filas con una Seleccin

EMPLOYEES

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Limitacin de Filas con una Seleccin
le
N
b
a
O
En el ejemplo C
deIla diapositiva,
que desea mostrar todos los empleados del departamento 90.
f90erde lasuponga
s
Las filas D
conAun valornde
columna DEPARTMENT_ID son las nicas que se devuelve. Este
ra es la base de la clusula WHERE en SQL.
Nde restriccin
t
mtodo
U
n
F no
recuperar todos
los empleados del
departamento 90

Oracle Database: Conceptos Fundamentales de SQL I 2-4

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Limitacin de las Filas Seleccionadas

Restringir las filas devueltas al utilizar la clusula WHERE:


SELECT *|{[DISTINCT] column|expression [alias],...}
FROM
table
[WHERE condition(s)];

La clusula WHERE sigue a la clusula FROM.

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Limitacin de las Filas Seleccionadas
le
N
b
a
O
Puede restringir las
que
la consulta al utilizar la clusula WHERE. Una clusula WHERE
eserdevuelve
CI filas
f
s
contiene D
unaAcondicin
que
debe
cumplir
e, inmediatamente despus, le sigue la clusula FROM. Si
n
a
r
N
t
laFcondicin
U oesn-verdadera, se devolver la fila que cumpla con la condicin.
n
En la sintaxis:
restringe la consulta a filas que cumplan con una condicin.

WHERE

est compuesto por nombres de columna, expresiones,


constantes y un operador de comparacin. Una condicin especifica
una combinacin de una o ms expresiones y operadores lgicos
(booleanos) y devuelve un valor de TRUE, FALSE o UNKNOWN.
La clusula WHERE puede comparar valores en columnas, literales, expresiones aritmticas o
funciones. Consta de tres elementos:
Nombre de la columna
Condicin de comparacin
Nombre de la columna, constante o lista de valores
condition

Oracle Database: Conceptos Fundamentales de SQL I 2-5

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de la Clusula WHERE

SELECT employee_id, last_name, job_id, department_id


FROM
employees
WHERE department_id = 90;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
Uso de la Clusula WHERE
P
N SELECT
bl recupera el ID de empleado, apellido, ID de cargo y nmero de
a
O
En el ejemplo, laIsentencia
r
feempleados del departamento 90.
s
AC
departamento
de todos
los
n
D
rael alias de columna en la clusula WHERE.
N
t
U
Nota:
puede
utilizar
n
F no

Oracle Database: Conceptos Fundamentales de SQL I 2-6

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fechas y Cadenas de Caracteres

Las cadenas de caracteres y valores de fecha se incluyen


entre comillas simples.
Los valores de caracteres son sensibles a
maysculas/minsculas y los valores de datos son sensibles
a formato.
El formato de visualizacin de la fecha por defecto es
DD-MON-RR.
SELECT last_name, job_id, department_id
FROM
employees
WHERE last_name = 'Whalen' ;

a
s
a
)h
g
r
o e
a
s
SELECT last_name
de Guid
y
o
FROM
employees
pr ent
@
WHERE hire_date = '17-FEB-96' ; n
o
tud
i
S
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Fechas y Cadenas de Caracteres
le
N
b
a
O
Las fechas y cadenas
de la clusula WHERE se deben incluir entre comillas simples
I de caracteres
fer numricas
AC alasnsconstantes
(''). SinD
embargo,
no se deben incluir entre comillas simples.
r
N
t
Todas
n- de caracteres son sensibles a maysculas/minsculas. En el siguiente ejemplo,
FU lasnbsquedas
o
no se devuelve ninguna fila porque la tabla EMPLOYEES almacena todos los apellidos en minscula
y en mayscula:
SELECT last_name, job_id, department_id
FROM
employees
WHERE last_name = 'WHALEN';

Las bases de datos Oracle almacenan fechas en un formato numrico interno que representa el siglo,
el ao, el mes, las horas, los minutos y los segundos. La visualizacin de la fecha por defecto es
DD-MON-RR.
Nota: para obtener ms informacin sobre el formato RR y sobre cmo cambiar el formato de fecha
por defecto, consulte la leccin titulada Uso de Funciones de Una Sola Fila para Personalizar la
Salida. Adems, aprender acerca del uso de funciones de una sola fila como UPPER y LOWER para
sustituir la sensibilidad a maysculas/minsculas en la misma leccin.

Oracle Database: Conceptos Fundamentales de SQL I 2-7

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Operadores de Comparacin
Operador

Significado

Igual que

>

Mayor que

>=

Mayor o igual que

<

Menor que

<=

Menor o igual que

<>

Distinto de

s
a
h
rg)
o

IN(set)
Coincide con cualquiera de los
sa ide
e
d
valores de una lista
y t Gu
LIKE
Coincide con un patrn de ro
p
@ tuden
caracteres
IS NULL
Es un valor nulo ion
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Operadores de Comparacin le
N rabse utilizan en condiciones que comparan una expresin con otra
IOcomparacin
Los operadoresCde
fe en la clusula WHERE en el siguiente formato:
s
expresinD
oA
valor. Sen
utilizan
N n-tra
U
Sintaxis
F no
... WHERE expr operator value
BETWEEN
...AND...

Entre dos valores (ambos incluidos)

Ejemplo
... WHERE hire_date = '01-JAN-95'
... WHERE salary >= 6000
... WHERE last_name = 'Smith'

Recuerde, un alias no se puede utilizar en la clusula WHERE.


Nota: los smbolos != y ^= tambin pueden representar la condicin not equal to.

Oracle Database: Conceptos Fundamentales de SQL I 2-8

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de Operadores de Comparacin

SELECT last_name, salary


FROM
employees
WHERE salary <= 3000 ;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Uso de Operadores de Comparacin
le
N
b
a
O
En el ejemplo, laIclusula e
SELECT
recupera el apellido y el salario de la tabla EMPLOYEES para
r
C
f
s
A
cualquierD
n salario sea menor o igual que 3.000 dlares. Tenga en cuenta que existe un
acuyo
r
N empleado
t
valor
explcito
proporcionado
a la clusula WHERE. El valor explcito de 3000 se compara con el
U
n
F
o
n
valor de salario de la columna SALARY de la tabla EMPLOYEES.

Oracle Database: Conceptos Fundamentales de SQL I 2-9

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de Condiciones de Rango mediante el


Operador BETWEEN
Utilizar el operador BETWEEN para mostrar las filas basadas en
un rango de valores:
SELECT last_name, salary
FROM
employees
WHERE salary BETWEEN 2500 AND 3500 ;
Lmite inferior Lmite superior

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
ice el Operador BETWEEN
RO emediante
l
Uso de Condiciones dePRango
Nbasadas
blun rango de valores utilizando la condicin de rango BETWEEN. El
a
O
Puede utilizar lasIfilas
en
r
sfe un lmite inferior y un lmite superior.
AC ancontiene
rango queDespecifique
-tr de la diapositiva devuelve filas de la tabla EMPLOYEES para cualquier
UN oSELECT
La
n
Fsentencia
empleadoncuyo salario est entre 2.500 y 3.500 dlares.
Tambin se incluyen los valores que se especifiquen con el operador BETWEEN. Debe especificar
primero el lmite inferior.
Tambin puede utilizar la condicin BETWEEN en los valores de caracteres:
SELECT last_name
FROM
employees
WHERE last_name BETWEEN 'King' AND 'Smith';

Oracle Database: Conceptos Fundamentales de SQL I 2-10

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Condicin de Miembro mediante el Operador IN


Utilizar el operador IN para probar los valores de una lista:
SELECT employee_id, last_name, salary, manager_id
FROM
employees
WHERE manager_id IN (100, 101, 201) ;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
e
RO e ellicOperador
Condicin de MiembroP
mediante
IN
l
N
b
Para probar valores
ra especificado de valores, utilice el operador IN. La condicin
IOde unfejuego
C
s IN tambin se denomina condicin de miembro.
definida mediante
operador
DA trelan
N
U odenla- diapositiva muestra los nmeros de empleado, apellidos, salarios y nmeros de
ElFejemplo
empleadonde los gestores de todos los empleados cuyo nmero de empleado del gestor sea 100, 101 o
201.
Nota: el juego de valores se puede especificar en cualquier orden aleatorio (por ejemplo,
201,100,101).
La condicin IN se puede utilizar con cualquier tipo de dato. El siguiente ejemplo devuelve una fila
de la tabla EMPLOYEES para cualquier empleado cuyo apellido est incluido en la lista de nombres
de la clusula WHERE:
SELECT employee_id, manager_id, department_id
FROM
employees
WHERE last_name IN ('Hartstein', 'Vargas');

Si los caracteres o fechas se utilizan en la lista, se deben incluir entre comillas simples ('').
Nota: el servidor de Oracle evala el operador IN internamente como un juego de condiciones OR,
como a=value1 o a=value2 o a=value3. Por lo tanto, el uso del operador IN no tiene ninguna
ventaja de rendimiento y slo se utiliza para la simplicidad lgica.

Oracle Database: Conceptos Fundamentales de SQL I 2-11

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Coincidencia de Patrones mediante el


Operador LIKE

Utilizar el operador LIKE para realizar bsquedas con


comodines de valores de cadena de bsqueda vlidos.
Las condiciones de bsqueda pueden contener caracteres
literales o nmeros:

% indica cero o varios caracteres.


_ indica un carcter.
SELECT
FROM
WHERE

first_name
employees
first_name LIKE 'S%' ;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
Rmediante
Coincidencia de Patrones
P
e el Operador LIKE
l
N
b
rael valor exacto que debe buscar. Puede seleccionar filas que coincidan
IO conozca
Puede que no siempre
e
C
f
con un patrn
ns utilizando la condicin LIKE. Se hace referencia a la operacin de
DA detcaracteres
a
r
N
coincidencia
U ode
n-patrn de caracteres como bsqueda con comodines. Para crear la cadena de
F
n
bsqueda se pueden utilizar dos smbolos.
Smbolo

Descripcin

Representa cualquier secuencia de cero o ms caracteres

Representa un nico carcter

La sentencia SELECT de la diapositiva devuelve el nombre del empleado de la tabla EMPLOYEES


de cualquier empleado cuyo nombre empiece por la letra S. Observe que se trata de la S
mayscula. No se devolvern los nombres que empiecen por s minscula.
La condicin LIKE se puede utilizar como un mtodo abreviado para algunas comparaciones
BETWEEN. El siguiente ejemplo muestra los apellidos y fechas de contratacin de los empleados que
comenzaron a trabajar entre enero y diciembre de 1995:
SELECT last_name, hire_date
FROM
employees
WHERE hire_date LIKE '%95';
Oracle Database: Conceptos Fundamentales de SQL I 2-12

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Combinacin de Caracteres Comodn

Puede combinar los dos caracteres comodn (%, _) con


caracteres literales para la coincidencia de patrones:
SELECT last_name
FROM
employees
WHERE last_name LIKE '_o%' ;

a
s
a
)h
g
r
Puede utilizar el identificador ESCAPE para buscar los
o e
a
s
smbolos % y _ reales.
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Combinacin de Caracteres Comodn
le
N
b
a
O
Los smbolos % yI_ se pueden
er utilizar en cualquier combinacin con los caracteres literales. El
C
f
s
A
ejemplo de
la diapositiva
n muestra los nombres de todos los empleados cuyos apellidos tengan la letra
acarcter.
r
NDsegundo
t
o
como
U
F non
Identificador
ESCAPE
Cuando necesite tener una coincidencia exacta para los caracteres % y _ reales, utilice el
identificador ESCAPE. Esta opcin especifica lo que representa el carcter de escape. Si desea buscar
cadenas que contengan SA_, puede utilizar la siguiente sentencia SQL:
SELECT employee_id, last_name, job_id
FROM
employees WHERE job_id LIKE '%SA\_%' ESCAPE '\';

El identificador ESCAPE identifica la barra invertida (\) como carcter de escape. En la sentencia
SQL, el carcter de escape precede al guin bajo (_). Esto hace que el servidor de Oracle interprete el
carcter de subrayado literalmente.
Oracle Database: Conceptos Fundamentales de SQL I 2-13

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de las Condiciones NULL


Probar condiciones nulas con el operador IS NULL.
SELECT last_name, manager_id
FROM
employees
WHERE manager_id IS NULL ;

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
Uso de las Condiciones
NULL
P
Nincluyen
blasl condiciones IS NULL e IS NOT NULL.
a
O
Las condiciones NULL
r
I
C nsfe
AIS
La condicin
NULL
D
a prueba las condiciones nulas. Un valor nulo significa que el valor no est
r
N
t
U
disponible,
F
ononest asignado, se desconoce o no es aplicable. Por lo tanto, no puede probar con =
porque unnvalor nulo no puede ser igual o desigual a cualquier valor. El ejemplo de la diapositiva
recupera los apellidos y gestores de todos los empleados que no tienen un gestor.
Aqu se muestra otro ejemplo: Para mostrar un apellido, ID de cargo y comisin de todos los
empleados que no tienen derecho a recibir una comisin, utilice la siguiente sentencia SQL:
SELECT last_name, job_id, commission_pct
FROM
employees
WHERE commission_pct IS NULL;

Oracle Database: Conceptos Fundamentales de SQL I 2-14

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Definicin de Condiciones mediante los


Operadores Lgicos
Operador

Significado

AND

Devuelve TRUE si ambas condiciones de


componente son verdaderas

OR

Devuelve TRUE si cualquier condicin de


componente es verdadera

NOT

Devuelve TRUE si la condicin es falsa

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Definicin de Condiciones mediante
le los Operadores Lgicos
N
b
a
O
I combina
Una condicinC
lgica
er el resultado de dos condiciones de componentes para producir un
f
s
A
resultadoD
nico basado
condiciones o invierte el resultado de una condicin nica. Se
ansieneldichas
r
N una
t
devuelve
fila
slo
resultado
global de la condicin es verdadera.
U
F non
En SQL, estn disponibles tres operadores lgicos:

AND
OR
NOT
Todos los ejemplos indicados hasta ahora han especificado slo una condicin en la clusula WHERE.
Puede utilizar varias condiciones en una nica clusula WHERE mediante los operadores AND y OR.

Oracle Database: Conceptos Fundamentales de SQL I 2-15

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso del Operador AND


AND necesita que ambas condiciones sean verdaderas:
SELECT
FROM
WHERE
AND

employee_id, last_name, job_id, salary


employees
salary >= 10000
job_id LIKE '%MAN%' ;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O
ce
Uso del Operador AND PR le li
b deben ser verdaderas para poder seleccionar cualquier registro. Por
a
r
IONcondiciones
En el ejemplo,C
ambas
e
sf los empleados que tengan un puesto que contenga la cadena MAN y
Ase seleccionan
lo tanto, slo
n
D
a
N n-trdlares o ms.
que
FUganenn10.000
o
Todas las bsquedas de caracteres son sensibles a maysculas/minsculas, es decir, no se devuelve
ninguna fila si MAN no est en maysculas. Las cadenas de caracteres se deben incluir entre
comillas simples.
Tabla de Verdad AND
La siguiente tabla muestra los resultados de combinar dos expresiones con AND:
AND
TRUE
FALSE
NULL

TRUE
TRUE
FALSE
NULL

FALSE
FALSE
FALSE
FALSE

NULL
NULL
FALSE
NULL

Oracle Database: Conceptos Fundamentales de SQL I 2-16

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso del Operador OR


OR necesita que cualquier condicin sea verdadera:
SELECT
FROM
WHERE
OR

employee_id, last_name, job_id, salary


employees
salary >= 10000
job_id LIKE '%MAN%' ;

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O
ce
Uso del Operador OR PR le li
rab de componente debe ser verdadera para poder seleccionar
ION fcondicin
En el ejemplo,C
cualquier
e
A Por
cualquierD
registro.
nlos tanto, slo se seleccionan los empleados que tengan un ID de trabajo que
a
r
N
t
contenga
n- MAN o que ganen 10.000 dlares o ms.
FU nlaocadena
Tabla de Verdad OR
La siguiente tabla muestra los resultados de combinar dos expresiones con OR:

OR
TRUE
FALSE
NULL

TRUE
TRUE
TRUE
TRUE

FALSE
TRUE
FALSE
NULL

NULL
TRUE
NULL
NULL

Oracle Database: Conceptos Fundamentales de SQL I 2-17

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso del Operador NOT

SELECT last_name, job_id


FROM
employees
WHERE job_id
NOT IN ('IT_PROG', 'ST_CLERK', 'SA_REP') ;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O
ce
Uso del Operador NOT PR le li
N rabse muestra el apellido y el ID de trabajo de todos los empleados cuyo
Odiapositiva
En el ejemplo C
deIla
sfe ST_CLERK o SA_REP.
Ano seaaIT_PROG,
ID de trabajo
n
D
N n-trNOT
Tabla
FU denVerdad
o
La siguiente tabla muestra el resultado de aplicar el operador NOT a una condicin:
NOT

TRUE
FALSE

FALSE
TRUE

NULL
NULL

Nota: el operador NOT tambin se puede utilizar con otros operadores SQL, como BETWEEN, LIKE
y NULL.
...
...
...
...

WHERE
WHERE
WHERE
WHERE

job_id
NOT IN ('AC_ACCOUNT', 'AD_VP')
salary
NOT BETWEEN 10000 AND 15000
last_name NOT LIKE '%A%'
commission_pct IS
NOT NULL

Oracle Database: Conceptos Fundamentales de SQL I 2-18

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Limitacin de filas con:


Clusula WHERE
Condiciones de comparacin con las condiciones =, <=,
BETWEEN, IN, LIKE y NULL
Condiciones lgicas mediante los operadores AND, OR y NOT

Reglas de prioridad de los operadores en una expresin


Ordenacin de filas mediante la clusula ORDER BY

Variables de sustitucin
Comandos DEFINE y VERIFY

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 2-19

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Reglas de Prioridad

Operador

Significado

Operadores aritmticos

Operador de concatenacin

Condiciones de comparacin

IS [NOT] NULL, LIKE, [NOT] IN

[NOT] BETWEEN

a
s
a
7
)h
g
r
o e
Condicin lgica AND
8
a
s
de Guid
y
Condicin lgica OR
9
o
pr ent
@
onlas reglas
tudde prioridad.
Puede utilizar los parntesis para sustituir
i
S
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Reglas de Prioridad
le
N
b
a
O
I determinan
Las reglas de prioridad
er el orden en el que se evalan y calculan las expresiones. La tabla
C
f
s
A
de la diapositiva
de prioridad por defecto. Sin embargo, puede sustituir el orden por
D tmuestra
an el orden
r
Nutilizando
defecto
parntesis
en
las
expresiones que desee calcular primero.
U
F non
6

Distinto de

Condicin lgica NOT

Oracle Database: Conceptos Fundamentales de SQL I 2-20

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Reglas de Prioridad
SELECT
FROM
WHERE
OR
AND

last_name, job_id, salary


employees
job_id = 'SA_REP'
job_id = 'AD_PRES'
salary > 15000;

s
a
h
2 g)
or

a
es uide
d
y
ro nt G
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Reglas de Prioridad (continuacin)
le
N
b
a
O
1. Prioridad del
I Operador
er AND: Ejemplo
C
f
s
A
En este
nhay dos condiciones:
D ejemplo,
acondicin
r
N
t
- La primera
es que el ID de cargo sea AD_PRES y que el salario sea superior a
U
F n15.000
on dlares.
SELECT
FROM
WHERE
OR
AND

last_name, job_id, salary


employees
(job_id = 'SA_REP'
job_id = 'AD_PRES')
salary > 15000;

- La segunda condicin es que el ID de cargo sea SA_REP.


Por lo tanto, la sentencia SELECT sera la siguiente:
Select the row if an employee is a president and earns more than $15,000, or if the employee is
a sales representative.
2. Uso de Parntesis: Ejemplo
En este ejemplo, hay dos condiciones:
- La primera condicin es que el ID de trabajo sea AD_PRES o SA_REP.
- La segunda condicin es que el salario sea superior a 15.000 dlares.
Por lo tanto, la sentencia SELECT sera la siguiente:
Select the row if an employee is a president or a sales representative, and if the employee earns
more than $15,000.

Oracle Database: Conceptos Fundamentales de SQL I 2-21

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Limitacin de filas con:


Clusula WHERE
Condiciones de comparacin con las condiciones =, <=,
BETWEEN, IN, LIKE y NULL
Condiciones lgicas mediante los operadores AND, OR y NOT

Reglas de prioridad de los operadores en una expresin


Ordenacin de filas mediante la clusula ORDER BY

Variables de sustitucin
Comandos DEFINE y VERIFY

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 2-22

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de la Clusula ORDER BY

Ordenar las filas recuperadas con la clusula ORDER BY:


ASC: orden ascendente, valor por defecto
DESC: orden descendente

La clusula ORDER BY es la ltima en una sentencia


SELECT:
SELECT
last_name, job_id, department_id, hire_date
FROM
employees
ORDER BY hire_date ;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his

d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
RBY
Uso de la Clusula ORDER
P
le
N
b
a
O
El orden de las filas
r en un resultado de consulta no est definido. La clusula ORDER BY se
I devueltas
elas
C
f
s
A
puede utilizar
para
ordenar
filas. Sin embargo, si utiliza la clusula ORDER BY, debe ser la ltima
D tran
N
clusula
SQL. Adems, puede especificar una expresin, un alias o una posicin de
U deolansentencia
F
n
columna como la condicin de ordenacin.
Sintaxis
SELECT
FROM
[WHERE
[ORDER BY

expr
Tabla
condition(s)]
{column, expr, numeric_position} [ASC|DESC]];

En la sintaxis:
ORDER BY
especifica el orden en el que aparecen las filas recuperadas.
ASC
ordena las filas en orden ascendente (orden por defecto).
DESC
ordena las filas en orden descendente.
Si la clusula ORDER BY no se utiliza, el orden no est definido y puede que el servidor de Oracle no
recupere dos veces las filas en el mismo orden para la misma consulta. Utilice la clusula ORDER BY
para mostrar las filas en un orden especfico.
Nota: utilice las palabras clave NULLS FIRST o NULLS LAST para especificar si las filas devueltas
que contengan valores nulos deben aparecer en primer o en ltimo lugar en la secuencia de
ordenacin.
Oracle Database: Conceptos Fundamentales de SQL I 2-23

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Ordenacin

Ordenar en orden descendente:


SELECT
last_name, job_id, department_id, hire_date
FROM
employees
1
ORDER BY hire_date DESC ;

Ordenar por alias de columna:


SELECT employee_id, last_name, salary*12 annsal
FROM
employees
ORDER BY annsal ;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Ordenacin
le
N
b
a
O
r ascendente:
I es elfeorden
El orden por defecto
C
s
A
Los D
numricos
n se muestran con los valores ms bajos primero (por ejemplo, de 1 a 999).
afecha
r
Nvalores
t

Los
valores
de
U
F antesndeon01-ENE-95).se muestran con el primer valor en primer lugar (por ejemplo, 01-ENE-92
Los valores de caracteres se muestran en orden alfabtico (por ejemplo, primero la A y por
ltimo la Z).
Los valores nulos se muestran al final para las secuencias ascendentes y al principio para las
secuencias descendentes.
Puede ordenar por una columna que no est en la lista SELECT.
Ejemplos
1. Para invertir el orden en el que se muestran las filas, especifique la palabra clave DESC despus
del nombre de columna en la clusula ORDER BY. El ejemplo de la diapositiva ordena el
resultado por el empleado contratado ms recientemente.
2. Tambin puede utilizar un alias de columna en la clusula ORDER BY. El ejemplo de la
diapositiva ordena los datos por salario anual.
Nota: la palabra clave DESC que se utiliza aqu para la ordenacin en orden descendente no se debe
confundir con la palabra clave DESC utilizada para describir las estructuras de tabla.

Oracle Database: Conceptos Fundamentales de SQL I 2-24

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Ordenacin

Ordenar por posicin numrica de la columna:


SELECT
last_name, job_id, department_id, hire_date
FROM
employees
3
ORDER BY 3;

Ordenar por varias columnas:


SELECT last_name, department_id, salary
FROM
employees
ORDER BY department_id, salary DESC;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Ordenacin (continuacin) le
ION ferab
Ejemplos
C
A alosnsresultados de la consulta especificando la posicin numrica de la columna en
Dordenar
3. Puede
N
tr
-SELECT.
El ejemplo de la diapositiva ordena el resultado por department_id, ya
n
FUla clusula
o
n columna est en la tercera posicin en la clusula SELECT.
que esta
4. Puede ordenar los resultados de la consulta por ms de una columna. El lmite de ordenacin es
el nmero de columnas de la tabla determinada. En la clusula ORDER BY, especifique las
columnas y separe los nombres de columna con comas. Si desea invertir el orden de una
columna, especifique DESC despus del nombre. El resultado del ejemplo de consulta que se
muestra en la diapositiva est ordenado por department_id en orden ascendente y por salary en
orden descendente.

Oracle Database: Conceptos Fundamentales de SQL I 2-25

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Limitacin de filas con:


Clusula WHERE
Condiciones de comparacin con las condiciones =, <=,
BETWEEN, IN, LIKE y NULL
Condiciones lgicas mediante los operadores AND, OR y NOT

Reglas de prioridad de los operadores en una expresin


Ordenacin de filas mediante la clusula ORDER BY

Variables de sustitucin
Comandos DEFINE y VERIFY

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 2-26

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Variables de Sustitucin

... salary = ?
department_id = ?
... last_name = ? ...
Deseo
consultar
diferentes
valores.

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Variables de Sustitucin
le
N
b
a
O
r se han ejecutado con columnas y condiciones predeterminadas y sus
I
Hasta ahora lasCsentencias
eSQL
f
s
A
valores. Supongamos
D tranque desea realizar una consulta que muestre los empleados con diferentes
Nexcepto
cargos,
U
n-aqullos cuyo job_ID no sea SA_REP. Puede editar la clusula WHERE para
F
o
n
proporcionar un valor diferente cada vez que ejecute el comando, pero existe tambin una forma ms
sencilla.
Si se utiliza una variable de sustitucin en lugar de los valores exactos en la clusula WHERE, puede
ejecutar la misma consulta para diferentes valores.
Puede crear informes que soliciten a los usuarios que proporcionen sus propios valores para restringir
el rango de datos devuelto utilizando las variables de sustitucin. Puede embeber las variables de
sustitucin en un archivo de comandos o en una nica sentencia SQL. Una variable se puede
considerar como un contenedor en el que se almacenan los valores temporalmente. Cuando se ejecuta
la sentencia, el valor se sustituye.

Oracle Database: Conceptos Fundamentales de SQL I 2-27

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Variables de Sustitucin

Utilizar variables de sustitucin para:


Almacenar valores temporalmente con una sustitucin de un
solo ampersand (&) y de dos ampersands (&&)

Utilizar las variables de sustitucin para complementar:


Condiciones WHERE
Clusulas ORDER BY
Expresiones de columna
Nombres de tabla
Sentencias SELECT completas

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Variables de Sustitucin (continuacin)
le
N
b
a
O
Puede utilizar variables
de un solo ampersand (&) para almacenar valores
r
I defesustitucin
C
s
A
temporalmente.
D tran
N
U
Tambin
n-predefinir variables mediante el comando DEFINE. DEFINE crea y asigna un valor
F npuede
o
a una variable.
Rangos de Datos Restringidos: Ejemplos
Informes de cifras slo del trimestre actual o de un rango de fechas especfico
Informes sobre datos relevantes slo del usuario que solicita el informe
Visualizacin del personal de slo un departamento determinado
Otros Efectos Interactivos
Los efectos interactivos no estn restringidos para dirigir la interaccin del usuario a la clusula
WHERE. Los mismos principios se pueden utilizar tambin para conseguir otros objetivos, como:
Obtener los valores de entrada de un archivo en lugar de obtenerlos de una persona
Transferir valores de una sentencia SQL a otra
Nota: tanto SQL Developer como SQL* Plus soportan las variables de sustitucin y los comandos
DEFINE/UNDEFINE. Ni SQL Developer ni iSQL*Plus soportan las comprobaciones de validacin
(excepto para tipos de dato) en la entrada de usuario. Si se utilizan en scripts que se despliegan a
usuarios, las variables de sustitucin se pueden manipular para ataques de inyeccin de SQL.
Oracle Database: Conceptos Fundamentales de SQL I 2-28

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de la Variable de Sustitucin de


Un Solo Ampersand
Utilizar una variable prefijada con un ampersand (&) para
solicitar al usuario un valor:
SELECT employee_id, last_name, salary, department_id
FROM
employees
WHERE employee_id = &employee_num ;

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Uso de la Variable de Sustitucin
le de Un Solo Ampersand
N
b
a
O
r
I losfeusuarios
Al ejecutar unC
informe,
a menudo desean restringir los datos que se devuelve de forma
s
A
dinmica.D
proporciona esta flexibilidad con las variables de usuario.
ano(&)SQLparaDeveloper
r
Nun SQL*Plus
t
Utilice
ampersand
identificar
cada variable en la sentencia SQL. Sin embargo, no es
U
n
F
o
n
necesario que defina el valor de cada variable.
Notacin

Descripcin

&user_variable

Indica una variable en una sentencia SQL; si la variable


no existe, SQL*Plus o SQL Developer solicita al
Usuario un valor (la nueva variable se desecha despus
de utilizarla.)

El ejemplo de la diapositiva crea una variable de sustitucin de SQL Developer para un nmero de
empleado. Al ejecutar la sentencia, SQL Developer solicita al usuario un nmero de empleado y, a
continuacin, muestra el nmero de empleado, apellido, salario y nmero de departamento de ese
empleado.
Con un solo ampersand, si la variable no existe, se pregunta al usuario cada vez que se ejecuta el
comando.

Oracle Database: Conceptos Fundamentales de SQL I 2-29

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de la Variable de Sustitucin de


Un Solo Ampersand

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Uso de la Variable de Sustitucin
le de Un Solo Ampersand (continuacin)
N
b
a
O
I
Cuando SQL Developer
detecte
er que la sentencia SQL contiene un ampersand, se le solicitar que
C
f
s
A
introduzca
n la variable de sustitucin que se menciona en la sentencia SQL.
Dun valor
apara
r
N
t
U
Despus
introducir
un valor y hacer clic en el botn OK, los resultados aparecen en el separador
n
F de
o
n
Results de la sesin de SQL Developer.

Oracle Database: Conceptos Fundamentales de SQL I 2-30

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Valores de Fecha y Carcter con


Variables de Sustitucin
Utilizar las comillas simples para los valores de fecha y carcter:
SELECT last_name, department_id, salary*12
FROM
employees
WHERE job_id = '&job_title' ;

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Valores de Fecha y Carcter con
le Variables de Sustitucin
N
b
a
O
En la clusula WHERE,
r de fecha y carcter se deben incluir entre comillas simples. La
I losfevalores
C
s
A
misma regla
D se aplica
ana las variables de sustitucin.
r
N
t
U
Incluya
F lanvariable
on entre comillas simples en la sentencia SQL en s.
La diapositiva muestra una consulta para recuperar los nombres de los empleados, nmeros de
departamento y salarios anuales de todos los empleados segn el valor del puesto de la variable de
sustitucin SQL Developer.

Oracle Database: Conceptos Fundamentales de SQL I 2-31

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Especificacin de Nombres de Columna,


Expresiones y Texto
SELECT employee_id, last_name, job_id,&column_name
FROM
employees
WHERE &condition
ORDER BY &order_column ;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Especificacin de Nombres dele
Columna, Expresiones y Texto
N
b
a
O
No slo puede utilizar
de sustitucin en la clusula WHERE de una sentencia SQL, sino
r
I lasfevariables
C
s
A
tambin como
D sustitucin
an de nombres de columna, expresiones o texto.
r
N
t
U
Ejemplo
F non
El ejemplo de la diapositiva muestra el nmero de empleado, apellido, puesto y cualquier otra
columna especificada por el usuario en tiempo de ejecucin de la tabla EMPLOYEES. Para cada
variable de sustitucin de la sentencia SELECT, se le solicitar que introduzca un valor y, a
continuacin, tendr que hacer clic en el botn OK para continuar.
Si no introduce un valor para la variable de sustitucin, obtendr un error cuando ejecute la sentencia
anterior.
Nota: una variable de sustitucin se puede utilizar en cualquier lugar de la sentencia SELECT,
excepto como la primera palabra introducida en el smbolo del sistema.

Oracle Database: Conceptos Fundamentales de SQL I 2-32

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de Variables de Sustitucin de


Dos Ampersands
Usar dos ampersands (&&) si se desea reutilizar el valor de la
variable sin preguntar siempre al usuario:
SELECT
employee_id, last_name, job_id, &&column_name
FROM
employees
ORDER BY &column_name ;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his

d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Uso de Variables de Sustitucin
le de Dos Ampersands
N
b
a
O
Puede utilizar la variable
de
I
ersustitucin de dos ampersands (&&) si desea reutilizar el valor de la
C
f
s
A
variable sin
El usuario visualiza la solicitud del valor slo una vez. En
D preguntar
ansiempresealleusuario.
r
t
elFejemplo
la
diapositiva,
solicita
al
usuario que proporcione el valor para la variable
UN de
n
o
n
column_name una vez. El valor proporcionado por el usuario (department_id) se utiliza para
la visualizacin y el orden de los datos. Si vuelve a ejecutar la consulta, no se le pedir el valor de la
variable.
SQL Developer almacena el valor proporcionado con el comando DEFINE; lo vuelve a utilizar cada
vez que haga referencia al nombre de la variable. Despus de que una variable de usuario est
colocada, necesitar utilizar el comando UNDEFINE para suprimirla de la siguiente forma:
UNDEFINE column_name

Oracle Database: Conceptos Fundamentales de SQL I 2-33

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Limitacin de filas con:


Clusula WHERE
Condiciones de comparacin con las condiciones =, <=,
BETWEEN, IN, LIKE y NULL
Condiciones lgicas mediante los operadores AND, OR y NOT

Reglas de prioridad de los operadores en una expresin


Ordenacin de filas mediante la clusula ORDER BY

Variables de sustitucin
Comandos DEFINE y VERIFY

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 2-34

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso del Comando DEFINE

Usar el comando DEFINE para crear y asignar un valor a


una variable.
Usar el comando UNDEFINE de iSQL*Plus para eliminar
una variable.
DEFINE employee_num = 200
SELECT employee_id, last_name, salary, department_id
FROM
employees
WHERE employee_id = &employee_num ;

a
s
a
)h
g
UNDEFINE employee_num
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
Uso del Comando DEFINE
P
N
bl de sustitucin para un nmero de empleado utilizando el
a
O
r
I
El ejemplo mostrado
crea
una
variable
fe de ejecucin, muestra el nmero de empleado, nombre, salario y
AC aEnnstiempo
comandoD
DEFINE.
N n-tr
nmero
de ese empleado.
FU dendepartamento
o
Debido a que la variable se crea utilizando el comando DEFINE de SQL Developer, no se le solicita
al usuario introducir un valor para el nmero de empleado. En su lugar, el valor de la variable
definida se sustituye automticamente en la sentencia SELECT.
La variable de sustitucin EMPLOYEE_NUM est en la sesin hasta que el usuario anula su definicin
o si sale de la sesin de SQL Developer.

Oracle Database: Conceptos Fundamentales de SQL I 2-35

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso del Comando VERIFY


Usar el comando VERIFY para cambiar la visualizacin de la
variable de sustitucin, antes y despus de que SQL Developer
sustituya las variables de sustitucin con los valores:
SET VERIFY ON
SELECT employee_id, last_name, salary
FROM
employees
WHERE employee_id = &employee_num;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
Uso del Comando VERIFY
P
l
N en
bsentencia
a
O
Para confirmar los
cambios
la
SQL, utilice el comando VERIFY. La definicin de SET
r
I
C sfeDeveloper a mostrar
VERIFYD
ONAfuerza anSQL
el texto de un comando despus de que sustituya las
a
r
N
t
variables
por valores. Para ver la salida de VERIFY, debe utilizar el icono Run Script
U deosustitucin
nF
n
(F5) en la hoja de trabajo de SQL. SQL Developer muestra el texto de un comando despus de que
sustituya las variables de sustitucin por valores, en el separador Script Output como se muestra en la
diapositiva.
El ejemplo de la diapositiva muestra el nuevo valor de la columna EMPLOYEE_ID en la sentencia
SQL seguida de la salida.
Variables del Sistema SQL*Plus
SQL*Plus utiliza varias variables del sistema que controlan el entorno de trabajo. Una de esas
variables es VERIFY. Para obtener una lista completa de todas las variables del sistema, puede emitir
el comando SHOW ALL en el smbolo del sistema de SQL*Plus.

Oracle Database: Conceptos Fundamentales de SQL I 2-36

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Prueba
Cules de los siguientes operadores son vlidos para la
clusula WHERE?
1. >=
2. IS NULL
3. !=
4. IS LIKE
5. IN BETWEEN
6. <>

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Respuesta: 1, 2, 3, 6
le
N
b
a
O
CI nsfer
A
ND n-tra
U
F no

Oracle Database: Conceptos Fundamentales de SQL I 2-37

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Resumen
En esta leccin, debe haber aprendido lo siguiente:
Usar la clusula WHERE para restringir las filas de la salida:
Usar las condiciones de comparacin
Usar los operadores BETWEEN, IN, LIKE y NULL
Aplicar los operadores lgicos AND, OR y NOT

Usar la clusula ORDER BY para ordenar las filas de la salida:


SELECT *|{[DISTINCT] column|expression [alias],...}
FROM
table
[WHERE condition(s)]
[ORDER BY {column, expr, alias} [ASC|DESC]] ;

a
s
a
)h
g
r
o e
a
s
Usar la sustitucin con ampersand para restringir
id la
dey ordenar
u
y
G
o
salida en tiempo de ejecucin
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Resumen
le
N
b
a
O
En esta leccin debe
a restringir y ordenar filas devueltas por la sentencia SELECT.
r
I haberfeaprendido
C
s
A
Tambin D
debe haber
cmo implantar varios operadores y condiciones.
n
aaprendido
r
N
t
U
AlFutilizar las
nvariables de sustitucin, puede agregar flexibilidad a las sentencias SQL. Esto permite
o
n
que las consultas soliciten condiciones de filtro para las filas durante el tiempo de ejecucin.

Oracle Database: Conceptos Fundamentales de SQL I 2-38

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Prctica 2: Visin General


En esta prctica se abordan los siguientes temas:
Seleccin de datos y cambio del orden de las
filas que se muestran
Restriccin de filas mediante la clusula WHERE
Ordenacin de filas mediante la clusula ORDER BY

Uso de las variables de sustitucin para agregar


flexibilidad a las sentencias SQL SELECT

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Prctica 2: Visin General
le
N
b
a
O
En esta prctica se
crean ms
informes, incluidas sentencias que utilizan las clusulas WHERE y
erlas
CI hacer
f
s
A
ORDER BY.
Puede
que
sentencias SQL sean ms reutilizables y genricas incluyendo la
D tran
N
sustitucin
FU noconn-ampersand.

Oracle Database: Conceptos Fundamentales de SQL I 2-39

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa

Uso de Funciones de Una Sola Fila para


Personalizar la Salida

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Objetivos
Al finalizar esta leccin, debera estar capacitado para lo
siguiente:
Describir los diferentes tipos de funciones disponibles en
SQL
Utilizar caracteres, nmeros y funciones de fecha en
sentencias SELECT

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Objetivos
le
N
b
a
O
I msfpotente
Las funciones C
hacen
er el bloque de consultas bsico y se utilizan para manipular los
s
A
valores deDdatos. Las
dos lecciones de este curso analizan las funciones. Se centra en
radenprimeras
N de n
t
funciones
fecha,
carcter
de una fila y de nmero.
U
F no

Oracle Database: Conceptos Fundamentales de SQL I 3-2

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Funciones SQL de una sola fila


Funciones de carcter
Funciones de nmero
Trabajo con fechas
Funciones de fecha

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 3-3

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Funciones SQL

Entrada

Salida
Funcin

arg 1
arg 2

La funcin realiza la
accin
Resultado
valor

s
a
h
rg)
o

sa ide
arg n
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Funciones SQL
le
N
b
a
O
Las funciones C
sonI una caracterstica
muy potente de SQL. Se puede utilizar para realizar las
er
f
s
A
siguientesDacciones:an
N nclculos
-tr en los datos
F URealizar
o
n elementos de datos individuales
Modificar
Manipular la salida para grupos de filas
Formatear fechas y nmeros para su visualizacin
Convertir tipos de dato de columna
Algunas veces, las funciones SQL toman argumentos y siempre devuelven un valor.
Nota: si desea saber si una funcin es compatible con SQL:2003, consulte la seccin sobre
compatibilidad con SQL:2003 de la gua Oracle Database SQL Language Reference (Referencia
sobre Lenguaje SQL de Oracle Database) para la base de datos 10g u 11g.

Oracle Database: Conceptos Fundamentales de SQL I 3-4

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Dos Tipos de Funciones SQL

Funciones

s
a
h
rg)
o

sa ide
e
Devuelve un resultado
Devuelve un
resultado
d
Gu
roy denfilas
t
por fila
por p
juego
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Dos Tipos de Funciones SQL le
ON defefunciones:
rab
Hay dos tipos C
de Igrupos
s fila
Funciones
nsola
DA detruna
a
N
n-de varias filas
F UFunciones
o
n
Funciones de Una Sola Fila
Una sola fila
funciones

Varias filas
funciones

Estas funciones funcionan slo en filas nicas y devuelven un resultado por fila. Existen distintos
tipos de funciones de una sola fila. En esta leccin se abordan los siguientes temas:
Carcter
Nmero
Fecha
Conversin
General
Funciones de Varias Filas
Las funciones pueden manipular grupos de filas para proporcionar un resultado por grupo de filas.
Estas funciones tambin se conocen como funciones de grupo (se tratan en la leccin titulada
Informes de Datos Agregados con Funciones de Grupo).
Nota: para obtener ms informacin y una lista completa de las funciones disponibles y su sintaxis,
consulte la seccin sobre funciones en Oracle Database SQL Language Reference (Referencia sobre
Lenguaje SQL de Oracle Database) para la base de datos 10g u 11g.
Oracle Database: Conceptos Fundamentales de SQL I 3-5

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Funciones de Una Sola Fila


Funciones de una sola fila:
Manipular elementos de datos
Aceptar argumentos y devolver un valor
Actuar en cada fila devuelta
Devolver un resultado por fila
Posibilidad de modificar el tipo de dato
Posibilidad de anidamiento
Aceptar argumentos que pueden ser una columna o una
)
expresin
org

has
de

sa i
e
d
function_name [(arg1, arg2,...)]
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Funciones de Una Sola Fila le
ONsolafefilarasebutilizan para manipular elementos de datos. Aceptan uno o varios
Las funciones C
deIuna
argumentos
nsun valor para cada fila devuelta por la consulta. Un argumento puede ser
DAy devuelven
a
r
N
t
uno
FUde losnsiguientes
on- elementos:
Constante proporcionada por el usuario
Valor de variable
Nombre de columna
Expresiones
Las caractersticas de las funciones de una sola fila son:
Actuar en cada fila devuelta en la consulta
Devolver un resultado por fila
Posibilidad de devolver un valor de datos de un tipo diferente al que se hace referencia
Posibilidad de esperar uno o ms argumentos
Se pueden utilizar en clusulas SELECT, WHERE y ORDER BY; posibilidad de anidamiento
En la sintaxis:
function_name
arg1, arg2

Es el nombre de la funcin.
Es cualquier argumento que utilizar la funcin. Pueden estar
representados por un nombre de columna o expresin.

Oracle Database: Conceptos Fundamentales de SQL I 3-6

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Funciones de Una Sola Fila

Carcter

General

Una sola fila


funciones

Nmero

a
s
a
)h
g
r
o e
a
s
de Guid
Conversin
Date
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Funciones de Una Sola Fila (continuacin)
le
N
b
a
O
Ilas siguientes
Esta leccin trata
er funciones de una sola fila:
C
f
s
A
Funciones
ceptan la entrada de caracteres y pueden devolver valores de nmero
n
D detracarcter:
N
y
de
carcter.
U
F Funciones
non numricas: aceptan valores de entrada y devuelven valores numricos.
Funciones de fecha: operan en valores del tipo de dato DATE. (Todas las funciones de fecha
devuelven un valor de tipo de dato DATE excepto la funcin MONTHS_BETWEEN, que devuelve
un nmero.)
Las siguientes funciones de una sola fila se tratan en las lecciones tituladas Uso de Funciones de
Conversin y Expresiones Condicionales:
Funciones de conversin: Convierten un valor de un tipo de dato a otro
Funciones generales:
- NVL
- NVL2
- NULLIF
- COALESCE
- CASE
- DECODE

Oracle Database: Conceptos Fundamentales de SQL I 3-7

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Funciones SQL de una sola fila


Funciones de carcter
Funciones de nmero
Trabajo con fechas
Funciones de fecha

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 3-8

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Funciones de Carcter

Carcter
funciones

Conversin de caracteres
funciones

Manipulacin de caracteres
funciones

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Funciones de Carcter
le
N
b
a
O
Las funciones C
deIcarcter e
deruna sola fila aceptan los datos de caracteres como entrada y pueden
f
s
A
devolver D
numricos
carcter. Las funciones de carcter se pueden dividir en:
an y de
r
N valores
t

Funciones
de
conversin
de
caracteres
U
F Funciones
non de manipulacin de caracteres
LOWER
UPPER
INITCAP

CONCAT
SUBSTR
LENGTH
INSTR
LPAD | RPAD
TRIM
REPLACE

Funcin

Objetivo

LOWER(column|expression)

Convertir valores de carcter alfabtico a minsculas.

UPPER(column|expression)

Convertir valores de carcter alfabtico a maysculas.

INITCAP(column|expression)

Convertir valores de carcter alfabtico en maysculas; la


primera letra de cada palabra y el resto en minsculas.

CONCAT(column1|expression1, Concatenar el primer valor de carcter con el segundo valor


column2|expression2)
de carcter; equivalente al operador de concatenacin (||).
SUBSTR(column|expression,m[ Devolver los caracteres especificados de un valor de carcter
,n])
que empieza por la posicin de carcter m, de una longitud
de n caracteres (si m es negativo, el recuento empieza desde
el final del valor de carcter. Si se omite n, se devolvern
todos los caracteres del final de la cadena).

Nota: las funciones tratadas en esta leccin son slo algunas de las funciones disponibles.
Oracle Database: Conceptos Fundamentales de SQL I 3-9

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Funciones de Caracteres (continuacin)


Funcin

Objetivo

LENGTH(column|expression)

Devolver el nmero de caracteres en la expression.

INSTR(column|expression,
string, [,m], [n] )

Devolver la posicin numrica de una cadena


denominada.
Opcionalmente, puede proporcionar una posicin m
para iniciar la bsqueda y el n de incidencias de la
cadena. m y n tienen un valor por defecto de 1, lo cual
significa que se inicia la bsqueda al principio y se
informa de la primera incidencia.
Devolver una expresin con relleno a la izquierda de n
caracteres con una expresin de caracteres.
Devolver una expresin con relleno a la derecha de n
caracteres con una expresin de caracteres.

LPAD(column|expression, n,
'string')
RPAD(column|expression, n,
'string')

s
a
h
rg)
o
trim_character o trim_source es un literal de
carcter,

a de
debe incluirlo entre comillas simples.des
i
u
y
G
o
sta es una funcin disponible en
Oracle8i
y
versiones
pr ent
posteriores.
@
n
ud
o
t
i
S
c
REPLACE(text,
Busca una expresin
a de htexto
s para una cadena de
i
d
search_string,
n
t
caracteresfu
y, si la encuentra,
sustituirla por una cadena
replacement_string)
use
deSsustitucin
A ( toespecificada.
DE nse
Y
Nota: algunas de las funcionesO
total o parcialmente
compatibles con SQL:2003 son:
ce
i
R
l
P
UPPER
le
N
b
a
O
LOWER
CI nsfer
A
TRIM ND
ra
t
U
n
F no
LENGTH
SUBSTR
TRIM(leading|trailing|both, Permite recortar los caracteres finales o de encabezado
trim_character FROM
(o ambos) de una cadena de caracteres. Si
trim_source)

INSTR
Para obtener ms informacin, consulte la seccin sobre compatibilidad de Oracle con Core
SQL:2003 en Oracle Database SQL Language Reference (Referencia sobre Lenguaje SQL de
Oracle Database) para la base de datos 10g u 11g .

Oracle Database: Conceptos Fundamentales de SQL I 3-10

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Funciones de Conversin de Caracteres


Estas funciones convierten las maysculas/minsculas para
cadenas de caracteres:
Funcin

Resultado

LOWER('SQL Course')

sql course

UPPER('SQL Course')

SQL COURSE

INITCAP('SQL Course')

Sql Course

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Funciones de Conversin de Caracteres
le
N
b
a
O
LOWER, UPPER yI INITCAP
r son las tres funciones de conversin de caracteres.
C nslasfecadenas
A
LOWER:
convierte
de caracteres en maysculas o en maysculas/minsculas a
D
a
r
N
t
minsculas.F UUPPER:
nonconvierte las cadenas de caracteres en minscula o en maysculas/minsculas a
maysculas.
INITCAP: convierte la primera letra de cada palabra a maysculas y el resto de las letras a
minsculas.
SELECT 'The job id for '||UPPER(last_name)||' is '
||LOWER(job_id) AS "EMPLOYEE DETAILS"
FROM
employees;

Oracle Database: Conceptos Fundamentales de SQL I 3-11

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de Funciones de Conversin de Caracteres


Mostrar el nmero de empleado, nombre y nmero de
departamento del empleado Higgins:
SELECT employee_id, last_name, department_id
FROM
employees
WHERE last_name = 'higgins';

SELECT employee_id, last_name, department_id


FROM
employees
WHERE LOWER(last_name) = 'higgins';

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Uso de Funciones de Conversin
le de Caracteres
N
b
a
O
El ejemplo de C
la Idiapositiva
ermuestra el nmero de empleado, nombre y nmero de departamento del
f
s
A
empleadoD
Higgins:an
N
-tr de la primera sentencia SQL especifica el nombre del empleado como
U
La
WHERE
n
Fclusula
o
n Debido a que todos los datos de la tabla EMPLOYEES estn almacenados correctamente,
higgins.
el nombre higgins no encuentra ninguna coincidencia en la tabla y no se selecciona ninguna fila.
La clusula WHERE de la segunda sentencia SQL especifica que el nombre del empleado de la tabla
EMPLOYEES se compara con higgins, convirtiendo la columna LAST_NAME a minsculas para
poder compararla. Ya que ambos nombres no estn en minsculas, se ha encontrado una coincidencia
y se ha seleccionado una fila. La clusula WHERE se puede volver a escribir de la siguiente forma
para que produzca el mismo resultado:
...WHERE last_name = 'Higgins'

El nombre de la salida aparece tal y como se almacen en la base de datos. Para mostrar el nombre
en maysculas, utilice la funcin UPPER de la sentencia SELECT.
SELECT employee_id, UPPER(last_name), department_id
FROM
employees
WHERE INITCAP(last_name) = 'Higgins';

Oracle Database: Conceptos Fundamentales de SQL I 3-12

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Funciones de Manipulacin de Caracteres


Estas funciones manipulan las cadenas de caracteres:
Funcin

Resultado

CONCAT('Hello', 'World')

HelloWorld

SUBSTR('HelloWorld',1,5)

Hello

LENGTH('HelloWorld')

10

INSTR('HelloWorld', 'W')

LPAD(salary,10,'*')

*****24000

RPAD(salary, 10, '*')

24000*****

s
a
h
rg)
REPLACE
BLACK and BLUE
o

('JACK and JUE','J','BL')


sa ide
e
d
TRIM('H' FROM 'HelloWorld')
elloWorld
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Funciones de Manipulacin dele
Caracteres
N
b
a
O
CONCAT, SUBSTR,
I LENGTH,
er INSTR, LPAD, RPAD y TRIM son funciones de manipulacin de
C
f
s
A
caracteresDque se tratan
en esta leccin.
ralosnvalores.
N nune
t
U
CONCAT:
(Slo se pueden utilizar dos parmetros con CONCAT).
F SUBSTR:
no extrae una cadena de una longitud determinada

LENGTH: muestra la longitud de una cadena como un valor numrico


INSTR: obtiene la posicin numrica de un carcter denominado
LPAD: dDevuelve una expresin con relleno a la izquierda de caracteres n con una expresin de
caracteres
RPAD: devuelve una expresin con relleno a la derecha de caracteres n con una expresin de
caracteres
TRIM: recorta los caracteres finales o de encabezado (o ambos) de una cadena de caracteres (si
trim_character o trim_source es un carcter literal, debe incluirlo entre comillas
simples)
Nota: puede utilizar funciones como UPPER y LOWER con una sustitucin con ampersand. Por
ejemplo, utilice UPPER('&job_title') para que el usuario no tenga que introducir el puesto en
un formato especfico.

Oracle Database: Conceptos Fundamentales de SQL I 3-13

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de las Funciones de Manipulacin de


Caracteres
1
SELECT employee_id, CONCAT(first_name, last_name) NAME,
job_id, LENGTH (last_name),
INSTR(last_name, 'a') "Contains 'a'?"
FROM
employees
WHERE SUBSTR(job_id, 4) = 'REP';

2
3

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
1
3tud
2 ion
S
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Uso de las Funciones de Manipulacin
de Caracteres
le
N
b
a
O
I
El ejemplo de C
la diapositiva
ermuestra los nombres y apellidos de los empleados que se han unido, la
f
s
A
longitud del
apellido
empleado y la posicin numrica de la letra a en el apellido del empleado
andelque
r
ND
t
de todos
los empleados
tienen la cadena REP incluida en el ID de trabajo que empieza en la
U
n
F
o
n
cuarta posicin de dicho ID.
Ejemplo:
Modifique la sentencia SQL de la diapositiva para mostrar los datos de los empleados cuyos
apellidos acaben con la letra n.
SELECT
LENGTH
FROM
WHERE

employee_id, CONCAT(first_name, last_name) NAME,


(last_name), INSTR(last_name, 'a') "Contains 'a'?"
employees
SUBSTR(last_name, -1, 1) = 'n';

Oracle Database: Conceptos Fundamentales de SQL I 3-14

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Funciones SQL de una sola fila


Funciones de carcter
Funciones de nmero
Trabajo con fechas
Funciones de fecha

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 3-15

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Funciones Numricas

ROUND: redondea el valor a un decimal especificado


TRUNC: trunca el valor a un decimal especificado
MOD: devuelve el resto de la divisin
Funcin

Resultado

ROUND(45.926, 2)

45.93

TRUNC(45.926, 2)

45.92

MOD(1600, 300)

100

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Funciones Numricas
le
N
b
a
O
I
Las funciones C
numricas
aceptan
er entradas numricas y devuelven valores numricos. Esta seccin
f
s
A
describe algunas
ND n-tderalasn funciones numricas.
U
Objetivo
FFuncinno
ROUND(column|expression, n)

Redondear la columna, expresin o valor a n decimales


o, si se omite n, a ningn decimal (Si n es negativo,
se redondearn los nmeros a la izquierda del decimal.)
TRUNC(column|expression, n) Truncar la columna, expresin o valor a n decimales o,
si n se omite, el valor por defecto de n es cero
MOD(m,n)
Devolver el resto de m dividido entre n

Nota: esta lista contiene slo algunas de las funciones numricas disponibles.
Para obtener ms informacin, consulte la seccin sobre funciones numricas en la gua Oracle
Database SQL Language Reference (Referencia sobre Lenguaje SQL de Oracle Database) para la
base de datos 10g u 11g.

Oracle Database: Conceptos Fundamentales de SQL I 3-16

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de la Funcin ROUND

SELECT ROUND(45.923,2), ROUND(45.923,0),


ROUND(45.923,-1)
FROM
DUAL;

a
s
a
3
1
2
)h
g
r
o e
a
s
e los uid
DUAL es una tabla pblica que puede utilizar parayd
ver
G
o
r
t
resultados de funciones y clculos.
p
n
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
Uso de la Funcin ROUND
P
l
N ra
bcolumna,
O
La funcin ROUND
redondea
la
expresin o valor a n decimales. Si falta el segundo
I
e
C
f
s
A
argumento
de 0, el valor se redondea a cero decimales. Si el segundo argumento
Do tienetrun
aelnvalor
Nvalor
tiene
un
de
2,
valor
se redondea a dos decimales. Por el contrario, si el segundo argumento es
U
n
F
o
n
2, el valor se redondea a dos decimales a la izquierda (redondeados a la unidad ms cercana a 100).
La funcin ROUND tambin se puede utilizar con las funciones de fecha. Ver varios ejemplos ms
adelante en esta leccin.
Tabla DUAL
El usuario SYS es el propietario de la tabla DUAL, a la que pueden acceder todos los usuarios.
Contiene una columna, DUMMY, y una fila con el valor X. La tabla DUAL es til cuando slo desea
devolver un valor una vez (por ejemplo, el valor de una constante, pseudocolumna o expresin que
no se deriva de una tabla con datos de usuario). La tabla DUAL se utiliza generalmente para obtener
una visin ms completa de la sintaxis de la clusula SELECT, porque las clusulas SELECT y
FROM son obligatorias y muchos clculos no tienen que realizar selecciones en las tablas reales.

Oracle Database: Conceptos Fundamentales de SQL I 3-17

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de la Funcin TRUNC

SELECT TRUNC(45.923,2), TRUNC(45.923),


TRUNC(45.923,-1)
FROM
DUAL;

a
s
a
)h
3
2
1
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
Uso de la Funcin TRUNC
P
N larcolumna,
bl expresin o valor a n decimales.
a
O
La funcin TRUNC
trunca e
I
sf con argumentos similares a los de la funcin ROUND. Si falta el segundo
AC afunciona
n
La funcin
TRUNC
D
N n-trun valor de 0, el valor se trunca a cero decimales. Si el segundo argumento tiene
argumento
FU noo tiene
un valor de 2, el valor se trunca a dos decimales. Por el contrario, si el segundo argumento tiene un
valor de 2, el valor se trunca a dos decimales a la izquierda. Si el segundo argumento tiene un valor
de 1, el valor se trunca a un decimal a la izquierda.
Al igual que la funcin ROUND, la funcin TRUNC se puede utilizar con funciones de fecha.

Oracle Database: Conceptos Fundamentales de SQL I 3-18

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de la Funcin MOD


Para todos los empleados con un puesto de vendedor, calcular
el resto del salario despus de dividirlo entre 5.000.
SELECT last_name, salary, MOD(salary, 5000)
FROM
employees
WHERE job_id = 'SA_REP';

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O
ce
Uso de la Funcin MODPR le li
La funcin MOD obtiene
rabdel primer argumento dividido entre el segundo argumento. El
ION elferesto
C
ejemplo de
ns calcula el resto del salario despus de dividirlo entre 5.000 de todos los
DlaAdiapositiva
a
r
N
t
empleados
n- ID de trabajo sea SA_REP.
FU nocuyo
Nota: la funcin MOD se suele utilizar para determinar si un valor es par o impar. La funcin MOD es
tambin la funcin hash de Oracle.

Oracle Database: Conceptos Fundamentales de SQL I 3-19

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Funciones SQL de una sola fila


Funciones de carcter
Funciones de nmero
Trabajo con fechas
Funciones de fecha

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 3-20

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Trabajo con Fechas

Oracle Database almacena fechas en un formato numrico


interno: siglo, ao, mes, da, horas, minutos y segundos.
El formato de visualizacin de la fecha por defecto es
DD-MON-RR.
Permite almacenar fechas del siglo 21 en el siglo 20
especificando slo los dos ltimos dgitos del ao
De la misma forma, permite almacenar fechas del
siglo 20 en el siglo 21

a
s
a
SELECT last_name, hire_date
)h
g
r
FROM
employees
o e
a
s
WHERE hire_date < '01-FEB-88';
';
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Trabajo con Fechas
le
N
b
a
O
r en un formato numrico interno que representa el siglo, el ao, el
Ialmacenafefechas
Oracle Database
C
s
A
mes, las horas,
D lostrminutos
an y los segundos.
N
U
La
n por defecto y el formato de entrada de cualquier fecha es DD-MON-RR. Las fechas
Fvisualizacin
o
n
de Oracle vlidas son del 1 de enero de 4712 A.C. y el 31 de diciembre de 9999 D.C.
En el ejemplo de la diapositiva, la salida de la columna HIRE_DATE aparece en el formato por
defecto DD-MON-RR. Sin embargo, las fechas no se almacenan en la base de datos en este formato.
Se almacenan todos los componentes de la fecha y la hora. Por lo tanto, aunque un valor
HIRE_DATE de 17-JUN-87 aparezca como el da, mes y ao, tambin existe informacin de hora y
siglo asociada a la fecha. Los datos completos podran ser 17 de junio de 1987, 5:10:43 PM.

Oracle Database: Conceptos Fundamentales de SQL I 3-21

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Formato de Fecha RR

AoActual
Actual
Ao
1995
1995
2001
2001

Fecha Especificada
27-OCT-95
27-OCT-17
27-OCT-17
27-OCT-95

Formato RR
1995
2017
2017
1995

Formato YY
1995
1917
2017
2095

Si el ao de dos dgitos especificado es:

s
a
h
Si dos de
La fecha de
g)
r
o

049 devolucin est en


los dgitos
sa ide
e
el siglo actual
del ao
d
oy ndet Gu
rfecha
actual son:
La fecha de devolucin La
p
de est en
5099 est en el siglo
n@devolucin
u
o
t
i
posterior al actual
c iselSsiglo actual
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O
ce
Formato de Fecha RR PR le li
N es similar
b al elemento YY, pero puede utilizarlo para especificar siglos
a
r
IORR
El formato de C
fecha
e
sf de formato de fecha RR en lugar de YY para que el siglo del valor de
A elaelemento
diferentes.
Utilice
n
D
-tr el ao de dos dgitos especificado y los ltimos dos dgitos del ao actual. La
UNvareonsegn
retorno
F
tabla de landiapositiva resume el comportamiento del elemento RR.
049

5099
La fecha de
devolucin est en el
siglo anterior al actual

Ao Actual

Fecha Proporcionada

Interpretada (RR)

Interpretada (YY)

1994

27-OCT-95

1995

1995

1994

27-OCT-17

2017

1917

2001

27-OCT-17

2017

2017

2048

27-OCT-52

1952

2052

2051

27-OCT-47

2147

2047

Observe que los valores mostrados en las dos ltimas filas de la tabla anterior. Conforme nos
acercamos a la mitad del siglo, el comportamiento de RR puede que no sea lo que desea.

Oracle Database: Conceptos Fundamentales de SQL I 3-22

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Formato de Fecha RR (continuacin)


Estos datos se almacenan internamente de la siguiente forma:
CENTURY YEAR MONTH DAY HOUR MINUTE SECOND
19
87
06
17
17
10
43
Siglos y el Ao 2000
Cuando se inserta un registro con una columna de fecha en una tabla, la informacin de siglo se
selecciona de la funcin SYSDATE. Sin embargo, cuando la columna de fecha se muestra en la
pantalla, el componente de siglo no aparece (por defecto).
El tipo de dato DATE utiliza 2 bytes para la informacin de ao, uno para el siglo y otro para el ao.
El valor de siglo siempre se incluye, independientemente de si se especifica o se muestra. En este
caso, RR determina el valor por defecto para el siglo en INSERT.

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 3-23

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de la Funcin SYSDATE


SYSDATE es una funcin que devuelve:

Fecha
Hora

SELECT sysdate
FROM
dual;
;

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
Uso de la Funcin SYSDATE
P
N derfecha
bl que devuelve la fecha y hora actuales del servidor de base de
a
SYSDATE es unaIO
funcin e
C SYSDATE
sf como si utilizara cualquier otro nombre de columna. Por ejemplo,
Autilizar
datos. Puede
n
D
a
r actual seleccionando SYSDATE de una tabla. Es muy comn seleccionar
puede
mostrarnla-tfecha
UN
F
o
nde una tabla ficticia denominada DUAL.
SYSDATE
Nota: SYSDATE devuelve la fecha y hora actuales definidas para el sistema operativo en el que
reside la base de datos. Por lo tanto, si est en algn lugar de Australia y se conecta a una base de
datos remota en una ubicacin de Estados Unidos (EE. UU.), la funcin sysdate devolver la
fecha y hora de EE. UU. En ese caso, puede utilizar la funcin CURRENT_DATE que devuelve la
fecha actual en la zona horaria de la sesin.
La funcin CURRENT_DATE y otras funciones de zona horaria relacionadas se abordan con mayor
detalles en Oracle Database: Conceptos Fundamentales de SQL II.

Oracle Database: Conceptos Fundamentales de SQL I 3-24

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Operadores Aritmticos con Fechas

Sumar o restar un nmero de una fecha para obtener un


valor de fecha resultante.
Restar dos fechas para obtener el nmero de das entre
esas fechas.
Agregar horas a una fecha dividendo entre el nmero de
horas entre 24.

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Operadores Aritmticos con Fechas
le
N
b
a
O
I de datos
Debido a que la
base
er almacena fechas como nmeros, puede realizar clculos utilizando
C
f
s
A
operadores
an como la suma y la resta. Puede agregar y restar constantes numricas y
r
NDaritmticos
t
fechas.
U
F non
Puede realizar las siguientes operaciones:
Operacin

Resultado

Descripcin

fecha + nmero

Fecha

Suma un nmero de das a una fecha

fecha nmero

Fecha

Resta un nmero de das de una fecha

fecha fecha

Nmero de das

Resta una fecha de otra

fecha + nmero/24

Fecha

Suma un nmero de horas a una fecha

Oracle Database: Conceptos Fundamentales de SQL I 3-25

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de Operadores Aritmticos


con Fechas
SELECT last_name, (SYSDATE-hire_date)/7 AS WEEKS
FROM
employees
WHERE department_id = 90;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Uso de Operadores Aritmticos
lecon Fechas
N
b
a
O
El ejemplo de C
la Idiapositiva
ermuestra el apellido y el nmero de semanas durante las que han
f
s
A
trabajadoD
todos los a
empleados
del departamento 90. Resta la fecha de contratacin del empleado de
n
r
Nactual
t
la fecha
(SYSDATE)
y
divide
el resultado entre 7 para calcular el nmero de semanas durante
U
n
F
o
n
las que ha trabajado el empleado.
Nota: SYSDATE es una funcin SQL que devuelve la fecha y hora actuales. Los resultados pueden
ser diferentes segn la fecha y hora definidas para el sistema operativo de la base de datos local al
ejecutar la consulta SQL.
Si se resta una fecha ms actual de una fecha ms antigua, la diferencia es un nmero negativo.

Oracle Database: Conceptos Fundamentales de SQL I 3-26

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Funciones SQL de una sola fila


Funciones de carcter
Funciones de nmero
Trabajo con fechas
Funciones de fecha

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 3-27

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Funciones de Manipulacin de Fecha

Funcin

Resultado

MONTHS_BETWEEN

Nmero de meses entre dos fechas

ADD_MONTHS

Agregar meses de calendario a fecha

NEXT_DAY

Siguiente da de la fecha especificada

LAST_DAY

ltimo da del mes

ROUND

Redondear fecha

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
ice
ROdeeFecha
l
Funciones de Manipulacin
P
Nfuncionan
blen fechas de Oracle. Todas las funciones de fecha devuelven un
a
Las funciones deIfecha
O
r
CdatonDATE
fe excepto MONTHS_BETWEEN, que devuelve un valor numrico.
valor del tipo
de
s
A
D
MONTHS_BETWEEN(date1,
date2): obtiene el nmero de meses entre date1 y date2.
ra
Nresultado
t
U
n
El
puede
ser
positivo
o
negativo. Si date1 es posterior a date2, el resultado es
F no
positivo; si date1 es anterior a date2, el resultado es negativo. La parte del resultado que no
TRUNC

Truncar fecha

sea un entero representa una parte del mes.


ADD_MONTHS(date, n): agrega el nmero n de los meses de calendario a date. El valor
de n debe ser un entero y puede ser negativo.
NEXT_DAY(date, 'char'): obtiene la fecha del siguiente da de la semana especificado
('char') que le sigue a date. El valor de char puede ser un nmero que representa un da
o una cadena de caracteres.
LAST_DAY(date): obtiene la fecha del ltimo da del mes que contiene date.
Esta lista es un subjuego de las funciones de fecha disponibles. Las funciones de nmero ROUND y
TRUNC tambin se pueden utilizar para manipular los valores de fecha como se muestra a
continuacin:
ROUND(date[,'fmt']): devuelve date redondeado a la unidad especificada por el modelo
de formato fmt. Si se omite el modelo de formato fmt , date se redondea a la fecha ms cercana.
TRUNC(date[, 'fmt']): devuelve date con la parte de la hora del da truncada a la
unidad especificada por el modelo de formato fmt. Si se omite el modelo de formato
fmt,date se redondea a la fecha ms cercana.
Los siguientes modelos de formato se tratan en las lecciones tituladas Uso de Funciones de
Conversin y Expresiones Condicionales:
Oracle Database: Conceptos Fundamentales de SQL I 3-28

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de las Funciones de Fecha

Funcin

Resultado

MONTHS_BETWEEN
('01-SEP-95','11-JAN-94')

19.6774194

ADD_MONTHS (31-JAN-96',1)

'29-FEB-96'

NEXT_DAY

('01-SEP-95','FRIDAY')

'08-SEP-95'

LAST_DAY

('01-FEB-95')

'28-FEB-95'

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Uso de las Funciones de Fecha
le
N
b
a
O
En el ejemplo deIla diapositiva,
er la funcin ADD_MONTHS agrega un mes al valor de fecha
C
f
s
A
proporcionado
y devuelve 29-FEB-96. La funcin reorganiza el ao 1996 como ao
ran devuelve
Ny,Dpornlo31-JAN-96
t
bisiesto
tanto,
la ltima fecha del mes de febrero. Si cambia el valor de fecha de
U
F
o
n
entrada a 31-JAN-95, la funcin devuelve 28-FEB-95.
Por ejemplo, muestre el nmero de empleado, fecha de contratacin, nmero de meses durante los
que ha trabajado, fecha de revisin de seis meses, primer viernes despus de la fecha de contratacin
y ltimo da del mes de contratacin de todos los empleados que han trabajado menos de 150 meses.
SELECT employee_id, hire_date, MONTHS_BETWEEN (SYSDATE, hire_date)
TENURE, ADD_MONTHS (hire_date, 6) REVIEW, NEXT_DAY (hire_date,
'FRIDAY'), LAST_DAY(hire_date)
FROM
employees WHERE MONTHS_BETWEEN (SYSDATE, hire_date) < 150;

Oracle Database: Conceptos Fundamentales de SQL I 3-29

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de las Funciones ROUND y TRUNC con Fechas


Supongamos SYSDATE = '25-JUL-03':
Funcin

Resultado

ROUND(SYSDATE,'MONTH')

01-AUG-03

ROUND(SYSDATE ,'YEAR')

01-JAN-04

TRUNC(SYSDATE ,'MONTH')

01-JUL-03

TRUNC(SYSDATE ,'YEAR')

01-JAN-03

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
icecon Fechas
ROy eTRUNC
l
Uso de las Funciones ROUND
P
Ny TRUNC
bsel pueden utilizar para valores de fecha y nmero. Al utilizarlas con
a
O
Las funciones ROUND
r
I
C nsredondean
fe
Afunciones
fechas, estas
o truncan el modelo de formato especificado. Por lo tanto, puede
D
raal ao o mes ms
N lasnfechas
t
redondear
cercano. Si el modelo de formato es mes, el resultado de las
U
F
o
n
fechas 1-15 es el primer da del mes actual. El resultado de las fechas 16-31 es el primer da del
siguiente mes. Si el modelo de formato es mes, el resultado de las fechas 1-6 es el 1 de enero del ao
actual. El resultado de los meses 7-12 es el 1 de enero del siguiente ao.
Ejemplo:
Compare las fechas de contratacin de todos los empleados que empezaron en 1997. Muestre el
nmero de empleado, fecha de contratacin y mes de inicio con las funciones ROUND y TRUNC.
SELECT employee_id, hire_date,
ROUND(hire_date, 'MONTH'), TRUNC(hire_date, 'MONTH')
FROM
employees
WHERE hire_date LIKE '%97';

Oracle Database: Conceptos Fundamentales de SQL I 3-30

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Prueba
Cules de las siguientes afirmaciones sobre funciones de una
sola fila son ciertas?
1. Manipular elementos de datos
2. Aceptar argumentos y devolver un valor por argumento
3. Actuar en cada fila devuelta
4. Devuelve un resultado por juego de filas
5. Posibilidad de modificar el tipo de dato
s
6. Posibilidad de anidamiento
a
h
rg)
7. Aceptar argumentos que pueden ser una columna oouna

a
expresin
des ide

roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Respuesta: 1, 3, 6, 7
le
N
b
a
O
CI nsfer
A
ND n-tra
U
F no

Oracle Database: Conceptos Fundamentales de SQL I 3-31

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Resumen
En esta leccin, debe haber aprendido lo siguiente:
Realizar clculos de datos utilizando funciones
Modificar elementos de datos individuales utilizando
funciones

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Resumen
le
N
b
a
O
r se pueden anidar en cualquier nivel. Las funciones de una sola fila
Las funciones C
deIuna sola e
fila
f
s
A
pueden manipular
elementos:
ansiguientes
rlos
NDdencaracteres:
t
U
Datos
LOWER, UPPER, INITCAP, CONCAT, SUBSTR, INSTR, LENGTH
F Datosnode nmero: ROUND, TRUNC, MOD

Valores de fecha: SYSDATE, MONTHS_BETWEEN, ADD_MONTHS, NEXT_DAY, LAST_DAY

Recuerde lo siguiente:
Los valores de fecha tambin pueden utilizar operadores aritmticos.
Las funciones ROUND y TRUNC tambin se pueden utilizar con valores de fecha.
SYSDATE y DUAL
SYSDATE es una funcin de fecha que devuelve la fecha y hora actuales. Es muy comn seleccionar
SYSDATE de una tabla pblica denominada DUAL.

Oracle Database: Conceptos Fundamentales de SQL I 3-32

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Prctica 3: Visin General


En esta prctica se abordan los siguientes temas:
Escritura de una consulta que muestre la fecha actual
Creacin de consultas que requieran el uso de funciones
numricas, de carcter y de fecha
Realizacin de clculos de aos y meses de servicio de un
empleado

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Prctica 3: Visin General
le
N
b
a
O
I
Esta prctica proporciona
eunar variedad de ejercicios que utilizan diferentes funciones que estn
C
f
s
A
disponibles
tipos
ande dato de carcter, de nmero y de fecha.
r
ND para
t
U
F non

Oracle Database: Conceptos Fundamentales de SQL I 3-33

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa

Uso de Funciones de Conversin y


Expresiones Condicionales

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Objetivos
Al finalizar esta leccin, debera estar capacitado para lo
siguiente:
Describir varios tipos de funciones de conversin que
estn disponibles en SQL
Utilizar las funciones de conversin TO_CHAR, TO_NUMBER
y TO_DATE

Aplicar expresiones condicionales en una sentencia


SELECT

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Objetivos
le
N
b
a
O
I en ffunciones
Esta leccin seC
centra
er que convierten los datos de un tipo en otro (por ejemplo,
s
A
conversin
de datosade
n caracteres en datos numricos) y describe las expresiones condicionales en
r
NDSQL
t
sentencias
SELECT.
U
F non

Oracle Database: Conceptos Fundamentales de SQL I 4-2

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Conversin de tipo de dato implcito y explcito


Funciones TO_CHAR, TO_DATE, TO_NUMBER

Funciones de anidacin
Funciones generales:

NVL
NVL2
NULLIF
COALESCE

s
a
h
Expresiones condicionales:
rg)
o

CASE
sa ide
e
d
DECODE
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 4-3

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Funciones de Conversin

Tipo de Dato
conversin

Tipo de dato implcito


conversin

Tipo de dato explcito


conversin

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Funciones de Conversin
le
N
b
a
O
I de dato
Adems de losC
tipos
erde Oracle, las columnas de las tablas de una Oracle Database se pueden
f
s
A
definir utilizando
dato American National Standards Institute (ANSI), DB2 y SQL/DS.
rlosantiposdedeOracle
ND nel-servidor
t
Sin
embargo,
convierte internamente esos tipos de dato a tipos de dato de
U
F
o
n
Oracle.
En algunos casos, el servidor de Oracle recibe datos de un tipo de dato cuando espera datos de un
tipo de dato diferente. Cuando esto ocurre, el servidor de Oracle puede convertir automticamente los
datos al tipo de dato esperado. Esta conversin de tipo de dato puede realizarla el servidor de Oracle
implcitamente o el usuario explcitamente.
Las conversiones de tipo de dato funcionan segn las reglas explicadas en las siguientes diapositivas.
Las conversiones de tipo de dato explcitas se realizan utilizando las funciones de conversin. Las
funciones de conversin sirven para convertir los valores de un tipo de dato a otro. Generalmente, el
formato de los nombres de funciones sigue la convencin data type TO data type. El primer
tipo de dato es el tipo de dato de entrada; el segundo tipo de dato es la salida.
Nota: aunque la conversin de tipo de dato implcita est disponible, se recomienda que realice una
conversin de tipo de dato explcita para asegurar la fiabilidad de las sentencias SQL.

Oracle Database: Conceptos Fundamentales de SQL I 4-4

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Conversin Implcita del Tipo de Dato


En expresiones, el servidor de Oracle puede convertir
automticamente:
A

De

VARCHAR2 o CHAR

NUMBER

VARCHAR2 o CHAR

DATE

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Conversin Implcita del Tipo lde
e Dato
N
b
a
O
rrealizar automticamente una conversin de tipo de dato en una
I puede
El servidor de C
Oracle
eexpresin
f
s
A
expresin.
Por
ejemplo,
la
hire_date > '01-JAN-90' tiene como resultado la
D tran
N
- de la cadena '01-JAN-90' a una fecha. Por lo tanto, un valor VARCHAR2 o
conversin
U oimplcita
n
F
n
CHAR se puede convertir de forma implcita a un tipo de dato de fecha o nmero en una expresin

Oracle Database: Conceptos Fundamentales de SQL I 4-5

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Conversin Implcita del Tipo de Dato


Para la evaluacin de expresiones, el servidor de Oracle puede
convertir automticamente:
A

De

NUMBER

VARCHAR2 o CHAR

DATE

VARCHAR2 o CHAR

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Conversin Implcita del Tipo lde
e Dato (continuacin)
N
b
a
O
r utiliza la regla de expresiones cuando se necesita una conversin de
I defeOracle
En general, el C
servidor
s
A
tipo de dato.
Por
ejemplo,
la
D tran expresin grade = 2 tiene como resultado la conversin implcita del
N
- 2 porque el grado es una columna CHAR(2)..
nmero
FU 2naolancadena
Nota: las conversiones de CHAR a NUMBER se realizan correctamente slo si la cadena de caracteres
representa un nmero vlido.

Oracle Database: Conceptos Fundamentales de SQL I 4-6

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Conversin Explcita del Tipo de Dato

TO_NUMBER

NUMBER

TO_DATE

CARCTER

DATE

s
a
h
rg)
o

sa ide
e
d
TO_CHAR
TO_CHAR
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Conversin Explcita del Tipo lde
e Dato
N
b
a
O
SQL proporciona
CItresnfunciones
fer para convertir un valor de un tipo de dato a otro:
s
A
Funcin
Objetivo
ND n-tra
U
FTO_CHAR(number|date,[
o
n
fmt], Convertir un valor de fecha o nmero a una
[nlsparams])

cadena de caracteres VARCHAR2 con el modelo


de formato fmt
Conversin numrica: el parmetro
nlsparams especifica los siguientes caracteres,
devueltos por los elementos de formato numrico:
Carcter decimal
Separador de grupo
Smbolo de la divisa local
Smbolo de la divisa internacional
Si se omite el parmetro nlsparams o
cualquier otro parmetro, esta funcin utiliza para
la sesin los valores de parmetro por defecto.

Oracle Database: Conceptos Fundamentales de SQL I 4-7

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Conversin Explcita del Tipo de Dato

TO_NUMBER

NUMBER

CARCTER

TO_DATE

DATE

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
TO_CHAR
TO_CHAR
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Conversin Explcita del Tipo lde
e Dato (continuacin)
N
b
a
O
Funcin
Objetivo
CI nsfer
A
D tra
TO_CHAR(number|date,[
N
Conversin de fecha: el parmetro nlsparams especifica el
U
fmt],
nF
o
idioma en el que se devuelven las abreviaturas y los nombres del
n
[nlsparams])
mes y del da. Si se omite este parmetro, esta funcin utiliza los
idiomas de fecha por defecto para la sesin.

TO_NUMBER(char,[fmt],
[nlsparams])

Convertir una cadena de caracteres que contiene dgitos a un


nmero en el formato especificado por el modelo de formato
opcional fmt.
El parmetro nlsparams tiene el mismo objetivo en esta
funcin que en la funcin TO_CHAR para la conversin numrica.

TO_DATE(char,[fmt],[nlspa
rams])

Convertir una cadena de caracteres que representa una fecha en un


valor de fecha segn el valor de fmt especificado. Si se omite
fmt, el formato es DD-MON-YY.
El parmetro nlsparams tiene el mismo objetivo en esta
funcin que en la funcin TO_CHAR para la conversin de fecha.

Oracle Database: Conceptos Fundamentales de SQL I 4-8

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa
Conversin Explcita del Tipo de Dato (continuacin)
Nota: la lista de funciones mencionadas en esta leccin incluye slo algunas de las funciones de
conversin disponibles.
Para obtener ms informacin, consulte la seccin sobre funciones de conversin en Oracle
Database SQL Language Reference (Referencia sobre Lenguaje SQL de Oracle Database) para la
base de datos 10g u 11g.

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 4-9

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Conversin de tipo de dato implcito y explcito


Funciones TO_CHAR, TO_DATE, TO_NUMBER

Funciones de anidacin
Funciones generales:

NVL
NVL2
NULLIF
COALESCE

s
a
h
Expresiones condicionales:
rg)
o

CASE
sa ide
e
d
DECODE
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 4-10

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de la Funcin TO_CHAR con Fechas

TO_CHAR(date, 'format_model')

El modelo de formato:
Debe estar entre comillas simples
Es sensible a maysculas/minsculas
Puede incluir cualquier elemento de formato de fecha
vlido
s
Tiene un elemento fm para eliminar los espacios en
a
h
blanco o suprimir ceros iniciales
rg)
o

a
Est separado del valor de fecha por una coma
des uide

roy nt G
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
ice
ROcone Fechas
l
Uso de la Funcin TO_CHAR
P
l
N
bdato
a
O
TO_CHAR convierte
un tipo
de
de fecha y hora a un valor de tipo de dato VARCHAR2 con el
r
I
e
C
f
s
A
formato especificado
nporformat_model. Un modelo de formato es un carcter literal que describe el
ahora
r
NdeDfecha
t
formato
y
almacenado en una cadena de caracteres. Por ejemplo, el modelo de formato
U
n
F
o
n
de fecha y hora '11-Nov-1999' es 'DD-Mon-YYYY'. Puede utilizar la funcin TO_CHAR para
convertir una fecha de su formato por defecto a uno que especifique.
Instrucciones
El modelo de formato debe estar entre comillas simples y es sensible a maysculas/minsculas.
El modelo de formato puede incluir cualquier elemento de formato de fecha vlido. Asegrese
de separar el valor de fecha del modelo de formato con una coma.
Los nombres de los das y meses en la salida se rellenan automticamente con espacios en
blanco.
Para eliminar los espacios en blanco o suprimir los ceros iniciales, utilice el elemento fm de
modo de relleno.
SELECT employee_id, TO_CHAR(hire_date, 'MM/YY') Month_Hired
FROM
employees
WHERE last_name = 'Higgins';

Oracle Database: Conceptos Fundamentales de SQL I 4-11

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Elementos del Modelo de Formato de Fecha

Elemento

Resultado

YYYY

Ao completo en nmeros

YEAR

Ao en letra (en ingls)

MM

Valor de dos dgitos del mes

MONTH

Nombre completo del mes

MON

Abreviatura de tres letras del mes

DY

Abreviatura de tres letras del da de la semana

DAY

Nombre completo del da de la semana

s
a
h
rg)
DD
Da numrico del mes
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 4-12

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Elementos de Formato de Ejemplo de Formatos de Fecha Vlidos


Elemento

Descripcin

SCC o bien CC

Siglo; el servidor agrega como prefijo el signo - a los aos A.C.

Aos en fechas YYYY o bien Ao; el servidor agrega como prefijo el signo - a los aos A.C.
SYYYY
YYY o bien YY o bien Y

Indica el ltimo, los tres ltimos o los dos ltimos dgitos de un


ao

Y,YYY

Ao con una coma en esta posicin

IYYY, IYY, IY, I

Ao de cuatro, tres, dos o un dgito basado en el estndar ISO

SYEAR o bien YEAR

Ao en letra; el servidor agrega como prefijo el signo - a los


aos A.C.

BC o bien AD

Indica un ao A.C. o D.C.

B.C. o bien A.D.

Indica un ao A.C. o D.C. que utiliza perodos

Trimestre del ao

IW

Semanas del ao segn el estndar (1 a 53)

s
a
h
rg)
MM
Mes: valor de dos dgitos
o

sa hastaiduna
e
MONTH
Nombre del mes rellenado con espacios en
blanco
e
d
longitud de nueve caracteres
roy nt Gu
p
MON
Nombre del mes, abreviatura
de tres letras
de
n@
u
o
t
i
c is S
a
RM
Nmero romano del
mes
d
th
funo del smes
e
WW o bien W
Semana del(ao
u
SAao, mestoo semana
DDD o bien DD o bien D
Da
del
E
D nse
Y
DAY
Nombre
da rellenado con espacios en blanco hasta una
ice del
RO elongitud
l
P
de nueve caracteres
l
N
b
a
O
DY
Nombre del da, abreviatura de tres letras
CI nsfer
A
D
J
Da juliano actual, nmero de das desde el 31 de diciembre de
N n-tra
U
F no
4713 a.C.

Oracle Database: Conceptos Fundamentales de SQL I 4-13

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Elementos del Modelo de Formato de Fecha

Los elementos de tiempo formatean la parte de la hora de


la fecha:
HH24:MI:SS AM

Agregan cadenas de caracteres entre comillas dobles:


DD "of" MONTH

15:45:32 PM

12 of OCTOBER

El nmero se agrega como sufijo de los nmeros en letra:

s
a
h
rg)
ddspth
fourteenth
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Elementos del Modelo de Formato
le de Fecha
N
b
a
O
r
I de lasfesiguientes
Utilice los formatos
tablas para mostrar la informacin de tiempo y los literales y
C
s
A
para cambiar
ran a nmeros en letra.
ND nlos-tnumerales
U
Descripcin
FElementono
AM o PM
Indicador de meridiano
A.M. o P.M.
HH o HH12 o HH24
MI
SS
SSSSS

Indicador de meridiano con puntos


Hora del da, hora (112) u hora (023)
Minuto (059)
Segundo (059)
Segundos despus de la media noche (086399)

Oracle Database: Conceptos Fundamentales de SQL I 4-14

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Elementos del Modelo de Formato de Fecha (continuacin)


Otros Formatos
Elemento

Descripcin

/ . ,

La puntuacin se reproduce en el resultado.

of the

La cadena entre comillas se reproduce en el resultado.

Especificacin de Sufijos para Influenciar la Visualizacin de Nmeros

Elemento

Descripcin

TH

Nmero ordinal (por ejemplo, DDTH para 4TH)

SP

Nmero en letra (por ejemplo, DDSP para FOUR)

SPTH or THSP

Nmeros ordinales en letra (por ejemplo, DDSPTH para FOURTH)

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 4-15

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de la Funcin TO_CHAR con Fechas

SELECT last_name,
TO_CHAR(hire_date, 'fmDD Month YYYY')
AS HIREDATE
FROM
employees;

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p

n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
ice
ROcone Fechas
l
Uso de la Funcin TO_CHAR
P
N
bl muestra los apellidos y fechas de contratacin de todos los
a
O
r
I
La sentencia SQL
de
la
diapositiva
C ndescontratacin
fe
A
empleados.
La fecha
aparece como 17 de junio de 1987.
D
a
r
N
t
U
Ejemplo:
F non
Modifique el ejemplo de la diapositiva para mostrar las fechas en un formato que aparezca como
Diecisiete de junio de 1987 12:00:00 AM.
SELECT last_name,
TO_CHAR(hire_date,
'fmDdspth "of" Month YYYY fmHH:MI:SS AM')
HIREDATE
FROM
employees;

Observe que el mes sigue el modelo de formato especificado; es decir, la primera letra est en
mayscula y el resto en minsculas.

Oracle Database: Conceptos Fundamentales de SQL I 4-16

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de la Funcin TO_CHAR con Nmeros


TO_CHAR(number, 'format_model')

stos son algunos de los elementos de formato que puede


utilizar con la funcin TO_CHAR para mostrar un valor de
nmero como un carcter:
Elemento
9

Resultado

Fuerza para que aparezca un cero

Coloca un signo de dlar flotante

Representa un nmero

a
s
a
h
L
Utiliza el smbolo de divisa local flotante rg)
o e
a
.
s
Imprime un punto decimal
e uid
d
y
G
o
,
Imprime una coma como indicador
detmiles
r
p
n
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
ice
ROcone Nmeros
l
Uso de la Funcin TO_CHAR
P
l
rab como cadenas de caracteres, debe convertir dichos nmeros al tipo
IONdefenmero
Al trabajar conC
valores
A autilizando
de dato de
ns la funcin TO_CHAR que traduce un valor del tipo de dato NUMBER a
Dcarcter
r
N
t
un tipo
FU dendato
on-VARCHAR2. Esta tcnica es muy til con la concatenacin.

Oracle Database: Conceptos Fundamentales de SQL I 4-17

Fundacin Proydesa
Uso de la Funcin TO_CHAR con Nmeros (continuacin)

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Elementos de Formato de Nmero


Si est convirtiendo un nmero al tipo de dato de caracteres, puede utilizar los siguientes elementos
de formato:
Elemento

Descripcin

Ejemplo

Resultado

Posicin numrica (nmero de 9 que determinan


el ancho de la visualizacin)

999999

1234

Muestra los ceros iniciales

099999

001234

Signo de dlar flotante

$999999

$1234

Smbolo de divisa local flotante

L999999

FF1234

Devuelve el carcter decimal en la posicin


especificada. El valor por defecto es un punto (.)

99D99

99.99

Punto decimal en la posicin especificada

999999.99

1234.00

s
a
h
rg)
o

sa ide
e
d
Gu
roy n1,234
t
,
Coma en la posicin especificada
999,999
p
@ tude 1234MI
Signos menos a la derecha (valores negativos) ion 999999MI
S
ac h999999PR
s
i
d
PR
Introduce entre parntesis los nmerosnnegativos
<1234>
t
u
f
e
(
EEEE
Notacin cientfica (el formatoAdebe especificar
99.999EEEE 1.234E+03
us
S
o
t
cuatro E)
DE nse
Y
U
1234
Devuelve la divisa
U9999
e (u otra) en la
O dual l"Euro"
c
i
R
P
posicin especificada
le
N
b
a
O
I
er10 n veces (n = nmero de 9
V
Multiplica
por
9999V99
123400
C
f
s
A
n
D
ra de V)
N ndespus
t
U
FS no Devuelve un valor negativo o positivo
S9999
-1234 or
+1234
G

9,999
Devuelve un separador de grupo en la posicin
especificada. Puede especificar varios
separadores de grupo en un modelo de formato de
nmero.

9G999

Muestra los valores cero como espacios en


blanco, no como 0

1234.00

B9999.99

Oracle Database: Conceptos Fundamentales de SQL I 4-18

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de la Funcin TO_CHAR con Nmeros

SELECT TO_CHAR(salary, '$99,999.00') SALARY


FROM
employees
WHERE last_name = 'Ernst';

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
ice (continuacin)
ROcone Nmeros
l
Uso de la Funcin TO_CHAR
P
N muestra
bl una cadena de signos de nmero (#) en lugar de un nmero
a
O
r
I
El servidor
de
Oracle
fe exceden el nmero de dgitos proporcionado en el modelo de formato.
s
AC
completo
cuyos
dgitos
n
D
raOracle redondea el valor decimal almacenado al nmero de decimales
Nservidor
t

El
de
U
n
F proporcionado
no
en el modelo de formato.

Oracle Database: Conceptos Fundamentales de SQL I 4-19

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de Funciones TO_NUMBER y TO_DATE

Convertir una cadena de caracteres a un formato de


nmero que utiliza la funcin TO_NUMBER:
TO_NUMBER(char[, 'format_model'])

Convertir una cadena de caracteres a un formato de fecha


que utiliza la funcin TO_DATE:
TO_DATE(char[, 'format_model'])

s
a
h
Estas funciones tienen un modificador fx. Este
rg)
o

modificador especifica la coincidencia exacta para


sael ide
e
d
u de
argumento de carcter y el modelo de formato
fecha
G
roy de
t
p
en
@
una funcin TO_DATE.
d
n
u
t
io
S
c
a
s
i
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
ice
RO ey TO_DATE
l
Uso de Funciones TO_NUMBER
P
N una
bl de caracteres a un nmero o a una fecha. Para realizar esta
a
O
r
I
Puede que desee
convertir
cadena
e
fTO_NUMBER
s
AlasCfuncione
tarea, utilice
o TO_DATE. El modelo de formato que seleccione est
n
D
a
r
N
t
basado
de formato demostrados anteriormente.
nelementos
FU ennlos
o
El modificador fx especifica la coincidencia exacta para el argumento de carcter y el modelo de

formato de fecha de una funcin TO_DATE:


La puntuacin y el texto entre comillas del argumento de carcter debe coincidir exactamente
(excepto en las maysculas/minsculas) con las partes correspondientes del modelo de formato.
El argumento de carcter no puede tener espacios en blanco adicionales. Sin fx, el servidor de
Oracle ignora los espacios en blanco adicionales.
Los datos numricos del argumento de carcter deben tener el mismo nmero de dgitos que el
elemento correspondiente en el modelo de formato. Sin fx, los nmeros del argumento de
carcter no pueden omitir los ceros iniciales.

Oracle Database: Conceptos Fundamentales de SQL I 4-20

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de Funciones TO_NUMBER y TO_DATE (continuacin)


Ejemplo:
Muestre el nombre y fecha de contratacin de todos los empleados que empezaron a trabajar el 24 de
mayo de 1999. En el siguiente ejemplo, hay dos espacios despus del mes May y antes del nmero
24. Ya que se utiliza fx, se necesita una coincidencia exacta y los espacios despus de la palabra
May no se reconocern:
SELECT last_name, hire_date
FROM
employees
WHERE hire_date = TO_DATE('May

24, 1999', 'fxMonth DD, YYYY');

La salida del error resultante debe tener el siguiente aspecto:

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
C corrija
flaeconsulta suprimiendo el espacio adicional entre "May" y "24".
Para ver la salida,
s
A
n
D
SELECT
ra hire_date
N last_name,
t
U
FROM
employees
n
F no
WHERE hire_date = TO_DATE('May 24, 1999', 'fxMonth DD, YYYY');

Oracle Database: Conceptos Fundamentales de SQL I 4-21

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de las Funciones TO_CHAR y TO_DATE


con el Formato de Fecha RR
Para buscar los empleados contratados antes de 1990, utilice
el formato de fecha RR, que produce los mismos resultados si
se ejecutara el comando en 1999 o en la actualidad:
SELECT last_name, TO_CHAR(hire_date, 'DD-Mon-YYYY')
FROM employees
WHERE hire_date < TO_DATE('01-Jan-90','DD-Mon-RR');

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
ice con el Formato de Fecha RR
RO ey lTO_DATE
Uso de las Funciones TO_CHAR
P
N contratados
bl antes de 1990, se puede utilizar el formato RR. Debido a que
a
O
Para buscar los empleados
r
I
fe1999, el formato RR interpreta la parte del ao de la fecha de 1950 a
s
AesCmayor
el ao actual
que
n
D
N n-tra
1999.
U
F no
Por otro lado,
en el siguiente comando no se selecciona ninguna fila porque el formato YY interpreta
la parte del ao de la fecha en el siglo actual (2090).
SELECT last_name, TO_CHAR(hire_date, 'DD-Mon-yyyy')
FROM
employees
WHERE TO_DATE(hire_date, 'DD-Mon-yy') < '01-Jan-1990';

Oracle Database: Conceptos Fundamentales de SQL I 4-22

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Conversin de tipo de dato implcito y explcito


Funciones TO_CHAR, TO_DATE, TO_NUMBER

Funciones de anidacin
Funciones generales:

NVL
NVL2
NULLIF
COALESCE

s
a
h
Expresiones condicionales:
rg)
o

CASE
sa ide
e
d
DECODE
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 4-23

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Funciones de Anidacin

Las funciones de una sola fila se pueden anidar en


cualquier nivel.
Las funciones anidadas se evalan desde el nivel ms
profundo hasta el nivel menos profundo.

F3(F2(F1(col,arg1),arg2),arg3)
Paso 1 = Resultado 1

a
s
a
Paso 2 = Resultado 2
)h
g
r
o e
a
Paso 3 = Resultado 3
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Funciones de Anidacin
le
N
b
a
O
r se pueden anidar en cualquier profundidad. Las funciones anidadas se
Las funciones C
deIuna sola e
fila
f
s
A
evalan desde
el nivel
profundo hasta el nivel menos profundo. Los siguientes ejemplos
anms
r
NDla flexibilidad
t
muestran
de
estas
funciones.
U
F non

Oracle Database: Conceptos Fundamentales de SQL I 4-24

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Funciones de Anidacin: Ejemplo 1

SELECT last_name,
UPPER(CONCAT(SUBSTR (LAST_NAME, 1, 8), '_US'))
FROM
employees
WHERE department_id = 60;

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Funciones de Anidacin (continuacin)
le
N
b
a
O
El ejemplo de C
la Idiapositiva
ermuestra los apellidos de los empleados en el departamento 60. La
f
s
A
evaluacin
SQL implica tres pasos:
Dde la tsentencia
an recupera
r
Nfuncin
1.
La
interna
los primeros ocho caracteres del apellido.
U
F Result1
non = SUBSTR (LAST_NAME, 1, 8)

2. La funcin externa concatena el resultado con _US.


Result2 = CONCAT(Result1, '_US')
3. La funcin ms externa convierte los resultados a maysculas.
La expresin completa se convierte en la cabecera de columna porque no se ha proporcionado ningn
alias de columna.
Ejemplo:
Muestra la fecha del siguiente viernes seis meses despus de la fecha de contratacin. La fecha
resultante debe aparecer como viernes 13 de agosto de 1999. Ordene los resultados por fecha de
contratacin.
SELECT

TO_CHAR(NEXT_DAY(ADD_MONTHS
(hire_date, 6), 'FRIDAY'),
'fmDay, Month ddth, YYYY')
"Next 6 Month Review"
FROM
employees
ORDER BY hire_date ;
Oracle Database: Conceptos Fundamentales de SQL I 4-25

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Funciones de Anidacin: Ejemplo 2

SELECT

TO_CHAR(ROUND((salary/7), 2),'99G999D99',
'NLS_NUMERIC_CHARACTERS = '',.'' ')
"Formatted Salary"
FROM employees;

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Funciones de Anidacin (continuacin)
le
N
b
a
O
I
El ejemplo de C
la diapositiva
ermuestra los salarios de los empleados dividido entre7 y redondeado a
f
s
A
dos decimales.
se formatea para mostrar el salario con notacin en dans. Es decir, la
D Eltrresultado
andecimal
Nutilizar
coma
se
como
y el punto para los miles.
U
F non
En primer lugar, la funcin interna ROUND se ejecuta para redondear el valor del salario dividido

entre 7 a dos decimales. La funcin TO_CHARse utiliza entonces para aplicar formato al resultado de
la funcin ROUND.
Nota: los elementos D y G especificados en el parmetro de funcin TO_CHAR son elementos de
formato de nmero. D devuelve un carcter decimal en la posicin especificada. G se utiliza como un
separador de grupo.

Oracle Database: Conceptos Fundamentales de SQL I 4-26

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Conversin de tipo de dato implcito y explcito


Funciones TO_CHAR, TO_DATE, TO_NUMBER

Funciones de anidacin
Funciones generales:

NVL
NVL2
NULLIF
COALESCE

s
a
h
Expresiones condicionales:
rg)
o

CASE
sa ide
e
d
DECODE
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 4-27

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Funciones Generales
Las siguientes funciones funcionan con cualquier tipo de dato y
pertenecen al uso de valores nulos:
NVL (expr1, expr2)
NVL2 (expr1, expr2, expr3)
NULLIF (expr1, expr2)
COALESCE (expr1, expr2, ..., exprn)

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Funciones Generales
le
N
b
a
O
r cualquier tipo de dato y pertenecen al uso de valores nulos en la lista
I
Estas funciones
funcionan
econ
C
f
s
A
de expresiones.
ND n-tran
U
F
Funcinno Descripcin
NVL

Convierte un valor nulo en un valor real

NVL2

Si expr1 no es nulo, NVL2 devuelve expr2. Si expr1 es nulo, NVL2


devuelve expr3. El argumento expr1 puede tener cualquier tipo de dato.

NULLIF

Compara dos expresiones y devuelve un valor nulo si son iguales; si no son


iguales, devuelve la primera expresin

COALESCE

Devuelve la primera expresin no nula en la lista de expresiones

Nota: para obtener ms informacin sobre los cientos de funciones disponibles, consulte la seccin
sobre funciones en Oracle Database SQL Language Reference (Referencia sobre Lenguaje SQL de
Oracle Database) para la base de datos 10g u 11g.

Oracle Database: Conceptos Fundamentales de SQL I 4-28

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Funcin NVL
Convierte un valor nulo a un valor real:
Los tipos de dato que se pueden utilizar son fecha,
carcter y nmero.
Los tipos de dato deben coincidir con:
NVL(commission_pct,0)
NVL(hire_date,'01-JAN-97')
NVL(job_id,'No Job Yet')

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
Funcin NVL
P
l
Nnulo raaunbvalor
O
Para convertir unIvalor
real, utilice la funcin NVL.
C nsfe
A
Sintaxis
ND n-tra
U
NVL
F (expr1,
no expr2)

En la sintaxis:
expr1 es el valor de origen o expresin que puede contener un valor nulo
expr2 es el valor de destino para convertir el valor nulo
Puede utilizar la funcin NVL para convertir cualquier tipo de dato, pero el valor de retorno siempre
es el mismo que el tipo de dato de expr1.
Conversiones NVL para Varios Tipos de Dato

Tipo de Dato

Ejemplo de Conversin

NUMBER

NVL(number_column,9)

DATE

NVL(date_column, '01-JAN-95')

CHAR or VARCHAR2

NVL(character_column, 'Unavailable')

Oracle Database: Conceptos Fundamentales de SQL I 4-29

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de la Funcin NVL


1

SELECT last_name, salary, NVL(commission_pct, 0),


(salary*12) + (salary*12*NVL(commission_pct, 0)) AN_SAL
FROM employees;

a
s
a
)h
g
r
o e
a
s
de Guid

y
o
r
t
1
2 n@p den
tu
io
S
c
a
is
d
h
n
t
u
f
(
se
u
A
Copyright 2010, Oracle
to Todos los derechos reservados.
ESy/o sussefiliales.
D
OY licen
R
Uso de la Funcin NVLP
le
N
b
a
O
I
Para calcular laCcompensacin
er anual de los empleados, necesita multiplicar el salario mensual por 12
f
s
A
y, a continuacin,
agregue
an el porcentaje de comisin al resultado:
r
ND SELECT
t
U
last_name, salary, commission_pct,
n
F no(salary*12)
+ (salary*12*commission_pct) AN_SAL
FROM

employees;

Tenga en cuenta que la compensacin anual se calcula slo para los empleados que obtienen una
comisin. Si cualquier valor de columna de una expresin es nulo, el resultado es nulo. Para calcular
los valores para todos los empleados, puede convertir los valores nulos a un nmero antes de aplicar
el operador aritmtico. En el ejemplo de la diapositiva, la funcin NVL se utiliza para convertir
valores nulos a cero.
Oracle Database: Conceptos Fundamentales de SQL I 4-30

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de la Funcin NVL2

SELECT last_name, salary, commission_pct,


1
NVL2(commission_pct,
2
'SAL+COMM', 'SAL') income
FROM
employees WHERE department_id IN (50, 80);

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
2 ion
1
tud
S
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
Uso de la Funcin NVL2
P
N primera
bl expresin. Si la primera expresin no es nula, la funcin NVL2
La funcin NVL2IO
examinaelara
C expresin.
sf Si la primera expresin es nula, se devolver la tercera expresin.
devuelveD
la A
segunda
n
a
N n-tr
Sintaxis
FU noNVL2(expr1,
expr2, expr3)
En la sintaxis:
expr1 es el valor de origen o expresin que puede contener un valor nulo
expr2 es el valor que se devuelve si expr1 no es nulo
expr3 es el valor que se devuelve si expr1 es nulo
En el ejemplo de la diapositiva se examina la columna COMMISSION_PCT. Si se detecta un valor,
se devolver el valor literal de texto de SAL+COMM. Si la columna COMMISSION_PCT contiene un
valor nulo, se devolver el valor literal de texto SAL.
Nota: el argumento expr1 puede tener cualquier tipo de dato. Los argumentos expr2 y expr3
pueden tener cualquier tipo de dato excepto LONG.

Oracle Database: Conceptos Fundamentales de SQL I 4-31

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de la Funcin NULLIF


1
SELECT first_name, LENGTH(first_name) "expr1",
2
last_name, LENGTH(last_name) "expr2",
NULLIF(LENGTH(first_name), LENGTH(last_name)) result
FROM
employees;

s
a
h
rg)
o

sa ide
e
d
roy nt Gu

p
n@ tude
o
1
i
2
3
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
Uso de la Funcin NULLIF
P
N
blexpresiones.
a
O
La funcin NULLIF
compara
dos
r
I
AC ansfe
D
Sintaxis
N n-tr
FUNULLIF
no (expr1, expr2)

En la sintaxis:
NULLIF compara expr1 y expr2. Si son iguales, la funcin devuelve un valor nulo. Si no, la
funcin devuelve expr1. Sin embargo, no puede especificar el literal NULL para expr1.
En el ejemplo de la diapositiva, la longitud del nombre en la tabla EMPLOYEES se compara con la
longitud del apellido en la tabla EMPLOYEES. Cuando las longitudes de ambos son iguales, se
mostrar un valor nulo. Cuando las longitudes no son iguales, se mostrar la longitud del nombre.
Nota: la funcin NULLIF es el equivalente lgico de la siguiente expresin CASE. La expresin
CASE se trata en la siguiente pgina:
CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END

Oracle Database: Conceptos Fundamentales de SQL I 4-32

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de la Funcin COALESCE

La ventaja de la funcin COALESCE con respecto a la


funcin NVL es que la funcin COALESCE puede obtener
mltiples valores alternativos.
Si la primera expresin no es nula, la funcin COALESCE
devuelve esa expresin; de lo contrario, aplica la funcin
COALESCE de las expresiones restantes.

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
Uso de la Funcin COALESCE
P
N devuelve
blla primera expresin no nula de la lista.
a
O
La funcin COALESCE
r
I
AC ansfe
D
Sintaxis
N n-tr (expr1, expr2, ... exprn)
FU noCOALESCE
En la sintaxis:
expr1 devuelve esta expresin si no es nula
expr2 devuelve esta expresin si la primera expresin es nula y sta no es nula
exprn devuelve esta expresin si las expresiones anteriores son nulas
Tenga en cuenta que todas las expresiones deben ser del mismo tipo de dato.

Oracle Database: Conceptos Fundamentales de SQL I 4-33

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de la Funcin COALESCE


SELECT last_name, employee_id,
COALESCE(TO_CHAR(commission_pct),TO_CHAR(manager_id),
'No commission and no manager')
FROM employees;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
ce
i
RO (continuacin)
l
Uso de la Funcin COALESCE
P
le
N
b
a
O
En el ejemplo de Ila diapositiva
r se muestra el valor manager_id si ste no es nulo. Si el valor
emostrar
Ces nulo,
f
s
A
manager_id
se
commission_pct. Si los valores manager_id y
D tran
N
commission_pct
U on- son nulos, se muestra No commission and no manager. Tenga en cuenta que
F
la funcinnTO_CHAR se aplica de modo que todas las expresiones sean del mismo tipo de dato.

Oracle Database: Conceptos Fundamentales de SQL I 4-34

Fundacin Proydesa
Uso de la Funcin COALESCE (continuacin)

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Ejemplo:
Para los empleados que no perciben ninguna comisin, la organizacin desea proporcionar un
aumento de salario de 2.000 dlares y para los empleados que perciben comisin, la consulta debe
calcular el nuevo salario que es igual al salario existente sumado a la comisin.
SELECT last_name, salary, commission_pct,
COALESCE((salary+(commission_pct*salary)), salary+2000, salary) "New
Salary"
FROM
employees;

Nota: examine la salida. Para los empleados que no perciben ninguna comisin, la columna de nuevo
salario muestra el salario aumentado en 2.000 dlares y para los empleados que perciben comisin, la
columna de nuevo salario muestra la comisin calculada sumada al salario.

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d

fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 4-35

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Conversin de tipo de dato implcito y explcito


Funciones TO_CHAR, TO_DATE, TO_NUMBER

Funciones de anidacin
Funciones generales:

NVL
NVL2
NULLIF
COALESCE

s
a
h
Expresiones condicionales:
rg)
o

CASE
sa ide
e
d
DECODE
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 4-36

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Expresiones Condicionales

Proporcionar el uso de la lgica IF-THEN-ELSE en una


sentencia SQL
Utilizar dos mtodos:
Expresin CASE
Funcin DECODE

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Expresiones Condicionales le
bpara implantar el procesamiento condicional (lgicaIF-THENa
ONse utilizan
Los dos mtodosIque
r
e
C
sf son la expresin CASE y la funcin DECODE.
ELSE) enD
laA
sentencianSQL
a
N n-tr CASE cumple con SQL ANSI. La funcin DECODE es especfica de la sintaxis de
Nota:
FU la expresin
o
Oracle. n

Oracle Database: Conceptos Fundamentales de SQL I 4-37

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Expresin CASE
Facilita las consultas condicionales realizando el trabajo de una
sentencia IF-THEN-ELSE:
CASE expr WHEN
[WHEN
WHEN
ELSE
END

comparison_expr1 THEN return_expr1


comparison_expr2 THEN return_expr2
comparison_exprn THEN return_exprn
else_expr]

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
Expresin CASE
P
N permiten
bl utilizar la lgica IF-THEN-ELSE en las sentencias SQL sin
a
O
Las expresiones
CASEe
r
I
sf
ACa los
tener queD
llamar
procedimientos.
n
a
-trCASE simple, el servidor de Oracle busca el primer par WHEN ... THEN para el
UNexpresin
En
n
Funa
o
que exprnes igual a comparison_expr y devuelve return_expr. Si ninguno de los pares
WHEN ... THEN cumple con esta condicin y existe una clusula ELSE, el servidor de Oracle
devuelve else_expr. De lo contrario, el servidor de Oracle devuelve un valor nulo. No puede
especificar el valor literal NULL para todas las expresiones return_expr y else_expr.
Las expresiones expr y comparison_expr deben ser del mismo tipo de dato, que puede ser
CHAR, VARCHAR2, NCHAR o NVARCHAR2. Todos los valores de retorno (return_expr) deben
ser del mismo tipo de dato.

Oracle Database: Conceptos Fundamentales de SQL I 4-38

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de la Expresin CASE


Facilita las consultas condicionales realizando el trabajo de una
sentencia IF-THEN-ELSE:
SELECT last_name, job_id, salary,
CASE job_id WHEN 'IT_PROG' THEN 1.10*salary
WHEN 'ST_CLERK' THEN 1.15*salary
WHEN 'SA_REP'
THEN 1.20*salary
ELSE
salary END
"REVISED_SALARY"
FROM
employees;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@

on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
Uso de la Expresin CASE
P
N
bl se descodifica el valor de JOB_ID. Si JOB_ID es IT_PROG,
a
O
En la sentencia SQL
de la e
diapositiva,
r
I
f
AC
el aumento
de
salarionessdel 10%; si JOB_ID es ST_CLERK, el aumento de salario es del 15%; si
D
a
-tr el aumento del salario es del 20%. Para el resto de otros roles de cargo, no hay
JOB_ID
UN esoSA_REP,
n
F
n de salario.
ningn aumento

La misma sentencia se puede escribir con la funcin DECODE.


El siguiente cdigo es un ejemplo de la expresin buscada CASE. En una expresin CASE buscada,
la bsqueda se realiza de izquierda a derecha hasta que se encuentra una coincidencia de la condicin
mostrada y, a continuacin, se devuelve la expresin de retorno. Si no se encuentra ninguna
condicin verdadera y existe una clusula ELSE, se devuelve la expresin de retorno en la clusula
ELSE; de lo contrario, se devuelve NULL.
SELECT last_name,salary,
(CASE WHEN salary<5000 THEN 'Low'
WHEN salary<10000 THEN 'Medium'
WHEN salary<20000 THEN 'Good'
ELSE 'Excellent'
END) qualified_salary
FROM employees;

Oracle Database: Conceptos Fundamentales de SQL I 4-39

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Funcin DECODE
Facilita las consultas condicionales realizando el trabajo de una
expresin CASE o una sentencia IF-THEN-ELSE:
DECODE(col|expression, search1, result1
[, search2, result2,...,]
[, default])

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
Funcin DECODE
P
l
N
buna
a
O
La funcin DECODE
decodifica
expresin de una forma similar a la lgica IF-THEN-ELSE que
r
I
C nsfe La funcin
se utilizaD
enA
varios idiomas.
DECODE descodifica expression despus de compararla
a
r
N
t
conU
Si la expresin es la misma que search, se devuelve result.
nsearch.
F cada nvalor
o
Si se omite el valor por defecto, se devuelve un valor nulo donde un valor de bsqueda no coincida
con ninguno de los valores de resultado.

Oracle Database: Conceptos Fundamentales de SQL I 4-40

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de la Funcin DECODE

SELECT last_name, job_id, salary,


DECODE(job_id, 'IT_PROG', 1.10*salary,
'ST_CLERK', 1.15*salary,
'SA_REP',
1.20*salary,
salary)
REVISED_SALARY
FROM
employees;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o

pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
Uso de la Funcin DECODE
P
N
bl se prueba el valor de JOB_ID. Si JOB_ID es IT_PROG, el
a
O
En la sentencia SQL
de la e
diapositiva,
r
I
C sf10%; si JOB_ID es ST_CLERK, el aumento de salario es del 15%; si
aumento D
de A
salario esndel
ra el aumento del salario es del 20%. Para el resto de otros roles de cargo, no hay
N es SA_REP,
t
JOB_ID
U
n
F no de salario.
ningn aumento

La misma sentencia se puede expresar en pseudocdigo como una sentencia IF-THEN-ELSE:


IF job_id =
IF job_id =
IF job_id =
ELSE salary

'IT_PROG'
'ST_CLERK'
'SA_REP'
= salary

THEN
THEN
THEN

salary = salary*1.10
salary = salary*1.15
salary = salary*1.20

Oracle Database: Conceptos Fundamentales de SQL I 4-41

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de la Funcin DECODE


Mostrar el impuesto aplicable para cada empleado del
departamento 80:
SELECT last_name, salary,
DECODE (TRUNC(salary/2000, 0),
0, 0.00,
1, 0.09,
2, 0.20,
3, 0.30,
4, 0.40,
5, 0.42,
6, 0.44,
0.45) TAX_RATE
FROM
employees
WHERE department_id = 80;

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
ce
i
RO
l
Uso de la Funcin DECODE
(continuacin)
P
le
N
b
a
O
Esta diapositiva muestra
otro
I
er ejemplo que utiliza la funcin DECODE. En este ejemplo, puede
C
f
s
A
determinar
los impuestos
an para cada empleado del departamento 80 segn su salario mensual. Los
r
NDson
t
impuestos
los
siguientes:
U
F non
Rango de Salario Mensual
Impuesto
$0,001.999,99
$2.000,003.999,99
$4.000,005.999,99
$6.000,007.999,99
$8.000,009.999,99
$10.000,0011.999,99
$12.200,0013.999,99
14.000,00 o superior

00%
09%
20%
30%
40%
42%
44%
45%

Oracle Database: Conceptos Fundamentales de SQL I 4-42

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Prueba
La funcin TO_NUMBER convierte las cadenas de caracteres o
los valores de fecha a un nmero con el formato especificado
por el modelo de formato opcional.
1. True
2. Falso

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Respuesta: 2
le
N
b
a
O
CI nsfer
A
ND n-tra
U
F no

Oracle Database: Conceptos Fundamentales de SQL I 4-43

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Resumen
En esta leccin, debe haber aprendido lo siguiente:
Modificar formatos de fecha para su visualizacin
utilizando funciones
Convertir tipos de dato de columna utilizando funciones
Utilizar funciones NVL
Utilizar la lgicaIF-THEN-ELSE y otra expresin
condicional en una sentencia SELECT

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Resumen
le
N
b
a
O
I
Recuerde lo siguiente:
er
C
f
s
A
Las funciones
pueden convertir valores numricos, de fecha y de carcter:
radenconversin
ND n-TO_CHAR,
t
Funciones
TO_DATE, TO_NUMBER
U
F Existen
novarias funciones que pertenecen a valores nulos, incluyendo NVL, NVL2, NULLIF y
COALESCE.
La lgica IF-THEN-ELSE se puede aplicar en una sentencia SQL utilizando la expresin
CASE o la funcin DECODE.

Oracle Database: Conceptos Fundamentales de SQL I 4-44

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Prctica 4: Visin General


En esta prctica se abordan los siguientes temas:
Creacin de consultas que utilizan TO_CHAR, TO_DATE y
otras funciones DATE

Creacin de consultas que utilizan expresiones


condicionales como DECODE y CASE

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Prctica 4: Visin General
le
N
b
a
O
Esta prctica proporciona
ejercicios que utilizan las funciones TO_CHAR y
eunar variedad de
CI nsfcondicionales
A
TO_DATE
y
expresiones
como
DECODE y CASE. Recuerde que para las funciones
D tra
N
anidadas,
se evalan desde la funcin ms profunda hasta la funcin menos profunda.
FU nlosonresultados

Oracle Database: Conceptos Fundamentales de SQL I 4-45

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa

Informes de Datos Agregados con


Funciones de Grupo

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Objetivos
Al finalizar esta leccin, debera estar capacitado para lo
siguiente:
Identificar las funciones de grupo disponibles
Describir los usos de las funciones de grupo
Agrupar datos con la clusula GROUP BY
Incluir o excluir filas agrupadas con la clusula HAVING

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Objetivos
le
N
b
a
O
Ilas funciones
Esta leccin trata
er ms detalladamente. Se centra en obtener informacin de resumen
C
f
s
A
(como medias)
paraagrupos
n de filas. Describe cmo agrupar las filas de una tabla en juegos ms
r
NDy cmo
t
pequeos
especificar
los criterios de bsqueda para grupos de filas.
U
F non

Oracle Database: Conceptos Fundamentales de SQL I 5-2

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Funciones de grupo:

Tipos y sintaxis
Uso de AVG, SUM, MIN, MAX, COUNT
Uso de la palabra clave DISTINCT en funciones de grupo
Valores NULL en una funcin de grupo

Agrupar filas:
Clusula GROUP BY
Clusula HAVING

s
a
h
Anidamiento de funciones de grupo
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 5-3

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Qu Son las Funciones de Grupo?


Las funciones de grupo funcionan en juegos de filas para
proporcionar un resultado por grupo.
EMPLOYEES

Salario mximo en
la tabla EMPLOYEES

s
a
h
rg)
o

sa ide

e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Qu Son las Funciones de Grupo?
le
N
b
a
O
I funciones
A diferencia deClas
er de una sola fila, las funciones de grupo funcionan en juegos de filas
f
s
A
para proporcionar
D trunanresultado por grupo. Estos juegos pueden formar la tabla completa o la tabla
Nen
dividida
U
nF nogrupos.

Oracle Database: Conceptos Fundamentales de SQL I 5-4

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Tipos de Funciones de Grupo

AVG
COUNT
MAX
MIN
STDDEV
SUM
VARIANCE

Funciones
de grupo

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Tipos de Funciones de Grupo le
rabun argumento. La siguiente tabla identifica las opciones que se
ION feacepta
Cada una de las
funciones
C
pueden utilizar
ns
DA entrlaasintaxis:
N
FU
Funcin
Descripcin
non
AVG([DISTINCT|ALL]n)

Valor medio de n; ignora los valores nulos

COUNT({*|[DISTINCT|ALL]expr
})
MAX([DISTINCT|ALL]expr)

Nmero de filas donde expr evala otros


valores que no son nulos (tiene en cuenta todas
filas seleccionadas con *, incluyendo duplicados
y filas con valores nulos)
Valor mximo de expr; ignora los valores nulos

MIN([DISTINCT|ALL]expr)

Valor mnimo de expr; ignora los valores nulos

STDDEV([DISTINCT|ALL]n)
SUM([DISTINCT|ALL]n)

Desviacin estndar de n; ignora los valores


nulos
Valores de suma de n; ignora los valores nulos

VARIANCE([DISTINCT|ALL]n)

Varianza de n; ignora los valores nulos

Oracle Database: Conceptos Fundamentales de SQL I 5-5

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Funciones de Grupo: Sintaxis

SELECT
FROM
[WHERE
[ORDER BY

group_function(column), ...
table
condition]
column];

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Funciones de Grupo: Sintaxisle
b
a
La funcin de grupo
se coloca
despus de la palabra clave SELECT. Puede que tenga varias
r
ION
e
C
sf por comas.
funcionesD
deAgrupoa
separadas
n
N
-trutilizar las funciones de grupo:
Instrucciones
FU nonpara
DISTINCT hace que la funcin considere slo los valores no duplicados; ALL hace que

considere cada valor, incluyendo los duplicados. El valor por defecto es ALL y, por lo tanto, no
es necesario especificarlo.
Los tipos de dato para las funciones con el argumento expr pueden ser CHAR, VARCHAR2,
NUMBER o DATE.
Todas las funciones de grupo ignoran los valores nulos. Para sustituir un valor para valores
nulos, utilice las funciones NVL, NVL2, COALESCE, CASE o DECODE.

Oracle Database: Conceptos Fundamentales de SQL I 5-6

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de las Funciones AVG y SUM


Puede utilizar AVG y SUM para datos numricos.
SELECT AVG(salary), MAX(salary),
MIN(salary), SUM(salary)
FROM
employees
WHERE job_id LIKE '%REP%';

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RyOSUMe lice
Uso de las Funciones AVG
P
N rAVG,
blSUM, MIN y MAX en las columnas que pueden almacenar datos
a
O
Puede utilizar lasIfunciones
fela diapositiva muestra la media, el valor ms alto, ms bajo y la suma de
s
AC
numricos.
El
ejemplo
de
n
D
ra de todos los vendedores.
N mensuales
t
los
salarios
U
n
F no

Oracle Database: Conceptos Fundamentales de SQL I 5-7

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de Funciones MIN y MAX


Puede utilizar MIN y MAX para tipos de dato numricos, de
caracteres y de fecha.
SELECT MIN(hire_date), MAX(hire_date)
FROM
employees;

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O
ce
Uso de Funciones MINP
yR
MAX le li
aby MIN para tipos de dato numricos, de caracteres y de fecha. El
ON ferMAX
Puede utilizar lasIfunciones
C
ejemplo de
ns muestra los empleados ms y menos experimentados.
DlaAdiapositiva
a
r
N
t
U oejemplo
ElFsiguiente
n- muestra el apellido del empleado que est en primer lugar y del que est en
n
ltimo lugar en una lista de todos los empleados ordenada alfabticamente:

SELECT MIN(last_name), MAX(last_name)


FROM
employees;

Nota: las funciones AVG, SUM, VARIANCE y STDDEV se pueden utilizar slo con los tipos de dato
numricos. MAX and MIN no se pueden utilizar con tipos de dato LOB o LONG.

Oracle Database: Conceptos Fundamentales de SQL I 5-8

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de la Funcin COUNT


COUNT(*) devuelve el nmero de filas en una tabla:

SELECT COUNT(*)
FROM
employees
WHERE department_id = 50;

COUNT(expr) devuelve el nmero de filas con valores no


nulos para la expresin expr:

s
a
h
2
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
Uso de la Funcin COUNT
P
N rformatos:
bl
a
O
La funcin COUNT
tiene tres
I
AC ansfe
COUNT(*)
D
N n-tr
F UCOUNT(expr)
no
COUNT(DISTINCT
expr)
SELECT COUNT(commission_pct)
FROM
employees
WHERE department_id = 80;

COUNT(*) devuelve el nmero de filas en una tabla que cumplan con el criterio de la sentencia
SELECT, incluyendo las filas duplicadas y las filas que contengan valores nulos en cualquiera de las
columnas. Si se incluye una clusulaWHERE en la sentencia SELECT, COUNT(*) devuelve el
nmero de filas que cumpla con la condicin de la clusula WHERE.
Por el contrario, COUNT(expr) devuelve el nmero de valores no nulos que estn en la columna
identificada con expr.
COUNT(DISTINCT expr) devuelve el nmero de valores nicos no nulos que estn en la columna
identificada con expr.
Ejemplos:
1. El ejemplo de la diapositiva muestra el nmero de empleados del departamento 50.
2. Tambin muestra el nmero de empleados del departamento 80 que pueden percibir una
comisin.

Oracle Database: Conceptos Fundamentales de SQL I 5-9

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de la Palabra Clave DISTINCT

COUNT(DISTINCT expr) devuelve el nmero con valores


distintos no nulos de expr.

Para mostrar el nmero de valores distintos de


departamento en la tabla EMPLOYEES:
SELECT COUNT(DISTINCT department_id)
FROM
employees;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
Uso de la Palabra Clave
DISTINCT
P
N DISTINCT
bl para suprimir el recuento de cualquier valor duplicado en una
a
O
Utilice la palabraIclave
r
C nsfe
columna.DA
ra
UN odenla-tdiapositiva
ElFejemplo
muestra el nmero de valores de departamento distintos que estn en la
n
tabla EMPLOYEES.

Oracle Database: Conceptos Fundamentales de SQL I 5-10

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Funciones de Grupo y Valores Nulos


Las funciones de grupo ignoran los valores nulos de la
columna:

SELECT AVG(commission_pct)
FROM
employees;

La funcin NVL fuerza las funciones de grupo para que


incluyan valores nulos.

s
a
h
rg)
SELECT AVG(NVL(commission_pct, 0))
o

2 FROM employees;
sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Funciones de Grupo y Valoresle
Nulos
N
b
a
O
Todas las funciones
CI densgrupo
fer ignoran los valores nulos de la columna.
A
Sin embargo,
rafuerza las funciones de grupo para que incluyan valores nulos.
ND nNVL
t
U
F no
Ejemplos:
1. La media se calcula nicamente en base a las filas de la tabla en las que se almacena un valor

vlido en la columna COMMISSION_PCT. La media se calcula con la comisin total pagada a


todos los empleados dividida entre el nmero de empleados que perciben una comisin (cuatro).
2. La media se calcula en base a todas las filas de la tabla, independientemente de si los valores
nulos se almacenan en la columna COMMISSION_PCT. La media se calcula con la comisin
total pagada a todos los empleados dividida entre el nmero de empleados de la compaa (20).

Oracle Database: Conceptos Fundamentales de SQL I 5-11

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Funciones de grupo:

Tipos y sintaxis
Uso de AVG, SUM, MIN, MAX, COUNT
Uso de la palabra clave DISTINCT en funciones de grupo
Valores NULL en una funcin de grupo

Agrupar filas:
Clusula GROUP BY
Clusula HAVING

s
a
h
Anidamiento de funciones de grupo
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 5-12

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Creacin de Grupos de Datos


EMPLOYEES
4400
9500

Salario medio en la
tabla EMPLOYEES para
cada departamento

3500

a
s
a
)h
g
r
10033
o e
a
s

de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Creacin de Grupos de Datos le
ONlasfefunciones
rab de grupo han considerado la tabla como un grupo de
Itodas
Hasta este punto,
C
informacin
tamao.
ns Sin embargo, en ocasiones es necesario dividir la tabla de informacin
DAde gran
a
r
N
t
en grupos
Para ello, hay que utilizar la clusula GROUP BY.
FU nms
onpequeos.
6400

Oracle Database: Conceptos Fundamentales de SQL I 5-13

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Creacin de Grupos de Datos: Sintaxis de la


Clusula GROUP BY
Puede dividir las filas de una tabla en grupos ms pequeos
utilizando la clusula GROUP BY.
SELECT
column, group_function(column)
FROM
table
[WHERE
condition]
[GROUP BY group_by_expression]
[ORDER BY column];

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
ice de la Clusula GROUP BY
RO eSintaxis
l
Creacin de Grupos dePDatos:
N GROUP
blBY para dividir las filas de la tabla en grupos. A continuacin
a
O
Puede utilizar la clusula
r
I
fede grupo para devolver informacin de resumen de cada grupo.
s
AC
puede utilizar
las funciones
n
D
N n-tra
U
En
la
sintaxis:
F no
group_by_expression
Especifica columnas cuyos valores determinan la base para

agrupar filas
Instrucciones
Si incluye una funcin de grupo en una clusula SELECT, no puede seleccionar tambin
resultados individuales a menos que la columna individual aparezca en la clusula GROUP BY.
Recibir un mensaje de error si no puede incluir la lista de columnas en la clusula GROUP BY.
Al utilizar la clusula WHERE, puede excluir las filas antes de dividirlas en grupos.
Debe incluir las columnas en la clusula GROUP BY.
No puede utilizar un alias de columna en la clusula GROUP BY.

Oracle Database: Conceptos Fundamentales de SQL I 5-14

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de la Clusula GROUP BY


Todas las columnas de la lista SELECT que no estn incluidas en
las funciones de grupo deben estar en la clusula GROUP BY.
SELECT
department_id, AVG(salary)
FROM
employees
GROUP BY department_id ;

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
RBY
Uso de la Clusula GROUP
P
le
N
b
a
O
Al utilizar la clusula
asegrese de que todas las columnas de la lista SELECT que no
er BY,estn
CI nGROUP
fgrupo
s
A
estn en las
funciones
de
incluidas en la clusula GROUP BY. El ejemplo de la
D tra
N
- el nmero de departamento y el salario medio de cada departamento. A
diapositiva
U omuestra
n
F
n
continuacin se muestra cmo se evala esta sentencia SELECT que contiene una clusula GROUP

BY:
La clusula SELECT especifica las columnas que se van a recuperar de la siguiente forma:
- Columna del nmero de departamento de la tabla EMPLOYEES
- Media de todos los salarios del grupo especificada en la clusula GROUP BY
La clusula FROM especifica las dos tablas a las que la base de datos debe acceder: tabla
EMPLOYEES.
La clusula WHERE especifica las filas que se van a recuperar. Ya que no existe ninguna clusula
WHERE, por defecto se recuperarn todas las filas.
La clusula GROUP BY especifica cmo se deben agrupar las filas. Las filas se agrupan por
nmero de departamento, por lo tanto, la funcin AVG aplicada a la columna de salario calcula el
salario medio de cada departamento.
Nota: para ordenar los resultados de las consultas en orden ascendente o descendente, incluya la
clusula ORDER BY en la consulta.

Oracle Database: Conceptos Fundamentales de SQL I 5-15

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de la Clusula GROUP BY


No es necesario que la columna GROUP BY est en la lista
SELECT.
SELECT
AVG(salary)
FROM
employees
GROUP BY department_id ;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
RBY
Uso de la Clusula GROUP
Clause
P
e (continuacin)
l
N
b
No es necesario que
ra GROUP BY est en la clusula SELECT. Por ejemplo, la sentencia
IOla columna
e
C
f
SELECTD
deA
la diapositiva
ns muestra los salarios medios de cada departamento sin mostrar los
a
r
N
t
respectivos
U onmeros
n- de departamento. Sin embargo, sin los nmeros de departamento, los resultados
F
n
no parecen significativos.
Tambin puede utilizar la funcin de grupo en la clusula ORDER BY:
SELECT
FROM
GROUP BY
ORDER BY

department_id, AVG(salary)
employees
department_id
AVG(salary);

Oracle Database: Conceptos Fundamentales de SQL I 5-16

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agrupacin de Ms de Una Columna


EMPLOYEES

Agregar los salarios en la tabla


EMPLOYEES para cada cargo,
agrupado por departamento.

a
s
a
)h
g
r
o e
a
s
de Guid
y

o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Agrupacin de Ms de Una Columna
le
N
b
a
O
r resultados de grupos dentro de grupos. La diapositiva muestra un
I
En ocasiones necesitar
ver
elos
C
f
s
A
informe que
D muestra
anel salario total pagado a cada puesto de cada departamento.
r
N
t
U
Segn
la tabla EMPLOYEES se agrupa en primer lugar por nmero de
n
F esenagrupamiento,
o
departamento y, a continuacin, por puesto. Por ejemplo, los cuatro oficinistas en el departamento de
stock del departamento 50 se agrupan conjuntamente y se produce un resultado nico (salario total)
para todos los oficinistas en el departamento de stock del grupo.
La siguiente sentencia SELECT devuelve el resultado mostrado en la diapositiva:
SELECT
FROM
GROUP BY
ORDER BY

department_id, job_id, sum(salary)


employees
department_id, job_id
job_id;

Oracle Database: Conceptos Fundamentales de SQL I 5-17

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de la Clusula GROUP BY en Varias Columnas


SELECT
FROM
WHERE
GROUP BY
ORDER BY

department_id, job_id, SUM(salary)


employees
department_id > 40
department_id, job_id
department_id;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
RBy
Uso de la Clusula Group
en
P
eVarias Columnas
l
N
b
Puede devolver resultados
IO federaresumen para grupos y subgrupos mostrando varias columnas GROUP BY.
C
La clusula
GROUP BY
nsagrupa filas pero no garantiza el orden del juego de resultados. Para ordenar los
DA
a
r
N
t
agrupamientos,
utilice
U on- la clusula ORDER BY.
F
n de la diapositiva, la sentencia SELECT que contiene una clusula GROUP BY se evala
En el ejemplo

de la siguiente forma:
La clusula SELECT especifica la columna que se van a recuperar:
- ID de departamento en la tabla EMPLOYEES
- ID de cargo de la tabla EMPLOYEES
- Suma de todos los salarios del grupo especificada en la clusula GROUP BY
La clusula FROM especifica las dos tablas a las que la base de datos debe acceder: tabla
EMPLOYEES.
La clusula WHERE reduce el juego de resultados a aquellas filas en las que el ID de departamento
es mayor de 40.
La clusula GROUP BY especifica cmo debe agrupar las filas resultantes:
- En primer lugar, las filas se agrupan por ID de departamento.
- En segundo lugar, las filas se agrupan por ID de cargo en los grupos de ID de departamento.
La clusula ORDER BY ordena los resultados por ID de departamento.
Nota: la funcin SUM se aplica a la columna de salario de todos los ID de cargo en el juego de
resultados de cada grupo de ID de departamento. Adems, tenga en cuenta que la fila SA_REP no se
devuelve. El ID de departamento para esta fila es NULL y, por lo tanto, no cumple la condicin WHERE.
Oracle Database: Conceptos Fundamentales de SQL I 5-18

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Consultas No Vlidas Realizadas con las


Funciones de Grupo
Cualquier columna o expresin de la lista SELECT que no sea
una funcin de agregacin debe estar en la clusula GROUP BY:
SELECT department_id, COUNT(last_name)
FROM
employees;
Una clusula GROUP BY se debe
agregar para el recuento de los
apellidos para cada department_id.

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
Agregar job_id en GROUP
ot
pr BY
n
e
@
eliminar la columna
n job_id
ud de la
o
t
i
S
c
lista SELECT.
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Consultas No Vlidas Realizadas
le con las Funciones de Grupo
N
b
a
O
Cuando utilice una
individual (DEPARTMENT_ID) y funciones de grupo
CI mezcla
feder elementos
s
(COUNT)D
enA
la mismansentencia
SELECT debe incluir una clusula GROUP BY que especifique los
ra (en este caso, DEPARTMENT_ID). Si falta la clusula GROUP BY, aparecer
N individuales
t
elementos
U
n
F no
el mensaje
de error not a single-group group function y la columna incorrecta estar indicada con
SELECT department_id, job_id, COUNT(last_name)
FROM
employees
GROUP BY department_id ;

un asterisco (*). Puede corregir el error del primer ejemplo de la diapositiva agregando la clusula
GROUP BY:
SELECT
department_id, count(last_name)
FROM employees
GROUP BY department_id ;

Cualquier columna o expresin de la lista SELECT que no sea una funcin de agregacin debe estar
en la clusula GROUP BY. En el segundo ejemplo de la diapositiva, job_id no est en la clusula
GROUP BY ni la utiliza una funcin de grupo, por lo que se produce un error not a GROUP BY
expression. Puede corregir el error del segundo ejemplo de la diapositiva agregando job_id en la
clusula GROUP BY.
SELECT department_id, job_id, COUNT(last_name)
FROM
employees
GROUP BY department_id, job_id;

Oracle Database: Conceptos Fundamentales de SQL I 5-19

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Consultas No Vlidas Realizadas con las


Funciones de Grupo

No puede utilizar la clusula WHERE para restringir grupos.


Debe utilizar la clusula HAVING para restringir grupos.
No puede utilizar las funciones de grupo de la clusula WHERE.
SELECT
FROM
WHERE
GROUP BY

department_id, AVG(salary)
employees
AVG(salary) > 8000
department_id;

a
s
a
No puede utilizar la ) h
rg
clusula WHERE para
o
sa ide
restringire
grupos
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Consultas No Vlidas Realizadas
le con las Funciones de Grupo (continuacin)
N
b
a
O
I la clusula
No se puede utilizar
er WHERE para restringir grupos. La sentencia SELECT del ejemplo de
C
f
s
A
la diapositiva
muestra
nun error porque se est utilizando la clusula WHERE para restringir la
rasalarios
ND nde
t
visualizacin
los
medios de los departamentos que tienen un salario medio superior a
U
F
o
n
8.000 dlares.
Puede corregir el error del ejemplo utilizando la clusula HAVING para restringir grupos:
SELECT
FROM
GROUP BY
HAVING

department_id, AVG(salary)
employees
department_id
AVG(salary) > 8000;

Oracle Database: Conceptos Fundamentales de SQL I 5-20

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Restriccin de Resultados de Grupo


EMPLOYEES

Salario mximo por


departamento cuando es
es superior a 10.000 dlares

a
s
a
)h
g
r
o e
a
s

de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Restriccin de Resultados de lGrupo
e
N
b
a
O
Utilice la clusulaI HAVING
erpara restringir grupos de la misma forma que utiliza la clusula WHERE
C
f
s
A
para restringir
nseleccionadas. Para buscar el salario mximo de cada uno de los
atienen
rfilas
ND nlas
t
departamentos
que
un salario mximo superior a 10.000 dlares, necesitar realizar las
U
F
o
n
siguientes acciones:
1. Buscar el salario medio de cada departamento realizando una agrupacin por nmero de
departamento.
2. Restringir los grupos a los departamentos con un salario mximo superior a 10.000 dlares.

Oracle Database: Conceptos Fundamentales de SQL I 5-21

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Restriccin de Resultados de Grupo con la


Clusula HAVING
Al utilizar la clusula HAVING, el servidor de Oracle restringe
los grupos de la siguiente forma:
1. Agrupa las filas.
2. Aplica la funcin de grupo.
3. Muestra los grupos que coinciden con la clusula HAVING.
SELECT
FROM
[WHERE
[GROUP BY
[HAVING
[ORDER BY

column, group_function
table
condition]
group_by_expression]
group_condition]
column];

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
cecon la Clusula HAVING
i
RO
l
Restriccin de Resultados
de lGrupo
P
e
N
b
a
O
Puede utilizar la clusula
HAVING
I
er para especificar los grupos que se van a mostrar y, por lo tanto,
C
f
s
A
restringirD
los gruposasegn
n la informacin de agregacin.
r
N
t
U
En
ngroup_condition restringe los grupos de filas de aquellos grupos para los que la
Fla sintaxis,
o
n
condicin especificada es verdadera.
El servidor de Oracle realiza los siguientes pasos al utilizar la clusula HAVING:
1. Agrupa las filas.
2. Aplica la funcin de grupo al grupo.
3. Muestra los grupos que coinciden con los criterios de la clusula HAVING.
La clusula HAVING puede preceder a la clusula GROUP BY, pero se recomienda que coloque la
clusula GROUP BY primero porque es ms lgico. Los grupos estn formados y las funciones de
grupo se calculan antes de aplicar la clusula HAVING a los grupos de la lista SELECT.
Nota: la clusula WHERE restringe filas, mientras que la clusula HAVING restringe grupos.

Oracle Database: Conceptos Fundamentales de SQL I 5-22

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de la Clusula HAVING

SELECT
FROM
GROUP BY
HAVING

department_id, MAX(salary)
employees
department_id
MAX(salary)>10000 ;

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
Uso de la Clusula HAVING
P
abl los nmero de departamento y los salarios mximos de los
ON fermuestra
El ejemplo de C
la Idiapositiva
departamentos
salario
ns mximo sea superior a 10.000 dlares.
DA cuyo
a
r
N
t
Puede
nla- clusula GROUP BY sin utilizar una funcin de grupo en la lista SELECT. Si
FU utilizar
o
n
restringe las filas segn el resultado de una funcin de grupo, debe tener una clusula GROUP BY y
una clusula HAVING.
El siguiente ejemplo muestra los nmeros de departamento y los salarios medios de los
departamentos cuyo salario mximo sea superior a 10.000 dlares:
SELECT
FROM
GROUP BY
HAVING

department_id, AVG(salary)
employees
department_id
max(salary)>10000;

Oracle Database: Conceptos Fundamentales de SQL I 5-23

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de la Clusula HAVING

SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY

job_id, SUM(salary) PAYROLL


employees
job_id NOT LIKE '%REP%'
job_id
SUM(salary) > 13000
SUM(salary);

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
ce
i
RO
l
Uso de la Clusula HAVING
(continuacin)
P
le
N
b
a
O
I
El ejemplo de C
la diapositiva
ermuestra el ID de cargo y el salario mensual total de cada cargo que tiene
f
s
A
una nmina
D totaltexcedente
antotal. de 13.000 dlares. El ejemplo excluye a los vendedores y ordena la lista
r
N
por
el
salario
mensual
U
F non

Oracle Database: Conceptos Fundamentales de SQL I 5-24

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Funciones de grupo:

Tipos y sintaxis
Uso de AVG, SUM, MIN, MAX, COUNT
Uso de la palabra clave DISTINCT en funciones de grupo
Valores NULL en una funcin de grupo

Agrupar filas:
Clusula GROUP BY
Clusula HAVING

s
a
h
Anidamiento de funciones de grupo
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 5-25

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Anidamiento de Funciones de Grupo


Mostrar el salario mximo medio:
SELECT
MAX(AVG(salary))
FROM
employees
GROUP BY department_id;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Anidamiento de Funciones delGrupo
e
N
b
a
O
r anidar en una profundidad de dos. El ejemplo de la diapositiva
Las funciones C
deIgrupo see
pueden
f
s
A medio
calcula elD
salario
para
n cada department_id y, a continuacin, muestra el salario mximo
a
r
N
t
medio.
FU nonTenga en cuenta que la clusula GROUP BY es obligatoria al anidar funciones de grupo.

Oracle Database: Conceptos Fundamentales de SQL I 5-26

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Prueba
Identificar las instrucciones para las funciones de grupo y la
clusula GROUP BY.
1. No puede utilizar un alias de columna en la clusula
GROUP BY.
2. La columna GROUP BY debe estar en la clusula SELECT.
3. Al utilizar la clusula WHERE, puede excluir las filas antes
de dividirlas en grupos.
4. La clusula GROUP BY agrupa filas y asegura el orden del
s
a
h
juego de resultados.
rg)
o

5. Si incluye una funcin de grupo en una clusula SELECT,


sa ide
e
d
no puede seleccionar tambin resultados individuales.
Gu
roy

p ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Respuesta: 1, 3
le
N
b
a
O
CI nsfer
A
ND n-tra
U
F no

Oracle Database: Conceptos Fundamentales de SQL I 5-27

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Resumen
En esta leccin, debe haber aprendido lo siguiente:
Utilizar funciones de grupo COUNT, MAX, MIN, SUM y AVG
Escribir consultas que utilicen la clusula GROUP BY
Escribir consultas que utilicen la clusula HAVING
SELECT
FROM
[WHERE
[GROUP BY
[HAVING
[ORDER BY

column, group_function
table
condition]
group_by_expression]
group_condition]
column];

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Resumen
le
N
b
a
O
Existen diferentesI funciones
rde grupo disponibles en SQL, como AVG, COUNT, MAX, MIN, SUM,
AC ansfe
STDDEVD
y VARIANCE.
N subgrupos
-tr utilizando la clusula GROUP BY. Adems, los grupos se pueden restringir
Puede
n
FU crear
o
utilizandonla clusula HAVING.

Coloque las clusulas HAVING y GROUP BY despus de la clusula WHERE en una sentencia. El
orden de las clusulas GROUP BY y HAVING despus de la clusula WHERE no es importante.
Coloque la clusula ORDER BY al final.
El servidor de Oracle evala las clusulas en el siguiente orden:
1. Si la sentencia contiene una clusula WHERE, el servidor establece las filas candidatas.
2. El servidor identifica los grupos que estn especificados en la clusula GROUP BY.
3. La clusula HAVING restringe an ms los grupos de resultados que no cumplen con los
criterios de grupo en la clusula HAVING.
Nota: para obtener una lista completa de las funciones de grupo, consulte Oracle Database SQL
Language Reference (Referencia sobre Lenguaje SQL de Oracle Database) para la base de datos 10g
u 11g.

Oracle Database: Conceptos Fundamentales de SQL I 5-28

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Prctica 5: Visin General


En esta prctica se abordan los siguientes temas:
Escritura de consultas que utilizan las funciones de grupo
Agrupacin por filas para obtener ms de un resultado
Restriccin de grupos utilizando la clusula HAVING

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Prctica 5: Visin General
le
N
b
a
O
En esta prctica,
earutilizar funciones de grupo y seleccionar grupos de datos.
CIaprender
f
s
A
ND n-tran
U
F no

Oracle Database: Conceptos Fundamentales de SQL I 5-29

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa

Visualizacin de Datos
de Varias Tablas Utilizando Uniones

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Objetivos
Al finalizar esta leccin, debera estar capacitado para lo
siguiente:
Escribir sentencias SELECT para acceder a datos de ms
de una tabla mediante uniones igualitarias y no igualitarias
Unir una tabla consigo misma mediante autounin
Ver datos que normalmente no cumplen una condicin de
unin mediante uniones OUTER

Generar un producto cartesiano de todas las filas de una o s


a
h
ms tablas
)
g

or

a
es uide
d
y
ro nt G
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Objetivos
le
N
b
a
O
r datos de ms de una tabla. Una unin se utiliza para ver
I cmofeobtener
Esta leccin explica
C
s
A
informacin
rantablas. Por lo tanto, puede unir tablas para ver informacin de ms de una
ND den-varias
t
tabla.
U
F no
Nota: para
obtener ms informacin sobre las uniones, consulte la seccin sobre consultas y
subconsultas SQL: uniones en Oracle Database SQL Language Reference (Referencia sobre
Lenguaje SQL de Oracle Database) para la base de datos 10g u 11g.

Oracle Database: Conceptos Fundamentales de SQL I 6-2

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Tipos de JOINS y sintaxis

Unin natural:
Clusula USING
Clusula ON

Autounin
Uniones no igualitarias
Unin OUTER:

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
Producto cartesiano
p
n@ tude
o
Unin cruzada
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t
Unin LEFT OUTER
Unin RIGHT OUTER
Unin FULL OUTER

Oracle Database: Conceptos Fundamentales de SQL I 6-3

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Obtencin de Datos de Varias Tablas


EMPLOYEES

DEPARTMENTS

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p

n@ tude
o
i
c is S
a
d
fun se th
(
u los derechos reservados.
A toTodos
Copyright 2010, OracleS
y/o sus filiales.
E
D nse
Y
O lice
R
P
Obtencin de Datos de Varias lTablas
e
N
b
a
O
Iutilizar datos
A veces necesita
er de ms de una tabla. En el ejemplo de la diapositiva, el informe
C
f
s
A
muestra datos
independientes:
D detdos
rantablas contiene
U
LaNtabla n
EMPLOYEES
los ID de empleado.
F Las tablas
no EMPLOYEES y DEPARTMENTS contienen los ID de departamento.

La tabla DEPARTMENTS contiene los nombres de departamento.


Para producir el informe, necesita enlazar las tablas EMPLOYEES y DEPARTMENTS y acceder a los
datos de ambas.

Oracle Database: Conceptos Fundamentales de SQL I 6-4

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Tipos de Uniones
Las uniones compatibles con el estndar SQL:1999 incluyen
los siguientes elementos:
Uniones naturales:
Clusula NATURAL JOIN
Clusula USING
Clusula ON

UnionesOUTER:
LEFT OUTER JOIN
RIGHT OUTER JOIN
FULL OUTER JOIN

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
Uniones cruzadas
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Tipos de Uniones
le
N
b
a
O
I utilizar
Para unir tablas,
er la sintaxis de unin que cumpla con el estndar SQL:1999.
Cpuede
f
s
A
Nota ND
an
r
t
U
n anteriores a Oracle9i la sintaxis de unin era diferente a los estndares American
F En versiones
o
n
National Standards Institute (ANSI). La sintaxis de unin compatible con SQL:1999 no ofrece
ninguna ventaja en el rendimiento respecto a la sintaxis de unin propietaria de Oracle que
exista en las versiones anteriores. Para obtener ms informacin sobre la sintaxis de unin
propiedad de Oracle, consulte el apndice F: Sintaxis de Unin en Oracle.
En la siguiente diapositiva se trata la sintaxis de unin compatible con SQL:1999.

Oracle Database: Conceptos Fundamentales de SQL I 6-5

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Unin de Tablas mediante la Sintaxis SQL:1999


Utilizar una unin para consultar datos de ms de una tabla:
SELECT
table1.column, table2.column
FROM
table1
[NATURAL JOIN table2] |
[JOIN table2 USING (column_name)] |
[JOIN table2
ON (table1.column_name = table2.column_name)]|
[LEFT|RIGHT|FULL OUTER JOIN table2
ON (table1.column_name = table2.column_name)]|
[CROSS JOIN table2];

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Unin de Tablas mediante la Sintaxis
SQL:1999
le
N
b
a
O
En la sintaxis:CI
er la tabla y la columna desde las que se recuperan los datos
f
s
A
table1.column
indica
ran une dos tablas basndose en el mismo nombre de la columna
ND n-JOIN
t
U
NATURAL
F JOINnotable2 USING column_name realiza una unin igualitaria basndose en el nombre
de la columna
JOIN table2 ON table1.column_name = table2.column_name performs
realiza una unin igualitaria basndose en la condicin de la clusula ON
LEFT/RIGHT/FULL OUTER se utiliza para realizar uniones OUTER
CROSS JOIN devuelve un producto cartesiano de las dos tablas
Para obtener ms informacin, consulte la seccin sobre SELECT en Oracle Database SQL
Language Reference (Referencia sobre Lenguaje SQL de Oracle Database) para la base de datos 10g
u 11g.

Oracle Database: Conceptos Fundamentales de SQL I 6-6

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Cualificacin de Nombres de Columna Ambiguos

Utilizar prefijos de tabla para cualificar los nombres de


columna que estn en varias tablas.
Utilizar prefijos de tabla para mejorar el rendimiento.
En lugar de prefijos de nombre de tabla completos, utilizar
alias de tabla.
Los alias de tablas proporciona un nombre ms corto de
una tabla:

a
s
a
)h
g
r
o e
Utilizar alias de columna para distinguir columnas a
que
s
e uid
ddiferentes
tienen nombres idnticos, pero que residen en
y
G
o
r
t
p
n
tablas.
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Cualificacin de Nombres de Columna
Ambiguos
le
N
b
a
O
r cualificar los nombres de las columnas con el nombre de la tabla para
Al unir dos o msI tablas, debe
C Sinnslosfeprefijos
A
evitar ambigedad.
de tabla, la columna DEPARTMENT_ID de la lista SELECT puede
D
a
r
N
t
provenir
de
la
tabla
DEPARTMENTS
o de la tabla EMPLOYEES. Es necesario agregar el prefijo de
U onF
tabla paranejecutar la consulta. Si no existen nombres de columna comunes entre las dos tablas, no es
Mantiene el cdigo SQL ms pequeo, utiliza menos
memoria

necesario cualificar las columnas. Sin embargo, el uso del prefijo de tabla mejora el rendimiento, ya
que indica al servidor de Oracle dnde encontrar exactamente las columnas.
Sin embargo, la cualificacin de nombres de columna con nombres de tabla puede llevar bastante
tiempo, especialmente si los nombres de tabla son largos. En su lugar, puede utilizar alias de tabla.
Igual que un alias de columna proporciona otro nombre a una columna, un alias de tabla proporciona
otro nombre a una tabla. Los alias de tabla ayudan a mantener el cdigo SQL ms pequeo y, por lo
tanto, menos uso de memoria
El nombre de tabla se especifica por completo, seguido de un espacio y del alias de tabla. Por ejemplo,
a la tabla EMPLOYEES se le puede proporcionar el alias e y, a la tabla DEPARTMENTS el alias d.
Instrucciones
Los alias de tabla pueden tener hasta 30 caracteres de longitud, pero los alias ms cortos son
mejores que los largos.
Si se utiliza un alias de tabla para un nombre de tabla determinado en la clusula FROM, el alias de
tabla se deber sustituir por el nombre de tabla mediante la sentencia SELECT.
Los alias de tabla deben ser significativos.
El alias de tabla es vlido slo para la sentencia actual SELECT.
Oracle Database: Conceptos Fundamentales de SQL I 6-7

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Tipos de JOINS y sintaxis

Unin natural:
Clusula USING
Clusula ON

Autounin
Uniones no igualitarias
Unin OUTER:

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
Producto cartesiano
p
n@ tude
o
Unin cruzada
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t
Unin LEFT OUTER
Unin RIGHT OUTER
Unin FULL OUTER

Oracle Database: Conceptos Fundamentales de SQL I 6-8

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Creacin de Uniones Naturales

La clusula NATURAL JOIN est basada en todas las


columnas de las dos tablas que tienen el mismo nombre.
Selecciona filas de las dos tablas que tienen valores
iguales en todas las columnas coincidentes.
Si las columnas que tienen el mismo nombre tienen tipos
de dato diferentes, se devolver un error.

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Creacin de Uniones Naturales
le
N
b
a
O
Iautomticamente
Puede unir tablas
er basndose en las columnas de las dos tablas que tienen el mismo
C
f
s
A
nombre yD
mismos
antipos de dato. Puede realizar esta accin utilizando las palabras clave
r
N losJOIN.
t
NATURAL
U
F non
Nota: la unin se puede producir nicamente en las columnas que tienen los mismos nombres y los
mismos tipos de dato en ambas tablas. Si las columnas tienen el mismo nombre pero tipos de dato
diferentes, la sintaxis NATURAL JOIN produce un error.

Oracle Database: Conceptos Fundamentales de SQL I 6-9

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Recuperacin de Registros con Uniones


Naturales
SELECT

department_id, department_name,
location_id, city
FROM
departments
NATURAL JOIN locations ;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Recuperacin de Registros con
leUniones Naturales
N
b
a
O
En el ejemplo de Ila diapositiva,
LOCATIONS est unida a la tabla DEPARTMENT mediante
C nsferquelaestabla
A
la columna
LOCATION_ID,
la
nica
con el mismo nombre en ambas. Si estn presentes otras
D tra
N
columnas
n- la unin debe haberlas utilizado todas.
FU ncomunes,
o
Uniones Naturales con la Clusula WHERE
Las restricciones adicionales en una unin natural se implantan utilizando una clusula WHERE. El
siguiente ejemplo limita las filas de salida a las que tienen un ID de departamento igual a 20 o a 50:
SELECT

department_id, department_name,
location_id, city
FROM
departments
NATURAL JOIN locations
WHERE
department_id IN (20, 50);

Oracle Database: Conceptos Fundamentales de SQL I 6-10

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Creacin de Uniones con la Clusula USING

Si varias columnas tienen el mismo nombre pero los tipos


de dato no coinciden, utilizar la clusula USING para
especificar las columnas para la unin igualitaria.
Utilizar USING para que slo coincida una columna en
caso de que coincida ms de una.
Las clusulas NATURAL JOIN y USING se excluyen
mutuamente.

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
ceUSING
i
RlaOClusula
l
Creacin de Uniones con
P
le
N
b
a
O
Las uniones naturales
las columnas con tipos de dato y nombres coincidentes para unir
CI nutilizan
fer todas
s
Aclusula
las tablas.DLa
USING
se puede utilizar para especificar slo las columnas que se deben
ra igualitaria.
Npara una
t
utilizar
unin
U
n
F no

Oracle Database: Conceptos Fundamentales de SQL I 6-11

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Unin de Nombres de Columna


EMPLOYEES

DEPARTMENTS

a
s
a
)h
g
Primary key
r
o e
a
s
Clave ajena
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Unin de Nombres de Columna
le
N
b
a
O
Para determinar
de un empleado, compare el valor de la columna
eder departamento
CelI nombre
f
s
A
DEPARTMENT_ID
en
la
tabla
EMPLOYEES
con los valores de DEPARTMENT_ID de la tabla
D tran
N
DEPARTMENTS.
U on- La relacin entre las tablas EMPLOYEES y DEPARTMENTS es una unin
F
n es decir, los valores de la columna DEPARTMENT_ID de ambas tablas deben ser iguales.
igualitaria;

Normalmente, este tipo de unin implica complementos de clave primaria y ajena.


Nota: las uniones igualitarias tambin se denominan uniones simples o uniones internas.

Oracle Database: Conceptos Fundamentales de SQL I 6-12

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Recuperacin de Registros con la Clusula USING

SELECT employee_id, last_name,


location_id, department_id
FROM
employees JOIN departments
USING (department_id) ;

s
a
h
rg)
o

sa ide
e
d

roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
ce
ROconelaliClusula
Recuperacin de Registros
USING
P
l
N
b
Odiapositiva,
En el ejemplo deIla
ra las columnas DEPARTMENT_ID de las tablas EMPLOYEES y
e
C
f
DEPARTMENTS
ns y, por lo tanto, se muestra el LOCATION_ID del departamento en el que
DA tseraunen
N
trabaja
FU elnempleado.
on-

Oracle Database: Conceptos Fundamentales de SQL I 6-13

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de Alias de Tabla con la Clusula USING

No cualificar una columna que se utilice en la clusula USING.

Si la misma columna se utiliza en otro lugar de la sentencia


SQL, no se le puede agregar un alias.
SELECT l.city, d.department_name
FROM
locations l JOIN departments d
USING (location_id)
WHERE d.location_id = 1400;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
ce USING
i
RlaOClusula
l
Uso de Alias de Tabla con
P
le
N
b
a
O
Al realizar una unin
USING, no puede cualificar una columna que se utiliza en la
CIen s.ncon
flaerclusula
s
A
clusula USING
Adems,
si
esa
columna se utiliza en cualquier ubicacin de la sentencia SQL,
D agregar
a
r
N
t
no se
le
puede
ningn
alias.
Por
ejemplo, en la consulta mencionada en la diapositiva, no
U
n
F
o
debe agregar
n un alias a la columna location_id en la clusula WHERE porque la columna se
utiliza en la clusula USING.
Las columnas a las que se hace referencia en la clusula USING no deben tener un cualificador
(nombre o alias de la tabla) en cualquier ubicacin de la sentencia SQL. Por ejemplo, la siguiente
sentencia es vlida:
SELECT l.city, d.department_name
FROM
locations l JOIN departments d USING (location_id)
WHERE location_id = 1400;
Las columnas comunes en ambas tablas, pero que no se utilizan en la clusula USING, se deben
prefijar con un alias de tabla, de lo contrario aparecer el error column ambiguously defined.
En la siguiente sentencia , manager_id est presente tanto la tabla employees como en
departments ; si no se prefija manager_id con un alias de tabla, se produce el error column
ambiguously defined.
El siguiente ejemplo es vlido:
SELECT first_name, d.department_name, d.manager_id
FROM
employees e JOIN departments d USING (department_id)
WHERE department_id = 50;
Oracle Database: Conceptos Fundamentales de SQL I 6-14

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Creacin de Uniones con la Clusula ON

La condicin de unin de la unin natural es bsicamente


una unin igualitaria de todas las columnas con el mismo
nombre.
Utilizar la clusula ON para especificar condiciones
arbitrarias o columnas que se van a unir.
La condicin de unin est separada de otras condiciones
de bsqueda.
La clausula ON facilita la comprensin del cdigo.

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
ceON
i
RlaOClusula
l
Creacin de Uniones con
P
le
N
b
a
O
Utilice la sentencia
respecificar una condicin de unin. Esto permite especificar condiciones
I ON para
fecualquier
AC ansde
de unin D
independientes
condicin de filtro o de bsqueda en la clusula WHERE.
r
N
t
FU non-

Oracle Database: Conceptos Fundamentales de SQL I 6-15

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Recuperacin de Registros con la Clusula ON

SELECT e.employee_id, e.last_name, e.department_id,


d.department_id, d.location_id
FROM
employees e JOIN departments d
ON
(e.department_id = d.department_id);

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i

c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
ce
ROconelaliClusula
Recuperacin de Registros
ON
P
l
N
b
Ocolumnas
En este ejemplo, Ilas
raDEPARTMENT_ID en la tabla EMPLOYEES y DEPARTMENTS se
e
C
f
unen conD
la A
clusula ON.
ns Cuando un ID de departamento de la tabla EMPLOYEES sea igual al ID de
a
r
N
t
departamento
U onde- la tabla DEPARTMENTS, se devolver una fila. El alias de tabla es necesario para
F
cualificarnlos column_names coincidentes.
Tambin puede utilizar la clusula ON para unir columnas que tienen nombres diferentes. Los
parntesis de las columnas unidas, como se muestra en el ejemplo de la diapositiva,
(e.department_id = d.department_id) son opcionales. Incluso, ON
e.department_id = d.department_id funcionar.
Nota: al utilizar el icono Execute Statement para ejecutar la consulta, SQL Developer agrega el
sufijo _1 para diferenciar entre los dos department_ids.

Oracle Database: Conceptos Fundamentales de SQL I 6-16

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Creacin de Uniones en 3 Direcciones con la


Clusula ON
SELECT
FROM
JOIN
ON
JOIN
ON

employee_id, city, department_name


employees e
departments d
d.department_id = e.department_id
locations l
d.location_id = l.location_id;

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a

d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
Creacin de Uniones en
3 Direcciones
con la Clusula ON
P
e
l
N
b
Una unin en tresIO
direcciones
raes una unin de tres tablas. En la sintaxis compatible con SQL:1999,
e
C
f
s izquierda a derecha. Por lo tanto, la primera unin que se realiza es
A
las uniones
se realizan
nde
D
a
r
N
t
EMPLOYEES
- DEPARTMENTS. La primera condicin de unin puede hacer referencia a las
nJOIN
FU oEMPLOYEES
columnasnde
y DEPARTMENTS, pero no puede hacer referencia a las columnas de
LOCATIONS. La segunda condicin de unin puede hacer referencia a las columnas de las tres
tablas.
Nota: el ejemplo de cdigo de la diapositiva tambin se puede realizar con la clusula USING:
SELECT e.employee_id, l.city, d.department_name
FROM employees e
JOIN
departments d
USING (department_id)
JOIN
locations l
USING (location_id)

Oracle Database: Conceptos Fundamentales de SQL I 6-17

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Aplicacin de Condiciones Adicionales a una


Unin
Uso de la clusula AND o la clusula WHERE para aplicar
condiciones adicionales:
SELECT e.employee_id, e.last_name, e.department_id,
d.department_id, d.location_id
FROM
employees e JOIN departments d
ON
(e.department_id = d.department_id)
AND
e.manager_id = 149 ;

O bien

a
s
a
SELECT e.employee_id, e.last_name, e.department_id,g) h
or

d.department_id, d.location_id
a
es uide
FROM
employees e JOIN departments d
d
y
ON
(e.department_id = d.department_id)
ro nt G
p
WHERE
e.manager_id = 149 ;
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Aplicacin de Condiciones Adicionales
a una Unin
le
N
b
a
O
r
Puede aplicar condiciones
a la unin.
CI nsfeadicionales
A
El ejemplo
Drealizatruna
a unin en las tablas EMPLOYEES y DEPARTMENTS y, adems, muestra slo
N
U
los
Fempleados
onque tienen un ID de gestor de 149. Para agregar condiciones adicionales a la clusula
ON, puedenagregar clusulas AND. Por otro lado, puede utilizar una clusula WHERE para aplicar
condiciones adicionales.

Oracle Database: Conceptos Fundamentales de SQL I 6-18

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Tipos de JOINS y sintaxis

Unin natural:
Clusula USING
Clusula ON

Autounin
Uniones no igualitarias
Unin OUTER:
Clusula LEFT OUTER

s
a
h
rg)
Unin RIGHT OUTER
o

sa ide
Unin FULL OUTER
e
d
roy nt Gu
p
Producto cartesiano
n@ tude
o
i
Unin cruzada
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 6-19

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Unin de una Tabla consigo Misma

EMPLOYEES (WORKER)

EMPLOYEES (MANAGER)

a
s
a
)h
g
r

o e
a
s
de Guid
y
o
pr ent
@
MANAGER_ID en la tabla WORKER
igual
uda
on es S
t
i
c
EMPLOYEE_ID en la tabla
a MANAGER.
is
d
h
n
t
u
f
(
se
u
A
Copyright 2010, Oracle
to Todos los derechos reservados.
ESy/o sussefiliales.
D
OY licen
R
P bMisma
Unin de una Tabla consigo
le
N
a
O
r una tabla consigo misma. Para buscar el nombre de cada gestor del
Puede que a veces
unir
etabla
CI necesite
f
s
A
empleado,
necesita
unir
la
EMPLOYEES consigo misma o realizar una autounin. Por ejemplo,
D tran
N
- del gestor de Lorentz, necesita:
para
buscar elnnombre
F UBuscar
noa Lorentz en la tabla EMPLOYEES buscando en la columna LAST_NAME.
Busque el nmero de gestor de Lorentz consultando la columna MANAGER_ID. El nmero de
gestor de Lorentz es 103.
Busque el nombre del gestor con un EMPLOYEE_ID de 103 consultando la columna
LAST_NAME. El nmero de empleado de Hunold es 103, por lo que Hunold en el gestor de
Lorentz.
Durante este proceso, busca dos veces en la tabla. La primera vez, cuando consulta la tabla para
buscar a Lorentz en la columna LAST_NAME y el valor de MANAGER_ID de 103. La segunda vez,
cuando busca en la columna EMPLOYEE_ID para buscar 103 y en la columna LAST_NAME para
buscar a Hunold.

Oracle Database: Conceptos Fundamentales de SQL I 6-20

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Autouniones que Utilizan la Clusula ON

SELECT worker.last_name emp, manager.last_name mgr


FROM
employees worker JOIN employees manager
ON
(worker.manager_id = manager.employee_id);

s
a
h
g)
r
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
ceON
i
RlaOClusula
l
Autouniones que Utilizan
P
le
N
b
a
O
La clusula ON tambin
seepuede
r utilizar para unir columnas con nombres diferentes, ya sea en la
I
C
f
s
A
misma tabla
D o entotra
andiferente.
r
N
U
En
se muestra una autounin de la tabla EMPLOYEES basada en las columnas
Fel ejemplo
non y MANAGER_ID.
EMPLOYEE_ID
Nota: los parntesis de las columnas unidas, como se muestra en la diapositiva
(e.manager_id = m.employee_id) son opcionales. Incluso ON e.manager_id =
m.employee_id funcionar.

Oracle Database: Conceptos Fundamentales de SQL I 6-21

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Tipos de JOINS y sintaxis

Unin natural:
Clusula USING
Clusula ON

Autounin
Uniones no igualitarias
Unin OUTER:
Clusula LEFT OUTER

s
a
h
rg)
Unin RIGHT OUTER
o

sa ide
Unin FULL OUTER
e
d
roy nt Gu
p
Producto cartesiano
n@ tude
o
i
Unin cruzada
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 6-22

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uniones no igualitarias

EMPLOYEES

JOB_GRADES

s
a
h
JOB_GRADES define el rango de
rg)
o
valores de LOWEST_SAL y

sa ide

HIGHEST_SAL de cada GRADE_LEVEL.


e
d
oy nt Gu
Por lo tanto, la columnarGRADE_LEVEL
p
se puede utilizar n
para
@ asignar
degrados a
u
o
t
i
cada empleado.
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Uniones no igualitarias
le
N
b
a
O
r condicin de unin que contiene algn operador diferente del
I
Una unin no igualitaria
eseuna
C
f
s
A
operador D
de igualdad.
an
r
N
t
U
La
n la tabla EMPLOYEES y JOB_GRADES es un ejemplo de unin no igualitaria. Los
Frelacinoentre
rangos denla columna SALARY en la tabla EMPLOYEES entre los valores en las columnas

LOWEST_SAL y HIGHEST_SAL de la tabla JOB_GRADES. Por lo tanto, se pueden agregar grados


a cada empleado segn el salario. La relacin se obtiene mediante un operador distinto del de
igualdad (=).

Oracle Database: Conceptos Fundamentales de SQL I 6-23

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Recuperacin de Registros con


Uniones no Igualitarias
SELECT e.last_name, e.salary, j.grade_level
FROM
employees e JOIN job_grades j
ON
e.salary
BETWEEN j.lowest_sal AND j.highest_sal;

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
@ tude
n
o
i

c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Recuperacin de Registros con
le Uniones no Igualitarias
N
b
a
O
r una unin no igualitaria para evaluar el grado de salario de un
La diapositivaC
delI ejemploecrea
f
s
A
empleado.
DEl salario
andebe estar entre cualquier par de los rangos de salario bajos y altos.
r
N
t
U
EsFimportantentener en cuenta que todos los empleados aparecern slo una vez al ejecutar esta
o
consulta. n
No se repite ningn empleado en la lista. Existen dos motivos por los que se produce este

hecho:
Ninguna de las filas de la tabla JOB_GRADES contiene grados que se solapen. Es decir, el valor
de salario de un empleado slo puede oscilar entre los valores de salario bajo y alto de una de las
filas de la tabla de grados de salario.
Todos los salarios de los empleados oscilan entre los lmites proporcionados por la tabla de
grados de cargo. Es decir, ningn empleado gana menos que el valor ms bajo de la columna
LOWEST_SAL o ms que el valor ms alto de la columna HIGHEST_SAL.
Nota: se pueden utilizar otras condiciones (como <= y >=), pero BETWEEN es la ms simple.
Recuerde especificar primero el valor bajo y, a continuacin, el alto al utilizar BETWEEN. El servidor
Oracle convierte la condicin BETWEEN en un par de condiciones AND. Por lo tanto, el uso de
BETWEEN no proporciona ninguna ventaja, se recomienda slo para la simplicidad lgica.
En el ejemplo de la diapositiva se han especificado los alias de tabla por motivos de rendimiento, no
por una posible ambigedad.

Oracle Database: Conceptos Fundamentales de SQL I 6-24

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Tipos de JOINS y sintaxis

Unin natural:
Clusula USING
Clusula ON

Autounin
Uniones no igualitarias
Unin OUTER:
Clusula LEFT OUTER

s
a
h
rg)
Unin RIGHT OUTER
o

sa ide
Unin FULL OUTER
e
d
roy nt Gu
p
Producto cartesiano
n@ tude
o
i
Unin cruzada
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 6-25

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Devolucin de Registros sin Coincidencia Directa


con las uniones OUTER
DEPARTMENTS

Uniones Igualitarias con EMPLOYEES

s
a
h

No hay ningn empleado


g)
r
o

en el departamento 190.
sa ide
e
d
roy nt Gu
Al empleado Grant no
p
se le ha asignado un ID
n@ tude
o
i
c is S
departamento.
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
ce Directa con Uniones OUTER
i
RsinOCoincidencia
l
Devolucin de Registros
P
le
N
b
a
O
r
Si una fila no cumple
de unin, la fila no aparece en el resultado de consultas.
CI nuna
fecondicin
s
A
D detlaradiapositiva, se utiliza una condicin de unin igualitaria en las tablas
En el ejemplo
N
U
EMPLOYEES
F nony-DEPARTMENTS para devolver el resultado a la derecha. El juego de resultados no
contiene lo siguiente:

El ID de departamento 190, porque no hay ningn empleado con dicho ID registrado en la tabla
EMPLOYEES.
El empleado con apellido Grant, porque a este empleado no se ha asignado un ID departamento.
Para volver al registro de departamento que no tiene ningn empleado o empleados que no tienen un
departamento asignado, puede utilizar la unin OUTER.

Oracle Database: Conceptos Fundamentales de SQL I 6-26

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uniones INNER frente a Uniones OUTER

En SQL:1999, la unin de dos tablas que devuelven slo


filas coincidentes se denomina unin INNER.

Una unin entre dos tablas que devuelve los resultados de


la unin INNER y las filas no coincidentes de las tablas
izquierda (o derecha) se denomina una unin OUTER.

Una unin entre dos tablas que devuelve los resultados de


una unin INNER y los resultados de una unin izquierda y
derecha da como resultado una unin OUTER completa.

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
ice
RO e OUTER
l
Uniones INNER frente aPUniones
Ncon clusulas
bl NATURAL JOIN, USING u ON da como resultado una unin
a
O
La unin de las tablas
r
I
AC afilansnofecoincidente no aparece en la salida. Para devolver las filas no coincidentes,
INNER. Cualquier
D
-trunin OUTER. Una unin OUTER devuelve todas las filas que cumplen la
puede
utilizarnuna
UN
F
o
condicinnde unin y tambin algunas o todas las filas de una tabla para la que ninguna fila de la otra
tabla cumple la condicin de unin.
Hay tres tipos de uniones OUTER:
LEFT OUTER
RIGHT OUTER
FULL OUTER

Oracle Database: Conceptos Fundamentales de SQL I 6-27

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

LEFT OUTER JOIN

SELECT e.last_name, e.department_id, d.department_name


FROM
employees e LEFT OUTER JOIN departments d
ON
(e.department_id = d.department_id);

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
LEFT OUTER JOIN
P
l
Ntodasrlas
bfilas
a
O
Esta consulta recupera
de la tabla EMPLOYEES que es la tabla de la izquierda, incluso
I
e en la tabla
f
s
AC coincidencia
si no hayD
ninguna
DEPARTMENTS.
n
a
r
N
t
FU non

Oracle Database: Conceptos Fundamentales de SQL I 6-28

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

RIGHT OUTER JOIN

SELECT e.last_name, d.department_id, d.department_name


FROM
employees e RIGHT OUTER JOIN departments d
ON
(e.department_id = d.department_id);

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
RIGHT OUTER JOIN
P
l
Ntodasrlas
bfilas
a
O
Esta consulta recupera
DEPARTMENTS que es la tabla de la izquierda,
I
C nsfecoincidenciadeenla latabla
incluso siD
noAhay ninguna
tabla EMPLOYEES.
N n-tra
U
F no

Oracle Database: Conceptos Fundamentales de SQL I 6-29

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

FULL OUTER JOIN

SELECT e.last_name, d.department_id, d.department_name


FROM
employees e FULL OUTER JOIN departments d
ON
(e.department_id = d.department_id);

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
FULL OUTER JOIN
P
l
Ntodasrlas
bfilas
a
O
Esta consulta recupera
de la tabla EMPLOYEES, incluso si no hay ninguna
I
e
Cla tabla
f
s
A
coincidencia
en
DEPARTMENTS.
Tambin recupera todas las filas de la tabla
D tran
N
DEPARTMENTS,
FU non- incluso si no hay ninguna coincidencia en la tabla EMPLOYEES.

Oracle Database: Conceptos Fundamentales de SQL I 6-30

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Tipos de JOINS y sintaxis

Unin natural:
Clusula USING
Clusula ON

Autounin
Unin no igualitaria
Unin OUTER:
Clusula LEFT OUTER

s
a
h
rg)
Unin RIGHT OUTER
o

sa ide
Unin FULL OUTER
e
d
roy nt Gu
p
Producto cartesiano
n@ tude
o
i
Unin cruzada
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 6-31

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Productos Cartesianos

Un producto cartesiano se forma cuando:


Se omite una condicin de unin
Una condicin de unin no es vlida
Todas las filas de la primera tabla se unen a todas las filas
de la segunda tabla

Se incluye siempre una condicin de unin vlida si desea


evitar un producto cartesiano.

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Productos Cartesianos
le
N
b
a
O
I defunin
Cuando una condicin
er no es vlida o se omite completamente, el resultado es un producto
C
s
A
cartesiano,
nse muestran todas las combinaciones de filas. Todas las filas de la primera tabla
Den eltque
afilas
r
seFunen
las
de la segunda tabla.
UNa todas
n
o
n
Un producto cartesiano tiende a generar un gran nmero de filas y el resultado es poco til. Debe
incluir siempre una condicin de unin vlida a menos que tenga necesidades especficas de
combinar todas las filas de todas las tablas.
Los productos cartesianos son tiles para algunas pruebas para las que necesite generar un gran
nmero de filas para simular una cantidad razonable de datos.

Oracle Database: Conceptos Fundamentales de SQL I 6-32

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Generacin de un Producto Cartesiano


EMPLOYEES (20 filas)

DEPARTMENTS (8 filas)

a
s
a
)h
g
r
o e
a

s
de Guid
y
o
pr ent

@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Generacin de un Producto Cartesiano
le
N
b
a
O
Se genera un producto
cartesiano
una condicin de unin. En el ejemplo de la diapositiva
er si sey elomite
CI ndel
fempleado
s
A
se muestra
el
apellido
nombre
del departamento de las tablas EMPLOYEES y
D tra
N
DEPARTMENTS.
U on- Ya que no se ha especificado ninguna condicin de unin, todas las filas (20 filas)
F
de la tablanEMPLOYEES se unen con todas las filas (8 filas) de la tabla DEPARTMENTS por lo que se
Producto cartesiano:
20 x 8 = 160 filas

generan 160 filas en la salida.

Oracle Database: Conceptos Fundamentales de SQL I 6-33

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Creacin de Uniones Cruzadas

La clusula CROSS JOIN produce el producto combinado


de dos tablas.
Esto tambin se denomina un producto cartesiano entre
dos tablas.
SELECT last_name, department_name
FROM
employees
CROSS JOIN departments ;

s
a
h
rg)
o

sa ide
e
d
roy nt Gu

p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Creacin de Uniones Cruzadasle
ab un producto cartesiano de las tablas EMPLOYEES y
ON ferproduce
El ejemplo de la Idiapositiva
C
DEPARTMENTS.
DA trans
N
U CROSS
La
n- JOIN se puede aplicar a muchas situaciones de forma til. Por ejemplo, para
Ftcnica
o
n
devolver el costo de mano de obra total por oficina por mes, incluso si el mes X no tiene costo de

mano de obra, puede realizar un unin cruzada de oficinas con la tabla de todos los meses.
Es una prctica aconsejable declarar de forma explcita CROSS JOIN en SELECT si desea crear un
producto cartesiano. Por lo tanto, queda muy claro que desea que esto ocurra y que no se trata del
resultado de las uniones que faltan

Oracle Database: Conceptos Fundamentales de SQL I 6-34

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Prueba
La sintaxis de unin estndar SQL:1999 soporta los siguientes
tipos de uniones. Qu tipos de unin no soporta la sintaxis de
unin de Oracle?
1. Uniones igualitarias
2. Uniones no igualitarias
3. Unin OUTER izquierda
4. Unin OUTER derecha
5. Unin OUTER completa

s
a
h
6. Autouniones
rg)
o

sa ide
7. Uniones naturales
e
d
roy nt Gu
8. Productos cartesianos
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Respuesta: 1, 2, 3, 4, 6, 8
le
N
b
a
O
CI nsfer
A
ND n-tra
U
F no

Oracle Database: Conceptos Fundamentales de SQL I 6-35

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Resumen
En esta leccin debe haber aprendido a utilizar uniones para
mostrar los datos de varias tablas utilizando:
Uniones igualitarias
Uniones no igualitarias
Uniones OUTER

Autouniones
Uniones cruzadas
Uniones naturales
Unin OUTER completa (o de dos lados)

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Resumen
le
N
b
a
O
r
Hay varios modos
CI denunir
fetablas.
s
A
Tipos N
deD
Unionesra
-t
U
igualitarias
n
F Uniones
o
n no igualitarias
Uniones

Uniones OUTER
Autouniones
Uniones cruzadas
Uniones naturales
Unin OUTER completa (o de dos lados)

Productos Cartesianos
Un producto cartesiano da como resultado una visualizacin de todas las combinaciones de filas.
Para ello debe omitir la clusula WHERE o especificar la clusula CROSS JOIN.
Alias de Tabla
Los alias de tabla aceleran el acceso a la base de datos.
Los alias pueden ayudar a mantener el cdigo SQL ms pequeo utilizando de esta forma menos
memoria.
A veces los alias de tabla son obligatorios para evitar la ambigedad de columna.

Oracle Database: Conceptos Fundamentales de SQL I 6-36

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Prctica 6: Visin General


En esta prctica se abordan los siguientes temas:
Unin de tablas con una unin igualitaria
Realizacin de uniones externas y autouniones
Adicin de condiciones

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Prctica 6: Visin General
le
N
b
a
O
Idestinada
Esta prctica est
ear proporcionarle experiencia en la extraccin de datos desde ms de una
C
f
s
A
tabla utilizando
ran compatibles con SQL:1999.
ND n-uniones
t
U
F no

Oracle Database: Conceptos Fundamentales de SQL I 6-37

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa

Uso de Subconsultas para Solucionar


Consultas

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Objetivos
Al finalizar esta leccin, debera estar capacitado para lo
siguiente:
Definir subconsultas
Describir los tipos de problemas que pueden solucionar
las subconsultas
Mostrar los tipos de subconsultas
Escribir subconsultas de una o varias filas

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Objetivos
le
N
b
a
O
En esta leccin aprender
avanzadas de la sentencia SELECT. Puede escribir subconsultas
r
I
efunciones
C
f
s
A
en la clusula
WHERE
de
otra
sentencia
SQL para obtener valores basados en un valor condicional
D tran
N
desconocido.
FU nonEn- esta leccin se tratan tambin subconsultas de una y de varias filas.

Oracle Database: Conceptos Fundamentales de SQL I 7-2

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Subconsulta: tipos, sintaxis e instrucciones


Subconsultas de una sola fila:
Funciones de grupo en una subconsulta
Clusula HAVING con subconsultas

Subconsultas de varias filas


Usar el operador ALL o ANY.

Uso del operador EXISTS

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Valores nulos en una subconsulta

Oracle Database: Conceptos Fundamentales de SQL I 7-3

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de una Subconsulta para Solucionar


Problemas
Quin tiene un salario mayor que el de Abel?
Consulta principal:
Qu empleados tienen un salario mayor que el de
Abel?
Subconsulta:

a
s
a
)h
g
Cul es el salario de Abel?
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Uso de una Subconsulta para lSolucionar
Problemas
e
N
b
a
O
Supongamos que
escribir
er una consulta para saber quin gana un salario mayor que el de Abel.
CIdesea
f
s
A
n
D este
Para solucionar
necesita dos consultas: Una para saber cunto gana Abel y otra para
aproblema,
r
N
t
U
saber
n ms que esa cantidad.
F quin
ogana
n
Tambin puede solucionar este problema combinando las dos consultas y colocando una dentro de la
otra.
La consulta interna (o subconsulta) devuelve un valor que utiliza la consulta externa (o consulta
principal). El uso de una subconsulta es equivalente a la realizacin de dos consultas secuenciales y
al uso del resultado de la primera consulta como el valor de bsqueda en la segunda consulta.

Oracle Database: Conceptos Fundamentales de SQL I 7-4

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Sintaxis de la Subconsulta

La subconsulta (consulta interna) se ejecuta una vez antes


de la consulta principal (consulta externa).
La consulta principal utiliza el resultado de la subconsulta.
SELECT
FROM
WHERE

select_list
Tabla
expr operator
(SELECT
FROM

select_list
table);

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Sintaxis de la Subconsulta
le
N
b
a
O
Una subconsulta Ies una sentencia
SELECT que est embebida en la clusula de otra sentencia
er potentes
f
s
ACcrear
SELECT.D
Puede
sentencias
a partir de sentencias simples utilizando las subconsultas.
n
a
r
N
t
Pueden
U ser omuy
n-tiles cuando necesite seleccionar filas de una tabla con una condicin de que
F
n
dependa de los datos de la propia tabla.
Puede colocar la subconsulta en diferentes clusulas SQL, entre las que se incluyen las siguientes:
Clusula WHERE
Clusula HAVING
Clusula FROM
En la sintaxis:
operator incluye una condicin de comparacin como >, = o IN
Nota: las condiciones de comparacin pueden ser de dos clases: operadores de una sola fila
(>, =, >=, <, <>, <=) y operadores de varias filas (IN, ANY, ALL, EXISTS).
Se suele hacer referencia a la subconsulta como una sentencia SELECT anidada, una subconsulta
SELECT o una sentencia SELECT interna. Por lo general, la subconsulta se ejecuta en primer lugar y
su resultado se utiliza para completar la condicin de consulta para la consulta principal (o externa).

Oracle Database: Conceptos Fundamentales de SQL I 7-5

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de Subconsultas

SELECT last_name, salary


FROM
employees
11000
WHERE salary >
(SELECT salary
FROM
employees
WHERE last_name = 'Abel');

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Uso de Subconsultas
le
N
b
a
O
Ila consulta
En la diapositiva,
erinterna determina el salario del empleado Abel. La consulta externa
C
f
s
A
obtiene elD
la consulta interna y lo utiliza para mostrar a todos los empleados que ganan
adenAbel.
r
Nelresultado
t
ms
que
empleado
U
F non

Oracle Database: Conceptos Fundamentales de SQL I 7-6

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Instrucciones para el Uso de Subconsultas

Incluir subconsultas entre parntesis.


Coloque las subconsultas a la derecha de la condicin de
comparacin para facilitar la legibilidad. (Sin embargo, la
subconsulta puede aparecer a cualquier lado del operador
de comparacin.)
Utilizar operadores de una sola fila con subconsultas de
una fila y utilizar los operadores de varias filas con
subconsultas de varias filas.

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Instrucciones para el Uso de Subconsultas
le
N
b
a
O
r incluida entre parntesis.
I debefeestar
Una subconsulta
C
s
A
Coloque
subconsultas
a la derecha de la condicin de comparacin para facilitar la
n
raembargo,
ND nlas-Sin
t
legibilidad.
la subconsulta puede aparecer a cualquier lado del operador de
U
F comparacin.
no
En las subconsultas, se utilizan dos clases de condiciones de comparacin: operadores de una
sola fila y operadores de varias filas.

Oracle Database: Conceptos Fundamentales de SQL I 7-7

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Tipos de Subconsultas

Subconsulta de una sola fila


Consulta principal
Subconsulta

devuelve

ST_CLERK

Subconsulta de varias filas


Consulta principal

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Tipos de Subconsultas
le
N
b
a
O
Subconsultas
r fila: consultas que devuelven slo una fila de la sentencia SELECT
I de unafesola
C
s
A
interna.
ND n-tradenvarias filas: consultas que devuelven ms de una fila de la sentencia SELECT
U
Subconsultas
F interna.
no
Subconsulta

devuelve

ST_CLERK
SA_MAN

Nota: tambin existen varias subconsultas de varias columnas, que son consultas que devuelven ms
de una columna de la sentencia SELECT interna. stas se tratan en el curso Oracle Database:
Conceptos Fundamentales de SQL II..

Oracle Database: Conceptos Fundamentales de SQL I 7-8

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Subconsulta: tipos, sintaxis e instrucciones


Subconsultas de una sola fila:
Funciones de grupo en una subconsulta
Clusula HAVING con subconsultas

Subconsultas de varias filas


Usar el operador ALL o ANY

Uso del operador EXISTS

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Valores nulos en una subconsulta

Oracle Database: Conceptos Fundamentales de SQL I 7-9

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Subconsultas de Una Sola Fila

Devuelven una sola fila


Utilizan operadores de comparacin de una sola fila
Operador Significado
=
Igual que
>

Mayor que

>=

Mayor o igual que

s
a
h
Menor que
g)
r
o

<=
Menor o igual que
sa ide
e
d
<>
Distinto de
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Subconsultas de Una Sola Filale
N solarfila
bdevuelve una fila de la sentencia SELECT interna. Este tipo de
a
Ouna
Una subconsulta Ide
e
C
sf de una sola fila. La diapositiva proporciona una lista de los
Autiliza aunnoperador
subconsulta
D
N
-trsola fila.
operadores
FU nodenuna
Ejemplo:
<

Muestre los empleados cuyo ID de cargo sea el mismo que el del empleado 141:
SELECT last_name, job_id
FROM
employees
WHERE job_id =
(SELECT job_id
FROM
employees
WHERE employee_id = 141);

Oracle Database: Conceptos Fundamentales de SQL I 7-10

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Ejecucin de Subconsultas de una Sola Fila

SELECT last_name, job_id, salary


FROM
employees
SA_REP
WHERE job_id =
(SELECT job_id
FROM
employees
WHERE last_name = 'Taylor')
AND
salary >
8600
(SELECT salary
FROM
employees
WHERE last_name = 'Taylor');

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Ejecucin de Subconsultas dele
una Sola Fila
N
b
a
O
Una sentencia SELECT
seepuede
r considerar como un bloque de consulta. El ejemplo de la
I
C
f
s
A
diapositiva
Dmuestra
alosn empleados que realizan el mismo trabajo que Taylor, pero que tienen un
r
Nmayor
t
salario
que
l.
U
F non
El ejemplo tiene tres bloques de consulta: la consulta externa y las dos consultas internas. Los

bloques de consulta internos se ejecutan primero, produciendo los resultados de consulta SA_REP y
8600, respectivamente. A continuacin, se procesa el bloque de consulta externo y utiliza los
valores devueltos por las consultas internas para completar sus condiciones de bsqueda.
Tanto las consultas internas como externas devuelven valores nicos (SA_REP y 8600,
respectivamente), por lo que a esta sentencia SQL se la denomina subconsulta de una sola fila.
Nota: las consultas externas e internas pueden obtener datos de diferentes tablas.

Oracle Database: Conceptos Fundamentales de SQL I 7-11

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de Funciones de Grupo en una Subconsulta

SELECT last_name, job_id, salary


FROM
employees
2500
WHERE salary =
(SELECT MIN(salary)
FROM
employees);

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Uso de Funciones de Grupo en
leuna Subconsulta
N
b
a
O
r consulta principal utilizando una funcin de grupo en una subconsulta
Puede mostrarC
losI datos deeuna
f
s
A
para que D
una
ansola fila. La subconsulta est entre parntesis y se coloca al final de la
r
N devuelva
t
condicin
de
comparacin.
U
F non
El ejemplo de la diapositiva muestra el apellido del empleado, el ID de cargo y el salario de todos los
empleados cuyo salario sea igual al salario mnimo. La funcin de grupo MIN devuelve un valor
nico (2500) a la consulta externa.

Oracle Database: Conceptos Fundamentales de SQL I 7-12

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Clusula HAVING con Subconsultas

El servidor de Oracle ejecuta primero las subconsultas.


El servidor de Oracle devuelve los resultados a la clusula
HAVING de la consulta principal.
SELECT department_id, MIN(salary)
FROM
employees
GROUP BY department_id
2500
HAVING
MIN(salary) >
(SELECT MIN(salary)
FROM
employees
WHERE department_id = 50);

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
Clusula HAVING con Subconsultas
P
N raenblla clusula WHERE y en la clusula HAVING. El servidor de Oracle
O
Puede utilizar lasIsubconsultas
feresultados se devuelven en la clusula HAVING de la consulta principal.
AC anyslos
ejecuta laD
subconsulta
-trde la diapositiva muestra todos los departamentos que tienen un salario mnimo
UN oSQL
La
n
Fsentencia
nel del departamento 50.
mayor que
Ejemplo:
Busque el puesto con el salario medio ms bajo.
SELECT
FROM
GROUP BY
HAVING

job_id, AVG(salary)
employees
job_id
AVG(salary) = (SELECT
MIN(AVG(salary))
FROM
employees
GROUP BY job_id);

Oracle Database: Conceptos Fundamentales de SQL I 7-13

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Qu Parte de esta Sentencia Es Incorrecta?

SELECT employee_id, last_name


FROM
employees
WHERE salary =
(SELECT MIN(salary)
FROM
employees
GROUP BY department_id);
Operador de una
sola fila con una
subconsulta de
varias filas

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Qu Parte de esta Sentencia lEs
e Incorrecta?
N
b
a
O
r
I en las
Un error muy comn
se produce cuando se devuelve ms de una fila para una
esubconsultas
C
f
s
A
subconsulta
n fila.
D de una
asola
r
N
t
U
En
n SQL de la diapositiva, la subconsulta contiene una clusula GROUP BY, que implica
Fla sentencia
o
n
que la subconsulta devolver varias filas, una por cada grupo que encuentre. En este caso, los
resultados de la subconsulta son 4400, 6000, 2500, 4200, 7000, 17000 y 8300.
La consulta externa toma esos resultados y los utiliza en su clusula WHERE. La clusula WHERE
contiene un operador igual (=), un operador de comparacin de una sola fila que espera un nico
valor. El operador = no puede aceptar ms de un valor de la subconsulta y, por lo tanto, genera el
error.
Para corregir este error, cambie el operador = a IN.

Oracle Database: Conceptos Fundamentales de SQL I 7-14

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

La Consulta Interna No Devuelve Ningn


Resultado

SELECT last_name, job_id


FROM
employees
WHERE job_id =
(SELECT job_id
FROM
employees
WHERE last_name = 'Haas');

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
La Consulta Interna No Devuelve
le Ningn Resultado
N
b
a
O
I deflas
Otro problemaC
comn
ersubconsultas se produce cuando la consulta interna no devuelve ninguna
s
A
fila.
D tran
N
U
En
n-SQL de la diapositiva, la subconsulta contiene una clusula WHERE. Supuestamente,
Fla sentencia
o
n
la intencin es encontrar el empleado cuyo nombre es Haas. La sentencia es correcta, pero no
La subconsulta no devuelve ninguna fila porque
no hay ningn empleado con el nombre Haas.

selecciona ninguna fila al ejecutarse porque no hay ningn empleado con el nombre Haas. Por lo
tanto, la subconsulta no devuelve ninguna fila.
La consulta externa toma los resultados de la subconsulta (nula) y los utiliza en la clusula WHERE.
La consulta externa no encuentra ningn empleado con un ID de cargo igual que un valor nulo, por lo
tanto, no devuelve ninguna fila. Si exista un cargo con un valor nulo, la fila no se devolver porque
la comparacin de dos valores nulos tiene como resultado un valor nulo; por lo tanto, la condicin
WHERE no es verdadera.

Oracle Database: Conceptos Fundamentales de SQL I 7-15

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Subconsulta: tipos, sintaxis e instrucciones


Subconsultas de una sola fila:
Funciones de grupo en una subconsulta
Clusula HAVING con subconsultas

Subconsultas de varias filas


Usar el operador IN, ALL o ANY

Uso del operador EXISTS

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Valores nulos en una subconsulta

Oracle Database: Conceptos Fundamentales de SQL I 7-16

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Subconsultas de Varias Filas

Devuelven ms de una fila


Utilizan operadores de comparacin de varias filas
Operador

Significado

IN

Igual a cualquier miembro de la lista

ANY

Debe estar precedido por =, !=, >, <, <=, >=.


Compara un valor con cada valor de la lista o
devuelto por una consulta. Se evala en FALSE si la

a
s
a
)h
g
ALL
Debe estar precedido por =, !=, >, <, <=, >=.
r
ao de
Compara un valor con cada valor de la listaeos
d Gui
y
o
devuelto por una consulta. Se evalaren TRUEt si la
p en
@
consulta no devuelve ninguna
fila.
n
o
tud
i
S
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Subconsultas de Varias Filas le
bms de una fila se denominan subconsultas de varias filas. Con una
a
ONdevuelven
r
Ique
Las subconsultas
e
C
sf puede utilizar un operador de varias filas en lugar de utilizar un operador
Ade varias
subconsulta
filas,
n
D
a
-Eltr operador de varias filas espera uno o ms valores:
deFuna
UNsolaofila.
n
n
SELECT last_name, salary, department_id
consulta no devuelve ninguna fila.

FROM
WHERE

employees
salary IN (SELECT
MIN(salary)
FROM
employees
GROUP BY department_id);

Ejemplo:
Busque los empleados que ganan el mismo salario que el salario mnimo de cada departamento.
Primero se ejecuta la consulta interna, produciendo el resultado de consulta. A continuacin, se
procesa el bloque de consulta principal y se utilizan los valores devueltos por la consulta interna para
completar la condicin de bsqueda. De hecho, la consulta principal aparece en el servidor de Oracle
de la siguiente forma:
SELECT
FROM
WHERE
8600,

last_name, salary, department_id


employees
salary IN (2500, 4200, 4400, 6000, 7000, 8300,
17000);
Oracle Database: Conceptos Fundamentales de SQL I 7-17

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso del Operador ANY


en Subconsultas de Varias Filas
SELECT employee_id, last_name, job_id, salary
FROM
employees
9000, 6000, 4200
WHERE salary < ANY
(SELECT salary
FROM
employees
WHERE job_id = 'IT_PROG')
AND
job_id <> 'IT_PROG';

a
s
a
)h
g
r
o e
a
s
de Guid
y
o

pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
Uso del Operador ANY P
enR
Subconsultas
de Varias Filas
e
l
N
b
El operador ANY IO
(y su sinnimo,
ra el operador SOME) compara un valor con cada valor devuelto por
e
C
f
una subconsulta.
ns de la diapositiva muestra los empleados que no son programadores de TI
DA tElraejemplo
N
yF
cuyo
U salario
nes- menor al de cualquier programador de TI. El salario mximo de un programador es
o
n
de 9.000 dlares.
<ANY significa menos que el mximo.
>ANY significa ms que el mnimo.
=ANY es igual que IN.

Oracle Database: Conceptos Fundamentales de SQL I 7-18

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso del Operador ALL


en Subconsultas de Varias Filas
SELECT employee_id, last_name, job_id, salary
FROM
employees
9000, 6000, 4200
WHERE salary < ALL
(SELECT salary
FROM
employees
WHERE job_id = 'IT_PROG')
AND
job_id <> 'IT_PROG';

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
Uso del Operador ALL P
enR
Subconsultas
de Varias Filas
e
l
N
b
O feunravalor con cada valor devuelto por una subconsulta. El ejemplo de la
El operador ALL Icompara
C
A alosnsempleados cuyo salario es inferior al salario de todos los empleados con un
diapositiva
Dmuestra
N
-tr y cuyo trabajo no es IT_PROG.
ID de
IT_PROG
n
FUcargo
o
n ms que el mximo y <ALL significa menos que el mnimo.
>ALL significa
El operador NOT se puede utilizar con los operadores IN, ANY y ALL.

Oracle Database: Conceptos Fundamentales de SQL I 7-19

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso del Operador EXISTS

SELECT * FROM departments


WHERE NOT EXISTS
(SELECT * FROM employees
WHERE employees.department_id=departments.department_id);

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
Uso del Operador EXISTS
P
Nse utiliza
benl consultas en las que el resultado depende de si existen
a
O
El operador EXISTS
r
I
C ennlastabla
fe o no. Se evala en TRUE si la subconsulta devuelve al menos una fila.
Afilas
determinadas
D
ra
UN odenla-tdiapositiva
ElFejemplo
muestra los departamentos que no tienen empleados. Para cada fila de la
n
tabla DEPARTMENTS,
la condicin comprueba si existe o no una fila en la tabla EMPLOYEES con el
mismo ID de departamento. En caso de que no exista dicha fila, la condicin se cumple para la fila
en cuestin y se selecciona. Si existe una fila correspondiente en la tabla EMPLOYEES, la fila no se
selecciona.

Oracle Database: Conceptos Fundamentales de SQL I 7-20

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Subconsulta: tipos, sintaxis e instrucciones


Subconsultas de una sola fila:
Funciones de grupo en una subconsulta
Clusula HAVING con subconsultas

Subconsultas de varias filas


Usar el operador ALL o ANY

Uso del operador EXISTS

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Valores nulos en una subconsulta

Oracle Database: Conceptos Fundamentales de SQL I 7-21

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Valores Nulos en una Subconsulta

SELECT emp.last_name
FROM
employees emp
WHERE emp.employee_id NOT IN
(SELECT mgr.manager_id
FROM
employees mgr);

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Valores Nulos en una Subconsulta
le
N
b
a
O
I de la diapositiva
La sentencia SQL
er intenta mostrar todos los empleados que no tienen ningn
C
f
s
A
subordinado.
sentencia SQL debe haber devuelto 12 filas. Sin embargo, la
an esta
rdevuelve
NDSQLnLgicamente,
t
sentencia
no
ninguna
fila. Uno de los valores devueltos por la consulta interna es un
U
F
o
n
valor nulo y, por lo tanto, la consulta completa no devuelve ninguna fila.

El motivo es que todas las condiciones que comparan un valor nulo tienen un resultado nulo. Por lo
tanto, cuando los valores nulos probablemente formen parte del juego de resultados de una
subconsulta, no utilice el operador NOT IN. El operador NOT IN es equivalente a <> ALL.
Tenga en cuenta que el valor nulo que forma parte del juego de resultados de una subconsulta no
representa ningn problema si se utiliza el operador IN. El operador IN es equivalente a =ANY. Por
ejemplo, para mostrar los empleados que tienen subordinados, utilice la siguiente sentencia SQL:
SELECT emp.last_name
FROM
employees emp
WHERE emp.employee_id

IN
(SELECT mgr.manager_id
FROM
employees mgr);

Oracle Database: Conceptos Fundamentales de SQL I 7-22

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Valores Nulos en una Subconsulta (continuacin)


Por otro lado, una clusula WHERE se puede incluir en la subconsulta para mostrar todos los
empleados que no tienen ningn subordinado:
SELECT last_name FROM employees
WHERE employee_id NOT IN
(SELECT manager_id
FROM
employees
WHERE manager_id IS NOT NULL);

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 7-23

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Prueba
El uso de una subconsulta es equivalente a la realizacin de
dos consultas secuenciales y al uso del resultado de la primera
consulta como los valores de bsqueda en la segunda
consulta.
1. Verdadero
2. Falso

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Respuesta: 1
le
N
b
a
O
CI nsfer
A
ND n-tra
U
F no

Oracle Database: Conceptos Fundamentales de SQL I 7-24

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Resumen
En esta leccin, debe haber aprendido lo siguiente:
Identificar cundo una subconsulta puede ayudar a
resolver un problema
Escribir subconsultas cuando una consulta est basada en
valores desconocidos
SELECT
FROM
WHERE

select_list
table
expr operator
(SELECT select_list
FROM
table);

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Resumen
le
N
b
a
O
r
I haber
En esta leccin,
a utilizar las subconsultas. Una subconsulta es una sentencia
eaprendido
Cdebe
f
s
Aest
SELECTD
que
embebida
en
una
clusula
de otra sentencia SQL. Las subconsultas son tiles
n
a
r
N
t
cuando
consulta
n- est basada en criterios de bsqueda con valores intermedios desconocidos.
FU una
o
n
Las subconsultas tienen las siguientes caractersticas:
Pueden transferir una fila de datos a una sentencia principal que contenga un operador de una
sola fila como =, <>, >, >=, < o <=.
Pueden transferir varias filas de datos a una sentencia principal que contenga un operador de
varias filas, como IN.
Primero las procesa el servidor de Oracle y, a continuacin, la clusula WHERE o HAVING
utiliza los resultados.
Pueden contener funciones de grupo.

Oracle Database: Conceptos Fundamentales de SQL I 7-25

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Prctica 7: Visin General


En esta prctica se abordan los siguientes temas:
Creacin de subconsultas para consultar valores basados
en criterios desconocidos
Uso de subconsultas para saber qu valores existen en un
juego de datos y no en otro

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Prctica 7: Visin General
le
N
b
a
O
En esta prctica escribir
er complejas utilizando sentencias SELECT.
CI nsfconsultas
A
D trde
Para las
preguntas
a la prctica, puede crear la consulta interna primero. Antes de codificar la
N
U
consulta
F externa,
non asegrese de que la consulta interna se ejecuta y produce los datos que anticipe.

Oracle Database: Conceptos Fundamentales de SQL I 7-26

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa

Uso de los Operadores de Definicin

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u los derechos reservados.
A toTodos
Copyright 2010, OracleS
y/o sus filiales.
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Objetivos
Al finalizar esta leccin, debera estar capacitado para lo
siguiente:
Describir los operadores de definicin
Utilizar un operador de definicin para combinar varias
consultas en una sola
Controlar del orden de las filas devueltas

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Objetivos
le
N
b
a
O
r
I
En esta leccinCaprender
consultas utilizando los operadores de definicin.
ea escribir
f
s
A
ND n-tran
U
F no

Oracle Database: Conceptos Fundamentales de SQL I 8-2

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Operadores de Definicin: tipos e instrucciones


Tablas utilizadas en esta leccin
Operador UNION y UNION ALL
Operador INTERSECT
Operador MINUS
Coincidencia de las sentencias SELECT
Uso de la clusula ORDER BY en operaciones de definicin

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 8-3

Fundacin Proydesa

Operadores de Definicin
Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

UNION/UNION ALL
A

INTERSECT

a
s
a
)h
g
r
A
B
o e
a
s
de Guid
y
o
pr ent
MINUS
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Operadores de Definicin
le
N
b
a
O
I definicin
Los operadoresCde
er combinan el resultado de dos o ms consultas de componente en un
f
s
A
resultado.D
Las consultas
an que contienen operadores de definicin se denominan consultas compuestas.
r
N
t
U
.F
Operador
non Devuelve
UNION

Resultados de ambas consultas despus de eliminar la duplicacin

UNION ALL

Resultados de ambas consultas, incluidas todas las duplicaciones

INTERSECT

Resultados comunes a ambas consultas

MINUS

Resultados de la primera consulta no presentes en la segunda

Todos los operadores de definicin tienen la misma prioridad. Si una sentencia SQL contiene varios
operadores de definicin, el servidor de Oracle los evala de izquierda (parte superior) a derecha
(parte inferior), si no hay ningn parntesis que especifique explcitamente otro orden. Debe utilizar
los parntesis para especificar el orden de evaluacin explcitamente en las consultas que utilizan el
operador INTERSECT en otros operadores de definicin.

Oracle Database: Conceptos Fundamentales de SQL I 8-4

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Instrucciones de los Operadores de Definicin

La expresiones de las listas SELECT debe coincidir en


nmero.
Los tipos de dato para cada columna de la segunda
consulta deben coincidir con los tipos de dato de su
columna correspondiente en la primera consulta.
Los parntesis se pueden utilizar para modificar la
secuencia de ejecucin.
La sentencia ORDER BY puede aparecer slo una vez al
final de la sentencia.
)

a
s
a
h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Instrucciones de los Operadores
le de Definicin
N
b
a
O
La expresiones
r SELECT deben coincidir en nmero y tipo de dato. Las consultas
I de lasfelistas
s
AC losanoperadores
queD
utilizan
UNION, UNION ALL, INTERSECT y MINUS en su clusula
r
N
t
- tener el mismo nmero y tipo de dato de columnas en su lista SELECT. El tipo
WHERE n
deben
FUde
o
n
dato de las columnas de la lista SELECT de las consultas de la consulta compuesta puede no

ser exactamente el mismo. La columna de la segunda consulta debe estar en el mismo grupo de
tipo de dato (por ejemplo, numrico o de caracteres) que la columna correspondiente de la
primera consulta.
Los operadores de definicin se pueden utilizar en subconsultas.
Debe utilizar los parntesis para especificar el orden de evaluacin en las consultas que utilizan
el operador INTERSECT en otros operadores de definicin. Esto garantiza el cumplimiento de
los emergentes estndares SQL que otorgarn al operador INTERSECT mayor prioridad que
los operadores de definicin.

Oracle Database: Conceptos Fundamentales de SQL I 8-5

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Servidor de Oracle y Operadores de Definicin

Las filas duplicadas se eliminan automticamente excepto


en UNION ALL.

Los nombres de columna de la primera consulta aparecen


en el resultado.
Por defecto, la salida se ordena en orden ascendente,
excepto en UNION ALL.

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Servidor de Oracle y Operadores
le de Definicin
N
b
a
O
Cuando una consulta
utiliza
de definicin, el servidor de Oracle elimina automticamente
eroperadores
CI excepto
f
s
A
las filas duplicadas,
en
el
caso
del
operador UNION ALL. Los nombres de columna de la
n
D determinados
a
r
N
t
salida
estn
por
la
lista
de
columnas
de la primera sentencia SELECT. Por defecto, la
U onF
salida se n
ordena en orden ascendente segn la primera columna de la clusula SELECT.

Las expresiones correspondientes en las listas SELECT de las consultas de componente de una
consulta compuesta deben coincidir en nmero y tipo de dato. Si las consultas de componente
seleccionan datos de caracteres, el tipo de dato del valor de retorno se determina de la siguiente
forma:
Si ambas consultas seleccionan valores del tipo de dato CHAR, de la misma longitud, los
valores devueltos tienen el mismo tipo de dato CHAR con esa longitud. Si las consultas
seleccionan valores del tipo CHAR con diferentes longitudes, el valor devuelto es VARCHAR2
con la longitud del valor CHAR ms largo.
Si una o ambas consultas seleccionan valores del tipo de dato VARCHAR2, los valores
devueltos tienen un tipo de dato VARCHAR2.
Si las consultas de componente seleccionan datos numricos, el tipo de dato del valor de retorno se
determina segn la prioridad numrica. Si todas las consultas seleccionan valores del tipo NUMBER,
los valores devueltos tienen el tipo de dato NUMBER. En las consultas que utilizan operadores de
definicin, el servidor de Oracle no realiza una conversin explcita a travs de los grupos de tipos de
dato. Por lo tanto, si las expresiones correspondientes de las consultas de componente se resuelven
tanto en datos numricos como de caracteres, el servidor de Oracle devuelve un error.
Oracle Database: Conceptos Fundamentales de SQL I 8-6

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Operadores de Definicin: tipos e instrucciones


Tablas utilizadas en esta leccin
Operador UNION y UNION ALL
Operador INTERSECT
Operador MINUS
Coincidencia de las sentencias SELECT
Uso de la clusula ORDER BY en operaciones de definicin

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 8-7

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Tablas Utilizadas en esta Leccin


Las tablas utilizadas en esta leccin son:
EMPLOYEES: proporciona los detalles de todos los
empleados actuales.
JOB_HISTORY: cuando un empleado cambia de cargo,
registra los detalles de la fecha de inicio y de finalizacin
del cargo anterior, el nmero de identificacin del cargo y
el departamento.

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Tablas Utilizadas en esta Leccin
le
N
b
a
O
En esta leccin seI utilizan e
C nsf dosr tablas: la tabla EMPLOYEES y la tabla JOB_HISTORY.
A
Ya est familiarizado
D tra con la tabla EMPLOYEES que almacena detalles sobre los empleados como un
N
U
nmero
nde- identificacin, la direccin de correo electrnico, el ID de cargo (por ejemplo,
F nico
o
n
ST_CLERK, SA_REP, etc.), el salario, el gestor, etc.
Algunos de los empleados llevan mucho tiempo en la compaa y han cambiado varias veces de
puesto. Esto se supervisa con la tabla JOB_HISTORY. Cuando un empleado cambia de cargo, los
detalles de fecha de inicio y finalizacin del cargo anterior, el job_id (por ejemplo, ST_CLERK,
SA_REP, etc.) y el departamento se registran en la tabla JOB_HISTORY.
La estructura y los datos de las tablas EMPLOYEES y JOB_HISTORY se muestran en las siguientes
pginas.

Oracle Database: Conceptos Fundamentales de SQL I 8-8

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa
Tablas Utilizadas en esta Leccin (continuacin)
Existen casos en los que la misma persona ha ocupado el mismo puesto ms de una vez durante el
tiempo que ha permanecido en la compaa. Por ejemplo, el empleado Taylor, que empez a trabajar
en la empresa el 24 de marzo de 1998. Taylor ocup el puesto de SA_REP desde el 24 de marzo de
1998 al 31de diciembre de 1998 y el puesto de SA_MAN desde el 1 de enero de 1999 al 31 de
diciembre de 1999. Taylor volvi a ocupar el puesto de SA_REP, que es su puesto actual.
DESCRIBE employees

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 8-9

Fundacin Proydesa
Tablas Utilizadas en esta Leccin (continuacin)

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

SELECT employee_id, last_name, job_id, hire_date, department_id


FROM employees;

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
-tr
UN onjob_history
FDESCRIBE
n

Oracle Database: Conceptos Fundamentales de SQL I 8-10

Fundacin Proydesa
Tablas Utilizadas en esta Leccin (continuacin)

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

SELECT * FROM job_history;

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 8-11

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Operadores de Definicin: tipos e instrucciones


Tablas utilizadas en esta leccin
Operador UNION y UNION ALL
Operador INTERSECT
Operador MINUS
Coincidencia de las sentencias SELECT
Uso de la clusula ORDER BY en operaciones de definicin

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 8-12

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Operador UNION

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
r
t
pconsultas
n
El operador UNION devuelve los resultados de ambas
despus
e
@
de eliminar la duplicacin.
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
Operador UNION
P
N ratodas
bl las filas seleccionadas en cualquier consulta. Utilice el operador
O
El operador UNION
devuelve
I
C ntodas
fe las filas de varias tablas y eliminar las filas duplicadas.
s
Adevolver
UNION para
D
N n-tra
U
Instrucciones
F no
El nmero de columnas seleccionadas debe ser el mismo.

Los tipos de dato de las columnas seleccionadas deben pertenecer al mismo grupo de tipo de
dato (por ejemplo, numrico o de caracteres).
No es necesario que los nombres de las columnas sean idnticos.
El operador UNION funciona en todas las columnas seleccionadas.
Los valores NULL no se ignoran durante la comprobacin de duplicados.
Por defecto, la salida se ordena en orden ascendente segn de las columnas de la clusula
SELECT.

Oracle Database: Conceptos Fundamentales de SQL I 8-13

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso del Operador UNION


Mostrar los detalles actuales y anteriores del puesto de todos
los empleados. Mostrar cada empleado slo una vez.
SELECT
FROM
UNION
SELECT
FROM

employee_id, job_id
employees
employee_id, job_id
job_history;

a
s
a
)h
g
r

o e
a
s
de Guid
y
o

pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
Uso del Operador UNION
P
N rcualquier
bl registro duplicado. Si los registros de las tablas EMPLOYEES y
a
O
El operador UNION
elimina
I
sfe stos slo aparecern una vez. Observe en la salida de la diapositiva
AC sonanidnticos,
JOB_HISTORY
D
queU
el N
registro del
-trempleado con un EMPLOYEE_ID de 200 aparece dos veces porque JOB_ID es
n
F
o
diferente n
en cada fila.
Considere el siguiente ejemplo:
SELECT employee_id, job_id, department_id
FROM
employees
UNION
SELECT employee_id, job_id, department_id
FROM
job_history;

Oracle Database: Conceptos Fundamentales de SQL I 8-14

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso del Operador UNION (continuacin)


En la salida anterior, el empleado 200 aparece tres veces. Por qu? Observe los valores de
DEPARTMENT_ID del empleado 200. Una fila tiene un DEPARTMENT_ID de 90, otra 10 y la
tercera, 90. Debido a estas combinaciones nicas de ID de cargos y de departamentos, cada fila del
empleado 200 es nica y, por lo tanto, no se considera un duplicado. Observe que la salida est
ordenada en orden ascendente segn la primera columna de la clusula SELECT (en este caso,
EMPLOYEE_ID).

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 8-15

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Operador UNION ALL

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
t
pr consultas,
n
El operador UNION ALL devuelve los resultados @
de ambas
e
incluidas todas las duplicaciones.
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O
ce
Operador UNION ALL PR le li
N ALL
bpara devolver todas las filas de varias consultas.
a
Utilice el operador
r
IOUNION
e
C
A ansf
D
Instrucciones
N n-tr
FUinstrucciones
Las
no para UNION y UNION ALL son las mismas, excepto en los dos siguientes casos
que pertenecen a UNION ALL: a diferencia de UNION, las filas duplicadas no se eliminan y la salida
no se ordena por defecto.

Oracle Database: Conceptos Fundamentales de SQL I 8-16

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso del Operador UNION ALL


Mostrar los departamentos actuales y anteriores de todos los
empleados.
SELECT employee_id, job_id, department_id
FROM
employees
UNION ALL
SELECT employee_id, job_id, department_id
FROM
job_history
ORDER BY employee_id;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i

c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
RALL
Uso del Operador UNION
P
le
N
b
a
O
En el ejemplo C
se Iseleccionan
La combinacin de las dos tablas tiene un total de 30 filas. El
er30 filas.
f
s
A ALL
operador D
UNION
no
elimina
las
filas
duplicadas. UNION devuelve todas las filas distintas
n
a
r
N
t
- cualquier consulta. UNION ALL devuelve todas las filas seleccionadas por
seleccionadas
U onpor
F
n
cualquier consulta, incluyendo las duplicadas. Considere la consulta de la diapositiva escrita ahora
con la clusula UNION:
SELECT
FROM
UNION
SELECT
FROM
ORDER BY

employee_id, job_id,department_id
employees
employee_id, job_id,department_id
job_history
employee_id;

la consulta anterior devuelve 29 filas. Esto se debe a que elimina la siguiente fila (porque est
duplicada):

Oracle Database: Conceptos Fundamentales de SQL I 8-17

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Operadores de Definicin: tipos e instrucciones


Tablas utilizadas en esta leccin
Operador UNION y UNION ALL
Operador INTERSECT
Operador MINUS
Coincidencia de las sentencias SELECT
Uso de la clusula ORDER BY en operaciones de definicin

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 8-18

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Operador INTERSECT

s
a
h
rg)
o

sa ide
e
d
oy nt Gu
r
p
El operador INTERSECT devuelve filas comunes@
a ambas consultas.
de
n
u
o
t
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O
ce
Operador INTERSECT PR le li
N rabpara devolver todas las filas comunes a varias consultas.
Utilice el operador
IOINTERSECT
C
A ansfe
D
Instrucciones
N n-tder columnas y los tipos de dato de las columnas seleccionadas por las sentencias
F UEl nmero
no en las consultas deben ser idnticos en todas las sentencias SELECT utilizadas en la
SELECT

consulta. No es necesario, sin embargo, que los nombres de las columnas sean idnticos.
Si se invierte el orden de las tablas intersectadas no se alterar el resultado.
INTERSECT no ignora los valores NULL.

Oracle Database: Conceptos Fundamentales de SQL I 8-19

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso del Operador INTERSECT


Mostrar los ID de empleado y de cargo de los empleados que
actualmente tienen el mismo puesto que anteriormente (es
decir, han cambiado de cargo pero ahora han vuelto a realizar
el mismo trabajo que realizaban anteriormente).
SELECT employee_id, job_id
FROM
employees
INTERSECT
SELECT employee_id, job_id
FROM
job_history;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
Uso del Operador INTERSECT
P
N rablal consulta devuelve slo los registros que tienen los mismos valores
Odiapositiva,
En el ejemplo C
de Ila
fe en ambas tablas.
s
A seleccionadas
en las columnas
n
D
ra si agrega la columna DEPARTMENT_ID a la sentencia SELECT de la tabla
N
t
U
Cul
ser
el
resultado
n
F no
EMPLOYEES
y la columna DEPARTMENT_ID a la sentencia SELECT de la tabla JOB_HISTORY y
ejecuta esta consulta? El resultado puede variar debido a la introduccin de otra columna cuyos valores
pueden o no estar duplicados.
Ejemplo:
SELECT employee_id, job_id, department_id
FROM
employees
INTERSECT
SELECT employee_id, job_id, department_id
FROM
job_history;

El empleado 200 ya no forma parte de los resultados porque el valor EMPLOYEES.DEPARTMENT_ID


es diferente del valor JOB_HISTORY.DEPARTMENT_ID.

Oracle Database: Conceptos Fundamentales de SQL I 8-20

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Operadores de Definicin: tipos e instrucciones


Tablas utilizadas en esta leccin
Operador UNION y UNION ALL
Operador INTERSECT
Operador MINUS
Coincidencia de las sentencias SELECT
Uso de la clusula ORDER BY en operaciones de definicin

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 8-21

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Operador MINUS

s
a
h
rg)
o

sa ide
e
d
oy nt Gu
r
p
El operador MINUS devuelve todas las filas distintas
seleccionadas
e por la
@
d
n
u
primera consulta, pero que no estn presentes
en
el
juego
de
o
t resultados
i
S
c
a
de la segunda consulta.
is
d
h
n
t
u
f
(
se
u
A
Copyright 2010, Oracle
to Todos los derechos reservados.
ESy/o sussefiliales.
D
OY licen
R
Operador MINUS
P ble
N
Utilice el operador
ra devolver todas las filas distintas seleccionadas por la primero
IOMINUSfepara
C
s presentes en el juego de resultados de la segunda consulta (la primera
A que no
consulta,D
pero
nestn
a
r
N
t
sentencia
n- MINUS la segunda sentencia SELECT).
FU nSELECT
o
Nota: el nmero de columnas y los tipos de dato de las columnas seleccionadas por las sentencias
SELECT de las consultas deben pertenecer al mismo grupo de tipo de dato en todas las sentencias
SELECT utilizadas en la consulta. No es necesario, sin embargo, que los nombres de las columnas
sean idnticos.

Oracle Database: Conceptos Fundamentales de SQL I 8-22

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso del Operador MINUS


Mostrar los identificadores de empleado cuyos empleados no
han cambiado sus puestos ni una vez.
SELECT
FROM
MINUS
SELECT
FROM

employee_id
employees
employee_id
job_history;

a
s
a
)h
g
r
o e
a
s

de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
Uso del Operador MINUS
P
N rablosl ID de empleado de la tabla JOB_HISTORY se restan de los de la
O
En el ejemplo de Ila
diapositiva,
sfe de resultados muestra los empleados resultantes despus de la resta;
AC aElnjuego
tabla EMPLOYEES.
D
N n-tr por filas que existen en la tabla EMPLOYEES pero que no existen en la tabla
estn
Urepresentados
F
no stos son los registros de los empleados que no han cambiado sus puestos ni una
JOB_HISTORY.
vez.

Oracle Database: Conceptos Fundamentales de SQL I 8-23

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Operadores de Definicin: tipos e instrucciones


Tablas utilizadas en esta leccin
Operador UNION y UNION ALL
Operador INTERSECT
Operador MINUS
Coincidencia de las sentencias SELECT
Uso de la clusula ORDER BY en operaciones de definicin

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 8-24

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Coincidencia de las Sentencias SELECT

Con el operador UNION, se muestra el ID de ubicacin, el


nombre de departamento y el estado en el que est
ubicado.
Debe hacer que coincida el tipo de dato (mediante la
funcin TO_CHAR o cualquier otra funcin de conversin)
cuando las columnas no existan en una tabla o en la otra.
SELECT location_id, department_name "Department",
TO_CHAR(NULL) "Warehouse location"
FROM departments
UNION
SELECT location_id, TO_CHAR(NULL) "Department",
state_province
FROM locations;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
ice
RO eSELECT
l
Coincidencia de las Sentencias
P
N radeblasl listas SELECT de las consultas deben coincidir en nmero,
O
Debido a que las Iexpresiones
fe y funciones de conversin de tipos de dato para cumplir con esta
s
AC
puede utilizar
columnas
ficticias
n
D
ra se asigna el nombre Warehouse location como la cabecera de columna
N la diapositiva,
t
regla.
En
U
n
F nofuncin TO_CHAR se utiliza en la primera consulta para que coincida el tipo de dato
ficticia. La
VARCHAR2 de la columna state_province que recupera la segunda consulta. Igualmente, la
funcin TO_CHAR se utiliza en la segunda consulta para que coincida el tipo de dato VARCHAR2 de
la columna department_name que recupera la primera consulta.
La salida de la consulta se muestra a continuacin:

Oracle Database: Conceptos Fundamentales de SQL I 8-25

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Coincidencia de las Sentencias SELECT: Ejemplo


Utilizar el operador UNION, mostrar el ID de empleado, ID de
cargo y salario de todos los empleados.
SELECT
FROM
UNION
SELECT
FROM

employee_id, job_id,salary
employees
employee_id, job_id,0
job_history;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o

pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
ice Ejemplo
RO eSELECT:
l
Coincidencia de las Sentencias
P
N y JOB_HISTORY
bl
a
O
Las tablas EMPLOYEES
tienen varias columnas en comn (por ejemplo,
r
I
ey DEPARTMENT_ID).
C JOB_ID
f
s
A
EMPLOYEE_ID,
Pero, y si lo que desea es que la consulta muestre
D tran
N
- ID de cargo y salario con el operador UNION sabiendo que el salario slo existe
el ID
Ude empleado,
n
F
o
n
en la tabla EMPLOYEES?
El cdigo de ejemplo de la diapositiva coinciden las columnas EMPLOYEE_ID y JOB_ID de las
tablas EMPLOYEES y JOB_HISTORY. Se agrega el valor literal 0 a la sentencia JOB_HISTORY
SELECT para que coincida con columna numrica SALARY de la sentencia EMPLOYEES SELECT.
En los resultados mostrados en la diapositiva, cada fila de la salida que corresponde a un registro de
la tabla JOB_HISTORY contiene un 0 en la columna SALARY.

Oracle Database: Conceptos Fundamentales de SQL I 8-26

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Operadores de Definicin: tipos e instrucciones


Tablas utilizadas en esta leccin
Operador UNION y UNION ALL
Operador INTERSECT
Operador MINUS
Coincidencia de las sentencias SELECT
Uso de la clusula ORDER BY en operaciones de definicin

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 8-27

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de la Clusula ORDER BY en


Operaciones de Definicin

La clusula ORDER BY slo puede aparecer una vez al


final de la consulta compuesta.
Las consultas de componente no pueden tener clusulas
ORDER BY individuales.
La clusula ORDER BY reconoce slo las columnas de la
primera consulta SELECT.
Por defecto, la primera columna de la primera consulta
SELECT se utiliza para ordenar la salida en orden
ascendente.

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
RBY
Uso de la Clusula ORDER
en
P
eOperaciones de Definicin
l
N
b
La clusula ORDER
rseapuede utilizar una vez en una consulta compuesta. Si se utiliza, la
IOBY slo
e
C
f
clusula ORDER
se
nsdebe colocar al final de la consulta. La clusula ORDER BY acepta el nombre
DA tBY
a
r
N
- Por defecto, la salida se ordena en orden ascendente segn la primera columna de
deFcolumna
U oonalias.
n
la clusula SELECT.
Nota: la clusula ORDER BY no reconoce los nombres de columna de la segunda consulta SELECT.
Para evitar la confusin con los nombres de columna, es una prctica habitual utilizar clusula
ORDER BY segn las posiciones de las columnas.
Por ejemplo, en la siguiente sentencia, la salida se mostrar en orden ascendente segn job_id.
SELECT employee_id, job_id,salary
FROM
employees
UNION
SELECT employee_id, job_id,0
FROM
job_history
ORDER BY 2;

Si omite ORDER BY, por defecto, la salida se ordenar en orden ascendente segn employee_id.
No puede utilizar las columnas de la segunda consulta para ordenar la salida.

Oracle Database: Conceptos Fundamentales de SQL I 8-28

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Prueba
Identifique las Instrucciones del operador de definicin.
1. La expresiones de las listas SELECT debe coincidir en
nmero.
2. Los parntesis no se pueden utilizar para modificar la
secuencia de ejecucin.
3. Los tipos de dato para cada columna de la segunda
consulta deben coincidir con los tipos de dato de su
columna correspondiente en la primera consulta.
s
4. La clusula ORDER BY slo se puede utilizar una vez en )laha
rg
o

consulta compuesta, a menos que se utilice un operador


sa ide
e
d
UNION ALL.
u
y

ro nt G
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Respuesta: 1, 3
le
N
b
a
O
CI nsfer
A
ND n-tra
U
F no

Oracle Database: Conceptos Fundamentales de SQL I 8-29

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Resumen
En esta leccin, debe haber aprendido a utilizar:
UNION para devolver todas las filas distintas
UNION ALL para devolver todas las filas, incluyendo los
duplicados
INTERSECT para devolver todas las filas que comparten
ambas consultas
MINUS para devolver todas las filas distintas
seleccionadas por la primera consulta, pero no por la
s
a
h
segunda
rg)
o

ORDER BY slo al final de la sentencia


sa
e

de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Resumen
le
N
b
a
O
El operadorIUNION e
devuelve
todas las filas distintas seleccionadas por cada consulta de la
r
C
f
s
A
consulta
compuesta.
Utilice
el
operador UNION para devolver todas las filas de varias tablas y
D tran
N
- filas duplicadas.
eliminarnlas
F UUtilice
noel operador UNION ALL para devolver todas las filas de varias consultas. A diferencia

del operador UNION, las filas duplicadas no se eliminan y la salida no se ordena por defecto.
Utilice el operador INTERSECT para devolver todas las filas comunes a varias consultas.
Utilice el operador MINUS para devolver filas en la primera consulta que no estn en la
segunda.
Recuerde utilizar la clusula ORDER BY slo al final de la sentencia compuesta.
Asegrese de que las expresiones correspondientes de las listas SELECT coinciden en nmero
y tipo de dato.

Oracle Database: Conceptos Fundamentales de SQL I 8-30

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Prctica 8: Visin General


En esta prctica, crear informes mediante:
El operador UNION
El operador INTERSECT
El operador MINUS

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Prctica 8: Visin General
le
N
b
a
O
I
En esta prctica
consultas
er utilizando los operadores de definicin.
Cescribir
f
s
A
ND n-tran
U
F no

Oracle Database: Conceptos Fundamentales de SQL I 8-31

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa

Manipulacin de Datos

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Objetivos
Al finalizar esta leccin, debera estar capacitado para lo
siguiente:
Describir cada sentencia de lenguaje de manipulacin de
datos (DML)
Insertar filas en una tabla
Actualizar filas en una tabla
Suprimir filas de una tabla
Controlar transacciones

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Objetivo
le
N
b
a
O
r
I
En esta leccinCaprender
las sentencias de lenguaje de manipulacin de datos (DML) para
ea utilizar
f
s
A
insertar filas
unaatabla,
n actualizar filas existentes en una tabla y suprimir filas existentes de una
r
ND en
t
tabla.
Tambin
aprender
a controlar transacciones con las sentencias COMMIT, SAVEPOINT y
U
n
F
o
n
ROLLBACK.

Oracle Database: Conceptos Fundamentales de SQL I 9-2

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Adicin de nuevas filas a una tabla


Sentencia INSERT
Cambio de datos en la tabla
Sentencia UPDATE
Eliminacin de filas de una tabla:
Sentencia DELETE
Sentencia TRUNCATE

has
e
a
s
Consistencia de lectura
de Guid
y
o
r
t
Clusula FOR UPDATE en una sentencia p
SELECT
n
e
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Control de transacciones de la base de datos mediante


)
COMMIT, ROLLBACK y SAVEPOINT
org

Oracle Database: Conceptos Fundamentales de SQL I 9-3

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Lenguaje de Manipulacin de Datos

Las sentencias DML se ejecutan al:


Agregar nuevas filas a una tabla
Modificar filas existentes en una tabla
Eliminar filas existentes de una tabla

Una transaccin consta de una recopilacin de sentencias


DML que forman una unidad lgica de trabajo.

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Lenguaje de Manipulacin de lDatos
e
N
b
a
O
I
El lenguaje deC
manipulacin
erde datos (DML) es una parte fundamentalmente de SQL. Para agregar,
f
s
A
actualizarD
suprimir
los datos de la base de datos, ejecute una sentencia DML. La recopilacin de
anforman
r
N oDML
t
sentencias
que
una unidad lgica de trabajo se denomina transaccin.
U
F non
Piense en una base de datos bancaria. Cuando un cliente del banco transfiere dinero de su cuenta de
ahorro a una cuenta corriente, la transaccin puede constar de las siguientes tres acciones diferentes:
reducir la cuenta de ahorro, aumentar la cuenta corriente y registrar la transaccin en el diario de
transacciones. El servidor de Oracle debe garantizar que se ejecuten las tres sentencias SQL para
mantener el balance correcto de las cuentas. Si algo impide que una de las sentencias de la
transaccin se ejecute, las dems sentencias de la transaccin se deben deshacer.
Nota
La mayora de las sentencias DML de esta leccin asumen que no se ha violado ninguna
restriccin de esta tabla. Las restricciones se tratarn ms adelante en este curso.
En SQL Developer, haga clic en el icono Run Script o pulse [F5] para ejecutar las sentencias
DML. Los mensajes de comentarios se mostrarn en la pgina con separadores Script Output.

Oracle Database: Conceptos Fundamentales de SQL I 9-4

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Adicin de una Nueva Fila a una Tabla


Nuevo
fila

DEPARTMENTS

Insertar una nueva fila


en la tabla
DEPARTMENTS.

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Adicin de una Nueva Fila a una
le Tabla
N
b
a
O
El grfico de la diapositiva
r un nuevo departamento a la tabla DEPARTMENTS.
CI nsfeilustra
A
ND n-tra
U
F no

Oracle Database: Conceptos Fundamentales de SQL I 9-5

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Sintaxis de las Sentencias INSERT

Agregar nuevas filas a una tabla mediante la sentencia


INSERT:
INSERT INTO
VALUES

table [(column [, column...])]


(value [, value...]);

Con esta sintaxis, slo se inserta una fila cada vez.

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
ce
i
RO
l
Sintaxis de las Sentencias
INSERT
P
le
N
b
a
O
Puede agregar nuevas
CI nfilas
fearuna tabla emitiendo la sentencia INSERT.
s
A
D tra
En la sintaxis:
N
U
Ftable non- es el nombre de la tabla.
column
es el nombre de la columna de la tabla que se debe rellenar.
value
es el valor correspondiente para la columna.
Nota: esta sentencia con la clusula VALUES agrega slo una fila cada vez a la tabla.

Oracle Database: Conceptos Fundamentales de SQL I 9-6

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Insercin de Filas

Insertar una nueva fila que contenga los valores de cada


columna.
Mostrar valores en el orden por defecto de las columnas
de la tabla.
Opcionalmente, mostrar la lista de columnas en la clusula
INSERT.
INSERT INTO departments(department_id,
department_name, manager_id, location_id)
VALUES (70, 'Public Relations', 100, 1700);

a
s
a
)h
g
r
o e
a
s
id
decomillas
Encerrar valores de caracteres y de fecha entre
u
y
G
o
pr ent
simples.
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Insercin de Filas
le
N
b
a
O
Iinsertar eunar nueva fila que contenga los valores de cada columna, no es necesaria
Puesto que puede
AC aennslafclusula
la lista deD
columnas
INSERT. Sin embargo, si no utiliza la lista de columnas, los
r
N
t
valores
U se deben
n- mostrar segn el orden por defecto de las columnas en la tabla y se debe
F
o
n
proporcionar un valor para cada columna.
DESCRIBE departments

Para mayor claridad, utilice la lista de columnas en la clusula INSERT.


Encierre los valores de caracteres y fecha entre comillas simples; sin embargo, no se recomienda
encerrar valores numricos entre comillas simples.

Oracle Database: Conceptos Fundamentales de SQL I 9-7

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Insercin de Filas con Valores Nulos

Mtodo implcito: omitir la columna de la lista


de columnas.
INSERT INTO
VALUES

departments (department_id,
department_name)
(30, 'Purchasing');

Mtodo explcita: especificar la palabra clave NULL en la


clusula VALUES.

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Insercin de Filas con Valoresle
Nulos
N
b
a
O
Metodo
er
CI Descripcin
f
s
A
Implcito
an la columna de la lista de columnas.
ND n-trOmite
U
F no Introduzca la palabra clave NULL en la lista VALUES; especifique la
Explcito
cadena vaca ('') en la lista VALUES de las cadenas de caracteres
INSERT INTO
VALUES

departments
(100, 'Finance', NULL, NULL);

y fechas.

Asegrese de que puede utilizar valores nulos en la columna de destino mediante la verificacin del
estado Null con el comando DESCRIBE.
El servidor de Oracle aplica automticamente todos los tipos de dato, rangos de datos y restricciones
de integridad de los datos. Las columnas que no se muestran explcitamente obtienen un valor nulo
en la nueva fila.
Los errores comunes que se producen durante la entrada del usuario se comprueban en el siguiente
orden:
Valor obligatorio que falta para una columna NOT NULL
Valor duplicado que viola cualquier restriccin de clave nica o primaria
Cualquier valor que viole una restriccin CHECK
Mantenimiento de la integridad referencial para la restriccin de clave ajena
No coincidencias de tipo de dato o valores demasiado anchos para la columna
Nota: se recomienda el uso de la lista de columnas porque hace la sentencia INSERT ms legible y
fiable o menos proclive a errores.
Oracle Database: Conceptos Fundamentales de SQL I 9-8

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Insercin de Valores Especiales


La funcin SYSDATE registra la fecha y hora actuales.
INSERT INTO employees (employee_id,
first_name, last_name,
email, phone_number,
hire_date, job_id, salary,
commission_pct, manager_id,
department_id)
VALUES
(113,
'Louis', 'Popp',
'LPOPP', '515.124.4567',
SYSDATE, 'AC_ACCOUNT', 6900,
NULL, 205, 110);

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Insercin de Valores Especiales
le
N
b
a
O
I
Puede utilizar C
funciones
para
er introducir valores especiales en la tabla.
f
s
A
n
D detlaradiapositiva
En el ejemplo
se registra informacin sobre el empleado Popp en la tabla
N
U
EMPLOYEES.
F nonProporciona la fecha y hora actuales en la columna HIRE_DATE. Utiliza la funcin
SYSDATE
que devuelve la fecha y hora actuales del servidor de base de datos. Tambin puede
utilizar la funcin CURRENT_DATE para obtener la fecha actual en la zona horaria de la sesin.
Adems puede utilizar la funcin USER al insertar filas en la tabla. La funcin USER registra el
nombre de usuario actual.
Confirmacin de Adiciones a la Tabla
SELECT employee_id, last_name, job_id, hire_date, commission_pct
FROM
employees
WHERE employee_id = 113;

Oracle Database: Conceptos Fundamentales de SQL I 9-9

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Insercin de Valores de Fecha y Hora Especficos

Agregar un nuevo empleado.


INSERT INTO employees
VALUES
(114,
'Den', 'Raphealy',
'DRAPHEAL', '515.127.4561',
TO_DATE('FEB 3, 1999', 'MON DD, YYYY'),
'SA_REP', 11000, 0.2, 100, 60);

Verificar la adicin.

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Insercin de Valores de Fechale
y Hora Especficos
N
b
a
O
El formato DD-MON-RR
I
esersuele utilizar para insertar el valor de fecha. Con el formato RR, el
C
f
s
A
sistema proporciona
D traelnsiglo correcto automticamente.
N
U
Tambin
n-especificar el valor de fecha en formato DD-MON-YYYY. Se recomienda hacerlo
F npuede
o
as porque especifica de forma clara el siglo y no depende de la lgica de formato RR interna de la

especificacin del siglo correcto.


Si necesita introducir una fecha en un formato diferente al formato por defecto (por ejemplo, con otro
siglo o con una hora concreta), debe utilizar la funcin TO_DATE.
En el ejemplo de la diapositiva se registra informacin del empleado Raphealy en la tabla
EMPLOYEES. Define la columna HIRE_DATE en el 3 de febrero de 1999.

Oracle Database: Conceptos Fundamentales de SQL I 9-10

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Creacin de un Script

Utilizar el carcter de sustitucin & en una sentencia SQL


para solicitar valores.
& es un marcador de posicin del valor de la variable.
INSERT INTO departments
(department_id, department_name, location_id)
VALUES

(&department_id, '&department_name',&location);

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Creacin de un Script
le
N
b
a
O
I
Puede guardarC
comandos
con
er variables de sustitucin en un archivo y ejecutar los comandos en el
f
s
A
archivo. En
rande la diapositiva se registra informacin sobre un departamento de la tabla
ND elnejemplo
t
DEPARTMENTS.
U
F
o
Ejecute elnscript y se le solicitar una entrada para cada una de las variables de sustitucin (&).

Despus de introducir un valor para la variable de sustitucin, haga clic en el botn OK. Los valores
que introduce el usuario son los que se sustituyen en la sentencia. Esto permite ejecutar el mismo
script una y otra vez, pero proporcionar un juego de valores diferente cada vez que lo ejecute.

Oracle Database: Conceptos Fundamentales de SQL I 9-11

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Copia de Filas
de Otra Tabla

Escribir la sentencia INSERT con una subconsulta:


INSERT INTO sales_reps(id, name, salary, commission_pct)
SELECT employee_id, last_name, salary, commission_pct
FROM
employees
WHERE job_id LIKE '%REP%';

No utilizar la clusula VALUES.

Hacer coincidir el nmero de columnas de la clusula


INSERT con el de la subconsulta.

a
s
a
)h
g
r
Inserta todas las filas devueltas por la subconsultaaen
o la e
s
tabla, sales_reps.
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Copia de Filas de Otra Tabla le
Puede utilizar la sentencia
rab para agregar filas a la tabla en la que se derivan los valores de
ION feINSERT
C
A aEn
las tablasD
existentes.
nsel ejemplo de la diapositiva, para que la sentencia INSERT INTO funcione,
r
N
t
- antes la tabla sales_reps mediante la sentencia CREATE TABLE. CREATE
debeUhaber creado
n
F
o
n
TABLE se trata en la leccin titulada Uso de Sentencias DDL para Crear y Gestionar Tablas.
En lugar de la clusula VALUES, utilice una subconsulta.
Sintaxis
INSERT INTO table [ column (, column) ] subquery;

En la sintaxis:
table
es el nombre de la tabla.
column
es el nombre de la columna de la tabla que se debe rellenar.
subquery
es la subconsulta que devuelve filas a la tabla.
El nmero de columnas y sus tipos de dato de la lista de columnas de la clusula INSERT deben
coincidir con el nmero de valores y sus tipos de dato en la subconsulta. Se agregan cero o ms filas
en funcin del nmero de filas devueltas por la subconsulta. Para crear una copia de la filas de una
tabla, utilice SELECT * en la subconsulta:
INSERT INTO copy_emp
SELECT *
FROM
employees;
Oracle Database: Conceptos Fundamentales de SQL I 9-12

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Adicin de nuevas filas a una tabla


Sentencia INSERT
Cambio de datos en la tabla
Sentencia UPDATE
Eliminacin de filas de una tabla:
Sentencia DELETE
Sentencia TRUNCATE

has
e
a
s
Consistencia de lectura
de Guid
y
o
r
t
Clusula FOR UPDATE en una sentencia p
SELECT
n
e
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Control de transacciones de la base de datos mediante


)
COMMIT, ROLLBACK y SAVEPOINT
org

Oracle Database: Conceptos Fundamentales de SQL I 9-13

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Cambio de Datos en la Tabla


EMPLOYEES

Actualizar filas en la tabla EMPLOYEES:

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Cambio de Datos en la Tabla le
bde nmero de departamento para los empleados del departamento 60
a
r
IONel cambio
La diapositivaC
ilustra
e
A 80.ansf
al departamento
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 9-14

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Sintaxis de Sentencias UPDATE

Modificar los valores existentes en una tabla con la


sentencia UPDATE:
UPDATE
SET
[WHERE

table
column = value [, column = value, ...]
condition];

Actualizar ms de una fila cada vez (si es necesario).

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
Sintaxis de SentenciasP
UPDATE
N rexistentes
bl en una tabla mediante la sentencia UPDATE.
a
O
Puede modificar Ilos
valores
AC ansfe
D
En la sintaxis:
UN on-tr es el nombre de la tabla.
Ftable
n
column
es el nombre de la columna de la tabla que se debe rellenar.

es el valor o subconsulta correspondiente para la columna.


identifica las filas que se deben actualizar y se compone de nombres de columna,
expresiones, constantes, subconsultas y operadores de comparacin.
Para confirmar la operacin de actualizacin, consulte la tabla para visualizar las filas actualizadas.
Para obtener ms informacin, consulte la seccin sobre UPDATE en Oracle Database SQL
Language Reference (Referencia sobre Lenguaje SQL de Oracle Database) para la base de datos 10g
u 11g.
Nota: en general, la primera columna de clave primaria se utiliza en la clusula WHERE para
identificar una nica fila para la actualizacin. El uso de otras columnas puede provocar una
actualizacin inesperada de varias filas. Por ejemplo, identificar una fila de la tabla EMPLOYEES por
nombre es peligroso, ya que puede que ms de un empleado tengan el mismo nombre.
value
condition

Oracle Database: Conceptos Fundamentales de SQL I 9-15

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Actualizacin de Filas en una Tabla

Si se especifica la clusula WHERE, se modifican los


valores de una fila o varias filas especficas:
UPDATE employees
SET
department_id = 50
WHERE employee_id = 113;

Si se omite la clusula WHERE, se modifican los valores de


todas las filas de la tabla:

a
s
a
)h
g
UPDATE
copy_emp
r
o e
a
SET
department_id = 110;
s
de Guid
y
o
pr ent
@
d
Especificar SET column_name= NULL
un
on para
tuactualizar
i
S
c
a his
valor de columna a NULL.
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Actualizacin de Filas en una lTabla
e
N
b
a
O
La sentencia UPDATE
modifica
valores de una fila o varias filas especficas si se especifica la
erde lalosdiapositiva
CIEl ejemplo
f
s
A
clusula WHERE.
muestra la transferencia del empleado 113 (Popp) al
D tran
N
departamento
FU non50.Si omite la clusula WHERE, se modifican todas las filas de la tabla. Examine las filas actualizadas en
la tabla COPY_EMP.
SELECT last_name, department_id
FROM
copy_emp;

Por ejemplo, un empleado que era SA_REP ahora ha cambiado su puesto a IT_PROG. Por lo tanto,
se debe actualizar su JOB_ID y el campo de comisiones se debe definir en NULL.
UPDATE employees
SET job_id = 'IT_PROG', commission_pct = NULL
WHERE employee_id = 114;

Nota: la tabla COPY_EMP tiene los mismos datos que la tabla EMPLOYEES.
Oracle Database: Conceptos Fundamentales de SQL I 9-16

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Actualizacin de Dos Columnas con una


Subconsulta
Actualizar el cargo y el salario del empleado 113 para que
coincida con los del empleado 205.
UPDATE employees
SET
job_id = (SELECT
FROM
WHERE
salary = (SELECT
FROM
WHERE
WHERE employee_id = 113;

job_id
employees
employee_id = 205),
salary
employees
employee_id = 205)

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Actualizacin de Dos Columnas
le con una Subconsulta
N
b
a
O
Puede actualizar Ivarias columnas
er en la clusula SET de una sentencia UPDATE mediante la escritura
C
f
s
A
de variasD
an La sintaxis es la siguiente:
r
N subconsultas.
t
UPDATE
table
U
FSET noncolumn =
(SELECT
[ ,
column

[WHERE

column
FROM table
WHERE condition)
=

(SELECT
column
FROM table
WHERE condition)]
condition ] ;

El ejemplo de la diapositiva tambin se puede escribir del siguiente modo:


UPDATE employees
SET (job_id, salary) = (SELECT job_id, salary
FROM
employees
WHERE
employee_id = 205)
WHERE
employee_id
= 113;
Oracle Database: Conceptos Fundamentales de SQL I 9-17

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Actualizacin de Filas Basada en Otra Tabla


Utilizar subconsultas en las sentencias UPDATE para actualizar
los valores de fila de una tabla segn los valores de otra tabla:
UPDATE
SET

copy_emp
department_id

WHERE

job_id

(SELECT department_id
FROM employees
WHERE
employee_id = 100)
(SELECT job_id
FROM employees
WHERE employee_id = 200);

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Actualizacin de Filas Basadale
en Otra Tabla
N
b
a
O
Puede utilizar lasIsubconsultas
UPDATE para actualizar las filas de una tabla. El ejemplo de la
C nla stabla
ferCOPY_EMP
A
diapositiva
actualiza
segn los valores de la tabla EMPLOYEES. Cambia el
D tra
N
nmero
de todos los empleados con el ID de cargo del empleado 200 al nmero de
U de departamento
nF
o
n
departamento actual del empleado 100.

Oracle Database: Conceptos Fundamentales de SQL I 9-18

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Adicin de nuevas filas a una tabla


Sentencia INSERT
Cambio de datos en la tabla
Sentencia UPDATE
Eliminacin de filas de una tabla:
Sentencia DELETE
Sentencia TRUNCATE

has
e
a
s
Consistencia de lectura
de Guid
y
o
r
t
Clusula FOR UPDATE en una sentencia p
SELECT
n
e
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Control de transacciones de la base de datos mediante


)
COMMIT, ROLLBACK y SAVEPOINT
org

Oracle Database: Conceptos Fundamentales de SQL I 9-19

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Eliminacin de Filas de Tablas


DEPARTMENTS

Suprimir una fila de la tabla DEPARTMENTS:

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Eliminacin de Filas de Tablasle
N rasebha eliminado de la tabla DEPARTMENTS (siempre que no haya
Ocontratos
El departamento Ide
C
feen la tabla DEPARTMENTS), como se muestra en el grfico de la
s
A restriccin
violado ninguna
n
D
N n-tra
diapositiva.
U
F no

Oracle Database: Conceptos Fundamentales de SQL I 9-20

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Sentencia DELETE
Puede eliminar filas existentes de una tabla mediante la
sentencia DELETE:
DELETE [FROM]
[WHERE

table
condition];

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
Sintaxis de SentenciasP
DELETE
N radebluna tabla mediante la sentencia DELETE.
O
Puede eliminar filas
existentes
I
AC ansfe
D
En la sintaxis:
UN on-tr es el nombre de la tabla.
Ftable
n
condition
identifica las filas que se deben suprimir y se compone de nombres de columna,
expresiones, constantes, subconsultas y operadores de comparacin.
Nota: si no se suprime ninguna fila, se devuelve el mensaje 0 rows deleted (en el separador Script
Output de SQL Developer)
Para obtener ms informacin, consulte la seccin sobre DELETE en Oracle Database SQL
Language Reference (Referencia sobre Lenguaje SQL de Oracle Database) para la base de datos 10g
u 11g.

Oracle Database: Conceptos Fundamentales de SQL I 9-21

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Supresin de Filas de Tablas

Se suprimen filas concretas si se especifica la clusula


WHERE:
DELETE FROM departments
WHERE department_name = 'Finance';

Se suprimen todas las filas de la tabla si omite la clusula


WHERE:

a
s
a
)h
g
DELETE FROM copy_emp;
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Supresin de Filas de Tablas le
N ramediante
b
Puede suprimir filas
la especificacin de la clusula WHERE en la sentencia
IOconcretas
e
C
f
sejemplo de la diapositiva se suprime el departamento Accounting de la tabla
Ael primer
DELETE.D
En
nconfirmar
a
r
N
t
DEPARTMENTS.
Para
la operacin de supresin, visualice las filas suprimidas con la
U
n
F
o
sentencian
SELECT.
SELECT *
FROM
WHERE

departments
department_name = 'Finance';

Si omite la clusula WHERE, se suprimen todas las filas de la tabla. En el segundo ejemplo de la
diapositiva se suprimen todas las filas de la tabla COPY_EMP, porque no se ha especificado ninguna
clusula WHERE.
Ejemplo:
Se eliminan las filas identificadas en la clusula WHERE.
DELETE FROM

employees WHERE employee_id = 114;

DELETE FROM

departments WHERE department_id IN (30, 40);

Oracle Database: Conceptos Fundamentales de SQL I 9-22

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Supresin de Filas Basada


en Otra Tabla
Utilizar subconsultas en las sentencias DELETE para eliminar
filas de una tabla segn los valores de otra tabla:
DELETE FROM employees
WHERE department_id =
(SELECT department_id
FROM
departments
WHERE department_name
LIKE '%Public%');

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Supresin de Filas Basada en lOtra
e Tabla
N
b
a
O
r suprimir filas de una tabla segn los valores de otra tabla. En el
I
Puede utilizar C
subconsultas
epara
f
s
A
ejemplo de
suprimen todos los empleados de un departamento, donde el nombre del
rande lasecadena
NDlandiapositiva
t
departamento
consta
Public.
U
F no
La subconsulta busca en la tabla DEPARTMENTS el nmero de departamento segn el nombre de
departamento que contenga la cadena Public. A continuacin, la subconsulta introduce el nmero
de departamento en la consulta principal, con lo que se suprimen las filas de datos de la tabla
EMPLOYEES en base a este nmero de departamento.

Oracle Database: Conceptos Fundamentales de SQL I 9-23

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Sentencia TRUNCATE

Elimina todas las filas de una tabla, dejando la tabla vaca


y la estructura de la misma intacta.
Es una sentencia de lenguaje de definicin de datos (DDL)
en lugar de una sentencia DML; no se puede deshacer
fcilmente.
Sintaxis:
TRUNCATE TABLE table_name;

a
s
a
)h
g
TRUNCATE TABLE copy_emp;
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O
ce
Sentencia TRUNCATE PR le li
Una forma ms eficaz
rabuna tabla es con la sentencia TRUNCATE.
IONdefvaciar
e
C
Puede utilizar
ns TRUNCATE para eliminar fcilmente todas las filas de una tabla o un
DA la tsentencia
a
r
N
cluster.
de filas con las sentencia TRUNCATE es ms rpida que la eliminacin con la
U La eliminacin
n
F
o
n
sentencia DELETE por las siguientes razones:

Ejemplo:

La sentencia TRUNCATE es una sentencia de lenguaje de definicin de datos (DDL) y no genera


ninguna informacin de rollback. La informacin de rollback se trata ms adelante en esta
leccin.
El truncamiento de una tabla no arranca los disparadores de supresin de la tabla.
Si la tabla es el principal de una restriccin de integridad referencial, no puede truncarla. Debe
desactivar la restriccin antes de emitir la sentencia TRUNCATE. La desactivacin de restricciones se
trata en la leccin titulada Uso de Sentencias DDL para Crear y Gestionar Tablas.

Oracle Database: Conceptos Fundamentales de SQL I 9-24

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Adicin de nuevas filas a una tabla


Sentencia INSERT
Cambio de datos en la tabla
Sentencia UPDATE
Eliminacin de filas de una tabla:
Sentencia DELETE
Sentencia TRUNCATE

has
e
a
s
Consistencia de lectura
de Guid
y
o
r
t
Clusula FOR UPDATE en una sentencia p
SELECT
n
e
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Control de transacciones de base de datos mediante


)
COMMIT, ROLLBACK y SAVEPOINT
org

Oracle Database: Conceptos Fundamentales de SQL I 9-25

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Transacciones de Base de Datos


Una transaccin de base de datos consiste en una de las
siguientes opciones:
Sentencias DML que constituyen un cambio consistente
de los datos
Una sentencia DDL
Una sentencia de lenguaje de control de datos (DCL)

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Transacciones de Base de Datos
le
N
b
a
O
I garantiza
El servidor de C
Oracle
er la consistencia de los datos basada en transacciones. Las
f
s
A
transacciones
n ms flexibilidad y control al cambiar los datos y garantizan la
radatos
ND denproporcionan
t
consistencia
los
en caso de fallo de proceso de usuario o del sistema.
U
F no
Las transacciones constan de sentencias DML que suponen un cambio en los datos. Por ejemplo, una
transferencia de fondos entre dos cuentas debe incluir un dbito en una cuenta y un crdito en otra
por la misma cantidad. Ambas acciones deben ser correctas o incorrectas por igual; el crdito no se
debe confirmar sin el dbito.
Tipos de Transaccin

Tipo

Descripcin

Lenguaje de manipulacin
de datos (DML)
Lenguaje de definicin de
datos (DDL)
Lenguaje de control de
datos (DCL)

Consta de un nmero de sentencias DML que el servidor de


Oracle trata como una entidad nica o unidad de trabajo lgica.
Consta de una nica sentencia DDL.
Consta de una nica sentencia DCL.

Oracle Database: Conceptos Fundamentales de SQL I 9-26

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Transacciones de la Base de Datos: Inicio y Fin

Empezar cuando se ejecute la primera sentencia SQL de


DML.
Terminar con uno de los siguientes eventos:
Se emite una sentencia COMMIT o ROLLBACK.
Se ejecuta una sentencia DDL o DCL (confirmacin
automtica).
El usuario sale de SQL Developer o SQL*Plus.
El sistema falla.

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Transaccin de la Base de Datos:
le Inicio y Fin
N
b
a
O
Cundo se inicia
eruna transaccin de la base de datos?
CI y termina
f
s
A
D tempieza
Una transaccin
an cuando se encuentra la primera sentencia DML y termina cuando se
r
N
U
produce
siguientes condiciones:
F una
nodenunalassentencia
Se emite
COMMIT o ROLLBACK.

Se emite una sentencia DDL, como CREATE.


Se emite una sentencia DCL.
El usuario sale de SQL Developer o SQL*Plus.
Falla una mquina o el sistema.
Tras la finalizacin de una transaccin, la siguiente sentencia SQL ejecutable inicia automticamente
la prxima transaccin.
Se confirma automticamente una nueva sentencia DDL o DCL y, por lo tanto, finaliza de forma
implcita una transaccin.

Oracle Database: Conceptos Fundamentales de SQL I 9-27

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Ventajas de las Sentencias COMMIT


y ROLLBACK
Con las sentencias COMMIT y ROLLBACK, puede:

Garantizar la consistencia
Visualizar una presentacin preliminar de los cambios de
los datos antes de hacerlos permanentes
Agrupar componentes relacionados de forma lgica

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
ceROLLBACK
i
RO
l
Ventajas de las Sentencias
COMMITy
P
le
N
b
a
O
Con las sentencias
I COMMIT
ery ROLLBACK, puede controlar cundo hacer permanentes los cambios
C
f
s
A
realizadosDa los datos.
N n-tran
U
F no

Oracle Database: Conceptos Fundamentales de SQL I 9-28

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Sentencias de Control de Transacciones


Explcitas
Hora

COMMIT
Transaccin
DELETE
SAVEPOINT A
INSERT

s
a
h
UPDATE
rg)
o

sa ide
e
SAVEPOINT B
d
roy nt Gu
p
INSERT
n@ tude ROLLBACK
ROLLBACK
ROLLBACK
o
i
c is S A
to SAVEPOINT d
B a to SAVEPOINT
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Sentencias de Control de Transacciones
Explcitas
le
N
b
a
O
Puede controlar laI lgica de
C nsferlas transacciones mediante las sentencias COMMIT, SAVEPOINT y
A
ROLLBACK.
D tra
N
U
Descripcin
FSentencia
onn
COMMIT
COMMIT finaliza la transaccin actual convirtiendo todos los

cambios de datos pendientes en permanentes.

SAVEPOINT name
ROLLBACK
ROLLBACK TO
SAVEPOINT name

SAVEPOINT marca un punto de grabacin en la transaccin


actual.
ROLLBACK finaliza la transaccin actual descartando todos
los cambios de datos pendientes.
ROLLBACK TO SAVEPOINT realiza un rollback de la
transaccin actual en el punto de grabacin especificado,
descartando de esta forma la posibilidad de realizar cambios y
puntos de grabacin creados despus del punto de grabacin
en el que est realizando el rollback. Si omite la clusula TO
SAVEPOINT, la sentencia ROLLBACK realiza un rollback
de toda la transaccin. Puesto que los puntos de grabacin
son lgicos, no hay forma de mostrar lo que ha creado.

Nota: no puede aplicar la sentencia COMMIT en SAVEPOINT. SAVEPOINT no es SQL estndar de


ANSI.
Oracle Database: Conceptos Fundamentales de SQL I 9-29

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Rollback de los Cambios de un Marcador

Crear un marcador en una transaccin actual mediante la


sentencia SAVEPOINT.

Realizar rollback en dicho marcador mediante la sentencia


ROLLBACK TO SAVEPOINT.
UPDATE...
SAVEPOINT update_done;
INSERT...
ROLLBACK TO update_done;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Rollback de los Cambios de un
leMarcador
N
b
a
O
Puede crear un marcador
en
I
erla transaccin actual mediante la sentencia SAVEPOINT, que divide la
C
f
s
A
transaccin
pequeas. Puede descartar los cambios pendientes hasta dicho
ran ms
NDconennlasecciones
t
marcador
sentencia
ROLLBACK TO SAVEPOINT.
U
F
o
Si crea unnsegundo punto de grabacin con el mismo nombre que un punto de grabacin anterior,
ste se suprime.

Oracle Database: Conceptos Fundamentales de SQL I 9-30

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Procesamiento de Transacciones Implcitas

Una transaccin automtica se produce en las siguientes


circunstancias:
Se emite una sentencia DDL.
Se emite una sentencia DCL.
Salida normal de SQL Developer o SQL*Plus, sin emitir
explcitamente las sentencias COMMIT o ROLLBACK.

Un rollback automtico se produce con la terminacin


anormal de SQL Developer o SQL*Plus o por un fallo del
sistema.

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Procesamiento de Transacciones
le Implcitas
N
b
a
O
r
I
eCircumstances
f
Estado AC
s
ND n-tran Se emite una sentencia DDL o DCL, se sale normalmente de
Confirmacin
U
Fautomtica
SQL*Plus sin emitir explcitamente los comandos COMMIT
no
Rollback automtico

o ROLLBACK
Terminacin anormal de SQL Developer o SQL*Plus o fallo
del sistema

Nota: en SQL*Plus, el comando AUTOCOMMIT se puede activar o desactivar. Si se define en ON,


cada sentencia DML individual se confirma en cuanto se ejecuta. No puede realizar rollback de los
cambios. Si se define en OFF, la sentencia COMMIT an se puede emitir explcitamente. Adems, la
sentencia COMMIT se emite al emitir una sentencia DDL o al salir de SQL*Plus. El comando SET
AUTOCOMMIT ON/OFF se salta en SQL Developer. DML se confirma en una salida normal de SQL
Developer slo si tiene activada la preferencia Autocommit. Para activar Autocommit, realice los
siguientes pasos:
En el men Tools, seleccione Preferences. En el cuadro de dilogo Preferences, ample Database
y seleccione Worksheet Parameters.
En el panel de la derecha, seleccione la opcin Autocommit in SQL Worksheet. Haga clic en
OK.
Oracle Database: Conceptos Fundamentales de SQL I 9-31

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa
Procesamiento de Transacciones Implcitas (continuacin)
Fallos del Sistema
Cuando se interrumpe una transaccin debido a un fallo del sistema, se realiza un rollback
automtico de toda la transaccin. Esto impide que el error provoque cambios no deseados en los
datos y que devuelva las tablas a su estado en el momento de la ltima confirmacin. De esta forma,
el servidor de Oracle protege la integridad de las tablas.
En SQL Developer, la salida normal de la sesin se realiza seleccionando Exit en el men File. Con
SQL*Plus, la salida normal se realiza introduciendo el comando EXIT en el smbolo del sistema. Si
se cierra la ventana, se interpreta como una salida anormal.

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 9-32

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Estado de los Datos antes de COMMIT o ROLLBACK

Se puede recuperar el estado anterior de los datos.


El usuario actual puede revisar los resultados de las
operaciones DML mediante la sentencia SELECT.

Los dems usuarios no pueden ver los resultados de las


sentencias DML del usuario actual.
Las filas afectadas estn bloqueadas; otros usuarios no
pueden cambiar los datos de las filas afectadas.

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
ice o ROLLBACK
ROde eCOMMIT
l
Estado de los Datos antes
P
Ndatos rrealizados
bl durante la transaccin son temporales hasta que se confirma la
a
O
I
Todos los cambios
de
AC ansfe
transaccin.
D
tr antes de emitir las sentencias COMMIT o ROLLBACK se describe a
-datos
UN deolos
ElFestado
n
n
continuacin:
Las operaciones de manipulacin de datos afectan principalmente al buffer de la base de datos y,
por lo tanto, se puede recuperar el estado anterior de los datos.
El usuario actual puede revisar los resultados de las operaciones de manipulacin de datos
mediante la consulta de las tablas.
Los dems usuarios no pueden ver los resultados de las operaciones de manipulacin realizadas
por el usuario actual. El servidor de Oracle establece la consistencia de lectura para garantizar
que todos los usuarios ven los datos tal y como estaban en el momento de la ltima
confirmacin.
Las filas afectadas estn bloqueadas; otros usuarios no pueden cambiar los datos de las filas
afectadas.

Oracle Database: Conceptos Fundamentales de SQL I 9-33

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Estado de los Datos despus de COMMIT

Los cambios de datos se guardan en la base de datos.


Se sobrescribe el estado anterior de los datos.
Todos los usuarios pueden ver los resultados.
Los bloqueos de las filas afectadas se liberan y dichas
filas quedan disponibles para que las manipulen otros
usuarios.
Se borran todos los puntos de grabacin.

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
ice
RO dee COMMIT
l
Estado de los Datos despus
P
l
N rabpendientes
O
Para convertir todos
los cambios
en permanentes, utilice la sentencia COMMIT. A
I
eque ocurre despus
Cmuestra
f
s
A
continuacin,
se
lo
de ejecutar una sentencia COMMIT:
D tran
N
cambios
n- de datos se escriben en la base de datos.
F ULos
o
n
El estado anterior de los datos ya no est disponible con las consultas SQL normales.

Todos los usuarios pueden ver los resultados de la transaccin.


Los bloqueos de las filas afectadas se liberan y las filas quedan ahora disponibles para que otros
usuarios realicen nuevos cambios en los datos.
Se borran todos los puntos de grabacin.

Oracle Database: Conceptos Fundamentales de SQL I 9-34

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Confirmacin de Datos

Realice estos cambios:


DELETE FROM employees
WHERE employee_id = 99999;
INSERT INTO departments
VALUES (290, 'Corporate Tax', NULL, 1700);

Confirme los cambios:

s
a
h
COMMIT;
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Confirmacin de Datos
le
N
b
a
O
En el ejemplo de Ila diapositiva,
suprime una fila de la tabla EMPLOYEES y se inserta una nueva
C nsferLossecambios
A
en la tabla
DEPARTMENTS.
se guardan emitiendo la sentencia COMMIT.
D tra
N
Ejemplo:
FU nonElimine los departamentos 290 y 300 de la tabla DEPARTMENTS y actualice una fila en la tabla
EMPLOYEES. Guarde el cambio de datos.
DELETE FROM departments
WHERE
department_id IN (290, 300);
UPDATE employees
SET
department_id = 80
WHERE employee_id = 206;
COMMIT;

Oracle Database: Conceptos Fundamentales de SQL I 9-35

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Estado de los Datos despus de ROLLBACK


Desechar todos los cambios pendientes mediante la sentencia
ROLLBACK:

Se deshacen los cambios de datos.


Se restaura el estado anterior de los datos.
Se liberan los bloqueos de las filas afectadas.
DELETE FROM copy_emp;
ROLLBACK ;

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
ice
RO dee ROLLBACK
l
Estado de los Datos despus
P
l
N rabpendientes,
O
Para descartar todos
los cambios
utilice la sentencia ROLLBACK obteniendo los
I
e
C
f
s
A
siguientesDresultados:
ancambios de datos.
r
Ndeshacen
t

Se
los
U
F Se restaura
non el estado anterior de los datos.
Se liberan los bloqueos de las filas afectadas.

Oracle Database: Conceptos Fundamentales de SQL I 9-36

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Estado de los Datos despus de ROLLBACK:


Ejemplo
DELETE FROM test;
25,000 rows deleted.
ROLLBACK ;
Rollback complete.
DELETE FROM test WHERE
1 row deleted.

id = 100;

s
a
h
rg)
o

sa ide
e
d
COMMIT;
y t Gu
o
r
p
Commit complete.
en
@
d
n
u
t
io
S
c
a
s
i
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
ice
RO dee ROLLBACK:
l
Estado de los Datos despus
Ejemplo
P
l
N
b
Al intentar eliminar
ra de la tabla TEST, puede borrar accidentalmente la tabla. Puede
IOun registro
e
C
f
A volver
corregir el
nsa emitir la sentencia correcta y hacer permanentes los cambios de datos.
Derror,
a
r
N
t
FU nonSELECT * FROM
test WHERE
No rows selected.

id = 100;

Oracle Database: Conceptos Fundamentales de SQL I 9-37

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Rollback a Nivel de Sentencias

Si falla una sentencia DML durante la ejecucin, slo se


realiza un rollback de dicha sentencia.
El servidor de Oracle implanta un punto de grabacin
implcito.
Los dems cambios se retienen.
El usuario debe terminar las transacciones explcitamente
con la ejecucin de una sentencia COMMIT o ROLLBACK.

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Rollback a Nivel de Sentenciasle
N de una
btransaccin mediante un rollback implcito si se detecta un error de
a
r
IOparte
Se puede desechar
e
C
sSif falla una nica sentencia DML durante la ejecucin de una transaccin, su
ejecucinD
deAsentencia.
n
a
-trmediante un rollback a nivel de sentencia, pero los cambios realizados por las
efecto
se deshace
UN
n
F
o
sentenciasnDML anteriores en la transaccin no se desechan. El usuario los puede omitir o realizar un
rollback explcito.
El servidor de Oracle emite una confirmacin implcita antes y despus de cualquier sentencia DDL.
Por lo tanto, si la sentencia DDL no se ejecuta correctamente, no podr realizar rollback de la
sentencia anterior porque el servidor ha emitido una confirmacin.
El usuario debe terminar las transacciones explcitamente con la ejecucin de una sentencia COMMIT
o ROLLBACK.

Oracle Database: Conceptos Fundamentales de SQL I 9-38

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Adicin de nuevas filas a una tabla


Sentencia INSERT
Cambio de datos en la tabla
Sentencia UPDATE
Eliminacin de filas de una tabla:
Sentencia DELETE
Sentencia TRUNCATE

has
e
a
s
Consistencia de lectura
de Guid
y
o
r
t
Clusula FOR UPDATE en una sentencia p
SELECT
n
e
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Control de transacciones de base de datos mediante


)
COMMIT, ROLLBACK y SAVEPOINT
org

Oracle Database: Conceptos Fundamentales de SQL I 9-39

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Consistencia de Lectura

La consistencia de lectura garantiza una vista consistente


de los datos en todo momento.
Los cambios realizados por un usuario no entran en
conflicto con los cambios realizados por otro usuario.
La consistencia de lectura garantiza que en los mismos
datos:
Los lectores no esperen los escritores.
Los escritores no esperen a los lectores.
Los escritores esperen a los escritores.

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Consistencia de Lectura
le
N
b
a
O
r pueden acceder a la base de datos de dos formas:
Los usuarios de
dee
datos
ClaIdebase
f
s
A
Operaciones
lectura
D tran (sentencia SELECT)
N
n- de escritura (sentencias INSERT, UPDATE, DELETE)
F UOperaciones
o
n
La consistencia de lectura es necesaria para lo siguiente:

Que el lector y el escritor de la base de datos tengan garantizada una vista consistente de los
datos.
Que los lectores no visualicen datos en proceso de cambio.
Que los escritores tengan garantizado que los cambios en la base de datos se realizarn de forma
consistente.
Los cambios realizados por un escritor no entran en conflicto con los cambios realizados por
otro escritor.
El objetivo de la consistencia es garantizar que todos los usuarios vean los datos como existan en el
momento de la confirmacin, antes de iniciar una operacin DML.
Nota: el mismo usuario se puede conectar a diferentes sesiones. Cada sesin mantiene la consistencia
de lectura tal y como se describe anteriormente, incluso si son los mismos usuarios.

Oracle Database: Conceptos Fundamentales de SQL I 9-40

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Implementacin de Consistencia de Lectura

Usuario A
UPDATE employees
SET
salary = 7000
WHERE last_name = 'Grant';

Bloques
de Datos

Segmentos
de deshacer

a
s
a
SELECT *
)h
g
r
Imagen
FROM userA.employees;
o e
a
de lectura
s
id
de Antes
del
consistente
u
y
G
o
(datos
pr entcambio
@
antiguos)
Usuario B
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Implementacin de Consistencia
le de Lectura
N
b
a
O
runa implantacin automtica. Mantiene una copia parcial de la base de
La consistencia de
eesdeshacer.
CI lectura
f
s
A
datos en los
segmentos
de
La imagen de lectura consistente se crea a partir de los datos
n
D
a
r
N
t
confirmados
de-la tabla y de los datos antiguos que se van a cambiar y que an no se han confirmado
FU
del
segmento
nonde deshacer.
Datos
cambiados
y sin modificar

Al realizar una operacin de insercin, actualizacin o supresin en la base de datos, el servidor de


Oracle realiza una copia de los datos antes de cambiarlos y los escribe en un segmento de deshacer.
Todos los lectores, excepto el que haya emitido el cambio, seguirn viendo la base de datos como
exista antes de que comenzaran los cambios; vern una instantnea de los datos del segmento de
deshacer.
Antes de confirmar los cambios en la base de datos, slo el usuario que modifica los datos ve la base
de datos con modificaciones. Todos los dems vern la instantnea en el segmento de deshacer. Esto
garantiza que los lectores de los datos lean datos consistentes en los que no se est realizando
actualmente ningn cambio.
Al confirmar una sentencia DML, el cambio realizado en la base de datos se hace visible para todos
aqullos que emiten una sentencia SELECT despus de realizar la confirmacin. El espacio ocupado
por los datos antiguos en el archivo de segmentos de deshacer se libera para volver a utilizarlo.
Si se realiza un rollback de la transaccin, los cambios se deshacen:
La versin original anterior de los datos del segmento de deshacer se vuelve a escribir en la tabla.
Todos los usuarios ven la base de datos como exista antes de comenzar la transaccin.
Oracle Database: Conceptos Fundamentales de SQL I 9-41

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Adicin de nuevas filas a una tabla


Sentencia INSERT
Cambio de datos en la tabla
Sentencia UPDATE
Eliminacin de filas de una tabla:
Sentencia DELETE
Sentencia TRUNCATE

has
e
a
s
Consistencia de lectura
de Guid
y
o
r
t
Clusula FOR UPDATE en una sentencia p
SELECT
n
e
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Control de transacciones de la base de datos mediante


)
COMMIT, ROLLBACK y SAVEPOINT
org

Oracle Database: Conceptos Fundamentales de SQL I 9-42

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Clusula FOR UPDATE en una Sentencia SELECT

Bloquea las filas de la tabla EMPLOYEES en las que


job_id sea SA_REP.
SELECT employee_id, salary, commission_pct, job_id
FROM employees
WHERE job_id = 'SA_REP'
FOR UPDATE
ORDER BY employee_id;

s
El bloqueo slo se libera si emite ROLLBACK o COMMIT.
a
h
)
Si la sentencia SELECT intenta bloquear una fila org
sa a ique
e
bloqueada por otro usuario, la base de datos espera
e
d
d
roy ntlosGu
la fila est disponible y, a continuacin, devuelve
p
resultados de la sentencia SELECT.on@ tude

i
S
c
a
s
i
d
h
fun se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
Clusula FOR UPDATE P
enR
una lSentencia
SELECT
e
N
b
O sentencia
Cuando se emite Iuna
raSELECT en la base de datos para consultar algunos registros, no se
e
C
f
coloca ningn
nsen las filas seleccionadas. En general, se debe a que el nmero de registros
DA bloqueo
a
r
N
t
bloqueados
U oennun- momento determinado se mantiene (por defecto) en el mnimo absoluto: slo se
F
bloqueann
aquellos registros que se han cambiado, pero que an no se han confirmado. An as, otros
usuarios podrn leer dichos registros tal y como aparecan antes del cambio (la imagen anterior de
los datos). Hay ocasiones, sin embargo, en las que puede que desee bloquear un juego de registros
incluso antes de cambiarlos en el programa. Oracle ofrece la clusula FOR UPDATE de la sentencia
SELECT para realizar este bloqueo.
Cuando emite una sentencia SELECT...FOR UPDATE, el sistema de gestin de bases de datos
relacionales (RDBMS) obtiene automticamente los bloqueos a nivel de fila exclusivos de todas las
filas identificadas por la sentencia SELECT, reteniendo as los registros slo para sus cambios.
Nadie ms podr cambiar ninguno de estos registros hasta que realice una operacin ROLLBACK o
COMMIT.
Puede adjuntar la palabra clave opcional NOWAIT a la clusula FOR UPDATE para indicar al
servidor de Oracle que no espere si otro usuario ha bloqueado la tabla. En este caso, el control
volver inmediatamente al programa o al entorno de SQL Developer para que pueda realizar otro
trabajo o simplemente esperar un perodo de tiempo antes de volver a intentarlo. Sin la clusula
NOWAIT, el proceso se bloquear hasta que la tabla est disponible, cuando otro usuario libere los
bloqueos a travs de la emisin un comando COMMIT o ROLLBACK.
Oracle Database: Conceptos Fundamentales de SQL I 9-43

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Clusula FOR UPDATE: Ejemplos

Puede utilizar la clusula FOR UPDATE en una sentencia


SELECT en varias tablas.
SELECT e.employee_id, e.salary, e.commission_pct
FROM employees e JOIN departments d
USING (department_id)
WHERE job_id = 'ST_CLERK
AND location_id = 1500
FOR UPDATE
ORDER BY e.employee_id;

a
s
a
h
rg)
Las filas de las tablas EMPLOYEES y DEPARTMENTSo
estn
sa ide
bloqueadas.
e
d
u
G
roycualificar
t
Utilizar FOR UPDATE OF column_name para
la
p
n
e
@
d
n
columna que desea cambiar, de c
modo
tuslo se
io que
S
a
is
despecfica.
bloqueen las filas de esa tabla
h
n
t
u
f
(
se
u
A
Copyright 2010, Oracle
to Todos los derechos reservados.
ESy/o sussefiliales.
D
OY licen
R
Clusula FOR UPDATE:P
Ejemplos
le
N
b
a
O
En el ejemplo de Ila diapositiva,
r la sentencia bloquea las filas de la tabla EMPLOYEES con JOB_ID
C nsyfeLOCATION_ID
A
definido en
ST_CLERK
definido en 1500 y bloquea las filas de la tabla
D tra
N
DEPARTMENTS
FU non- con los departamentos de LOCATION_ID definidos en 1500.
Puede utilizar FOR UPDATE OF column_name para cualificar la columna que desea cambiar. La lista
OF de la clusula FOR UPDATE no limita el cambio slo a aquellas columnas de las filas
seleccionadas. An se mantienen los bloqueos en todas las filas; si simplemente declara FOR
UPDATE en la consulta y no incluye una o ms columnas despus de la palabra clave OF, la base de
datos bloquear todas las filas identificadas en todas las tablas incluidas en la clusula FROM.
La siguiente sentencia slo bloquea las filas de la tabla EMPLOYEES con ST_CLERK ubicado en
LOCATION_ID 1500. No se bloquea ninguna fila en la tabla DEPARTMENTS:
SELECT e.employee_id, e.salary, e.commission_pct
FROM employees e JOIN departments d
USING (department_id)
WHERE job_id = 'ST_CLERK' AND location_id = 1500
FOR UPDATE OF e.salary
ORDER BY e.employee_id;

Oracle Database: Conceptos Fundamentales de SQL I 9-44

Fundacin Proydesa
Clusula FOR UPDATE: Ejemplos (continuacin)

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

En el siguiente ejemplo, se indica a la base de datos que espere cinco segundos hasta que la fila est
disponible y, a continuacin, se devuelve el control al usuario.
SELECT employee_id, salary, commission_pct, job_id
FROM employees
WHERE job_id = 'SA_REP'
FOR UPDATE WAIT 5
ORDER BY employee_id;

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 9-45

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Prueba
Las siguientes sentencias producen los mismos resultados:
DELETE FROM copy_emp;
TRUNCATE TABLE copy_emp;

1. Verdadero
2. Falso

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Respuesta: 2
le
N
b
a
O
CI nsfer
A
ND n-tra
U
F no

Oracle Database: Conceptos Fundamentales de SQL I 9-46

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Resumen
En esta leccin debe haber aprendido a utilizar las siguientes
sentencias:
Funcin

Descripcin

INSERT

Agrega una nueva fila a la tabla.

UPDATE

Modifica filas existentes en la tabla.

DELETE

Elimina filas existentes de la tabla.

TRUNCATE

Elimina todas las filas de una tabla.

a
s
a
)h
SAVEPOINT
g
r
o e
a
s
de Guid
ROLLBACK
y
Descarta todos los cambios de datos pendientes.
o
t
pr eSELECT.
n
@
Bloquea las filas identificadas n
por
la consulta
Clusula FOR
o
tud
i
S
UPDATE en SELECT
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Resumen
le
N
b
a
O
r
I haber
En esta leccin,
debe
a manipular datos en Oracle Database mediante las sentencias
eaprendido
f
s
AC aDELETE
INSERT,D
UPDATE,
y
TRUNCATE,
as como a controlar los cambios de datos mediante las
n
r
N
t
- SAVEPOINT y ROLLBACK. Tambin ha aprendido a utilizar la clusula FOR
sentencias
U COMMIT,
n
F
o
n
UPDATE de la sentencia SELECT para bloquear filas slo para sus cambios.
COMMIT

Convierte todos los cambios pendientes en


permanentes.
Se utiliza para realizar un rollback en el marcador de
punto de grabacin.

Recuerde que el servidor de Oracle garantiza una vista consistente de los datos en todo momento.

Oracle Database: Conceptos Fundamentales de SQL I 9-47

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Prctica 9: Visin General


En esta prctica se abordan los siguientes temas:
Insercin de filas en tablas
Actualizacin y supresin de filas de la tabla
Control de transacciones

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Prctica 9: Visin General
le
N
b
a
O
En esta prctica, Iagregar e
r a la tabla MY_EMPLOYEE, actualizar y suprimir datos de la tabla y
C nsf filas
Atransacciones.
controlarDlas
Ejecute un script para crear la tabla MY_EMPLOYEE.
a
r
N
t
FU non-

Oracle Database: Conceptos Fundamentales de SQL I 9-48

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa

Uso de Sentencias DDL


para Crear y Gestionar Tablas

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Objetivos
Al finalizar esta leccin, debera estar capacitado para lo
siguiente:
Clasificar los principales objetos de base de datos
Revisar la estructura de la tabla
Mostrar los tipos de dato disponibles para columnas
Crear una tabla simple
Explicar cmo crear restricciones en el momento de la
creacin de la tabla
)
Describir el funcionamiento de los objetos de esquema
org

a
s
a
h
e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Objetivos
le
N
b
a
O
I ofrecefuna
En esta leccin,
se
er introduccin a las sentencias de lenguaje de definicin de datos (DDL).
C
s
A
Aprender
crear tablas simples, modificarlas y eliminarlas. Se muestran los
Dlos fundamentos
an en para
r
Ndato
t
tipos
de
disponibles
DDL
y se ofrece una introduccin sobre los conceptos de esquema. Las
U
n
F
o
n
restricciones se tratarn en esta leccin. Se muestran y explican los mensajes de excepcin generados
por las restricciones de violacin durante las operaciones DML.

Oracle Database: Conceptos Fundamentales de SQL I 10-2

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Objetos de base de datos

Reglas de nomenclatura
Sentencia CREATE TABLE:
Acceso a otras tablas de usuario
Opcin DEFAULT

Tipos de dato
Visin general de restricciones: Restricciones NOT NULL,
UNIQUE, PRIMARY KEY, FOREIGN KEY, CHECK

s
a
h
Creacin de una tabla mediante una subconsulta
rg)
o

ALTER TABLE
sa ide
e
d
Tablas de slo lectura
roy nt Gu
p
n@ tude
Sentencia DROP TABLE
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 10-3

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Objetos de Base de Datos

Objeto

Descripcin

Tabla

Unidad bsica de almacenamiento; compuesta por filas.

Vista

Representa de forma lgica subjuegos de datos de una


o ms tablas.

Secuencia

Genera valores numricos.

ndice

Mejora el rendimiento de algunas consultas.

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Objetos de Base de Datos
le
N
b
a
O
Ipuede contener
Oracle Database
er varias estructuras de datos. Cada estructura se debe describir en el
C
f
s
A
diseo deD
la base deadatos
n para que se pueda crear durante la fase de creacin del desarrollo de la
r
Ndatos.
t
base
de
U
n
F Tabla:
noalmacena
datos.
Sinnimo

Ofrece nombres alternativos para un objeto

Vista: subjuego de datos de una o ms tablas.


Secuencia: genera valores numricos.
ndice: mejora el rendimiento de algunas consultas.
Sinnimo: ofrece nombres alternativos para un objeto.
Estructuras de Tabla de Oracle
Las tablas se pueden crear en cualquier momento, incluso mientras los usuarios utilizan la base
de datos.
No necesita especificar el tamao de la tabla. El tamao se define en ltima instancia segn la
cantidad de espacio asignado a la base de datos completa. No obstante, es importante calcular la
cantidad de espacio que utilizar una tabla a lo largo del tiempo.
La estructura de la tabla se puede modificar en lnea.
Nota: hay ms objetos de base de datos disponibles, pero no se tratan en este curso.

Oracle Database: Conceptos Fundamentales de SQL I 10-4

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Reglas de Nomenclatura
Los nombres de tabla y de columna deben:
Empezar por una letra
Tener entre 1 y 30 caracteres
Contener slo AZ, az, 09, _, $ y #
No deben ser un duplicado de otro nombre de objeto
propiedad del mismo usuario
No debe ser una palabra reservada del servidor de Oracle

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Reglas de Nomenclatura
le
N
b
a
O
r de datos se deben nombrar segn las reglas estndar de
I deflaebase
Las tablas y columnas
C
s
A
nomenclatura
de objetos
Database:
antabladeyOracle
r
ND
t

Los
nombres
de
de
columna
deben comenzar por una letra y tener entre 1 y 30 caracteres.
U
F Los nombres
non slo deben contener los caracteres AZ, az, 09, _ (subrayado), $ y # (caracteres
vlidos, pero cuyo uso no es aconsejable).
Los nombres no deben ser un duplicado de otro nombre de objeto propiedad del mismo usuario
del servidor de Oracle.
Los nombres no deben ser una palabra reservada del servidor de Oracle.
- Puede utilizar identificadores entre comillas para representar el nombre de un objeto. Un
identificador entre comillas empieza y finaliza con comillas dobles (""). Si asigna un
nombre a un objeto de esquema mediante un identificador entre comillas, debe utilizar las
comillas dobles cuando haga referencia a dicho objeto. Los identificadores entre comillas
pueden ser palabras reservadas, aunque no se recomienda.

Oracle Database: Conceptos Fundamentales de SQL I 10-5

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa
Reglas de Nomenclatura (continuacin)
Directrices de Nomenclatura
Utilice nombres descriptivos para las tablas y otros objetos de la base de datos.
Nota: los nombres no son sensibles a maysculas/minsculas. Por ejemplo, EMPLOYEES se
considera el mismo nombre que eMPloyees o eMpLOYEES. Sin embargo, los identificadores entre
comillas son sensibles a maysculas/minsculas.
Para obtener ms informacin, consulte la seccin sobre nombres de objeto de esquema y
cualificadores en Oracle Database SQL Language Reference (Referencia sobre Lenguaje SQL de
Oracle Database) para la base de datos 10g u 11g.

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 10-6

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Objetos de base de datos

Reglas de nomenclatura
Sentencia CREATE TABLE:
Acceso a otras tablas de usuario
Opcin DEFAULT

Tipos de dato
Visin general de restricciones: Restricciones NOT NULL,
UNIQUE, PRIMARY KEY, FOREIGN KEY, CHECK

s
a
h
Creacin de una tabla mediante una subconsulta
rg)
o

ALTER TABLE
sa ide
e
d
Tablas de slo lectura
roy nt Gu
p
n@ tude
Sentencia DROP TABLE
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 10-7

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Sentencia CREATE TABLE

Debe tener:
El privilegio CREATE TABLE
Un rea de almacenamiento
CREATE TABLE [schema.]table
(column datatype [DEFAULT expr][, ...]);

Debe especificar:
El nombre de tabla
El nombre de columna, tipo de dato de columna y tamao de s
columna
) ha

rg
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
Sentencia CREATE TABLE
P
N rabl datos ejecutando la sentencia SQL CREATE TABLE. Esta
O
Puede crear tablas
para almacenar
I
C nssentencias
fe DDL, que son un subjuego de sentencias SQL que se utilizan para
sentenciaD
esA
una dealas
N n-otreliminar estructuras de Oracle Database. Estas sentencias tienen un efecto
crear,
Umodificar
F
o la base de datos y registran informacin en el diccionario de datos.
inmediatonen
Para crear una tabla, un usuario debe tener el privilegio CREATE TABLE y un rea de
almacenamiento en la que crear los objetos. El administrador de la base de datos (DBA) utiliza
sentencias de lenguaje de control de datos (DCL) para otorgar privilegios a los usuarios.
En la sintaxis:
schema
es el mismo nombre que el del propietario
table
es el nombre de la tabla
DEFAULT expr
especifica un valor por defecto si se omite un valor en la sentencia
INSERT
column
es el nombre de la columna
datatype
es el tipo de dato y la longitud de la columna

Oracle Database: Conceptos Fundamentales de SQL I 10-8

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Referencia a Tablas de Otro Usuario

Las tablas que pertenecen a otros usuarios no se incluyen


en el esquema del usuario.
Debe utilizar el nombre del propietario como prefijo de
dichas tablas.

a
s
a
)h
g
r
o e
USERA
USERB
a
s
de Guid
y
SELECT *
SELECT *
o
pr ent
FROM userB.employees;
FROM userA.employees;
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Referencia a Tablas de Otro Usuario
le
N
b
a
O
I recopilacin
Un esquema esCuna
er de estructuras lgicas de datos u objetos de esquema. Un esquema
f
s
A
es propiedad
un a
usuario
n de base de datos y tiene el mismo nombre que el usuario. Cada usuario es
r
NDdede
t
propietario
un
nico
esquema.
U
F non
Los objetos de esquema se pueden crear y manipular con SQL e incluyen tablas, vistas, sinnimos,
secuencias, procedimientos almacenados, ndices, clusters y enlaces de base de datos.
Si una tabla no pertenece al usuario, el nombre del propietario se debe anteponer a la tabla. Por
ejemplo, dados los esquemas USERA y USERB y ambos contienen la tabla EMPLOYEES, si USERA
desea acceder a la tabla EMPLOYEES que pertenece a USERB, USERA debe anteponer el nombre del
esquema al nombre de la tabla:
SELECT *
FROM
userb.employees;

Si USERB desea acceder a la tabla EMPLOYEES propiedad de USERA, USERB debe anteponer el
nombre del esquema al nombre de la tabla:
SELECT *
FROM
usera.employees;

Oracle Database: Conceptos Fundamentales de SQL I 10-9

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Opcin DEFAULT

Especificar un valor por defecto para una columna durante


una insercin.
... hire_date DATE DEFAULT SYSDATE, ...

Los valores literales, expresiones o funciones SQL son


valores vlidos.
El nombre de otra columna o una pseudocolumna son
valores no vlidos.
El tipo de dato por defecto debe coincidir con el tipo de
dato de la columna.

a
s
a
)h
g
r
o e
a
s
CREATE TABLE hire_dates
de Guid
y
o
(id
NUMBER(8),
pr ent
@
hire_date DATE DEFAULT SYSDATE);
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
Opcin DEFAULT
P
N especificar
bl que se proporcione un valor por defecto a una columna
a
r
IOpuede
Al definir una C
tabla,
fe Esta opcin evita que se introduzcan valores nulos en las columnas si
s
medianteD
la A
opcin DEFAULT.
n
a un valor para la columna. El valor por defecto puede ser un literal, una
trsin
seFinserta
fila
UN una
n
expresinnoouna funcin SQL (como SYSDATE o USER), pero el valor no puede ser el nombre de
otra columna o una pseudocolumna (como NEXTVAL o CURRVAL). La expresin por defecto debe
coincidir con el tipo de dato de la columna.
Considere los siguientes ejemplos:
INSERT INTO hire_dates values(45, NULL);
La sentencia anterior insertar el valor nulo en lugar del valor por defecto.
INSERT INTO hire_dates(id) values(35);
La sentencia anterior insertar SYSDATE para la columna HIRE_DATE.
Nota:en SQL Developer, haga clic en el icono Run Script o pulse [F5] para ejecutar las sentencias
DDL. Los comentarios se mostrarn en la pgina con separadores Script Output.

Oracle Database: Conceptos Fundamentales de SQL I 10-10

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Creacin de Tablas

Crear una tabla:


CREATE TABLE dept
(deptno
dname
loc
create_date

NUMBER(2),
VARCHAR2(14),
VARCHAR2(13),
DATE DEFAULT SYSDATE);

Confirmar la creacin de la tabla:

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Creacin de Tablas
le
N
b
a
O
El ejemplo de la Idiapositiva
la tabla DEPT, con cuatro columnas: DEPTNO, DNAME, LOC y
C La n
fercrea
s
A
CREATE_DATE.
columna
CREATE_DATE
tiene un valor por defecto. Si no se proporciona
D tra
N
ningn
para
n- una sentencia INSERT, se inserta automticamente la fecha del sistema.
FU valor
o
n
Para confirmar que se ha creado la tabla, ejecute el comando DESCRIBE.
DESCRIBE dept

Puesto que la creacin de una tabla constituye una sentencia DDL, se realiza una confirmacin
automtica al ejecutar esta sentencia.
Nota: puede ver la lista de las tablas que posee consultando el diccionario de datos. Por ejemplo:
select table_name from user_tables

Mediante las vista de diccionario de datos, puede obtener informacin sobre otros objetos de base de
datos como vistas, ndices, etc. Los diccionarios de datos se explican en detalle en el curso Oracle
Database: Conceptos Fundamentales de SQL II.

Oracle Database: Conceptos Fundamentales de SQL I 10-11

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Objetos de base de datos

Reglas de nomenclatura
Sentencia CREATE TABLE:
Acceso a otras tablas de usuario
Opcin DEFAULT

Tipos de dato
Visin general de restricciones: Restricciones NOT NULL,
UNIQUE, PRIMARY KEY, FOREIGN KEY, CHECK

s
a
h
Creacin de una tabla mediante una subconsulta
rg)
o

ALTER TABLE
sa ide
e
d
Tablas de slo lectura
roy nt Gu
p
n@ tude
Sentencia DROP TABLE
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 10-12

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Tipos de Dato
Tipo de Dato

Descripcin

VARCHAR2(size) Datos de caracteres de longitud variable


CHAR(size)

Datos de caracteres de longitud fija

NUMBER(p,s)

Datos numricos de longitud variable

DATE

Valores de fecha y hora

LONG

Datos de caracteres de longitud variable (hasta 2 GB).

CLOB

Datos binarios (hasta 4 GB).

s
a
h
g)
r
o

BLOB
Datos binarios (hasta 4 GB)
sa ide
e
d
BFILE
Datos binarios almacenados en un archivo externo
Gu4 GB)
roy nt(hasta
p
ROWID
Sistema numrico de base -64 que @
dlae direccin nica
n representa
u
o
t
i
de una fila en su tabla correspondiente.
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Tipos de Dato
le
N
b
a
O
r una tabla, debe proporcionar un tipo de dato para la columna. Hay
I columnafepara
Al identificar una
C
s
A
varios tipos
n
radisponibles:
ND dendato
t
U
FTipo denDato
Descripcin
o
RAW and LONG
RAW

VARCHAR2(size)
CHAR [(size)]

Datos binarios raw

Datos de caracteres de longitud variable (Se debe especificar un


tamao mximo: el tamao mnimo es 1 y el mximo es 4.000).
Datos de caracteres de longitud fija de tamao de bytes (El
tamao por defecto y mnimo es 1; el tamao mximo es 2.000).

NUMBER [(p,s)]

Nmero con la precisin p y la escala s (La precisin es el nmero


total de cifras decimales y la escala el nmero de dgitos a la
derecha del punto decimal; la precisin puede oscilar entre 1 y 38
y la escala entre 84 y 127).

DATE

Valores de fecha y hora hasta el segundo ms cercano entre el 1


de enero, 4712 a. C., y el 31 de diciembre, 9999 d. C.

LONG

Datos de caracteres de longitud variable (hasta 2 GB).

CLOB

Datos de caracteres (hasta 4 GB).

Oracle Database: Conceptos Fundamentales de SQL I 10-13

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Tipos de Dato (continuacin)


Tipo de Dato

Descripcin

RAW(size)

Datos binarios raw de tamao de longitud (Se debe especificar un tamao


mximo: El tamao mximo es 2.000.)

LONG RAW

Datos binarios raw de longitud variable (hasta 2 GB).

BLOB

Datos binarios (hasta 4 GB)

BFILE

Datos binarios almacenados en un archivo externo (hasta 4 GB).

ROWID

Sistema numrico de base 64 que representa la direccin nica de una fila en


su tabla correspondiente.

Instrucciones
Las columnas LONG no se copian al crear una tabla mediante una subconsulta.
Las columnas LONG no se pueden incluir en una clusula GROUP BYu ORDER BY.
Slo se puede utilizar una columna LONG por tabla.
No se pueden definir restricciones en las columnas LONG.
Puede que desee utilizar una columna CLOB en lugar de una columna LONG.

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 10-14

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Tipos de Dato de Fecha y Hora


Puede utilizar varios tipos de dato de fecha y hora:
Tipo de Dato

Descripcin

TIMESTAMP

Fecha con segundos fraccionarios

INTERVAL YEAR TO
MONTH

Almacenados como un intervalo de aos


y meses

INTERVAL DAY TO
SECOND

Almacenado como un intervalo de das,


horas, minutos y segundos

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Tipos de Dato de Fecha y Horale
N rDescripcin
b
a
Tipo de Dato IO
e
C
A ansf Permite almacenar los datos de tiempo como fecha con segundos
TIMESTAMP
D
r
N
fraccionarios. Almacena los valores de ao, mes, da, hora, y segundos
FU non-t
del tipo de dato DATE, as como el valor para segundos fraccionarios.
INTERVAL YEAR TO
MONTH
INTERVAL DAY TO
SECOND

Hay distintas variantes de este tipo de dato, entre otras, WITH


TIMEZONE, WITH LOCALTIMEZONE.
Permite almacenar el tiempo como un intervalo de aos y meses.
Utilizado para representar la diferencia entre dos valores de fecha y hora
en los que las nicas partes significativas son el ao y el mes.
Permite almacenar el tiempo como un intervalo de das, horas, minutos y
segundos. Utilizado para representar la diferencia exacta entre dos
valores de fecha y hora.

Nota: estos tipos de dato de fecha y hora estn disponibles con las versiones Oracle9i y posteriores.
Los tipos de dato de fecha y hora se tratan ms detalladamente en la leccin sobre gestin de datos
situados en distintas zonas horarias del curso Oracle Database: Conceptos Fundamentales de
SQL II.
Adems, para obtener ms informacin sobre los tipos de dato de fecha y hora, consulte las secciones
sobre tipo de de dato TIMESTAMP, tipo de dato INTERVAL YEAR TO MONTH y tipo de dato
INTERVAL DAY TO SECOND en Oracle Database SQL Language Reference (Referencia sobre
Lenguaje SQL de Oracle Database) para la base de datos 10g u 11g.
Oracle Database: Conceptos Fundamentales de SQL I 10-15

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Objetos de base de datos

Reglas de nomenclatura
Sentencia CREATE TABLE:
Acceso a otras tablas de usuario
Opcin DEFAULT

Tipos de dato
Visin general de restricciones: Restricciones NOT NULL,
UNIQUE, PRIMARY KEY, FOREIGN KEY, CHECK

s
a
h
Creacin de una Tabla mediante una Subconsulta
rg)
o

ALTER TABLE
sa ide
e
d
Tablas de slo lectura
roy nt Gu
p
n@ tude
Sentencia DROP TABLE
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 10-16

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Inclusin de Restricciones

Las restricciones aplican reglas a nivel de tabla.


Las restricciones impiden la supresin de una tabla si hay
dependencias.
Los siguientes tipos de restricciones son vlidos:

NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Restricciones
le
N
b
a
O
I utiliza
El servidor de C
Oracle
errestricciones para evitar la introduccin de datos no vlidos en las tablas.
f
s
A
Puede utilizar
D restricciones
an para realizar lo siguiente:
r
N
t
U
reglas a los datos de la tabla cuando se inserta, actualiza o suprime una fila de la misma.
F Aplicar
non se debe cumplir para que la operacin sea correcta.
La restriccin
Evitar la supresin de una tabla si hay dependencias de otras tablas.
Proporcionar reglas para las herramientas de Oracle, como Oracle Developer.
Restricciones de Integridad de Datos
Restriccin
Descripcin
Especifica que la columna no puede contener un valor nulo.
NOT NULL

UNIQUE

Especifica una columna o combinacin de columnas cuyos valores


deben ser nicos para todas las filas de la tabla.

PRIMARY KEY

Identifica de forma nica cada fila de la tabla.

FOREIGN KEY

Establece y aplica la integridad referencial entre la columna y la


columna de la tabla a la que se hace referencia; por ejemplo, busca
los valores de una tabla que coinciden con los valores de la otra tabla.
Especifica una condicin que debe ser verdadera.

CHECK

Oracle Database: Conceptos Fundamentales de SQL I 10-17

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Instrucciones de Restriccin

Puede asignar un nombre a una restriccin o el servidor


de Oracle genera un nombre con el formato SYS_Cn.

Crear una restriccin en uno de los siguientes momentos:


En el momento de la creacin de la tabla
Despus de la creacin de la tabla

Definir una restriccin a nivel de columna o de tabla.


Ver una restriccin en el diccionario de datos.

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Instrucciones de Restriccin le
rab en el diccionario de datos. Es fcil hacer referencia a las
IONsefe
Todas las restricciones
almacenan
C
restricciones
ns un nombre significativo. Los nombres de las restricciones deben seguir las
DAsi lestrasigna
a
N
reglas
de objetos estndar, excepto que el nombre no puede ser el mismo que el de
U de nomenclatura
nF
o
n
otro objeto propiedad del mismo usuario. Si no asigna ningn nombre a la restriccin, el servidor de
Oracle genera un nombre con el formato SYS_Cn, donde n es un entero para que el nombre de la
restriccin sea nico.
Las restricciones se pueden definir en el momento de la creacin de la tabla o despus de haberla
creado. Puede definir una restriccin a nivel de columna o de tabla. Funcionalmente, una restriccin
a nivel de tabla es la mismo que una restriccin a nivel de columna.
Para obtener ms informacin, consulte la seccin sobre funciones de restricciones en Oracle
Database SQL Language Reference (Referencia sobre Lenguaje SQL de Oracle Database) para la
base de datos 10g u 11g.

Oracle Database: Conceptos Fundamentales de SQL I 10-18

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Definicin de Restricciones

Sintaxis:
CREATE TABLE [schema.]table
(column datatype [DEFAULT expr]
[column_constraint],
...
[table_constraint][,...]);

Sintaxis de restriccin a nivel de columna:


column [CONSTRAINT constraint_name] constraint_type,

a
s
a
Sintaxis de restriccin a nivel de tabla:
)h
g
r
o e
a
columna,...
s
de Guid
[CONSTRAINT constraint_name] constraint_type
y
o
pr ent
(column, ...),
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Definicin de Restricciones le
N rabla sintaxis para la definicin de restricciones al crear una tabla.
Oproporciona
En la diapositiva Ise
C
fe a nivel de columna o de tabla. Las restricciones definidas a nivel de
s
Alas restricciones
Puede crear
n
D
ra al definir la columna. Las restricciones a nivel de tabla se definen al final de la
N se incluyen
t
columna
U
n
F ndeo tabla y debe hacer referencia a la columna o las columnas a las que pertenece la
definicin
restriccin en un juego de parntesis. Se trata principalmente de la sintaxis que diferencia a las dos;
de lo contrario, funcionalmente, una restriccin a nivel de columna es lo mismo que una restriccin a
nivel de tabla.
Las restricciones NOT NULL se deben definir a nivel de columna.
Las restricciones que se aplican a ms de una columna se deben definir a nivel de tabla.
En la sintaxis:
schema
es el mismo nombre que el del propietario
table
es el nombre de la tabla
DEFAULT expr
especifica un valor por defecto para utilizarlo si se omite un valor en
la sentencia INSERT
column
es el nombre de la columna
datatype
es el tipo de dato y la longitud de la columna
column_constraint es una restriccin de integridad como parte de la definicin de
columna
table_constraint es una restriccin de integridad como parte de la definicin de tabla
Oracle Database: Conceptos Fundamentales de SQL I 10-19

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Definicin de Restricciones

Ejemplo de una restriccin a nivel de columna:


CREATE TABLE employees(
employee_id NUMBER(6)
CONSTRAINT emp_emp_id_pk PRIMARY KEY,
first_name
VARCHAR2(20),
...);

Ejemplo de una restriccin a nivel de tabla:


CREATE TABLE employees(
employee_id NUMBER(6),
first_name
VARCHAR2(20),
...
job_id
VARCHAR2(10) NOT NULL,
CONSTRAINT emp_emp_id_pk
PRIMARY KEY (EMPLOYEE_ID));

s
a
h
rg)
o

sa 2 ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Definicin de Restricciones (continuacin)
le
N
b
a
O
r
Ise creanfenormalmente
Las restricciones
al mismo tiempo que la tabla. Las restricciones se pueden
C
s
A
agregar aD
una tablaa
despus
n de su creacin y se pueden desactivar temporalmente.
r
N
t
U
Ambos
diapositiva crean una restriccin de clave primaria en la columna
F ejemplos
non dede lala tabla
EMPLOYEE_ID
EMPLOYEES.
1. En el primer ejemplo se utiliza la sintaxis de nivel de columna para definir la restriccin.
2. En el segundo ejemplo se utiliza la sintaxis de nivel de tabla para definir la restriccin.
Encontrar ms informacin sobre la restriccin de clave primaria ms adelante en esta leccin.

Oracle Database: Conceptos Fundamentales de SQL I 10-20

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Restriccin NOT NULL


Garantiza que no se permiten los valores nulos para la columna:

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
t
prNOT NULL
n
Ausencia de la restriccin
e
@
dun valor
Restriccin NOT NULL
n contener
u
(Cualquier fila ipuede
o
t
S
(La clave primaria aplica
c
NOT NULL nulo para esta
a columna.)
is
d
la restriccin NOT NULL.)
restriccin
h
n
t
u
f
(
se
u
A
Copyright 2010, Oracle
to Todos los derechos reservados.
ESy/o sussefiliales.
D
OY licen
R
Restriccin NOT NULL P
le
N
b
a
O
La restriccin NOT
NULL e
garantiza
que la columna no contiene ningn valor nulo. Las columnas sin
r
CI NULL
f
s
A
la restriccin
NOT
pueden
contener
valores nulos por defecto. Las restricciones NOT NULL se
D tran
N
deben
U definirona -nivel de columna. En la tabla EMPLOYEES, la columna EMPLOYEE_ID hereda una
F
nNOT NULL como se define en la clave primaria. De lo contrario, las columnas
restriccin
LAST_NAME, EMAIL, HIRE_DATE y JOB_ID tienen la restriccin NOT NULL aplicada.

Nota: la restriccin de clave primaria se trata con detalle ms adelante en esta misma leccin.

Oracle Database: Conceptos Fundamentales de SQL I 10-21

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Restriccin UNIQUE

EMPLOYEES

Restriccin UNIQUE

a
s
a
)h
Permitido
g
r
o
No permitido: ya existesa
e uide
d
y
ro nt G
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O
ce
Restriccin UNIQUE PR le li
N radebclave UNIQUE necesita que todos los valores de una columna o
Una restriccin de
IOintegridad
C
sfesean nicos; es decir, que dos filas de una tabla no pueden tener valores
A a(clave)
juego de D
columnas
n
-trcolumna o juego de columnas concreto. La columna (o juego de columnas)
duplicados
UN oennuna
F
n la definicin de la restriccin de clave UNIQUE se denomina clave nica. Si la restriccin
incluida en
INSERT INTO

UNIQUE comprende ms de una columna, el grupo de columnas se denomina clave nica


compuesta.
Las restricciones UNIQUE permiten la entrada de valores nulos a menos que defina tambin las
restricciones NOT NULL para las mismas columnas. De hecho, se puede incluir cualquier nmero de
valores nulos para las columnas sin restricciones NOT NULL porque los valores nulos no se
consideran iguales a ningn otro elemento. Un valor nulo en una columna (o en todas las columnas
de una clave UNIQUE compuesta) cumple siempre una restriccin UNIQUE.
Nota: debido al mecanismo de bsqueda de restricciones UNIQUE en una o ms columnas, no puede
tener valores idnticos en las columnas no nulas de una restriccin de clave UNIQUE compuesta
parcialmente nula.

Oracle Database: Conceptos Fundamentales de SQL I 10-22

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Restriccin UNIQUE
Definida a nivel de tabla o de columna:
CREATE TABLE employees(
employee_id NUMBER(6),
last_name
VARCHAR2(25) NOT NULL,
email
VARCHAR2(25),
salary
NUMBER(8,2),
commission_pct
NUMBER(2,2),
hire_date
DATE NOT NULL,
...
CONSTRAINT emp_email_uk UNIQUE(email));

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
Restriccin UNIQUE (continuacin)
P
l
N
bpueden
a
O
Las restricciones
UNIQUE
se
definir a nivel de tabla o de columna. Defina la restriccin a
r
I
e
C
f
s
A
nivel de tabla
desea
una clave nica compuesta. Una clave compuesta se define si no hay un
ancrear
rpueda
ND nsique
t
nico
atributo
identificar
de forma nica una fila. En ese caso, puede tener una clave nica
U
F
o
n
compuesta de dos o ms columnas, el valor combinado de ambas es siempre nico y puede
identificar filas.
En el ejemplo de la diapositiva se aplica la restriccin UNIQUE a la columna EMAIL de la tabla
EMPLOYEES. El nombre de la restriccin es EMP_EMAIL_UK.
Nota: el servidor de Oracle aplica la restriccin UNIQUE mediante la creacin implcita de un ndice
nico en la columna o columnas nicas.

Oracle Database: Conceptos Fundamentales de SQL I 10-23

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Restriccin PRIMARY KEY

DEPARTMENTS

PRIMARY KEY

a
s
a
INSERT INTO
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
No permitido
i
c
a his
(ya existen 50)
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
Restriccin PRIMARY KEY
P
N KEYracrea
bl una clave primaria para la tabla. Slo se puede crear una clave
O
La restriccin PRIMARY
I
C tabla.
fLae restriccin PRIMARY KEY es una columna o juego de columnas que
s
Acada
primaria D
para
n
ranica cada fila de tabla. Esta restriccin aplica la unicidad de la columna o
N de forma
t
identifica
U
n
F no de columnas y garantiza que ninguna columna que forme parte de la clave contenga un
combinacin
No permitido
(valor nulo)

valor nulo.
Nota: puesto que la unicidad forma parte de la definicin de restriccin de clave primaria, el servidor
de Oracle aplica la unicidad mediante la creacin implcita de un ndice nico en la columna o
columnas de clave primaria.

Oracle Database: Conceptos Fundamentales de SQL I 10-24

Fundacin Proydesa

Restriccin PRIMARY KEY


Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

DEPARTMENTS
PRIMARY
KEY

EMPLOYEES
FOREIGN
KEY

s
a
h
rg)
o

sa ide
e
d
INSERT INTO
No
permitido
Gu
ro(9y nonexisten)
t
p
de
n@ tuPermitido
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
Restriccin FOREIGN KEY
P
l
N KEYra(obintegridad
O
La restriccin FOREIGN
referencial) designa una columna o combinacin de
I
e
C
f
s
A
columnasD
clave
anajena y establece una relacin entre una clave primaria o nica en la misma
r
Nen como
t
tabla
o
otra
diferente.
U
F non
En el ejemplo
de la diapositiva, DEPARTMENT_ID se ha definido como clave ajena en la tabla

EMPLOYEES (tabla dependiente o secundaria); hace referencia a la columna DEPARTMENT_ID de


la tabla DEPARTMENTS (tabla a la que se hace referencia o principal).
Instrucciones
El valor de clave ajena debe coincidir con un valor existente de la tabla principal o ser un valor
NULL.
Las claves ajenas se basan en los valores de datos y son punteros puramente lgicos, en lugar de
fsicos.

Oracle Database: Conceptos Fundamentales de SQL I 10-25

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Restriccin PRIMARY KEY


Definida a nivel de tabla o de columna:
CREATE TABLE employees(
employee_id NUMBER(6),
last_name
VARCHAR2(25) NOT NULL,
email
VARCHAR2(25),
salary
NUMBER(8,2),
commission_pct
NUMBER(2,2),
hire_date
DATE NOT NULL,
...
department_id
NUMBER(4),
CONSTRAINT emp_dept_fk FOREIGN KEY (department_id)
REFERENCES departments(department_id),
CONSTRAINT emp_email_uk UNIQUE(email));

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R(continuacin)
Restriccin FOREIGN KEY
P
le
N
b
a
O
Las restricciones
I FOREIGN
er KEY se pueden definir a nivel de restriccin de columna o de tabla.
C
f
s
A
Las claves
se deben crear mediante la definicin a nivel de tabla.
Dajenastrcompuestas
an
N
U
En
de la diapositiva se define una restriccin FOREIGN KEY en la columna
Fel ejemplo
non de la tabla EMPLOYEES, mediante la sintaxis a nivel de tabla. El nombre de la
DEPARTMENT_ID
restriccin es EMP_DEPT_FK.
La clave ajena se puede definir tambin a nivel de columna, siempre que la restriccin est basada en
una sola columna. La sintaxis difiere en que las palabras clave FOREIGN KEY no aparecen. Por
ejemplo:
CREATE TABLE employees
(...
department_id NUMBER(4) CONSTRAINT emp_deptid_fk
REFERENCES departments(department_id),
...
)

Oracle Database: Conceptos Fundamentales de SQL I 10-26

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Restriccin FOREIGN KEY: Palabras Clave

FOREIGN KEY: define la columna en la tabla secundaria a


nivel de restriccin de tabla
REFERENCES: identifica la tabla y la columna en la tabla
principal
ON DELETE CASCADE: suprime las filas dependientes de la
tabla secundaria cuando se suprime una fila de la tabla
principal
ON DELETE SET NULL: convierte los valores de clave
s
a
ajena dependiente en nulos.
h
)

rg
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
RPalabras
Restriccin FOREIGN KEY:
P
e Clave
l
N
b
O enfelaratabla secundaria y la tabla que contiene la columna a la que se hace
La clave ajenaC
seIdefine
s
referenciaDesAla tabla
La clave ajena se define mediante una combinacin de las siguientes
nprincipal.
a
r
N
t
palabras
clave:
U
F FOREIGN
non KEY se utiliza para definir la columna en la tabla secundaria a nivel de restriccin de
tabla.
REFERENCES identifica la tabla y la columna en la tabla principal.
ON DELETE CASCADE indica que al suprimir una fila de la tabla principal, tambin se suprimen
las filas dependientes de la tabla secundaria.
ON DELETE SET NULL indica que al suprimir una fila de la tabla principal, los valores de clave
ajena se definen como nulos.
El comportamiento por defecto se denomina regla estricta, que no permite la actualizacin o
supresin de los datos a los que se hace referencia.
Sin las opciones ON DELETE CASCADE u ON DELETE SET NULL, la fila de la tabla principal no se
puede suprimir si hace referencia a la misma en la tabla secundaria.

Oracle Database: Conceptos Fundamentales de SQL I 10-27

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Restriccin CHECK

Define una condicin que debe cumplir cada fila.


Las siguientes expresiones no estn permitidas:
Referencias a las pseudocolumnas CURRVAL, NEXTVAL,
LEVEL y ROWNUM
Llamadas a las funciones SYSDATE, UID, USER y USERENV
Consultas que hagan referencia a otros valores en otras filas
..., salary NUMBER(2)
CONSTRAINT emp_salary_min
CHECK (salary > 0),...

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
Restriccin CHECK
P
Ndefineraunablcondicin que debe cumplir cada fila. La condicin puede utilizar
O
La restriccin CHECK
I
AC ansfeque las condiciones de consulta, con las siguientes excepciones:
las mismas
construcciones
D
N n-tarlas pseudocolumnas CURRVAL, NEXTVAL, LEVEL y ROWNUM
F UReferencias
no a las funciones SYSDATE, UID, USER y USERENV
Llamadas
Consultas que hagan referencia a otros valores en otras filas
Una sola columna puede tener varias restricciones CHECK que hagan referencia a la columna en su
definicin. No hay ningn lmite en cuanto al nmero de restricciones CHECK que puede definir en
una columna.
Las restricciones CHECK se pueden definir a nivel de tabla o de columna.
CREATE TABLE employees
(...
salary NUMBER(8,2) CONSTRAINT emp_salary_min
CHECK (salary > 0),
...

Oracle Database: Conceptos Fundamentales de SQL I 10-28

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Sentencia CREATE TABLE: Ejemplo


CREATE TABLE employees
( employee_id
NUMBER(6)
CONSTRAINT
emp_employee_id
PRIMARY KEY
, first_name
VARCHAR2(20)
, last_name
VARCHAR2(25)
CONSTRAINT
emp_last_name_nn NOT NULL
, email
VARCHAR2(25)
CONSTRAINT
emp_email_nn
NOT NULL
CONSTRAINT
emp_email_uk
UNIQUE
, phone_number
VARCHAR2(20)
, hire_date
DATE
CONSTRAINT
emp_hire_date_nn NOT NULL
, job_id
VARCHAR2(10)
CONSTRAINT
emp_job_nn
NOT NULL
, salary
NUMBER(8,2)
CONSTRAINT
emp_salary_ck
CHECK (salary>0)
, commission_pct NUMBER(2,2)
, manager_id
NUMBER(6)
CONSTRAINT emp_manager_fk REFERENCES
employees (employee_id)
, department_id NUMBER(4)
CONSTRAINT
emp_dept_fk
REFERENCES
departments (department_id));

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
REjemplo
Sentencia CREATE TABLE:
P
le
N
b
a
O
El ejemplo de la Idiapositiva
rmuestra la sentencia que se utiliza para crear la tabla EMPLOYEES en el
AC ansfe
esquema D
HR.
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 10-29

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Violacin de Restricciones
El departamento 55 no existe.
UPDATE employees
SET
department_id = 55
WHERE department_id = 110;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Violacin de Restricciones le
b
a
r
ION
Si tiene restricciones
en lugar
de columnas, recibir un error si intenta violar la regla de restriccin.
e
C
sf
Asi intenta
Por ejemplo,
actualizar
un registro con un valor ligado a una restriccin de integridad, se
n
D
a
r
N un error.
t
devuelve
U
F non
En el ejemplo
de la diapositiva, el departamento 55 no existe en la tabla principal, DEPARTMENTS y,
por lo tanto, recibir la violacin de clave principal no encontrada ORA-02291.

Oracle Database: Conceptos Fundamentales de SQL I 10-30

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Violacin de Restricciones
No puede suprimir una fila que contenga una clave primaria
que se utilice como clave ajena en otra tabla.
DELETE FROM departments
WHERE department_id = 60;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Violacin de Restricciones (continuacin)
le
N
b
a
O
I suprimir
Por ejemplo, siC
intenta
er un registro con un valor ligado a una restriccin de integridad, se
f
s
A
devuelveD
un error. an
N
-tlar diapositiva, se intenta suprimir el departamento 60 de la tabla DEPARTMENTS,
U
En
de
n
Fel ejemplo
o
n un error porque ese nmero de departamento se utiliza como clave ajena en la tabla
pero se produce
EMPLOYEES. Si el registro principal que intenta suprimir tiene registros secundarios, recibir la
violacin de registro secundario encontrado ORA-02292.
La siguiente sentencia funciona porque no hay ningn empleado en el departamento 70:
DELETE FROM departments
WHERE department_id = 70;

Oracle Database: Conceptos Fundamentales de SQL I 10-31

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Objetos de base de datos

Reglas de nomenclatura
Sentencia CREATE TABLE:
Acceso a otras tablas de usuario
Opcin DEFAULT

Tipos de dato
Visin general de restricciones: Restricciones NOT NULL,
UNIQUE, PRIMARY KEY, FOREIGN KEY, CHECK

s
a
h
Creacin de una Tabla mediante una Subconsulta
rg)
o

ALTER TABLE
sa ide
e
d
Tablas de slo lectura
roy nt Gu
p
n@ tude
Sentencia DROP TABLE
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 10-32

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Creacin de una Tabla mediante una Subconsulta

Crear una tabla e insertar filas combinando la sentencia


CREATE TABLE y la opcin AS subquery.
CREATE TABLE table
[(column, column...)]
AS subquery;

Hacer coincidir el nmero de columnas especificadas con


el nmero de columnas de la subconsulta.
Definir columnas con nombres de columna y valores por
defecto.
has

rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Creacin de una Tabla mediante
le una Subconsulta
N
b
a
O
Un segundo mtodo
para
crear
tablas
es aplicar la clusula AS subquery, que crea la tabla e inserta
r
I
e
C
f
A adenlassubconsulta.
las filas desvueltas
D
N
En la
sintaxis:n-tr
U
F
table no
es el nombre de la tabla
column
subquery

es el nombre de la columna, el valor por defecto y la restriccin de integridad


es la sentencia SELECT que define el juego de filas que se va a insertar
en la nueva tabla

Instrucciones
La tabla se crea con los nombres de columna especificados y las filas recuperadas por la sentencia
SELECT se insertan en la tabla.
La definicin de columna slo puede contener el nombre de la columna y el valor por defecto.
Si se proporcionan especificaciones de columna, el nmero de columnas debe ser igual al nmero
de columnas de la lista SELECT de la subconsulta.
Si no se proporcionan especificaciones de columna, los nombres de columna de la tabla son los
mismos que los de la subconsulta.
Las definiciones de tipo de dato de columna y de la restriccin NOT NULL se transfieren a la
nueva tabla. Tenga en cuenta que slo la restriccin explcita NOT NULL se heredar. La columna
PRIMARY KEY no transferir la funcin NOT NULL a la nueva columna. Las dems reglas de
restriccin no se transfieren a la nueva tabla. Sin embargo, puede agregar restricciones en la
definicin de columna.

Oracle Database: Conceptos Fundamentales de SQL I 10-33

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Creacin de una Tabla mediante una Subconsulta

CREATE TABLE dept80


AS
SELECT employee_id, last_name,
salary*12 ANNSAL,
hire_date
FROM
employees
WHERE
department_id = 80;

a
s
a
DESCRIBE dept80
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Creacin de una Tabla mediante
le una Subconsulta (continuacin)
N
b
a
O
En el ejemplo de Ila diapositiva,
er se crea una tabla denominada DEPT80, que contiene los detalles de
C
f
s
A
todos losD
n trabajan en el departamento 80. Tenga en cuenta que los datos de la tabla
adeque
r
N empleados
t
DEPT80
proceden
la tabla EMPLOYEES.
U
F non
Puede verificar la existencia de una tabla de base de datos y comprobar las definiciones de columna
mediante el comando DESCRIBE.
Sin embargo, asegrese de proporcionar un alias de columna al seleccionar una expresin. La
expresin SALARY*12 recibe el alias ANNSAL. Sin el alias, se genera el siguiente error:

Oracle Database: Conceptos Fundamentales de SQL I 10-34

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Objetos de base de datos

Reglas de nomenclatura
Sentencia CREATE TABLE:
Acceso a otras tablas de usuario
Opcin DEFAULT

Tipos de dato
Visin general de restricciones: Restricciones NOT NULL,
UNIQUE, PRIMARY KEY, FOREIGN KEY, CHECK

s
a
h
Creacin de una tabla mediante una subconsulta
rg)
o

ALTER TABLE
sa ide
e
d
Tablas de slo lectura
roy nt Gu
p
n@ tude
Sentencia DROP TABLE
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 10-35

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Sentencia ALTER TABLE


Utilizar la sentencia ALTER TABLE para:

Agregar una nueva columna


Modificar una definicin de columna existente
Definir un valor por defecto para la nueva columna
Borrar una columna
Cambiar el nombre de una columna
Cambiar la tabla al estado de slo lectura

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
Sentencia ALTER TABLE
P
Ntabla, puede
bl que necesite cambiar la estructura de la tabla por cualquiera de las
a
O
r
I
Despus de crear
una
AC ansfe
siguientesDrazones:
Nomitido
tr columna.
-una
n
F UHa
o
Debencambiar la definicin de columna o su nombre.
Debe eliminar columnas.
Desea definir la tabla en modo de slo lectura.
Para ello, puede utilizar la sentencia ALTER TABLE.

Oracle Database: Conceptos Fundamentales de SQL I 10-36

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Tablas de Slo Lectura


Puede utilizar la sentencia ALTER TABLE para:

Definir una tabla en modo de slo lectura, que evita que


DDL o DML cambie durante el mantenimiento de la tabla
Volver a definir la tabla en modo de lectura/escritura

ALTER TABLE employees READ ONLY;


-- perform table maintenance and then
-- return table back to read/write mode

a
s
a
)h
ALTER TABLE employees READ WRITE;
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Tablas de Slo Lectura
le
N
b
a
O
Con Oracle Database
11g,e
puede
r especificar READ ONLY para definir una tabla en modo de slo
ClaI tabla
f
s
A
lectura. Cuando
est
D tran en modo READ-ONLY, no puede ejecutar ninguna sentencia DML que
N
afecte
U a la tabla
n-o a cualquier sentencia SELECT ... FOR UPDATE. Puede ejecutar las sentencias
F
o
n
DDL siempre y cuando no modifique los datos de la tabla. Se permiten operaciones sobre ndices
asociados a la tabla cuando la tabla est en modo READ ONLY.
Especifique READ/WRITE para volver a definir una tabla de slo lectura en modo de
lectura/escritura.
Nota: si es necesario puede borrar una tabla con modo READ ONLY. El comando DROP se ejecuta
slo en el diccionario de datos, por lo que no es necesario el acceso al contenido de la tabla. El
espacio utilizado por la tabla no se reclamar hasta que el tablespace se vuelva a definir en
lectura/escritura y, a continuacin, los cambios necesarios se podrn realizar en las cabeceras de
segmento de bloque, etc.
Para obtener ms informacin sobre la sentencia ALTER TABLE, consulte el curso titulado Oracle
Database: Conceptos Fundamentales de SQL II.

Oracle Database: Conceptos Fundamentales de SQL I 10-37

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Objetos de base de datos

Reglas de nomenclatura
Sentencia CREATE TABLE:
Acceso a otras tablas de usuario
Opcin DEFAULT

Tipos de dato
Visin general de restricciones: Restricciones NOT NULL,
UNIQUE, PRIMARY KEY, FOREIGN KEY, CHECK

s
a
h
Creacin de una tabla mediante una subconsulta
rg)
o

ALTER TABLE
sa ide
e
d
Tablas de slo lectura
roy nt Gu
p
n@ tude
Sentencia DROP TABLE
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 10-38

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Borrado de una Tabla

Mueve una tabla a la papelera de reciclaje


Elimina la tabla y todos sus datos completamente si se
especifica la clusula PURGE

Invalida objetos dependientes y elimina privilegios de


objeto en la tabla
DROP TABLE dept80;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Borrado de una Tabla
le
N
b
a
O
La sentencia DROP
TABLE
a la papelera de reciclaje o elimina la tabla y todos sus
ermueve una tabla
CdeI datos
f
s
A
datos de la
base
completamente.
A
menos
que especifique la clusula PURGE, la sentencia
n a liberar espacio en los tablespaces
D notrvuelve
a
N
DROP
TABLE
para que lo utilicen otros objetos y el
U
n
F
o
espacio sigue
n contando en la cuota de espacio del usuario. El borrado de una tabla invalida objetos
dependientes y elimina privilegios de objeto en la tabla.
Al borrar una tabla, la base de datos pierde todos los datos de la tabla y los ndices asociados
a los mismos.
Sintaxis
DROP TABLE table [PURGE]
En la sintaxis, table es el nombre de la tabla.
Instrucciones
Se suprimen todos los datos de la tabla.
Se mantienen las vistas y los sinnimos, pero no son vlidos.
Se confirman las transacciones pendientes.
Slo el creador de la tabla o un usuario con el privilegio DROP ANY TABLE puede eliminar una
tabla.
Nota: utilice la sentencia FLASHBACK TABLE para restaurar una tabla borrada de la papelera de
reciclaje. Esto se trata con ms detalle en el curso titulado Oracle Database: Conceptos
Fundamentales de SQL II.
Oracle Database: Conceptos Fundamentales de SQL I 10-39

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Prueba
Puede utilizar restricciones para realizar lo siguiente:
1. Aplicar reglas a los datos de la tabla cuando se inserta,
actualiza o suprime una fila de dicha tabla.
2. Evitar la supresin de una tabla.
3. Evitar la creacin de una tabla.
4. Evitar la creacin de datos en una tabla.

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Respuesta: 1, 2, 4
le
N
b
a
O
CI nsfer
A
ND n-tra
U
F no

Oracle Database: Conceptos Fundamentales de SQL I 10-40

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Resumen
En esta leccin, debe haber aprendido a utilizar la sentencia
CREATE TABLE para crear una tabla e incluir restricciones.

Clasificacin de los Principales Objetos de Base de Datos


Revisar la estructura de la tabla
Mostrar los tipos de dato disponibles para columnas
Crear una tabla simple
Explicar cmo crear restricciones en el momento de la
creacin de la tabla
s
a
h
)
Describir el funcionamiento de los objetos de esquema
org

e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Resumen
le
N
b
a
O
r
I haberfeaprendido
En esta leccinCdebe
a realizar lo siguiente:
s
A
CREATED
TABLE ran
N
-t
U
la
sentencia
CREATE TABLE para crear una tabla e incluir restricciones.
n
F Utilizar
o
n
Crear una tabla basada en otra tabla mediante una subconsulta.
DROP TABLE
Eliminar filas y la estructura de una tabla.
Una vez ejecutada, no se puede realizar un rollback de esta sentencia.

Oracle Database: Conceptos Fundamentales de SQL I 10-41

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Prctica 10: Visin General


En esta prctica se abordan los siguientes temas:
Creacin de nuevas tablas
Creacin de una nueva tabla mediante la sintaxis CREATE
TABLE AS

Verificacin de la existencia de las tablas


Definicin de una tabla al estado de slo lectura
Borrado de tablas

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Prctica 10: Visin General le
N rlaabsentencia CREATE TABLE. Confirme que la nueva tabla se ha
Cree nuevas tablas
IOmediante
C
sfe Tambin aprender a definir el estado de una tabla como READ ONLY y,
Abase adendatos.
agregadoD
a la
N
tr a READ/WRITE.
a continuacin,
FU non-revertir
Nota: para todas las sentencias DDL y DML, haga clic en el icono Run Script (o pulse [F5]) para
ejecutar la consulta en SQL Developer. De esta forma, ve los mensajes de comentarios en la pgina
con separadores Script Output. Para consultas SELECT, siga haciendo clic en el icono Execute
Statement o pulse [F9] para obtener la salida con formato en la pgina con separadores Results.

Oracle Database: Conceptos Fundamentales de SQL I 10-42

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa

Creacin de Otros Objetos de Esquema

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Objetivos
Al finalizar esta leccin, debera estar capacitado para lo
siguiente:
Crear vistas simples y complejas
Recuperar datos de las vistas
Crear, mantener y utilizar secuencias
Crear y mantener ndices
Crear sinnimos privados y pblicos

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Objetivos
le
N
b
a
O
I ofrecefuna
En esta leccin,
se
er introduccin a los objetos de vista, secuencia, sinnimo e ndice.
C
s
A
Aprender
ran bsicos de la creacin y el uso de vistas, secuencias e ndices.
NDlosnconceptos
t
U
F no

Oracle Database: Conceptos Fundamentales de SQL I 11-2

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Visin general de la vistas:


Creacin, modificacin y recuperacin de datos de una vista
Realizacin de operaciones de lenguaje de manipulacin de
datos (DML) en una vista
Borrado de una vista

Visin general de secuencias:


Creacin, uso y modificacin de una secuencia
Valores de secuencia de cach
Pseudocolumnas NEXTVAL y CURRVAL

s
a
h
g)
r
o

Visin general de ndices


sa ide
e
d
Creacin y borrado de ndices
roy nt Gu
p
Visin general de sinnimos
n@ tude
o
i
c is S
a
Creacin y borrado de sinnimos
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 11-3

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Objetos de Base de Datos

Objeto

Descripcin

Tabla

Unidad bsica de almacenamiento; compuesta


por filas.

Vista

Representa de forma lgica subjuegos de datos


de una o ms tablas.

Secuencia

Genera valores numricos.

s
a
h
rg)
o

Sinnimo
Ofrece nombres alternativos para los objetos. sa
e
e
d
i
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Objetos de Base de Datos
le
N
b
a
O
r de datos adems de las tablas.
Existen otros objetos
CI nenslafebase
A
D puede
Con las
a presentar y ocultar datos de las tablas.
r
Nvistas,
t
U
F aplicaciones
Muchas
on exigen el uso de nmeros nicos como valores de clave primaria. Puede crear
n
cdigo en la aplicacin para cumplir este requisito o utilizar una secuencia para generar nmeros
ndice

Mejora el rendimiento de las consultas de


recuperacin de datos.

nicos.
Si desea mejorar el rendimiento de las consultas de recuperacin de datos, debe crear un ndice.
Tambin puede utilizar ndices para reforzar la unicidad en una columna o recopilacin de columnas.
Puede proporcionar nombres alternativos para los objetos mediante sinnimos.

Oracle Database: Conceptos Fundamentales de SQL I 11-4

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Qu es una Vista?
Tabla EMPLOYEES

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Qu es una Vista?
le
N
b
a
O
I combinaciones
Puede representar
er de datos o subjuegos lgicos mediante la creacin de vistas de
C
f
s
A
tablas. Una
esauna
n tabla lgica basada en una tabla o en otra vista. Una vista no contiene ningn
r
ND vista
t
dato
propio,
sino
que
se trata de una ventana a travs de la que se pueden visualizar o cambiar los
U
n
F
o
n
datos de las tablas. Las tablas en las que se basa la vista se denominan tablas base. Las vista se
almacena como una sentencia SELECT en el diccionario de datos.

Oracle Database: Conceptos Fundamentales de SQL I 11-5

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Ventajas de las Vistas

Para restringir
el acceso a los
datos

Para facilitar
consultas complejas

a
s
a
)h
g
Para
presentar
r
Para mejorar la
ode e
a
diferentes vistas
s
independencia
id
de datos
u
los mismos
y
de los datos
G
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Ventajas de las Vistas
le
N
b
a
O
I
Las vistasC
restringen
el
eracceso a los datos porque muestra las columnas seleccionadas de la
f
s
A
tabla.D
an utilizar para crear consultas simples para recuperar los resultados de
Nvistasnse-trpueden

Las
U
F consultas
no complicadas. Por ejemplo, las vistas se pueden utilizar para consultar informacin de
varias tablas sin que el usuario sepa cmo escribir una sentencia de unin.
Las vistas proporcionan independencia de los datos para usuarios ad-hoc y programas de
aplicacin. Las vistas se pueden utilizar para recuperar datos de varias tablas.
Las vistas proporcionan a los grupos de usuarios acceso a los datos segn sus criterios concretos.
Para obtener ms informacin, consulte la seccin sobre CREATE VIEW en Oracle Database SQL
Language Reference (Referencia sobre Lenguaje SQL de Oracle Database) para la base de datos 10g
u 11g.

Oracle Database: Conceptos Fundamentales de SQL I 11-6

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Vistas Simples y Complejas

Funcin

Vistas Simples

Vistas Complejas

Nmero de tablas

Una

Una o ms

Contienen funciones

No

Contienen grupos de datos

No

Operaciones DML a travs


de una vista

No siempre

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Vistas Simples y Complejas le
rablas vistas: simples y complejas.. La principal diferencia est
ION fepara
Existen dos clasificaciones
C
relacionada
operaciones
(INSERT, UPDATE y DELETE).
ns
DAcon las
a
r
N
t
F ULas- vistas
onsimples:
nDerivan
datos de una sola tabla.
- No contienen funciones ni grupos de datos.
- Pueden realizar operaciones DML a travs de la vista.
Las vistas complejas:
- Derivan datos de varias tablas.
- Contienen funciones o grupos de datos.
- No siempre permiten operaciones DML a travs de la vista.

Oracle Database: Conceptos Fundamentales de SQL I 11-7

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Creacin de Vistas

Embeber una subconsulta en la sentencia CREATE VIEW:


CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view
[(alias[, alias]...)]
AS subquery
[WITH CHECK OPTION [CONSTRAINT constraint]]
[WITH READ ONLY [CONSTRAINT constraint]];

La subconsulta puede contener la sintaxis compleja


SELECT.

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Creacin de Vistas
le
N
b
a
O
Para crear una vista,
una subconsulta en la sentencia CREATE VIEW.
r
eembeber
CI puede
f
s
A
En la sintaxis:
D tran
N
U
OR
REPLACEnvuelve a crear la vista si ya existe.
F
o
FORCE n
crea la vista independientemente de si existen o no las tablas base.

crea la vista slo si existen las tablas base (opcin por defecto).
es el nombre de la vista.
especifica los nombre de las expresiones seleccionadas por la consulta de la
vista. (El numero de alias debe coincidir con el nmero de expresiones
seleccionadas por la vista).
subquery
Es una sentencia SELECT completa (Puede utilizar alias para las
columnas de la lista SELECT).
WITH CHECK OPTION
especifica que slo las filas accesibles para la vista se puedan
insertar o actualizar.
constraint
es el nombre asignado a la restriccin CHECK OPTION.
WITH READ ONLY
garantiza que no se pueda realizar ninguna operacin DML en esta
vista.
Nota: en SQL Developer, haga clic en el icono Run Script o pulse [F5] para ejecutar las sentencias
de lenguaje de definicin de datos (DLL). Los comentarios se mostrarn en la pgina con
separadores Script Output.
NOFORCE
view
alias

Oracle Database: Conceptos Fundamentales de SQL I 11-8

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Creacin de Vistas

Crear la vista EMPVU80, que contiene los detalles de los


empleados del departamento 80:
CREATE VIEW empvu80
AS SELECT employee_id, last_name, salary
FROM
employees
WHERE
department_id = 80;

Describir la estructura de la vista mediante el comando


DESCRIBE de SQL*Plus:

a
s
a
)h
g
r
DESCRIBE empvu80
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Creacin de Vistas (continuacin)
le
N
b
a
O
En el ejemplo C
deIla diapositiva
er se crea una vista que contiene el nmero de empleado, el apellido y el
f
s
A
salario deD
cada empleado
an del departamento 80.
r
N
t
U
Puede
la estructura de la vista mediante el comando DESCRIBE.
F visualizar
non

Instrucciones
La subconsulta que define una vista puede contener la sintaxis compleja SELECT, incluidas
uniones, grupos y subconsultas.
Si no especifica un nombre de restriccin para la vista creada con WITH CHECK OPTION, el
sistema asigna un nombre por defecto con el formato SYS_Cn.
Puede utilizar la opcin OR REPLACE para cambiar la definicin de la vista sin borrarla y
volver a crearla o sin necesidad de volver a otorgarle los privilegios de objeto otorgados
previamente.

Oracle Database: Conceptos Fundamentales de SQL I 11-9

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Creacin de Vistas

Crear una vista mediante alias de columna en la


subconsulta:
CREATE VIEW salvu50
AS SELECT employee_id ID_NUMBER, last_name NAME,
salary*12 ANN_SALARY
FROM
employees
WHERE
department_id = 50;

Seleccionar las columnas de esta vista segn los nombres as


)h
g
de alias proporcionados.
r
o

e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Creacin de Vistas (continuacin)
le
N
b
a
O
I nombres
Puede controlar
erde columna incluyendo alias de columna en la subconsulta.
Clos
f
s
A
El ejemplo
Dde la tdiapositiva
an crea una vista que contiene el nmero de empleado (EMPLOYEE_ID)
r
N
U
con
ID_NUMBER,
el nombre (LAST_NAME) con el alias NAME y el salario anual (SALARY)
n
F el alias
noANN_SALARY
con el alias
para cada empleado del departamento 50.
Como alternativa, puede utilizar un alias despus de la sentencia CREATE y antes de la subconsulta
SELECT. El numero de alias mostrado debe coincidir con el nmero de expresiones seleccionadas en
la vista).
CREATE OR REPLACE VIEW
salvu50 (ID_NUMBER, NAME, ANN_SALARY)
AS SELECT employee_id, last_name, salary*12
FROM
employees
WHERE
department_id = 50;

Oracle Database: Conceptos Fundamentales de SQL I 11-10

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Recuperacin de Datos de una Vista

SELECT *
FROM
salvu50;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Recuperacin de Datos de unale
Vista
N
b
a
O
I defuna
Puede recuperar
datos
er vista al igual que de una tabla. Puede visualizar el contenido de toda la
C
s
A
vista o slo
rayncolumnas especficas.
ND denfilas
t
U
F no

Oracle Database: Conceptos Fundamentales de SQL I 11-11

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Modificacin de Vistas

Modificar la vista EMPVU80 mediante una clusula CREATE


OR REPLACE VIEW. Agregar alias para cada nombre de
columna:
CREATE OR REPLACE VIEW empvu80
(id_number, name, sal, department_id)
AS SELECT employee_id, first_name || ' '
|| last_name, salary, department_id
FROM
employees
WHERE
department_id = 80;

s
a
h
rg)
o

sa ide
Los alias de columna de la clusula CREATE OR
REPLACE
e
d
u de
G
oy columnas
VIEW se muestran en el mismo orden que
rlas
t
p
en
@
d
n
la subconsulta.
u
t
io
S
c
a
s
i
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Modificacin de Vistas
le
N
b
a
O
Con la opcin ORI REPLACE,
er se puede crear una vista incluso si ya existe otra con este nombre,
C
f
s
A
sustituyendo
n la antigua versin de la vista para su propietario. Esto significa que la
D de esta
aforma
r
Npuede
t
vista
se
modificar
sin borrar, volver a crear y volver a otorgar los privilegios de objeto.
U
F non
Nota: al asignar alias de columna en la clusula CREATE OR REPLACE VIEW, recuerde que los
alias se muestran en el mismo orden que las columnas de la subconsulta.

Oracle Database: Conceptos Fundamentales de SQL I 11-12

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Creacin de Vistas Complejas


Crear una vista compleja que contenga funciones de grupo
para visualizar valores de dos tablas:
CREATE OR REPLACE VIEW dept_sum_vu
(name, minsal, maxsal, avgsal)
AS SELECT
d.department_name, MIN(e.salary),
MAX(e.salary),AVG(e.salary)
FROM
employees e JOIN departments d
ON
(e.department_id = d.department_id)
GROUP BY d.department_name;

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Creacin de Vistas Complejasle
N rabse crea una vista compleja de nombres de departamento, salarios
Odiapositiva
En el ejemplo C
de Ila
sfepor departamento. Tenga en cuenta que se han especificado nombres
A amedios
mnimos D
y salarios
n
-tlar vista. ste es un requisito necesario si alguna de las columnas de la vista se
alternativos
UN opara
n
F
deriva den
una funcin o expresin.
Puede visualizar la estructura de la vista mediante el comando DESCRIBE. Para visualizar el
contenido de la vista, emita una sentencia SELECT.
SELECT *
FROM
dept_sum_vu;

Oracle Database: Conceptos Fundamentales de SQL I 11-13

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Reglas para Realizar Operaciones DML


en una Vista

Normalmente, puede realizar operaciones DML


en
las vistas simples.
No puede eliminar una fila si la vista contiene lo siguiente:

Funciones de grupo
Una clusula GROUP BY
La palabra clave DISTINCT
La palabra clave ROWNUM de pseudocolumna

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Reglas para Realizar Operaciones
le DML en una Vista
N
b
a
O
I operaciones
Puede realizar
er DML en los datos a travs de una vista si dichas operaciones siguen
C
f
s
A
ciertas
reglas. an
NDeliminar
tr una fila de una vista a menos que contenga alguna de las siguientes opciones:

Puede
U
F - nFunciones
on- de
grupo
- Una clusula GROUP BY
- La palabra clave DISTINCT
- La palabra clave ROWNUM de pseudocolumna

Oracle Database: Conceptos Fundamentales de SQL I 11-14

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Reglas para Realizar Operaciones DML


en una Vista
No puede modificar datos de una vista si contiene:
Funciones de grupo
Una clusula GROUP BY
La palabra clave DISTINCT
La palabra clave ROWNUM de pseudocolumna

Columnas definidas por expresiones

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Reglas para Realizar Operaciones
le DML en una Vista (continuacin)
N
b
a
O
Idatos a travs
Puede modificar
er de una vista a menos que contenga cualquiera de las condiciones
C
f
s
A
mencionadas
en la a
anterior o columnas definidas por expresiones (por ejemplo,
n
rdiapositiva
ND* n12).
t
SALARY
U
F no

Oracle Database: Conceptos Fundamentales de SQL I 11-15

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Reglas para Realizar Operaciones DML


en una Vista
No puede agregar datos a travs de una vista si sta incluye:
Funciones de grupo
Una clusula GROUP BY
La palabra clave DISTINCT
La palabra clave ROWNUM de pseudocolumna

Columnas definidas por expresiones


Columnas NOT NULL de las tablas base no seleccionadas
por la vista

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Reglas para Realizar Operaciones
le DML en una Vista (continuacin)
N
b
a
O
I a travs
Puede agregarC
datos
de una vista a menos que contenga cualquiera de los elementos
erNo
f
s
A
mostrados
en
la
diapositiva.
puede agregar datos a una vista si sta contiene columnas NOT NULL
D tran
N
sin
valores
en la tabla base. Todos los valores necesarios deben estar presentes en la
U oporndefecto
F
n
vista. Recuerde que va a agregar valores directamente a la tabla subyacente a travs de la vista.
Para obtener ms informacin, consulte la seccin sobre CREATE VIEW en Oracle Database SQL
Language Reference (Referencia sobre Lenguaje SQL de Oracle Database) para la base de datos 10g
u 11g.

Oracle Database: Conceptos Fundamentales de SQL I 11-16

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de la Clusula WITH CHECK OPTION

Puede asegurarse de que las operaciones DML realizadas


en la vista permanecern en el dominio de la vista
mediante la clusula WITH CHECK OPTION:
CREATE OR REPLACE VIEW empvu20
AS SELECT
*
FROM
employees
WHERE
department_id = 20
WITH CHECK OPTION CONSTRAINT empvu20_ck ;

a
s
a
h
Cualquier intento de ejecutar INSERT con una fila conrg)
o
a
department_id distinto de 20, o ejecutar UPDATE
en d
ele
s
e
i
d
u
nmero de departamento para cualquier fila
vista
G
royde la
t
p
n
eOPTION.
@
fallar porque viola la restriccin WITH
CHECK
d
n
u
t
io
S
c
a
s
i
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
Uso de la Clusula WITH
CHECKeOPTION
P
N rabl de integridad referencial a travs de las vistas. Tambin puede
O
Es posible realizar
comprobaciones
I
aplicar restricciones
sfede base de datos. La vista se puede utilizar para proteger la integridad de
AC aannivel
D
N peronsu-truso es muy limitado.
los datos,
U
F
La clusula
noWITH CHECK OPTION especifica que las operaciones INSERT y UPDATE realizadas a

travs de la vista no pueden crear filas que no pueda seleccionar la vista. Por lo tanto, permite aplicar
restricciones de integridad y comprobaciones de validacin de datos en los datos que se van a insertar
o actualizar. Si se intenta realizar operaciones DML en filas que no haya seleccionado la vista, se
muestra un error, junto con el nombre de la restriccin si se ha especificado.
UPDATE empvu20
SET
department_id = 10
WHERE employee_id = 201;

causa:

Nota: no se ha actualizado ninguna fila porque si el nmero de departamento se cambiara a 10, la


vista ya no podra ver ese empleado. Con la clusula WITH CHECK OPTION, por tanto, la vista slo
puede ver los empleados del departamento 20 y no permite cambiar el nmero de departamento de
dichos empleados a travs de la vista.
Oracle Database: Conceptos Fundamentales de SQL I 11-17

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Denegacin de Operaciones DML

Para asegurarse de que no se realice ninguna operacin


DML, agregue la opcin WITH READ ONLY a la definicin
de vista.
Cualquier intento de realizar una operacin DML en
cualquier fila de la vista provocar un error del servidor de
Oracle.

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Denegacin de Operaciones DML
le
N
b
a
O
Puede asegurarseIde que no
ninguna operacin DML en la vista, crela con la opcin WITH
ersederealice
C
f
s
A
READ ONLY.
En
el
ejemplo
la
siguiente
diapositiva se modifica la vista EMPVU10 para evitar
D tran
N
operaciones
n- en la vista.
FU noDML

Oracle Database: Conceptos Fundamentales de SQL I 11-18

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Denegacin de Operaciones DML

CREATE OR REPLACE VIEW empvu10


(employee_number, employee_name, job_title)
AS SELECT
employee_id, last_name, job_id
FROM
employees
WHERE
department_id = 10
WITH READ ONLY ;

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Denegacin de Operaciones DML
le (continuacin)
N
b
a
O
Ide eliminar
Cualquier intento
er una fila de una vista con una restriccin de slo lectura provocar un
C
f
s
A
error: D
N n-tran
U
F no
DELETE FROM empvu10
WHERE

employee_number = 200;

Igualmente, cualquier intento de insertar o modificar una fila mediante una vista con una restriccin
de slo lectura provocar el mismo error.

Oracle Database: Conceptos Fundamentales de SQL I 11-19

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Eliminacin de Vistas
Puede eliminar una vista sin perder los datos, ya que las vistas
se basan en tablas subyacentes de la base de datos.
DROP VIEW view;
DROP VIEW empvu80;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Eliminacin de Vistas
le
N
b
a
O
Puede utilizar la sentencia
r VIEW para eliminar una vista. La sentencia elimina la definicin de
I
eDROP
C
f
s
A
vista de laDbase de datos.
embargo, el borrado de vistas no tiene ningn efecto en las tablas en las
an PorSinotro
r
N
t
que
se
basan
las
vistas.
lado, las vistas y otras aplicaciones basadas en las vistas suprimidas
U
n
F
o
n
se convierten en no vlidas. Slo el creador o un usuario con el privilegio DROP ANY VIEW puede
eliminar una vista.
En la sintaxis, view es el nombre de la vista.

Oracle Database: Conceptos Fundamentales de SQL I 11-20

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Prctica 11: Visin General de la Parte 1


En esta prctica se abordan los siguientes temas:
Creacin de una vista simple
Creacin de una vista compleja
Creacin de una vista con restriccin de comprobacin
Intento de modificar datos de la vista
Eliminacin de vistas

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Prctica 11: Visin General dele
la Parte 1
N
b
a
O
r leccin ofrece varios ejercicios de creacin, uso y eliminacin de
I
La Parte 1 de la
prctica
deeesta
C
f
s
A
vistas. Complete
de la 1 a la 6 al final de esta leccin.
n
rapreguntas
ND n-tlas
U
F no

Oracle Database: Conceptos Fundamentales de SQL I 11-21

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Visin general de la vistas:


Creacin, modificacin y recuperacin de datos de una vista
Operaciones DML en una vista
Borrado de una vista

Visin general de secuencias:


Creacin, uso y modificacin de una secuencia
Valores de secuencia de cach
Pseudocolumnas NEXTVAL y CURRVAL

s
a
h
Visin general de ndices
rg)
o

Creacin y borrado de ndices


sa ide
e
d
Visin general de sinnimos
roy nt Gu
p
Creacin y borrado de sinnimos on@ tude
i
S
c
a
s
i
d
h
fun se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 11-22

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Secuencias

Objeto

Descripcin

Tabla

Unidad bsica de almacenamiento; compuesta


por filas.

Vista

Representa de forma lgica subjuegos de datos


de una o ms tablas.

Secuencia

Genera valores numricos.

ndice

Mejora el rendimiento de algunas consultas.

s
a
h
Sinnimo
Ofrece nombres alternativos para los objetos.
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Secuencias
le
N
b
a
O
r base de datos que crea valores enteros. Puede crear secuencias y, a
Una secuenciaC
esIun objetoede
f
s
A
continuacin,
ran para generar nmeros.
ND nutilizarlas
t
U
F no

Oracle Database: Conceptos Fundamentales de SQL I 11-23

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Secuencias
Una secuencia:
Puede generar automticamente nmeros nicos
Es un objeto que se puede compartir
Se puede utilizar para crear un valor de clave primaria
Sustituye el cdigo de aplicacin
Acelera la eficacia del acceso a los valores de secuencia
cuando estn almacenados en cach

s
a
h
rg)
o

a de
2
4
6
8
10 es
i
d
u
y
G
o
1
3
5
7
pr9 ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Secuencias (continuacin)
le
N
b
a
O
r base de datos creado por el usuario que pueden compartir varios
Una secuenciaC
esIun objetoede
f
s
A
usuarios para
D generar
anenteros.
r
N
t
U
Puede
nuna secuencia para generar valores nicos o reciclar y volver a utilizar los mismos
F definir
o
n
nmeros.

El uso normal de las secuencias es la creacin de un valor de clave primaria, que debe ser nico para
cada fila. Una secuencia se genera y aumenta (o disminuye) mediante una rutina interna de Oracle.
ste puede ser un objeto de ahorro de tiempo, ya que reduce la cantidad de cdigo de aplicacin
necesario para escribir una rutina de generacin de secuencia.
Los nmeros de secuencia se almacenan y generan independientemente de las tablas. Por lo tanto, la
misma secuencia se puede utilizar para varias tablas.

Oracle Database: Conceptos Fundamentales de SQL I 11-24

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Sentencia CREATE SEQUENCE: Sintaxis


Definir una secuencia para generar nmeros secuenciales
automticamente:
CREATE SEQUENCE sequence
[INCREMENT BY n]
[START WITH n]
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE n | NOCACHE}];

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
ce
i
RO Sintaxis
l
Sentencia CREATE SEQUENCE:
P
le
N
b
a
O
Genera nmeros Isecuenciales
C nsfer automticamente mediante la sentencia CREATE SEQUENCE.
A
D tra
En la sintaxis:
N
U
es el nombre del generador de secuencias.
nFsequence
o
n
INCREMENT BY n
especifica el intervalo entre nmeros de secuencia, donde
START WITH n
MAXVALUE n
NOMAXVALUE
MINVALUE n
NOMINVALUE

n es un entero (Si se omite esta clusula, la secuencia


aumenta en 1).
especifica el primer nmero de secuencia que se va a generar
(Si se omite esta clusula, la secuencia empieza con 1).
especifica el valor mximo que puede generar la secuencia.
especifica un valor mximo de 10^27 para una secuencia
ascendente y 1 para una secuencia descendente (sta es la
opcin por defecto).
especifica el valor mnimo de secuencia.
especifica un valor mnimo de 1 para una secuencia
ascendente y (10^26) para una secuencia descendente (sta
es la opcin por defecto).

Oracle Database: Conceptos Fundamentales de SQL I 11-25

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Creacin de Secuencias

Crear una secuencia con el nombre DEPT_DEPTID_SEQ


que se utilizar para la clave primaria de la tabla
DEPARTMENTS.
No utilizar la opcin CYCLE.
CREATE SEQUENCE dept_deptid_seq
INCREMENT BY 10
START WITH 120
MAXVALUE 9999
NOCACHE
NOCYCLE;

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Creacin de una Secuencia (continuacin)
le
N
b
a
O
CYCLE | NOCYCLE
si la secuencia sigue generando
CI nsfer especifica
A
valores despus de alcanzar su valor mximo o mnimo
ND n-tra
(NOCYCLE es la opcin por defecto).
U
FCACHEnno | NOCACHE
especifica cuntos valores preasigna el servidor de Oracle

el servidor de Oracle en la memoria (por defecto, el servidor


de Oracle almacena en cach 20 valores).
En el ejemplo de la diapositiva se crea una secuencia con el nombre DEPT_DEPTID_SEQ que se
utilizar para la columna DEPARTMENT_ID de la tabla DEPARTMENTS. La secuencia se inicia en
120, no permite el almacenamiento en cach y no sigue ningn ciclo.
No utilice la opcin CYCLE si la secuencia se utiliza para generar valores de clave primaria, a menos
que disponga de un mecanismo fiable que depure las filas antiguas ms rpido que los ciclos de
secuencia.
Para obtener ms informacin, consulte la seccin sobre CREATE SEQUENCE en Oracle Database
SQL Language Reference (Referencia sobre Lenguaje SQL de Oracle Database) para la base de datos
10g u 11g.
Nota: la secuencia no est ligada a una tabla. Como norma general, debe asignar un nombre a la
secuencia segn el uso que desee darle. Sin embargo, la secuencia se puede utilizar en cualquier
lugar, independientemente de su nombre.
Oracle Database: Conceptos Fundamentales de SQL I 11-26

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Pseudocolumnas NEXTVAL y CURRVAL

NEXTVAL devuelve el siguiente valor de secuencia


disponible. Devuelve un valor nico cada vez que se hace
referencia a dicha columna, incluso para diferentes
usuarios.
CURRVAL obtiene el valor de secuencia actual.
NEXTVAL se debe emitir para dicha secuencia antes de
que CURRVAL contenga un valor.

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
ce
i
RO
l
Pseudocolumnas NEXTVAL
y CURRVAL
P
le
N
b
a
O
r se generan nmeros secuenciales para utilizarlos en las tablas. Haga
Despus de crear
esecuencia
CIla secuencia,
f
s
referenciaDaA
los valores
de
mediante las pseudocolumnas NEXTVAL y CURRVAL.
n
a
r
N
t
U on- NEXTVAL se utiliza para extraer nmeros de secuencia sucesivos de una
La
Fpseudocolumna
secuencianespecificada. Debe cualificar a NEXTVAL con el nombre de secuencia. Al hacer referencia
a sequence.NEXTVAL, se genera un nuevo nmero de secuencia y el actual se sustituye en
CURRVAL.
La pseudocolumna CURRVAL se utiliza para hacer referencia al nmero de secuencia que acaba de
generar el usuario actual. Sin embargo, NEXTVAL se debe utilizar para generar un nmero de
secuencia en la sesin del usuario actual antes de que se pueda hacer referencia a CURRVAL. Debe
cualificar a CURRVAL con el nombre de secuencia. Al hacer referencia a sequence.CURRVAL, se
muestra el ltimo valor devuelto al proceso de ese usuario.

Oracle Database: Conceptos Fundamentales de SQL I 11-27

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Fundacin Proydesa
Pseudocolumnas NEXTVAL y CURRVAL (continuacin)
Reglas para el Uso de NEXTVAL y CURRVAL
Puede utilizar NEXTVAL y CURRVAL en los siguientes contextos:
La lista SELECT de una sentencia SELECT que no forme parte de una subconsulta
La lista SELECT de una subconsulta de la sentencia INSERT
La clusula VALUES de una sentencia INSERT
La clusula SET de la sentencia UPDATE
Puede utilizar NEXTVAL y CURRVAL en los siguientes contextos:
La lista SELECT de una vista
Una sentencia SELECT con la palabra clave DISTINCT
Una sentencia SELECT con las clusulas GROUP BY, HAVING o ORDER BY
Una subconsulta en una sentencia SELECT, DELETE o UPDATE
La expresin DEFAULT en una sentencia CREATE TABLE o ALTER TABLE
Para obtener ms informacin, consulte las secciones sobre pseudocolumnas y sobre CREATE
SEQUENCE en Oracle Database SQL Language Reference (Referencia sobre Lenguaje SQL de
Oracle Database) para la base de datos 10g u 11g.

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
SA to u
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 11-28

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Uso de una Secuencia

Insertar un nuevo departamento denominado Support en


la ubicacin con el ID 2500:
INSERT INTO departments(department_id,
department_name, location_id)
VALUES
(dept_deptid_seq.NEXTVAL,
'Support', 2500);

a
s
a
)h
g
r
o e
a
SELECT
dept_deptid_seq.CURRVAL
s
de Guid
FROM
dual;
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Uso de una Secuencia
le
N
b
a
O
En el ejemplo de Ila diapositiva
un nuevo departamento en la tabla DEPARTMENTS. Utiliza
C nsfer se inserta
A
la secuencia
DEPT_DEPTID_SEQ
para
generar
un nuevo nmero de departamento como se muestra
D tra
N
aF
continuacin.
U onn el valor actual de la secuencia mediante sequence_name.CURRVAL, se muestra en
Puede visualizar

Consultar el valor actual de la secuencia


DEPT_DEPTID_SEQ:

el ejemplo de la diapositiva. La salida de la consulta se muestra a continuacin:

Supongamos que ahora desea contratar empleados para el nuevo departamento. La sentencia
INSERT que se debe ejecutar para los nuevos empleados puede incluir el siguiente cdigo:
INSERT INTO employees (employee_id, department_id, ...)
VALUES (employees_seq.NEXTVAL, dept_deptid_seq .CURRVAL, ...);
Nota: en el ejemplo anterior, se asume que la secuencia denominada EMPLOYEE_SEQ ya se ha
creado para generar los nmeros de los nuevos empleados.

Oracle Database: Conceptos Fundamentales de SQL I 11-29

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Almacenamiento en Cach de los


Valores de Secuencia

El almacenamiento en cach de los valores de secuencia


en la memoria proporciona un acceso ms rpido a dichos
valores.
Los intervalos en los valores de secuencia se producen
cuando:
Se realiza un rollback
El sistema falla
Una secuencia se utiliza en otra tabla

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Almacenamiento en Cach de llos
e Valores de Secuencia
N
b
a
O
Ilas secuencias
Puede almacenar
er en cach en la memoria para proporcionar un acceso ms rpido a
C
f
s
A
los valores
de dichas
La cach se rellena la primera vez que hace referencia a la
ansecuencias.
r
NDLas
t
secuencia.
solicitudes
del
siguiente
valor de secuencia se recuperan de la secuencia almacenada
U
n
F
o
n
en cach. Despus de utilizar el ltimo valor de secuencia, la siguiente solicitud de la secuencia
introduce otra cach de secuencias en la memoria.
Intervalos en la Secuencia
Aunque los generadores de secuencias emiten nmeros secuenciales sin intervalos, esta accin se
realiza independientemente de que se realice una confirmacin o un rollback. Por lo tanto, si realiza
un rollback de una sentencia que contiene una secuencia, se pierde el nmero.
Otro evento que puede provocar intervalos en la secuencia es un fallo del sistema. Si la secuencia
almacena los valores en cach en la memoria, estos valores se pierden si se produce un fallo del
sistema.
Puesto que las secuencias no estn ligadas directamente a las tablas, se puede utilizar la misma
secuencia para varias tablas. Si lo hace as, cada tabla puede contener intervalos en los nmeros
secuenciales.

Oracle Database: Conceptos Fundamentales de SQL I 11-30

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Modificacin de una Secuencia


Cambiar el valor incremental, el valor mximo, el valor mnimo,
la opcin de ciclo o la opcin de cach:
ALTER SEQUENCE dept_deptid_seq
INCREMENT BY 20
MAXVALUE 999999
NOCACHE
NOCYCLE;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Modificacin de una Secuencia
le
N
b
a
O
Si alcanza el lmite
r para la secuencia, no se asignan valores adicionales de la secuencia y
I MAXVALUE
eque
Cque
f
s
A
recibir un
error
indica
la secuencia excede el valor MAXVALUE. Para seguir utilizando la
D tran
N
secuencia,
n- modificarla mediante la sentencia ALTER SEQUENCE.
FU npuede
o
Sintaxis
ALTER

SEQUENCE
secuencia
[INCREMENT BY n]
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE n | NOCACHE}];

En la sintaxis, sequence es el nombre del generador de secuencias.


Para obtener ms informacin, consulte la seccin sobre ALTER SEQUENCE en Oracle Database
SQL Language Reference (Referencia sobre Lenguaje SQL de Oracle Database) para la base de datos
10g u 11g.

Oracle Database: Conceptos Fundamentales de SQL I 11-31

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Instrucciones para Modificar una Secuencia

Debe ser el propietario o tener el privilegio ALTER para la


secuencia.
Slo se ven afectados los nmeros de secuencia futuros.
La secuencia se debe borrar y volver a crear para reiniciar
la secuencia en un nmero diferente.
Se realiza alguna validacin.
Para eliminar una secuencia, utilice la sentencia DROP:

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Instrucciones para Modificar una
le Secuencia
N
b
a
O
Debe ser el propietario
el privilegio ALTER para la secuencia si desea modificarla. Debe
I
feor eltener
AC anostener
ser elDpropietario
privilegio DROP ANY SEQUENCE para eliminarla.
r
N se ven
-tafectados
Slo
por la sentencia ALTER SEQUENCE los nmeros de secuencia futuros.
n
F ULa
o
n
opcin START WITH no se puede cambiar mediante ALTER SEQUENCE. La secuencia se
DROP SEQUENCE dept_deptid_seq;

debe borrar y volver a crear para reiniciar la secuencia en un nmero diferente.


Se realiza alguna validacin. Por ejemplo, no se puede imponer un nuevo valor MAXVALUE
menor que el nmero de secuencia actual.
ALTER SEQUENCE dept_deptid_seq
INCREMENT BY 20
MAXVALUE 90
NOCACHE
NOCYCLE;

El error:

Oracle Database: Conceptos Fundamentales de SQL I 11-32

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Visin general de la vistas:


Creacin, modificacin y recuperacin de datos de una vista
Operaciones DML en una vista
Borrado de una vista

Visin general de secuencias:


Creacin, uso y modificacin de una secuencia
Valores de secuencia de cach
Pseudocolumnas NEXTVAL y CURRVAL

s
a
h
Visin general de ndices
rg)
o

Creacin y borrado de ndices


sa ide
e
d
Visin general de sinnimos
roy nt Gu
p
Creacin y borrado de sinnimos on@ tude
i
S
c
a
s
i
d
h
fun se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 11-33

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

ndices

Objeto

Descripcin

Tabla

Unidad bsica de almacenamiento; compuesta


por filas.

Vista

Representa de forma lgica subjuegos de datos


de una o ms tablas.

Secuencia

Genera valores numricos.

ndice

Mejora el rendimiento de algunas consultas.

s
a
h
Sinnimo
Ofrece nombres alternativos para los objetos.
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
ndices
le
N
b
a
O
r de datos que puede crear para mejorar el rendimiento de algunas
I defebase
Los ndices son
objetos
C
s
A
consultas.DLos ndices
ntambin los puede crear automticamente el servidor al crear una restriccin
anica.
r
t
deFclave
o
UNprimaria
non

Oracle Database: Conceptos Fundamentales de SQL I 11-34

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

ndices
Un ndice:
Es un objeto de esquema
Lo puede utilizar el servidor de Oracle para acelerar la
recuperacin de filas mediante un puntero
Puede reducir la entrada/salida (E/S) de disco mediante
un mtodo de ruta de acceso rpido para buscar datos
de forma rpida
Es independiente de la tabla que indexa
s
a
h
Lo utiliza y mantiene automticamente
rg)
o

el servidor de Oracle
sa
e

de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
ndices (continuacin)
le
N
b
a
O
I de fOracle
Un ndice de servidor
er es un esquema de objeto que puede acelerar la recuperacin de filas
C
s
A
medianteD
se pueden crear explcita o automticamente. Si no hay un ndice
anLos ndices
r
N un puntero.
t
enFlaUcolumna,
se
produce
una
exploracin
de tabla completa.
n
o
n
Un ndice proporciona acceso directo y rpido a las filas de una tabla. Su finalidad es reducir la E/S
de disco mediante una ruta de acceso indexada para buscar datos de forma rpida. Un ndice lo utiliza
y mantiene automticamente el servidor de Oracle. Despus de crear un ndice, no ser necesaria
ninguna intervencin directa por parte del usuario.
Los ndices son lgica y fsicamente independientes de la tabla que indexan. Esto significa que se
pueden crear o borrar en cualquier momento sin que afecten a las tablas base o a otros ndices.
Nota: al borrar una tabla, se borran tambin los ndices correspondientes.
Para obtener ms informacin, consulte la seccin sobre objetos de esquema: ndices en Oracle
Database Concepts (Conceptos de Oracle Database) para la base de datos 10g u 11g.

Oracle Database: Conceptos Fundamentales de SQL I 11-35

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Cmo se Crean los ndices?

Automticamente: al definir una restriccin PRIMARY KEY


o UNIQUE en una definicin de tabla, se crea un ndice
nico automticamente.

Manualmente: los usuarios pueden crear ndices no nicos as


en las columnas para acelerar el acceso a las filas. rg) h

o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Cmo se Crean los ndices? le
b
a
r
IONde ndices.
Puede crear dos
tipos
e
C
sf de Oracle crea automticamente este ndice al definir una columna en
A
ndice
nico: a
eln
servidor
D
r una restriccin PRIMARY KEY o UNIQUE. El nombre del ndice es el nombre
Ntabla para
-ttener
n
FUlaproporcionado
o
n
a la restriccin.
ndice no nico: se trata de un ndice que puede crear el usuario. Por ejemplo, puede crear un
ndice de columna FOREIGN KEY para una unin en una consulta para mejorar la velocidad de
recuperacin.
Nota: puede crear manualmente un ndice nico, pero se recomienda crear una restriccin nica, que
implcitamente crea el ndice nico.

Oracle Database: Conceptos Fundamentales de SQL I 11-36

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Creacin de ndices

Crear un ndice en una o ms columnas:


CREATE [UNIQUE][BITMAP]INDEX index
ON table (column[, column]...);

Mejorar la velocidad de acceso de consulta a la columna


LAST_NAME de la tabla EMPLOYEES:
CREATE INDEX emp_last_name_idx
ON
employees(last_name);

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Creacin de ndices
le
N
b
a
O
Para crear un ndice
CI ennsuna
feor ms columnas, emita la sentencia CREATE INDEX.
A
D tra
En la sintaxis:
N
U
n- es el nombre del ndice.
F index
o
n
table
es el nombre de la tabla.

column
es el nombre de la columna de la tabla que se debe rellenar.
Especifique UNIQUE para indicar que el valor de la columna (o columnas) en la que se basa el ndice
debe ser nico. Especifique BITMAP para indicar que el ndice se debe crear con un bitmap para
cada clave distinta, en lugar de indexar cada fila por separado. Los ndices de bitmap almacenan los
rowids asociados con un valor de clave como bitmap.
Para obtener ms informacin, consulte la seccin sobre CREATE INDEX en Oracle Database SQL
Language Reference (Referencia sobre Lenguaje SQL de Oracle Database).

Oracle Database: Conceptos Fundamentales de SQL I 11-37

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Instrucciones de Creacin de ndices


Crear un ndice si:
Una columna contiene una amplia variedad de valores
Una columna contiene un gran nmero de valores nulos
Una o ms columnas se utilizan con frecuencia en conjunto en una
clusula WHERE o una condicin de unin
La tabla es grande y se espera que la mayora de las consultas
recuperen menos del 2% al 4% de las filas en la tabla

No crear un ndice si:

s
a
h
rg)
La tabla es pequea o se espera que la mayora de las consultas
o

recuperen ms del 2% al 4% de las filas de la tabla


sa ide
e
d
La tabla se actualiza con frecuencia
roy nt Gu
p
n@partetudedeuna
Se hace referencia a las columnas indexadas
como
o
i
c is S
expresin
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Instrucciones de Creacin de ndices
le
N
b
a
O
Ms No Siempre
CI EsnSinnimo
fer de Mejor
s
A
D
El hecho
de tener rms
a ndices en una tabla no significa que las consultas sean ms rpidas. Cada
N
t
U
operacin
n que se confirma en una tabla con ndices implica la actualizacin de los ndices.
F nDML
o
Cuanto mayor sea el nmero de ndices asociados a una tabla, mayor ser el esfuerzo que debe
No se suelen utilizar las columnas como condicin en la consulta

realizar el servidor de Oracle para actualizar todos los ndices despus de la operacin DML.
Cundo Crear un ndice
Por lo tanto, slo debe crear ndices si:
La columna contiene una amplia variedad de valores
La columna contiene un gran nmero de valores nulos
Una o ms columnas se utilizan con frecuencia en conjunto en una clusula WHERE o una
condicin de unin
La tabla es grande y se espera que la mayora de las consultas recuperen menos del 2% al 4% de
las filas
Recuerde que si desea reforzar la unicidad, debe definir una restriccin nica en la definicin de
tabla. En ese caso, se crea un ndice nico automticamente.

Oracle Database: Conceptos Fundamentales de SQL I 11-38

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Eliminacin de ndices

Eliminar un ndice del diccionario de datos mediante el


comando DROP INDEX:
DROP INDEX index;

Eliminar el ndice emp_last_name_idx del diccionario


de datos:
DROP INDEX emp_last_name_idx;

a
s
a
)o h
g
Para borrar un ndice, debe ser el propietario del mismo
r
o e
a
tener el privilegio DROP ANY INDEX.
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Eliminacin de ndices
le
N
b
a
O
No puede modificar
ndices.
er Para cambiar un ndice, debe borrarlo y volver a crearlo.
CI los
f
s
A
Eliminar D
una definicin
an de ndice del diccionario de datos mediante la emisin de la sentencia DROP
r
N
t
U
INDEX.
F Paraonborrar un ndice, debe ser el propietario del mismo o tener el privilegio DROP ANY
INDEX. n
En la sintaxis, ndice es el nombre del ndice.
Nota: si borra una tabla, los ndices y restricciones se borran automticamente, pero permanecen las
vistas y secuencias.

Oracle Database: Conceptos Fundamentales de SQL I 11-39

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Agenda

Visin general de la vistas:


Creacin, modificacin y recuperacin de datos de una vista
Operaciones DML en una vista
Borrado de una vista

Visin general de secuencias:


Creacin, uso y modificacin de una secuencia
Valores de secuencia de cach
Pseudocolumnas NEXTVAL y CURRVAL

s
a
h
Visin general de ndices
rg)
o

Creacin y borrado de ndices


sa ide
e
d
Visin general de sinnimos
roy nt Gu
p
Creacin y borrado de sinnimos on@ tude
i
S
c
a
s
i
d
h
fun se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
RO e lice
P
N rabl
O
I
AC ansfe
D
r
N
FU non-t

Oracle Database: Conceptos Fundamentales de SQL I 11-40

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Sinnimos

Objeto

Descripcin

Tabla

Unidad bsica de almacenamiento; compuesta


por filas.

Vista

Representa de forma lgica subjuegos de datos


de una o ms tablas.

Secuencia

Genera valores numricos.

a
s
a
Sinnimo
Ofrece nombres alternativos para los objetos.
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Sinnimos
le
N
b
a
O
I objetosfeder base de datos que permiten llamar a una tabla por otro nombre. Puede
Los sinnimosC
son
s
A
crear sinnimos
un nombre alternativo a la tabla.
nproporcionar
D para
a
r
N
t
U
F non
ndice

Mejora el rendimiento de algunas consultas.

Oracle Database: Conceptos Fundamentales de SQL I 11-41

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Creacin de un Sinnimo para un Objeto


Simplificar el acceso a los objetos mediante la creacin de un
sinnimo (otro nombre para un objeto). Con los sinnimos,
puede:
Crear una referencia ms sencilla a una tabla propiedad
de otro usuario
Acortar nombres de objetos largos
CREATE [PUBLIC] SYNONYM synonym
FOR
object;

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Creacin de un Sinnimo parale
un Objeto
N
b
a
O
r propiedad de otro usuario, debe anteponer al nombre de la tabla el
I a unafetabla
Para hacer referencia
C
s
A
nombre del
usuarioaque
n la haya creado, seguido de un punto. Con la creacin de un sinnimo se
r
NlaDnecesidad
t
elimina
U
n de cualificar el nombre del objeto con el esquema y se ofrece nombres
F
o
n
alternativos para tablas, vistas, secuencias, procedimientos u otros objetos. Este mtodo es

especialmente til con nombres de objetos largos, como las vistas.


En la sintaxis:
PUBLIC
crea un sinnimo al que pueden acceder todos los usuarios.
synonym
es el nombre del sinnimo que se va a crear.
object
identifica el objeto para el que se crea el sinnimo.
Instrucciones
El objeto no puede estar en un paquete.
Un nombre sinnimo privado debe ser distinto de todos los dems objetos propiedad del mismo
usuario.
Para obtener ms informacin, consulte la seccin sobre CREATE SYNONYM en Oracle Database
SQL Language Reference (Referencia sobre Lenguaje SQL de Oracle Database) para la base de datos
10g u 11g.

Oracle Database: Conceptos Fundamentales de SQL I 11-42

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Creacin y Eliminacin de Sinnimos

Crear un nombre abreviado para la vista DEPT_SUM_VU:


CREATE SYNONYM d_sum
FOR dept_sum_vu;

Borrar un sinnimo:
DROP SYNONYM d_sum;

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Creacin y Eliminacin de Sinnimos
le
N
b
a
O
Creacin de Sinnimos
CI nsfer
A
En la diapositiva
D tdel
aejemplo se crea un sinnimo para la vista DEPT_SUM_VU para una referencia
r
N
U
ms
F rpida.
on
n
El administrador de la base de datos puede crear un sinnimo pblico al que puedan acceder todos
los usuarios. En el siguiente ejemplo se crea un sinnimo pblico con el nombre DEPT para la tabla
DEPARTMENTS de Alice:
CREATE PUBLIC SYNONYM dept
FOR
alice.departments;

Eliminacin de Sinnimos
Para eliminar un sinnimo, utilice la sentencia DROP SYNONYM. Slo el administrador de la base de
datos puede borrar un sinnimo pblico.
DROP PUBLIC SYNONYM

dept;

Para obtener ms informacin, consulte la seccin sobre DROP SYNONYM en Oracle Database SQL
Language Reference (Referencia sobre Lenguaje SQL de Oracle Database) para la base de datos 10g
u 11g.
Oracle Database: Conceptos Fundamentales de SQL I 11-43

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Prueba
Los ndices se deben crear manualmente y sirven para
acelerar el acceso a las filas de la tabla.
1. Verdadero
2. Falso

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Respuesta: 2
le
N
b
a
O
Ise disean
Nota: los ndices
erpara acelerar el rendimiento de las consultas. Sin embargo, no todos los
C
f
s
A
ndices seD
manualmente.
El servidor de Oracle crea automticamente este ndice al definir una
n
rapara
N encrean
t
columna
lantabla
tener una restriccin PRIMARY KEY o UNIQUE.
U
F no

Oracle Database: Conceptos Fundamentales de SQL I 11-44

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Resumen
En esta leccin, debe haber aprendido lo siguiente:
Crear, utilizar y eliminar vistas
Generar nmeros de secuencia automticamente con el
generador de secuencias
Crear ndices para mejorar la velocidad de recuperacin
de las consultas
Utilizar sinnimos para proporcionar nombres alternativos
para los objetos

s
a
h
rg)
o

sa ide
e
d
roy nt Gu
p
n@ tude
o
i
c is S
a
d
fun se th
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Resumen
le
N
b
a
O
r
I haber
En esta leccin,
debe
acerca de los objetos de base de datos como las vistas,
eaprendido
C
f
s
A
secuencias,
ay nsinnimos.
r
ND ndices
t
U
F non

Oracle Database: Conceptos Fundamentales de SQL I 11-45

Fundacin Proydesa

Unauthorized reproduction or distribution prohibited Copyright 2013, Oracle and/or its affiliates

Prctica 11: Visin General de la Parte 2


En esta prctica se abordan los siguientes temas:
Creacin de secuencias
Uso de secuencias
Creacin de ndices no nicos
Creacin de sinnimos

a
s
a
)h
g
r
o e
a
s
de Guid
y
o
pr ent
@
on Stud
i
c
a his
d
n
fu se t
(
u
Sy/oAsus filiales.
o
Copyright 2010, Oracle
Todos los derechos reservados.
t
E
D nse
Y
O lice
R
P
Prctica 11: Visin General dele
la Parte 2
N
b
a
O
r leccin ofrece varios ejercicios de creacin y uso de una secuencia,
I
La Parte 2 de la
prctica
deeesta
C
f
s
A
un ndiceD
y un sinnimo.
an
r
N
t
U
Complete
F nlasonpreguntas de la 7 a la 10 al final de esta leccin.

Oracle Database: Conceptos Fundamentales de SQL I 11-46

Você também pode gostar