Sunteți pe pagina 1din 101

CCNP

1 Parte
ROUTING

Estructura del Curso__________________________________________________________8


1. Lenguaje SQL ( 30 - 36 horas)...................................................................8
2. Lenguaje PLSQL ( 30 - 36 horas)...............................................................8
3. Administracin Oracle 11G ( 50 horas)....................................................8

Variables de Entorno________________________________________________________9
Instalacin de la Base de Datos__________________________________________10
SQL Developed_____________________________________________________________11
T 01 - Introduccin_________________________________________________________13
Historia.............................................................................................................. 13
Estndares SQL................................................................................................ 13
Funcionamiento del Lenguaje SQL....................................................................13
Componentes del Lenguaje SQL........................................................................13
DDL................................................................................................................... 14
DCL................................................................................................................... 14
DML................................................................................................................... 14
TC...................................................................................................................... 15
Objetos de un Esquema................................................................................. 15
Reglas para Nombrar los Objetos de la Base de Datos............................15
Objetos de un Esquema................................................................................. 15
Objetos de un Esquema................................................................................. 15
Referenciar Objetos de la Base de Datos....................................................15
Tipos de Datos Oracle.................................................................................... 16
Cadenas de Caracteres................................................................................... 16
Numricos......................................................................................................... 16
Fechas............................................................................................................... 17
Lobs (Objetos Grandes).................................................................................. 17
Otros................................................................................................................. 17

Tema 02 - DDL____________________________________________________________18
Comandos DDL................................................................................................ 18
Tipos de Tablas................................................................................................ 18
Crear Tablas..................................................................................................... 19
Tipos de Datos de las Columnas..................................................................20
Integridad de los Datos.................................................................................. 20
Reglas de Negocio............................................................................................. 20
Integridad de Entidades....................................................................................21
Integridad Referencial........................................................................................ 22

Sintaxis y Cdigo de las Restricciones.........................................................22


Modificar Columnas.......................................................................................... 22
Comprobacin Aplazada de Restricciones......................................................23
Modificacin de Tablas.................................................................................... 26
Alter Table.......................................................................................................... 26
Drop Table.......................................................................................................... 26

ndices............................................................................................................... 27
Vistas................................................................................................................ 27
Secuencias........................................................................................................ 28
Sinnimos......................................................................................................... 30
Comandos para Modificar Objetos.................................................................30
Rename............................................................................................................... 30
Truncate.............................................................................................................. 30

Diccionario de Vistas....................................................................................... 31

Tema 03 - DML____________________________________________________________32
Select................................................................................................................ 32
Operadores SQL............................................................................................... 33
Operador de Concatenacin..............................................................................33
Operador de Comparacin................................................................................33
Condiciones Lgicas........................................................................................... 33
Operador de Pertenencia...................................................................................34
Operador de Rango de Valores........................................................................34
Operador Like..................................................................................................... 34
Operador Null..................................................................................................... 35
Operador Set o de Conjuntos..........................................................................35
Operador Exists.................................................................................................. 35

Funciones Programadas................................................................................... 36
Funciones de Fila Simple..................................................................................36
Funciones Numricas................................................................................36
Cadena de Caracteres.............................................................................37
Funciones de Fecha y Hora....................................................................38
Funciones de Conversin.........................................................................39
Mscaras de Formato...............................................................................40
Otras Funciones........................................................................................ 40
Variables de Entorno................................................................................41
Funciones de Grupo........................................................................................... 42

Combinacin de Tablas: Join............................................................................42


Uniones Naturales.............................................................................................. 43

Clusula Using..........................................................................................43
Clusula On.............................................................................................. 43
Uniones Self-Join................................................................................................. 44
Uniones Externas: Outer Join.............................................................................44
Uniones Cruzadas............................................................................................... 45

La Expresin Case........................................................................................... 45
Subconsultas..................................................................................................... 46
Sentencia Insert............................................................................................... 47
Sentencia Insert Multitabla............................................................................. 48
Sentencia Update............................................................................................. 50
Sentencia Delete.............................................................................................. 50
Sentencia Merge.............................................................................................. 50
Sentencias Transaccionales.............................................................................. 52
Sentencia Commit............................................................................................ 52
Sentencia Rollback........................................................................................... 53
Sentencia Savepoint........................................................................................ 53

Ejercicios____________________________________________________________________55
01. Creacin de Tablas................................................................................... 55
02. Create Table.............................................................................................. 56
03. Hospital - Consultas - Hoja 4......................................................................61
04. Hospital - Consultas - Hoja 5......................................................................69
05. Hospital - Consultas - Hoja 6......................................................................70
06. Hospital - Consultas - Hoja 7......................................................................72
07. Hospital - Consultas - Hoja 8......................................................................75
08. Hospital - Consultas - Hoja 9......................................................................78

Tema 1 - XXX

1. XXXXXXXXXX
1.1. DDL (Data Definition Languaje) Crear estructura.
1.2. DML
consultas.

(Data

Manipulation

Languaje) Manipular datos y hacer

1.3. DCL (Data Control Languaje) Dar y quitar permisos.


1.4. TC (Transaction Control) Control de transacciones.

2. Lenguaje PLSQL ( 30 - 36 horas)


Es el lenguaje que se utiliza dentro de la base de datos de la aplicacin.
Est basado en Pascal, es decir, es un lenguaje estructurado al que aadimos
operaciones para utilizar en la base de datos.
En este punto daremos:
2.1. Tipos de Datos.
2.2. Bloques Annimos.
2.3. Estructura de Control.
2.4. Colecciones y Registros.
2.5. Cursores.
2.6. Excepciones.
2.7. Procedimientos.
2.8. Funciones.
2.9. Paquetes.
2.10.

Disparadores.

2.11.

Cursores Variables.

2.12.

SQL Dinmico.

3. Administracin Oracle 11G ( 50 horas)


Son los mismos temas que en el libro.
Los temas ms importantes de este punto son:

TEMA 1 EXPLORING

THE

ORACLE DATABASE ARCHITECTURE.

TEMA 10 MANAGING

UNDO DATA.

Variables de Entorno

Los nombres de las Variables de Entorno van siempre con todas las letras en
maysculas.
1. Oracle_Base:
Es la ruta de partida para la base de datos.
Cuando instalas el programa, esta variable se corresponde con la
Ubicacin del Directorio Base de Oracle.
2. Oracle_Home: Es un subdirectorio de Oracle_Base que contiene el software
de Oracle propiamente dicho, para una versin dada.
Cuando instalas el programa, esta variable se corresponde con la
Ubicacin del Directorio Raz de Oracle.
3. Oracle_Sid:

Es el nombre de la base de datos a la que queremos acceder.

No sale en la primera pantalla de instalacin.


Los nombres de los directorios y del Sid en Windows da igual que vayan en
mayscula o en minscula, pero si usamos Unix o Linux deben ir siempre en
maysculas.

Instalacin de la Base de Datos

Lo primero que se debe hacer es crear un directorio para instalar el programa.


Luego ponemos la ruta del directorio en Ubicacin del Directorio Base de
Oracle y comprobamos que esta misma ruta forma parte (es el principio de la ruta)
de Ubicacin del Directorio Raz de Oracle.
Ahora de damos el nombre a la base de datos y la contrasea. Es muy
importante apuntarla y no perderla ya que si se pierde u olvida ya no se podr
recuperar.
Nota
En mi instalacin de mi mquina virtual:

Nombre de la Base de Datos Global: orcl.

Contrasea de la Base de Datos: dentro123.

Cuando ha terminado de instalarse la base de datos, y antes de cerrar el


instalador, entramos en Gestin de Contraseas para desbloquear (slo hay que
pinchar sobre el tic para deseleccionarlo) las siguientes cuentas: HP, SH y Scott.
Como contrasea de estos usuarios (hay que ponerla en los recuadros contiguos al
recuadro del tic) ponemos el usuario en minsculas, excepto para el usuario Scott,
ya que su contrasea es tiger (todo en minsculas) desde la creacin de Oracle.
Por lo tanto ahora tenemos las siguientes cuentas:
1. SYS: dentro123
2. SYSTEM:

dentro123

3.

HR:

hr
Corresponde a Recursos Humanos.

4.

SH:

sh
Corresponde a Ventas.

5.

SCOTT:

tiger
Slo tiene 4 tablas: empleados, departamentos, bonos y trabajos.
Esta cuenta es bastante intil pero se mantiene por causas sentimentales.

10

SQL Developed

Trabajaremos con SQL Developed. Este programa se ha instalado con la Base


de Datos de Oracle, en el subdirectorio Desarrollo de Aplicaciones.
Nota
Si al abrir SQL Developed da el error de que no encuentra el archivo
MSVCR100.DLL debemos:
1. Copiar
el
archivo
WINDOWS\SYSTEM32.

desde

JAVA\JDK1.7.0_03\BIN

al

directorio

2. Cambiar las variables de entorno:


A. Agregar
CLASSPATH
con
C:\PROGRAMFILES\JAVA\JDK1.7.0.

el

siguiente

valor:

B. Agregar
JAVA_HOME
con
C:\PROGRAMFILES\JAVA\JDK1.7.0.

el

siguiente

valor:

C. Agregar
PATH
con
valor: ;C:\PROGRAMFILES\JAVA\JDK1.7.0\BIN.

el

siguiente

La primera vez que abrimos el programa sale la pantalla de abrir


determinados archivos con este programa. No seleccionamos ninguno.
Lo primero que haremos ser crear una conexin con nuestros usuarios. En
nuestro caso, tendremos 4 conexiones, una por cada usuario ( SYS, HR, SH, SCOTT).
Para ello clicamos en nueva conexin y en la ventana que sale rellenamos los
campos CONNECTION NAME (nombre para identificarlo), USER NAME (nombre de
usuario), PASSWORD (contrasea), ROLE (rol, papel), HOSTNAME (es la forma de
nombrar la mquina. Puede ser la IP, el nombre de la mquina o LOCALHOST), PUERTO
(siempre es el mismo, 1521) y, por ltimo, el SID (nombre de la Base de Datos).
Nota
En nuestro caso, los datos de nuestras conexiones sern:
1. PRIMERA CONEXIN.
A. CONNECTION
NAME

CONN.DBA.
B. USER NAME SYS.
C. ROLE SYSDBA1.
D. HOSTNAME LOCALHOST.
2. SEGUNDA CONEXIN.
A. CONNECTION
NAME
CONN.HR.

E. PASSWORD DENTRO123.
F. PORT 1521.
G. SID ORCL.

E. PASSWORD

HR.

1
Para todos los usuarios el rol es
es SYSDBA.

DEFAULT,

11

excepto para el usuario

SYS,

cuyo rol

B. USER NAME HR.


C. ROLE DEFAULT.
D. HOSTNAME LOCALHOST.

F. PORT 1521.
G. SID ORCL.

3. TERCERA CONEXIN.
A. CONNECTION
NAME

CONN.SH.
B. USER NAME SYS.
C. ROLE DEFAULT.
D. HOSTNAME LOCALHOST.

E. PASSWORD SH.
F. PORT 1521.
G. SID ORCL.

4. CUARTA CONEXIN.
A. CONNECTION
NAME

CONN.SCOTT.
B. USER NAME SCOTT.
C. ROLE DEFAULT.
D. HOSTNAME LOCALHOST.

E. PASSWORD TIGER.
F. PORT 1521.
G. SID ORCL.

Tras crear el usuario pasamos el test para comprobar que funciona.


Si no funciona:
1. MI PC ADMINISTRAR SERVICIOS Y APLICACIONES.
Comprobamos que todos los servicios de Oracle estn iniciados.
2. Abrir CMD y escribir LSNRCTL STATUS.
Si sigue sin funcionar comprobamos que el usuario est desbloqueado y que
la contrasea es la correcta. Para ello abrimos SQL PLUS y seguimos los siguientes
pasos:
1. Entramos con el usuario y la contrasea de administrador (SYSTEM
DENTRO123).

2. Probamos si el usuario ya existe con el comando CONNECT HR/HR. Si existe, la


base de datos se conectar. Si no existe, o la contrasea es errnea, no se podr
conectar y devolver un error.
3. Si nos devuelve un error el siguiente comando puede crear un usuario con su
correspondiente contrasea o modificar una contrasea de un usuario
determinado:
ALTER
USER
NOMBRE_DE_USUARIO
IDENTIFIED
BY
VALUES
NUEVA_CONTRASEA.
4. Comprobamos que funciona intentando volver a conectarnos con el comando
CONNECT HR/HR.

12

T 01 - Introduccin

Historia
SQL (STRUCTURED QUERY LANGUAJE). Es un lenguaje utilizado para el acceso y la
manipulacin de datos en una base de datos.
En 1974 define el lenguaje DONALD CHAMBERLIN (IBM), llamndolo SEQUEL
(Structured English QUEry Languaje).
En 1977 se hace una revisin del lenguaje, y por motivos legales se cambia el
nombre a SQL.
En 1979 adquiere el lenguaje la compaa RELATIONAL SOFTWARE INC.
(posteriormente ORACLE) y lo incorpora a su Base de Datos.
Entre 1980 y 1989 los principales distribuidores de Bases de datos
relacionales adoptan SQL como lenguaje, con lo que se establece como estndar
industrial.

Estndares SQL
El estndar SQL est sujeto a los estndar ANSI e ISO. Fue publicado en 1999,
con el nombre SQL:99.
ANSI X3.135-1999, DATABASE

LANGUAGE

SQL.

ISO/IEC 9075:1999, DATABASE

LANGUAGE

SQL.

Funcionamiento del Lenguaje SQL


El SQL permite:
Almacenar informacin en tablas.
Seleccionar la informacin de la base de datos.
Realizar cambios en la informacin y estructura de los datos.
Combinar y calcular datos para conseguir la informacin necesaria.
Garantizar la integridad y consistencia de los datos.

Componentes del Lenguaje SQL


Los datos se almacenan en tablas, que se relacionan para poder acceder a la
informacin de manera eficiente. Condiciones que cumplen:
BD

Varias tablas.

ESQUEMA

Tablas de nombre nico.

13

TABLA
nicos.

TABLA

CAMPO

CAMPO
ROW ID
oculta.

Nmero fijo de campos, con distinto nombre y registros

Orden no determinado.

Conjunto de valores (Tipo de datos).

Columna de gestin interna. En principio es una columna

DDL
El DATA DEFINITION LANGUAJE (DDL) es el que se encarga de la
modificacin de la estructura de los objetos de la Base de Datos. Incluye
rdenes para modificar, borrar o definir las tablas en las que se almacenan
los datos de la Base de Datos.
1. CREATE
2. ALTER

Este comando crea un objeto dentro de la Base de Datos.

Modifica la estructura de un objeto.

3. DROP Elimina un objeto de la Base de Datos. Se puede combinar con la


sentencia ALTER.
4. REPLACE

Reemplaza objetos en la Base de Datos.

5. RENAME

Renombra un objeto dentro de la Base de Datos.

6. TRUNCATE Este comando trunca (borra) todo el contenido de una tabla.


La ventaja sobre el comando DROP es que si se quiere borrar todo el
contenido de una tabla es mucho ms rpido, especialmente si la tabla
es muy grande.
La desventaja es que TRUNCATE slo sirve cuando se quiere eliminar
absolutamente todos los registros, ya que no se permite la clusula
WHERE.
Este comando es una DDL ya que el comando TRUNCATE borra la tabla y
la vuelve a crear sin ejecutar ninguna transaccin.

DCL
1. GRANT
2. REVOKE

Dar permisos.
Quitar permisos.

DML
Es un lenguaje proporcionado por el sistema de gestin de la Base de Datos
que permite a los usuarios llevar a cabo las tareas de consulta o manipulacin de
los datos, organizados por el modelo de datos adecuado.
1. SELECT Selecciona datos de una Base de Datos. Este comando produce una
tabla (temporal).

14

El esquema de esta tabla temporal debe coincidir con el esquema de la


tabla donde los datos van a ser insertados.
2. UPDATE Esta sentencia es utilizada para modificar los valores de un conjunto
de registros existentes en una tabla. Actualizar datos.
3. INSERT Esta sentencia agrega uno o ms registros a una (y slo una) tabla en
una Base de Datos relacional.
Las cantidades de columnas y valores deben ser iguales. Si una columna
no se especifica, le ser asignado el valor por omisin.
Los valores especificados (o implcitos) por esta sentencia debern
satisfacer todas las restricciones aplicables.
Si ocurre un error de sintaxis o si alguna de las restricciones es violada, no
se agrega la fila y se devuelve un error.
4. DELETE

Esta sentencia borra uno o ms registros existentes en una tabla.

5. MERGE Esta sentencia permite, dependiendo de una condicin lgica,


actualizar registros cuando la condicin se cumple, o insertar registros cuando
dicha condicin no se cumple.
6. LOCK TABLE

Esta sentencia bloquea toda la tabla.

TC
1. COMMIT

2. ROLLBACK

Guarda los cambios de la transaccin en curso.

Deshace los cambios de la transaccin en curso.

3. SAVEPOINT Sirve para marcar un punto de referencia en la transaccin para


hacer un ROLLBACK parcial. Es el ltimo punto salvado.

Objetos de un Esquema
Los que ms nos interesan son las TABLAS, SINNIMOS, VISTAS, SECUENCIAS e
NDICES.
Otros que veremos sern BLOQUES ALMACENADOS, PAQUETES y DISPARADORES.

Reglas para Nombrar los Objetos de la Base de Datos


1. Se puede entrecomillar (.).
2. Se almacena siempre en maysculas.
3. Longitud mxima: 30 caracteres.
4. No puede ser una palabra reservada.
5. Nombre nico en un mismo esquema.

15

6. Nombre de columna debe ser nico en una tabla.

Objetos de un Esquema
1. CLSTERS

7. DIMENSIONES

13. VISTAS

2. DB LINKS

8. CLASES JAVA

14. SECUENCIAS

3. TABLAS

9. LOGS
VISTAS

4. SINNIMOS

DE

19. OBJETOS
TABLA

15. LIBRERAS
16. NDICES

5. BLOQUES
ALMACENADOS

10. OBJETOS

6. PAQUETES

12. DISPARADORES

11. RESTRICCIONES

18. RECURSOS
JAVA

17. VISTAS
MATERIALIZADA

20. OBJETOS VISTA

21.
22. Objetos de un Esquema
1. CONTEXTOS

3. ROLES

5. DIRECTORIOS

2. FICHEROS

4. TABLESPACES

6. PERFILES

7. SEGMENTOS
UNDO
8. USUARIOS

PARMETROS

23.
24. Referenciar Objetos de la Base de Datos
25.

[ESQUEMA]. NB_OBJETO.[ PARTE_OBJETO][@ ENLACE_BD]

26. Todo lo que va entre corchetes es opcional. En donde ESQUEMA es el propietario


del objeto, el usuario. NB_OBJETO es el nombre del objeto. PARTE_OBJETO se
refiere al objeto si se divide en partes. ENLACE_BD es el nombre del enlace de la
Base de Datos que contiene el objeto.
27. El orden de preferencia para hacer las referencias es el siguiente:
1. TABLAS

PERTENECIENTES AL USUARIO

2. TABLAS

PERTENECIENTES A OTRO USUARIO

3. VISTAS

PERTENECIENTES AL USUARIO

4. SINNIMO

PRIVADO

PERTENECIENTE

AL

USUARIO

5. SINNIMO

PBLICO

28. Tipos de Datos Oracle


1. CADENAS
CARACTERES

DE

2. NUMRICO

3. FECHAS

4. LOBS

5. OTROS

