ORACLE 12c SQL. Curso Práctico de Formación PDF
ORACLE 12c SQL. Curso Práctico de Formación PDF
ORACLE 12c SQL. Curso Práctico de Formación PDF
ISBN: 978-607-538-225-8
ISBN: 978-607-538-225-8
Derechos reservados:
Esta obra es propiedad intelectual de su autor y los derechos de publicación en lengua española han
sido legalmente transferidos al editor. Prohibida su reproducción parcial o total por cualquier medio
sin permiso por escrito del propietario de los derechos del copyright.
Nota importante:
La información contenida en esta obra tiene un fin exclusivamente didáctico y, por lo tanto, no está
previsto su aprovechamiento a nivel profesional o industrial. Las indicaciones técnicas y programas
incluidos, han sido elaborados con gran cuidado por el autor y reproducidos bajo estrictas normas de
control. ALF
ALFAOMEGA
AOMEGA GRUPO EDITOR, S.A. de C.V C.V.. no será jurídicamente responsable por:
errores u omisiones; daños y perjuicios que se pudieran atribuir al uso de la información comprendida
en este libro, ni por la utilización indebida que pudiera dársele.
Edición autorizada para venta en México y todo el continente americano.
Impreso en México. Printed in Mexico.
PRÓLOGO ............................................................................................................... XI
Introducción al sublenguaje
s ublenguaje DML .............................................................................. 129
Inserción de información (INSERT)............................................................................ 130
© Alfaomega - RC Libros IX
Oracle 12c SQL. Curso práctico de formación
X © Alfaomega - RC Libros
PRÓLOGO
Este libro tiene como objeto actualizar a la versión 12c de la base de datos de
Oracle el libro Oracle 11g SQL, también publicado por esta editorial en el año 2011.
Se ha mantenido con respecto a la versión 11g del libro todo lo relacionado con el
lenguaje SQL que sigue siendo compatible en la versión 12c de la base de datos de
Oracle, añadiendo, además, las nuevas características del lenguaje SQL que se han
puesto en funcionamiento para la versión 12c. Estas nuevas características se pueden
identificar fácilmente tanto en el índice del libro como a lo largo de los capítulos del
mismo con el símbolo New 12c.
EL AUTOR
2 © Alfaomega - RC Libros
CAPÍTULO 1: CONCEPTOS DE BASES DE DATOS RELACIONALES
© Alfaomega - RC Libros 3
Oracle 12c SQL. Curso práctico de formación
• Entidades.
• Relaciones.
• Atributos.
• Tuplas.
• Dominios.
ENTIDADES
Una entidad es un objeto del mundo real que tiene interés para el sistema, y del
cual se puede extraer una serie de atributos.
Ejemplos de entidades son: una casa, un coche, una oficina, un hospital, una
persona, etc.
RELACIONES
ATRIBUTOS
TUPLAS
Una tupla es la unión de todos los atributos de una entidad en una sola estructura
independiente.
4 © Alfaomega - RC Libros
CAPÍTULO 1: CONCEPTOS DE BASES DE DATOS RELACIONALES
DOMINIOS
Por ejemplo, si consideramos una entidad alumno que incluya como atributos:
DNI y nombre de alumno, la clave de la misma sería el DNI, que es el único dato que
hace diferenciar un alumno de otro.
• Primaria.
• Alternativa.
• Ajena.
CLAVE PRIMARIA
Una clave primaria corresponde con el/los atributos de una entidad cuyo conjunto
de valores distingue unívocamente una tupla de otra.
En el modelo relacional solo se permite una clave primaria por cada entidad.
CLAVE ALTERNATIVA
Una clave alternativa es aquel atributo o conjunto de atributos que podrían haber
formado una clave primaria, pero que al ya existir una definida, no pueden hacerlo.
© Alfaomega - RC Libros 5
Oracle 12c SQL. Curso práctico de formación
CLAVE AJENA
Una clave ajena es aquel atributo o conjunto de atributos de una entidad que se
relaciona con la clave primaria de otra entidad.
Una clave es por definición una restricción que limita la repetición de valores para
la clave (en el caso de las primarias o alternativas), o la asignación de valores
distintos a los de la clave primaria relacionada (para el caso de las claves ajenas).
Así mismo, un dominio definido sobre un atributo también lo es, porque limita los
valores posibles que se pueden almacenar.
Por último, también se pueden definir restricciones que no sean del tipo clave o
del tipo dominio. Por ejemplo, cuando queremos definir que un atributo concreto de
una entidad no pueda almacenar valores vacíos.
Teorías de normalización
6 © Alfaomega - RC Libros
CAPÍTULO 1: CONCEPTOS DE BASES DE DATOS RELACIONALES
Mode
Modelo
lo co
conc
ncep
eptu
tual
al En
Enti
tida
dad/
d/Re
Rela
laci
ción
ón (M
(Mod
odel
elo
o re
rela
laci
cion
onal
al)) Base
Base de da
dato
toss
Entidades Tablas
Atributos Columnas
Tuplas Filas
Dominios Restricciones
Un índice es una estructura de acceso rápido que utiliza el SGBD para localizar
más rápido la información física contenida en la base de datos.
© Alfaomega - RC Libros 7
Oracle 12c SQL. Curso práctico de formación
COMPOSICIÓN DE UN ÍNDICE
Un índice se crea para poder acceder a la información física de manera más rápida
por parte del SGBD, y se compone de un conjunto de columnas que son la clave de
acceso a través del índice + la identificación de la posición física dentro del fichero,
donde se encuentra la fila para recuperar la información correspondiente.
El supuesto práctico que se expresa en las distintas fases de este apartado quiere
reflejar, en un modelo relacional, la estructura de un comercio que vende productos
informáticos. Evidentemente
Evidentemente esta descripción es muy abierta, por lo que el diagrama
que se propone podría ser diferente dependiendo de la interpretación que quiera
darle cada alumno a este enunciado.
En la primera fase del diseño del diagrama tenemos que identificar las entidades,
sus atributos y las restricciones que pueden imponerse sobre las mismas, si las
hubiera.
8 © Alfaomega - RC Libros
CAPÍTULO 1: CONCEPTOS DE BASES DE DATOS RELACIONALES
En la segunda fase hay que definir los atributos de cada entidad que forman la
clave primaria y, si las hubiera, las posibles
po sibles claves alternativas.
© Alfaomega - RC Libros 9
Oracle 12c SQL. Curso práctico de formación
En la última fase del diseño hay que definir las claves ajenas que relacionan unas
entidades con otras y los atributos que se ven afectados por las mismas.
Diseño Entidad/Relación
10 © Alfaomega - RC Libros
CAPÍTULO 1: CONCEPTOS DE BASES DE DATOS RELACIONA
RELACIONALES
LES
Para crear una relación entre entidades o claves ajenas, es necesario que se
cumplan una serie de condiciones:
• La relación con la entidad destino debe ser completa (con todos los atributos que
forman la clave primaria de la misma).
OPERACIONES DE CONSULTA
© Alfaomega - RC Libros 11
Oracle 12c SQL. Curso práctico de formación
Operación de selección
Operación de proyección
Operación de unión
Para poder realizar una operación de consulta de unión entre entidades, tiene que
coincidir el número de atributos de ambas y el tipo.
12 © Alfaomega - RC Libros
CAPÍTULO 1: CONCEPTOS DE BASES DE DATOS RELACIONA
RELACIONALES
LES
Operación de intersección
Para realizar una operación de consulta con intersección entre entidades, tiene
que coincidir el número de atributos de ambas y el tipo.
Operación de diferencia
Para realizar una operación de consulta con diferencia entre entidades, tiene que
coincidir el número de atributos de ambas y el tipo.
© Alfaomega - RC Libros 13
Oracle 12c SQL. Curso práctico de formación
Operación de Join
14 © Alfaomega - RC Libros
CAPÍTULO 1: CONCEPTOS DE BASES DE DATOS RELACIONALES
o Código de 1 a 99.
o Nombre.
o Dirección.
o Provincia.
o Teléfono.
o Código postal.
• Para las provincias habrá que reflejar:
o Código provincia de 1 a 52.
o Nombre.
• El código del centro es unívoco y distinto para todos los centros
estatales.
• En cada centro se imparten una serie de cursos con los siguientes
atributos:
o Código de curso de 1 a 99999.
o Nombre de curso.
o Código del centro donde se imparte.
• Cada curso es impartido por una serie de profesores cualificados con los
siguientes atributos:
o DNI.
o Nombre.
o Apellidos.
o Dirección.
o Teléfono.
o Código postal.
o Código de curso.
o Código de centro.
o Nº de la Seguridad Social.
• El código del curso puede repetirse en centros distintos, por lo que no
es unívoco. Un curso de un centro solo puede ser impartido por un
profesor.
• Por último, a estos cursos asisten una serie de alumnos con los
siguientes atributos:
o DNI.
o Nombre.
o Apellidos.
o Dirección.
o Teléfono.
o Código postal.
o Código de curso.
© Alfaomega - RC Libros 15
Oracle 12c SQL. Curso práctico de formación
o Código de centro.
o Fecha de comienzo del curso.
o Fecha de fin del curso.
• Un alumno en un mismo centro puede asistir a varios cursos, pero al
mismo curso solo podrá asistir en fechas de comienzo distintas.
16 © Alfaomega - RC Libros
INTRODUCCIÓN AL
LENGUAJE SQL
El nombre originario que se le dio a SQL fue SEQUEL y nació como un prototipo de
IBM entre los años 1974 y 1975. Se basaba en el modelo relacional teórico de Codd.
En 1979 aparece el primer gestor de base de datos basado en SQL, que lo adopta
la compañía Oracle.
Oracle 12c SQL. Curso práctico de formación
Más tarde en 1989, con nuevas mejoras, el estándar de ANSI pasa a denominarse
Addendum.
En 1996 ANSI define SQL/PSM como una extensión a SQL, para proporcionar
programación procedimental (fue la inspiración para la creación de PL/SQL).
En 1999 se aprueba una nueva versión oficial estándar de ANSI, conocida como
SQL3 o SQL3-PSM, que añade comparación de expresiones regulares, consultas
recursivas, triggers, soporte para procedimientos, sentencias de control de flujo,
tipos de datos no escalares y algunas de las características de la programación
orientada a objetos.
En 2003 se define SQL 2003, que introduce características del lenguaje XML,
secuencias estandarizadas y columnas con valores autogenerados.
En 2006 se presenta una nueva versión del lenguaje estandarizada por ISO/IEC
9075-14:2006, que define los modos en los que el lenguaje SQL puede ser usado en
conjunción con el lenguaje XML. Define modos de importación y almacenamiento de
datos XML en una base de datos SQL, manipulación y publicación de los datos en
XML y SQL convencional en formularios XML.
En 2008 se realiza una revisión del estándar anterior para añadir el uso de la
sentencia ORDER BY en la definición de cursores externos, adición de la instrucci ón
INSTEAD OF en los triggers y adición de la sentencia TRUNCATE. Esta versión del
lenguaje SQL es la última que ha aparecido hasta el momento y es la que se
encuentra implementada en la versión 12c de Oracle.
18 © Alfaomega - RC Libros
CAPÍTULO 2: INTRODUCCIÓN AL LENGUAJE SQL
SQL STANDARD
SQL/86
SQL/89
En 1989 ANSI definió el SQL/89, basado en el anterior, pero con una serie de
mejoras: definición de claves primarias, integridad de los datos, etc. Una
característica importante definida era la posibilidad de utilizarse a través de dos
interfaces: interactivamente o dentro de programas de aplicación.
© Alfaomega - RC Libros 19
Oracle 12c SQL. Curso práctico de formación
Todas las sentencias SQL comienzan con un verbo, una palabra clave que describe
lo que la sentencia hace: CREATE, INSERT, DELETE, COMMIT son verbos
típicos.
La sentencia continúa con una o más cláusulas. Una cláusula puede especificar los
datos sobre los que debe actuar la sentencia, o proporcionar más detalles acerca de
lo que la sentencia debe hacer. Todas las cláusulas comienzan también con una
palabra clave, tal como WHERE, FROM, INTO y HAVING . Algunas cláusulas son
opcionales y otras necesarias. La estructura y el contenido específico varían de una
cláusula a otra. Muchas cláusulas contienen nombres de tablas o columnas; algunas
pueden contener palabras claves adicionales, constantes o expresiones.
SQL/92
SQL/92 fue desarrollado por el comité técnico NCITS H2 sobre bases de datos.
SQL/92 fue diseñado para ser un estándar en los sistemas manejadores de bases de
datos relacionales (RDBMS) y está basado en su antecesor SQL/89.
En 1992 aparece SQL2 o SQL/92, la versión hoy en día más difundida ([ISO/IEC
1992] [ANSI 1992] [ISO/IEC 1994]). Con la aparición de la segunda versión del
estándar (SQL2) en 1992, prácticamente todos los RDBMS, incluso los no
relacionales, incluían soporte a SQL. Actualmente, SQL se ha convertido en el
lenguaje de consulta más utilizado.
20 © Alfaomega - RC Libros
CAPÍTULO 2: INTRODUCCIÓN AL LENGUAJE SQL
SQL3
SQL3 fue originalmente planeado para su uso en el año 1996, pero tardó 7 años
en desarrollarse, en vez de los tres o cuatro que se pensaba iba a tardar.
Los aspectos más relevantes de esta versión del lenguaje SQL se dividen en
“aspectos relacionales” y “aspectos relacionados con objetos”.
• Aspectos relacionales:
o Nuevos tipos de datos: LARGE OBJECT (LOB), BOOLEAN.
o Nuevos tipos de datos compuestos: ARRAY, ROW.
o Nuevos predicados: SIMILAR, DISTINCT.
o Nueva semántica: ampliación de las clases de vistas, llamadas recursivas,
locators (localizadores), savepoints (puntos de ruptura para deshacer
operaciones).
o Mejoras de seguridad: privilegios otorgados por roles.
o Base de datos activa: triggers (disparadores).
© Alfaomega - RC Libros 21
Oracle 12c SQL. Curso práctico de formación
SQL3 mejora esta capacidad que llamó SQL-invoked routines, para añadir una
tercera clase de rutina conocida como método.
SQL/2006
ISO/IEC 9075-14:2006 define las maneras en las que el lenguaje SQL se puede
utilizar conjuntamente con el lenguaje XML.
Define los mecanismos para importar y guardar datos XML en una base de datos
SQL, manipulándolos dentro de la misma, y publicando los datos XML y los datos SQL
convencionales en forma XML.
22 © Alfaomega - RC Libros
CAPÍTULO 2: INTRODUCCIÓN AL LENGUAJE SQL
Sublenguaje DDL
Sublenguaje DML
Son las órdenes que permiten cambiar las opciones de una conexión determinada
a la base de datos. Consta de las siguientes instrucciones básicas:
Son las órdenes que afectan a la base de datos completa, como por ejemplo la
activación o desactivación del archivado definitivo. Consta de la siguiente instrucción
básica:
24 © Alfaomega - RC Libros
CAPÍTULO 2: INTRODUCCIÓN AL LENGUAJE SQL
CONVENCIONES LÉXICAS
Las expresiones que se diseñan con instrucciones SQL permiten a parte de las
propias palabras reservadas del lenguaje, los siguientes elementos léxicos:
• Tabuladores.
• Retornos de línea.
• Espacios.
• Comentarios.
SELECT ENAME,
SAL*12,
MONTHS_BETWEEN(HIREDATE,SYSDATE)
FROM
EMP;
© Alfaomega - RC Libros 25
ELEMENTOS DE SQL
INTRODUCCIÓN
Como se puede comprobar por los ejemplos anteriores, todo "literal" de tipo
carácter tiene que ser encerrado entre comillas simples (').
TEXTOS
28 © Alfaomega - RC Libros
CAPÍTULO 3: ELEMENTOS DE SQL
• 'Hola'
• 'Oracle.system'
• '09-mar-99'
• N'hello' En este caso, el texto 'hello' será traducido al lenguaje
que se haya definido para el SGBD de Oracle.
Para comprobar el valor que tiene este parámetro, tenemos que ejecutar la
siguiente sentencia SQL:
© Alfaomega - RC Libros 29
Oracle 12c SQL. Curso práctico de formación
ENTEROS
7, +255, -300
NÚMEROS
.
Donde el símbolo (punto) indica el separador decimal de un número, siempre y
cuando se haya definido dentro de la configuración de instalación de Oracle. Si se ha
30 © Alfaomega - RC Libros
CAPÍTULO 3: ELEMENTOS DE SQL
,
indicado notación castellana, será la "coma" ( ) el símbolo que se utilizará como
separador decimal.
E o e indican que el dígito que viene a continuación está en notación exponencial.
El rango de un exponente va de -130 a 125. F o f indica que es un número en coma
flotante de 32 bits, mientras que D o d indica que es de 64 bits.
• Las columnas de una tabla que no tienen valores (están vacías), en realidad
tienen almacenado el valor NULL.
• El valor 0 (cero) de una columna es distinto del valor NULL.
• La función para la conversión de los valores nulos de una columna es NVL,
cuya sintaxis es la siguiente:
NVL(columna, valor_convertido_si_es_nulo).
NVL(salario,0)
© Alfaomega - RC Libros 31
Oracle 12c SQL. Curso práctico de formación
1000 + salario / 2
La siguiente tabla muestra los posibles resultados que ofrecería esta operación de
comparación, dependiendo de los valores de la columna salario, donde FALSE sería
falso y TRUE verdadero.
Para completar las casuísticas que nos podemos encontrar al evaluar una
operación de comparación en la que puede haber valores nulos, se muestra la
siguiente tabla.
32 © Alfaomega - RC Libros
CAPÍTULO 3: ELEMENTOS DE SQL
PSEUDOCOLUMNAS
Una pseudocolumna actúa como una columna, pero no se almacena en una tabla.
Se pueden realizar consultas (SELECT) sobre pseudocolumnas, pero no se pueden
insertar, modificar o borrar sus valores.
Currval y Nextval
© Alfaomega - RC Libros 33
Oracle 12c SQL. Curso práctico de formación
Y por último podemos hacer referencia a secuencias que estén en bases de datos
remotas, utilizando un enlace que se haya definido previamente. En el siguiente
ejemplo se puede comprobar esta nomenclatura:
Level
34 © Alfaomega - RC Libros
CAPÍTULO 3: ELEMENTOS DE SQL
Rowid
© Alfaomega - RC Libros 35
Oracle 12c SQL. Curso práctico de formación
Rownum
Esta pseudocolumna contiene el número indicativo del orden en que Oracle está
devolviendo las filas de una consulta.
COMENTARIOS
Dentro del código SQL o PL/SQL se pueden añadir comentarios para mejorar o
facilitar la comprensión del mismo, cuando vaya a ser revisado por el programador u
otra persona. Un comentario presenta las siguientes características:
36 © Alfaomega - RC Libros
CAPÍTULO 3: ELEMENTOS DE SQL
• Clusters.
• Constraints (restricciones).
• Enlaces de base de datos.
• Dimensiones.
• Librerías de procedimientos externos.
• Tablas de índices organizados.
• Índices.
• Tipos Índice.
• Clases, recursos y código fuente de Java.
• Vistas materializadas.
• Logs de vistas materializadas.
• Modelos de Data Mining.
• Tablas Objeto.
• Tipos Objeto.
• Vistas Objeto.
• Operadores.
• Paquetes.
• Secuencias.
• Funciones y procedimientos almacenados.
• Sinónimos.
• Tablas.
• Vistas.
© Alfaomega - RC Libros 37
Oracle 12c SQL. Curso práctico de formación
• Contextos.
• Directorios.
• Ediciones.
• Puntos de restauración.
• Roles.
• Segmentos Rollback.
• Tablespaces.
• Usuarios.
38 © Alfaomega - RC Libros
CAPÍTULO 3: ELEMENTOS DE SQL
Por ejemplo, una tabla y una vista no se pueden denominar con el mismo nombre,
porque comparten el mismo esquema de nombres. En cambio una restricción y un
trigger sí se pueden llamar igual, porque cada uno de estos objetos del esquema de
base de datos poseen esquemas independientes.
© Alfaomega - RC Libros 39
Oracle 12c SQL. Curso práctico de formación
EMP
"Emp"
SCOTT.FECHAALTA
"INCLUSO ESTO & VALE!"
UN_NOMBRE_LARGO_Y_VALIDO
40 © Alfaomega - RC Libros
CAPÍTULO 3: ELEMENTOS DE SQL
Part es un elemento del objeto consultado, como por ejemplo una columna de
una tabla. Cuando se utiliza hay que anteponerlo con un punto.
Para poder referenciar a una base de datos remota, primero hay que crear un
enlace a la misma, dentro de la propia base de datos desde la que se va a acceder.
© Alfaomega - RC Libros 41
Oracle 12c SQL. Curso práctico de formación
Ejemplos de código para la creación de un enlace a una base de datos externa son
los siguientes:
En el último ejemplo se crea un enlace mienlace2 a una base de datos db1 del
servidor host1, mediante un protocolo TCP/IP (indicado con la letra t),
conectándonos a la misma con el usuario hr y con la password mipassword.
42 © Alfaomega - RC Libros
CAPÍTULO 3: ELEMENTOS DE SQL
© Alfaomega - RC Libros 43
Oracle 12c SQL. Curso práctico de formación
44 © Alfaomega - RC Libros
TIPOS DE DATOS
TIPOS NUMÉRICOS
• NUMBER
• BINARY_FLOAT
• BINARY_DOUBLE
Number
Donde P es la precisión o parte entera del número que admite un máximo de 38
dígitos.
Donde S es la escala o parte decimal del número que admite un rango entre -84 y
127.
DECLARE
Valor1 NUMBER;
Valor2 NUMBER(3);
Valor3 NUMBER(3,2);
BEGIN
Valor1 := 123.89;
Valor2 := 123;
Valor3 := 123.89;
Valor2 := 123.45; -- El sistema almacena 123
Valor2 := 123.55; -- El sistema almacena 124
Binary_Float
Binary_Double
46 © Alfaomega - RC Libros
CAPÍTULO 4: TIPOS DE DATOS
• VARCHAR2
• CHAR
• LONG
Varchar2
El tipo VARCHAR2 puede contener cadenas de texto de longitud variable en la que
se especifique una longitud máxima prefijada.
Existe un subtipo de datos que se define a partir de este tipo de dato que es el
tipo NVARCHAR2.
Char
El tipo CHAR contiene cadenas de texto de longitud fija en la que se puede
especificar la longitud de la misma.
© Alfaomega - RC Libros 47
Oracle 12c SQL. Curso práctico de formación
Existe un subtipo de datos que se define a partir de este tipo de dato que es el
tipo NCHAR.
Almacenamiento en Almacenamiento en
Valor
CHAR(5) VARCHAR2(5)
'JJ' 'JJ ' 'JJ'
'TACON' 'TACON' 'TACON'
'PEP' 'PEP ' 'PEP'
Como se puede observar en la tabla, cuando una cadena tiene menos caracteres
que el tamaño de una columna CHAR, el SGBD rellena la misma con espacios en
blanco hasta completar el tamaño máximo.
Long
Oracle ha mantenido este tipo de datos por compatibilidad con las versiones
anteriores de base de datos, pero recomienda que las columnas definidas con este
tipo de datos se conviertan a tipos LOB (CLOB, NCLOB o BLOB).
48 © Alfaomega - RC Libros
CAPÍTULO 4: TIPOS DE DATOS
El uso de este tipo de datos presenta una serie de restricciones que se enumeran
a continuación:
© Alfaomega - RC Libros 49
Oracle 12c SQL. Curso práctico de formación
Existen los siguientes tipos de datos para el manejo de los tipos fecha y hora:
• DATE
• TIMESTAMP
• TIMESTAMP WITH TIME ZONE
• TIMESTAMP WITH LOCAL TIME ZONE
• INTERVAL YEAR TO MONTH
• INTERVAL DAY TO SECOND
Date
• Siglo.
• Año.
• Mes.
• Día.
• Hora.
• Minuto.
• Segundo.
Timestamp
50 © Alfaomega - RC Libros
CAPÍTULO 4: TIPOS DE DATOS
El tipo TIMESTAMP WITH TIME ZONE almacena lo mismo que el tipo TIMESTAMP,
más los valores de fecha y hora correspondientes a la zona horaria específica para la
base de datos.
El tipo TIMESTAMP WITH LOCAL TIME ZONE almacena lo mismo que el tipo
TIMESTAMP, más los valores de fecha y hora correspondientes a la zona horaria
donde se encuentre físicamente el servidor de base de datos.
© Alfaomega - RC Libros 51
Oracle 12c SQL. Curso práctico de formación
TIPO ROWID
COD_ENTIDAD ROWID
----------- ------------------
9999 AAAO58AAEAAFkJ9AAu
52 © Alfaomega - RC Libros
CAPÍTULO 4: TIPOS DE DATOS
TIPO BOOLEAN
• TRUE: verdadero.
• FALSE: falso.
• NULL: vacío.
TIPOS LOB
• CLOB
• NCLOB
• BLOB
• BFILE
Clob
Existe un subtipo de datos que se define a partir de este tipo de dato que es el
tipo NCLOB.
Blob
© Alfaomega - RC Libros 53
Oracle 12c SQL. Curso práctico de formación
Bfile
• Tipos objeto.
• Tipos de datos REF.
• VARRAYS.
• Tablas anidadas.
Tipos objeto
Los tipos objeto son abstracciones de entidades del mundo real, como por
ejemplo: reservas de libros.
54 © Alfaomega - RC Libros
CAPÍTULO 4: TIPOS DE DATOS
Varrays
Cada elemento tiene un índice que es un número que identifica la posición del
elemento dentro del array.
Tablas anidadas
Los elementos pueden ser de los tipos de datos vistos anteriormente (incluidos los
tipos de datos de usuario).
Los tipos tabla anidada se pueden visualizar como una tabla de una única
columna, o si la tabla anidada es un tipo objeto, como una tabla multicolumnas con
una columna por cada atributo del tipo objeto.
© Alfaomega - RC Libros 55
Oracle 12c SQL. Curso práctico de formación
Aparte de los tipos de datos vistos hasta el momento, que derivan directamente
del estándar de SQL, Oracle suministra una serie de tipos de datos propios para dar
cobertura a las nuevas necesidades en la información almacenada en base de datos,
así como nuevos tipos aparecidos en el último estándar de SQL publicado.
• Tipos ANY.
• Tipos XML.
• Tipos espaciales.
• Tipos multimedia.
Tipos ANY
Tipos XML
Los tipos XML se utilizan para almacenar una consulta de datos XML sobre la base
de datos.
Los tipos XML tienen funciones que permiten acceder, extraer y consultar los
datos XML usando expresiones XPATH.
56 © Alfaomega - RC Libros
CAPÍTULO 4: TIPOS DE DATOS
Tipos espaciales
Los tipos espaciales están diseñados para que sea más sencillo el manejo de los
datos de carácter geográfico, y que resulte más intuitivo para los usuarios el manejo
de aplicaciones GIS (Sistemas de Información Geográfica).
Después de que los datos espaciales se hayan almacenado en una base de datos
Oracle, se pueden fácilmente manipular, recuperar y relacionar con el resto de datos
almacenados en la base de datos.
Tipos multimedia
Este tipo de datos son utilizados por el complemento Oracle Multimedia instalado
en el SGBD, y son similares a las claves Java y C++ que describen datos multimedia.
Este tipo de datos debe ser creado en el esquema ORDSYS de la base de datos y
existen sinónimos públicos para todos los tipos de datos, de forma que puedan
acceder al mismo dentro de su esquema particular.
© Alfaomega - RC Libros 57
GESTIÓN DE
USUARIOS
INTRODUCCIÓN
Cada objeto de dicha base de datos se asocia a un usuario, que es aquel que lo
crea. Este usuario se hace poseedor de los objetos, y además puede administrarlos
hacia otros usuarios de la base de datos a través de permisos.
60 © Alfaomega - RC Libros
CAPÍTULO 5: GESTIÓN DE USUARIOS
Los métodos de arranque y parada de una base de datos Oracle han ido variando
a medida que han ido apareciendo nuevas versiones.
Versión 7
Versión 8
© Alfaomega - RC Libros 61
Oracle 12c SQL. Curso práctico de formación
Versión 8i
Parra arrancar o parar la base de datos hay que conectarse como usuario
INTERNAL utilizando el comando CONNECT INTERNAL.
En las versiones 9i, 10g, 11g y 12c el programa SQL*DBA ha desaparecido, al igual
que el propio usuario INTERNAL.
62 © Alfaomega - RC Libros
CAPÍTULO 5: GESTIÓN DE USUARIOS
SQLPLUS /NOLOG
© Alfaomega - RC Libros 63
Oracle 12c SQL. Curso práctico de formación
CREACIÓN DE UN USUARIO
64 © Alfaomega - RC Libros
CAPÍTULO 5: GESTIÓN DE USUARIOS
GESTIÓN DE ROLES
Los ROLES (papeles) son las características de utilización de la base de datos que
tiene cada usuario. Equivale al perfil de trabajo contra la base de datos, es decir, qué
operaciones se les permite realizar a cada usuario dentro de la base de datos.
Como mínimo, un usuario tendrá que tener el ROLE de conexión para poder
conectarse a la base de datos, dado que con crear un usuario no se hace nada más
que almacenar un nuevo objeto en la base de datos de tipo usuario, sin ningún
privilegio o ROLE asignado.
Para asignar el ROLE de conexión, así como cualquier otro ROLE a un usuario, se
utiliza la siguiente sentencia:
Roles preestablecidos
A continuación, se muestra una tabla con los distintos ROLES preestablecidos por
la versión 12c de Oracle que se pueden asociar a un usuario.
© Alfaomega - RC Libros 65
Oracle 12c SQL. Curso práctico de formación
© Alfaomega - RC Libros 67
Oracle 12c SQL. Curso práctico de formación
68 © Alfaomega - RC Libros
CAPÍTULO 5: GESTIÓN DE USUARIOS
© Alfaomega - RC Libros 69
Oracle 12c SQL. Curso práctico de formación
70 © Alfaomega - RC Libros
CAPÍTULO 5: GESTIÓN DE USUARIOS
© Alfaomega - RC Libros 71
Oracle 12c SQL. Curso práctico de formación
72 © Alfaomega - RC Libros
CAPÍTULO 5: GESTIÓN DE USUARIOS
74 © Alfaomega - RC Libros
CAPÍTULO 5: GESTIÓN DE USUARIOS
Mientras que los ROLES otorgaban permisos a los usuarios para realizar
operaciones sobre objetos de su propiedad, la gestión de privilegios resuelve un
aspecto pendiente, que es la necesidad de que un usuario pueda manipular o
ejecutar objetos de otros usuarios.
Para realizar estas operaciones, existen privilegios que se otorgan también con la
instrucción GRANT, de la siguiente manera:
GRANT privilegio ON objeto TO usuario [WITH GRANT OPTION];
Los privilegios siempre los tiene que otorgar el usuario poseedor del objeto, o
bien el administrador del sistema (o cualquier usuario con el role DBA).
© Alfaomega - RC Libros 75
Oracle 12c SQL. Curso práctico de formación
A continuación, se muestra una tabla con los distintos privilegios que se pueden
otorgar sobre objetos de la base de datos, agrupándolos en las siguientes categorías:
76 © Alfaomega - RC Libros
CAPÍTULO 5: GESTIÓN DE USUARIOS
© Alfaomega - RC Libros 77
Oracle 12c SQL. Curso práctico de formación
Los siguientes privilegios sobre objetos OLAP son válidos si se está usando una
base de datos Oracle con el complemento OLAP instalado en la misma.
Estos privilegios también son aplicables sobre código fuente, clases o recursos de
Java que trata la base de datos Oracle.
© Alfaomega - RC Libros 79
Oracle 12c SQL. Curso práctico de formación
Los objetos
de trabajo del SCHEDULER se crean usando el paquete
DBMS_SCHEDULER .
Los privilegios de un sinónimo (SYNONYM) son los mismos que tenga el objeto
origen sobre el que se ha creado el sinónimo.
80 © Alfaomega - RC Libros
CAPÍTULO 5: GESTIÓN DE USUARIOS
Los siguientes privilegios sobre objetos TABLE autorizan operaciones en una tabla.
INSERT
Permite añadir nuevas filas en la tabla con la sentencia
INSERT.
Permite crear una CONSTRAINT (restricción) que referencia a
REFERENCES la tabla.
No es posible dar este privilegio a un ROLE.
SELECT Permite consultar la tabla con la sentencia SELECT.
UPDATE Permite cambiar datos de la tabla con la sentencia UPDATE.
Los siguientes privilegios sobre objetos VIEW autorizan operaciones en una vista.
© Alfaomega - RC Libros 81
Oracle 12c SQL. Curso práctico de formación
Esta primera sintaxis permite quitar un role concreto a un usuario. Para quitar
varios roles al mismo usuario, se separará el nombre de cada uno de los roles con
una coma.
82 © Alfaomega - RC Libros
CAPÍTULO 5: GESTIÓN DE USUARIOS
BORRAR UN USUARIO
Para poder borrar un usuario, hay que conectarse a la base de datos con un
usuario administrador (role DBA) y ejecutar la siguiente sintaxis de comando:
Esta primera sintaxis permite quitar un role concreto a un usuario. Para quitar
varios roles al mismo usuario, se separará el nombre de cada uno de los roles con
una coma.
USUARIO PUBLIC
© Alfaomega - RC Libros 83
Oracle 12c SQL. Curso práctico de formación
Para un mejor aprovechamiento del curso con objeto de poder probar los
resultados de los supuestos prácticos que se proponen en el libro, se recomienda la
instalación de la versión Oracle 11g XE. Puede encontrar información sobre los
enlaces para su descarga, así como un tutorial de la instalación en el Anexo IV de este
libro.
84 © Alfaomega - RC Libros
EL SUBLENGUAJE
DDL
INTRODUCCIÓN
• Comandos.
• Cláusulas.
• Operadores.
• Funciones de agregado.
Comando Descripción
CREATE Se utiliza para crear objetos: tablas, vistas, índices, etc.
DROP Se utiliza para eliminar objetos.
ALTER Se utiliza para modificar la estructura de los objetos.
EXECUTE Se utiliza para la ejecución de estructuras de código PL/SQL.
GRANT Se utiliza para la asignación de privilegios y roles a un usuario.
REVOKE Se utiliza para anular privilegios y roles de un usuario.
Oracle 12c SQL. Curso práctico de formación
86 © Alfaomega - RC Libros
CAPÍTULO 6: EL SUBLENGUAJE DDL
© Alfaomega - RC Libros 87
Oracle 12c SQL. Curso práctico de formación
88 © Alfaomega - RC Libros
CAPÍTULO 6: EL SUBLENGUAJE DDL
© Alfaomega - RC Libros 89
Oracle 12c SQL. Curso práctico de formación
Este es el método más sencillo para crear una tabla que no posee ningún tipo de
restricción.
Pero esto no es lo habitual, más bien todo lo contrario. Una tabla, por lo general,
siempre lleva asociado algún tipo de restricción (constraint). En los siguientes
ejemplos que se muestran en este capítulo se pueden observar los comandos
necesarios para crear tablas con restricciones.
90 © Alfaomega - RC Libros
CAPÍTULO 6: EL SUBLENGUAJE DDL
En este ejemplo creamos la misma tabla que en el ejemplo anterior, pero además,
le indicamos cuál es la clave primaria de la misma.
En este ejemplo creamos una tabla con indicación de una clave primaria
compuesta de 2 columnas: el código del departamento ( coddepartamento) y el
código del área de dicho departamento (codarea).
Dado que un mismo departamento puede tener varias áreas de trabajo, la única
forma de diferenciar un registro de otro es la composición de las 2 columnas para
formar la clave primaria.
© Alfaomega - RC Libros 91
Oracle 12c SQL. Curso práctico de formación
En este ejemplo además de indicar una clave primaria, indicamos que existe otra
columna indexada dentro de la tabla: es la columna que almacena el número de la
Seguridad Social (num_segsocial), que al ser un número que no se repite nunca,
habrá de indicarse la restricción UNIQUE para evitar errores de grabación (duplicidad
de números). Por tanto, esta restricción indica que los valores de dicha columna son
únicos.
En este ejemplo se aprecian dos formas distintas de indicar que los valores de una
columna no pueden dejarse en blanco cuando se realiza la inserción de datos en la
tabla. Esta indicación se consigue mediante la cláusula NOT NULL.
92 © Alfaomega - RC Libros
CAPÍTULO 6: EL SUBLENGUAJE DDL
© Alfaomega - RC Libros 93
Oracle 12c SQL. Curso práctico de formación
Para nuestro caso concreto restringimos que para el campo salario no se puedan
introducir valores inferiores o iguales a 15.000 euros.
La cláusula CHECK asociada con un criterio permite evaluar los datos antes de ser
introducidos, a fin de determinar si cumplen o no las condiciones del criterio
indicado.
Este ejemplo muestra uno de los aspectos más importantes en cuanto al concepto
relacional de una base de datos, y en cuanto a la integridad de la misma.
En primer lugar tenemos una tabla de estados (p.e.: “soltero”, “viudo”, “casado”,
etc.), cuya clave primaria es el campo codigo.
94 © Alfaomega - RC Libros
CAPÍTULO 6: EL SUBLENGUAJE DDL
Por otro lado hemos creado una tabla ejemplo8, en la que tenemos un campo
denominado cod_estado que se encuentra referenciado al campo codigo de la
tabla estados.
Además, la opción ON DELETE CASCADE permite que cuando se borre una fila de
la tabla padre, y el campo de unión con la tabla hijo tenga un valor igual al borrado,
también se borran en la tabla hijo, el/las filas con dicho valor.
INTEGRIDAD REFERENCIAL
Este concepto nos va a permitir mantener una consistencia entre los datos
relacionados en la tabla padre e hijo, de manera que las columnas que forman la
clave ajena en la tabla hija no podrán tener valores distintos a sus homólogas
referenciadas en la tabla padre.
© Alfaomega - RC Libros 95
Oracle 12c SQL. Curso práctico de formación
Vamos a ver a continuación el significado de cada una, y cómo afectan a los datos.
Asimismo, podremos enunciar cómo se indican mediante instrucciones del lenguaje
SQL de Oracle.
On delete restrict
Esta cláusula impide que se borren datos en la tabla padre, siempre y cuando
existan en la tabla hija datos en las columnas referenciadas, que coincidan con dicho
valor.
ESTADOS PERSONA
3423423 CARLOS C
Tomando el ejemplo anterior vemos que existe una tabla padre que es Estados
y una tabla hija Persona donde existe una clave ajena que es
Persona.CodEstado sobre la columna Estados.Codigo. Para crear dicha
clave ajena, mediante código SQL de Oracle, utilizaríamos un constraint al final de la
definición de la tabla Persona de la siguiente manera:
96 © Alfaomega - RC Libros
CAPÍTULO 6: EL SUBLENGUAJE DDL
On update restrict
Esta cláusula impide que se modifiquen datos en la tabla padre, siempre y cuando
existan en la tabla hija datos en las columnas referenciadas, que coincidan con dicho
valor.
On delete cascade
Esta cláusula permite que se borren valores en la tabla padre aunque existan
valores iguales al borrado en la hija. Pero para mantener la integridad referencial en
los datos, también borra todas las filas de la tabla hija que contengan la clave de la
fila borrada en el padre.
© Alfaomega - RC Libros 97
Oracle 12c SQL. Curso práctico de formación
ESTADOS PERSONA
On update cascade
Esta cláusula permite que se actualicen valores en la tabla padre aunque existan
valores iguales al borrado en la hija. Para mantener la integridad referencial en los
datos, también se actualizan todas las filas de la tabla hija que contengan el valor
actualizado en el padre.
98 © Alfaomega - RC Libros
CAPÍTULO 6: EL SUBLENGUAJE DDL
© Alfaomega - RC Libros 99
Oracle 12c SQL. Curso práctico de formación
Fig. 6-17 Sintaxis del elemento COLUMN_CLAUSES para la alteración de una tabla.
Hay que tener en cuenta que cuando se añade una nueva restricción a una tabla
que ya contiene información, si los valores de la misma no cumplen las condiciones
válidas para la restricción que se pretende añadir, esta no se creará. En nuestro caso,
si existen valores para la columna empno vacíos (NULL) o repetidos, la restricción de
clave primaria no se podrá crear, porque por definición una clave primaria no admite
valores nulos ni repetidos para el/las columnas que forman dicha clave.
En este ejemplo alteramos la tabla ejemplo1 para liberar todo el espacio sin
utilizar que tiene asociado la tabla.
Hay que tener en cuenta que podremos borrar una columna de una tabla cuando
la misma no forme parte de ninguna clave o esté referenciada por claves ajenas
desde otras tablas.
El comando DROP TABLE permite borrar una tabla y todos los elementos
asociados a la misma (índices, restricciones, columnas, valores de las mismas, etc.).
En el único caso que el SGBD no permite borrar una tabla es cuando existen
dependencias con otras (es la tabla padre de otra), en ese caso habrían de borrarse
primero la/las tablas hijo, y luego la tabla padre, o bien anular las restricciones de
tipo FOREIGN KEY que existiesen en las tablas hijo.
• Tabla ESTADOS_CIVILES
o Codigo CHAR(1) CLAVE PRIMARIA
o Descripcion VARCHAR2(50) NO NULA
• Tabla PERSONA
o Nif VARCHAR2(9) CLAVE PRIMARIA
o Codestadocivil NUMBER(1) NO NULA
o Nombre VARCHAR2(100) NO NULA
MANEJO DE ÍNDICES
Un índice se crea automáticamente mediante la indicación de la clave primaria
(PRIMARY KEY), alternativa (UNIQUE) o ajena (FOREIGN KEY).
• Único: indica que los valores del índice no se pueden repetir por cada fila.
• No único: indica que los valores del índice se pueden repetir por fila.
MANEJO DE VISTAS
Las vistas son máscaras que se definen sobre una o varias tablas y están ligadas a
operaciones de consulta (SELECT) sobre las mismas.
Una vista se crea a partir de una sentencia de consulta (SELECT) sobre una o varias
tablas.
Hay que considerar también que ocurre con las tablas y permisos que afectan a
la/las tablas de la consulta asociada:
afectadas. Pero esta vista no presentará datos hasta que existan las tablas y el
usuario tenga permisos sobre las mismas.
• WITH CHECK OPTION: obliga a que los datos que se inserten o actualicen
en la vista, cumplan con las condiciones de la consulta asociada. A este tipo de
restricción el SGBD de Oracle le asigna un nombre por defecto, a menos que
se añada la cláusula CONSTRAINT y nombre de restricción.
En este ejemplo creamos una vista sobre la tabla empleados que únicamente
nos muestra los datos del departamento 20.
Crear las siguientes vistas de solo lectura para que los usuarios las
consulten. Se indica, para cada vista, las consultas (querys) a utilizar.
1. Crear una vista que muestre los pacientes de un hospital concreto,
solicitando el nombre del hospital. La consulta que hay que añadir es:
© Alfaomega - RC Libros 117
Oracle 12c SQL. Curso práctico de formación
2. Crear una vista de solo lectura que pueda mostrar todos los miembros
de la plantilla según el turno que indique el usuario. La consulta que hay
que añadir es:
SELECT p.nombre AS "NOMBRE EMPLEADO",
p.apellidos, p.funcion, s.nombre AS "NOMBRE
SALA", h.nombre AS "NOMBRE HOSPITAL"
FROM hospital h, sala s, plantilla p,
plantilla_sala ps
WHERE
p.turno = '&Indique_un_turno'
AND ps.plan_nif = p.nif
AND s.hosp_codigo = ps.sala_hosp_codigo
AND s.codigo = ps.sala_codigo
AND h.codigo = s.hosp_codigo;
WITH READ ONLY;
SECUENCIAS
Una secuencia es un objeto de la base de datos que como tal se almacena, siendo
poseedor un usuario de la misma, y que permite la generación automática de
números dado un número de comienzo y un incremento.
SQL> DECLARE
VAR1 NUMBER;
BEGIN
VAR1:= CUENTA1.NEXTVAL;
DBMS_OUTPUT.PUT_LINE('Inicializada secuencia'||
' a valor '||VAR1);
SELECT CUENTA1.NEXTVAL INTO VAR1 FROM DUAL;
DBMS_OUTPUT.PUT_LINE('Incrementada secuencia'||
' valor '||VAR1);
DBMS_OUTPUT.PUT_LINE('Valor actual secuencia'||
' es '||CUENTA1.CURRVAL);
END;
Tabla EJEMPLO1
EMP_NO: Número de empleado (4 dígitos numéricos). Índice
Primario.
APELLIDO: Apellido (16 caracteres).
FECHA_ALT: Fecha de alta en la empresa (por defecto la del día).
SALARIO: Salario mensual (9 dígitos numéricos).
2. Alterar la tabla ejemplo1 que se ha creado con anterioridad para que
se recojan estos nuevos campos:
COD_DOMI: Codificación del domicilio (3 caracteres). Únicamente
admite los valores siguientes: 'CL', 'AVD', 'RD', 'PSO'.
SEGSOCIAL: Nº de la Seguridad Social (9 dígitos numéricos). No
admite valores nulos y por defecto tiene que tener el
valor 0.
3. Crear la tabla ejemplo2 según se indica a continuación utilizando
instrucciones SQL/DDL:
Tabla EJEMPLO2
EMP_NO: Número de empleado (4 dígitos numéricos). Índice
Primario.
4. Borrar la tabla ejemplo2.
COL1 COL2
---------- ----------
1 PRUEBA 1
2 PRUEBA 2
3 PRUEBA 3
SET COLINVISIBLE ON
COL2
----------
A
B
COL1 COL2
---------- ----------
1 A
2 B
Con anterioridad a la versión 12c, para poder asociar el valor de una secuencia a
una columna, era necesario programar un trigger donde se implementase la
asociación del valor de la secuencia a una columna.
X Y
---------- ----------
1 333
2 334
11 400
X Y Z
---------- ---------- ----------
1 333 13
2 334 13
11 400 -3
Comando Descripción
INSERT Se utiliza para cargar información en una tabla.
SELECT Se utiliza para consultar información de una tabla.
UPDATE Se utiliza para actualizar información de una tabla.
DELETE Se utiliza para borrar información de una tabla.
Las cláusulas son condiciones de modificación utilizadas para d efinir los datos que
se desean seleccionar o manipular, y que se aplican a alguno de los comandos
anteriores. A continuación, se muestran las cláusulas básicas:
Comando Descripción
Se utiliza para especificar la/s tabla/s desde las que se va a
FROM
seleccionar información.
Se utiliza para especificar condiciones que deben cumplir los
WHERE
registros a los que se accede en la/s tabla/s.
Se utiliza para separar los registros seleccionados en grupos
GROUP BY
específicos que cumplan las mismas condiciones.
Oracle 12c SQL. Curso práctico de formación
Comando Descripción
Se utiliza para expresar la condición que debe de satisfacer un
HAVING
grupo acotado previamente con la cláusula GROUP BY.
Se utiliza para ordenar los registros seleccionados de acuerdo
ORDER BY
a la/s columna/s que se indiquen.
Este método inserta valores para las columnas específicas que aparecen después
de la cláusula INTO y antes de VALUES.
Este método produce el mismo efecto que el caso anterior, insertando valores en
columnas concretas; aquellas que se han indicado en la instrucción SELECT.
Este método inserta valores concretos en la tabla ACCOUNTS del usuario SCOTT
para la base de datos remota SALES.
Este método inserta valores concretos en la tabla EMP y retorno, además de los
valores (SALARIO * 12) y TRABAJO a las variables :BND1 y :BND2.
• DIRECTOR
o Nif: 12345678B
o Nombre: Juan
o Apellidos: Lopez Z.
o No depende de ningún otro empleado.
o Entró a formar parte de la plantilla del hospital el 11 de
enero de 1970 y cobra un salario de 3.000 € sin que cobre
comisiones por realizar su trabajo.
o El director del hospital desarrolla su labor dentro del
departamento con código 4.
• GERENTE
o Nif: 87654321A
o Nombre: Fermin
o Apellidos: Garcia L.
o Esta persona depende directamente del DIRECTOR. Entró a
formar del hospital el 12 de enero de 1975 , cobra un salario
de 2.000 € que se ve complementado con una comisión fija
de 1.000 €.
o El director del hospital desarrolla su labor dentro del
departamento con código 4.
• ADMINISTRADOR
o Nif: 64328285C
o Nombre: Rosa
o Apellidos: Miranda R.
o Esta persona depende directamente del GERENTE. Entró a
formar parte del hospital el 13 de enero de 1979 , cobra un
salario de 1.500 € sin recibir comisiones por su trabajo.
o El director del hospital desarrolla su labor dentro del
departamento con código 4 .
• CONTABLE
o Nif: 83253235F
o Nombre: Miguel
o Apellidos: Soria T.
o Esta persona depende directamente del ADMINISTRADOR.
Entró a formar parte del hospital el 14 de enero de 1980,
cobra un salario de 1.000 € y si realiza bien su trabajo cobra
una comisión de 300 €.
o El director del hospital desarrolla su labor dentro del
departamento con código 4.
CONSULTAS BÁSICAS
La sintaxis básica de una consulta de selección es la siguiente:
Ejemplo
SELECT NOMBRE, TELEFONO FROM CLIENTES;
Comando Descripción
* Devuelve todas las columnas de una tabla.
Omite las filas repetidas para la combinación de columnas
DISTINCT
que se incluyan después del predicado.
Predicado *
Por norma general no se incluye como predicado, dado que se asume por defecto
al realizar una consulta y el SGBD selecciona todos los registros que cumplen las
condiciones de la instrucción SQL.
EJEMPLO
Predicado DISTINCT
EJEMPLO
EL CONCEPTO DE ALIAS
CRITERIOS DE SELECCIÓN
Anteriormente hemos visto la forma de recuperar los registros de las tablas. En
todas ellas se devolvían todas las filas de la mencionada tabla (salvo en el caso del
DISTINCT).
A lo largo de este apartado se estudiarán las posibilidades de filtrar las filas que
devuelve la consulta, con el fin de recuperar solamente aquellas que cumplan una
condición preestablecida.
La cláusula WHERE
La cláusula WHERE puede usarse para determinar qué filas de la/s tabla/s
enumeradas en la cláusula FROM aparecerán en los resultados de la instrucción
SELECT. Después de escribir esta cláusula se deben especificar las condiciones o
criterios de selección.
Si no se emplea esta cláusula, la consulta devolverá todas las filas de la tabla. Por
tanto, la cláusula WHERE es opcional, pero cuando aparece debe ir a continuación de
la cláusula FROM, por lo que la sintaxis de la cláusula SELECT quedaría de la
siguiente forma:
EJEMPLO
Esta consulta nos devuelve los datos de los apellidos y salarios de los empleados
cuyo salario sea mayor a 210.000 euros.
• AND
• OR
• NOT
<expresión1> operador <expresión2>
EJEMPLO
Esta consulta nos devuelve todas las columnas de la tabla Empleados, para
aquellos empleados que tengan una edad comprendida entre 26 y 49 años (ambos
inclusive).
EJEMPLO
Esta consulta nos devuelve todas las filas de la tabla Empleados, para aquellos
empleados que tengan una edad comprendida entre 26 y 49 años (ambos inclusive),
o bien aquellos empleados cuyo sueldo sea mayor a 1.000 €.
EJEMPLO
Esta consulta nos devuelve todas las filas de la tabla Empleados, para aquellos
empleados cuyo estado social sea distinto a Soltero.
EJEMPLO
Esta consulta nos devuelve todos los datos de la tabla Empleados, para aquellos
empleados cuyo sueldo se encuentre comprendido entre 1.001 € y 4.999 € (ambos
inclusive), o bien aquellos empleados cuya provincia sea “Madrid” y además estén
casados.
Para indicar que deseamos recuperar las filas de una tabla según el intervalo de
valores de una columna emplearemos preferentemente el operador BETWEEN en vez
de utilizar una combinación de operadores lógicos como hemos visto anteriormente.
EJEMPLO
Esta consulta devuelve todas las filas de la tabla Pedidos para aquellos códigos
postales entre 28000 y 28999 (ambos inclusive).
Se utiliza para comparar una expresión de cadena con un modelo dentro de una
expresión SQL que aparece tras la cláusula WHERE.
Por tanto, el símbolo '%' es uno de los comodines que se pueden utilizar para
indicarle a una consulta que utilice el operador LIKE, que busque cualquier carácter
en el lugar que se incluya este símbolo.
EJEMPLO
En este ejemplo devolvemos todas las filas de la tabla vuelos para las
compañías que empiecen por 'A', como por ejemplo: AVIACO, AIR EUROPA, etc.
EJEMPLO
En este ejemplo devolvemos todas las filas de la tabla vuelos para las
compañías que empiecen por 'A', y que además tengan obligatoriamente 5 letras,
como por ejemplo: AVIACO.
EJEMPLO
En este ejemplo devolvemos todas las filas de la tabla vuelos para las
compañías que contengan una 'A' en cualquier posición, como por ejemplo: AVIACO,
SPAIN AIR, OSAKA AIRLINES, etc.
Este operador devuelve aquellas filas cuya columna indicada coincide con alguno
de los valores de una lista.
EJEMPLO
Esta consulta nos devuelve todos los campos de la tabla Pedidos para las
provincias: “Madrid”, “Barcelona” o “Sevilla”.
EJEMPLO
Esta consulta nos devuelve todas las filas de la tabla Pedidos, para aquellos
pedidos cuyo importe sea superior o igual a 1.200,35 €.
EJEMPLO
FUNCIONES DE CONVERSIÓN
Las funciones que se explican en este apartado permiten realizar la mayoría de
las conversiones de datos necesarias para representar la información que se obtiene
de las tablas, o bien para poder realizar filtros sobre las mismas.
Función TO_NUMBER
Esta función permite realizar la conversión de expresiones a formato numérico.
EJEMPLO
Función TO_CHAR
Esta función permite realizar la conversión de expresiones a formato texto.
EJEMPLO
Función TO_DATE
Esta función permite realizar la conversión de expresiones a formato fecha y/o
hora.
EJEMPLO
EJEMPLO
Esta consulta nos devuelve ' 10.000' después de convertir el número 10000 con
formato.
Hay que tener presente que la cadena devuelta tiene un espacio delante del 1,
porque se reserva esta posición para el signo: + o -. El signo positivo no aparece
porque se sobrentiende, pero igualmente el espacio en blanco queda reservado.
EJEMPLO
Esta consulta nos devuelve ' 10.000,90' después de convertir el número 10000.9
con formato. Al igual que en el caso anterior, la cadena devuelta tiene un espacio en
blanco delante del 1.
EJEMPLO
Esta consulta nos devuelve 1001 después de convertir la cadena '1.001' con
formato.
EJEMPLO
EJEMPLO
EJEMPLO
Esta consulta nos devuelve la fecha 01/01/08, después de convertir la cadena '01-
ENE-08 22:13:00' con formato 'dd-MON-yy hh24:mi:ss.
EJEMPLO
Esta consulta nos devuelve la cadena ' VIERNES 21-AGOSTO -2009', después de
convertir la fecha del día del sistema ( SYSDATE) con formato.
FUNCIONES DE CARACTERES
Función Descripción
ASCII Código ASCII de un carácter.
ASCIISTR Convierte en ASCII una cadena de caracteres.
CHARTOROWID Convierte una cadena en un tipo Rowid.
CHR Carácter correspondiente a un código ASCII.
COALESCE Primera cadena no nula.
COMPOSE Compone cadenas de juegos distintos en una sola.
CONCAT Concatena cadenas.
CONVERT Convierte una cadena de un juego de caracteres a otro.
DECODE Decodificación de valores.
GREATEST La mayor de las cadenas.
INITCAP Cadena de texto en formato título.
INSTR Búsqueda de una cadena dentro de otra.
LEAST La menor de las cadenas.
LENGTH Longitud de una cadena.
LNNVL Compara una condición que puede tener NULL a ambos lados.
LOWER Cadena de texto en minúsculas.
LPAD Ajuste de cadenas a la izquierda.
LTRIM Elimina blancos por la izquierda.
© Alfaomega - RC Libros 149
Oracle 12c SQL. Curso práctico de formación
Función Descripción
NULLIF Comparador de cadenas buscando nulos.
NVL2 Comparación de una cadena para ver si es NULL o NOT NULL.
REPLACE Reemplazo de caracteres.
RPAD Ajuste de cadenas a la derecha.
RTRIM Elimina blancos por la derecha.
SUBSTR Corta una cadena.
TRANSLATE Sustituye caracteres múltiples de una cadena.
TRIM Elimina blancos a la derecha e izquierda de la cadena.
UPPER Cadena de texto en mayúsculas.
Función ASCII(cadena)
EJEMPLO
Función ASCIISTR(cadena)
Toma como argumento una cadena o una expresión y devuelve una versión ASCII
de la cadena.
EJEMPLO
Función CHARTOROWID(X)
EJEMPLO
Esta función nos devuelve al apellido2 del empleado cuya fila se encuentra
almacenada físicamente en la dirección (ROWID) 'AAAFd1AAFAAAABSAA/'.
Función CHR(X)
EJEMPLO
Función COALESCE(cadena[,cadena…]
Al menos una de las cadenas incluidas en la función tiene que ser un literal
diferente a NULL.
EJEMPLO
Función COMPOSE(cadena)
Toma como argumento una cadena o una expresión que se compone en una
única cadena.
EJEMPLO
Concatena 2 cadenas, es decir, las une de la misma manera que el símbolo ||.
EJEMPLO
EJEMPLO
EJEMPLO
SELECT DECODE(cargo,'Administrativo',1
,'Autonomo',2
,3) FROM empleados;
Función GREATEST(expresion1,expresion2,….)
EJEMPLO
Función INITCAP(cadena)
EJEMPLO
EJEMPLO
Función LEAST(expresion1,expresion2,….)
EJEMPLO
Función LENGTH(cadena)
EJEMPLO
Función LNNVL(condición)
EJEMPLO
Esta función nos devuelve el conteo de los estudiantes cuya nota es mayor que la
media del curso, pero si por ejemplo la media del curso aún no ha sido calculada y
tiene un valor null, esta consulta no devolverá nada. Si por el contrario tenemos un
valor para la media del curso y algún estudiante aún no se le ha calculado su nota,
estos últimos no se incluirán en el conteo final.
Esta función nos devuelve el mismo conteo que la SELECT anterior, pero también
incluye en el conteo los estudiantes cuya nota esté vacía.
Función LOWER(cadena)
EJEMPLO
Función LPAD(cadena1,x,[cadena2])
EJEMPLO
Prueba
--------------
Short String
Función LTRIM(cadena)
Elimina todos los espacios en blanco que haya a la izquierda del primer carácter
de la cadena, distinto de blanco.
EJEMPLO
Esta función nos devuelve la cadena '1.000', eliminando el espacio que se reserva
para el signo a la izquierda del número 1.
Función NULLIF(expresion1,expresion2)
EJEMPLO
EJEMPLO
SELECT NVL2(comision,salario+comision,salario)
FROM EMPLEADO;
Función REPLACE(cadena1,cadena2[,cadena3])
EJEMPLO
EJEMPLO
Función RPAD(cadena1,x,[cadena2])
EJEMPLO
Función RTRIM(cadena)
Elimina todos los espacios en blanco que haya a la derecha del último carácter de
la cadena distinto de blanco.
EJEMPLO
Esta función nos devuelve la cadena 'Pepito' eliminando los 3 espacios en blanco
que había a la derecha de la letra o.
EJEMPLO
EJEMPLO
Esta función nos devuelve la cadena '3def' después de extraer todos los caracteres
que había en la misma desde la posición 6 (inclusive).
Función TRANSLATE(expresión,cadena1,cadena2)
EJEMPLO
Función TRIM(cadena)
Elimina todos los espacios en blanco que haya a la derecha del último carácter de
la cadena distinto de blanco y delante del primer carácter de la cadena distinto de
blanco.
EJEMPLO
Esta función nos devuelve la cadena 'Pepito' eliminando los 3 espacios en blanco
que había a la derecha de la letra 'o' y a la izquierda de la letra 'P'.
Función UPPER(cadena)
Devuelve la cadena en mayúsculas.
EJEMPLO
FUNCIONES DE NÚMERO
En este apartado se definen una serie de funciones representativas para el uso de
los números.
Función Descripción
ABS Valor absoluto.
ACOS Arco coseno.
ASIN Arco seno.
ATAN Arco tangente de 1 número.
ATAN2 Arco tangente de 2 números.
BIN_TO_NUM Convierte un código binario en un número.
CEIL Número entero más pequeño, >= a otro.
COS Coseno.
SIN Seno.
Función Descripción
TAN Tangente.
COSH Coseno hiperbólico.
SINH Seno hiperbólico.
TANH Tangente hiperbólica.
EXP Exponente neperiano.
FLOOR Número entero más grande, <= a otro.
LN Logaritmo natural / neperiano.
LOG Logaritmo de un número con base.
MOD El resto de una división.
NANVL Para devolver un número en lugar de otro que no lo sea.
POWER Potencia de un número.
ROUND Redondeo de números.
SIGN Devuelve el signo de un número.
SQRT Raíz cuadrada de un número.
TRUNC(Number) Truncado de números.
VSIZE Devuelve el nº de bytes que ocupa una expresión.
Función ABS(x)
EJEMPLO
EJEMPLO
EJEMPLO
Función BIN_TO_NUM(bit1,bit2,…)
EJEMPLO
Función CEIL(x)
Nos devuelve el número entero más pequeño que sea mayor o igual a X.
EJEMPLO
EJEMPLO
EJEMPLO
Función EXP(n)
EJEMPLO
Función FLOOR(x)
Nos devuelve el número entero más grande que sea igual o menor a X.
EJEMPLO
Función LN(x)
EJEMPLO
Función LOG(n,x)
EJEMPLO
Función MOD(x,y)
EJEMPLO
Función NANVL(n2,n1)
EJEMPLO
Si tomamos como referencia la siguiente tabla (FLOAT_POINT) con los valores que
se indican:
BIN_FLOAT NANVL(BIN_FLOAT,0)
---------- ------------------
1.235e+003 1.235E+003
Nan 0
Función POWER(n2,n1)
EJEMPLO
Función ROUND(x,[,y])
EJEMPLO
Función SIGN(n)
Devuelve el signo de "n", siendo "n" un número. Los posibles valores a devolver
por la función son los siguientes:
EJEMPLO
Función SQRT(n)
EJEMPLO
Función TRUNC(n1[,n2])
EJEMPLO
EJEMPLO
Función VSIZE(expresión)
EJEMPLO
FUNCIONES DE FECHA
Función Descripción
ADD_MONTHS Añadir mes/es a una fecha.
CURRENT_DATE Fecha actual en la zona horaria de la sesión.
CURRENT_TIMESTAMP Fecha y hora actual en la zona horaria de la sesión.
DBTIMEZONE Zona horaria de la base de datos.
EXTRACT(datetime) Extrae elementos de una fecha o fecha/hora.
LAST_DAY Último día del mes de la fecha.
MONTHS_BETWEEN Mes/es entre 2 fechas.
NEXT_DAY Fecha del primer día que coincida con el indicado.
ROUND(date) Redondea una fecha.
SYSDATE Fecha actual del SGBD de Oracle.
SYSTIMESTAMP Fecha, hora, segundos y zona horaria del SGBD de Oracle.
Función ADD_MONTHS(d,x)
EJEMPLO
Función CURRENT_DATE
EJEMPLO
Esta consulta nos devuelve la fecha actual de acuerdo a la zona horaria que tenga
la sesión con la que nos hemos conectado a la base de datos Oracle.
Función CURRENT_TIMESTAMP
EJEMPLO
Esta consulta nos devuelve la fecha y hora actual de acuerdo a la zona horaria que
tenga la sesión con la que nos hemos conectado a la base de datos Oracle.
Función DBTIMEZONE
EJEMPLO
Función EXTRACT(datetime)
Los valores YEAR, MONTH, DAY, HOUR, MINUTE y SECOND se pueden extraer de
cualquier formato de fecha y fecha/hora, mientras que los valores TIMEZONE solo se
pueden extraer de valores de tipo TIMESTAMP WITH TIME ZONE.
EJEMPLO
Esta consulta nos devolvería 2011 si estamos dentro de este año cuando la
ejecutemos.
EJEMPLO
Función LAST_DAY(fecha)
Devuelve la última fecha del último día del mes que contiene la fecha indicada. El
valor devuelto siempre es una fecha.
EJEMPLO
Esta consulta nos devuelve el último día del mes correspondiente a la fecha actual
(fecha del sistema).
EJEMPLO
Función NEXT_DAY(date,char)
Devuelve la fecha correspondiente al primer día que coincida con "char", y que
sea mayor que la fecha "date" indicada.
EJEMPLO
Función ROUND(fecha[,formato])
EJEMPLO
EJEMPLO
Función SYSDATE
Esta función devuelve la fecha y hora actual del sistema operativo en el que reside
la base de datos. El formato devuelto es de tipo DATE.
EJEMPLO
Función SYSTIMESTAMP
Esta función devuelve la fecha y hora actual del sistema incluyendo segundos
fraccionales y zona horaria del sistema operativo en el que reside la base de datos. El
formato de la fecha devuelto es de tipo TIMESTAMP WITH TIME ZONE.
EJEMPLO
FUNCIONES DE SESIÓN
Función Descripción
UID Identificador de sesión.
USER Nombre de usuario de sesión.
USERENV Información de la sesión.
Función UID
EJEMPLO
Esta consulta nos devolvería un número que identifica la sesión donde se ejecuta
esta sentencia.
Función USER
Esta función devuelve el nombre del usuario de sesión que ejecuta la sentencia.
EJEMPLO
Esta consulta nos devolvería el nombre del usuario con el que se ha conectado a
la sesión y que está ejecutando en este momento la instrucción.
Función USERENV('parámetro')
Esta función devuelve información sobre la sesión actual, para ello utiliza una
serie de parámetros que nos retornará la información. Estos parámetros son:
EJEMPLO
FUNCIONES DE AGRUPAMIENTO
Son funciones que operan contra el conjunto de filas que recupera la consulta. Su
resultado es un único valor y su funcionalidad se expresa en el siguiente cuadro:
Comando Descripción
MIN Calcula el valor mínimo de una columna.
MAX Calcula el valor máximo de una columna.
AVG Calcula la media aritmética de una columna.
SUM Calcula la suma de todos los campos de una columna.
COUNT Cuenta el número de filas de una columna.
COVAR_SAMP Calcula la covarianza simple.
STDDEV Calcula la desviación estándar.
Calcula la desviación estándar aplicando la raíz cuadrada de la
STDDEV_SAMP
varianza simple.
VAR_SAMP Calcula la varianza simple.
VARIANCE Calcula la varianza.
Para utilizar las funciones de agrupamiento, podemos utilizar dos tipos diferentes
de sintaxis de consulta SELECT dependiendo de si además de estas funciones
aparecen o no columnas de una tabla:
EJEMPLO
Esta consulta nos devuelve la velocidad crucero mínima y máxima de todos los
aviones contenidos en la tabla AVIONES.
Función AVG
EJEMPLO
Esta consulta nos devuelve la media de los gastos mayores a 1.000 euros para la
tabla pedido.
Función SUM
Esta función devuelve la suma del conjunto de valores contenidos en una columna
o columnas de una consulta.
EJEMPLO
Esta consulta nos devuelve el total de gastos que se producen en la tabla pedidos
para cada una de las columnas implicadas (compras y Otros Gastos).
Función COUNT
EJEMPLO
Función COVAR_SAMP(expresion1,expresion2)
EJEMPLO
Esta consulta nos devolverá la covarianza simple entre los valores de salario y
comision de todos los empleados de la tabla.
EJEMPLO
Función STDDEV_SAMP(columna)
EJEMPLO
Esta consulta nos devolvería la desviación estándar de la columna sueldo una vez
aplicada la raíz cuadrada de la varianza simple sobre la misma.
Función VAR_SAMP(columna)
EJEMPLO
EJEMPLO
AGRUPAMIENTO DE REGISTROS
Cláusula GROUP BY
Para hacer un agrupamiento por columnas, hay que utilizar la cláusula GROUP BY
después de indicar las condiciones WHERE y antes del ordenamiento de registros
ORDER BY.
EJEMPLO
EJEMPLO
En esta consulta se visualiza el número de vuelos que existen para cada uno de los
orígenes de la tabla vuelos.
Cláusula HAVING
EJEMPLO
En esta consulta se agrupan los datos por el mínimo coste, para cada origen
distinto de la tabla vuelos, y de esos solo se muestran aquellos que tengan un
coste menor a 20.000 euros.
EJEMPLO
En esta consulta se visualizan los orígenes que tengan más de dos vuelos.
RECUPERACIÓN JERÁRQUICA
El uso de la función LPAD combinada con las cláusulas START WITH y CONNECT BY
PRIOR resulta muy útil en aquellas consultas sobre tablas en las que existen campos
dependientes de otros.
Ejemplos de estas tablas serían aquellas en las que en una misma tabla se han
creado 2 campos NIF (evidentemente con nombres distintos), uno para identificar a
la propia persona y otro para identificar cuál es el NIF del padre o familiar.
También en la misma dinámica se podrían haber creado 2 campos NIF, uno para
identificar a la persona, y otro para identificar el NIF de la persona de la que
dependemos funcionalmente en la empresa.
Ejemplo
TRATAMIENTO DE NULOS
Dentro de las bases de datos de Oracle los valores nulos se identifican con la
palabra reservada NULL.
Para preguntar en SQL (de Oracle) si una columna posee un valor nulo, no se hace
mediante igualación sino preguntando por IS NULL. A continuación, podemos ver
dos ejemplos, el primero corresponde con la forma correcta de preguntar por valores
nulos, y el segundo, con la forma incorrecta.
Esta consulta devuelve todos los datos de la tabla empleado para aquellas filas
cuya columna actividad esté vacía.
Esta consulta devuelve todos los datos de la tabla empleado para aquellas filas
cuya columna actividad NO esté vacía.
COL_A COL_B
15 10
35 35
140 NULL
NULL 100
NULL NULL
7 110
33 60
COL_A COL_B
NULL NULL
NULL NULL
NULL NULL
COL_A+COL_B
25
70
NULL
NULL
NULL
117
93
NULL
NULL
NULL
Dos valores nulos no son iguales ni son distintos, sino indeterminados. Por tanto,
cualquier operación de comparación con un valor nulo no devolverá ni verdadero
(TRUE) ni falso (FALSE).
SELECT *
FROM NULOS
WHERE COL_A = COL_B
COL_A COL_B
35 35
Esto indica que para el SGBD de Oracle los únicos valores idénticos de ambas
columnas son los mostrados, y no así los valores NULL equivalentes entre las
columnas A y B en varias de las filas de la tabla.
LA FUNCIÓN NVL
Esta función nos permite evaluar expresiones para determinar si son nulas, y
automáticamente convertirlas a un valor.
Esta consulta nos devuelve todos los empleados cuyo salario sea inferior o igual a
las comisiones que cobra, sustituyendo para la consulta, aquellos valores nulos en
ambas columnas, por 0.
SUBCONSULTAS
Las subconsultas nos permiten crear consultas dentro de otras, bajo ciertas
premisas de unión o concatenación de las mismas.
Al realizar una subconsulta hay que diseñar bien la misma, de forma que el
resultado que devuelva la subconsulta sea un único valor, para poderlo comparar con
el valor de la columna de la consulta principal, a no ser que utilicemos los
concatenadores IN, ANY, ALL en cuyo caso la subconsulta sí que puede devolver más
de un valor, pero para una única columna.
Cada SELECT se ejecuta una única vez desde la más interna hasta la más externa.
EJEMPLO
SELECT PLAZAS_LIBRE
FROM RESERVAS
WHERE FECHA_SALIDA='20-FEB-92'
Esta consulta recupera las plazas libres que hay en cada vuelo MADRID-LONDRES
del día 20/02/1992.
EJEMPLO
SELECT PLAZAS_LIBRE
FROM RESERVAS
WHERE FECHA_SALIDA='20-FEB-92'
AND TIPO_AVION = ( SELECT TIPO_AVION
FROM VUELOS
WHERE ORIGEN='MADRID'
AND DESTINO='LONDRES'
AND FECHA_SALIDA = TO_DATE('01012002','DDMMYYYY'))
Esta consulta recupera las plazas libres que hay en los tipos de aviones que salen
el 20/2/92 y que sean idénticos al que sale de MADRID el 1/1/2002 y llega a
LONDRES.
La sintaxis es la siguiente:
SELECT <lista de columnas>
FROM <lista de tablas>
WHERE <nombre de columna> <CONCATENAR> {ANY/ALL}
(SELECT <nombre de columna>
FROM <lista de tablas>
WHERE <Predicado>)
Una expresión ANY es cierta si lo es para algún valor de los que devuelve la
subconsulta. Equivale a utilizar la cláusula IN cuando se utiliza un operador de
igualdad.
Una expresión ALL es cierta si lo es para todos los valores que devuelve la
subconsulta.
EJEMPLO
SELECT *
FROM AVIONES
WHERE LONGITUD > ALL (SELECT ENVERGADURA
FROM AVIONES)
SELECT *
FROM AVIONES
WHERE LONGITUD > ( SELECT MAX(ENVERGADURA)
FROM AVIONES)
Esta consulta nos devuelve toda la información de la tabla aviones cuya longitud
sea mayor que la envergadura de todos ellos.
EJEMPLO
SELECT *
FROM RESERVAS A
Esta consulta recupera las reservas cuyo número de plazas libres sea mayor que la
media para ese mismo vuelo.
Se define para comprobar la existencia o ausencia del valor devuelto por una
subconsulta. Una expresión con EXIST devuelve verdadero (TRUE) si la subconsulta
nos devuelve al menos un valor.
La sintaxis es la siguiente:
En esta sintaxis se especifica para la subconsulta, que los valores a devolver son
NINGUNO o *. El motivo de realizarlo así es que la misión de la subconsulta es
evaluar que haya resultados disponibles de acuerdo a los criterios indicados en la
misma, mientras que la consulta principal evalúa que existan los mismos o que no
existan (no haya resultados), pero le da igual qué tipo de resultados sean. Lo más
normal es utilizar en la subconsulta la cláusula NULL cuando se utilice EXISTS o NOT
EXISTS.
EJEMPLO
SELECT *
FROM VUELOS
WHERE ORIGEN = 'MADRID'
AND EXISTS ( SELECT NULL
FROM RESERVAS
WHERE PLAZAS_LIBRES > 0
AND NUM_VUELO = VUELOS.NUM_VUELO)
Esta consulta obtiene todos los datos de la tabla vuelo para los aviones que
partan de 'MADRID' y para los cuales existan plazas libres.
Esta cláusula se define para recuperar información que se obtiene a partir de más
de una consulta concatenada en una única instrucción, a través de las sentencias
UNION, INTERSECT o MINUS.
La sintaxis es la siguiente:
• Todas deben ser iguales, o compatibles una a una. Esto supone que por cada
columna tengamos un único tipo de dato.
• Pueden ser completas (WHERE, GROUP BY,...), exceptuando las cláusulas
ORDER BY que se ubicarán al final de la última SELECT.
Comando Descripción
UNION Muestra el conjunto de filas de ambas consultas SELECT.
Muestra el conjunto de filas que son idénticas en ambas
INTERSECT
SELECT.
Muestra el conjunto de filas de la primera consulta que no se
MINUS
encuentran en la segunda.
EJEMPLO
Esta consulta nos lista los apellidos de todos los enfermos cuyo sexo sea
MASCULINO, y todos aquellos apellidos de los enfermos cuyo sexo sea FEMENINO. Al
final ordena toda la lista por el apellido.
EJEMPLO
Esta consulta nos lista los apellidos de todos los enfermos cuyo sexo sea
MASCULINO, y todos aquellos apellidos de los enfermos cuyo sexo sea FEMENINO en
el que coincidan los apellidos.
EJEMPLO
Esta consulta nos lista los apellidos de todos los enfermos cuyo sexo sea
MASCULINO, y todos aquellos apellidos de los enfermos cuyo sexo sea FEMENINO en
el que los apellidos de los enfermos masculinos no coincida con los apellidos de los
enfermos femeninos.
CONSULTAS JOIN
Las consultas de JOIN no son más que consultas que combinan los valores de
varias tablas a través de columnas iguales.
• Producto cartesiano.
• Join de igualdad.
• Join externo.
Producto cartesiano
EJEMPLO
Esta consulta nos saca un informe con el apellido del empleado, el número de
departamento al que pertenece y el nombre del departamento. Este tipo de JOIN no
implica necesariamente que haya algún campo común en ambas tablas.
Join de igualdad
EJEMPLO
Esta consulta nos saca un informe con el apellido del empleado, el número de
departamento al que pertenece y el nombre del departamento, teniendo como
campo de unión el campo DEPT_NO.
Join externo
Consiste en especificar con un signo + en aquella columna que forma parte del
predicado de igualdad y corresponde a una columna que le faltan valores (puede
tener nulos).
EJEMPLO
La expresión CASE permite utilizar la lógica del IF … THEN … ELSE en una sentencia
SQL sin tener que invocar a procedimientos y funciones almacenadas en base de
datos. La sintaxis es:
Los tipos de datos permitidos para las expresiones (expr), las expresiones de
comparación (comparasion_expr) y los resultados (return_expr) son:
CHAR, VARCHAR2, NCHAR o NVARCHAR2, NUMBER, BINARY_FLOAT o
BINARY_DOUBLE.
EJEMPLO
SELECT nombre_cliente
CASE limite_credito WHEN 100 THEN 'Bajo'
WHEN 5000 THEN 'Alto'
ELSE 'Medio'
END AS 'LIMITE'
FROM clientes;
Esta consulta nos saca un informe con el nombre del cliente y el límite de crédito
del que dispone indicándolo de forma textual con los siguientes valores: Bajo, Alto o
Medio, dependiendo del valor que haya en la columna limite_credito.
NOMBRE_CLIENTE LIMITE
------------------------ ------------
PEDRO Medio
JOSE Alto
ANDRÉS Bajo
JACINTO Medio
…
EJEMPLO
SALARIO MEDIO
------------------------
6350.65
EJEMPLO
SELECT NUMERO_SOLICITUD,
CASE
WHEN CODIGO_EMPLEADO IS NOT NULL THEN 'TIPO SOLICITUD:
De un Empleado'
WHEN CODIGO_DEPARTAMENTO IS NOT NULL THEN 'TIPO
SOLICITUD: De un Departamento'
© Alfaomega - RC Libros 193
Oracle 12c SQL. Curso práctico de formación
Esta consulta nos saca un informe todas las solicitudes contenidas en la tabla
SOLICITUDES, indicando el número de solicitud y el origen. Se introduce una
sentencia CASE para identificar y codificar con un texto los distintos orígenes de las
solicitudes que se determinan por la existencia de contenido en distintos campos.
NUMERO_SOLICITUD ORIGEN
---------------- ------------
123456 TIPO SOLICITUD: De un Empleado
564452 TIPO SOLICITUD: De un Departamento
567742 TIPO SOLICITUD: De una Oficina en
el Extranjero
65455424 TIPO SOLICITUD: Sin origen
identificado
…
Oracle 12c introduce nuevas cláusulas en las consultas que permiten limitar el
número de registros que devuelve una consulta.
Offset
Esta cláusula se utiliza para especificar un número de registros que hay que saltar
antes de comenzar a recuperar las filas que se hayan limitado.
OFFSET debe ser un número o una expresión que devuelva un valor numérico. Si
se especifica un valor negativo, la cláusula OFFSET lo tratará como un valor 0. Si se
especifica un valor NULL o un número mayor o igual que el número de filas totales
que devuelve la consulta, entonces se devolverán 0 registros. Si OFFSET incluye una
fracción, entonces la porción fraccional será truncada.
Row / Rows
Fetch
First / Next
La cláusula WITH TIES se utiliza para devolver registros adicionales con el mismo
patrón de ordenación que el último registro recuperado. Si se especifica WITH TIES,
entonces se deberá especificar la cláusula ORDER BY. Si no se especifica la cláusula
ORDER BY, entonces no se recuperará ningún registro adicional.
Las cláusulas para limitar los registros devueltos en una consulta también
presentan restricciones de uso que se indican a continuación:
EJEMPLO
ID_EMPLEADO NOMBRE_EMPLEADO
---------------- ------------
10 JACINTO
11 BENITO
12 RODRIGO
13 ALFREDO
14 JUAN
EJEMPLO
ID_EMPLEADO NOMBRE_EMPLEADO
---------------- ------------
15 JORGE
16 EMILIO
17 VICENTE
18 PEDRO
19 RAFAEL
EJEMPLO
Esta consulta devuelve los primeros 5 empleados con el porcentaje de salario más
bajo.
ID_EMPLEADO SALARIO
---------------- ------------
10 1000
16 1010
20 1100
25 1200
33 1300
EJEMPLO
Esta consulta devuelve los primeros 5 empleados con el porcentaje de salario más
bajo, pero además al haber introducido la cláusula WITH TIES, también devuelve el
resto de empleados cuyo salario sea equivalente al salario del último empleado
recuperado en los primeros 5 registros.
ID_EMPLEADO SALARIO
---------------- ------------
10 1000
16 1010
20 1100
25 1200
33 1300
40 1300
51 1300
61 1300
62 1300
65 1300
16. Diseñar una consulta que nos muestre el nombre, teléfono del hospital
número 3, así como el nombre de las salas del mismo, ordenando el
listado por el nombre de la sala. El nombre de las respectivas columnas a
mostrar será: Hospital, Tlf., y Sala.
17. Diseñar un listado que nos muestre para cada miembro de la plantilla
sanitaria que trabaje en el turno de noche (N) y que sea enfermo, el nif,
nombre, salario que cobra, nombre de sala en la que trabaja, y nombre
del hospital en el que trabaja. El título de las columnas será: Nif,
Nombre, Salario, Nombre Sala y Nombre Hospital. El listado se ordenará
por el nombre del miembro de la plantilla, nombre del hospital y nombre
de la sala.
18. Diseñar un listado que nos muestre el nombre de los departamentos en
los que están trabajando más de 5 personas. El título de las columnas
será: Departamento y Nº Trabajadores. El listado se ordenará por el
nombre del departamento.
19. Diseñar un listado que nos muestre todo el personal sanitario incluidos
los doctores que trabajan en el hospital número 4. Para este listado se
mostrará la siguiente información:
• En el caso de que sea un miembro de la plantilla sanitaria: nombre
del hospital, nombre de la sala, nombre de la persona, función que
tiene y el literal fijo '(SANITARIO)'. Utilizar como alias de columnas
las siguientes: Hospital, Sala, Nombre, Función, Tipo de empleado.
• En el caso de que sea un doctor: nombre del hospital, nulo, nombre
del doctor, especialidad y el literal fijo '(DOCTOR)'. Utilizar como
alias de columnas los que se han indicado en el punto anterior.
Todo el listado se ordenará por el nombre del hospital, nombre de la
sala y nombre del miembro sanitario.
Fig. 9-4 Sintaxis del elemento WHERE_CLAUSE para la actualización de una tabla.
ACTUALIZACIÓN GENERAL
Permite modificar de una sola vez todos los registros de una tabla.
Ejemplo
UPDATE EMP
SET EMPNO = 10;
Ejemplo
UPDATE emp
SET
Empno = 10
WHERE
Apellido = 'Higueras D.';
Este ejemplo actualizaría todas las filas de nuestra tabla emp, que cumplan que el
apellido sea 'Higueras D.' cambiando el valor del campo empno a 10.
Ejemplo
UPDATE emp a
SET deptno = (SELECT deptno FROM dept
WHERE loc = 'BOSTON'),
(sal, comm) = (SELECT 1.1*AVG(sal), 1.5*AVG(comm)
FROM emp b
WHERE a.deptno = b.deptno)
WHERE
deptno IN (SELECT deptno FROM dept
WHERE loc = 'DALLAS' OR loc = 'DETROIT');
Este ejemplo nos actualizaría todas las filas de nuestra tabla emp que cumplan
que el campo deptno se encuentre dentro de uno de los valores que devuelve la
subconsulta por departamentos que estén localizados en 'DALLAS' o 'DETROIT'.
Los datos a actualizar son en primer lugar el propio campo deptno, asignándole
el valor que nos devuelva la subconsulta de departamentos localizados en Boston
(teniendo en cuenta que esta consulta sabemos que solo nos devolverá un valor
porque en caso contrario fallaría la actualización).
Y por último actualizamos los campos sal y comm a los valores de la media
aritmética de salarios por 1.1, y la media aritmética de comisión por 1.5,
respectivamente.
Ejemplo
UPDATE emp
SET job ='MANAGER'
,sal = sal + 1000
, deptno = 20
WHERE ename = 'JONES'
RETURNING sal*0.25, ename, deptno
INTO :bnd1, :bnd2, :bnd3;
Este ejemplo nos actualizaría los campos job, sal y deptno de la tabla emp,
para aquellos registros cuyo ename sea 'JONES', devolviendo sobre las variables
PL/SQL bnd1, bnd2 y bnd3, los valores de sal*0.25, ename y deptno,
respectivamente.
BORRADO GENERAL
Ejemplo
Esta instrucción borraría todas las filas de la tabla emp. La cláusula FROM es
opcional.
Ejemplo
Nos borraría todas las filas de nuestra tabla emp cuyo campo emp_no sea igual a
10.
Ejemplo
Esta instrucción borra todos los registros de la tabla emp cuyo job sea
'SALESMAN' y COMM sea menor a 100, devolviendo el campo sal sobre la variable
PL/SQL bnd1.
INTRODUCCIÓN
http://education.oracle.com/pls/web_prod-plq-
dad/db_pages.getpage?page_id=39
Oracle 12c SQL. Curso práctico de formación
http://education.oracle.com/pls/web_prod-plq-
dad/db_pages.getpage?page_id=618
Visite la página web de registro de exámenes para ver las instrucciones sobre la
petición de una cita en un Centro examinador de Oracle (Oracle Testing Center), o a
través de un Centro examinador autorizado Pearson VUE (Pearson VUE Authorized
Test Center). También es posible realizar el examen de certificación online. Toda la
información la pueden encontrar en el enlace siguiente:
http://education.oracle.com/pls/web_prod-plq-
dad/db_pages.getpage?page_id=156
Dentro de las 6-8 semanas posteriores a pasar todos los exámenes requeridos,
usted recibirá el Kit del Programa de Éxito de la Certificación de Oracle.
Es importante reseñar que todos los exámenes se realizan en inglés, por lo que
debe de estar familiarizado con la terminología técnica en dicho idioma.
Las preguntas aquí detalladas en algunos casos se han traducido al castellano para
facilitar su comprensión, pero no debe confundir al candidato que se presente al
examen, dado que no las encontrará así.
Cuestión 1
Se propone gestionar todos los e mpleados que reciben un incremento del 10% en
el salario y una comisión que es un 20% mayor al salario incrementado. Se pide
escribir una consulta que visualice adecuadamente el salario, la comisión y la
compensación total.
Cuestión 2
¿Qué sentencia relacionada con la actualización de una tabla sin cláusula WHERE
es verdadera?
A. La sentencia no se ejecutará.
B. Solo las filas especificadas serán actualizadas.
C. Se actualizarán todas las filas de la tabla.
D. La sentencia se ejecutará pero no provocará ningún cambio.
Cuestión 3
ID NUMBER(7) PK
SALE_PRICE NUMBER(7,2)
Cuestión 4
Cuestión 5
Cuestión 6
¿Cuál de las sentencias que aparecen utilizarías para borrar la restricción de clave
primaria EMPLOYEE_ID_PK, y todas las restricciones dependientes de la tabla
EMPLOYEE?
Cuestión 7
Se quieren visualizar los nombres de empleados que contengan una "a" como
segunda letra. ¿Cuál de las sentencias que aparecen utilizarías?
A. SELECT name
FROM employee
WHERE name LIKE '_a%'
B. SELECT lower(name)
FROM employee
WHERE name = '_A%'
C. SELECT name
FROM employee
WHERE lower(name) LIKE '_A%'
D. SELECT name
FROM employee
WHERE name = '_a%'
OR name = '_A%'
Cuestión 8
Cuestión 9
Cuestión 10
Cuestión 11
FIRST_NAME VARCHAR2(25)
LAST_NAME VARCHAR2(25)
JOB VARCHAR2(25)
SALARY NUMBER(7,2)
DEPT_ID NUMBER(3)
Cuestión 12
¿Cuál de las sentencias SQL es una query con Join de igualdad entre 2 tablas?
Cuestión 13
ID NUMBER(9) PK
SALE_DATE DATE
¿Cuál de los scripts SQL*Plus usarías para obtener los resultados deseados?
A. UPDATE sale
SET sale_date = sysdate
/
B. UPDATE sale
SET sale_date = sysdate
WHERE id = &id
/
C. UPDATE sale
SET sale_date = &sysdate
WHERE id = &id
D. UPDATE sale(sale_date)
SET sale_date = sysdate
WHERE id = _&id
Cuestión 14
¿Cuál de las query usarías para visualizar los nombres de todas las tablas a las que
tienes acceso?
A. SELECT table_name
FROM user_tables;
B. SELECT table_name
FROM all_user_tables;
C. SELECT tname
FROM tab
WHERE tabtype = 'TABLE';
D. SELECT object_name
FROM all_objects
WHERE object_type = 'TABLE';
Cuestión 15
David works as a Database Administrator for uCerty Inc. The company uses an
oracle database. The database contains two tables, named Departments and
Employees. The DepartmentID column of the Employees table references the
DepartmentID column of the Departments table. The Departments and Employees
tables contain the following records:
Departments:
DepartmentID DepartmentName
10 Administration
20 Marketing
30 Finance
40 Human Resources
Employees:
A. The statement will fail because column names are no specified in the DELETE
statement.
B. All records associated with department ID 40 will be deleted from both the
Departments and Employees tables.
C. The statement will fail because both the Employees and Departments tables
contain records associated with department ID 40.
D. The record associated with department ID 40 will be deleted from the
Departments table.
E. The records associated with department ID 40 will be deleted from the
Employees table.
Cuestión 16
You work as a Database Administrator for UCertify INC. The company uses an
Oracle database. The database contains two tables, named Employees and
Departments. The DepartmentID column of the Employees table references the
DepartmentID column (PRIMARY KEY) of the Departments table. The database also
contains a view named EmpView that is based on the Employees and Departments
tables. The view contains three columns, named EmployeeID, EmployeeName, and
DepartmentName. You want to add a new column named ManagerID to the view.
Which of the following statements will you use to accomplish this?
Cuestión 17
Samantha works as a Database Administrator for Blue Well Inc. The company uses
an Oracle database. The database contains a table named Employees. Following is
the structure of the table.
A. WHERE
B. GROUP BY
C. SELECT
D. FROM
E. ORDER BY
Cuestión 18
View the Exhibit and examine the structure of the LOCATIONS and DEPARTMENTS
tables. You need to display all those cities that have only one department. Which
query gives the correct output?
FROM departments d
WHERE l.location_id =d.location_id);
Tables"Exhibit"
LOCATIONS
DEPARTMENTS
Cuestión 19
View the Exhibit and examine the structure of the EMP table. You want to display
the names and salaries of only those employees who earn the highest salaries in their
departments. Which two SQL statements give the required output? (Choose two.)
Tables "Exhibit"
Cuestión 20
(Note that the numbers 2,3 etc in the SQL statement are line numbers and not
part of the syntax)
Cuestión 21
For which columns would an index be generated automatically? (Choose all that
apply)
A. EMP_NO
B. SALARY
C. JOB_ID
D. DEPT_NO
E. EMP_NAME
Cuestión 22
Sam works as a Database Administrator for Gentech Inc. The company uses an
Oracle database. The database contains two tables, named Employees and
Departments. Following are the structures of the tables:
Employees:
EmployeeID NUMBER(5)
EmployeeName VARCHAR2(25)
Departments:
DepartmentID NUMBER(6)
EmployeeID NUMBER(5)
DepartmentName VARCHAR2(25)
Sam queries the Employees and the Departments tables with the following SQL
statement:
A. WHERE
B. SELECT
C. FROM
D. ORDER BY
Cuestión 23
Tom works as a Database Administrator for Tech Mart library. The library uses an
Oracle database. The database contains a table named Books. Following is the
structure of the table:
BookID NUMBER(4)
BookTitle VARCHAR2(25)
Price NUMBER(5,2)
PurchaseDate DATE
AuthorName VARCHAR2(30)
Tom wants to display the titles of books that meet the following criteria:
He also wants to sort book titles by their date of purchase, starting with the most
recently purchased book. Which of the following statements will he use to
accomplish this?
A. SELECT BookTitle
FROM Books
WHERE (Price < 500 or > 1000) AND (PurchaseDate < '17-
JAN-2003')
ORDER BY PurchaseDate DESC;
B. SELECT BookTitle
FROM Books
WHERE (Price IN (500,1000) AND (PurchaseDate < '17-JAN-
2003')
ORDER BY PurchaseDate ASC;
C. SELECT BookTitle
FROM Books
WHERE (Price < 500 or Price > 1000) AND (PurchaseDate <
'17-JAN-2003')
ORDER BY PurchaseDate DESC;
D. SELECT BookTitle
FROM Books
WHERE (Price BETWEEN 500 AND 1000) AND (PurchaseDate <
'17-JAN-2003')
ORDER BY PurchaseDate;
Cuestión 24
Each correct answer represents a complete solution. Choose all that apply.
Cuestión 25
ID NUMBER(9) PK
NAME VARCHAR2(25)
LOCATION VARCHAR2(15)
SQ_FT NUMBER(3)
Bob granted all users the INSERT privilege on the ROOM table. You inserted three
records into the ROOM table without committing the changes. Bob issues this
statement:
Which statements regarding the visibility of records are true? (Choose all that
apply).
Cuestión 26
S_ID NUMBER PK
NAME VARCHAR2(30)
LOCATION_ID NUMBER
ORDER_DT DATE
ORDER_AMOUNT NUMBER(8,2)
Which clauses represent valid uses of aggregate functions? (Choose all that
apply.)
A. FROM MAX(order_dt)
B. SELECT SUM(order_dt)
C. SELECT SUM(order_amount)
D. SELECT MAX(AVG(order_amount))
E. WHERE MIN(order_amount) = order_amount
F. SELECT location_id, order_dt, MAX(order_amount)
Cuestión 27
Line_item
LINE_ITEM_ID NUMBER(9) NOT NULL, Primary Key
ORDER_ID NUMBER(9) NOT NULL, Primary Key, Foreign Key to
ORDER_ID column of the CURR_ORDER table
QUANTITY NUMBER(9)
Click the Exhibit(s) button to examine the structure of the LINE_ITEM table.
You want to display order id numbers, product id numbers, and the quantity of
the product ordered with these desired results:
Cuestión 28
Which three statements concerning explicit data type conversions are true.
(Choose three.)
A. A number value may be converted to a date value using the TO_DATE function.
B. A date value may be converted to a number value using the TO_NUMBER
function.
C. A character value may be converted to a date value using the TO_DATE function.
D. A date value may be converted to a character value using the TO_DATE function.
E. A date value may be converted to a character string using the T O_CHAR function.
F. A number value may be converted to a character string using the TO_CHAR
function.
G. A number value may be converted to a character value using the TO_NUMBER
function.
Cuestión 29
Which clause prevents all the rows in the INVENTORY table from being joined to
all the rows in the MANUFACTURER table?
A. ORDER BY 1;
B. SELECT i.id_number, m.id_number
C. FROM inventory i, manufacturer m
D. WHERE i.manufacturer_id = m.id_number
Cuestión 30
You need to create a script to display a student's enrollment date and projected
graduation date.
Cuestión 31
A. It will display the name of all products having the same price as products of
category 3.
B. It will display the name of all products having the same price as products of
category 3 or 5.
C. It will display the name of all products having the same price as products of
category 3 and 5.
D. It will display the name of all products having the same price as products of
category 5.
Cuestión 32
Cuestión 33
Cuestión 34
B. A correlated subquery is evaluated once and the result is used in the parent
statement.
C. A correlated subquery is executed and each row from the result is evaluated
against the parent statement.
D. When a correlated subquery is evaluated, the parent statement is evaluated for
each row processed by the subquery.
Cuestión 35
Maria works as a Database Administrator for Blue Well Inc. She wants to give
User1 the privilege to modify only the column "column1" of a table named table1, in
the database. Which of the following statements will she use to accomplish this task?
Cuestión 36
Cuestión 37
Martha writes the following query to display information from the Ordinates
table:
A. The query will display all values for Ord_No, unique values for Ord_Name, and all
values for Salary.
B. DISTINCT is not a valid keyword in Oracle.
C. The query will display all values for Ord_No, unique values for Ord_Name, and
unique values for Salay.
D. The query will give an error on execution.
Cuestión 38
Patrick wants to create a sequence for primary columns of a table. He wants the
sequence to start at 2000, increment by 400, and generate a maximum value of
20000. He does not want the sequence to repeat numbers after reaching the
maximum value. Which of the following statements will Patrick use to create the
sequence?
Cuestión 39
statements will Samantha use to display the name of all the ordinates that not have
any subordinate?
A. SELECT Ord.Ord_Name
FROM Ordinate Ord
WHERE Ord.Ord_No <> (SELECT Subord.SubOrd_No
FROM Ordinate Subord);
B. SELECT Ord.Ord_Name
FROM Ordinate Ord
WHERE Ord.Ord_No NOT IN (SELECT Subord.SubOrd_No
FROM Ordinate Subord);
C. SELECT Ord.Ord_Name
FROM Ordinate Ord
WHERE Ord.Ord_No != (SELECT Subord.SubOrd_No
FROM Ordinate Subord);
D. SELECT Ord.Ord_Name
FROM Ordinate Ord
WHERE Ord.Ord_No NOT HAVING (SELECT Subord.SubOrd_No
FROM Ordinate Subord);
Cuestión 40
Cuestión 41
Which of the following operators will Patrick use to replace the OR condition in the
WHERE clause?
A. <=;
B. BETWEEN…AND…;
C. LIKE
D. IN
E. >=
Cuestión 42
Which of the following statements will you use to create a view named My_view?
Cuestión 43
Cuestión 44
Each correct answer represents a complete solution. Choose all that apply.
Cuestión 45
He writes the following query to retrieve records from the Employees table:
Allen gets an error on executing the query. Which of the following is the cause of
the error?
SUPUESTO PRÁCTICO 0
• En cada centro se imparten una serie de cursos con los siguientes atributos:
o Código de curso de 1 a 99999.
o Nombre de curso.
o Código del centro donde se imparte.
• Cada curso es impartido por una serie de profesores cualificados con los
siguientes atributos:
o Dni.
o Nombre.
o Apellidos.
o Dirección.
o Teléfono.
o Código postal.
o Código de curso.
o Código de centro.
o Nº de la Seguridad Social.
• El código del curso puede repetirse en centros distintos, por lo que no es
unívoco. Un curso de un centro solo puede ser impartido por un profesor.
• Por último, a estos cursos asisten una serie de alumnos con los siguientes
atributos:
o Dni.
o Nombre.
o Apellidos.
o Dirección.
o Teléfono.
o Código postal.
o Código curso.
o Código centro.
o Fecha de comienzo del curso.
o Fecha de fin del curso.
• Un alumno en un mismo centro puede asistir a varios cursos, pero al mismo
curso solo podrá asistir en fechas de comienzo distintas.
Entidad Alumno:
• Clave Primaria: DNI
• Clave Ajena: de DNI (Alumno) a ALUMNO_DNI (Asistencia)
Entidad Provincia:
• Clave Primaria: CODIGO
• Clave Ajena: de DNI (Alumno) a ALUMNO_DNI (Asistencia)
Entidad Curso:
• Clave Primaria: CODIGO, CENTROENS_CODIGO, PROFESOR_DNI
• Clave Ajena: de CENTROENS_CODIGO (Curso) a CODIGO (Centro de
Enseñanza), de PROFESOR_DNI(Curso) a DNI (Profesor)
Entidad Asistencia:
• Clave Primaria: CURSO_CODIGO, CURSO_CENTROENS_CODIGO,
CURSO_PROFESOR_DNI, ALUMNO_DNI, FECHA_COMIENZO
• Clave Ajena: de CURSO_CODIGO,
CURSO_CENTROENS_CODIGO,CURSO_PROFESOR_DNI (Asistencia) a
CODIGO, CENTROENS_CODIGO, PROFESOR_DNI (Curso)
Entidad Profesor:
• Clave Primaria: DNI
• Clave Alternativa: NUMSEGSOCIAL
SUPUESTO PRÁCTICO 1
Extraer las entidades del supuesto con indicación de los atributos, dominios,
relaciones y todas las claves que existan, diseñando un modelo Relacional y
opcionalmente si se desea, diseñar previamente un modelo Entidad/Relación.
• Se necesitan reflejar los datos de los hospitales que hay en la geografía española
con la siguiente información básica:
o Un código de hospital único con independencia de la localización
geográfica del centro. Este código almacenará valores de 1 a 99.
o El nombre del hospital de 12 caracteres alfabéticos.
o La dirección de 50 caracteres alfanuméricos.
o El teléfono de 9 dígitos.
o El número de camas del hospital con valores de 1 a 9999.
• A cada hospital asisten diariamente enfermos con diversas afecciones, de los
que queremos reflejar la siguiente información:
o El código del hospital al que asisten.
o El número de inscripción del hospital en cuestión, y que será único para
cada asistencia que se produzca dentro de un hospital. Los valores del
número variarán entre 1 y 99.999.999.
o Nombre de 20 caracteres alfabéticos.
o Apellidos de 40 caracteres alfabéticos.
o Dirección de 50 caracteres alfanuméricos.
o Fecha de nacimiento.
o Sexo que solo podrá ser M o F.
o Número de la Seguridad Social de 9 dígitos.
o Fecha de inscripción en el hospital.
• Cada hospital cuenta con una serie de salas donde se aplican tratamientos
diversos. De las mismas se quiere almacenar la siguiente información:
o Código del hospital en el que se encuentra la sala.
o Código de la sala que será único dentro del mismo hospital y que variará
de 1 a 99.
o Nombre de la sala de 30 caracteres alfanuméricos.
o Número de camas de las que dispone la sala y que variará de 0 a 99.
• En cada hospital trabajan una serie de doctores que aplican terapias a sus
pacientes, siendo necesario que el esquema refleje datos de los mismos:
o El código del hospital en el que trabajan o ha trabajado.
o Nif de 9 caracteres alfanuméricos.
o Nombre de 20 caracteres alfabéticos.
o Apellidos de 40 caracteres alfabéticos.
o Especialidad en la que trabaja el doctor de 20 caracteres alfabéticos.
244 © Alfaomega - RC Libros
ANEXO I: RESOLUCIÓN DE SUPUESTOS PRÁCTICOS
• Aparte de los doctores, en cada hospital trabaja una plantilla sanitaria que
cubre el resto de áreas de sanidad del hospital. Para cada uno de ellos se
quiere reflejar:
o El código del hospital en el que trabajan o han trabajado.
o El código de la sala en la que trabajan o han trabajado.
o NIF de 9 caracteres alfanuméricos.
o Nombre de 20 caracteres alfabéticos.
o Apellidos de 40 caracteres alfabéticos.
o Función desempeñada en la sala donde trabaja de 20 caracteres
alfabéticos.
o Turno que tienen asignado en la sala en la que se encuentra. Solo podrá
ser M,T,N.
o Salario anual que cobran en euros (5 dígitos enteros y 2 decimales).
• Además de las salas un hospital, también consta de departamentos donde
trabaja el personal no sanitario. Queremos diseñar una lista de
departamentos universales que sirva para cualquier hospital, y para ello
necesitamos la siguiente información:
o Código del departamento único de 1 a 99.
o Nombre del departamento de 20 caracteres alfabéticos.
• También existe una plantilla no sanitaria que trabaja en el hospital
desempeñando otras tareas que mantienen en funcionamiento todos los
servicios del hospital y que abarcan desde la dirección del hospital hasta el
servicio de limpieza del mismo. Queremos incluir en nuestro esquema la
siguiente información al respecto.
o El código del hospital en el que trabajan o han trabajado.
o NIF de 9 caracteres alfanuméricos.
o Nombre de 20 caracteres alfabéticos.
o Apellidos de 40 caracteres alfabéticos
o Oficio que desempeñan de 20 caracteres alfanuméricos.
o NIF de la persona de la que dependen funcionalmente.
o Fecha de alta en la empresa.
o Salario mensual en euros ( 4 enteros y 2 decimales)
o Comisión en euros (4 enteros y 2 decimales)
o Código del departamento en el que trabaja o ha trabajado.
Entidad Empleado:
• Clave Primaria: NIF
• Clave Ajena: de NIF_DEPENDIENTE (Empleado) a NIF (Empleado)
Entidad Departamento-Empleado:
• Clave Primaria: DEPT_CODIGO, EMP_NIF
• Clave Ajena: de EMP_NIF (Departamento) a NIF (Empleado)
Entidad Departamento:
• Clave Primaria: CODIGO
Entidad Hospital:
• Clave Primaria: CODIGO
Entidad Empleado-Hospital:
Entidad Hospital-Enfermo:
Entidad Enfermo:
Entidad Sala:
Entidad Doctor:
Entidad Doctor-Hospital:
Entidad Plantilla:
Entidad Plantilla-Sala:
SUPUESTO PRÁCTICO 2
Crearse un usuario mediante código SQL que tenga las siguientes características
particulares de cada alumno que lo crea:
• El nombre de usuario deberá componerse de la forma que se expresa debajo, sin
dejar espacios en blanco y sin utilizar símbolos especiales, solo letras alfabéticas:
SUPUESTO PRÁCTICO 3
Crear las estructuras de tablas, claves, restricciones, etc., del diagrama relacional
resuelto en el Supuesto 1, por el que se diseñó la estructura de un hospital. Para ello
se deberán realizar las siguientes acciones conducentes a obtener un diseño óptimo:
SUPUESTO PRÁCTICO 4
• Tabla ESTADOS_CIVILES
Código CHAR(1) CLAVE PRIMARIA
Descripción VARCHAR2(50) NO NULA
• Tabla PERSONA
Nif VARCHAR2(9) CLAVE PRIMARIA
Codestadocivil NUMBER(1)
Nombre VARCHAR2(100) NO NULO
-- PUNTO 1
create table estados_civiles
(codigo char(1),
descripcion varchar2(50) constraint
nn_estados_civiles not null,
constraint pk_estados_civiles primary key(codigo));
-- PUNTO 2
alter table estados_civiles
add constraint ck_codigo_estados_civiles check (codigo
in ('S','C','V','O'));
-- PUNTO 3
alter table persona
modify (codestadocivil char(1));
-- PUNTO 4
alter table persona
add constraint fk_persona_estados_civiles foreign key
(codestadocivil) references estados_civiles(codigo);
-- PUNTO 5
alter table persona
disable constraint fk_persona_estados_civiles;
SUPUESTO PRÁCTICO 5
A fin de poder realizar búsquedas de enfermos por su nombre de pila o por el
apellido del mismo, se quiere indexar la tabla enfermo. Y para ello habrán de
realizarse las siguientes operaciones:
-- PUNTO 2
CREATE INDEX ix2_enfermo ON enfermo(apellidos);
-- Párrafo segundo
CREATE UNIQUE INDEX ix1_departamento ON
departamento(nombre);
SUPUESTO PRÁCTICO 6
Crear las siguientes vistas de solo lectura para que los usuarios las consulten. Se
indica para cada vista, las consultas (querys) a utilizar.
2. Crear una vista de solo lectura que pueda mostrar todos los miembros de la
plantilla según el turno que indique el usuario. La consulta a añadir sería la
siguiente:
SELECT p.nombre AS "NOMBRE EMPLEADO",
p.apellidos, p.funcion, s.nombre AS "NOMBRE
SALA", h.nombre AS "NOMBRE HOSPITAL"
FROM hospital h, sala s, plantilla p,
plantilla_sala ps
WHERE
p.turno = '&Indique_un_turno'
AND ps.plan_nif = p.nif
AND s.hosp_codigo = ps.sala_hosp_codigo
AND s.codigo = ps.sala_codigo
AND h.codigo = s.hosp_codigo;
WITH READ ONLY;
-- PUNTO 1
CREATE OR REPLACE VIEW v_enfermos_hospital
AS
SELECT e.nombre, e.apellidos, e.direccion, e.sexo,
e.fnacimiento,
e.numsegsocial,he.finscripcion
FROM hospital h, enfermo e, hospital_enfermo he
WHERE
h.nombre = '&Indique_el_nombre_de_hospital'
AND he.hosp_codigo = h.codigo
AND e.numsegsocial = he.enf_numsegsocial
ORDER BY e.apellidos, e.nombre, he.finscripcion;
-- PUNTO 2
CREATE OR REPLACE VIEW v_plantilla_hospitales
AS
SELECT p.nombre AS "NOMBRE EMPLEADO", p.apellidos,
p.funcion, s.nombre AS "NOMBRE SALA", h.nombre AS
"NOMBRE HOSPITAL"
FROM hospital h, sala s, plantilla p, plantilla_sala
ps
WHERE
p.turno = '&Indique_un_turno'
AND ps.plan_nif = p.nif
AND s.hosp_codigo = ps.sala_hosp_codigo
AND s.codigo = ps.sala_codigo
256 © Alfaomega - RC Libros
ANEXO I: RESOLUCIÓN DE SUPUESTOS PRÁCTICOS
SUPUESTO PRÁCTICO 7
Crear una secuencia que comience en 1 y se vaya incrementando de 1 en 1 a fin
de poder utilizarla para el número de inscripción de un enfermo.
Indicar el valor mínimo 1 y máximo (99.999.999), así como que no sea cíclica y que
no se almacenen los valores en la caché.
SUPUESTO PRÁCTICO 8
Supuesto repaso de instrucciones sublenguaje DDL.
7. Alterar la tabla ejemplo1 para añadir una restricción (constraint) que impida
la repetición de los valores del campo SEGSOCIAL.
8. Crear una vista llamada “sal_empleado” sobre la tabla ejemplo1 que realice
la siguiente consulta:
SELECT EMP_NO, SALARIO FROM EJEMPLO1
9. Borrar la vista anterior.
• Tabla EJEMPLO1
• Tabla EJEMPLO2
-- PUNTO 1
create table ejemplo1
(EMP_NO NUMBER(4) primary key
,APELLIDO VARCHAR2(16)
,FECHA_ALT DATE default SYSDATE
,SALARIO NUMBER(9));
-- PUNTO 2
alter table ejemplo1
ADD (COD_DOMI CHAR(1) constraint ck_cod_domi
check (cod_domi in ('CL','AVD','RD','PSO'))
,SEGSOCIAL NUMBER(9) default 0);
-- PUNTO 3
create table ejemplo2
(EMP_NO NUMBER(4) primary key
);
-- PUNTO 4
drop table ejemplo2;
258 © Alfaomega - RC Libros
ANEXO I: RESOLUCIÓN DE SUPUESTOS PRÁCTICOS
-- PUNTO 5
create index iapellido_ejemplo1 on ejemplo1(apellido);
-- PUNTO 6
create unique index iss_ejemplo1 on
ejemplo1(SEGSOCIAL);
-- PUNTO 7
alter table ejemplo1
add (constraint c_ss_ejemplo1 unique(SEGSOCIAL));
-- PUNTO 8
create view sal_empleado as
SELECT EMP_NO, SALARIO FROM EJEMPLO1;
-- PUNTO 9
Drop view sal_empleado;
SUPUESTO PRÁCTICO 9
• DIRECTOR
Nif: 12345678B
Nombre: Juan
Apellidos: Lopez Z.
No depende de ningún otro empleado.
Entró a formar parte de la plantilla del hospital el 11 de enero de 1970 y
cobra un salario de 3.000 € sin que cobre comisiones por realizar su trabajo.
El director del hospital desarrolla su labor dentro del departamento con
código 4.
• GERENTE
Nif: 87654321A
Nombre: Fermin
Apellidos: Garcia L.
Esta persona depende directamente del DIRECTOR. Entró a formar del
hospital el 12 de enero de 1975, cobra un salario de 2.000 € que se ve
complementado con una comisión fija de 1.000 €.
El director del hospital desarrolla su labor dentro del departamento con
código 4.
• ADMINISTRADOR
Nif: 64328285C
Nombre: Rosa
Apellidos: Miranda R.
Esta persona depende directamente del GERENTE. Entró a formar parte del
hospital el 13 de enero de 1979, cobra un salario de 1.500 € sin recibir
comisiones por su trabajo.
El director del hospital desarrolla su labor dentro del departamento con
código 4.
• CONTABLE
Nif: 83253235F
Nombre: Miguel
Apellidos: Soria T.
Esta persona depende directamente del ADMINISTRADOR. Entró a formar
parte del hospital el 14 de enero de 1980, cobra un salario de 1.000 € y si
realiza bien su trabajo cobra una comisión de 300 €.
El director del hospital desarrolla su labor dentro del departamento con
código 4.
SUPUESTO PRÁCTICO 10
NOMBRE CODIGO
------------ ----------
Provincial 1
General 2
La Paz 3
San Carlos 4
Gr. Marañon 5
Doce Octubre 6
La Zarzuela 7
7 filas seleccionadas.
NOMBRE SALARIO
-------------------- ----------
Adriana 15000,22
Bibiana 15000,22
Casilda 15000,22
284 © Alfaomega - RC Libros
ANEXO I: RESOLUCIÓN DE SUPUESTOS PRÁCTICOS
Amelia 15000,22
Bony 15000,22
Casandra 15000,22
6 filas seleccionadas.
NOMBRE
------------
San Carlos
Provincial
La Paz
Gr. Marañon
General
Doce Octubre
6 filas seleccionadas.
TO_CHAR(SYSDATE,'DAY-DD-MONTH-YYYY-SCC
--------------------------------------
VIERNES -29-MAYO -2011- 21-20:05
SUPUESTO PRÁCTICO 11
Realice las consultas que se le formulan en los siguientes puntos.
11 filas seleccionadas.
NOMBRE COUNT(*)
-------------------- ----------
Ines 2
Iñaqui 2
SUPUESTO PRÁCTICO 12
Realice las consultas que se le formulan en los siguientes puntos.
sea igual o mayor a 1955. Además, la consulta solo mostrará aquellos hospitales
cuyo número de enfermos sea mayor o igual a 10. La columna con el conteo de
enfermos se deberá llamar "Num. Enfermos".
9. Diseñar una consulta que muestre el organigrama del personal no sanitario. Para
cada miembro, se incluirá la siguiente función: LPAD(' ',2*(LEVEL – 1)),
concatenada con el nombre de la persona, ' –' el oficio que realizar el miembro,'
NIVEL(', el nivel en el que se encuentra dentro del organigrama del hospital y ')'.
A todo esto se le denominará con el alias "Organización hospital".
10. Diseñar una consulta que muestre el código del hospital, código del
departamento, suma del salario en euros "Sal euros.", suma del salario en
pesetas "Sal. Pts." Y suma de las comisiones en euros "Comisión eur.",
acumulados los valores por hospital y departamento, siempre y cuando la fecha
de alta de los empleados no asalariados, sea mayor o igual al 1 de enero de 2002,
el código de hospital sea 1,3,5 o 7 y el código de departamento se encuentre
entre 1 y 4. De todos los valores que se podrían mostrar, solo nos interesan
aquellos cuya suma de salarios en pesetas, sea mayor a las 500.000 pts. y la suma
de comisiones en euros, menor a 2.000 €. Como valor de referencia para la
conversión a pesetas tomaremos 166.386.
11. Diseñar una consulta que permita mostrar el nombre de los hospitales que
poseen menos camas que la suma de camas que poseen cada una de las salas del
mismo.
12. Diseñar una consulta que nos muestre el nombre y apellidos de todos aquellos
enfermos que hayan asistidos a más de 2 hospitales distintos. El título de las
columnas será, nombre, apellidos y nº asistencias
13. Diseñar una consulta que nos muestre los distintos nombres y apellidos de todos
aquellos enfermos cuyos apellidos comiencen por las letras A o M, que hayan
asistido al hospital con código 1 y que además hayan asistido también al hospital
con código 2.
14. Diseñar una consulta que nos muestre los distintos nombres y apellidos de
doctores que han sido fieles a la institución que les paga y consecuentemente
solo han trabajado en un hospital a lo largo de su carrera.
15. Diseñar una consulta que nos muestre el nombre, apellidos y nif de todos los
miembros que trabajan en el hospital número 1 (doctores, plantilla no sanitaria,
plantilla sanitaria), ordenado el listado por apellidos, nombr e y nif.
16. Diseñar una consulta que nos muestre el nombre, teléfono del hospital,
número 3, así como el nombre de las salas del mismo, ordenado el listado por el
nombre de la sala. El nombre de las respectivas columnas a mostrar será:
"Hospital", "Tlf","Sala“
17. Diseñar un listado que nos muestre para cada miembro de la plantilla sanitaria
que trabaje en el turno de noche (N) y que sea enfermero, el nif, nombre, salario
que cobra, nombre de sala en la que trabaja y nombre del hospital en el que
trabaja. El título de las columnas será: NIF, NOMBRE, SALARIO, "Nombre Sala",
"Nombre Hospital". El listado se ordenará por el nombre del miembro de la
plantilla, nombre del hospital y nombre de la sala.
18. Diseñar un listado que nos muestre el nombre de los departamentos en los que
están trabajando más de 5 personas. El título de las columnas será
"Departamento", "Nº Trabajadores". El listado se ordenará por el nombre del
departamento.
19. Diseñar un listado que nos muestre todo el personal sanitario incluidos los
doctores que trabajan en el hospital número 4. Para este listado se mostrará la
siguiente información:
- En el caso de que sea un miembro de la plantilla sanitaria: nombre del
hospital, nombre de la sala, nombre de la persona, función que tiene y el
literal fijo '(SANITARIO)'.Utilizar como alias de columnas los siguientes:
"Hospital", "Sala", "Nombre", "Funcion", "Tipo empleado"
- En el caso de que sea un doctor: Nombre del hospital, nulo, nombre del
doctor, especialidad y el literal fijo '(DOCTOR)' . Utilizar como alias de
columnas los que se han indicado anteriormente.
Todo el listado se ordenará por el nombre del hospital, nombre de la sala y
nombre del miembro sanitario.
NOMBRE FUNCION
-------------------- --------------------
Alejandro ENFERMERO
Adriana ENFERMERA
Alberto ENFERMERO
Amelia ENFERMERA
Armando ENFERMERO
NOMBRE FUNCION T
-------------------- -------------------- -
Alejandro ENFERMERO M
Bartolome ENFERMERO T
Carlos ENFERMERO N
Adriana ENFERMERA M
Bibiana ENFERMERA T
Casilda ENFERMERA N
Alberto ENFERMERO M
Bonifacio ENFERMERO T
Casimiro ENFERMERO N
Amelia ENFERMERA M
Bony ENFERMERA T
Casandra ENFERMERA N
Armando ENFERMERO M
Benicio ENFERMERO T
Ciceron ENFERMERO N
15 filas seleccionadas.
6 filas seleccionadas.
ESPECIALIDAD
----------------------------------------
Pediatria
Cardiologia
Ginecologia
Psiquiatria
10 filas seleccionadas.
7 filas seleccionadas.
17 filas seleccionadas.
16 filas seleccionadas.
SELECT NOMBRE
FROM HOSPITAL
WHERE NUMCAMAS < (SELECT SUM(NUMCAMAS)
FROM SALA
WHERE HOSP_CODIGO = HOSPITAL.CODIGO);
NOMBRE
------------
La Paz
NOMBRE APELLIDOS
-------------------- ----------------------------------------
Beatriz A.A.
Jose M.M.
Esta solución utiliza una cláusula INSERT entre dos consultas para resolver el
problema con el mismo resultado que en la solución anterior.
NOMBRE APELLIDOS
-------------------- ----------------------------------------
Beatriz A.A.
Jose M.M.
NOMBRE APELLIDOS
-------------------- --------------------
Iñaqui Lopez T.
Tirano Torres B.
Antonio Moreno D.
Bartolome Torres B.
Loli Fernandez J.
Jorge Fermin J.
Samuel Lopez T.
Toñin Torres B.
Iñaqui Gutierrez T.
Maria Moreno D.
Edmunto Fermin J.
JuanMa Lopez T.
Carlos Lopez T.
Juan Torres B.
Ines Acaso B.
Ines Soledad B.
Ramiro Del Toro D.
Perico Gutierrez J.
Bartolome Casas B.
Isidoro Moreno D.
Maria Acaso B.
21 rows selected.
296 © Alfaomega - RC Libros
ANEXO I: RESOLUCIÓN DE SUPUESTOS PRÁCTICOS
37 filas seleccionadas.
Departamento Nº Trabajadores
-------------------- ---------------
ADMINISTRACION 7
9 filas seleccionadas.
CUESTIÓN 1
Se propone gestionar todos los empleados que reciben un incremento del 10% en
el salario y una comisión que es un 20% mayor al salario incrementado. Se pide
escribir una consulta que visualice adecuadamente el salario, la comisión y la
compensación total.
CUESTIÓN 2
¿Qué sentencia relacionada con la actualización de una tabla sin cláusula WHERE
es verdadera?
A. La sentencia no se ejecutará.
B. Solo las filas especificadas serán actualizadas.
C. Se actualizarán todas las filas de la tabla.
D. La sentencia se ejecutará pero no provocará ningún cambio.
CUESTIÓN 3
ID NUMBER(7) PK
SALE_PRICE NUMBER(7,2)
2. SELECT ROUND(MAX(sale_price),2),
ROUND(MIN(sale_price),2), ROUND(AVG(sale_price),2)
FROM product
GROUP BY sale_price;
CUESTIÓN 4
CUESTIÓN 5
CUESTIÓN 6
¿Cuál de las sentencias que aparecen, utilizarías para borrar la restricción de clave
primaria EMPLOYEE_ID_PK y todas las restricciones dependientes de la tabla
EMPLOYEE?
CUESTIÓN 7
Se quieren visualizar los nombres de empleados que contengan una "a" como
segunda letra. ¿Cuál de las sentencias que aparecen utilizarías?
A. SELECT name
FROM employee
WHERE name LIKE '_a%'
B. SELECT lower(name)
FROM employee
WHERE name = '_A%'
C. SELECT name
FROM employee
WHERE lower(name) LIKE '_A%'
304 © Alfaomega - RC Libros
ANEXO II: RESOLUCIÓN DE CUESTIONES DE CERTIFICACIÓN
D. SELECT name
FROM employee
WHERE name = '_a%'
OR name = '_A%'
CUESTIÓN 8
CUESTIÓN 9
CUESTIÓN 10
CUESTIÓN 11
FIRST_NAME VARCHAR2(25)
LAST_NAME VARCHAR2(25)
JOB VARCHAR2(25)
SALARY NUMBER(7,2)
DEPT_ID NUMBER(3)
CUESTIÓN 12
¿Cuál de las sentencias SQL es una query con join de igualdad entre 2 tablas?
Esto no es un JOIN.
CUESTIÓN 13
ID NUMBER(9) PK
SALE_DATE DATE
¿Cuál de los scripts SQL*Plus usarías para obtener los resultados deseados?
A. UPDATE sale
SET sale_date = sysdate
/
B. UPDATE sale
SET sale_date = sysdate
WHERE id = &id
/
C. UPDATE sale
SET sale_date = &sysdate
WHERE id = &id
D. UPDATE sale(sale_date)
SET sale_date = sysdate
WHERE id = _&id
CUESTIÓN 14
¿Cuál de las query usarías para visualizar los nombres de todas las tablas a las que
tienes acceso?
A. SELECT table_name
FROM user_tables;
B. SELECT table_name
FROM all_user_tables;
C. SELECT tname
FROM tab
WHERE tabtype = 'TABLE';
D. SELECT object_name
FROM all_objects
WHERE object_type = 'TABLE';
CUESTIÓN 15
David works as a Database Administrator for uCerty Inc. The company uses an
oracle database. The database contains two tables, named Departments and
Employees. The DepartmentID column of the Employees table references the
DepartmentID column of the Departments table. The Departments and Employees
tables contain the following records:
Departments:
DepartmentID DepartmentName
10 Administration
20 Marketing
30 Finance
40 Human Resources
Employees:
A. The statement will fail because column names are no specified in the DELETE
statement.
B. All records associated with department ID 40 will be deleted from both the
Departments and Employees tables.
C. The statement will fail because both the Employees and Departments tables
contain records associated with department ID 40.
D. The record associated with department ID 40 will be deleted from the
Departments table.
E. The records associated with department ID 40 will be deleted from the
Employees table.
CUESTIÓN 16
You work as a Database Administrator for UCertify INC. The company uses an
Oracle database. The database contains two tables, named Employees and
Departments. The DepartmentID column of the Employees table references the
DepartmentID column (PRIMARY KEY) of the Departments table. The database also
contains a view named EmpView that is based on the Employees and Departments
tables. The view contains three columns, named EmployeeID, EmployeeName, and
DepartmentName. You want to add a new column named ManagerID to the view.
Which of the following statements will you use to accomplish this?
CUESTIÓN 17
Samantha works as a Database Administrator for Blue Well Inc. The company uses
an Oracle database. The database contains a table named Employees. Following is
the structure of the table.
A. WHERE
B. GROUP BY
C. SELECT
D. FROM No se puede utilizar el alias de una columna para
E. ORDER BY indicar el ag rupamiento de la misma.
CUESTIÓN 18
View the Exhibit and examine the structure of the LOCATIONS and DEPARTMENTS
tables. You need to display all those cities that have only one department. Which
query gives the correct output?
Tables"Exhibit"
LOCATIONS
DEPARTMENTS
CUESTIÓN 19
View the Exhibit and examine the structure of the EMP table. You want to display
the names and salaries of only those employees who earn the highest salaries in their
departments. Which SQL statement give the required output?
Tables "Exhibit"
CUESTIÓN 20
Evaluate the following SQL statement: (Note that the numbers 2,3 etc in the SQL
statement are line numbers and not part of the syntax)
CUESTIÓN 21
For which columns would an index be generated automatically? (Choose all that
apply)
A. EMP_NO
B. SALARY
C. JOB_ID
D. DEPT_NO
E. EMP_NAME
CUESTIÓN 22
Sam works as a Database Administrator for Gentech Inc. The company uses an
Oracle database. The database contains two tables, named Employees and
Departments. Following are the structures of the tables:
Employees:
EmployeeID NUMBER(5)
EmployeeName VARCHAR2(25)
314 © Alfaomega - RC Libros
ANEXO II: RESOLUCIÓN DE CUESTIONES DE CERTIFICACIÓN
Departments:
DepartmentID NUMBER(6)
EmployeeID NUMBER(5)
DepartmentName VARCHAR2(25)
Sam queries the Employees and the Departments tables with the following SQL
statement:
A. WHERE
B. SELECT Cuando se crean ALIAS para los nombres de tabla en
C. FROM una SELECT ya no se pueden nominar los campos con
D. ORDER BY el nombre real de la tabla sino con su alias.
CUESTIÓN 23
Tom works as a Database Administrator for Tech Mart library. The library uses an
Oracle database. The database contains a table named Books. Following is the
structure of the table:
BookID NUMBER(4)
BookTitle VARCHAR2(25)
Price NUMBER(5,2)
PurchaseDate DATE
AuthorName VARCHAR2(30)
Tom wants to display the titles of books that meet the following criteria:
He also wants to sort book titles by their date of purchase, starting with the most
recently purchased book. Which of the following statements will he use to
accomplish this?
© Alfaomega - RC Libros 315
Oracle 12c SQL. Curso práctico de formación
A. SELECT BookTitle
FROM Books
WHERE (Price < 500 or > 1000) AND (PurchaseDate < '17-
JAN-2003')
ORDER BY PurchaseDate DESC;
B. SELECT BookTitle
FROM Books
WHERE (Price IN (500,1000) AND (PurchaseDate < '17-JAN-
2003')
ORDER BY PurchaseDate ASC;
C. SELECT BookTitle
FROM Books
WHERE (Price < 500 or Price > 1000) AND (PurchaseDate <
'17-JAN-2003')
ORDER BY PurchaseDate DESC;
D. SELECT BookTitle
FROM Books
WHERE (Price BETWEEN 500 AND 1000) AND (PurchaseDate <
'17-JAN-2003')
ORDER BY PurchaseDate;
CUESTIÓN 24
Each correct answer represents a complete solution. Choose all that apply.
CUESTIÓN 25
ID NUMBER(9) PK
NAME VARCHAR2(25)
LOCATION VARCHAR2(15)
SQ_FT NUMBER(3)
316 © Alfaomega - RC Libros
ANEXO II: RESOLUCIÓN DE CUESTIONES DE CERTIFICACIÓN
Bob granted all users the INSERT privilege on the ROOM table. You inserted three
records into the ROOM table without committing the changes. Bob issues this
statement:
SELECT * FROM room;
Which statements regarding the visibility of records are true? (Choose all that
apply).
A. Bob will be able to access the ROOM table.
B. Bob will be able to insert the same records into the ROOM table.
C. Bob will see the three records you inserted into the ROOM table.
D. Bob will NOT be able to access the ROOM table.
E. Bob will NOT see the three records you inserted into the ROOM table.
F. Bob will NOT be able to insert the same records into the ROOM table.
CUESTIÓN 26
A. FROM MAX(order_dt)
B. SELECT SUM(order_dt)
C. SELECT SUM(order_amount)
D. SELECT MAX(AVG(order_amount))
E. WHERE MIN(order_amount) = order_amount
F. SELECT location_id, order_dt, MAX(order_amount)
CUESTIÓN 27
Line_item
LINE_ITEM_ID NUMBER(9) NOT NULL, Primary Key
ORDER_ID NUMBER(9) NOT NULL, Primary Key, Foreign Key to
ORDER_ID column of the CURR_ORDER table
QUANTITY NUMBER(9)
Click the Exhibit(s) button to examine the structure of the LINE_ITEM table.
You want to display order id numbers, product id numbers, and the quantity of
the product ordered with these desired results:
CUESTIÓN 28
Which three statements concerning explicit data type conversions are true.
(Choose three.)
A. A number value may be converted to a date value using the TO_DATE function.
B. A date value may be converted to a number value using the TO_NUMBER
function.
C. A character value may be converted to a date value using the TO_DATE function.
D. A date value may be converted to a character value using the TO_DATE function.
E. A date value may be converted to a character string using the TO_CHAR function.
F. A number value may be converted to a character string using the TO_CHAR
function.
G. A number value may be converted to a character value using the TO_NUMBER
function.
318 © Alfaomega - RC Libros
ANEXO II: RESOLUCIÓN DE CUESTIONES DE CERTIFICACIÓN
CUESTIÓN 29
A. ORDER BY 1;
B. SELECT i.id_number, m.id_number
C. FROM inventory i, manufacturer m
D. WHERE i.manufacturer_id = m.id_number
CUESTIÓN 30
You need to create a script to display a student's enrollment date and projected
graduation date.
What does the proposed solution provide? Se cumplen los puntos 1 y 2 del
enunciado. El punto 3 no se cumple
porque según está la consulta, mostraría
la fecha de inscripción + 4 días y en el
enunciado se pide la fecha de inscripción
+ 4 años.
CUESTIÓN 31
A. It will display the name of all products having the same price as products of
category 3.
B. It will display the name of all products having the same price as products of
category 3 or 5.
C. It will display the name of all products having the same price as products of
category 3 and 5.
D. It will display the name of all products having the same price as products of
category 5.
CUESTIÓN 32
CUESTIÓN 33
CUESTIÓN 34
CUESTIÓN 35
Maria works as a Database Administrator for Blue Well Inc. She creates a user,
named User1. She wants to give User1 the privilege to modify only the column
"column1" of a table named table1, in the database. Which of the following
statements will she use to accomplish this task?
CUESTIÓN 36
CUESTIÓN 37
Martha writes the following query to display information from the Ordinates
table:
A. The query will display all values for Ord_No, unique values for Ord_Name, and all
values for Salary.
322 © Alfaomega - RC Libros
ANEXO II: RESOLUCIÓN DE CUESTIONES DE CERTIFICACIÓN
CUESTIÓN 38
Patrick wants to create a sequence for primary columns of a table. He wants the
sequence to start at 2000, increment by 400, and generate a maximum value of
20000. He does not want the sequence to repeat numbers after reaching the
maximum value. Which of the following statements will Patrick use to create the
sequence?
CUESTIÓN 39
statements will Samantha use to display the name of all the ordinates that not have
any subordinate?
A. SELECT Ord.Ord_Name
FROM Ordinate Ord
WHERE Ord.Ord_No <> (SELECT Subord.SubOrd_No
FROM Ordinate Subord);
B. SELECT Ord.Ord_Name
FROM Ordinate Ord
WHERE Ord.Ord_No NOT IN (SELECT Subord.SubOrd_No
FROM Ordinate Subord);
C. SELECT Ord.Ord_Name
FROM Ordinate Ord
WHERE Ord.Ord_No != (SELECT Subord.SubOrd_No
FROM Ordinate Subord);
D. SELECT Ord.Ord_Name
FROM Ordinate Ord
WHERE Ord.Ord_No NOT HAVING (SELECT Subord.SubOrd_No
FROM Ordinate Subord);
CUESTIÓN 40
CUESTIÓN 41
Which of the following operators will Patrick use to replace the OR condition in the
WHERE clause?
A. <=;
B. BETWEEN…AND…;
C. LIKE
D. IN
E. >=
CUESTIÓN 42
Which of the following statements will you use to create a view named My_view?
CUESTIÓN 43
CUESTIÓN 44
Each correct answer represents a complete solution. Choose all that apply.
CUESTIÓN 45
He writes the following query to retrieve records from the Employees table:
Allen gets an error on executing the query. Which of the following is the cause of
the error?
ENLACES A ORACLE
http://www.oracle.com/
http://www.oracle.com/es/index.html
http://www.oracle.com/technetwork/index.html
Esta página es el mejor punto para ampliar información y descargar software
oficial de Oracle. Asimismo, encontrará tutoriales y ejemplos de scripts y código de
los diversos productos de Oracle. También podrá compartir información y
experiencias en los foros disponibles para desarrolladores, DBAs y arquitectos.
UNIVERSIDAD DE ORACLE
http://docs.oracle.com/en/database/database.html
INTRODUCCIÓN
http://www.oracle.com/technetwork/database/express-edition/downloads/index.html
En este anexo podrá encontrar una guía práctica para la instalación de este
producto Oracle en su PC.
REQUERIMIENTOS MÍNIMOS
TUTORIAL DE INSTALACIÓN
A continuación, se muestran los pasos a seguir para la instalación de Oracle 11.2
Express Edition Beta.
En esta fase el usuario recibirá en pantalla una serie de imágenes con el progreso
de la instalación en su equipo. No debe pulsar ningún botón hasta que concluya la
instalación.
BACKUP DATABASE
GET STARTED
RESTORE DATABASE
START DATABASE
Permite arrancar la base de datos para poderse conectar con ella. Normalmente
esta utilidad queda configurada en el equipo para que se ejecute automáticamente
cuando arranque el ordenador.
STOP DATABASE
Alias ..... 177, 236, 247, 250, 252, 268, 359, 361, BIN_TO_NUM ...................................... 203, 204
BINARY_DOUBLE...................... 55, 56, 207, 243
379
BINARY_FLOAT......................... 55, 56, 207, 243
ALL PRIVILEGES .............................................. 95
BLOB .................................................. 59, 64, 65
ALTER..... 28, 29, 30, 57, 61, 72, 73, 93, 99, 100,
101, 107, 126, 127, 130, 132, 133, 135, 140, BOOLEAN ................................................. 26, 64
Borrado de información............................... 259
143, 144, 145, 149, 150, 270, 277, 292, 380,
Borrado de un índice ................................... 145
381, 388, 402
Alteración de un índice ........................ 143, 144 Borrado de una vista.................................... 150
Borrar un usuario......................................... 103
Alteración de una vista ........................ 149, 150
Borrar una tabla ........................................... 136
ANSI ................................................... 22, 23, 25
ANY ....................... 68, 80, 85, 99, 102, 234, 235
APEX_ ............................................................ 80 C
AQ_ .......................................................... 80, 87
CAPTURE_ADMIN .......................................... 80
Arranque y parada ............................. 73, 74, 76
CASCADE ...... 102, 103, 120, 121, 122, 125, 133,
ASCII ............................................ 188, 190, 191
134, 135, 136, 270, 380, 381
ASCIISTR ............................................... 188, 190
CASE............................................. 242, 243, 244
ASIN............................................................. 204
CDB_DBA ...................................................... 81
ATAN............................................................ 204
CEIL .............................................................. 204
ATAN2.......................................................... 204
Certificaciones de Oracle ..................... 263, 411
AUDIT ............................................................ 80
CHAR .... 34, 57, 58, 59, 138, 242, 279, 311, 312,
AUTHENTICATEDUSER................................... 80
316, 317, 323, 365, 390
Oracle 12c SQL. Curso práctico de formación
FLASHBACK DATA ARCHIVE ..................... 96, 97 INTERSECT...................... 60, 174, 238, 239, 368
FLOOR.......................................................... 205 INTERVAL DAY TO SECOND...................... 61, 63
FORCE ........................... 147, 148, 268, 270, 380 INTERVAL YEAR TO MONTH............... 61, 62, 63
FOREIGN KEY . 96, 102, 103, 108, 120, 121, 123, Intervalo de valores ..................................... 180
125, 135, 136, 140, 310, 312, 313, 314, 315, INVISIBLE...................................................... 160
316 ISO/IEC ............................................... 22, 25, 26
Funciones de agrupamiento ................ 220, 225
Funciones de conversión ............. 184, 185, 187 J
JAVA............................................................... 89
G
JMXSERVER.................................................... 89
GATHER_SYSTEM_STATISTICS ................. 85, 86 Join....................................................... 383, 384
GDS_CATALOG_SELECT ................................. 86 Juego de caracteres ......... 35, 72, 189, 193, 218
Gestión de privilegios .................................... 95
GLOBAL_AQ_USER_ROLE ..............................86 L
GRANT ... 28, 78, 95, 96, 99, 102, 103, 108, 286,
292, 309, 396, 402 LAST_DAY ............................................. 210, 214
GREATEST ............................................ 189, 194 LBAC_DBA...................................................... 89
GROUP BY ...... 60, 166, 220, 225, 226, 238, 267, LEAST ................................................... 189, 196
268, 270, 278, 279, 281, 290, 298, 358, 364, LENGTH ................................................ 189, 196
366, 367, 373, 378, 379, 380, 389, 390, 391, LEVEL ........................40, 41, 227, 250, 359, 365
401, 407 LIKE 180, 181, 271, 296, 358, 367, 368, 382, 406
GSM_POOLADMIN_ROLE .............................. 87 Literal ............................. 34, 191, 198, 252, 361
GSMADMIN_ROLE ......................................... 87 LN 206
GSMUSER_ROLE ............................................ 87 LOB .................................................... 26, 59, 64
LOG .............................................................. 207
LONG............................................ 57, 59, 60, 61
H
LOWER ................................................. 189, 197
HAVING .. 24, 166, 174, 225, 226, 227, 268, 279, LPAD ............................................................ 197
295, 358, 365, 366, 367, 373, 379, 390, 405 LTRIM ................................................... 189, 198
HS_ADMIN_................................................... 87
M
I
MAX 57, 219, 220, 221, 233, 236, 267, 268, 278,
IDENTITY .............................................. 158, 159 280, 281, 287, 378, 379, 389, 391, 397
IMP_FULL_DATABASE .............................. 81, 87 MERGE ......................................................... 102
INCREMENT BY ...... 41, 152, 154, 158, 159, 162, MIN ....... 219, 220, 221, 226, 267, 287, 378, 397
293, 295, 321, 404 MINUS.................................... 60, 174, 238, 239
INITCAP ................................................ 189, 194 MOD ............................................................ 207
INSERT ..... 24, 29, 61, 85, 98, 99, 101, 102, 103, Modelo relacional 3, 4, 5, 7, 8, 9, 10, 14, 17, 21,
159, 160, 162, 164, 165, 166, 167, 168, 169, 23, 50, 126, 299, 302, 307, 309
286, 326, 327, 329, 330, 331, 332, 333, 334, Modificadores.............................. 184, 185, 187
335, 336, 337, 338, 339, 340, 341, 342, 343, MODIFY . 128, 130, 270, 277, 293, 380, 388, 402
345, 347, 348, 349, 351, 352, 353, 354, 355, MONTHS_BETWEEN .............. 30, 210, 214, 358
368, 396
INSTR ................................................... 189, 196
Integridad referencial .................. 121, 124, 125
© Alfaomega - RC Libros 339
Oracle 12c SQL. Curso práctico de formación
OEM_ ............................................................. 89
Q
OFFSET ......................................... 245, 246, 248
OLAP_ ............................................................ 89 QUERY REWRIT ..............................................98
ON COMMIT REFRESH ................................... 98 Quitar privilegios .......................................... 102
ON DELETE ........................... 120, 121, 122, 125
ON UPDATE .......................................... 122, 125 R
ONLY ............................................ 246, 247, 248
Operación de diferencia ................................16 READ ..............................................................97
Operación de intersección ............................. 16 RECOVERY_CATALOG_OWNER......................93
Operación de proyección............................... 15 REFERENCES ...96, 101, 102, 111, 120, 121, 123,
Operación de selección.................................. 15 125, 283, 310, 312, 313, 314, 315, 316, 393
Operación de unión ....................................... 15 Referenciar a .................................................. 49
Operador de concatenación ........................ 182 RENAME ....................................... 129, 132, 144
Operador IN ................................................. 182 REPLACE .......146, 147, 148, 189, 200, 277, 296,
Operador LIKE ...................................... 180, 181 320, 321, 388, 406
Operadores de comparación ....... 182, 234, 235 RESOURCE .................................. 83, 85, 93, 309
RETURNING .......... 168, 170, 256, 258, 260, 261 Tipos XML ...................................................... 68
REVOKE.......................................... 29, 102, 108 TKPROFER ...................................................... 93
ROLE .. 78, 80, 81, 82, 83, 85, 87, 89, 91, 93, 94, TO_CHAR ..... 183, 184, 185, 188, 198, 215, 288,
101, 286, 396 289, 357, 364, 365, 398, 400
ROLLBACK ................................................ 29, 77 TO_DATE......183, 184, 187, 188, 215, 234, 288,
ROUND ................................................ 208, 215 339, 340, 341, 354, 366, 398
ROWID .......................... 40, 42, 63, 64, 190, 191 TO_NUMBER . 183, 185, 186, 288, 364, 398, 399
ROWNUM ................................................ 40, 43 TRANSLATE .......................................... 189, 201
RPAD............................................................ 200 TRIM ............................................................ 202
RTRIM .................................................. 189, 201 TRUNC.......................................................... 209
S U
275, 276, 277, 278, 279, 280, 281, 284, 285, WM_ADMIN_ROLE ........................................94
287, 288, 289, 290, 291, 295, 296, 297, 298, WRITE............................................................. 97
320, 321, 358, 364, 366, 367, 368, 369, 370,
372, 373, 378, 379, 380, 382, 383, 384, 385, X
386, 387, 388, 389, 390, 391, 394, 395, 397,
398, 399, 400, 401, 404, 405, 407 XDB_ ..............................................................94
WITH CHECK OPTION........................... 147, 148 XS_ ........................................................... 94, 95
WITH READ ONLY......... 147, 148, 151, 320, 321
WITH TIES ............................................ 246, 249