6.
7. Cadenas de Caracteres
8. Son sensibles a las maysculas y las minsculas. Se usan entre comillas simple `
.
1. CHAR

Cadena de caracteres de longitud fija.


9. Hay que especificar el nmero de caracteres mximos entre
parntesis. El nmero mximo de caracteres es de 2.000.

16

10. Ya no se usa, pero se mantiene por compatibilidad con versiones


antiguas.
2. NCHAR Cadena de caracteres de longitud variable. El nmero mximo de
caracteres es de 4.000.
3. VARCHAR2 Datos para cuando trabajamos con caracteres unicode.
11. VARCHAR2 se corresponde con CHAR.
12. Por cada carcter se almacena 1 bit ms 2 o 3 bits que
corresponden al lenguaje del caracter.
4. NVARCHAR2 Datos para cuando trabajamos con caracteres unicode.
13. Corresponde a NCHAR.
14. Por cada carcter se almacena 1 bit ms 2 o 3 bits que
corresponden al lenguaje del caracter.
5. LONG

Cadena de caracteres de longitud variable. Hasta 2 gigas de


almacenamiento de caracteres..
15.
16. Numricos
1. NUMBER (PREC,ESC) / NUMERIC (PREC,ESC) Ambos comandos son iguales. Se
utilizan para nmeros con decimales.
17. El nmero mximo de caracteres es 38.
18. Siempre hay que poner:
PREC La PRECISIN es el total de nmeros.
ESC La ESCALA hace referencia al nmero
de decimales.
19. Por ejemplo, el mximo nmero de NUMBER
(4,2) sera 99,99. Es decir, 4 nmeros de los cuales
2 seran decimales.
20. Este es el tipo de dato numrico ms
utilizado.
21. Podemos poner tambin NUMBER (4), con lo
que diramos que no lleva ningn decimal.
2. DEC / DECIMAL Corresponde a nmeros decimales que usan siempre el
nmero mximo de caracteres, es decir, 38.
22. Todos los caracteres no utilizados se rellenan con ceros.
3. FLOAT Guarda nmeros con comas flotantes. Las operaciones son ms rpidas
porque las hace en sistema binario (con 0 y 1) y no en el de base 10.
23. Almacena los datos en 32 bits.
4. DOUBLE PRECISION

Es lo mismo que FLOAT pero almacena los datos en 64 bits.

5. REAL Se usa para nmeros reales. Los nmeros reales son aquellos que
tienen una parte real y otra imaginaria, por ejemplo, 2+e.
6. INT / INTEGER No hay ninguna diferencia entre ellos. Se usa para nmeros
enteros hasta 38 caracteres (dgitos).

17

7. SMALLINT
INTEGER.

Para nmeros enteros hasta 65.536. Todo lo dems es igual a

8. BINARY_DOUBLE
rpido.

9. BINARY_FLOAT

Casi no se usa. Es como FLOAT, pero ms ptimo, ms rpido.

Casi no se usa. Es como NUMBER, pero ms ptimo, ms

24.
25. Fechas
26. Internamente, el calendario de Oracle comienza el 1 de enero de 1.411 a.C.
27. Oracle siempre almacena las fechas como DD / MM / AA, as que si queremos
modificar este formato de fecha (por ejemplo, para poner el ao con 4 dgitos),
debemos especificarlo.
28. Hay 6 comandos distintos para modificar las fechas:
1.

DATE

Almacena slo la fecha.

2. TIMESTAMP (PRECISIN) Almacena fecha y hora, con una precisin de 10


decimales de segundo mximo.
29. La precisin se establece entre los parntesis.
30. Si no establecemos la precisin, automticamente se
guardarn 6 decimales.
3. TIMESTAMP (PRECISIN)
la Base de Datos.

WITH

TIME ZONE

Adems aadimos la zona horaria de

4. TIMESTAMP (PRECISIN) WITH LOCAL TIME ZONE Aadimos la zona horaria local
de la Base de Datos, es decir, la zona horaria del equipo.
5. INTERNAL YEAR (PRECISIN)
(3 aos y 2 meses).

TO

MONTH

Almacena el intervalo en aos y meses

6. INTERNAL DAY (PREC_DIAS) TO SECOND (PREC_SEG) Almacena el intervalo en


das, horas, minutos y segundos (5d, 4h, 20 min y 56 seg.).
31.
32. Lobs (Objetos Grandes)
33. Almacena datos exactamente igual que VARCHAR2, pero son datos mucho ms
grandes.
34. Su tratamiento no es directo.
35. Son los que se utilizan, por ejemplo, para almacenar fotos.
1. CLOB Son cadenas de caracteres, iguales a NVARCHAR2, pero que almacena
cada dato un mximo de 128 Teras.
2. NCLOB

Es igual que CLOB, pero para lenguaje Unicode.


36. Por cada carcter se guarda un bit por el carcter y 2 0 3 por el
lenguaje.

18

3. BLOB Es igual que CLOB, pero almacena los datos en lenguaje binario, en
decir, en = y 1.
37. Este es el comando que se utiliza para las fotos.
4. BFILE Guarda un puntero junto al archivo. Es el nico comando que no
almacena los datos en la Base de Datos.
38. Tiene que estar siempre en una carpeta de ORACLE, por lo que
normalmente estar en el servidor.
39.
40. Otros
1. RAW (BYTES) Almacena una cadena de caracteres de longitud variable, con un
tamao mximo de 255 bytes.
2. LONG RAW

Es igual que RAW, pero su tamao mximo es de 2 gigas.

3. ROWID Es el nmero que Oracle pone automticamente para que no se


repitan datos.
4. UROWID
vistas.

Es el nmero que Oracle pone automticamente para distinguir

41.

19

42. Tema 02 - DDL


43.
44. El LENGUAJE DE DEFINICIN DE DATOS (DDL) permite la creacin,
modificacin, renombrado y borrado de objetos dentro de la Base de
Datos. Las DDL hacen referencia a la estructura. Slo tiene privilegios para
usarlos el ADMINISTRADOR de la Base de Datos. Todas las DDL llevan
implcitas una validacin o COMMIT.
45.
46. Comandos DDL
1. CREATE

Para

CREAR

objetos.

2. ALTER

Para

MODIFICAR

3. DROP

Para

BORRAR

4. RENAME

Para

objetos a nivel de estructura.

objetos.

RENOMBRAR

5. TRUNCATE Para
COMMIT incluido.

VACIAR

objetos.
objetos, es

decir, borra

todas

las

filas. Lleva

47.
48. Tipos de Tablas
49. Los atributos son los datos que diferencian un objeto de otro. Se pueden usar
para determinar la apariencia, el estado y otras cualidades de objetos que
pertenezcan a esa clase.
1. RELACIONALES O APILADAS
tablas, no hace falta ponerlo.

Tablas

normales. Si

usamos

este

tipo

de

2. TEMPORALES Almacenan datos temporales. Los datos se borrarn al hacer


COMMIT o al cerrar sesin.
3. INDEXADAS O TIPO NDICE Los datos estn ordenados. El orden es por
una columna.
50. La columna se ordena por PRIMARY KEY, es decir, por
orden de nmero, de letra (empezando por la A) o por
fecha (de la ms antigua a la ms nueva). Estas
columnas no pueden repetirse.
4. EXTERNAS Los datos no se almacenan en la Base de Datos. Se
almacenan en ficheros externos, por ejemplo, en un fichero de texto.
51. Al estar los datos en un archivo externo la conexin ser
ms lenta.
5. TABLAS EN CLSTER Son tablas que comparten el almacenamiento para
ahorrar espacio.
52. Se
utiliza
sobre
todo
cuando
tenemos
el
almacenamiento en clster.
6. TABLAS PARTICIONADAS

Se utiliza para tablas de gran tamao.

20

53. Lo que hace es particionar la tabla en otras ms


pequeas para optimizar el sistema, para que vaya ms
rpido. Se recomienda hacer particiones a partir de 2
gigas.
A. PARTICIN

POR

RANGO Separa los datos en rangos.


54. Por ejemplo, dividir la tabla en rangos de aos,
es decir, que particionamos la tabla en 3 rangos, uno
que corresponda a los datos de 2010, otra para los
datos de 2011 y otra para los de 2012.
55. Al insertar nuevos datos estos se guardarn
segn su rango (ao) en una particin u otra.

B. PARTICIN POR FUNCIN HASH


muy rpido.

Las funciones hash tienen un acceso

C. PARTICIN POR LISTA Se hace la particin por una lista de valores.


Por ejemplo, por clientes.
D. PARTICIONES COMPUESTAS Son subparticiones.
56.
La subparticin no tiene por qu ser del
mismo tipo que la particin principal.
57.
Una tabla muy grande podemos particionarla
primero por aos y despus subparticionarla por
meses o clientes.
58. Crear Tablas
59. El comando utilizado para crear tablas es CREATE TABLE.
60. Su sintaxis es:
61. CREATE [GLOBAL TEMPORARY] TABLE [ESQUEMA.]NOMBRE_TABLA
62. (
63. COLUMNA1 TIPO_DATO_COLUMNA1(LONGITUD) [RESTRICCION_INT] | DEFAULT VALOR],
64. COLUMNA2 TIPO_DATO_COLUMNA2(LONGITUD) [RESTRICCION_INT] | DEFAULT VALOR],
65.
66. COLUMNA_N TIPO_DATO_COLUMNA_N(LONGITUD) [RESTRICCION_INT] | DEFAULT VALOR]
67. [, DECLARACIN DE MS RESTRICCIONES DE INTEGRIDAD]
68. )
69. [ ORGANIZATION HEAP | INDEX | EXTERNAL ]
70. [ ON COMMIT { DELETE | PRESERVE } ROWS]
71. [ TABLESPACE NB_TABLESPACE]
72. [ AS SUBCONSULTA]
73.
74. Ejemplos de tablas:
75. CREATE TABLE PRODUCTOS
76. (
77. CODIGO_PROD NUMBER(4),
78. NOMBRE_PROD VARCHAR2(20),

21

79.
80. )

DESCRIPCION

VARCHAR2(80)

81.
82. Ejemplo de tabla normal:
83. CREATE TABLE SAL_TRABAJOS (TRABAJO, SAL_MAXIMO,
84. TABLESPACE USERS
85. AS SELECT JOB_ID, MAX(SALARY), MIN(SALARY)
86. FROM EMPLOYEES GROUP BY JOB_ID;

SAL_MINIMO)

87.
88. Ejemplo de tabla con SELECT:
89. CREATE TABLE SAL_TRABAJOS (TRABAJO, SAL_MAXIMO, SAL_MINIMO2)
90. TABLESPACE USERS
91. AS SELECT JOB_ID, MAX(SALARY3), MIN(SALARY4)
92. FROM EMPLOYEES GROUP BY JOB_ID;
93.
94.
95. CREATE TABLE SALARIO_ANUAL_EMPLEADOS
96. TABLESPACE USERS
97. AS SELECT FIRST_NAME || || LAST_NAME NB_EMPLE, SALARY*12 SAL_ANUAL
98. FROM EMPLOYEES;
99. Ejemplo de tabla creada por particiones:
100. CREATE TABLE FACTURAS
101. (
102.
ID_FACTURA NUMBER(6),
103.
ID_PRODUCTO NUMBER (6),
104.
ID_CLIENTE NUMBER(6),
105.
ID_EMPLEADO NUMBER (6),
106.
FECHA_FACTURA DATE,
107.
IMPORTE_FACTURA NUMBER (12,2)
108. )
109. PARTITION BY RANGE (FECHA_FACTURA)
110. (PARTITION FACT_2009 VALUES LESS
111. THAN (TO_DATE(01-ENE-2010,DD-MONYYYY,NLS_DATE_LANGUAGE=SPANISH)),
112. (PARTITION FACT_2010 VALUES LESS

2
No especificamos los campos porque los coge del SELECT.
3
No especificamos los campos porque los coge del SELECT.
4
No especificamos los campos porque los coge del SELECT.

22

113. THAN (TO_DATE(01-ENE-2011,DD-MONYYYY,NLS_DATE_LANGUAGE=SPANISH)),


114. (PARTITION FACT_2011 VALUES LESS
115. THAN
YYYY,NLS_DATE_LANGUAGE=SPANISH)),

(TO_DATE(01-ENE-2012,DD-MON-

116.
117.

Tipos de Datos de las Columnas

1. VARCHAR2 (TAMAO)

5. DATE

10.NCHAR (TAMAO)

2. NVARCHAR2
(TAMAO)

6. RAW (TAMAO)

11.CLOB

7. LONG RAW

12.NCLOB

8. ROWID

13.BLOB

9. CHAR (TAMAO)

14.BFILE

3. NUMBER (PREC,

DEC)

4. LONG
29.
30. Integridad de los Datos

31. Son una serie de reglas / restricciones que tienen que cumplir los datos
para guardarse en la tabla. Por ejemplo, el tipo de datos o el tamao de
esto.
32. Estas restricciones deben cumplir 4 normas bsicas:
1. Es conveniente asignarles un nombre autodefinido (propio) que permita
referirlas de forma fcil con posterioridad. Si el usuario no les asigna un
nombre, el programa las denomina SYS_C<N>, donde <N> es un nmero
entero diferente para cada restriccin.
2. Estas reglas pueden ser definidas a la vez que se crea la
posteriormente.

tabla

3. Se pueden definir a nivel de tabla o de columna.


4. Estas reglas se definen una sola vez.
33. Siempre debemos asegurarnos
definimos para las tablas.

que

los

datos

cumplen

las

reglas

que

34. Dentro de la INTEGRIDAD DE DATOS hay 3 tipos de restricciones


(CONSTRAINT), de los cuales uno es externo a la Base de Datos ( REGLAS
DE NEGOCIO) y los otros 2 son internos a la Base de Datos (INTEGRIDAD
DE ENTIDADES e INTEGRIDAD REFERENCIAL).
35.
36. Reglas de Negocio
37. Describen las polticas, normas, operaciones, definiciones y restricciones
presentes en cada organizacin (negocio). Son reglas especficas de cada
negocio.
38. Son externas a la Base de Datos.

23

39. Integridad de Entidades


40. Son reglas para la tabla donde la creemos. El 100% de las filas tienen
que cumplir con estas reglas. Aquellas filas que no las cumplas no se
insertarn.
41. Hay 4 tipos de INTEGRIDAD

DE

ENTIDADES:

1. PRIMARY KEY (PK) Es la PRIMARY KEY. Identifica unvocamente cada fila de


la tabla.
42.
Especifica el IDENTIFICADOR NICO de una fila en una
tabla.
43.
Se establece a nivel de columna.
44.
La/s columna/s que componen la clave primaria no
pueden tener 2 datos iguales.
45.
Siempre tiene que haber dato en esta columna.
46.
Para especificar la PRIMARY KEY debemos ponerlo detrs
del tipo de datos:
47. ID_PRODUCTO NUMBER (4) PRIMARY KEY,
48.
Si queremos que cuando un dato se salte esta
restriccin nos avise y no nos d el nmero de error
estndar sino que nos diga que es un error de PRIMARY KEY
y a qu columna corresponde debemos introducir el cdigo:
49. ID_PRODUCTO NUMBER (4) CONSTRAINT PROD_ID_PROD_PK
PRIMARY KEY,
50.
En esta sentencia Prod corresponde a la tabla, id_prod
a la columna y pk hace referencia a que es un error de
PRIMARY KEY.
51.
Si queremos establecer la PRIMARY KEY para 2
columnas el cdigo sera:
52. ID_PRODUCTO NUMBER (4) CONSTRAINT PROD_ID_PROD_PK
PRIMARY KEY (ID_PROD, NOMBRE),
53.
Al error le podemos poner el nombre que queramos,
pero lo lgico es que pongamos el nombre de la tabla
(PROD), de la columna (ID_PROD) y del tipo de error (PK).
2. UNIQUE (UQ) Es una columna o combinacin de columnas cuyos valores
deben ser nicos para todas las filas de la tabla.
54. No es obligatorio que haya un dato, pero en el momento en
el que hay un dato, ste no puede repetirse.
55. Podemos tener tantas restricciones UNIQUE como queramos.
56. Puede establecerse en varias columnas a la vez.
57. La sintaxis es la misma que la Primary Key.
58. Para definirla para una sola columna:
59. TAMANIO VARCHAR2 (25) CONSTRAINT PROD_TAM_UQ UNIQUE,
60. Para definirla para varias columnas:
61. TAMANIO VARCHAR2 (25) CONSTRAINT PROD_TAM_UQ UNIQUE
(TAMANIO, PRECIO),

24

3. NOT NULL (NN) Significa que una columna no puede tener un valor
nulo, es decir, que siempre debe contener datos.
62. Se aplica a una columna concreta.
63. Significa que una columna no puede contener un valor
nulo, es decir, siempre tiene que contener datos. Este dato
puede repetirse a lo largo de la columna.
64. Siempre hay que ponerla tras crear la columna. Su
sintaxis es:
65. NOMBRE VARCHAR2 (100) CONSTRAINT PROD_NOMBRE_NN
NOT NULL,
66. Al error le podemos poner el nombre que queramos, pero
lo lgico es que pongamos el nombre de la tabla ( PROD), de la
columna (NOMBRE) y del tipo de error (NN).
4. CHECK (CK) Especifica una condicin que debe ser cierta.
67. Sirve para implementar las reglas de negocio. Por ejemplo,
que el salario sea mayor que 700, o el precio mayor que 0.
68. A la sintaxis hay que aadirle un predicado que nos
devuelva un verdadero o falso:
69. PRECIO_UNIDAD NUMBER (4,2) CONSTRAINT PROD_PREC_CK
CHECK (PRECIO_UNIDAD > 0),
70.
71. Tambin se puede crear esta restriccin comparndola con
otra columna. Debe ir en 2 lneas. Por ejemplo, que el precio sin
IVA sea menor que el precio.
72. PRECIO_SIN_IVA NUMBER (4,2),
73. CONSTRAINT PROD_PREC_SIN_IVA_CK CHECK (PRECIO_SIN_IVA
< PRECIO_UNIDAD),
74.
75. Integridad Referencial
76. Son las restricciones de CLAVE AJENA, FOREIGN KEY. La FOREIGN KEY
establece y obliga a que se cumpla una restriccin de integridad entre
una columna (que ser la TABLA PADRE o CLAVE PRIMARIA) y otra columna
(que ser la TABLA HIJA o CLAVE AJENA).
77. Al hacer la FOREIGN KEY debemos tener en cuenta la Propagacin de
Modificaciones, que sirven tanto para borrado como para modificacin. Hay
3 tipos:
1. NO ACTION Tambin sirve para evitar el borrado de determinados datos.
Por ejemplo, no puedo borrar a un empleado que es jefe de
78. seccin de la columna empleados si antes no lo he borrado
de la columna JEFES.
2. SET NULL

Si borramos la PRIMARY KEY pone todos los datos a NULL.

3. CASCADE Borra todos los datos en cascada. Es decir, que


cargamos la PRIMARY KEY, borramos tambin todas las columnas.
79. La sintaxis de esta restriccin puede ser de 2 formas:

25

si

nos

1. EN

LNEA

NB_COL TIPO_DE_DATOS CONSTRAINT NOMBRE_RESTRICCION_FK


80. REFERENCES TABLA_PADRE (NOMBRE_COL_CLAVE_PRIMARIA)
81. [ON DELETE { CASCADE | SET NULL }]

2. NO
KEY

EN LNEA NB_COL TIPO_DE_DATOS, CONSTRAINT NOMBRE_RESTRICCION_PRIMARY


PRIMARY KEY ( NB_COL ),
82.NB_COL TIPO_DE_DATOS,
83. CONSTRAINT
NOMBRE_RESTRICCION_FK
FOREIGN
KEY
(NOMBRE_COL_CLAVE_AJENA)
84. REFERENCES TABLA_PADRE (NOMBRE_COL_PK)
85. [ON DELETE { CASCADE | SET NULL }]

86.
87.
88. Sintaxis y Cdigo de las Restricciones
89. La sintaxis general de las restricciones es:
90. NOMBRETABLA_NOMBRECOLUMNA_CODIGORESTRICCIN
91. Los os cdigos de restriccin son:
1. PK

Clave
PRIMARY KEY.
2. FK
KEY.

primaria

o
3. UQ

UNIQUE.

Clave ajena o FOREIGN 4. CK

CHECK.

5. NN Obligatorio
o NOT NULL.
92.

93.
94.
95. Modificar Columnas
96. Para poder modificar columnas antes debemos usar el comando
TABLE para modificar la tabla.

ALTER

97. Tras este comando, ya podemos modificar las columnas (excepto la que
sea PRIMARY KEY) con los siguientes comandos:
1. ADD

2. MODIFY

Aadir datos.

Modificar los datos de la columna.

3. DROP COLUMN Borra los datos de la columna.


98. Nunca se podr borrar una columna que sea Primary Key.
99. Si queremos borrar una columna con clave ajena
(FOREIGN KEY) deberemos aadir al final de la sintaxis el
comando Cascade CONSTRAINT, con lo que borraremos tanto la
columna como la clave ajena.
4. RENAME COLUMN

Para renombrar una columna.

100. Para restringir los datos de una columna se usarn los siguientes
comandos:
1. ADD CONSTRAINT
2. DROP CONSTRAINT

Aadir una restriccin a los datos.


Borrar una restriccin de los datos.

26

3. DISABLE CONSTRAINT

Desactivar una restriccin temporalmente.

4. ENABLE CONSTRAINT Volver a activar una restriccin desactivada


temporalmente.
101. No se podr volver a activar si los datos insertados
durante la desactivacin no cumplen con las restricciones.
102.

Todos los datos de la tabla tienen que cumplir con estas restricciones.

103.
104.
105.

Comprobacin Aplazada de Restricciones

106. Falla cuando insertemos los datos, pero no cuando la tabla est vaca
(al crearla).
107. Las restricciones pueden ser INMEDIATAS o DIFERIDAS, a nivel de
a nivel de TRANSACCIN.

SESIN

1. RESTRICCIN INMEDIATA Realiza la comprobacin al insertar los datos. Por


defecto, si no ponemos nada, las tablas son de este tipo.
108. Sintaxis: NOT DEFERRABLE.
109. Ejemplo:
110. NB_COL
TIPO_DE_DATOS,
CONSTRAINT
NOMBRE_RESTRICCION_PRIMARY KEY PRIMARY KEY ( NB_COL ),
111. NB_COL TIPO_DE_DATOS,
112. CONSTRAINT
NOMBRE_RESTRICCION_FK
FOREIGN
KEY (NOMBRE_COL_CLAVE_AJENA)
113. REFERENCES TABLA_PADRE (NOMBRE_COL_PK)
114. ON DELETE CASCADE NOT DEFERRABLE
2. RESTRICCIN DIFERIDA Realiza la comprobacin de los datos al realizar el
COMMIT.
115.

Este tipo de restricciones ( DEFERRABLE ) puede ser


RESTRICCIONES INMEDIATAS pero tienen la capacidad de ser
DIFERIDAS. Si son DIFERIDAS sern INITIALLY DEFERRED, mientras
que si son INMEDITAS sern INITIALLY IMMEDIATE.
116.
No se puede cambiar nunca una restriccin
INMEDIATA a DIFERIDA. Para hacerlo habra que borrar la
restriccin INMEDATA y a continuacin crear la restriccin
DIFERIDA. Pero s se pede cambiar de DIFERIDA a INMEDIATA.
117.
Ejemplo de DIFERIDA:
118. NB_COL
TIPO_DE_DATOS,
CONSTRAINT
NOMBRE_RESTRICCION_PRIMARY KEY PRIMARY KEY ( NB_COL ),
119. NB_COL TIPO_DE_DATOS,
120. CONSTRAINT NOMBRE_RESTRICCION_FK FOREIGN KEY
(NOMBRE_COL_CLAVE_AJENA)
121. REFERENCES TABLA_PADRE (NOMBRE_COL_PK)
122. ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED
123.
Ejemplo de INMEDIATA:

27

3. A NIVEL
DIFERIDAS:

DE

124. NB_COL
TIPO_DE_DATOS,
CONSTRAINT
NOMBRE_RESTRICCION_PRIMARY KEY PRIMARY KEY ( NB_COL ),
125. NB_COL TIPO_DE_DATOS,
126. CONSTRAINT NOMBRE_RESTRICCION_FK FOREIGN KEY
(NOMBRE_COL_CLAVE_AJENA)
127. REFERENCES TABLA_PADRE (NOMBRE_COL_PK)
128. ON DELETE CASCADE DEFERRABLE INITIALLY IMMEDIATE
SESIN Slo afecta a esa sesin. Pueden ser INMEDIATAS o
A. ALTER SESSION SET CONSTRAINTS = DEFERRED
deferrable sern DIFERIDAS.

Todas las

B. ALTER SESSION SET CONSTRAINTS = IMMEDIATE


deferrable sern INMEDIATAS.

Todas las

4. A NIVEL DE TRANSACCIN Estos cambios durarn hasta hacer el


Pueden ser INMEDIATAS o DIFERIDAS:
A.

SET CONSTRAINT NOMBRE_RESTRICCION

//

B.

SET CONSTRAINT NB_REST // ALL DEFERRED


con una INMEDIATA dar error.

COMMIT.

ALL IMMEDIATE.

Si se hace

129. En el siguiente ejemplo probamos todas las opciones. Tras probar cada
opcin, ir a SQL Plus y probar los 2 INSERT y el COMMIT que vienen al
final:
130.

DROP TABLE

TABLA1

CASCADE CONSTRAINTS;

131. CREATE TABLE TABLA1


132. (
133. CAMPO1 NUMBER ( 4 ) CONSTRAINT T1_PK PRIMARY KEY,
134. CAMPO1 NUMBER ( 4 ) CONSTRAINT T1_PK PRIMARY KEY NOT
DEFERRABLE,
135. CAMPO1 NUMBER ( 4 ) CONSTRAINT T1_PK PRIMARY KEY
DEFERRABLE INITIALLY IMMEDIATE,
136. CAMPO1 NUMBER ( 4 ) CONSTRAINT T1_PK PRIMARY KEY
DEFERRABLE INITIALLY DEFERRED,
137. CAMPO2 VARCHAR2 ( 100 )
138. );
139.

INSERT INTO

TABLA1

VALUES ( 1, 'DES1' ) ;

140.

INSERT INTO

TABLA1

VALUES ( 1, 'DES2' ) ;

141.

COMMIT;

142. Hay una opcin para que el programa nos diga cuales son los datos
errneos. Todos los script de cdigo Oracle estn en el directorio: %ORACLE
HOME% / PRODUCT / 11.1.0 / DB_1 / RDBMS / ADMIN. Ah buscamos un archivo
que se llama UTLEXCPT, lo abrimos y copiamos el cdigo.
143.

Ahora vamos a ver un segundo ejemplo:


144.

DROP TABLE MIS_EXCEPCIONES

28

145.

CREATE TABLE MIS_EXCEPCIONES

146.
147.
148.

ROW_ID ROWID

OWNER VARCHAR2
TABLE_NAME
CONSTRAINT

( 30 ) ,
VARCHAR2 ( 30 ) ,
VARCHAR2 ( 30 ) ) ;

149. ALTER TABLE DEPARTMENTS


150. DISABLE PRIMARY KEY ;
151. SELECT * FROM DEPARTMENTS
152. WHERE DEPARTMENT_ID BETWEEN 10 AND 30 ;
153. INSERT INTO DEPARTMENTS VALUES ( 10, 'ADMIN', 100, 1700 ) ;
154. INSERT INTO DEPARTMENTS VALUES ( 20, 'I+D', 100, 1800 ) ;
155. INSERT INTO DEPARTMENTS VALUES ( 30, 'I+D+I', 200, 1800 ) ;
156. ALTER TABLE DEPARTMENTS
157. ENABLE PRIMARY KEY ;
158. ALTER TABLE DEPARTMENTS
159. ENABLE PRIMARY KEY
160. EXCEPTIONS INTO MIS_EXCEPCIONES ;
161. SELECT * FROM MIS_EXCEPCIONES
162. WHERE CONSTRAINT = 'DEPT_DEPT_ID_PK' ;
163. SELECT D.ROWID, D.*
164. FROM DEPARTMENTS D JOIN MIS_EXCEPCIONES E
165. ON ( D.ROWID = E.ROW_ID ) ;
166.

Modificando el cdigo del segundo ejemplo quedara como resultado:


167.

DROP TABLE MIS_EXCEPCIONES

168.

CREATE TABLE MIS_EXCEPCIONES

169.
170.
171.

172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.

;
(

ROW_ID ROWID,

OWNER VARCHAR2
TABLE_NAME

CONSTRAINT
ALTER TABLE DEPARTMENTS

( 30 ) ,
VARCHAR2 ( 30 ) ,
VARCHAR2 ( 30 ) ) ;

DROP PRIMARY KEY CASCADE;


ALTER TABLE EMPLOYEES
DISABLE CONSTRAINT EMP_DEPT_FK
ALTER TABLE JOB_HISTORY

DISABLE CONSTRAINT JHIST_DEPT_FK


SELECT * FROM DEPARTMENTS

WHERE DEPARTMENT_ID BETWEEN 10 AND 30 ;


INSERT INTO DEPARTMENTS VALUES ( 10, 'ADMIN', 100, 1700 ) ;
INSERT INTO DEPARTMENTS VALUES ( 20, 'I+D', 100, 1800 ) ;
INSERT INTO DEPARTMENTS VALUES ( 30, 'I+D+I', 200, 1800 ) ;

183.

----

184.
185.
186.

ALTER TABLE DEPARTMENTS

187.

----

ADD CONSTRAINT DEPT_ID_PK PRIMARY KEY


EXCEPTIONS INTO MIS_EXCEPCIONES

188.

DEPARTMENT_ID

// VAMOS A UNIR LOS ROWID DE LA TABLA MIS_EXCEPCIONES CON LOS


ROWID DE LA TABLA DEPARTMENTS PARA SABER CULES
189. // SON EXACTAMENTE LOS DATOS QUE NOS FALTAN.

29

190. SELECT D.ROWID, D.*


191. FROM DEPARTMENTS D JOIN MIS_EXCEPCIONES
192. ON ( D.ROWID = E.ROW_ID ) ;
193.

----

194.

// PARA SOLUCIONARLO VAMOS A LAS FILAS Y CAMBIAMOS A MANO LOS


DATOS QUE FALLAN.
195.

// TRAS

CAMBIARLOS TODOS Y COMPROBAR QUE TRAS


HAY NINGN FALLO, VOLVEMOS A LA TABLA MIS_EXCEPCIONES

EL

196.

PARA

// Y, A MANO, ELIMINAMOS LAS FILAS DE LOS ERRORES.


HACEMOS UN COMMIT.
197.

----

198.

// AHORA

199.
200.
201.
202.
203.

ALTER TABLE DEPARTMENTS

TENEMOS QUE VOLVER A CREAR O HABILITAR LA

COMMIT

NO

GUARDAR

PK.

ENABLE PRIMARY KEY


EXCEPTIONS INTO MIS_EXCEPCIONES
SELECT * FROM MIS_EXCEPCIONES

WHERE

CONSTRAINT

= 'DEPT_DEPT_ID_PK' ;

204.
205.

VER

EJERCICIO

01. CREACIN

DE

TABLAS.

206.
207.

Modificacin de Tablas

208.
209.

Alter Table

210.

ALTER TABLE sirve para modificar una tabla.

211. Siempre ir seguido de las modificaciones de columnas que hemos


dado anteriormente.
212. Con este comando es tambin con el que aadiremos, activaremos,
desactivaremos y borraremos las restricciones.
1. ADD CONSTRAINT Comando para aadir restricciones.
213. Sintaxis:
214. ALTER TABLE [ESQUEMA.]NOMBRE_TABLA
215. ADD CONSTRAINT NB_RESTRICCION PRIMARY KEY | UNIQUE ( COL1
[ , COL2 ] )
216. CHECK ( CONDICION )
217. FOREIGN KEY ( COL1 ) REFERENCES TABLA
( COLUMNA ) ;
2. DROP CONSTRAINT Comando para borrar restricciones.
218. Sintaxis:
219. ALTER TABLE [ESQUEMA.]NOMBRE_TABLA

30

3. ENABLE

220. DROP UNIQUE ( COL1 [ , COL2 ] ) | PRIMARY KEY | CONSTRAINT


NB_RESTRICCION [ CASCADE ] ;
CONSTRAINT Comando para activar restricciones.
221.
Sintaxis:
222. ALTER TABLE [ESQUEMA.]NOMBRE_TABLA
223. ENABLE UNIQUE ( COL1 [ , COL2 ] ) | PRIMARY KEY |
CONSTRAINT NB_RESTRICCION
224. [USING INDEX ]
225. [EXCEPTIONS INTO EXCEPTIONS ] ;
226.
Excepciones activando restricciones:
227. SQL> @$ORACLE_HOME / RDBMS /
228. CREATE TABLE EXCEPTIONS
229. (
230. NB_COLUMNA TIPO_COLUMNA

4. DISABLE

ADMIN

231. ) ;
232. ALTER TABLE [ESQUEMA.]NOMBRE_TABLA
233. ENABLE CONSTRAINT NB_RESTRICCION
234. EXCEPTIONS INTO EXCEPTIONS ;
CONSTRAINT Comando para desactivar restricciones.
235. Sintaxis:
236. ALTER TABLE [ESQUEMA.]NOMBRE_TABLA
237. DISABLE UNIQUE ( COL1 [`, COL2 ] ) |
CONSTRAINT NB_RESTRICCION [CASCADE] ;

UTLEXCPT.SQL

PRIMARY KEY

238.
239.
240.

Drop Table

241. ALTER TABLE sirve para borrar una tabla. Slo se puede borrar una
tabla que no haga referencia a una FOREIGN KEY.
242. Siempre ir seguido de las modificaciones de columnas que hemos
dado anteriormente.
243.

Su sintaxis:
244. DROP
];

TABLE

[ESQUEMA.]NOMBRE_TABLA [

CASCADE CONSTRAINTS

PURGE

245. Los comandos CASCADE CONSTRAINTS y PURGE determinan cmo borrar


la tabla:
1. CASCADE CONSTRAINT Renombra la tabla y la manda a la papelera de
reciclaje, de dnde se puede recuperar. No la borra fsicamente.
2. PURGE Borra la tabla fsicamente. No se puede recuperar.
246.
247.
248.

ndices

31

249. Son objetos que nos sirven para hacer bsquedas de forma ms
rpida, ya que tiene la columna organizada alfabticamente.
250. Para crear un NDICE sobre una o varias columnas, stas deben cumplir
una serie de requisitos:
1. La/s columna/s estn utilizadas en WHERE.
2. La/s columna/s no estn afectadas o tengan operadores ni funciones.
3. Deben tener muchos valores distintos o muchos nulos.
4. Buscar datos concretos de informacin, es decir, que se use un ndice si
en las bsquedas devuelve menos del 8%.
251.
253.
255.

La sintaxis de los NDICES es la siguiente:


252. CREATE INDEX NB_INDICE ON TABLA ( COL1 [ , COL2 ] ) ;
Ejemplo:
254. CREATE INDEX APE_IDX ON EMPLOYEES ( LAST_NAME ) ;
Para crear un NDICE nico, la sintaxis sera:
256. CREATE UNIQUE INDEX NB_INDICE ON TABLA ( COL1 [ , COL2 ] ) ;

257.

Tambin podemos hacer una reorganizacin o reestructuracin del


NDICE. Sirve para actualizarlo cuando ha sufrido muchos cambios o cuando
queremos moverlo de localizacin.

258.
260.

Para reconstruirlo la sintaxis sera:


259. ALTER INDEX NB_INDICE REBUILD ;
Para moverlo la sintaxis es la siguiente:
261. TABLESPACE NB_TABLESPACE ;

262. Debemos tener en cuenta que una columna que ya tiene un NDICE no
puede volver a ser indexada. En cambio, si el NDICE es sobre varias
columnas, s se puede volver a indexar. Es decir, que si ya tengo un NDICE
sobre la columna A, no podremos hacer otro NDICE sobre esa misma
columna, pero en cambio s que podermos hacer un NDICE sobre la
columna A, B y C.
263. Tambin debemos tener en cuenta que las restricciones de PRIMARY
KEY y UNIQUE crean un NDICE automticamente de sus columnas.
264.

Para borrar un ndice la sintaxis sera:


265. DROP INDEX NB_INDICE ;

266.
267.
268.

Vistas

269. Es una tabla lgica basada en el resultado de una consulta. Es decir,


es una tabla que no est almacenada fsicamente en la Base de Datos
sino que lo que se almacena es el texto de la bsqueda.
270.

Las vistas no tienen el comando ALTER.

271.

Su sintaxis:
272. CREATE [ OR REPLACE ] [ FORCE |
COL2, , COLN ) ] AS SUBCONSULTA WITH

32

NO FORCE ] VIEW NB_VISTA


CHECK OPTION ;

[(

COL1,

273.

Para crear o reemplazar una vista:


274. CREATE OR REPLACE VIEW NB_VISTA [ ( COL1, COL2, , COLN ) ] ;
275. Ejemplo:
Para crear la vista:
276. CREATE
VIEW
VISTA_EMPLE_SALARIOS
AS
SELECT
EMPLOYEE_ID,
FIRST_NAME, SALARY, DEPARTMENT_ID FROM EMPLOYEES ;
Para ejecutarla:
277. SELECT SALARY FROM VISTA_EMPLE_SALARIOS ;
278. Para forzar la creacin de una vista a pesar de los errores:
279. CREATE FORCE VIEW NB_VISTA [ ( COL1, COL2, , COLN ) ] AS
SUBCONSULTA ;
280. Por defecto, si no ponemos nada, la vista ser NOFORCE. Para no forzar
la creacin de una vista cuando da error:
281. CREATE NO FORCE VIEW NB_VISTA [ ( COL1, COL2, , COLN ) ] AS
SUBCONSULTA ;
282. CREATE VIEW NB_VISTA [ ( COL1, COL2, , COLN ) ] AS SUBCONSULTA ;
283. Tambin podemos especificar las columnas que vamos a tener. Si no
ponemos nada, cogemos las columnas (y sus nombres) de la seleccin. Su
sintaxis sera:
284. CREATE VIEW NB_VISTA [ ( COL1, COL2, , COLN ) ] AS SUBCONSULTA ;
285. Las vistas sirven para ahorrar tiempo y por
controlamos a qu datos tienen acceso los usuarios.
286. Adems de consultas podemos insertar (
borrar ( DELETE ) los datos de la tabla.

INSERT

seguridad. Con

), modificar (

ellas

UPDATE

) y

287.
288. Cualquier operacin que hagamos sobre una vista, lo que har ser
insertar, modificar o borrar los datos de la tabla a los que accede la
vista. Para poder realizar estas operaciones debemos tener en cuenta
determinadas reglas para cada operacin:
1. INSERT Para que se pueda insertar datos en la tabla desde las
columnas de la vista debe tener todas las columnas como NOT NULL.
289.
Esto es porque cuando insertamos en la vista, todas las
columnas que no estn en la vista entran con un valor NOT NULL.
2. UPDATE Tiene que cumplir 2 condiciones:
A. Que ninguna de las columnas de la SELECT est modificada
por operadores o funciones.
B. Que el resultado de la SELECT no est agrupado.
3. NO FORCE La vista slo est definida sobre una tabla. Tambin tiene
que cumplir las mismas condiciones que Update:
A. Que ninguna de las columnas de la SELECT est modificada
por operadores o funciones.
B. Que el resultado de la SELECT no est agrupado.
290. Si queremos comprobar que los datos que vamos a modificar cumplen
con las reglas, la sintaxis sera:
291. CREATE VIEW NB_VISTA [ ( COL1, COL2, , COLN ) ] AS SUBCONSULTA
WITH CHECK OPTION ;
292. Para borrar una lista:

33

293.

DROP VIEW NB_VISTA

294.
295.
296.

Secuencias

297. Una SECUENCIA es un generador de nmeros enteros secuenciales. Es lo


nico que hace. Lo que nosotros hagamos con estos nmeros que nos da,
ya es cosa nuestra.
298. Es muy buena opcin para sustituir
PRIMARY KEY, porque nunca se repetirn.
299.

los

cdigos

de

la

columna

Su sintaxis es:
300. CREATE SEQUENCE [ESQUEMA.]NB_ SECUENCIA
301. [ START WITH NUM_ENTERO ]
302. [ INCREMENT BY NUM_ENTERO ]
303. [ MAXVALUE NUM_ENTERO | NOMAXVALUE ]
304. [ MINVALUE NUM_ENTERO | NOMINVALUE ]
305. [ CYCLE | NOCYCLE ]
306. [ CACHE NUM_ENTERO | NOCACHE ] ;
307. Para decirle desde qu nmero debe comenzar:
308. CREATE
SEQUENCE
[ESQUEMA.]NB_ SECUENCIA
START
WITH
NUMERO_ENTERO ;
309. Para decirle cul debe ser su incremento:
310. CREATE
SEQUENCE
[ESQUEMA.]NB_ SECUENCIA
INCREMENT
BY
NUM_ENTERO ;
311. Para decirle que tiene un nmero como mximo o mnimo:
312. CREATE SEQUENCE [ESQUEMA.]NB_ SECUENCIA MAXVALUE | MINVALUE
NUM_ENTERO ;
313. Para decirle que NO tiene un nmero como mximo o mnimo:
314. CREATE SEQUENCE [ESQUEMA.]NB_ SECUENCIA NOMAXVALUE | NOMINVALUE
;
315. Para decirle que cuando llegue al valor mximo vuelva a empezar:
316. CREATE SEQUENCE [ESQUEMA.]NB_ SECUENCIA CYCLE ;
317. Para decirle que cuando llegue al valor mximo NO vuelva a empezar:
318. CREATE SEQUENCE [ESQUEMA.]NB_ SECUENCIA NOCYCLE ;
319. Para cuando insertamos muchos datos a la vez podemos hacerlo en
bloques, por ejemplo, de 50. Para ello:
320. CREATE SEQUENCE [ESQUEMA.]NB_ SECUENCIA CACHE NUM_ENTERO ;
321. Cuando insertamos muchos datos a la vez pero NO queremos hacerlo
en bloques sino que se haga uno a uno:
322. CREATE SEQUENCE [ESQUEMA.]NB_ SECUENCIA NOCACHE ;
323. Ejemplo:
324. CREATE SEQUENCE SEQL START WITH 100 INCREMNET BY 5 ;
325. Si lo que queremos es ver el valor por el que vamos:
326. SELECT NB_SECUENCIA.CURVAL ;
327. Si lo que queremos es generar el siguiente valor:
328. SELECT NB_SECUENCIA.NEXTVAL ;

34

329.

337.

Para modificar una secuencia ya creada:


330. ALTER SEQUENCE [ESQUEMA.]NB_ SECUENCIA
331. [ START WITH ENTERO ]
332. [ INCREMENT BY ENTERO ]
333. [ MAXVALUE ENTERO | NOMAXVALUE ]
334. [ MINVALUE ENTERO | NOMINVALE ]
335. [ CYCLE | NOCYCLE ]
336. [ CACHE NUM_ENTERO | NOCACHE ] ;
Y, por ltimo, para borrar una secuencia usaremos:
338. DROP SEQUENCE [ESQUEMA.]NB_SECUENCIA ;

339.
340.
341.

Sinnimos

342. Es un nombre alternativo para un objeto. Se pueden crear sinnimos


sobre todos los objetos, excepto sobre los NDICES. Tambin se pueden
crear sobre funciones y procedimientos.
343.
345.

Su sintaxis:
344. CREATE [

PUBLIC

SYNONYM NB_SINONIMO FOR ESQUEMA.OBJETO

Hay dos tipos de sinnimos:

1. PRIVADOS
2. PUBLICOS

Slo tiene acceso a l quien lo ha creado. Su sintaxis es:


346. CREATE SYNONYM NB_SINONIMO FOR ESQUEMA.OBJETO ;
Todos los usuarios tienen acceso a ellos. Su sintaxis es:
347. CREATE PUBLIC SYNONYM NB_SINONIMO FOR ESQUEMA.OBJETO ;

348. Pueden convivir 2 sinnimos privados iguales. Tambin si coinciden un


privado y un pblico. Pero no 2 pblicos iguales.
349. El sinnimo es slo un nombre alternativo, no un objeto por lo que
para realizar cualquier cambio en un objeto necesitamos tener permisos
para realizarlos.
350. No existe ALTER en los sinnimos, pero s se puede usar REPLACE para
cambiarlo:
351. CREATE OR REPLACE SINONYM NB_SINONIMO FOR ESQUEMA.OBJETO ;
352. Para borrar un sinnimo pblico:
353. DROP PUBLIC SINONYM NB_SINONIMO ;
354. Para borrar un sinnimo privado:
355. DROP SINONYM NB_SINONIMO ;
356.
357.
358.

Comandos para Modificar Objetos

359.
360.

Rename

35

361.

Sirve para renombrar un objeto. Su sintaxis:


362.

RENAME NB_ANTIGUO TO NB_NUEVO

363.
364.

Truncate

365. Sirve para vaciar una tabla, es decir, para borrar slo los datos de una
tabla, hay que tener en cuenta las restricciones de los datos y que
conlleva el comando Commit, es decir, que no se puede recuperar.
366.

Su sintaxis es:

367. TRUNCATE TABLE NB_TABLA [ DROP STORAGE ] [ REUSE STORAGE ] ;


Si queremos que adems borre el espacio de memoria que usaba:
369. TRUNCATE TABLE NB_TABLA DROP STORAGE ;
370. Si queremos que reutilice el mismo espacio de memoria que estaba
usando:
371. TRUNCATE TABLE NB_TABLA REUSE STORAGE ;
372.
373.
374. Diccionario de Vistas
368.

A. TABLAS:
1. SELECT * FROM USER_TABLES,
375. Esta vista da informacin sobre todas las tablas que
pertenecen al USUARIO.
2. SELECT * FROM ALL_TABLES,
376. Da informacin de todas la tablas a las que el usuario
tenga acceso, sea o no usuario.
377. Da la misma informacin que USER_TABLES, pero adems
aade una columna para indicar quin es el PROPIETARIO.
3. SELECT * FROM DBA_TABLES,
378. Da informacin de todas las tablas que hay en el
sistema, pero slo puede ejecutarse como ADMINISTRADOR.
4. SELECT * FROM USER_TAB_COLUMS,
379. Da informacin sobre las columnas que pertenecen al
USUARIO.
5. SELECT * FROM ALL_TAB_COLUMS,
380. Da informacin sobre las columnas a las que el USUARIO
tiene visibilidad.
6. SELECT * FROM DBA_TAB_COLUMS,
381. Da informacin sobre todas las columnas que existen
pero slo puede ejecutarlo el ADMINISTRADOR.
7. SELECT * FROM USER_CONSTRAINTS,
382. Da informacin sobre todas las restricciones de las tablas
de las que es propietario el USUARIO.
8. SELECT * FROM ALL_CONSTRAINTS,
383. Da informacin sobre todas las restricciones de las tablas
sobre las que el usuario tiene visibilidad.
9. SELECT * FROM USER_CONS_COLUMS,

36

384. Da
informacin
de
las
columnas
que
usan
las
restricciones que pertenecen al USUARIO.
10. SELECT * FROM ALL_CONS_COLUMS,
385. Da
informacin
de
las
columnas
que
usan
las
restricciones de las tablas que el USUARIO puede ver.
11. SELECT * FROM DBA_CONS_COLUMS,
386. Da
informacin
de
las
columnas
que
usan
las
restricciones de todas las tablas. Slo puede ejecutarlo el
ADMINISTRADOR.
B. NDICES:
1. SELECT *
2. SELECT *

FROM USER_INDEXES,
FROM ALL_INDEXES,

3. SELECT *

FROM DBA_INDEXES,

1. SELECT *
2. SELECT *

FROM USER_VIEWS,
FROM ALL_ VIEWS,

3. SELECT *

FROM DBA_ VIEWS,

C. VISTAS:

D. SECUENCIAS:
1. SELECT *
2. SELECT *

FROM USER_SEQUENCES,
FROM ALL_ SEQUENCES,

3. SELECT *

FROM DBA_ SEQUENCES,

E. SINNIMOS:
1. SELECT *
2. SELECT *
3. SELECT *

FROM USER_SYNONYMS,
FROM ALL_ SYNONYMS,
FROM DBA_ SYNONYMS,

37

387.

Tema 03 - DML

388.
389. El LENGUAJE DE MANIPULACIN DE DATOS (DML) se encarga de la
recuperacin (SELECT), insercin (INSERT), eliminacin (DELETE), modificacin
(UPDATE) e insercin y/o modificacin de la informacin (MERGE).
390.
391. Para conocer la estructura de una tabla podemos usar dos comandos:
DESCRIBE NOMBRE_TABLA o DESC NOMBRE_TABLA.
392.
393.

Select5

394.

Se encarga de la recuperacin de la informacin.

395.
396.

Su sintaxis general es:

397.

SELECT LISTA_COLUMNAS | * FROM LISTA_TABLAS


COLUMNAS] [HAVING BUSQUEDA] [ORDER BY COLUMNAS]

[WHERE

BUSQUEDA]

[GROUP

BY

398.
399.

En donde:

400.

SELECT

401.

SELECT *

LISTA_COLUMNAS

Si queremos ver una o varias columnas.

Si queremos ver todas las columnas.

402. SELECT NB_COLUMNA NB_SINONIMO Si queremos que el nombre de una


columna salga como un sinnimo.
403. Si queremos que salga exactamente igual que
nosotros lo escribimos en vez de todo en maysculas,
hay que meter NB_SINONIMO entre comillas.
404. FROM NB_TABLA Si queremos ver las columnas de una tabla o vista
que pertenece al usuario.
405. FROM ESQUEMA.NB_TABLA Si queremos ver las columnas de una tabla o
vista que pertenece a otro usuario.
406. FROM NB.SINONIMO
vez del nombre.
407.

WHERE

Si la tabla tiene un sinnimo y queremos usarlo en

CONDICION_DE_BUSQUEDA

Es un filtrado de datos.
408. Para poder hacerlo la CONDICION_DE_BUSQUEDA siempre
tiene que ser o VERDADERO (devuelve la fila) o FALSO (no
devuelve la fila).

5
Proyeccin

Columnas; Select

Filas.

38

409. GROUP BY LISTA_COLUMNAS Sirve para agrupar los datos devueltos del
WHERE, para resumirlos.
410. Por ejemplo, de mayor a menor salario, o cuntos
empleados hay en cada uno de los departamentos.
411. HAVING CONDICION_DE_BUSQUEDA Hace un filtrado de datos de los datos
ya agrupados.
412. Por
ejemplo, que
nos
devuelva
slo
los
departamentos que tengan ms de 5 empleados.
413. ORDER BY LISTA_COLUMNAS Sirve para establecer el orden por nombre de
columna, por alias o por el orden de columnas del SELECT.
414. Por defecto, el orden es ascendente. Si queremos que
sea descendente hay que aadir DESC al final.
415. El procesamiento de una Select consiste en el filtrado de filas con
WHERE, la agrupacin con GROUP BY, el filtrado de filas agrupadas con
HAVING y la ordenacin de la informacin con ORDER BY. Estos comandos
tienen que ir siempre en este orden, ya que es el orden en el que JAVA
trata los SELECT.
416.

Operadores SQL

417.

Hay 2 tipos de operadores:

1. UNARIOS Interactan
elemento ( + o - ).

slo

con

un

elemento. Slo

dan

el

signo

del

2. BINARIOS Interactan con varios elementos. Son operadores aritmticos


normales ( + , - , / o * ).
418. Cualquiera de los 2 puede ir en un SELECT y en un WHERE siempre y
cuando utilice datos numricos.
419.

En los UNARIOS el operador por defecto es +.

420. El operador de DIVISIN ( / ) nos devuelve el resultado con decimales,


al igual que el de MULTIPLICACIN ( * ).
421.
422.

Operador de Concatenacin

423. El OPERADOR DE CONCATENACIN ( || ) se utiliza para unir cadenas de


caracteres. Se pueden concatenar todo lo que queramos. Por ejemplo, la
columna del nombre, un literal (en este caso un espacio) y la columna del
apellido:
424. SELECT FIRST_NAME || ` || LAST_NAME
425. Al concatenar debemos tener en cuenta el tipo de dato, es decir, que
los nmeros, por ejemplo, sern tratados como caracteres y no como
nmeros, as que no se podr realizar operaciones o funciones
matemticas con ellos.
426.
427.

Operador de Comparacin

39

428. El OPERADOR DE COMPARACIN lo usaremos en WHERE. Se usan para


comparar resultados. Sus operadores son:
1. =

Igual

2. >

Mayor

3. <

Menor

4. >= Mayor o 6. <> Diferente


igual
de, distinta a

7. != Diferente
de, distinta a

5. <= Menor o
igual

8. Este tipo de operadores se puede acompaar de las


(alguno) o ALL (todos). Por ejemplo:
9. SELECT EMPLOYEE_ID, FIRST_NAME, SALARY FROM EMPLOYEES WHERE
(7500,4500,16000)

palabras
SALARY

>=

ANY
ALL

10. Estos operadores comparan operaciones simples.


11.
12. Condiciones Lgicas
13. Las CONDICIONES LGICAS las utilizaremos para comparar operaciones ms
complicadas. Estas condiciones lo que harn ser tratar las operaciones
complicadas como si fueran varias operaciones simples unidas. Sus
operadores son:
5. NOT

15.
16.
17.

Es la NEGACIN LGICA. Devuelve el valor contrario de la expresin.


14. Si la condicin es VERDADERA (T) devuelve FALSO (F). Si la
condicin es FALSO (F) devuelve VERDADERA (T).
CONDICION1NOT
T
F
F
T

6. AND

Es el CONECTIVO. Evala 2 condiciones.


18. Devuelve un valor de VERDAD (T) slo si ambas condiciones son
ciertas.
19.
CONDICION1AND CONDICION2
20.
T
T
T
21.
T
F
F
Slo devuelve VERDADERO si las 2
condiciones son VERDADERAS.
22.
F
F
T
23.
F
F
F
7. OR

Es el CONECTOR LGICO. Evala 2 condiciones.


24.
Devuelve un valor de VERDAD (T) si al menos una de las 2
condiciones es cierta.
25.
CONDICION1 OR CONDICION2
26.
T
T
T
27.
T
T
F
Slo
devuelve
FALSO
si
las
2
condiciones son FALSAS.
28.
F
T
T
29.
F
F
F

30. A igualdad de condiciones dentro del WHERE (por ejemplo, que todos sean
AND), se evalan en orden.

40

31. La condicin lgica OR es lo mismo que el operador de comparacin


ANY. Lo mismo pasa con el operador de comparacin ALL y la condicin
lgica AND.
32.
33. Operador de Pertenencia
34. Los OPERADORES

DE

PERTENENCIA son de 2 tipos:

1. IN Se usa para definir que el valor a comparar se encuentra dentro de


un grupo especificado en IN.
35.Devuelve VERDADERO (T) cuando se cumple exactamente esa
condicin. Es la igualdad estricta.
36.Es lo mismo que el operador de comparacin = ANY.
2. NOT IN

Desigualdad estricta. Es lo contrario a IN.


37.Es lo mismo que el operador de comparacin ! = ANY.

38.
39. Operador de Rango de Valores
40. Los OPERADORES

DE

RANGO

DE

VALORES son de 2 tipos:

1. BETWEEN X AND Y Se usa para especificar un intervalo de valores. Se


incluyen los valores de X e Y.
2. NOT BETWEEN X AND Y Se usa para especificar un intervalo de valores.
No se incluyen los valores de X e Y.
41. Este tipo de operadores se corresponden a los operadores de comparacin
> = X AND < = Y en el caso de BETWEEN X AND Y. En el caso de NOT
BETWEEN X AND Y se corresponden a los operadores de comparacin < X
OR > Y.
42. El RANGO DE VALORES tambin sirve para cadenas de caracteres. Su orden
ser ALFABTICO.
43.
44. Operador Like
45. Utilizaremos este operador para establecer patrones de bsqueda. Segn
lo que queramos buscar usaremos 2 smbolos:
1. %
2. _

Para cualquier CADENA

DE

CARACTERES.

Para cualquier CARACTER.

46. Por ejemplo, queremos buscar todas las palabras que empiecen por S y
acaben por K, para lo que escribiramos:
47. SELECT JOB_ID, SALARY FROM EMPLOYEES WHERE JOB_ID
podra devolver tanto SK, como SEEK, como SH_CLERK.

LIKE

` S % K Nos

48. Si queremos que devuelva slo las que tienen 3 caracteres sera:

41

49. SELECT

JOB_ID, FIRST_NAME, SALARY

FROM EMPLOYEES

WHERE

JOB_ID LIKE

`S_K

50. Se tienen en cuenta las maysculas y minsculas en las letras que


nosotros damos, pero NO para la cadena de caracteres o el carcter que
vaya dentro de ellas.
51. Operador Null
52. Para el tratamiento de VALORES NULOS usaremos el OPERADOR NULL.
Debemos recordar que el 0 es un nmero, que no es lo mismo que NULL.
Puede ser de 2 tipos:
1. IS

Devuelve todos los valores de la columna que sean nulos.


53.
SELECT
COMMISSION_PCT, SALARY
FROM
EMPLOYEES
WHERE
COMMISSION_PCT IS NULL

NULL

2. IS NOT
nulos.

NULL

Devuelve todos los valores de la columna que

54.SELECT

COMMISSION_PCT,
COMMISSION_PCT IS NOT NULL

SALARY

FROM

NO

EMPLOYEES

sean
WHERE

55.
56. Operador Set o de Conjuntos
57. Los OPERADORES SET son los ms difciles. Trabajaremos
conjuntos. Cada conjunto ser un SELECT distinto.

con

varios

58. Para utilizar estos operadores hay que cumplir 2 normas:


1. Las consultas a unir deben tener el mismo nmero de campos y, adems,
estos campos deben de ser del mismo tipo.
2. Slo puede haber una nica clusula ORDER BY al final de la sentencia
SELECT.
59.
60. Hay 4 tipos de estos operadores:
1. UNION

Devuelve la suma de 2 o ms conjuntos de resultados.


61. Este resultado tiene la misma estructura que los conjuntos
originales, y se ordena igual que la primera columna original dada.
Su sintaxis sera:
62. SELECT X FROM Y UNION SELECT P FROM Q

2. UNION ALL Es igual que UNION pero no quita los duplicados ni los
ordena. Su sintaxis sera:
63. SELECT X FROM Y UNION ALL SELECT P FROM Q
3. INTERSECT Slo devuelven las filas que estn en los 2 conjuntos a la
vez. Su sintaxis sera:
64. SELECT X FROM Y INTERSECT SELECT P FROM Q
65. Devuelve los datos ordenados y quita los duplicados, es
decir, que slo devuelve el dato en comn una vez en total, no
una por cada columna en la que est.

42

4. MINUS Es la resta de conjuntos. No es transitiva, es decir, que A-B es


distinto a B-A.
66. Esta operacin devuelve los datos que estn en el primer
conjunto y no estn en el segundo. Su sintaxis sera:
67. SELECT X FROM Y MINUS SELECT P FROM Q
68.
69. Operador Exists
70. El OPERADOR EXISTS examina
subconsulta. Su sintaxis sera:
71. SELECT *
72.

si

un

operador

existe

dentro

de

una

FROM DEPARTMENT D

WHERE EXISTS

73. WHERE

(SELECT *

FROM EMPLOYEES E

E.DEPARTMENT_ID

D.DEPARTMENT_ID)

74. Lo que hace es comparar la subconsulta de dentro con la consulta


fuera. Si existe la devuelve.

de

75. Debemos tener en cuenta que este operador tarda en ejecutarse ya que
la subconsulta se ejecuta para cada fila, as que si la subconsulta tarda
un minuto y tenemos 80 filas en la tabla, tardar 80 minutos.
76.
77. Funciones Programadas
78.
79. Funciones de Fila Simple
80. Por cada operacin devuelve un valor:
SALIDA ( 1 VALOR ) .

ENTRADA

(1

VALOR

FUNCION F( X

81. Todas las funciones que vamos a ver se pueden utilizar en SELECT, WHERE,
HAVING y en ORDER BY.
82. Se puede dividir en 5 tipos segn el tipo de datos de los argumentos de
entrada: FUNCIONES NUMRICAS, FUNCIONES DE CARACTERES, FUNCIONES DE FECHAS,
FUNCIONES DE CONVERSIN y OTROS.
83.
84. Funciones Numricas
85. Son funciones que aceptan como entrada nmeros y que tambin tienen
como salida nmeros. Se subdividen en 5 grupos:
86.
1. OPERACIONES ARITMTICAS
1. ABS (
signo.

NUM

Valor absoluto de un nmero. Es el nmero sin

87.SELECT ABS ( 25 ), ABS ( -25 )

43

FROM DUAL;

2. MOD (

3. POWER (
4. SQRT (
5. EXP (
6. LN (

NUM

NUM

NUM

7. LOG (

) Devuelve el resto.
88.SELECT MOD ( 25 , 25 ), MOD ( 28 , 5 )

FROM DUAL;

) Potencia. Es M elevado a N.
89.SELECT POWER ( 3 , 2 ), POWER ( 9 , 3 )

FROM DUAL;

) Es el cuadrado.
90.SELECT SQRT ( 81 ), SQRT ( 70 )

FROM DUAL;

Devuelve el nmero E elevado a


91.SELECT EXP ( 25 ) FROM DUAL;

Logaritmo niperiano en base a


92.SELECT LN (5) FROM DUAL;

) Logaritmo de M elevado a N.
93.SELECT LOG ( 25 , 2 ) FROM DUAL;

NUM.

NUM.

8. SIGN ( NUM ) Devuelve el signo de un nmero. Puede devolver


3 valores:
Si el nmero es NEGATIVO devuelve -1.
Si el nmero es POSITIVO devuelve 1.
Si el nmero es 0 (ni positivo ni negativo)
devuelve 0.
94. SELECT SIGN ( 500 ), SIGN ( 0 ), SIGN ( -500 )
FROM DUAL;
2. OPERACIONES TRIGONOMTRICAS
1. SIN ( NUM ) SENO. Devuelve el seno trigonomtrico del ngulo dado,
en radianes, en una expresin FLOAT numrica aproximada.
95.SELECT SIN ( 25 ) FROM DUAL;
2. COS
( NUM )

COSENO. Funcin matemtica que devuelve el coseno


trigonomtrico del ngulo especificado, expresado en radianes,
96. en la expresin dada. Es una expresin de tipo FLOAT.
97.SELECT COS ( 10 ) FROM DUAL;
3. TAN ( NUM ) TANGENTE. Devuelve la tangente de la expresin de
entrada. Es una expresin de tipo FLOAT o de un tipo que puede
98. convertirse implcitamente a FLOAT, interpretado como
un nmero de radianes.
99.SELECT TAN ( 20 ) FROM DUAL;
4. ASIN ( NUM ) ARCO SENO. Devuelve el ngulo, expresado en radianes, cuyo
seno es la expresin FLOAT especificada. Es una
100. expresin del tipo FLOAT o de un tipo que puede
convertirse implcitamente a FLOAT, con un valor
comprendido entre -1 y 1. Con valores fuera de este
intervalo se devuelve NULL y se notifica un error del
dominio.
101. SELECT ASIN ( 81 ) FROM DUAL;

44

5. ACOS ( NUM ) ARCO COSENO. Devuelve el ngulo, expresado en radianes, cuyo


seno es la expresin FLOAT especificada. Es
102. una expresin del tipo FLOAT o de un tipo que
puede convertirse implcitamente a FLOAT, con un valor
comprendido entre -1 y 1. Con valores fuera de este
intervalo se devuelve NULL y se notifica un error del
dominio.
103. SELECT ACOS ( 25 ) FROM DUAL;
6. ATAN ( NUM ) ARCOTANGENTE. Devuelve el ngulo en radianes cuya
tangente es una expresin tipo FLOAT especificada.
104. Es una expresin de tipo FLOAT o de un tipo que
se puede convertir a FLOAT de manera implcita.
105. SELECT ATAN ( 5 ) FROM DUAL;
106.
3. OPERACIONES

DE

REDONDEO

1. CEIL ( NUM ) Redondea a entero, hacia arriba, el argumento NUM,


es decir, que devuelve el entero ms grande que sea
107. mayor
o
igual
que
la
expresin
numrica
especificada.
108. SELECT CEIL ( 50.88 ), CEIL ( 52.21 ) FROM DUAL;
2. FLOOR ( NUM ) Redondea a entero, hacia abajo, el argumento
NUM, es decir, que devuelve el entero ms grande que sea
109.
menor o igual que la expresin numrica
especificada.
110. SELECT FLOOR ( 25 , 25 ), FLOOR ( 28 , 5 ) FROM
DUAL;
3. ROUND ( M [,N] ) Devuelve un valor numrico M, redondeado a
N decimales. N indica la posicin en la que redondeamos.
111. Si N
se
omite
o
tiene
el
valor
0
(predeterminado), M se redondea. Si se especifica un
valor distinto de 0, M se trunca.
112. SELECT ROUND ( 45.223 , 2 ) FROM DUAL;
4. TRUNC ( M [,N] ) Trunca un nmero M a la cantidad de
decimales especificada por el segundo argumento N. Redondea un
113. nmero dado de forma normal, sin decimales. N
indica la posicin en la que redondeamos.
114. Si N
se
omite
o
tiene
el
valor
0
(predeterminado), M se redondea. Si se especifica un
valor distinto de 0, M se trunca.
115. SELECT TRUNC ( 45.223 , 2 ) FROM DUAL;
116.
117.

Cadena de Caracteres

118. Son conjuntos de caracteres que pueden devolver caracteres o


nmeros. Slo devuelven nmeros LENGTH y INSTR. Todas estas funciones se
pueden anidar. Se subdividen en 13 grupos:

45

1.
2.

SUBSTR

3.

UPPER

4.

CONCAT

CAD1

CAD2

) Concatena 2 cadenas de palabras.


119. SELECT CONCAT ( HOLA , BUENOS DAS ) FROM

DUAL;

( CAD , M [ , N ] ) Devuelve una subcadena empezando por el


carcter indicado con M, devolviendo N caracteres.
120. Si no se indica N, se devuelven todos los
caracteres hasta el final.
121. SELECT SUBSTR ( BUENOS DAS , E , A ) FROM DUAL;

LOWER

(
(

5.

INITCAP

6.

REPLACE

7.

LPAD

CAD

CAD

)
)

Pasa todos los caracteres a maysculas.


122. SELECT UPPER ( PROBAR LO QUE HACE )

FROM DUAL;

Pasa todos los caracteres a minsculas.


123. SELECT LOWER (PROBAR LO QUE

HACE

FROM DUAL;

) Pone la inicial de cada palabra en maysculas y el


resto en minsculas.
124. SELECT INITCAP (PROBAR LO QUE HACE ) FROM
DUAL;
CAD

( CAD , C1 , C2 ) Devuelve la cadena reemplazando todas las


apariciones de C1 por C2.
125. SELECT REPLACE ( PROBAR X QUE LO HACE , X , POR
) FROM DUAL;
( CAD1 , NUM [ , CAD2 ] ) Sirve para decir que CAD1 debe tener un
nmero de caracteres determinado en NUM.
126.
Si faltan caracteres, se rellenan con espacios
en blanco aadidos a la izquierda de los caracteres
ya existentes. CAD2 nos indica los caracteres de
relleno si no queremos que sean espacios.
127. SELECT
FROM DUAL;

8.

RPAD

9.

LTRIM

LPAD

PROBAR

LO

QUE

HACE

, 16 , * )

( CAD1 , NUM [ , CAD2 ] ) Es lo mismo que LPAD, pero los caracteres


se aaden a la derecha.
128. SELECT RPAD ( PROBAR LO QUE HACE , 16 , * )
FROM DUAL;
( CAD1 , MUESTRA ) Borra caracteres de CAD1 por la izquierda
hasta que deja de encontrar el carcter de MUESTRA.
129. SELECT LTRIM ( PROBAR LO QUE HACE , A ) FROM
DUAL;

10. RTRIM ( CAD1 , MUESTRA ) Borra caracteres de CAD1 por la derecha


hasta que deja de encontrar el carcter de MUESTRA.
130. SELECT RTRIM ( PROBAR LO QUE HACE , A ) FROM
DUAL;
11. TRIM ( CAD1 , MUESTRA ) Borra caracteres de CAD1 por ambos lados
hasta que deja de encontrar el carcter de MUESTRA.
131. SELECT TRIM ( PROBAR LO QUE HACE , A ) FROM
DUAL;

46

12. LENGTH (
total.

CAD

Devuelve un nmero. Devuelve el nmero de caracteres

132. SELECT
DUAL;

LENGTH

PROBAR

LO

QUE

HACE

FROM

13. INSTR ( CAD1 , MUESTRA ) Devuelve un nmero. Devuelve la posicin de


la primera aparicin de MUESTRA en la cadena.
133. SELECT INSTR ( PROBAR LO QUE HACE , Q ) FROM
DUAL;
134.
135.
136.

Funciones de Fecha y Hora

137. Las funciones que no llevan parmetros trabaja en la tabla Dual,


porque son funciones de la Base de Datos.
138.

Se subdividen en 16 grupos:

1.

SYSDATE

Devuelve la fecha actual del servidor. Devuelve un tipo

2.

CURRENT_DATE
DATE.

3.

SYSTIMESTAMP

4.

CURRENT_TIMESTAMP

DATE.

Devuelve la fecha actual del cliente. Devuelve un tipo

Devuelve fecha y hora del servidor.


Devuelve fecha y hora del cliente con la

zona

horaria.
5.

LOCALTIMESTAMP

6.

SESSIONTIMEZONE

7.

DBTIMEZONE

8.

TZ_OFFSET
en ZONA.

9.

FROM_TZ

Devuelve fecha y hora del cliente sin la zona horaria.


Devuelve la zona horaria del cliente.

Devuelve la zona horaria del servidor.

ZONA

Devuelve la zona horaria de la zona geogrfica dada

( TIMESTAMP
una fecha y hora, con

VALOR_TIMESTAMP , ZONA ) Nosotros


VALOR_TIMESTAMP, y una zona geogrfica

le damos

139. con ZONA, y nos devuelve fecha


hora con la zona geogrfica incluida.

10. EXTRACT YEAR | | SECOND FROM FECHA Para buscar el valor de un


campo de fecha / hora especificado en la expresin.
11. ADD_MONTHS ( FECHA , NUM )
fecha especificada ( FECHA ).

Suma el nmero de meses (

NUM

) a la

12. MONTHS_BETWEEN ( FECHA1 , FECHA2 ) Devuelve el nmero de meses


entre FECHA1 y FECHA2.
140. Si FECHA1 es posterior a FECHA2 entonces el
resultado es positivo; si no ser negativo.
13. LAST_DAY
FECHA.

FECHA

Devuelve el ltimo da del mes introducido en

14. NEXT_DAY ( FECHA , CADENA ) Devuelve la fecha del primer da de la


semana indicado mediante CADENA posterior a FECHA.

47

141. CADENA debe contener un da de la semana en


el lenguaje de la sesin en la que nos encontremos,
es decir, de nuestra Base de Datos.
15. ROUND ( FECHA , FORMATO ) Devuelve la FECHA redondeada al formato
especificado con FORMATO.
142. El valor devuelto es siempre de tipo Date, es decir,
devuelve la fecha pero nunca la hora.
143. Si se omite FORMATO la fecha se redondea al da
ms cercano.
16. TRUNC ( FECHA , FORMATO ) Devuelve la FECHA truncada segn lo que se
especifique mediante FORMATO.
144. Por defecto, si no se especifica FORMATO se truca
al da ms cercano.
145.
146.
147.

Funciones de Conversin

148.

Se subdividen en 9 grupos:

1. CAST ( EXPR | (SUBQUERY) AS TIPO ) Convierte la EXPRESIN al TIPO de datos


indicado.
149. SELECT ENAME, CAST ( HIREDATE AS CHAR ) FROM
EMP;
2. ROWIDTOCHAR ( ROWID )
longitud es siempre 18.

Convierte el

ROWID

dado a tipo

150. SELECT ROWID FROM SCOTT.EMP


151. WHERE ROWIDTOCHAR ( ROWID )
;
3. CHARTOROWID (
CHAR, VARCHAR2,

CADENA )
NCHAR o

VARCHAR2

LIKE

cuya

%SAAB%

Convierte el valor dado en CADENA de tipo


NVARCHAR2 a un valor de tipo ROWID.
152. SELECT ENAME
153. WHERE
ROWID
=
CHARTOROWID
( AAAIPQAHOAAAAK3AAA ) ,
154. FROM SCOTT.EMP;

4. TO_CHAR ( FECHA , FORMATO ) Convierte un nmero o una fecha dado en


FECHA a una cadena de caracteres VARCHAR2 usando el
155. FORMATO pasado como parmetro.
156. Por defecto, todas las fechas se visualizan
utilizando el formato por defecto especificado en la
configuracin en la Base de Datos (normalmente DDMM-AA).
157. El usuario puede cambiar la forma en que se
visualizan las fechas, haciendo uso de la TO_CHAR y
especificando un formato concreto.
158. El formato debe ser especificado entre comillas
simples y es sensible a maysculas.

48

159. Para eliminar los espacios en blanco o los ceros


a la izquierda se puede utilizar el elemento de
formato FM.
160. SELECT TO_CHAR ( SYSDATE , DD-MM-AA ) FROM
DUAL;
5. TO_CHAR ( NMERO , FORMATO ) Convierte un nmero o una fecha dado
en NMERO a una cadena de caracteres VARCHAR2 usando el
161. usando el FORMATO pasado como parmetro.
162. La conversin de NUMBER a VARCHAR2 haciendo
uso del TO_CHAR se suele utilizar cuando se quiere
concatenar
un
valor
numrico
en
un
formato
determinado con una cadena de caracteres.
163. Oracle visualiza una cadena de caracteres
compuesta por el carcter # cuando el valor a
representar es mayor que el nmero de dgitos del
formato especificado.
164. SELECT TO_CHAR ( SYSDATE , DD-MM-AA ) FROM
DUAL;
6. TO_DATE ( CADENA , FORMATO ) Convierte una CADENA de caracteres en
una fecha con el FORMATO que le hemos indicado (DD-MM-AA).
165. Los elementos de formato sern los mismos que
los presentados en la funcin TO_CHAR.
166. SELECT TO_DATE ( 20020522 , YYYYMMDD ) FROM
DUAL;
7. TO_NUMBER (
un NMERO.

CADENA

FORMATO

167. SELECT

Convierte una
TO_NUMBER

CADENA

( 34434 )

de caracteres en
FROM DUAL;

8. TO_TIMESTAMP ( CADENA , FORMATO ) Convierte una CADENA de tipo de


datos CHAR, VARCHAR2, NCHAR o NVARCHAR2 a un valor del tipo
168. de datos TIMESTAMP.
169. El FORMATO puede o no especificarse. Dice el
tipo de CHAR que queremos. Si lo OMITIMOS, la
CADENA debe estar en el FORMATO por defecto del
tipo de datos TIMESTAMP.
170. SELECT TO_TIMESTAMP ( 2000-12-01 11:00:00 ,
YYYY-MM-DD HH:MM:SS ) FROM DUAL;
9. TO_YMINTERVAL ( CADENA ) Convierte una CADENA de tipo de datos CHAR,
VARCHAR2, NCHAR o NVARCHAR2 a un valor del tipo de
171. datos INTERVAL YEAR TO MONTH, el cual almacena
un periodo de tiempo mediante los campos de fecha y
hora.
172. SELECT HIREDATE , HIREDATE + TO_YMINTERVAL ( -0204 ) AS HIRE_DATE_YMINTERVAL FROM SCOTT.EMP WHERE
DEPNO=20;
10. TO_DSINTERVAL ( CADENA ) Convierte una CADENA de tipo de datos
VARCHAR2, NCHAR o NVARCHAR2 a un valor del tipo de

49

CHAR,

173. INTERVAL DAY TO SECOND.


174. SELECT EMPNO, ENAME FROM SCOTT.EMP
175. WHERE HIREDATE +
TO_DSINTERVAL ( 100
10:00:00 ) <= DATE 1990-01-01;
176.
177.
178.

Mscaras de Formato

179. El elemento de formato RR para fechas es similar al YY pero permite


especificar siglos diferentes. Se puede usar RR en lugar de YY cuando el
siglo del valor que se quiere convertir difiera del siglo actual del sistema.
YY siempre asume el siglo actual.
180.

El comportamiento de

RR

181.

182.

184.

185.

189.

se rige por la siguiente tabla:

186.

Si los 2 dgitos del ao estn


entre
0 - 49

187.

50 - 99

0 49

190. La fecha
devuelta est
en el SIGLO
ACTUAL

191. La fecha
devuelta est
en el SIGLO
ANTERIOR al
actual

50 99

194. La fecha
devuelta est
en el SIGLO
POSTERIOR al
actual

195. La fecha
devuelta est
en el SIGLO
ACTUAL

188. ltimos
dos dgitos
del ao actual
en el sistema
193.

183.

196.
197.
198.

Otras Funciones

199.

Se subdividen en 9 grupos:

1. NVL (

EXP1

EXP2

) Convierte un valor NULO a un valor actual.


200. En dnde EXPR1 es el valor origen o expresin que
puede contener un NULO y EXPR2 es el valor resultante en
el que se convierte el NULO.
201. Se puede utilizar la funcin NVL para cualquier tipo
de dato, pero el valor resultante siempre debe ser del
mismo tipo que la EXPR1.
202. SELECT
EMPLOYEE_ID,
FIRST_NAME,
COMMISSION_PCT,
203.
NVL ( COMMISSION_PCT , NO )

50

204. FROM
2.

NVL2

3.

NULLIF

EXP1

EXP2

EMPLOYEES;

, EXP3 ) Es una variacin de NVL.


205. Si EXP1 es NULO devuelve EXP3, y si no es NULO,
devuelve EXP2.
206. SELECT
EMPLOYEE_ID,
FIRST_NAME,
COMMISSION_PCT,
207.
NVL ( COMMISSION_PCT , SI , NO )
208. FROM EMPLOYEES;

( EXP1 , EXP2 )
son distintas devuelve

Devuelve

NULO

si las 2 expresiones son iguales. Si

EXP1.

209. SELECT
FIRST_NAME, LENGTH ( FIRST_NAME ),
LAST_NAME, LENGTH ( LAST_NAME ),
210.
NULIFF ( LENGTH ( FIRST_NAME ), LENGTH (
LAST_NAME ) )
211. FROM EMPLOYEES;
4.

COALESCE
NULA.

EXP1

EXP2

, ,

EXPN

Devuelve la primera expresin

NO

212. SELECT
LAST_NAME, EXPLOYEE_ID, MANAGER_ID,
COMMISSION_PCT,
213.
COALESCE ( TO_CHAR ( COMMISSION_PCT ),
214.
TO_CHAR ( MANAGER_ID ), NO
COMMISSION AND NO MANAGER ),
215. FROM EMPLOYEES;
216.
5.

DECODE
DEFAULT

( EXP1 , BUSQUEDA1 , RESULTADO1 [BUSQUEDA2 , RESULTADO2 , ] [ ,


] ) Xxxqqq XXXQQQ xxxqqqq XXXQQQ.
217. Se compara la expresin con BUSQUEDA1. Si son
iguales devuelve RESULTADO1. Si son distintos, devuelve
RESULTADO2 y as sucesivamente.
218. SELECT
EMPLOYEE_ID,
LAST_NAME,
SALARY,
DEPARTMENT_ID,
219.
DECODE ( DEPARTMENT_ID , 10 , SALARY *
2 , 20 , SALARY * 5 )
220. FROM EMPLOYEES;

221.
222.
223.

Variables de Entorno

224. Son funciones que no hace falta llamarlas con una tabla sino que
funcionan desde DUAL.
225.

Para ver todas las que tiene SQL podemos usar el siguiente cdigo:

SHOW ALL.

226.

Para usarlas:

51

227. SET SQLPROMPT QU QUIERES?


228. SELECT * FROM V$INSTANCE;
229.
1.

Se subdividen en 3 grupos:

Nos da el IDENTIFICADOR DE USUARIO del usuario que est conectado y


lanza la SELECT.
230. SELECT UID FROM DUAL;
2. USER Nos da el USUARIO que est conectado y lanza la SELECT.
231. SELECT USER FROM DUAL;
3. USERENV ( OPCION ) Nos da las VARIABLES DE ENTORNO del usuario. Hay 3
opciones:
A. LANGUAJE Nos devuelve el lenguaje de la sesin del
usuario.
B. SESSIONID Nos devuelve las sesiones que tiene
abiertas el usuario.
C. TERMINAL Nos devuelve desde qu terminal est
conectado el usuario.
232. Todo esto est en la vista V$SESSION.
233. SELECT * FROM V$SESSION;
UID

234.
235.
236.
237.
F(
238.

Funciones de Grupo

De varias operaciones devuelve un valor:


) SALIDA ( 1 VALOR ).

ENTRADA

(1

VALOR

FUNCION

Pueden ser:

1. DISTINCT Indica que deben eliminarse los valores duplicados antes de


evaluar la funcin.
239. SELECT DISTINCT (COMMISSION_PCT) FROM EMPLOYEES,
2. ALL No se suele escribir porque es la genrica. Es como si no se
pusiera nada. Es lo contrario a DISTINCT.
240. SELECT [ALL] (COMMISSION_PCT) FROM EMPLOYEES,
241. Todas las funciones de grupo tienen en comn que no evalan los
valores nulos. Por eso debemos tener muy en cuenta cmo queremos
agrupar los datos.
242.

Hay 7 tipos:

1. AVG Retorna el promedio de los valores de una columna o expresin.


Es la media aritmtica.
243. SELECT AVG ( [ DISTINTC | ALL ] COLUMNA )
2. COUNT Retorna la cuenta del nmero de filas de una consulta. Es la
cantidad de filas con expresin no nula. Si queremos que se
244. cuenten todas las filas incluyendo las duplicadas y los
valores nulos aadiramos *.

52

245.
3. MAX
4. MIN

Retorna el valor mnimo de una columna o expresin.


247. SELECT MIN ( [ DISTINTC | ALL ] COLUMNA )

5. STDDEV
6. SUM

COLUMNA

Retorna el valor mximo de una columna o expresin.


246. SELECT MAX ( [ DISTINTC | ALL ] COLUMNA )

SELECT COUNT ( * | [ DISTINTC | ALL ]

Es la desviacin estndar.
248. SELECT STDDEV ( [ DISTINTC | ALL ]

COLUMNA

Retorna la suma de los valores de una columna o expresin.


249. SELECT SUM ( [ DISTINTC | ALL ] COLUMNA )

7. VARIANCE

Es la varianza.
250. SELECT VARIANCE ( [ DISTINTC | ALL ]

COLUMNA

251. Todas las funciones de grupo tienen en comn que no evalan los
valores nulos. Por eso debemos tener muy en cuenta cmo queremos
agrupar.
252.

Nota

253.

El nmero mximo de columnas que puede tener una tabla es 1000.

254.
255.

VER

EJERCICIO

257.

VER

EJERCICIO

03. HOSPITAL. CONSULTAS. HOJA 4.


256.
04. HOSPITAL. CONSULTAS. HOJA 5.

258.
259.
260.

Combinacin de Tablas: Join

261. La unin de varias tablas se hacen a travs de JOIN. An se utiliza y


sirve la sintaxis antigua, pero la nueva es mucho ms efectiva y
productiva por lo que deberemos usarla siempre que podamos.
262.

Hay 4 tipos diferente de


y UNIONES CRUZADAS.

JOIN: UNIONES NATURALES, UNIONES

SELF-JOIN,

UNIONES

EXTERNAS

263.
264.

Uniones Naturales

265. Une 2 tablas basndose en que el nombre de las columnas de ambas


tablas sea el mismo. Adems, el tipo de datos de las 2 columnas tienen
que ser equivalentes. Si esto no se cumple, se producir un error.
266.

SELECT LISTA_DE_COLUMNAS FROM TABLA1

267.

NATURAL JOIN TABLA2;

53

269.
268.
AXIS

SINT
NUEVA

270.
273.

271.272.
SELECT LISTA_DE_COLUMNAS FROM TABLAS

274. WHERE
TABLA2.NB_COLUMNA1

TABLA1.NB_COLUMNA1

275. AND
TABLA2.NB_COLUMNA2

TABLA1.NB_COLUMNA2

278. SINT
= 277.AXIS
ANTIGUA

276. AND
TABLA2.NB_COLUMNA3;

TABLA1.NB_COLUMNA3

279.
280. Es un modo de unin que produce algunos resultados errneos, sobre
todo cuando se aaden o renombran columnas, y no permite realizar
uniones de ms de 2 tablas ya que se corre el riesgo de obtener
productos cartesianos.
281.

Es mejor evitar esta clusula en lo posible.

282.

Los

campos

en

comn

slo

se

muestran

una

vez.

283. A este tipo de uniones podemos aadirle 2 clusulas: la clusula USING


y la clusula ON.
284.
285.

Clusula Using

286. Con esta clusula se puede especificar manualmente las columnas de


las tabas que estn implicadas en una JOIN.
287. Ni la NATURAL JOIN ni la clusula USING permiten que se cualifique la
columna o columnas que relacionan las tablas, ya que se selecciona
automticamente la tabla usada.
288. Si es necesario unir por varias columnas dentro de la clusula
se deben especificar separadas por comas.
289.

USING,

SELECT LISTA_DE_COLUMNAS FROM TABLA1

290. JOIN

TABLA2 USING COLUMNA;

291.
292.

Clusula On

293. Esta clusula, adems de las columnas implicadas, permite modificar la


condicin o condiciones de unin.
294.

Este tipo de clusulas se pueden encadenar para unir varias tablas.


295.

SELECT LISTA_DE_COLUMNAS FROM TABLA1

296. JOIN
297. JOIN

TABLA2 ON NB_COLUMNA1

=
NB_COLUMNA1 =

NB_COLUMNA2;

TABLA3 ON

NB_COLUMNA2;

54

298.
299.
300.

Uniones Self-Join

301. En ocasiones puede ser necesario unir una tabla consigo misma para
obtener un resultado determinado. Para ello, se debe instar la tabla 2
veces en la clusula FROM, asignndole un alias diferente.
302.

SELECT LISTA_DE_COLUMNAS

303.

FROM TABLA_ALIAS1 JOIN TABLA_ALIAS2

304. ON
ALIAS2.COLUMNA2;

ALIAS1.COLUMNA1

307.
310.

306.
305.
AXIS

SINT
NUEVA

308.309.
SELECT LISTA_DE_COLUMNAS

311.

FROM

314. SINT
313.AXIS
ALIAS1. COLUMNA1 = ALIAS2.
ANTIGUA

TABLA_ALIAS1, TABLA_ALIAS2

312. WHERE
COLUMNA2;

315.
316.

Veamos un ejemplo de cada tipo de sintaxis:


317.

SELECT E.EMPLOYEE_ID, M.EMPLOYEE_ID

318.

FROM EMPLOYEES E JOIN EMPLOYEES M

319. ON

E.MANAGER_ID

M.EMPLOYEE_ID;

322.
325.

321.
320.
AXIS

SINT
NUEVA

323.324.
SELECT E.EMPLOYEE_ID, M.EMPLOYEE_ID

326.

FROM EMPLOYEES E, EMPLOYEES M

327. WHERE

E.MANAGER_ID

M.EMPLOYEE_ID;

329. SINT
328.AXIS
ANTIGUA

330.
331.

Uniones Externas: Outer Join

332.

Hay 3 tipos: IZQUIERDA, DERECHA y COMPLETA.

333. Los registros que no cumplen las condiciones de unin entre las
tablas, no aparecen en los resultados de las consultas, sin embargo, es
posible mostrar estos registros utilizando las UNIONES EXTERNAS.
334. Estas uniones muestran tanto los registros que cumplen las
condiciones como los que no las cumplen, mostrando la informacin que
falta como valores NULOS.
335. El operador que marca la UNIN EXTERNA en el modo SQL clsico (es
decir, en la sintaxis antigua) de ORACLE es el ( + ), que se coloca junto a

55

la condicin de unin que tiene informacin insuficiente, es decir, junto a


la columna de la tabla dbil.
336. El operador de UNIN EXTERNA solamente puede aparecer en un lado de
la igualdad y no puede utilizarse con operadores IN ni condiciones OR.
337. Si lo usamos con operadores
error ORA-01719.

IN

o condiciones

OR,

nos devolver el

338. A continuacin veremos los 3 tipos de uniones externas que hay, tanto
su sintaxis actual como la antigua.
1. LEFT OUTER JOIN Recupera todos los resultados de la tabla situada a la
izquierda de la condicin, aunque no haya coincidencias con la
339.
tabla que est a la derecha.
340.

SELECT
DEPARTMENTS D

EMPLOYEE_ID,

DEPARTMENT_NAME

FROM

341.

LEFT
OUTER
JOIN
EMPLOYEES
(E.DEPARTMENT_ID = D.DEPARTMENT_ID);

344. SELECT
EMPLOYEE_ID,
EMPLOYEES E, DEPARTMENTS D
345.

WHERE
D.DEPARTMENT_ID;

DEPARTMENT_NAME

E.DEPARTMENT_ID

ON

343.
342.
AXIS

SINT
NUEVA

FROM

347. SINT
346.AXIS
=
ANTIGUA

348.
2. RIGHT OUTER JOIN Recupera todos los resultados de la tabla situada a
la derecha de la condicin, aunque no haya coincidencias con la
349. tabla que est a la izquierda.
350. SELECT
DEPARTMENTS D

EMPLOYEE_ID,

DEPARTMENT_NAME

FROM

351.

RIGHT
OUTER
JOIN
EMPLOYEES
(E.DEPARTMENT_ID = D.DEPARTMENT_ID);

ON

354.

353.
352.
AXIS

SINT
NUEVA

355.356.

357. SELECT
EMPLOYEE_ID,
EMPLOYEES E, DEPARTMENTS D
358.

WHERE
D.DEPARTMENT_ID;

DEPARTMENT_NAME

E.DEPARTMENT_ID

FROM

360. SINT
359.AXIS
)
ANTIGUA

361.
3. FULL OUTER JOIN Recupera todas las filas de la tabla situada a la
derecha de la sentencia aunque no haya coincidencia con la de la
362. izquierda, y tambin recupera todos los registros de la
tabla izquierda aunque no exista ninguna coincidencia con la
derecha. No se poda realizar con la sintaxis antigua.
363.

SELECT

EMPLOYEE_ID, DEPARTMENT_NAME

56

FROM

DEPARTMENTS

364. FULL OUTER JOIN


= D.DEPARTMENT_ID);

EMPLOYEES E ON

(E.DEPARTMENT_ID

365.
366.

Uniones Cruzadas

367. Equivale al producto cartesiano en la unin de 2 tablas. Slo se utiliza


para comparar test porque devuelve muchos resultados.
368.

SELECT LISTA_DE_COLUMNAS FROM TABLA1

369.

CROSS JOIN TABLA2;

370.
371.
372.

La Expresin Case

373. Esta expresin nos devolver una columna. Nos permite relacionar
expresiones del tipo IF THEN ELSE en una sola instruccin sin tener que
llamar a procedimientos externos.
374.

Hay 2 tipos de la expresin:

1. CASE SIMPLE Asocia una o ms secuencias de instrucciones con un


valor. La instruccin CASE sencilla elige qu secuencia de comandos
375.
se ejecutan, basndose en una expresin que devuelve
uno de esos valores.
376.
Permite elegir cul de varias sentencias de instrucciones
ejecutar en base a los resultados de una sola expresin.
377.

SELECT COLUMNAS, CASE COLUMNA

378.

WHEN VALOR1 THEN EXPRESION1

379.

WHEN VALOR2 THEN EXPRESION2

380.
381.

WHEN VALORN THEN EXPRESIONN

382.

END

383. FROM

[ ALIAS ],

TABLA;

2. CASE CONDICIONAL La lgica es la misma, pero nosotros establecemos la


condicin.
384. Elige cul de una o ms secuencias de instrucciones
ejecutar mediante la evaluacin de una lista de condiciones
booleanas. Se ejecuta la secuencia de instrucciones asociadas
con la primera condicin que se evala como TRUE.
385.

SELECT COLUMNAS, CASE

386.

WHEN CONDICION1 THEN EXPRESION1

387.

WHEN CONDICION2 THEN EXPRESION2

388.

57

389.

WHEN CONDICIONN THEN EXPRESIONN

390.

ELSE EXPRESION_POR_DEFECTO

391.

END

392. FROM

[ ALIAS ],

TABLA;

393.
394.
395.

Subconsultas

396. Se utiliza cuando


encontrar.

a priori no sabemos qu valores nos vamos a

397. Una subconsulta es una


aparece dentro de otra
Normalmente se utiliza para
conjunto de resultados de la
en la lista de seleccin.

sentencia SELECT, llamada CONSULTA HIJA, que


sentencia SELECT, llamada CONSULTA PADRE.
filtrar una clusula WHERE o HAVING con el
subconsulta, aunque tambin pueden utilizarse

398. Una subconsulta tiene la misma sintaxis que una sentencia SELECT
normal, exceptuando que aparece ejecutada entre parntesis:
399.

SELECT LISTA_DE_COLUMNAS

| *

400.

FROM LISTA_DE_TABLAS

401.

WHERE EXPRESION OPERADOR

SELECT LISTA_DE_COLUMNAS

402.

FROM LISTA_DE_TABLAS

403.

WHERE EXPRESION OPERADOR

| *

);

404. La subconsulta se puede encontrar en la lista de seleccin, en la


clusula WHERE o en la clusula HAVING de la consulta principal.
405.

Tiene 3 restricciones:

1. No puede contener la clusula ORDER BY.


2. No puede ser la UNION de varias sentencias SELECT.
3. Si la subconsulta aparece en la lista de seleccin, o est asociada a un
operador igual = slo puede devolver un nico registro.
406. Siempre se ejecuta primero la SUBCONSULTA HIJA, y su resultado sirve
para filtrar la SUBCONSULTA PADRE.
407.

Las subconsultas se pueden usar para:

1. Creacin de tablas.
2. Creacin de vistas.
3. Modificaciones
4. Clusulas
5. Clusula

UPDATE.

WHERE

HAVING.

FROM.

58

408.
409.

Hay 2 tipos de subconsultas anidadas:

A. SUBCONSULTAS
410.

DE

FILA SIMPLE.

Tiene 6 tipos de comparadores:


1. =

Igual.

2. >

Mayor que.

3. > =

4. <

Menos que.

Mayor o igual que.

5. < =

Menor o igual que.

6. < >

Distinto.

411.
B. SUBCONSULTAS
412.

DE

FILA MLTIPLE.

Tiene 3 tipos de comparadores:


1.

IN

Igual o algn miembro de la lista.

2.

ANY

Condicin con alguno de los valores.

3.

ALL

Condicin con todos los valores.

413. Las subconsultas anidadas son aquellas SUBCONSULTAS HIJAS que constan
de varias SELECT unidas y que juntas conformarn el filtro para la
SUBCONSULTA PADRE.
414.

VER

EJERCICIO

416.

VER

EJERCICIO

418.

VER

EJERCICIO

05. HOSPITAL. CONSULTAS. HOJA 6.


415.
06. HOSPITAL. CONSULTAS. HOJA 7.
417.
07. HOSPITAL. CONSULTAS. HOJA 9.

419.
420.
421.

Sentencia Insert

422. Cambia los datos de la tabla. Lo que hace es aadir filas a una tabla.
Inserta la fila entera SIEMPRE. Lo que no queramos aadir, lo pondremos
como NULL.
423. Estas filas que vamos a insertar deben respetar todas las restricciones
de la tabla.
424.

Esta sentencia se puede escribir de 2 formas:

1. El orden en el que se asignen los valores en la clusula VALUES tiene que


coincidir con el orden en que se definieron las columnas en la creacin

59

del objeto tabla, dado que los valores se asignan por posicionamiento
relativo.

427.

425.

INSERT INTO NB_TABLAS

426.

VALUES

SERIE_DE_VALORES

);

Ejemplo:
428.

INSERT INTO DEPARTMENTS

429.

VALUES

( 56, I + D + I +

+ I , 121, 1700 );

2. En este caso los valores se asignarn a cada una de las columnas


mencionadas por posicionamiento relativo.
430.
Es necesario que por lo menos se asignen valores a todas aquellas
columnas que no admiten valores nulos en la tabla ( not null).

433.

431.

INSERT INTO NB_TABLA

432.

VALUES

VALOR1

COLUMNA1

VALOR2

,,

COLUMNA2

VALORN

,,

COLUMNAN

);

Ejemplo:
434.

INSERT INTO DEPARTMENTS

435.

VALUES

( 70, I + D +

MARK

DEPARTMEN_ID

DEPARTMENT_NAME

);

436.
437.
438.

Sentencia Insert Multitabla

439. Para insertar un subconjunto de filas de una tabla en otra se escribe


una sentencia INSERT con una SUBSELECT interna.
440.
441.

Tiene 2 formatos posibles:

1. El primer formato asigna a las columnas los valores recuperados en la


sentencia SELECT. Inserta en la tabla todas las filas que se recuperen en
la SELECT.
442.

INSERT INTO NB_TABLA

443.

VALUES

2. En el segundo
iguales.

([

COLUMNA1

SENTENCIA SELECT

formato, las

INSERT INTO NB_TABLA FROM

445.

FROM NB_TABLA_FUENTE;

,,

COLUMNAN

] );

estructuras

444.

COLUMNA2

de

las

tablas

tienen

que

ser

446.
447.

Existen 4 tipos de

INSERT

multitabla:

1. INSERT INCONDICIONAL El resultado de la SELECT se inserta en todas las


tablas sin tener en cuenta las condiciones.
448.
Su sintaxis sera:

60

449. INSERT
450.

ALL COLUMNAS, CASE COLUMNA


NB_TABLA1
, ALIASN )

VALUES

ALIAS1

INTO NB_TABLA2
ALIAS2 , , ALIASN )

VALUES

ALIAS1

VALUES

ALIAS1

INTO

ALIAS2

451.

452.
453.

INTO

ALIAS2

454.

NB_TABLAN
, ALIASN )

456.457.

SELECT
NB_COLUMNA_ORIGINAL1
ALIAS1, NB_COLUMNA_ORIGINAL2 ALIAS2,
, NB_COLUMNA_ORIGINALN ALIASN

455.

FROM NB_TABLA_FUENTE

458.

WHERE CONDICION_DE_BUSQUEDA

459.

GROUP BY LISTA_COLUMNAS

460.

HAVING CONDICION_DE_BUSQUEDA

461.

463.
462.

SUB

CONSULTA

ORDER BY LISTA_COLUMNAS;

464.
2. INSERT ALL CONDICIONAL Se insertarn los datos slo en las tablas que
cumplen la condicin.
465. Para cada INTO ponemos una condicin.
466. Las condiciones que pongamos no tienen por qu
ser excluyentes, es decir, que para cada tabla pueden
ser distintas.
467. Su sintaxis sera:
468.

INSERT ALL COLUMNAS, CASE COLUMNA

469.

WHEN CONDICION1 THEN

470.
COLN )
471.

COL1

COL2

,,

COL1

COL2

,,

COL2

,,

WHEN CONDICION2 THEN

472.
COLN )
473.

INTO NB_TABLA1 VALUES

INTO NB_TABLA2 VALUES

WHEN CONDICION1, CONDICION2 THEN

474.
COLN )

INTO NB_TABLA3 VALUES

475.

SELECT COL1

476.

FROM NB_TABLA_FUENTE;

477.

61

COL2

,,

COLN

COL1

3. INSERT FIRST CONDICIONAL La fila recuperada por la SELECT slo se


inserta en la primera tabla encontrada en la condicin.
478.
Es lo que ms se parece a condiciones
excluyentes.
479.

INSERT FIRST

480.

WHEN CONDICION1 THEN

481.
COLN )
482.

COL1

COL2

,,

COL1

COL2

,,

COL1

COL2

,,

WHEN CONDICION2 THEN

483.
COLN )
484.

INTO NB_TABLA1 VALUES

INTO NB_TABLA2 VALUES

ELSE

485.
COLN )

INTO NB_TABLA3 VALUES

486.

SELECT COL1

COL2

,,

487.
488.

FROM NB_TABLA_FUENTE;

COLN

4. PIVOTING INSERT Se utiliza para insertar en una tabla relacional valores


que no son relacionales.
489.
El pivoting es una operacin en la que se debe crear una
transformacin tal que cada registro de cualquier flujo de entrada
como, por ejemplo, una tabla de base de datos no relacional, se
debe convertir en varios registros para un entorno de tablas de
base de datos ms relacional.
490.

INSERT ALL

491.

INTO NB_TABLA VALUES

COL1

COL2

COL3

492.

INTO NB_TABLA VALUES

COL1

COL2

COL3

493.

INTO NB_TABLA VALUES

COL1

COL2

COL3

494.

495.

SELECT COL1

COL2

,,

496.

FROM NB_TABLA_FUENTE;

COLN

| *

497.
498.

Sentencia Update

499. Actualiza valores de una o ms columnas para un subconjunto de filas


de una tabla.
500.

Para guardar los cambios hay que ejecutar

501.

Para cancelar la modificacin podemos hacer

62

COMMIT.
ROLLBACK.

502. Actualiza los campos correspondientes junto con los valores que se le
asignen, en el subconjunto de filas que cumplan la condicin de seleccin.
Su sintaxis es:
503.

UPDATE NB.TABLA
COLUMNA2 = VALOR ]

504.

SET

COLUMNA

WHERE CONDICION

VALOR

[ ,

506.
505.
AXIS

];

507.

SINT
NUEVA

508.509.

510.

UPDATE NB.TABLA SET COLUMNA

511. ( SELECT
WHERE CONDICION );

COLUMNA

FROM

NB_TABLA

513. SINT
512.AXIS
ANTIGUA

514. Si no se pone condicin de seleccin, la actualizacin se da en todas


las filas de la tabla.
515.

Si se desea actualizar

NULOS,

se asignar el valor

NULL.

516.
517.
518.

Sentencia Delete

519.

Borra una o ms filas de una tabla, dependiendo de la condicin WHERE.

520.

Para guardar cambios hay que ejecutar COMMIT.

521.

Para cancelar el borrado podemos hacer ROLLBACK.

522.

La sintaxis es la siguiente:
523.

DELETE FROM NB_DE_TABLA

524.

WHERE CONDICION

];

525.

CUIDADO

526.

Si no se pone condicin de seleccin, borra todas las filas de la tabla.

527.
528. Por ejemplo, si ejecutamos:
tabla.
529. Por ejemplo, si ejecutamos:
se borrar slo un registro.

DELETE

FROM

PEDIDOS;

se borrar toda la

DELETE FROM PEDIDOS WHERE COD_PEDIDO

= 15;

530.
531.
532.

Sentencia Merge

533. Oracle soporta la sentencia MERGE para operaciones INSERT, UPDATE y


DELETE. Mediante esta sentencia, puede actualizar, insertar o suprimir una

63

fila condicionalmente en una tabla, con lo que se evitan varias sentencias


DML. La decisin de actualizar, insertar o suprimir en la tabla destino se
basa en una condicin de la clusula ON.
534. Si la fila no existe, insertar la fila, y si existe, la actualizar o la
borrar.
535. Hay que tener privilegios de objeto INSERT y UPDATE en la tabla
destino y el privilegio de objeto SELECT en la tabla origen. Para especificar
la clusula DELETE de la clusula MERGE_UPDATE_CLAUSE, tambin debe
tener el privilegio de objeto DELETE en la tabla destino.
536. La sentencia MERGE es determinista. No se puede actualizar varias
veces la misma fila de la tabla destino en la misma sentencia MERGE. Un
enfoque alternativo es utilizar bucles PL/SQL y varias sentencias DML. La
sentencia MERGE, sin embargo, es fcil de utilizar y se expresa de forma
ms sencilla como una nica sentencia SQL.
537. La sentencia MERGE es adecuada en diferentes aplicaciones de
almacn de datos. Por ejemplo, en una aplicacin de almacn de datos, es
posible que necesite trabajar con datos procedentes de varios orgenes,
algunos de los cuales pueden estar duplicados. Con la sentencia MERGE,
puede agregar o modificar filas condicionalmente.
538.
539.

Fusin de Filas

540. Puede
actualizar
filas
existentes
e
condicionalmente mediante la sentencia MERGE.
541.

insertar

nuevas

filas

En la sintaxis:

542. Clusula INTO especifica la tabla destino que se va a actualizar o en


la que se va a insertar.
543. Clusula USING identifica el origen de los datos que se van
actualizar o insertar; puede ser una tabla, una vista o una subconsulta.

544. Clusula ON condicin segn la cual la operacin MERGE actualiza o


inserta WHEN MATCHED | indica al servidor cmo responder a los
resultados de la condicin de unin WHEN NOT MATCHED.
545.

Su sintaxis:
546.

MERGE NB_DE_TABLA ALIAS_TABLA

547.

USING

548.

ON

549.

WHEN MATCHED THEN

550.

553.

TABLA

VISTA

CONDICION_DE_JOIN

SUBCONSULTA ALIAS

UPDATE SET

551.

COL1

VALOR1,

552.

COL2

VALOR2

WHEN NO MATCHED THEN

554.

INSERT TO

LISTA_COLUMNAS

64

VALUES

VALORES

);

555.
556.

Veamos un ejemplo:
557.

MERGE SALARIOS SAL

558.

USING

SELECT EMPLOYEE_ID, SALARY, DEPARTMENT_ID

559.

FROM EMPLOYEES

560.

WHERE DEPARTMENT_ID BETWEEN

561.

ON

562.

WHEN MATCHED THEN

563.
564.

SAL.EMPLOYEE_ID

10

EMP.EMPLOYEE_ID

UPDATE SET SAL.SALARY

SAL.SALARY

AND

80 )

EMP

)
*2

WHEN NO MATCHED THEN

565.

INSERT VALUES

EMP.EMPLOYEE_ID, EMP.SALARY

);

566.
567.
568.
569.

Sentencias Transaccionales

570.

Todos los cambios en la Base de Datos los manejamos bajo el trmino


TRANSACCIN. Una transaccin es un proceso que se ejecuta completo o no
se ejecuta. Esto es as para poder garantizar la CONSISTENCIA DE DATOS.

571. Una transaccin Oracle consta


sentencia DDL o una sentencia DCL.

de

varias

sentencias

DML

una

572. La transaccin debe tener CONSISTENCIA DE DATOS, es decir, que se


garantice que los datos no son modificados por varios usuarios a la vez,
pudiendo generar prdidas de informacin. Para evitar esto, la consistencia
de datos utiliza Bloqueos que, bsicamente, consisten en que el primero
que accede a los datos se que con ellos (ORACLE LOS BLOQUEA ) hasta que
los suelte (ORACLE LOS DESBLOQUEA ). Si un segundo usuario intenta acceder a
ellos mientras el primer usuario an los est actualizando, se queda en la
cola de espera y hasta que el primer usuario suelte los datos, no se
podr realizar los cambios que haya mandado.
573. Tenemos una opcin para que cuando realizamos una SELECT, se
bloqueen las filas que nos devuelve para que no se puedan cambiar los
datos hasta que se acabemos de escribir todos los cambios que vamos a
realizar. Su sintaxis sera como la de una SELECT normal, pero aadiendo
FOR UPDATE al final:
574.

SELECT DATOS_DE_LA_SELECT FOR UPDATE

575. Se puede controlar la lgica de transacciones


sentencias COMMIT, SAVEPOINT y ROLLBACK.

con el uso de las

576. Cuando una transaccin es interrumpida por que el sistema falla, la


transaccin entera es automticamente deshecha. Esto previene errores por
causas no deseadas en el cambio de los datos y regresa las tablas de su
estado al estado del ltimo COMMIT. De esta manera, el servidor de Oracle

65

protege la integridad de las tablas. Con SQL*PLUS, una salida normal es


lograda escribiendo el comando EXIT en la lnea de comandos. Cerrar la
ventana es interpretado como una salida anormal.
577.
578.
579.

Sentencia Commit

580. Finaliza la transaccin actual haciendo permanentes todos los cambios


pendientes. Cada dato que cambia durante la transaccin es temporal
hasta que la transaccin es cometida (COMMIT).
581. El estado
ROLLBACK es:

de

los

datos

antes

de

usar

las

sentencias

COMMIT

1. Las operaciones de manipulacin de datos afectan en primera instancia el


buffer de la base de datos. Por lo tanto, el estado previo de los datos se
puede recuperar.
2. Se puede revisar los resultados de las operaciones de manipulacin de
datos para consultar las tablas con el uso de la sentencia SELECT.
3. Otros usuarios no pueden ver los resultados de las operaciones de
manipulacin de datos hechas por el usuario actual. El servidor de Oracle
establece la consistencia para asegurar que cada usuario vea los datos
como existieron desde el ltimo COMMIT.
4. Las filas afectadas son bloqueadas, es decir, otros usuarios no pueden
cambiar los datos de las filas afectadas.
5. Se hacen permanentes todos los cambios pendientes con el uso de la
sentencia COMMIT.
582.

Despus de una sentencia COMMIT:

1. Los cambios de datos son escritos en la Base de Datos.


2. El estado previo de los datos es perdido permanentemente.
3. Todos los usuarios pueden ver los resultados de la transaccin.
4. Los bloqueos en las filas afectadas son liberados. Todas las filas estn
ahora disponibles para que otros usuarios realicen cambios.
5. Todos los SAVEPOINTS son borrados.
583. Oracle utiliza un COMMIT implcito antes y despus de cualquier
sentencia
DDL. As, incluso
si
la
sentencia
DDL
no
se
ejecuta
correctamente, no se puede deshacer la sentencia previa puesto que el
servidor a usado un COMMIT.
584.

Su sintaxis:

585.

Sentencia Rollback

586. Finaliza
pendientes.

la

COMIT

transaccin

actual

descartando

66

todos

los

cambios

587. La parte de una transaccin puede ser excluida con un ROLLBACK


implcito si en la ejecucin de una sentencia es detectado un error.
588. Si una sola sentencia DML falla durante la ejecucin en una
transaccin, su efecto es deshacer por medio de una sentencia de nivel
ROLLBACK, pero los cambios hechos por las anteriores sentencias DML en
la transaccin no son deshechos. Estos cambios pueden ser cometidos o
deshechos explcitamente por el usuario.
589. Termine sus transacciones
sentencias COMMIT y ROLLBACK.
590.

explcitamente

con

la

ejecucin

de

Despus de una sentencia ROLLBACK:

1. Los cambios a los datos son deshechos.


2. El estado previo de los datos es restablecido.
3. Los bloqueos de las filas afectadas son liberados.
591.

Su sintaxis:

ROLLBACK

592.
593.
594.

Sentencia Savepoint

595. Marca un punto de la transaccin actual. Es como guardar puntos de


restauracin para luego poder volver a ellos y no borrarlo todo. Deshace
todos los cambios pendientes con el uso de la sentencia ROLLBACK.
596.

Para crear un punto de restauracin la sintaxis es:


597. SAVEPOINT

598.

NB_PUNTO_RESTAURACION

Para volver hasta un punto de restauracin:


599. ROLLBACK

TO NB_PUNTO_RESTAURACION

67

600.
601.

Ejercicios

68

602.

Ejercicios

603.
604.

01. Creacin de Tablas

605.

Vamos a crear una tabla nueva. Para ello debemos tener permisos.

606. Crearemos una tabla dentro de CON.HR TABLES que se llamar


PRODUCTOS, especificando el tipo de datos, el nmero de columnas, la
restriccin y un valor por defecto. Para ello escribimos el cdigo:
607.
608.
609.
610.
611.
612.
613.

CREATE TABLE PRODUCTOS


(
ID_PRODUCTO NUMBER (4),
NOMBRE VARCHAR2 (100),
PRECIO_UNIDAD NUMBER (4,2),
TAMANIO6 VARCHAR2 (25)7
)

614. Acabamos de crear una tabla vaca. Para ejecutarla pinchamos sobre
PLAY o sobre PLAY_CON_ESCOBILLA. Si se ha creado bien, debajo de las
conexiones debe salir el mensaje CREATE TABLE STATEMENT PROCESSED.
615. Para crear una tabla temporal, slo habra que cambiar la primera
lnea del cdigo anterior y aadir otra lnea detrs del bloque:
616. CREATE GLOBAL TEMPORARY TABLE PRODUCTOS_AUX
617. (
618. ID_PRODUCTO NUMBER (4),
619. NOMBRE VARCHAR2 (100),
620. PRECIO_UNIDAD NUMBER (4,2),
621. TAMANIO VARCHAR2 (25)
622. )
623. ON COMMIT DELETE ROWS Para borrar los datos de la tabla o, en su
lugar,
624. ON COMMIT PRESERVE ROWS Para mantener los datos de la tabla
durante la sesin.
625.

Para crear una tabla con restricciones de INTEGRIDAD

DE

ENTIDADES:

626. CREATE TABLE EMPLEADOS


627. (
628. ID_PRODUCTO NUMBER (4) CONSTRAINT PROD_ID_PROD_PK PRIMARY KEY,
629. NOMBRE VARCHAR2 (100) CONSTRAINT PROD_NOMBRE_NN NOT NULL,
630. PRECIO_UNIDAD NUMBER (4,2) CONSTRAINT PROD_PREC_CK CHECK (PRECIO_
> 0),

UNIDAD

6
Los nombres de los
pueden.

OBJETOS

no pueden llevar la letra . Los datos s

7
La ltima fila nunca lleva coma ( , ) al final.

69

631.
632.
633.
634.

PRECIO_SIN_IVA NUMBER (4,2),


CONSTRAINT PROD_PREC_SIN_IVA_CK CHECK (PRECIO_SIN_IVA < PRECIO_UNIDAD),
TAMANIO VARCHAR2 (25) CONSTRAINT PROD_TAM_UQ UNIQUE

635.

Para crear una tabla con restricciones de INTEGRIDAD REFERENCIAL:

636.
637.
638.
639.
640.
641.

CREATE TABLE
(
COD_EMPLEADO

642.

EMPLEADOS

NUMBER (6) CONSTRAINT EMPLE_COD_PK PRIMARY KEY,


NOMBRE VARCHAR2 (100),
SALARIO NUMBER (8,2),
COD_DEPARTAMENTO
NUMBER (4)
CONSTRAINT EMPLE_COD_DEPT_FK
DEPARTMENTS (DEPARTMENT_ID)

70

REFERENCES

643.

02. Create Table

644. Crear las


DEPT
645.
646. Col
umnas
650. dep
tno
654. dna
me
658. loc
662.
EMP
663.
664. Col
umnas
668. em
pno
672. ena
me
676. job
680. ma
nager
684. hir
edate
688. sal
692. co
mm
696. dep
tno
700.
SALGRADOS
701.
702. Col
umnas
706. gra
do

siguientes tablas:

647.

Descripcin

648.

651. Cdigo del


departamento, numrico.
655. Nombre del
departamento.
659. Localidad donde se
ubica el departamento.

665.

Descripcin

649.

666.

669. Cdigo del


empleado, numrico.
673. Nombre del
empleado.
677. Trabajo que realiza.
681. Cdigo del
manager.
685. Fecha de alta en la
empresa.
689. Salario.
693. Comisin.

667. Clave ajena a dept


(deptno)

697. Cdigo del


departamento.

703.

Descripcin

704.

707. Cdigo de los


distintos grados de
salario.
ma 711. Salario mximo
dentro del grado.
min 715. Salario mnimo
dentro del grado.

705. El salario mnimo es


obligatorio

710.
xsal
714.
sal
718.
REGIONES

71

719.
720. Col
umnas
724. id_r
egion
728. reg
ion_name
732. id_r
egion
736.
PAISES
737.
738. Col
umnas
742. id_
pais
746. no
mbre_pais
750. reg
ion
754. id_
pais
758.
759.
760.
761.
CLIENTES
762.
763. Col
umnas

721.

Descripcin

722.

725. Cdigo que


identifica la regin.
729. Nombre de la
regin, Europa, etc.
733. Es obligatorio.

739.

723.

Descripcin

740.

743. Cdigo que


identifica al pas.
747. Nombre del pas.

741.

Clave ajena a regiones

751. Donde se
encuentra.
755. Es clave primaria
con nombre pais_id_pk.

764.

Descripcin

767. id_
cliente

768. Cdigo
identifica al cliente.

771. no
mbre_clie
nte

772.

766. Restricciones. Los


765.
siguientes valores deben ser
obligatorios: nombre_cliente,
que
apellido_cliente,
direccion_cliente,
cod_postal_cliente,
ciudad_cliente

775. ape 776.


llido_client
e
779. sex
o_cliente

780.

783. fec
ha_nac_cli
ente

784.

787. est
ado_client
e

788.

H o M

72

791. dir
eccion_cli
ente

792.

795. cod
_postal_cli
ente

796.

799. ciu
dad_client
e

800.

803. pro
vincia_clie
nte

804.

807. pai
s_cliente

808.

811. tel
812.
efono_clie
nte
815.
PROVEEDORES
816.
817. Col 818. Descripcin
umnas
821. id_ 822. Cdigo que
prove
identifica al proveedor.
825. no
826.
mbre_prov
e
829. ape 830.
llido_prove
833. ann 834. Ao de nacimiento
o_nac_pro del proveedor.
ve
837. est 838.
ado_prove
841. dir 842.
eccion_pro
ve
845. cod 846.
_post_prov
e
849. ciu 850.
dad_prove
853. pro 854.
vincia_pro
ve
857. pai 858.
s_prove

73

820. Restricciones. Los


819.
siguientes valores deben ser
obligatorios: nombre_cliente,
apellido_cliente,
direccion_cliente,
cod_postal_cliente,
ciudad_cliente

861. tel
862.
efono_pro
ve
865. em 866.
ail_prove
869.
LOCALIZACIONES
870.
871. Col 872. Descripcin
873.
umnas
875. id_l 876. Cdigo que
oc
identifica la localizacin.
879. dir 880.
eccion
883. cod 884.
874.
_postal
887. ciu 888.
dad
891. pro 892.
vincia
895. pai 896.
s
899.
900.
901.
902.
DEPARTMENTS
903.
904. Col 905. Descripcin
906.
umnas
908. dep 909.
artment_i
d
907.
912. dep 913.
artment_n
ame
916. id_ 917.
manager
920.
JOBS
921.
922. Col 923. Descripcin
924.
925.
umnas
926. id_j 927. Cdigo
que
ob
identifica al trabajo. No
numrico.
930. tra 931.

74

bajo
934.
_sal
938.
x_sal
942.

min 935.
ma

939.

EMPLOYEES

943.
944. Col 945. Descripcin
umnas
949. em 950. Cdigo que
ployee_id
identifica al empleado.
953. firs 954. Nombre.
t_name
957. last 958. Apellido.
_name
961. Em 962. Email.
ail
965. pho 966. Telfono.
ne_numbe
r
969. Hir 970. Fecha de alta.
edate
973. job 974. Cdigo que
_id
identifica el trabajo.
977. Sal 978. Salario.
ary
981. co
982. Comisin.
mmision_p
ct
985. ma 986. Identificador del
nager_id
manager.
989. dep 990. Identificador del
artment_i
departamento.
d
993.
994. CREATE TABLE DEPT
995.

947. Restricciones. El email


debe ser nico.
948. El salario debe ser
mayor que 0.

996. DEPTNO
997. DNAME
998. LOC
999.

946.

NUMBER

(3)

VARCHAR2

VARCHAR2

CONSTRAINT DEPT_DEPTNO_PK PRIMARY KEY,

(100),

(100)

1000.

75

1001. CREATE

TABLE

EMP

1002. )
1003.

EMPNO NUMBER (4) CONSTRAINT EMP_EMPNO_FK FOREIGN KEY


REFERENCES DEPT(DEPTNO_PK),

1004.

ENAME VARCHAR2

1005.

JOB VARCHAR2

1006.

MANAGER NUMBER

1007.

HIREDATE DATE,

1008.

SAL NUMBER

1009.

COMM NUMBER

1010.

DEPTNO NUMBER

(EMP_EMPNO_FK)

(150),

(500),
(4),

(8,2),
(4,2),
(4)

1011. )
1012. CREATE

TABLE

SALGRADOS

1013. (
1014.

GRADO NUMBER

(2),

1015.

MAXSAL NUMBER

1016.

MINSAL NUMBER

(8,2),
(5,2)

CONSTRAINT SALGRADOS_MINSAL_NN NOT NULL

1017. )
1018.
1019. CREATE

TABLE

REGIONES

1020. (
1021.

ID_REGIONES NUMBER

(3),

1022.

REGION_NAME VARCHAR2

(100)

1023. )
1024.
1025. CREATE

TABLE

PAISES

1026. (
1027.

ID_PAIS NUMBER (3) CONSTRAINT PAISES_ID_PAIS_PK PRIMARY KEY CONSTRAINT


PAISES_ID_PAIS_FK
FOREIGN
KEY
(PAISES_ID_PAIS_FK)
REFERENCES
(REGIONES_ID_REGIONES),

1028.

NOMBRE_PAIS VARCHAR2

1029.

REGION VARCHAR2

(100),

(100)

1030. )

76

1031.
1032. CREATE

TABLE

CLIENTES

1033. (
1034.

ID_CLIENTES NUMBER

(6)

CONSTRAINT CLIENTES_ID_UQ UNIQUE,

1035.

NOMBRE_CLIENTE VARCHAR2
NULL,

(50)

CONSTRAINT CLIENTES_NOMBRE_CLIENTE_NN NOT

1036.

(100)

CONSTRAINT CLIENTES_APELLIDO_CLIENTE_NN NOT

APELLIDO_CLIENTE VARCHAR2
NULL,

1037.

SEXO_CLIENTE VARCHAR2

(1),

1038.

FECHA_NAC_CLIENTE DATE,

1039.

ESTADO_CLIENTE VARCHAR2(50),

1040.

DIRECCION_CLIENTE VARCHAR2
NOT NULL,

1041.

COD_POSTAL_CLIENTE NUMBER

1042.

CIUDAD_CLIENTE VARCHAR2
NULL,

(200)

(5)

CONSTRAINT CLIENTES_CP_CLIENTE_NN NOT NULL,

(50)

1043.

PROVINCIA_CLIENTE VARCHAR2

1044.

PAIS_CLIENTE VARCHAR2

1045.

TELEFONO_CLIENTE NUMBER

1046.

EMAIL_CLIENTE VARCHAR2

CONSTRAINT CLIENTES_DIRECCION_CLIENTE_NN

CONSTRAINT CLIENTES_CIUDAD_CLIENTE_NN NOT

(50),

(50),
(12),

(150)

1047. )
1048.
1049. CREATE

TABLE

PROVEEDORES

1050. (
1051.

ID_PROVE NUMBER

(6)

CONSTRAINT PROVEEDORES_ID_UQ UNIQUE,

1052.

NOMBRE_PROVE VARCHAR2
NULL,

(50)

1053.

APELLIDO_PROVE VARCHAR2
NOT NULL,

1054.

ANNO_NAC_PROVE NUMBER

1055.

ESTADO_PROVE VARCHAR2

CONSTRAINT PROVEEDORES_NOMBRE_PROVE_NN NOT

(100)

CONSTRAINT PROVEEDORES_APELLIDO_PROVE_NN

(4),

(50),

1056.

DIRECCION_PROVE
VARCHAR2
PROVEEDORES_DIRECCION_PROVE_NN NOT NULL,

1057.

COD_POST_PROVE VARCHAR2

(5)

(200)

CONSTRAINT

CONSTRAINT PROVEEDORES_CP_PROVE_NN NOT NULL,

77

1058.

CIUDAD_PROVE VARCHAR2
NULL,

(50)

1059.

PROVINCIA_PROVE VARCHAR2

1060.

PAIS_PROVE VARCHAR2

1061.

TELEFONO_PROVE NUMBER

1062.

EMAIL_PROVE VARCHAR2

CONSTRAINT PROVEEDORES_CIUDAD_PROVE_NN NOT

(50),

(50),
(12),

(150)

1063. )
1064.
1065. CREATE

TABLE

LOCALIZACIONES

1066. (
1067.

ID_LOC NUMBER

(4),

1068.

DIRECCION VARCHAR2

(200),

1069.

COD_POSTAL NUMBER

(5),

1070.

CIUDAD VARCHAR2

1071.

PROVINCIA VARCHAR2

1072.

PAIS VARCHAR2

(50),
(50),

(50)

1073. )
1074.
1075. CREATE

TABLE

DEPARTAMENTOS

1076. (
1077.

ID_DEPARTAMENTO NUMBER
UNIQUE,

(4)

CONSTRAINT DEPARTAMENTOS_ID_DEPARTAMENTO_UQ

1078.

NOMBRE_DEPARTAMENTO VARCHAR2

1079.

ID_MANAGER NUMBER

1080.

ID_LOCALIZACION NUMBER

(100),

(4),
(4)

1081. )
1082.
1083. CREATE

TABLE

TRABAJOS

1084. (
1085.

ID_TRABAJO VARCHAR2

1086.

TRABAJO VARCHAR2

1087.

MIN_SAL NUMBER

(150),

(500),

(5,2),

78

1088.

MAX_SAL NUMBER

(8,2)

1089. )
1090.
1091. CREATE

TABLE

EMPLEADOS

1092. (
1093.

ID_EMPLEADO NUMBER

(4)

CONSTRAINT EMPLEADOS_ID_EMPLEADO_UQ UNIQUE,

1094.

NOMBRE_EMPLEADO VARCHAR2

1095.

APELLIDO_EMPLEADO VARCHAR2

1096.

EMAIL_EMPLEADO VARCHAR2
UNIQUE,

1097.

TELEFONO_EMPLEADO NUMBER

1098.

FECHA_DE_ALTA DATE,

1099.

ID_TRABAJO VARCHAR2

1100.

SALARIO NUMBER

1101.

COMISION_PCT NUMBER

1102.

ID_MANAGER NUMBER

1103.

ID_DEPARTAMENTO NUMBER

(50),
(100),

(150)

CONSTRAINT EMPLEADOS_EMAIL_EMPLEADO_UQ

(12),

(3),

(8,2)

CONSTRAINT EMPLEADOS_SALARIO_CK CHECK (SALARIO

(4,2),

(4),
(4)

1104. )
1105.

79

> 0),

1106. 03. Hospital - Consultas - Hoja 4


1107. Ejecutar las siguientes
(FUNCIONES DE GRUPO):

consultas

en

la

Base

de

datos

Hospital

1 Encontrar el salario medio de los vendedores, mostrando el nmero de


empleados con oficio vendedor.
2 Encontrar el salario ms alto, ms bajo y la diferencia entre ambos de
todos los empleados con oficio Empleado.
3 Visualizar los salarios mayores para cada oficio.
4 Visualizar el nmero de personas que realizan cada oficio en cada
departamento.
5 Buscar aquellos departamentos con 4 o ms personas trabajando.
6 Mostrar el nmero de directores que existen por departamento.
7 Visualizar el nmero de enfermeros, enfermeras e interinos que hay en
la plantilla, ordenados por la funcin.
8 Visualizar departamentos, oficios y nmero de personas, para aquellos
departamentos que tengan dos o ms personas trabajando en el mismo
oficio.
9 Calcular el salario medio, diferencia, mximo y mnimo de cada oficio,
indicando el oficio y el nmero de empleados de cada oficio.
10 Calcular el valor medio de las camas que existen para cada nombre de
sala. Indicar el nombre de cada sala y el nmero de cada una de ellas.
1108.
1109.
1110. // Creamos el usuario desde la conexin de SYS (conn.dba):
1111. CREATE USER HOSPITAL
IDENTIFIED BY HOSPITAL
DEFAULT TABLESPACE USERS
TEMPORARY TABLESPACE TEMP;

1112.
1113. // Si se ha creado correctamente en la ventana de abajo te lo dice.
Ahora ingresamos los siguientes comandos:
1114.
1115.

GRANT
GRANT

CONNECT TO HOSPITAL;
RESOURCE TO HOSPITAL;

1116.
1117. // Nos conectamos como el usuario que hemos creado ( HOSPITAL). En
este caso:
1118.

CONNECT

HOSPITAL/HOSPITAL

1119.
1120. // Ahora dentro de la conexin del hospital ( CONN.HOSPITAL) ingresamos
los siguientes comandos:
1121.

CREATE

TABLE HOSP_DEPT

80

1122.

1123.

NUMERO_DEPT INT NOT NULL,

1124.

NOMBRE_DEPT VARCHAR2(30),

1125.

LOC_DEPT VARCHAR2(30),

1126.
CHECK
(LOC_DEPT
'BILBAO','SEVILLA','ALMERIA','VALENCIA'))
1127.

('LUGO',

IN

'MADRID',

'BARCELONA',

);

1128.
1129.

CREATE TABLE HOSP_EMP

1130.

1131.

NUMERO_EMP INT NOT NULL,

1132.

APELLIDO_EMP VARCHAR2(40),

1133.
OFICIO_EMP VARCHAR2(30)
'EMPLEADO', 'DIRECTOR')),

CHECK

1134.

MANAGER INT,

1135.

FECHA_ALTA DATE DEFAULT SYSDATE,

1136.

SALARIO NUMBER(8,2) DEFAULT

1137.

COMISION NUMBER(8,2) DEFAULT

1138.

NUMERO_DEPT INT

1139.

(OFICIO_EMP

IN

('ANALISTA', 'VENDEDOR', 'PRESIDENTE',

1200,
0,

);

1140.
1141.

CREATE TABLE DOCTORES

1142.

1143.

CODIGO_DOCTOR NUMBER(4) NOT NULL

1144.

APELLIDO VARCHAR2(30) CHECK (APELLIDO

1145.

ESPECIALIDAD INT,

1146.

CODIGO_HOSP NUMBER(6) NOT NULL

1147.

,
=

UPPER(APELLIDO)),

);

1148.
1149.

CREATE TABLE ESPECIALIDADES

1150.

1151.

COD_ESPECIALIDAD NUMBER(3) NOT NULL,

1152.

NOMBRE_ESPECIALIDAD VARCHAR2(30)

1153.

);

1154.
1155.

CREATE TABLE ENFERMOS

1156.

1157.

CODIGO_ENFERMO INT NOT NULL

1158.

APELLIDO VARCHAR2(30),

1159.

DIRECCION VARCHAR2(50),

1160.

FECHA_NAC DATE,

1161.

SEXO CHAR(1) DEFAULT

'F'

CHECK (SEXO IN

('F','M')),

81

1162.
1163.

NUM_SEG_SOCIAL VARCHAR2(15) NOT NULL

);

1164.
1165.

CREATE TABLE DATOS_HOSPITAL

1166.

1167.

COD_HOSPITAL NUMBER(6) NOT NULL

1168.

NOMBRE VARCHAR2(20),

1169.

DIRECCION VARCHAR2(30),

1170.

TELEFONO VARCHAR2(9),

1171.

NUM_CAMAS INT DEFAULT

1172.

);

1173.

CREATE TABLE PLANTILLA

1174.

1175.

COD_EMPLEADO NUMBER(4) NOT NULL,

1176.

COD_HOSPITAL NUMBER(6) NOT NULL,

1177.

COD_SALA NUMBER(6) NOT NULL,

1178.

APELLIDO VARCHAR2(30),

1179.

FUNCION VARCHAR2(20),

1180.

TURNO CHAR(1) DEFAULT 'M' CHECK (TURNO IN

1181.

SALARIO NUMBER(8,2) DEFAULT

1182.

('N','M','T')),

);

1183.
1184.

CREATE TABLE SALAS

1185.

1186.

COD_SALA NUMBER(6) NOT NULL,

1187.

COD_HOSPITAL NUMBER(6) NOT NULL,

1188.

NOMBRE VARCHAR2(30),

1189.

NUM_CAMAS NUMBER(3) DEFAULT

1190.

);

1191.
1192.
1193.

INSERT INTO HOSP_DEPT VALUES

(10,'CONTABILIDAD','SEVILLA');

1194.

INSERT INTO HOSP_DEPT VALUES

(20,'INVESTIGACION','MADRID');

1195.

INSERT INTO HOSP_DEPT VALUES

(30,'VENTAS','BARCELONA');

1196.

INSERT INTO HOSP_DEPT VALUES

(40,'PRODUCCION','BILBAO');

1197.
1198.
1199. INSERT INTO HOSP_EMP
MON-YYYY'), 104000, 0, 20);

VALUES

(7369,'SANCHEZ','EMPLEADO',7902,TO_DATE('17-DIC-1980', 'DD-

82

1200. INSERT INTO HOSP_EMP


YYYY'), 208000, 39000, 30);

VALUES

1201. INSERT INTO HOSP_EMP


YYYY'), 162500, 65000, 30);
1202. INSERT INTO HOSP_EMP
YYYY'), 386750, 0, 20);

(7499,'ARROYO','VENDEDOR',7698,TO_DATE('22-FEB-1980', 'DD-MON-

(7521,'SALA','VENDEDOR',7698,TO_DATE('22-FEB-1981' , 'DD-MON-

VALUES

(7566,'JIMENEZ','DIRECTOR',7839,TO_DATE('02-ABR-1981', 'DD-MON-

VALUES

1203. INSERT INTO HOSP_EMP VALUES (7654,'MARTIN','VENDEDOR',7698,TO_DATE('28-SEP-1981' , 'DD-MONYYYY'), 182000, 182000, 30);
1204. INSERT INTO HOSP_EMP
YYYY'), 370500, 0, 30);

VALUES

(7698,'NEGRO','DIRECTOR',7839,TO_DATE('01-MAY-1981', 'DD-MON-

1205. INSERT INTO HOSP_EMP


YYYY'), 318500, 0, 10);

VALUES

(7782,'CEREZO','DIRECTOR',7839,TO_DATE('09-JUN-1981', 'DD-MON-

1206. INSERT INTO


390000, 0, 20);

HOSP_EMP VALUES

1207. INSERT INTO HOSP_EMP


YYYY'), 650000, 0, 10);
1208. INSERT INTO HOSP_EMP
YYYY'), 195000, 0, 30);
1209. INSERT INTO HOSP_EMP
YYYY'), 143000, 0, 20);

(7788,'GIL','ANALISTA',7566,TO_DATE('30-MAR-1987', 'DD-MON-YYYY'),

VALUES

(7844,'TOVAR','VENDEDOR',7698,TO_DATE('08-SEP-1981', 'DD-MON-

VALUES

VALUES

1210. INSERT INTO HOSP_EMP


YYYY'), 123500, 0, 30);

(7876,'ALONSO','EMPLEADO',7788,TO_DATE('03-MAY-1981', 'DD-MON-

(7900,'JIMENO','EMPLEADO',7698,TO_DATE('03-DIC-1981', 'DD-MON-

VALUES

1211. INSERT INTO HOSP_EMP


MON-YYYY'), 390000, 0, 20);

(7902,'FERNANDEZ','ANALISTA',7566,TO_DATE('03-DIC-1981', 'DD-

VALUES

1212. INSERT INTO HOSP_EMP


YYYY'), 169000, 0, 10);

(7839,'REY','PRESIDENTE',NULL,TO_DATE('17-NOV-1981', 'DD-MON-

VALUES

(7934,'MUOZ','EMPLEADO',7782,TO_DATE('23-JUN-1982', 'DD-MON-

1213.
1214.
1215. INSERT INTO ENFERMOS
YYYY'), 'M', '280862422');

VALUES

(10995,'LAGUA M.','GOYA 20',TO_DATE('16-MAY-1956', 'DD-MON-

1216. INSERT INTO ENFERMOS VALUES (14024,'FERNNDEZ M.','RECOLETOS 50',TO_DATE('21-MAY-1960',


'DD-MON-YYYY'), 'F', '284991452');
1217. INSERT INTO ENFERMOS
YYYY'), 'F', '321790059');

VALUES

(18004,'SERRANO V.','ALCAL 12',TO_DATE('23-JUN-1967', 'DD-MON-

1218. INSERT INTO ENFERMOS


YYYY'), 'M', '160654471');

VALUES

(36658,'DOMIN S.','MAYOR 71',TO_DATE('01-ENE-1942', 'DD-MON-

1219. INSERT INTO ENFERMOS


YYYY'), 'F', '380010217');

VALUES

(38702,'NEAL R.','ORENSE 11',TO_DATE('18-JUN-1942', 'DD-MON-

1220. INSERT INTO ENFERMOS


MON-YYYY'), 'M', '440294390');

VALUES

(39217,'CERVANTES M.','PERN 38',TO_DATE('29-FEB-1952', 'DD-

83

1221. INSERT INTO ENFERMOS VALUES (59076,'MILLER B.','LPEZ DE HOYOS 2',TO_DATE('16-SEP-1945',


'DD-MON-YYYY'), 'F', '311969044');
1222. INSERT INTO ENFERMOS
YYYY'), 'M', '100973253');
1223. INSERT INTO
'F', '285201776');

VALUES

(63827,'RUIZ P.','ESQUERDO 103',TO_DATE('26-DIC-1980', 'DD-MON-

ENFERMOS VALUES

(64823,'FRASER A.','SOTO 3',TO_DATE('10-JUL-1980', 'DD-MON-YYYY'),

1224. INSERT INTO ENFERMOS


YYYY'), 'M', '154811767');

VALUES

(74835,'BENTEZ E.','ARGENTINA',TO_DATE('05-OCT-1957', 'DD-MON-

1225.
1226.

INSERT INTO DATOS_HOSPITAL VALUES

(100000,'PROVINCIAL','O DONELL 50','964-4256',502);

1227.

INSERT INTO DATOS_HOSPITAL VALUES

(100100,'GENERAL','ATOCHA S/N','595-3111',987);

1228.

INSERT INTO DATOS_HOSPITAL VALUES

(100200,'LA PAZ','CASTELLANA 1000','923-5411',412);

1229. INSERT
1500',845);

INTO

DATOS_HOSPITAL

VALUES

(100300,'SAN

CARLOS','CIUDAD

UNIVERITARIA','597-

1230.
1231.
1232.

INSERT INTO PLANTILLA VALUES

(1009,100200,6,'HIGUERAS D.','ENFERMERA','T',200500);

1233.

INSERT INTO PLANTILLA VALUES

(1280,100300,4,'AMIGO R.','INTERINO','N',221000);

1234.

INSERT INTO PLANTILLA VALUES

(3106,100100,6,'HERNNDEZ J.','ENFERMERO','T',275000);

1235.

INSERT INTO PLANTILLA VALUES

(3754,100100,6,'DAZ B.','ENFERMERA','T',226200);

1236.

INSERT INTO PLANTILLA VALUES

(6065,100200,1,'RIVERA G.','ENFERMERA','N',162600);

1237.

INSERT INTO PLANTILLA VALUES

(6357,100100,3,'KARPLUS W.','INTERINO','T',337900);

1238.

INSERT INTO PLANTILLA VALUES

(7379,100200,1,'CARLOS R.','ENFERMERA','T',211900);

1239.

INSERT INTO PLANTILLA VALUES

(8422,100200,6,'BOCINA G.','ENFERMERO','M',183800);

1240.

INSERT INTO PLANTILLA VALUES

(8526,100300,1,'FRANK H.','ENFERMERA','T',252200);

1241.

INSERT INTO PLANTILLA VALUES

(9901,100200,2,'NEZ C.','INTERINO','M',221000);

1242.
1243.
1244.

INSERT INTO SALAS VALUES

(3,100000,'CUIDADOS INTENSIVOS',21);

1245.

INSERT INTO SALAS VALUES

(6,100000,'PSIQUITRICOS',67);

1246.

INSERT INTO SALAS VALUES

(3,100100,'CUIDADOS INTENSIVOS',10);

1247.

INSERT INTO SALAS VALUES

(6,100100,'CARDIOLOGA',53);

1248.

INSERT INTO SALAS VALUES

(1,100200,'RECUPERACIN',10);

1249.

INSERT INTO SALAS VALUES

(6,100200,'PSIQUITRICOS',118);

84

1250.

INSERT INTO SALAS VALUES

(2,100200,'MATERNIDAD',34);

1251.

INSERT INTO SALAS VALUES

(4,100300,'CARDIOLOGA',55);

1252.

INSERT INTO SALAS VALUES

(1,100300,'RECUPERACIN',13);

1253.

INSERT INTO SALAS VALUES

(2,100300,'MATERNIDAD',24);

1254.
1255.
1256.

INSERT INTO ESPECIALIDADES VALUES

(100,'PSIQUIATRA');

1257.

INSERT INTO ESPECIALIDADES VALUES

(101,'NEUROLOGA');

1258.

INSERT INTO ESPECIALIDADES VALUES

(102,'CARDIOLOGA');

1259.

INSERT INTO ESPECIALIDADES VALUES

(103,'UROLOGA');

1260.

INSERT INTO ESPECIALIDADES VALUES

(104,'PEDITARA');

1261.

INSERT INTO ESPECIALIDADES VALUES

(105,'GINECOLOGA');

1262.
1263.
1264.

INSERT INTO DOCTORES VALUES

(1000,'CABEZA D.', 100, 100200);

1265.

INSERT INTO DOCTORES VALUES

(1005,'BEST D.', 103, 100200);

1266.

INSERT INTO DOCTORES VALUES

(1010,'LPEZ A.', 102, 100000);

1267.

INSERT INTO DOCTORES VALUES

(1015,'GALO D.', 104, 100200);

1268.

INSERT INTO DOCTORES VALUES

(1020,'ADAMS C.', 101, 100300);

1269.

INSERT INTO DOCTORES VALUES

(1025,'MILLER G.', 105, 100100);

1270.

INSERT INTO DOCTORES VALUES

(1030,'NINO P.', 104, 100300);

1271.

INSERT INTO DOCTORES VALUES

(1035,'CAJAL R.', 102, 100100);

1272.
1273.

COMMIT;

1274.
1275.

ALTER TABLE HOSP_DEPT

1276.

ADD CONSTRAINT PK_HOSP_DEPT PRIMARY KEY (NUMERO_DEPT);

1277.
1278.

ALTER TABLE HOSP_EMP

1279.

ADD CONSTRAINT PK_HOSP_EMP PRIMARY KEY (NUMERO_EMP);

1280.
1281.

ALTER TABLE ENFERMOS

85

1282.

ADD CONSTRAINT PK_ENF PRIMARY KEY (CODIGO_ENFERMO);

1283.
1284.

ALTER TABLE SALAS

1285.

ADD CONSTRAINT PK_SALA PRIMARY KEY (COD_SALA,COD_HOSPITAL);

1286.
1287.

ALTER TABLE PLANTILLA

1288.

ADD CONSTRAINT PK_PLANTILLA PRIMARY KEY (COD_EMPLEADO,COD_SALA,COD_HOSPITAL);

1289.
1290.

ALTER TABLE DATOS_HOSPITAL

1291.

ADD CONSTRAINT PK_DAT_HOSP PRIMARY KEY (COD_HOSPITAL);

1292.

ALTER TABLE DOCTORES

1293.

ADD CONSTRAINT PK_DOC PRIMARY KEY (CODIGO_HOSP,CODIGO_DOCTOR);

1294.
1295.

ALTER TABLE ESPECIALIDADES

1296.

ADD CONSTRAINT PK_ESPEC PRIMARY KEY (COD_ESPECIALIDAD);

1297.
1298.

ALTER TABLE HOSP_EMP

1299.

ADD (CONSTRAINT FK_HOSP_EMP FOREIGN KEY (NUMERO_DEPT) REFERENCES HOSP_DEPT(NUMERO_DEPT));

1300.
1301.

ALTER TABLE HOSP_EMP

1302.

ADD (CONSTRAINT FK_EMP_MAN FOREIGN KEY (MANAGER) REFERENCES HOSP_EMP(NUMERO_EMP));

1303.
1304.

ALTER TABLE PLANTILLA

1305. ADD (CONSTRAINT


COD_HOSPITAL));

FK_PLAN_SALA FOREIGN KEY

(COD_SALA,

COD_HOSPITAL) REFERENCES SALAS(COD_SALA,

1306.
1307.

ALTER TABLE PLANTILLA

1308. ADD
(CONSTRAINT
DATOS_HOSPITAL(COD_HOSPITAL));

FK_PLAN_HOSP

FOREIGN

KEY

(COD_HOSPITAL)

REFERENCES

FK_SALA_HOSP

FOREIGN

KEY

(COD_HOSPITAL)

REFERENCES

1309.
1310.

ALTER TABLE SALAS

1311. ADD
(CONSTRAINT
DATOS_HOSPITAL(COD_HOSPITAL));

1312.
1313.

ALTER TABLE DOCTORES

86

1314. ADD
(CONSTRAINT
DATOS_HOSPITAL(COD_HOSPITAL));

FK_DOC_HOSP

FOREIGN

(CODIGO_HOSP)

KEY

REFERENCES

1315.
1316.

SELECT 'CREACION DE TABLAS SQL FINALIZADA' FROM DUAL;

1317.
1318.
1319. // A partir de aqu empezamos con el ejercicio en s.
1. Encontrar el salario medio de los vendedores, mostrando el nmero de
empleados con oficio vendedor.
1320.

SELECT

AVG (SALARIO), COUNT (OFICIO_EMP) FROM HOSP_EMP WHERE OFICIO_EMP

= 'VENDEDOR ';

2. Encontrar el salario ms alto, ms bajo y la diferencia entre ambos de


todos los empleados con oficio Empleado.
1321.
WHERE

SELECT MAX (SALARIO), MIN (SALARIO),


OFICIO_EMP = 'EMPLEADO';

MAX (SALARIO)

MIN (SALARIO) DIFERENCIA FROM HOSP_EMP

3. Visualizar los salarios mayores para cada oficio.


1322.

SELECT

OFICIO_EMP,

MAX (SALARIO)

4. Visualizar el nmero
departamento.
1323.

SELECT

de

FROM HOSP_EMP GROUP BY OFICIO_EMP;

personas

que

realizan

cada

oficio

en

cada

OFICIO_EMP, COUNT (NUMERO_EMP) FROM HOSP_EMP GROUP BY OFICIO_EMP;

5. Buscar aquellos departamentos con 4 o ms personas trabajando.


1324.
SELECT OFICIO_EMP,
(NUMERO_EMP)>3;

COUNT

(NUMERO_EMP)

FROM HOSP_EMP

GROUP BY OFICIO_EMP

HAVING COUNT

6. Mostrar el nmero de directores que existen por departamento.


1325.

SELECT

NUMERO_DEPT, COUNT

(OFICIO_EMP)

FROM HOSP_EMP

WHERE

OFICIO_EMP='DIRECTOR'

GROUP BY NUMERO_DEPT;

7. Visualizar el nmero de enfermeros, enfermeras e interinos que hay en la


plantilla, ordenados por la funcin.
1326.

SELECT

FUNCION, COUNT (COD_EMPLEADO) FROM PLANTILLA GROUP BY FUNCION ORDER BY

87

1;

8. Visualizar departamentos, oficios y nmero de personas, para aquellos


departamentos que tengan dos o ms personas trabajando en el mismo
oficio.
1327.

//SELECT NUMERO_DEPT, OFICIO_EMP, COUNT (NUMERO_EMP)


NUMERO_DEPT, OFICIO_EMP HAVING COUNT (NUMERO_EMP)>1;

FROM

HOSP_EMP

9. Calcular el salario medio, diferencia, mximo y mnimo de


indicando el oficio y el nmero de empleados de cada oficio.
1328.

SELECT

OFICIO_EMP, MAX (SALARIO), MIN

(SALARIO),

AVG

(SALARIO),

MAX

GROUP

cada

(SALARIO) -

BY

oficio,

MIN (SALARIO),

COUNT (NUMERO_EMP) FROM HOSP_EMP GROUP BY OFICIO_EMP;

10. Calcular el valor medio de las camas que existen para cada nombre de
sala. Indicar el nombre de cada sala y el nmero de cada una de ellas.
1329.

SELECT

NOMBRE, COUNT (COD_SALA), AVG (NUM_CAMAS) FROM SALAS GROUP BY NOMBRE;

1330.
1331.
1332.

88

1333. 04. Hospital - Consultas - Hoja 5


1334. Ejecutar las siguientes
(FUNCIONES DE GRUPO):

consultas

en

la

Base

de

datos

Hospital

1. Calcular el salario medio de la plantilla de la sala 6, segn la funcin


que realizan. Indicar la funcin y el nmero de empleados.
2. Averiguar los ltimos empleados que se dieron de alta en la empresa
de cada uno de los oficios, ordenados por la fecha.
3. Mostrar el nmero de hombres y el nmero de mujeres que hay en los
enfermos.
4. Mostrar la suma total del salario que cobran los empleados de la
plantilla para cada funcin y turno.
5. Calcular el nmero de salas que existen en cada hospital.
6. Mostrar el nmero de enfermeras que existen por cada sala.
1335.
1 Calcular el salario medio de la plantilla de la sala 6, segn la funcin que
realizan. Indicar la funcin y el nmero de empleados.
1336.

SELECT FUNCION, COUNT (FUNCION), AVG (SALARIO) FROM PLANTILLA WHERE COD_SALA

=6

GROUP

BY FUNCION;

2 Averiguar los ltimos empleados que se dieron de alta en la empresa de


cada uno de los oficios, ordenados por la fecha.
1337.
2;

SELECT DISTINCT OFICIO_EMP, MAX (FECHA_ALTA)

FROM HOSP_EMP

GROUP BY OFICIO_EMP

ORDER BY

3 Mostrar el nmero de hombres y el nmero de mujeres que hay en los


enfermos.
1338.

SELECT SEXO, COUNT

(*)

FROM ENFERMOS GROUP BY SEXO;

4 Mostrar la suma total del salario que cobran los empleados de la plantilla
para cada funcin y turno.
1339.

SELECT FUNCION, TURNO, SUM (SALARIO) FROM PLANTILLA GROUP BY FUNCION, TURNO;

5 Calcular el nmero de salas que existen en cada hospital.


1340.

SELECT COUNT

(*)

SALAS, COD_HOSPITAL FROM SALAS GROUP BY COD_HOSPITAL;

6 Mostrar el nmero de enfermeras que existen por cada sala.


1341.
SELECT
COD_SALA;

COD_SALA, COUNT (FUNCION) FROM PLANTILLA WHERE FUNCION

89

= 'ENFERMERA'

GROUP BY

1342. 05. Hospital - Consultas - Hoja 6


1343. Ejecutar las siguientes consultas en la Base de datos Hospital ( UNIONES
DE TABLAS):

TABLAS EMPRESA:
1. Mostrar el NOMBRE DE LOS EMPLEADOS, NMERO y NOMBRE DE
DEPARTAMENTO, NMERO y los tres primeros caracteres de la LOCALIDAD
donde se encuentra el DEPARTAMENTO, para aquellos EMPLEADOS que
trabajen en el DEPARTAMENTO 20 o que sea VENDEDOR (que su
trabajo comience por 'SA').
2. Mostrar el NOMBRE DEL EMPLEADO, su TRABAJO, y el NOMBRE y CDIGO
DEL DEPARTAMENTO en el que trabaja.
3. En la consulta anterior existe un DEPARTAMENTO que no tiene
EMPLEADOS. Mostrar esta informacin.
4. Mostrar el NOMBRE DE LOS DEPARTAMENTOS, la LOCALIDAD donde se
ubican y el PRESUPUESTO (suma de salarios de los empleados de
ese departamento) para todos los DEPARTAMENTOS ubicados en
Europa.

TABLAS HOSPITAL:
5. Listar el NOMBRES DE LAS SALAS, su HOSPITAL y el NMERO DE CAMAS.
6. Listar los EMPLEADOS de un hospital indicando el NMERO DE
EMPLEADO, el APELLIDO, TURNO y el NOMBRE DE LA SALA en la que
trabaja.
7. Listar los DOCTORES. Los datos a mostrar son: APELLIDOS, ESPECIALIDAD y
el NOMBRE DEL HOSPITAL en el que trabajan.

1344.
1. Mostrar el NOMBRE DE LOS EMPLEADOS, NMERO y NOMBRE DE DEPARTAMENTO,
NMERO y los tres primeros caracteres de la LOCALIDAD donde se encuentra
el DEPARTAMENTO, para aquellos EMPLEADOS que trabajen en el DEPARTAMENTO
20 o que sea VENDEDOR (que su trabajo comience por 'SA').
1345.

SELECT FIRST_NAME, EMPLOYEE_ID, E.DEPARTMENT_ID, SUBSTR

1346.

FROM DEPARTMENTS D, EMPLOYEES E

1347.

WHERE D.DEPARTMENT_ID

1348.

2. Mostrar

el

DEL

1, 3 )

OR JOB_ID LIKE

EMPLEADO,

su

'SA%' ) ;

TRABAJO,

el

NOMBRE

CDIGO

DEL

en el que trabaja.

SELECT FIRST_NAME, JOB_ID, DEPARTMENT_NAME, D.DEPARTMENT_ID

1350.

FROM DEPARTMENTS D

1351.

RIGHT

1352.

OUTER JOIN EMPLOYEES E

ON

( E.DEPARTMENT_ID = D.DEPARTMENT_ID ) ;

3. En la consulta anterior existe un


Mostrar esta informacin.
1353.

LOCATION_ID,

= E.DEPARTMENT_ID

( E.DEPARTMENT_ID = 20

NOMBRE

DEPARTAMENTO

1349.

AND

DEPARTAMENTO

SELECT FIRST_NAME

90

que no tiene

EMPLEADOS.

1354.

FROM EMPLOYEES

1355.

WHERE DEPARTMENT_ID IS NULL

4. Mostrar el

NOMBRE DE LOS DEPARTAMENTOS,

la LOCALIDAD donde se ubican y el


(suma de salarios de los empleados de ese departamento)
para todos los DEPARTAMENTOS ubicados en Europa.
PRESUPUESTO

1356.

SELECT DEPARTMENT_NAME, CITY, SUM

SALARY

1357.

FROM DEPARTMENTS D, LOCATIONS L, EMPLOYEES E, COUNTRIES C

1358.

WHERE D.DEPARTMENT_ID

1359.

AND L.LOCATION_ID

= D.LOCATION_ID

1360.

AND L.COUNTRY_ID

= C.COUNTRY_ID

1361.

AND REGION_ID

1362.

5. Listar el
1363.

= E.DEPARTMENT_ID

=1

GROUP BY DEPARTMENT_NAME, CITY

NOMBRES DE LAS SALAS,

su

HOSPITAL

y el

NMERO DE CAMAS.

SELECT S.NOMBRE, H.NOMBRE, S.NUM_CAMAS

1364.

FROM DATOS_HOSPITAL H, SALAS S

1365.

WHERE H.COD_HOSPITAL

= S.COD_HOSPITAL ;

6. Listar los EMPLEADOS de un hospital indicando el NMERO


APELLIDO, TURNO y el NOMBRE DE LA SALA en la que trabaja.
1366.

EMPLEADO,

el

SELECT P.COD_EMPLEADO, P.APELLIDO,

1367.

CASE

1368.

WHEN P.TURNO

= 'M'

1369.

WHEN P.TURNO

= 'T'

1370.

ELSE

1371.

END TURNOS, S.NOMBRE,

THEN
THEN

'MAANA'
'TARDE'

'NOCHE'

1372.

FROM PLANTILLA P, SALAS S

1373.

WHERE P.COD_SALA

1374.

GROUP BY P.COD_EMPLEADO, P.APELLIDO, TURNO, S.NOMBRE

7. Listar los

= S.COD_SALA

DOCTORES. Los
NOMBRE DEL HOSPITAL en el

1375.

DE

datos a mostrar son:


que trabajan.

SELECT D.APELLIDO, D.ESPECIALIDAD, H.NOMBRE

1376.

FROM DOCTORES D, DATOS_HOSPITAL H

1377.

WHERE D.CODIGO_HOSP

= H.COD_HOSPITAL ;

1378.

91

APELLIDOS, ESPECIALIDAD

y el

1379. 06. Hospital - Consultas - Hoja 7


1380. Ejecutar las siguientes consultas en la Base de datos Hospital (CASE):
1 A qu empleados de la tabla EMPLOYEES y cuyo oficio es EMPLEADO
eliminaramos si quitsemos los DEPARTAMENTOS 10 y 30 y cules se
mantendran. Mostrar APELLIDO, NOMBRE, SALARIO, OFICIO y FECHA DE ALTA EN LA
EMPRESA.
2 Debemos hacer recortes de salario en la empresa, para ello debemos
saber a qu personas recortaremos el SUELDO, cules se mantendrn y
cules subiremos el sueldo. Utilizar todos los empleados de la empresa
(PLANTILLA y HOSP_EMP). Cuando el SALARIO sea menor de 100.000,
subiremos el sueldo, cuando este entre 170.000 y 220.000 lo
mantendremos y cuando sea superior lo bajaremos.
3 Queremos saber qu empleados de la PLANTILLA trabajan en turno de
tarde, noche o en otros, para ello mostraremos 'TARDE' o 'NOCHE',
dependiendo de los valores.
4 Queremos cambiar de LOCALIDAD para los empleados de BARCELONA, para
ello tenemos que saber qu empleados cambiaran de LOCALIDAD y
cules no. Combinar tablas y mostrar el nombre del departamento junto
a los datos del empleado.
5 Queremos saber el nmero de trabajadores que cambiaran de localidad
si cambisemos a MADRID y qu nmero de trabajadores no cambiaran
de localidad agrupados por localidad.
6 Mostrar el APELLIDO, la DIRECCIN, la FECHA DE NACIMIENTO mostrando la
DCADA en la que est cada persona y el SEXO mostrando si es
masculino o femenino de la tabla ENFERMO.
7 Mostrar el APELLIDO, el SALARIO, el OFICIO y el NOMBRE DEL DEPARTAMENTO de
todos los empleados aunque no tengan departamento. Si no tienen
DEPARTAMENTO mostrar que no tienen departamento. Mostrar adems si
tienen o no COMISIN.
8 Mostrar todas las CAMAS que existen para cada HOSPITAL y cada SALA.
Mostrar el NOMBRE DEL HOSPITAL, las SALAS y su NMERO DE CAMAS. Si no
hubiese CAMAS para algn hospital dejarlas a 0. Tambin mostrar que
son muchas CAMAS cuando sean ms de 90, buen nmero cuando sean
ms de 40 y pocas para las dems.
1381.
1. A qu empleados de la tabla EMPLOYEES y cuyo oficio es EMPLEADO
eliminaramos si quitsemos los DEPARTAMENTOS 10 y 30 y cules se
mantendran. Mostrar APELLIDO, NOMBRE, SALARIO, OFICIO y FECHA DE ALTA EN LA
EMPRESA.
1382.

SELECT APELLIDO_EMP, SALARIO, OFICIO_EMP, FECHA_ALTA,

1383.

CASE

1384.

WHEN NUMERO_DEPT IN

1385.

ELSE 'RESTO DE DEPARTAMENTOS'

1386.

END DEPARTAMENTOS,

1387.

FROM HOSP_EMP

1388.

WHERE OFICIO_EMP

(10, 30)

THEN 'DEPARTAMENTO

= 'EMPLEADO' ;

92

10-30'

2. Debemos hacer recortes de salario en la empresa, para ello debemos saber


a qu personas recortaremos el SUELDO, cules se mantendrn y cules
subiremos el sueldo. Utilizar todos los empleados de la empresa ( PLANTILLA y
HOSP_EMP). Cuando el SALARIO sea menor de 100.000, subiremos el sueldo,
cuando este entre 170.000 y 220.000 lo mantendremos y cuando sea
superior lo bajaremos.
1389.

SELECT APELLIDO_EMP,

1390.

CASE

1391.

WHEN SALARIO

1392.

WHEN SALARIO BETWEEN

1393.

WHEN SALARIO

1394.

ELSE 'SIN CONDICION'

1395.

END SALARIOS,

1396.

THEN 'SUBIR SUELDO'

170000

> 220000

AND

220000

THEN 'MANTENER SUELDO'

THEN 'BAJAR SUELDO'

FROM HOSP_EMP

1397.

UNION

1398.

SELECT APELLIDO,

1399.

< 100000

CASE

1400.

WHEN SALARIO

1401.

WHEN SALARIO BETWEEN

1402.

WHEN SALARIO

1403.

ELSE 'SIN CONDICION'

1404.

END SALARIOS,

1405.

FROM PLANTILLA

1406.

ORDER BY

< 100000

THEN 'SUBIR SUELDO'

170000

> 220000

AND

220000

THEN 'MANTENER SUELDO'

THEN 'BAJAR SUELDO'

2;

3. Queremos saber qu empleados de la PLANTILLA trabajan en turno de tarde,


noche o en otros, para ello mostraremos 'TARDE' o 'NOCHE', dependiendo de
los valores.
1407.

SELECT APELLIDO,

1408.

CASE

1409.

WHEN TURNO

= 'N'

THEN

'NOCHE'

1410.

WHEN TURNO

= 'T'

THEN

'TARDE'

1411.

ELSE

1412.

END TURNOS,

'MAANA'

1413.

FROM PLANTILLA

1414.

ORDER BY

2;

4. Queremos cambiar de LOCALIDAD para los empleados de BARCELONA, para ello


tenemos que saber qu empleados cambiaran de LOCALIDAD y cules no.
Combinar tablas y mostrar el nombre del departamento junto a los datos
del empleado.
1415.

SELECT APELLIDO_EMP, E.NUMERO_DEPT,

1416.

CASE

1417.

WHEN D.LOC_DEPT

1418.

ELSE 'SIN CAMBIO'

= 'BARCELONA'

THEN 'CAMBIO LOCALIDAD'

93

1419.

END LOCALIDAD,

1420.

FROM HOSP_EMP E, HOSP_DEPT D

1421.

WHERE E.NUMERO_DEPT

= D.NUMERO_DEPT ;

5. Queremos saber el nmero de trabajadores que cambiaran de localidad si


cambisemos a MADRID y qu nmero de trabajadores no cambiaran de
localidad agrupados por localidad.
1422.

SELECT COUNT (APELLIDO_EMP),

1423.

CASE

1424.

WHEN D.LOC_DEPT

1425.

ELSE 'SIN CAMBIO'

1426.

END LOCALIDAD,

= 'MADRID'

1427.

FROM HOSP_EMP E, HOSP_DEPT D

1428.

WHERE E.NUMERO_DEPT

1429.

GROUP BY D.LOC_DEPT

THEN 'CAMBIO LOCALIDAD'

= D.NUMERO_DEPT

6. Mostrar el APELLIDO, la DIRECCIN, la FECHA DE NACIMIENTO mostrando la DCADA


en la que est cada persona y el SEXO mostrando si es masculino o
femenino de la tabla ENFERMO.
1430.

SELECT APELLIDO, DIRECCION,

1431.

SUBSTR (TO_CHAR

1432.

CASE SEXO

1433.

WHEN

'M'

1434.

WHEN

'F'

1435.

END SEXO,

1436.

7. Mostrar el
todos los

( (FECHA_NAC), 'RR'), 0, '1') || '0S',

THEN
THEN

FROM ENFERMOS

'MASCULINO'
'FEMENINO'

el SALARIO, el OFICIO y el NOMBRE DEL DEPARTAMENTO de


empleados aunque no tengan departamento. Si no tienen
DEPARTAMENTO mostrar que no tienen departamento. Mostrar adems si tienen
o no COMISIN.
1437.

APELLIDO,

SELECT E.APELLIDO_EMP, E.SALARIO, E.OFICIO_EMP,

1438.

CASE

1439.

WHEN E.NUMERO_DEPT IS NULL THEN 'SIN DEPARTAMENTO'

1440.

ELSE TO_CHAR

1441.

END DEPARTAMENTO,

1442.

( D.NOMBRE_DEPT )

CASE

1443.

WHEN E.COMISION

1444.

ELSE

1445.

END COMISION,

1446.

=0

THEN

'NO'

'SI'

FROM HOSP_DEPT D

1447.

RIGHT OUTER JOIN HOSP_EMP E

1448.

ON

( E.NUMERO_DEPT = D.NUMERO_DEPT ) ;

94

8. Mostrar todas las CAMAS que existen para cada HOSPITAL y cada SALA.
Mostrar el NOMBRE DEL HOSPITAL, las SALAS y su NMERO DE CAMAS. Si no
hubiese CAMAS para algn hospital dejarlas a 0. Tambin mostrar que son
muchas CAMAS cuando sean ms de 90, buen nmero cuando sean ms de
40 y pocas para las dems.
1449.

SELECT H.NOMBRE, S.NOMBRE,

1450.

CASE

1451.

WHEN S.NUM_CAMAS IS NULL THEN

1452.

ELSE S.NUM_CAMAS

1453.

END CAMAS,

1454.

CASE

1455.

WHEN S.NUM_CAMAS

> 90

THEN

'MUCHAS'

1456.

WHEN S.NUM_CAMAS

> 40

THEN

'BUEN

1457.

ELSE

1458.

END CALIDAD,

NUMERO'

'POCAS'

1459.

FROM SALAS S, DATOS_HOSPITAL H

1460.

WHERE H.COD_HOSPITAL

= S.COD_HOSPITAL ;

95

1461. 07. Hospital - Consultas - Hoja 8


1462. Ejecutar las
(SUBCONSULTAS):

siguientes

consultas

en

la

Base

de

datos

Hospital

1. Encontrar al empleado que ms gana.


2. Mostrar el nombre, el trabajo y el salario de todos los empleados que
tienen un salario superior al salario ms bajo del departamento 30.
Ordenar la recuperacin por orden descendente de salarios.
3. Encontrar quienes son los trabajadores que tienen por jefe a 'KING'.
4. Nombre del da de la semana en el que ms empleados entraron a la
empresa.
5. Encontrar el nombre, trabajo, salario y fecha de alta de aquellos
empleados que cobren ms que cualquier vendedor. Ordenar la salida
por orden descendente de salarios.
6. Encontrar el nombre, departamento, salario y trabajo de aquellos
empleados que trabajan en el mismo departamento que 'IRENE', y cuyo
salario es menor a la media de los salarios del departamento 10.
7. Mostrar el nombre del empleado y la localidad donde trabaja, para los
que tengan comisin o que trabajen en el mismo departamento que
'IRENE'.
8. Recuperar los empleados cuyos salarios exceden la media de sus
respectivos departamentos.
9. Recuperar el empleado que ms tarde entr para cada uno de los
departamentos existentes en la empresa.
1463.
1. Encontrar al empleado que ms gana.
1464.

SELECT

1465.

FROM EMPLOYEES

1466.

WHERE SALARY IN

1467.

SELECT MAX (SALARY)

1468.

FROM EMPLOYEES

);

2. Mostrar el nombre, el trabajo y el salario de todos los empleados que


tienen un salario superior al salario ms bajo del departamento 30.
Ordenar la recuperacin por orden descendente de salarios.
1469.

SELECT FIRST_NAME, JOB_ID, SALARY

1470.

FROM EMPLOYEES

1471.

WHERE SALARY

1472.

>

SELECT MIN

SALARY

1473.

FROM EMPLOYEES

1474.

WHERE DEPARTMENT_ID

1475.

ORDER BY

DESC

= 30 )

3. Encontrar quienes son los trabajadores que tienen por jefe a 'KING'.
1476.

SELECT

96

1477.

FROM EMPLOYEES

1478.

WHERE MANAGER_ID IN

1479.

SELECT EMPLOYEE_ID

1480.

FROM EMPLOYEES

1481.

WHERE LAST_NAME

= 'KING') ;

4. Nombre del da de la semana en el que ms empleados entraron a la empresa.


1482.

DIAS

SELECT

SELECT MAX

1483.

FROM

1484.

TO_CHAR

HIRE_DATE,

1485.

FROM EMPLOYEES

1486.

GROUP BY TO_CHAR

'DAY' ) )

HIRE_DATE,

FECHA, COUNT

HIRE_DATE

DIAS

'DAY' ) ) ;

5. Encontrar el nombre, trabajo, salario y fecha de alta de aquellos empleados


que cobren ms que cualquier vendedor. Ordenar la salida por orden
descendente de salarios.
1487.

SELECT FIRST_NAME, SALARY, HIRE_DATE

1488.

FROM EMPLOYEES

1489.

WHERE SALARY

1490.

>

ANY

SELECT SALARY

1491.

FROM EMPLOYEES

1492.

WHERE JOB_ID IN

1493.

SELECT JOB_ID

1494.

FROM JOBS

1495.

WHERE JOB_TITLE LIKE

1496.

ORDER BY

DESC

'SALES%' ) )

6. Encontrar el nombre, departamento, salario y trabajo de aquellos empleados


que trabajan en el mismo departamento que 'IRENE', y cuyo salario es
menor a la media de los salarios del departamento 10.
1497.

SELECT FIRST_NAME, DEPARTMENT_ID, SALARY, JOB_ID

1498.

FROM EMPLOYEES

1499.

WHERE DEPARTMENT_ID

1500.

SELECT DEPARTMENT_ID

1501.

FROM EMPLOYEES

1502.

WHERE FIRST_NAME

1503.

AND SALARY

1504.

= 'IRENE' )

<

SELECT AVG

SALARY

1505.

FROM EMPLOYEES

1506.

WHERE DEPARTMENT_ID

= 10 ) ;

97

7. Mostrar el nombre del empleado y la localidad donde trabaja, para los que
tengan comisin o que trabajen en el mismo departamento que 'IRENE'.
1507.

SELECT FIRST_NAME, D.LOCATION_ID

1508.

FROM DEPARTMENTS D

1509.

LEFT OUTER JOIN EMPLOYEES E

1510.
1511.

AND

ON

( D.DEPARTMENT_ID = E.DEPARTMENT_ID )

( E.DEPARTMENT_ID = (

1514.

SELECT DEPARTMENT_ID

1512.

FROM EMPLOYEES

1513.

WHERE FIRST_NAME

OR COMMISSION_PCT IS NOT NULL)

= 'IRENE')

1515.

8. Recuperar los empleados


respectivos departamentos.
1516.

cuyos

salarios

la

media

de

sus

SELECT FIRST_NAME, DEPARTMENT_ID

1517.

FROM EMPLOYEES

1518.

WHERE SALARY

>(

1519.
1520.

SELECT AVG

SALARY

FROM EMPLOYEES)

GROUP BY DEPARTMENT_ID, FIRST_NAME

9. Recuperar el empleado que ms tarde


departamentos existentes en la empresa.
1521.

exceden

entr

SELECT FIRST_NAME, DEPARTMENT_ID, HIRE_DATE

1522.

FROM EMPLOYEES

1523.

WHERE HIRE_DATE

1526.

ANY (SELECT MAX (HIRE_DATE)

1524.

FROM EMPLOYEES

1525.

GROUP BY DEPARTMENT_ID)

GROUP BY DEPARTMENT_ID, FIRST_NAME, HIRE_DATE

1527.

98

para

cada

uno

de

los

1528. 08. Hospital - Consultas - Hoja 9


1529. Ejecutar las siguientes consultas en la Base de datos Hospital ( UNIONES
DE TABLAS):

TABLAS EMPRESA:
1. Mostrar el nombre completo de todos los EMPLEADOS que trabajan
en Europa o que su JEFE es STEVEN KING.
2. Mostrar el NOMBRE, APELLIDOS, DIRECCIN, CIUDAD, ESTADO CIVIL en
castellano, y si es PROVEEDOR o CLIENTE para todos los PROVEEDORES y
CLIENTES del PAS donde vive KI GEE.
3. Doblar el SALARIO de todos los EMPLEADOS que trabajan en el
departamento de PAT FAY.
4. Quitar la COMISIN a todos los EMPLEADOS que la tengan.
5. Nombre de la REGIN que tiene DEPARTAMENTOS cuyo PRESUPUESTO
excede de 100.000.
6. Mostrar el DEPARTAMENTO que ms CLIENTES tiene asignado, teniendo
en cuenta que un departamento solo puede tener asignados
clientes de su propio pas.

1530.
1. Mostrar el nombre completo de todos
Europa o que su JEFE es STEVEN KING.
1531.

SELECT FIRST_NAME

|| ' ' ||

1532.

FROM EMPLOYEES

1533.

WHERE MANAGER_ID

1534.

(SELECT

EMPLOYEE_ID

FROM EMPLOYEES

1536.

WHERE FIRST_NAME

1537.

AND LAST_NAME

1538.

UNION

1539.

SELECT FIRST_NAME

|| ' ' ||

= 'STEVEN'

= 'KING')

LAST_NAME

1540.

FROM EMPLOYEES

1541.

WHERE DEPARTMENT_ID IN

(SELECT

DEPARTMENT_ID

1543.

FROM DEPARTMENTS

1544.

WHERE LOCATION_ID IN

1545.

EMPLEADOS

LAST_NAME

1535.

1542.

los

(SELECT

LOCATION_ID

1546.

FROM LOCATIONS

1547.

WHERE COUNTRY_ID IN

1548.

(SELECT

COUNTRY_ID

1549.

FROM COUNTRIES

1550.

WHERE REGION_ID

1551.

99

=1)));

que trabajan

en

2. Mostrar el NOMBRE, APELLIDOS, DIRECCIN, CIUDAD, ESTADO CIVIL en castellano, y si


es PROVEEDOR o CLIENTE para todos los PROVEEDORES y CLIENTES del PAIS donde
vive KI GEE.
1552.

SELECT NOMBRE_CLIENTE, APELLIDO_CLIENTE, DIRECCION_CLIENTE, CIUDAD_CLIENTE,

1553.

DECODE

1554.

AS "PROVEEDOR-CLIENTE"

1555.

FROM CLIENTES

1556.

WHERE PAIS_CLIENTE IN

1557.

ESTADO_CLIENTE, 'SINGLE', 'SOLTERO', 'MARRIED', 'CASADO',

'' )

SELECT PAIS

1558.

FROM LOCALIZACIONES

1559.

WHERE ID_LOCALIZACION IN

1560.

SELECT ID_LOCATION

1561.

FROM DEPARTMENTS

1562.

WHERE DEPARTMENT_ID IN

1563.

SELECT DEPARTMENT_ID

1564.

FROM EMPLOYEES

1565.

WHERE FIRST_NAME

1566.

AND LAST_NAME

= 'KI'

= 'GEE' ) ) )

1567.

UNION ALL

1568.

SELECT NOMBRE_PROVE, APELLIDOS_PROVE, DIRECCION_PROVE, CIUDAD_PROVE,

1569. DECODE (
'PROVEEDOR'

ESTADO_PROVE,

1570.

AS "PROVEEDOR-CLIENTE"

1571.

FROM PROVEEDORES

1572.

WHERE PAIS_PROVE IN

1573.

'SINGLE', 'SOLTERO', 'MARRIED', 'CASADO', '' )

1574.

FROM LOCALIZACIONES

1575.

WHERE ID_LOCALIZACION IN

SELECT ID_LOCATION

1577.

FROM DEPARTMENTS

1578.

WHERE DEPARTMENT_ID IN

1579.

SELECT DEPARTMENT_ID

1580.

FROM EMPLOYEES

1581.

WHERE FIRST_NAME

1582.

AND LAST_NAME

3. Doblar el SALARIO de todos los


de PAT FAY.

= 'KI'

= 'GEE' ) ) ) ;

EMPLEADOS

que trabajan en el departamento

SELECT FIRST_NAME, LAST_NAME, DEPARTMENT_ID,

1584.

CASE

1585.

WHEN DEPARTMENT_ID

1586.

ELSE SALARY

1587.

END SALARY,

1588.

ESTADO_CIVIL,

SELECT PAIS

1576.

1583.

ESTADO_CIVIL, 'CLIENTE'

FROM EMPLOYEES

= 20

THEN SALARY

1589.

100

*2

4. Quitar la
1590.

COMISIN

a todos los

EMPLEADOS

que la tengan.

SELECT FIRST_NAME, LAST_NAME,

1591.

CASE

1592.

WHEN COMMISSION_PCT IS NOT NULL THEN NULL

1593.

ELSE COMMISSION_PCT

1594.

END COMISION,

1595.

FROM EMPLOYEES

1596.

5. Nombre de la
100.000.
1597.

que tiene

REGIN

DEPARTAMENTOS

cuyo

PRESUPUESTO

excede de

SELECT REGION_NAME

1598.

FROM REGIONES

1599.

WHERE ID_REGION IN

1600.

SELECT REGION

1601.

FROM PAISES

1602.

WHERE ID_PAIS IN

1603.

SELECT PAIS

1604.

FROM LOCALIZACIONES

1605.

WHERE ID_LOCALIZACION IN

1606.

SELECT ID_LOCATION

1607.

FROM DEPARTMENTS

1608.

WHERE DEPARTMENT_ID IN

1609.

SELECT DEPARTMENT_ID

1610.

FROM EMPLOYEES

1611.

GROUP BY DEPARTMENT_ID

1612.

HAVING SUM (SALARY)

> 100000 ) ) ) ) ;

1613.

6. Mostrar el DEPARTAMENTO que ms CLIENTES tiene asignado, teniendo en


cuenta que un departamento solo puede tener asignados clientes de su
propio pas.
1614.

SELECT XX, COUNT (XX) FROM XX WHERE XX

1615.

XXXX

= 'XX'

101

GROUP BY XX ORDER BY XX;

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