Sunteți pe pagina 1din 89

Apuntes SQL-Oracle (I)

ndice de contenido
2 - Crear tablas (create table - describe - all_tables - drop table).........................................................2
3 - Ingresar registros (insert into- select)..............................................................................................7
4 - Tipos de datos................................................................................................................................10
5 - Recuperar algunos campos (select)...............................................................................................14
6 - Recuperar algunos registros (where).............................................................................................18
7 - Operadores relacionales................................................................................................................22
8 - Borrar registros (delete)................................................................................................................26
9 - Actualizar registros (update).........................................................................................................29
10 - Comentarios................................................................................................................................33
11 - Valores nulos (null).....................................................................................................................34
11 - Valores nulos (null).....................................................................................................................36
12 - Operadores relacionales (is null).................................................................................................40
13 - Clave primaria (primary key)......................................................................................................44
14 - Vaciar la tabla (truncate table).....................................................................................................49
15 - Tipos de datos alfanumricos......................................................................................................51
16 - Tipos de datos numricos............................................................................................................55
17 - Ingresar algunos campos.............................................................................................................59
18 - Valores por defecto (default).......................................................................................................61
19 - Operadores aritmticos y de concatenacin (columnas calculadas)...........................................65
20 - Alias (encabezados de columnas)................................................................................................68
21 - Funciones string..........................................................................................................................71
22 - Funciones matemticas...............................................................................................................75
23 - Funciones de fechas y horas........................................................................................................78
24 - Ordenar registros (order by)........................................................................................................81
25 - Operadores lgicos (and - or - not).............................................................................................84

1 de 89

Apuntes SQL-Oracle (I)

2 - Crear tablas (create table - describe all_tables - drop table)


Existen varios objetos de base de datos: tablas, constraints (restricciones), vistas, secuencias,
ndices, agrupamientos (clusters), disparadores (triggers), instantaneas (snapshots), procedimientos,
funciones, paquetes, sinnimos, usuarios, perfiles, privilegios, roles, etc.
Los primeros objetos que veremos son tablas.
Una base de datos almacena su informacin en tablas, que es la unidad bsica de almacenamiento.
Una tabla es una estructura de datos que organiza los datos en columnas y filas; cada columna es un
campo (o atributo) y cada fila, un registro. La interseccin de una columna con una fila, contiene un
dato especfico, un solo valor. Cada registro contiene un dato por cada columna de la tabla. Cada
campo (columna) debe tener un nombre. El nombre del campo hace referencia a la informacin que
almacenar. Cada campo (columna) tambin debe definir el tipo de dato que almacenar.
Las tablas forman parte de una base de datos.
Nosotros trabajaremos con la base de datos ya creada.
Para ver las tablas existentes tipeamos:
select *from all_tables;

Aparece una tabla que nos muestra en cada fila, los datos de una tabla especfica; en la columna
"TABLE_NAME" aparece el nombre de cada tabla existente.
Al crear una tabla debemos resolver qu campos (columnas) tendr y que tipo de datos almacenarn
cada uno de ellos, es decir, su estructura.
La sintaxis bsica y general para crear una tabla es la siguiente:
create table NOMBRETABLA(
NOMBRECAMPO1 TIPODEDATO,
...
NOMBRECAMPON TIPODEDATO
);

La tabla debe ser definida con un nombre que la identifique y con el cual accederemos a ella.
Creamos una tabla llamada "usuarios" y entre parntesis definimos los campos y sus tipos:
create table usuarios(
nombre varchar2(30),
clave varchar2(10)
);

Cada campo con su tipo debe separarse con comas de los siguientes, excepto el ltimo.
Cuando se crea una tabla debemos indicar su nombre y definir al menos un campo con su tipo de
dato. En esta tabla "usuarios" definimos 2 campos:
- nombre: que contendr una cadena de caracteres de 30 caracteres de longitud, que almacenar el
nombre de usuario y
2 de 89

Apuntes SQL-Oracle (I)

- clave: otra cadena de caracteres de 10 de longitud, que guardar la clave de cada usuario.
Cada usuario ocupar un registro de esta tabla, con su respectivo nombre y clave.
Para nombres de tablas, se puede utilizar cualquier caracter permitido para nombres de directorios,
el primero debe ser un caracter alfabtico y no puede contener espacios. La longitud mxima es de
30 caracteres.
Si intentamos crear una tabla con un nombre ya existente (existe otra tabla con ese nombre),
mostrar un mensaje indicando que a tal nombre ya lo est utilizando otro objeto y la sentencia no
se ejecutar.
Para ver la estructura de una tabla usamos el comando "describe" junto al nombre de la tabla:
describe usuarios;

Aparece la siguiente informacin:


Name
Null
Type
------------------------------NOMBRE
VARCHAR2(30)
CLAVE
VARCHAR2(10)

Esta es la estructura de la tabla "usuarios"; nos muestra cada campo, su tipo y longitud y otros
valores que no analizaremos por el momento.
Para eliminar una tabla usamos "drop table" junto al nombre de la tabla a eliminar:
drop table NOMBRETABLA;

En el siguiente ejemplo eliminamos la tabla "usuarios":


drop table usuarios;

Si intentamos eliminar una tabla que no existe, aparece un mensaje de error indicando tal situacin
y la sentencia no se ejecuta.
Problema:
Para probar todos los ejercicios resueltos y propuestos debemos ingresar al sqldeveloper.exe y luego
en el entorno crear una nueva conexin:
1. Elegimos File -> New y seleccionamos "New Connection" y presionamos el botn
"Aceptar".
2. Ingresamos los campos Connection Name (por ejemplo ingresamos "prueba"), en el campo
Username ingresamos el usuario SYSTEM y por ltimo en el campo Password ingresamos
la clave que creamos al instalar Oracle.
3. Luego en la ventana que aparece el mansaje "Enter SQL Statement" debemos tipear los
comandos SQL y mediante el primer botn "triangulo verde" ejecutaremos el comando SQL
donde se encuentra el cursos (tambin podemos ejecutar todos los comando SQL mediante
el segundo botn.
Veamos las tablas existentes:
select *from all_tables;

Aparece una tabla que nos muestra todas las tablas; la columna "TABLE_NAME" contiene el
3 de 89

Apuntes SQL-Oracle (I)

nombre de cada tabla.


Vamos a crear una tabla denominada "usuarios". En primer lugar vamos a eliminar la tabla
"usuarios" porque si ya existe no podremos crear otra con el mismo nombre.
drop table usuarios;

Si la tabla no existe aparecer un mensaje indicando tal situacin.


Ahora si creamos una tabla llamada "usuarios" con dos campos:
- nombre: cadena de caracteres que no supere los 30 caracteres y
- clave: cadena que no supere los 10 caracteres:
create table USUARIOS(
nombre varchar2(30),
clave varchar2(10)
);

Aparece un mensaje que indica que la sentencia "create table" ha sido procesada.
Cada usuario ocupar un registro de esta tabla, con su respectivo nombre y clave.
Podemos verificar que se ha creado:
select *from all_tables;

La tabla "usuarios" Debe aparecer en la lista.


Veamos la estructura de la tabla "usuarios":
describe usuarios;

Aparece la siguiente informacin:


Name
Null
Type
------------------------------NOMBRE
VARCHAR2(30)
CLAVE
VARCHAR2(10)

Nos informa que la tabla "usuarios" tiene 2 campos, el campo "nombre" de tipo "varchar2" de 30
caracteres de longitud y el campo "clave", de tipo "varchar2" de 10 caracteres de longitud. La
columna "Null" aparece vaca y la explicaremos ms adelante.
Intentemos crear una tabla con el mismo nombre, mostrar un mensaje indicando que ya hay un
objeto llamado "usuarios" y la sentencia no se ejecutar:
create table usuarios (
nombre varchar(30),
clave varchar(10)
);

Eliminemos la tabla:
drop table usuarios;

Verifiquemos si se ha eliminado:
select *from all_tables;

4 de 89

Apuntes SQL-Oracle (I)

no debe aparecer la tabla "usuarios".


Primer problema:
Necesita almacenar los datos de amigos en una tabla. Los datos que guardar sern: apellido,
nombre, domicilio y telfono.
1- Elimine la tabla "agenda"
Si no existe, un mensaje indicar tal situacin.
2- Intente crear una tabla llamada "*agenda"
create table *agenda(
apellido varchar2(30),
nombre varchar2(20),
domicilio varchar2(30),
telefono varchar2(11)
);

aparece un mensaje de error indicando que usamos un caracter invlido ("*") para el nombre de la
tabla.
3- Cree una tabla llamada "agenda", debe tener los siguientes campos: apellido, varchar2(30);
nombre, varchar2(20); domicilio, varchar2 (30) y telefono, varchar2(11)
Un mensaje indica que la tabla ha sido creada exitosamente.
4- Intente crearla nuevamente.
Aparece mensaje de error indicando que el nombre ya lo tiene otro objeto.
5- Visualice las tablas existentes (all_tables)
La tabla "agenda" aparece en la lista.
6- Visualice la estructura de la tabla "agenda" (describe)
Aparece la siguiente tabla:
Name
Null
Type
----------------------APELLIDO
VARCHAR2(30)
NOMBRE
VARCHAR2(20)
DOMICILIO
VARCHAR2(30)
TELEFONO
VARCHAR2(11)

Segundo problema:
Necesita almacenar informacin referente a los libros de su biblioteca personal. Los datos que
guardar sern: ttulo del libro, nombre del autor y nombre de la editorial.
1- Elimine la tabla "libros"
Si no existe, un mensaje indica tal situacin.
2- Verifique que la tabla "libros" no existe (all_tables)
No aparece en la lista.
3- Cree una tabla llamada "libros". Debe definirse con los siguientes campos: titulo, varchar2(20);
autor, varchar2(30) y editorial, varchar2(15)
4- Intente crearla nuevamente:
Aparece mensaje de error indicando que existe un objeto con el nombre "libros".
5 de 89

Apuntes SQL-Oracle (I)

5- Visualice las tablas existentes


6- Visualice la estructura de la tabla "libros":
Aparece "libros" en la lista.
7- Elimine la tabla
8- Intente eliminar la tabla
Un mensaje indica que no existe.

6 de 89

Apuntes SQL-Oracle (I)

3 - Ingresar registros (insert into- select)


Un registro es una fila de la tabla que contiene los datos propiamente dichos. Cada registro tiene un
dato por cada columna (campo). Nuestra tabla "usuarios" consta de 2 campos, "nombre" y "clave".
Al ingresar los datos de cada registro debe tenerse en cuenta la cantidad y el orden de los campos.
La sintaxis bsica y general es la siguiente:
insert into NOMBRETABLA (NOMBRECAMPO1, ..., NOMBRECAMPOn)
values (VALORCAMPO1, ..., VALORCAMPOn);

Usamos "insert into", luego el nombre de la tabla, detallamos los nombres de los campos entre
parntesis y separados por comas y luego de la clusula "values" colocamos los valores para cada
campo, tambin entre parntesis y separados por comas.
En el siguiente ejemplo se agrega un registro a la tabla "usuarios", en el campo "nombre" se
almacenar "Mariano" y en el campo "clave" se guardar "payaso":
insert into usuarios (nombre, clave)
values ('Mariano','payaso');

Luego de cada insercin aparece un mensaje indicando la cantidad de registros ingresados.


Note que los datos ingresados, como corresponden a cadenas de caracteres se colocan entre
comillas simples.
Para ver los registros de una tabla usamos "select":
select *from usuarios;

El comando "select" recupera los registros de una tabla. Con el asterisco indicamos que muestre
todos los campos de la tabla "usuarios".
Aparece la tabla, sus campos y registros ingresados; si no tiene registros, apareceran solamente los
campos y la tabla vaca).
Es importante ingresar los valores en el mismo orden en que se nombran los campos: En el
siguiente ejemplo se lista primero el campo "clave" y luego el campo "nombre" por eso, los valores
tambin se colocan en ese orden:
insert into usuarios (clave, nombre)
values ('River','Juan');

Si ingresamos los datos en un orden distinto al orden en que se nombraron los campos, no aparece
un mensaje de error y los datos se guardan de modo incorrecto.
En el siguiente ejemplo se colocan los valores en distinto orden en que se nombran los campos, el
valor de la clave (la cadena "Boca") se guardar en el campo "nombre" y el valor del nombre (la
cadena "Luis") en el campo "clave":
insert into usuarios (nombre,clave)
values ('Boca','Luis');

7 de 89

Apuntes SQL-Oracle (I)

Problema:
Vemos si la tabla "usuarios" existe:
select *from all_tables;

Si existe la eliminamos:
drop table usuarios;

Creamos una nueva tabla denominada "usuarios" con los siguientes campos:
create table usuarios(
nombre varchar2(30),
clave varchar2(10)
);

Veamos si tiene registros:


select *from usuarios;

No tiene, la tabla aparece vaca, solamente vemos las columnas que muestran los nombres de sus
campos.
Agregamos un registro a la tabla:
insert into usuarios (nombre, clave)
values ('Mariano','payaso');

Un mensaje indica que se ingreso una fila.


Veamos nuevamente los registros de la tabla "usuarios":
select *from usuarios;

Aparece la siguiente tabla:


NOMBRE CLAVE
------------Mariano payaso

La tabla contiene un solo registro, el ingresado recientemente.


Ingresamos otro registro, esta vez cambiamos el orden de los campos:
insert into usuarios (clave, nombre)
values ('River','Juan');

Ingresamos los datos en un orden distinto al orden en que se nombran los campos, no aparece un
mensaje de error y los datos se guardan de modo incorrecto:
insert into usuarios (nombre,clave)
values ('Boca','Luis');

Veamos cmo se almacenaron los datos:


select *from usuarios;

Aparece la siguiente tabla:


8 de 89

Apuntes SQL-Oracle (I)


NOMBRE CLAVE
------------Mariano payaso
Juan
River
Boca
Luis

La tabla tiene 3 registros. Note que la clave "Boca" se guard en el campo "nombre" y el nombre de
usuario "Luis" en el campo "clave".
Primer problema:
Trabaje con la tabla "agenda" que almacena informacin de sus amigos.
1- Elimine la tabla "agenda"
2- Cree una tabla llamada "agenda". Debe tener los siguientes campos: apellido (cadena de 30),
nombre (cadena de 20), domicilio (cadena de 30) y telefono (cadena de 11)
3- Visualice las tablas existentes para verificar la creacin de "agenda" (all_tables)
4- Visualice la estructura de la tabla "agenda" (describe)
5- Ingrese los siguientes registros:
insert into agenda (apellido, nombre, domicilio, telefono)
values ('Moreno','Alberto','Colon 123','4234567');
insert into agenda (apellido,nombre, domicilio, telefono)
values ('Torres','Juan','Avellaneda 135','4458787');

6- Seleccione todos los registros de la tabla.


7- Elimine la tabla "agenda"
8- Intente eliminar la tabla nuevamente (aparece un mensaje de error)
Segundo problema:
Trabaje con la tabla "libros" que almacena los datos de los libros de su propia biblioteca.
1- Elimine la tabla "libros"
2- Cree una tabla llamada "libros". Debe definirse con los siguientes campos: titulo (cadena de 20),
autor (cadena de 30) y editorial (cadena de 15)
3- Visualice las tablas existentes.
4- Visualice la estructura de la tabla "libros"
Muestra los campos y los tipos de datos de la tabla "libros".
5- Ingrese los siguientes registros:
insert into libros (titulo,autor,editorial)
values ('El aleph','Borges','Planeta');
insert into libros (titulo,autor,editorial)
values ('Martin Fierro','Jose Hernandez','Emece');
insert into libros (titulo,autor,editorial)
values ('Aprenda PHP','Mario Molina','Emece');

6- Muestre todos los registros (select) de "libros"

9 de 89

Apuntes SQL-Oracle (I)

10 de 89

Apuntes SQL-Oracle (I)

4 - Tipos de datos
Ya explicamos que al crear una tabla debemos resolver qu campos (columnas) tendr y que tipo de
datos almacenar cada uno de ellos, es decir, su estructura.
El tipo de dato especifica el tipo de informacin que puede guardar un campo: caracteres, nmeros,
etc.
Estos son algunos tipos de datos bsicos de Oracle (posteriormente veremos otros y con ms
detalle):
- varchar2: se emplea para almacenar cadenas de caracteres. Una cadena es una secuencia de
caracteres. Se coloca entre comillas simples; ejemplo: 'Hola', 'Juan Perez', 'Colon 123'. Este
tipo de dato definen una cadena de longitud variable en la cual determinamos el mximo de
caracteres entre parntesis. Puede guardar hasta xxx caracteres. Por ejemplo, para almacenar
cadenas de hasta 30 caracteres, definimos un campo de tipo varchar2 (30), es decir, entre
parntesis, junto al nombre del campo colocamos la longitud.
Si intentamos almacenar una cadena de caracteres de mayor longitud que la definida, la
cadena no se carga, aparece un mensaje indicando tal situacin y la sentencia no se ejecuta.
Por ejemplo, si definimos un campo de tipo varchar(10) e intentamos almacenar en l la
cadena 'Buenas tardes', aparece un mensaje indicando que el valor es demasiado grande para
la columna.
- number(p,s): se usa para guardar valores numricos con decimales, de 1.0 x10-120 a 9.9...
(38 posiciones). Definimos campos de este tipo cuando queremos almacenar valores
numricos con los cuales luego realizaremos operaciones matemticas, por ejemplo,
cantidades, precios, etc.
Puede contener nmeros enteros o decimales, positivos o negativos. El parmetro "p" indica
la precisin, es decir, el nmero de dgitos en total (contando los decimales) que contendr el
nmero como mximo. El parmetro "s" especifica la escala, es decir, el mximo de dgitos
decimales. Por ejemplo, un campo definido "number(5,2)" puede contener cualquier nmero
entre 0.00 y 999.99 (positivo o negativo).
Para especificar nmero enteros, podemos omitir el parmetro "s" o colocar el valor 0 como
parmetro "s". Se utiliza como separador el punto (.).
Si intentamos almacenar un valor mayor fuera del rango permitido al definirlo, tal valor no
se carga, aparece un mensaje indicando tal situacin y la sentencia no se ejecuta.
Por ejemplo, si definimos un campo de tipo number(4,2) e intentamos guardar el valor
123.45, aparece un mensaje indicando que el valor es demasiado grande para la columna. Si
ingresamos un valor con ms decimales que los definidos, el valor se carga pero con la
cantidad de decimales permitidos, los dgitos sobrantes se omiten.
Antes de crear una tabla debemos pensar en sus campos y optar por el tipo de dato adecuado para
cada uno de ellos.
Por ejemplo, si en un campo almacenaremos nmeros telefnicos o un nmeros de documento,
usamos "varchar2", no "number" porque si bien son dgitos, con ellos no realizamos operaciones
matemticas. Si en un campo guardaremos apellidos, y suponemos que ningn apellido superar los
20 caracteres, definimos el campo "varchar2(20)". Si en un campo almacenaremos precios con dos
11 de 89

Apuntes SQL-Oracle (I)

decimales que no superarn los 999.99 pesos definimos un campo de tipo "number(5,2)", es decir, 5
dgitos en total, con 2 decimales. Si en un campo almacenaremos valores enteros de no ms de 3
dgitos, definimos un campo de tipo "number(3,0)".
Problema:
Eliminamos la tabla "libros":
drop table libros;

Vamos a crear una tabla llamada "libros" para almacenar informacin de los libros de una librera.
Necesitamos los siguientes campos:
-titulo: cadena de caracteres de 20 de longitud,
-autor: cadena de caracteres de 15 de longitud,
-editorial: caracteres de 10 de longitud,
-precio: valor numrico con 2 decimales y que no superar el valor 9999.99 y
-cantidad: valor numrico entero que no superar el valor 999.

Al crear la tabla, entonces, elegimos el tipo de dato ms adecuado para cada campo:
create table libros(
titulo varchar2(20),
autor varchar2(15),
editorial varchar2(10),
precio number(6,2),
cantidad number(3,0)
);

Vemos la estructura de la tabla:


describe libros;

Aparece la siguiente informacin:


Name
Null
Type
-------------------------------------titulo
varchar2(20)
autor
varchar2(15)
editorial
varchar2(10)
precio
number(6,2)
cantidad
number(3)

Ingresamos algunos registros:


insert into libros (titulo,autor,editorial,precio,cantidad)
values ('El aleph','Borges','Emece',25.50,100);
insert into libros (titulo,autor,editorial,precio,cantidad)
values ('Matematica estas ahi','Paenza','Siglo XXI',18.8,200);

Note que al ingresar valores numricos no se utilizan comillas y para el separador de decimales se
usa el caracter punto (.).
Veamos los registros cargados:
select *from libros;

Aparece la siguiente tabla:


12 de 89

Apuntes SQL-Oracle (I)


TITULO
AUTOR
EDITORIAL
PRECIO CANTIDAD
---------------------------------------------------------------El Aleph
Borges Emece
25,5
100
Matematica estas ahi
Paenza Siglo XXI
18,8
200

Veamos lo que sucede si intentamos ingresar para el campo "titulo" una cadena de ms de 20
caracteres:
insert into libros (titulo,autor,editorial,precio,cantidad)
values ('Alicia en el pais de las maravillas','Lewis
Carroll','Atlantida',10,200);

aparece un mensaje de error y la sentencia no se ejecuta.


vamos a cortar la cadena para que SQL Server acepte el ingreso del registro:
insert into libros (titulo,autor,editorial,precio,cantidad)
values ('Alicia en el pais','Lewis Carroll','Atlantida',10,200);

Veamos los registros cargados:


select *from libros;

La tabla tiene ahora 3 registros.


Veamos qu sucede si intentamos ingresar para el campo "cantidad" un valor fuera de rango:
insert into libros (titulo,autor,editorial,precio,cantidad)
values ('El gato con botas','Anonimo','Atlantida',10,2000);

Oracle muestra un mensaje de error y la sentencia no se ejecuta, es decir, el registro no fue


ingresado.
Veamos qu sucede si intentamos ingresar en el campo "precio" un valor con ms decimales que los
permitidos:
insert into libros (titulo,autor,editorial,precio,cantidad)
values ('El gato con botas','Anonimo','Atlantida',10.123,200);

La sentencia se ejecut, el registro ha sido cargado. Veamos cmo se almacen:


select *from libros;

Oracle omiti el ltimo dgito decimal porque el campo slo admita 2 decimales.
Primer problema:
Un videoclub que alquila pelculas en video almacena la informacin de sus pelculas en una tabla
llamada "peliculas"; para cada pelcula necesita los siguientes datos:
-nombre, cadena de caracteres de 20 de longitud,
-actor, cadena de caracteres de 20 de longitud,
-duracin, valor numrico entero que no supera los 3 dgitos.
-cantidad de copias: valor entero de un slo dgito (no tienen ms de 9 copias
de cada pelcula).

1- Elimine la tabla "peliculas" si ya existe.


13 de 89

Apuntes SQL-Oracle (I)

2- Cree la tabla eligiendo el tipo de dato adecuado para cada campo.


Note que los campos "duracion" y "cantidad", que almacenarn valores sin decimales, fueron
definidos de maneras diferentes, en el primero especificamos el valor 0 como cantidad de
decimales, en el segundo no especificamos cantidad de decimales, es decir, por defecto, asume el
valor 0.
3- Vea la estructura de la tabla.
4- Ingrese los siguientes registros:
insert into peliculas (nombre, actor, duracion, cantidad)
values ('Mision imposible','Tom Cruise',128,3);
insert into peliculas (nombre, actor, duracion, cantidad)
values ('Mision imposible 2','Tom Cruise',130,2);
insert into peliculas (nombre, actor, duracion, cantidad)
values ('Mujer bonita','Julia Roberts',118,3);
insert into peliculas (nombre, actor, duracion, cantidad)
values ('Elsa y Fred','China Zorrilla',110,2);

5- Muestre todos los registros (4 registros)


6- Intente ingresar una pelcula con valor de cantidad fuera del rango permitido:
insert into peliculas (nombre, actor, duracion, cantidad)
values ('Mujer bonita','Richard Gere',1200,10);
Mensaje de error.

7- Ingrese un valor con decimales en un nuevo registro, en el campo "duracion":


insert into peliculas (nombre, actor, duracion, cantidad)
values ('Mujer bonita','Richard Gere',120.20,4);

8- Muestre todos los registros para ver cmo se almacen el ltimo registro ingresado.
9- Intente ingresar un nombre de pelcula que supere los 20 caracteres.
Segundo problema:
Una empresa almacena los datos de sus empleados en una tabla "empleados" que guarda los
siguientes datos: nombre, documento, sexo, domicilio, sueldobasico.
1- Elimine la tabla si existe.
2- Cree la tabla eligiendo el tipo de dato adecuado para cada campo:
create table empleados(
nombre varchar2(20),
documento varchar2(8),
sexo varchar2(1),
domicilio varchar2(30),
sueldobasico number(6,2)
);

3- Verifique que la tabla existe consultando "all_tables"


4- Vea la estructura de la tabla (5 campos)
5- Ingrese algunos registros:
14 de 89

Apuntes SQL-Oracle (I)


insert into empleados (nombre, documento, sexo, domicilio, sueldobasico)
values ('Juan Perez','22333444','m','Sarmiento 123',500);
insert into empleados (nombre, documento, sexo, domicilio, sueldobasico)
values ('Ana Acosta','24555666','f','Colon 134',650);
insert into empleados (nombre, documento, sexo, domicilio, sueldobasico)
values ('Bartolome Barrios','27888999','m','Urquiza 479',800);

6- Seleccione todos los registros (3 registros)


7- Intente ingresar un registro con el valor "masculino" en el campo "sexo"
Un mensaje indica que el campo est definido para almacenar 1 solo caracter como mximo y est
intentando ingresar 9 caracteres.
8- Intente ingresar un valor fuera de rango, en un nuevo registro, para el campo "sueldobasico"
Mensaje de error.
9- Elimine la tabla

5 - Recuperar algunos campos (select)


Hemos aprendido cmo ver todos los registros de una tabla, empleando la instruccin "select".
La sintaxis bsica y general es la siguiente:
select *from NOMBRETABLA;

El asterisco (*) indica que se seleccionan todos los campos de la tabla.


Podemos especificar el nombre de los campos que queremos ver, separndolos por comas:
select titulo,autor from libros;

La lista de campos luego del "select" selecciona los datos correspondientes a los campos
nombrados. En el ejemplo anterior seleccionamos los campos "titulo" y "autor" de la tabla "libros",
mostrando todos los registros.
Problema:
Trabajamos con la tabla "libros" que almacena los datos de los libros de una librera.
Eliminamos la tabla:
drop table libros;
Creamos la tabla:
create table libros(
titulo varchar2(40),
autor varchar2(30),
editorial varchar2(15),
precio number(6,2),
cantidad number(3,0)
);

Veamos la estructura de la tabla (5 campos):

15 de 89

Apuntes SQL-Oracle (I)


describe libros;

Ingresamos algunos registros:


insert into libros (titulo,autor,editorial,precio,cantidad)
values ('El aleph','Borges','Emece',25.50,100);
insert into libros (titulo,autor,editorial,precio,cantidad)
values ('Alicia en el pais de las maravillas','Lewis
Carroll','Atlantida',10,200);
insert into libros (titulo,autor,editorial,precio,cantidad)
values ('Matematica estas ahi','Paenza','Siglo XXI',18.8,200);

Veamos todos los campos la tabla:


select *from libros;

Aparece la siguiente tabla:


TITULO
AUTOR
EDITORIAL
PRECIO
CANTIDAD
----------------------------------------------------------------------------------------El aleph
Borges
Emece
25.50
100
Alicia en el pais de las maravillas
Lewis Carroll
Atlantida
10
200
Matematica estas ahi
Paenza
Siglo XXI
18.8
200

Recuperamos solamente el ttulo, autor y editorial de todos los libros especificando los nombres de
los campos separados por comas:
select titulo,autor,editorial from libros;

Aparece la siguiente tabla:


TITULO
AUTOR
EDITORIAL
----------------------------------------------------------------El aleph
Borges
Emece
Alicia en el pais de las maravillas
Lewis Carroll
Atlantida
Matematica estas ahi
Paenza
Siglo XXI

Con la siguiente sentencia seleccionamos los ttulos y precios de todos los libros:
select titulo,precio from libros;

Aparece la siguiente tabla:


TITULO
PRECIO
----------------------------------------------El aleph
25.50
Alicia en el pais de las maravillas
10
Matematica estas ahi
18.8

Para ver solamente la editorial y la cantidad de libros, tipeamos:


select editorial,cantidad from libros;

16 de 89

Apuntes SQL-Oracle (I)

Aparece la siguiente tabla:


EDITORIAL
CANTIDAD
------------------------Emece
100
Atlantida
200
Siglo XXI
200

Note que en todos los casos recuperamos TODOS los registros, pero solamente ALGUNOS campos
que especificamos.
Primer problema:
Un videoclub que alquila pelculas en video almacena la informacin de sus pelculas en alquiler en
una tabla llamada "peliculas".
1- Elimine la tabla si existe.
2- Cree la tabla:
create table peliculas(
titulo varchar2(20),
actor varchar2(20),
duracion number(3),
cantidad number(1)
);

3- Vea la estructura de la tabla (4 campos)


4- Ingrese los siguientes registros:
insert into peliculas (titulo, actor, duracion, cantidad)
values ('Mision imposible','Tom Cruise',180,3);
insert into peliculas (titulo, actor, duracion, cantidad)
values ('Mision imposible 2','Tom Cruise',190,2);
insert into peliculas (titulo, actor, duracion, cantidad)
values ('Mujer bonita','Julia Roberts',118,3);
insert into peliculas (titulo, actor, duracion, cantidad)
values ('Elsa y Fred','China Zorrilla',110,2);

5- Realice un "select" mostrando solamente el ttulo y actor de todas las pelculas


6- Muestre el ttulo y duracin de todas las peliculas.
7- Muestre el ttulo y la cantidad de copias.
Segundo problema:
Una empresa almacena los datos de sus empleados en una tabla llamada "empleados".
1- Elimine la tabla si ya existe.
2- Cree la tabla:
create table empleados(
nombre varchar2(20),
documento varchar2(8),
sexo varchar2(1),
domicilio varchar2(30),
sueldobasico number(6,2)
);

17 de 89

Apuntes SQL-Oracle (I)

3- Vea la estructura de la tabla (5 campos)


4- Ingrese algunos registros:
insert into empleados (nombre, documento, sexo, domicilio, sueldobasico)
values ('Juan Juarez','22333444','m','Sarmiento 123',500);
insert into empleados (nombre, documento, sexo, domicilio, sueldobasico)
values ('Ana Acosta','27888999','f','Colon 134',700);
insert into empleados (nombre, documento, sexo, domicilio, sueldobasico)
values ('Carlos Caseres','31222333','m','Urquiza 479',850);

5- Muestre todos los datos de los empleados.


6- Muestre el nombre, documento y domicilio de los empleados.
7- Realice un "select" mostrando el documento, sexo y sueldo bsico de todos los empleados.

18 de 89

Apuntes SQL-Oracle (I)

6 - Recuperar algunos registros (where)


Hemos aprendido a seleccionar algunos campos de una tabla.
Tambin es posible recuperar algunos registros.
Existe una clusula, "where" con la cual podemos especificar condiciones para una consulta
"select". Es decir, podemos recuperar algunos registros, slo los que cumplan con ciertas
condiciones indicadas con la clusula "where". Por ejemplo, queremos ver el usuario cuyo nombre
es "Marcelo", para ello utilizamos "where" y luego de ella, la condicin:
select nombre, clave
from usuarios
where nombre='Marcelo';

La sintaxis bsica y general es la siguiente:


select NOMBRECAMPO1, ..., NOMBRECAMPOn
from NOMBRETABLA
where CONDICION;

Para las condiciones se utilizan operadores relacionales (tema que trataremos ms adelante en
detalle). El signo igual(=) es un operador relacional. Para la siguiente seleccin de registros
especificamos una condicin que solicita los usuarios cuya clave es igual a "River":
select nombre,clave
from usuarios
where clave='River';

Si ningn registro cumple la condicin establecida con el "where", no aparecer ningn registro.
Entonces, con "where" establecemos condiciones para recuperar algunos registros.
Para recuperar algunos campos de algunos registros combinamos en la consulta la lista de campos y
la clusula "where":
select nombre
from usuarios
where clave='River';

En la consulta anterior solicitamos el nombre de todos los usuarios cuya clave sea igual a "River".
Problema:
Trabajamos con la tabla "usuarios" que consta de 2 campos: nombre de usuario y clave.
Eliminamos la tabla si ya existe:
drop table usuarios;

Creamos la tabla:
create table usuarios (
nombre varchar2(30),
clave varchar2(10)

19 de 89

Apuntes SQL-Oracle (I)


);

Vemos la estructura de la tabla:


describe usuarios;

Ingresamos algunos registros:


insert into usuarios (nombre, clave)
values ('Marcelo','Boca');
insert into usuarios (nombre, clave)
values ('JuanPerez','Juancito');
insert into usuarios (nombre, clave)
values ('Susana','River');
insert into usuarios (nombre, clave)
values ('Luis','River');

Realizamos una consulta especificando una condicin, queremos ver toda la informacin del
usuario cuyo nombre es "Marcelo":
select *from usuarios
where nombre='Leonardo';

Nos muestra todos los campos del registro en el cual el campo "nombre" es igual a "Marcelo".
Queremos ver el nombre de los usuarios cuya clave es "River":
select nombre from usuarios
where clave='River';

Nos muestra 2 usuarios.


Realizamos un "select" de los nombres de los usuarios cuya clave es "Santi":
select nombre from usuarios
where clave='Santi';

No se muestra ningn registro ya que ninguno cumple la condicin.


Primer problema:
Trabaje con la tabla "agenda" en la que registra los datos de sus amigos.
1- Elimine "agenda"
2- Cree la tabla, con los siguientes campos: apellido (cadena de 30), nombre (cadena de 20),
domicilio (cadena de 30) y telefono (cadena de 11):
create table agenda(
apellido varchar2(30),
nombre varchar2(30),
domicilio varchar2(30),
telefono varchar2(11)
);

3- Visualice la estructura de la tabla "agenda" (4 campos)


4- Ingrese los siguientes registros ("insert into"):
insert into agenda(apellido,nombre,domicilio,telefono) values
('Acosta', 'Ana', 'Colon 123', '4234567');

20 de 89

Apuntes SQL-Oracle (I)


insert into agenda(apellido,nombre,domicilio,telefono) values
('Bustamante', 'Betina', 'Avellaneda 135', '4458787');
insert into agenda(apellido,nombre,domicilio,telefono) values
('Lopez', 'Hector', 'Salta 545', '4887788');
insert into agenda(apellido,nombre,domicilio,telefono) values
('Lopez', 'Luis', 'Urquiza 333', '4545454');
insert into agenda(apellido,nombre,domicilio,telefono) values
('Lopez', 'Marisa', 'Urquiza 333', '4545454');

5- Seleccione todos los registros de la tabla (5 registros)


6- Seleccione el registro cuyo nombre sea "Marisa" (1 registro)
7- Seleccione los nombres y domicilios de quienes tengan apellido igual a "Lopez" (3 registros)
8- Seleccione los nombres y domicilios de quienes tengan apellido igual a "lopez" (en minsculas)
No aparece ningn registro, ya que la cadena "Lopez" noe s igual a la cadena "lopez".
9- Muestre el nombre de quienes tengan el telfono "4545454" (2 registros)
Segundo problema:
Un comercio que vende artculos de computacin registra los datos de sus artculos en una tabla
llamada "articulos".
1- Elimine la tabla si existe.
2- Cree la tabla "articulos" con la siguiente estructura:
create table articulos(
codigo number(5),
nombre varchar2(20),
descripcion varchar2(30),
precio number(7,2)
);

3- Vea la estructura de la tabla:


describe articulos;

4- Ingrese algunos registros:


insert into articulos (codigo, nombre, descripcion,
values (1,'impresora','Epson Stylus C45',400.80);
insert into articulos (codigo, nombre, descripcion,
values (2,'impresora','Epson Stylus C85',500);
insert into articulos (codigo, nombre, descripcion,
values (3,'monitor','Samsung 14',800);
insert into articulos (codigo, nombre, descripcion,
values (4,'teclado','ingles Biswal',100);
insert into articulos (codigo, nombre, descripcion,
values (5,'teclado','espaol Biswal',90);

precio)
precio)
precio)
precio)
precio)

5- Seleccione todos los datos de los registros cuyo nombre sea "impresora" (2 registros)
6- Muestre slo el cdigo, descripcin y precio de los teclados (2 registros)

21 de 89

Apuntes SQL-Oracle (I)

22 de 89

Apuntes SQL-Oracle (I)

7 - Operadores relacionales
Los operadores son smbolos que permiten realizar operaciones matemticas, concatenar cadenas,
hacer comparaciones.
Oracle reconoce de 4 tipos de operadores:
1)
2)
3)
4)

relacionales (o de comparacin)
aritmticos
de concatenacin
lgicos

Por ahora veremos solamente los primeros.


Los operadores relacionales (o de comparacin) nos permiten comparar dos expresiones, que
pueden ser variables, valores de campos, etc.
Hemos aprendido a especificar condiciones de igualdad para seleccionar registros de una tabla; por
ejemplo:
select *from libros
where autor='Borges';

Utilizamos el operador relacional de igualdad.


Los operadores relacionales vinculan un campo con un valor para que Oracle compare cada registro
(el campo especificado) con el valor dado.
Los operadores relacionales son los siguientes:
=
<>
>
<
>=
<=

igual
distinto
mayor
menor
mayor o igual
menor o igual

Podemos seleccionar los registros cuyo autor sea diferente de "Borges", para ello usamos la
condicin:
select * from libros
where autor<>'Borges';

Podemos comparar valores numricos. Por ejemplo, queremos mostrar los ttulos y precios de los
libros cuyo precio sea mayor a 20 pesos:
select titulo, precio
from libros
where precio>20;

Queremos seleccionar los libros cuyo precio sea menor o igual a 30:
select *from libros

23 de 89

Apuntes SQL-Oracle (I)


where precio<=30;

Los operadores relacionales comparan valores del mismo tipo. Se emplean para comprobar si un
campo cumple con una condicin.
No son los nicos, existen otros que veremos mas adelante.
Problema:
Trabajamos con la tabla "libros" de una librera.
Eliminamos la tabla "libros":
drop table libros;

La creamos con la siguiente estructura:


create table libros(
titulo varchar2(30),
autor varchar2(30),
editorial varchar2(15),
precio number(5,2)
);

Agregamos registros a la tabla:


insert into libros (titulo,autor,editorial,precio)
values ('El aleph','Borges','Emece',24.50);
insert into libros (titulo,autor,editorial,precio)
values ('Martin Fierro','Jose Hernandez','Emece',16.00);
insert into libros (titulo,autor,editorial,precio)
values ('Aprenda PHP','Mario Molina','Emece',35.40);
insert into libros (titulo,autor,editorial,precio)
values ('Cervantes y el quijote','Borges','Paidos',50.90);

Seleccionamos los registros cuyo autor sea diferente de 'Borges':


select *from libros
where autor<>'Borges';

Seleccionamos los registros cuyo precio supere los 20 pesos, slo el ttulo y precio:
select titulo,precio
from libros
where precio>20;

Note que el valor con el cual comparamos el campo "precio", como es numrico, no se coloca entre
comillas. Los libros cuyo precio es menor a 20 pesos no aparecen en la seleccin.
Recuperamos aquellos libros cuyo precio es menor o igual a 30:
select *from libros
where precio<=30;

Primer problema:
Un comercio que vende artculos de computacin registra los datos de sus artculos en una tabla con
ese nombre.
1- Elimine "articulos"
24 de 89

Apuntes SQL-Oracle (I)

2- Cree la tabla, con la siguiente estructura:


create table articulos(
codigo number(5),
nombre varchar2(20),
descripcion varchar2(30),
precio number(6,2),
cantidad number(3)
);

3- Vea la estructura de la tabla.


4- Ingrese algunos registros:
insert into articulos (codigo, nombre, descripcion, precio,cantidad)
values (1,'impresora','Epson Stylus C45',400.80,20);
insert into articulos (codigo, nombre, descripcion, precio,cantidad)
values (2,'impresora','Epson Stylus C85',500,30);
insert into articulos (codigo, nombre, descripcion, precio,cantidad)
values (3,'monitor','Samsung 14',800,10);
insert into articulos (codigo, nombre, descripcion, precio,cantidad)
values (4,'teclado','ingles Biswal',100,50);
insert into articulos (codigo, nombre, descripcion, precio,cantidad)
values (5,'teclado','espaol Biswal',90,50);

5- Seleccione los datos de las impresoras (2 registros)


6- Seleccione los artculos cuyo precio sea mayor o igual a 400 (3 registros)
7- Seleccione el cdigo y nombre de los artculos cuya cantidad sea menor a 30 (2 registros)
8- Selecciones el nombre y descripcin de los artculos que NO cuesten $100 (4 registros)

Segundo problema:
Un video club que alquila pelculas en video almacena la informacin de sus pelculas en alquiler en
una tabla denominada "peliculas".
1- Elimine la tabla.
drop table peliculas;
2- Cree la tabla eligiendo el tipo de dato adecuado para cada campo:
create table peliculas(
titulo varchar2(20),
actor varchar2(20),
duracion number(3),
cantidad number(1)
);

3- Ingrese los siguientes registros:


insert into peliculas (titulo, actor, duracion, cantidad)
values ('Mision imposible','Tom Cruise',120,3);
insert into peliculas (titulo, actor, duracion, cantidad)
values ('Mision imposible 2','Tom Cruise',180,4);
insert into peliculas (titulo, actor, duracion, cantidad)
values ('Mujer bonita','Julia R.',90,1);

25 de 89

Apuntes SQL-Oracle (I)


insert into peliculas (titulo, actor, duracion, cantidad)
values ('Elsa y Fred','China Zorrilla',80,2);

4- Seleccione las pelculas cuya duracin no supere los 90 minutos (2 registros)


5- Seleccione el ttulo de todas las pelculas en las que el actor NO sea "Tom Cruise" (2 registros)
6- Muestre todos los campos, excepto "duracion", de todas las pelculas de las que haya ms de 2
copias (2 registros)

26 de 89

Apuntes SQL-Oracle (I)

8 - Borrar registros (delete)


Para eliminar los registros de una tabla usamos el comando "delete".
Sintaxis bsica:
delete from NOMBRETABLA;

Se coloca el comando delete seguido de la palabra clave "from" y el nombre de la tabla de la cual
queremos eliminar los registros. En el siguiente ejemplo se eliminan los registros de la tabla
"usuarios":
delete from usuarios;
Luego, un mensaje indica la cantidad de registros que se han eliminado.
Si no queremos eliminar todos los registros, sino solamente algunos, debemos indicar cul o cules;
para ello utilizamos el comando "delete" junto con la clausula "where" con la cual establecemos la
condicin que deben cumplir los registros a borrar.
Por ejemplo, queremos eliminar aquel registro cuyo nombre de usuario es "Marcelo":
delete from usuarios
where nombre='Marcelo';

Si solicitamos el borrado de un registro que no existe, es decir, ningn registro cumple con la
condicin especificada, aparecer un mensaje indicando que ningn registro fue eliminado, pues no
encontr registros con ese dato.
Tenga en cuenta que si no colocamos una condicin, se eliminan todos los registros de la tabla
especificada.
Problema:
Trabajamos con la tabla "usuarios".
Eliminamos la tabla "usuarios":
drop table usuarios;

La creamos con la siguiente estructura:


create table usuarios(
nombre varchar2(30),
clave varchar2(10)
);

Agregamos registros a la tabla:


insert into usuarios (nombre,clave)
values ('Marcelo','River');
insert into usuarios (nombre,clave)
values ('Susana','chapita');
insert into usuarios (nombre,clave)
values ('CarlosFuentes','Boca');
insert into usuarios (nombre,clave)

27 de 89

Apuntes SQL-Oracle (I)


values ('FedericoLopez','Boca');

Seleccionamos todos los registros:


select *from usuarios;

Vamos a eliminar el registro cuyo nombre de usuario es "Marcelo":


delete from usuarios
where nombre='Marcelo';

aparece un mensaje indicando que se ha borrado 1 fila.


Intentamos eliminarlo nuevamente:
delete from usuarios
where nombre='Marcelo';

Como ningn registro cumple con la condicin especificada (nombre igual a Marcelo), aparecer un
mensaje indicando que ningn registro fue borrado.
Eliminamos todos los registros cuya clave es 'Boca':
delete from usuarios
where clave='Boca';

Aparece un mensaje indicando que 2 registros fueron eliminados, es decir, se eliminaron los 2
registros cuyas claves eran igual a "River".
Eliminemos todos los registros:
delete from usuarios;

Veamos el contenido de la tabla:


select * from usuarios;

No hay registros.
Primer problema:
Trabaje con la tabla "agenda" que registra la informacin referente a sus amigos.
1- Elimine la tabla.
2- Cree la tabla con los siguientes campos: apellido (cadena de 30), nombre (cadena de 20),
domicilio (cadena de 30) y telefono (cadena de 11):
create table agenda(
apellido varchar2(30),
nombre varchar2(20),
domicilio varchar2(30),
telefono varchar2(11)
);

3- Ingrese los siguientes registros (insert into):


insert into agenda(apellido,nombre,domicilio,telefono) values
('Alvarez','Alberto','Colon 123','4234567');
insert into agenda(apellido,nombre,domicilio,telefono) values

28 de 89

Apuntes SQL-Oracle (I)


('Juarez','Juan','Avellaneda 135','4458787');
insert into agenda(apellido,nombre,domicilio,telefono) values
('Lopez','Maria','Urquiza 333','4545454');
insert into agenda(apellido,nombre,domicilio,telefono) values
('Lopez','Jose','Urquiza 333','4545454');
insert into agenda(apellido,nombre,domicilio,telefono) values
('Salas','Susana','Gral. Paz 1234','4123456');

4- Elimine el registro cuyo nombre sea "Juan" (1 registro)


5- Elimine los registros cuyo nmero telefnico sea igual a "4545454" (2 registros)
6- Elimine todos los registros (2 registros)

Segundo problema:
Un comercio que vende artculos de computacin registra los datos de sus artculos en una tabla con
ese nombre.
1- Elimine "articulos"
2- Cree la tabla, con la siguiente estructura:
create table articulos(
codigo number(4,0),
nombre varchar2(20),
descripcion varchar2(30),
precio number(7,2),
cantidad number(3)
);

3- Vea la estructura de la tabla.


4- Ingrese algunos registros:
insert into articulos (codigo, nombre, descripcion, precio,cantidad)
values (1,'impresora','Epson Stylus C45',400.80,20);
insert into articulos (codigo, nombre, descripcion, precio,cantidad)
values (2,'impresora','Epson Stylus C85',500,30);
insert into articulos (codigo, nombre, descripcion, precio,cantidad)
values (3,'monitor','Samsung 14',800,10);
insert into articulos (codigo, nombre, descripcion, precio,cantidad)
values (4,'teclado','ingles Biswal',100,50);
insert into articulos (codigo, nombre, descripcion, precio,cantidad)
values (5,'teclado','espaol Biswal',90,50);

5- Elimine los artculos cuyo precio sea mayor o igual a 500 (2 registros)
7- Elimine todas las impresoras (1 registro)
8- Elimine todos los artculos cuyo cdigo sea diferente a 4 (1 registro)

29 de 89

Apuntes SQL-Oracle (I)

9 - Actualizar registros (update)


Decimos que actualizamos un registro cuando modificamos alguno de sus valores.
Para modificar uno o varios datos de uno o varios registros utilizamos "update" (actualizar).
Sintaxis bsica:
update NOMBRETABLA set CAMPO=NUEVOVALOR;

Utilizamos "update" junto al nombre de la tabla y "set" junto con el campo a modificar y su nuevo
valor.
El cambio afectar a todos los registros.
Por ejemplo, en nuestra tabla "usuarios", queremos cambiar los valores de todas las claves, por
"RealMadrid":
update usuarios set clave='RealMadrid';

Podemos modificar algunos registros, para ello debemos establecer condiciones de seleccin con
"where".
Por ejemplo, queremos cambiar el valor correspondiente a la clave de nuestro usuario llamado
"Federicolopez", queremos como nueva clave "Boca", necesitamos una condicin "where" que
afecte solamente a este registro:
update usuarios set clave='Boca'
where nombre='Federicolopez';

Si Oracle no encuentra registros que cumplan con la condicin del "where", un mensaje indica que
ningn registro fue modificado.
Las condiciones no son obligatorias, pero si omitimos la clusula "where", la actualizacin afectar
a todos los registros.
Tambin podemos actualizar varios campos en una sola instruccin:
update usuarios set nombre='Marceloduarte', clave='Marce'
where nombre='Marcelo';

Para ello colocamos "update", el nombre de la tabla, "set" junto al nombre del campo y el nuevo
valor y separado por coma, el otro nombre del campo con su nuevo valor.
Problema:
Trabajamos con la tabla "usuarios".
Eliminamos la tabla:
drop table usuarios;

Creamos la tabla:
create table usuarios(
nombre varchar2(20),

30 de 89

Apuntes SQL-Oracle (I)


clave varchar2(10)
);

Ingresamos algunos registros:


insert into usuarios (nombre,clave)
values ('Marcelo','River');
insert into usuarios (nombre,clave)
values ('Susana','chapita');
insert into usuarios (nombre,clave)
values ('Carlosfuentes','Boca');
insert into usuarios (nombre,clave)
values ('Federicolopez','Boca');

Cambiaremos los valores de todas las claves, por la cadena "RealMadrid":


update usuarios set clave='RealMadrid';

Un mensaje indica que se actualizaron 4 registros.


El cambio afect a todos los registros, vemoslo:
select *from usuarios;

Necesitamos cambiar el valor de la clave del usuario llamado "Federicolopez" por "Boca":
update usuarios set clave='Boca'
where nombre='Federicolopez';

Verifiquemos que la actualizacin se realiz:


select *from usuarios;

Vimos que si Oracle no encuentra registros que cumplan con la condicin del "where", un mensaje
indica que ningn registro se modifica:
update usuarios set clave='payaso'
where nombre='JuanaJuarez';

Para actualizar varios campos en una sola instruccin empleamos:


update usuarios set nombre='Marceloduarte', clave='Marce'
where nombre='Marcelo';

Verifiquemos que la actualizacin se realiz:


select *from usuarios;

Primer problema:
Trabaje con la tabla "agenda" que almacena los datos de sus amigos.
1- Elimine la tabla y crela con la siguiente estructura:
drop table agenda;
create table agenda(
apellido varchar2(30),
nombre varchar2(20),
domicilio varchar2(30),

31 de 89

Apuntes SQL-Oracle (I)


telefono varchar2(11)
);

3- Ingrese los siguientes registros:


insert into agenda (apellido,nombre,domicilio,telefono)
values ('Acosta','Alberto','Colon 123','4234567');
insert into agenda (apellido,nombre,domicilio,telefono)
values ('Juarez','Juan','Avellaneda 135','4458787');
insert into agenda (apellido,nombre,domicilio,telefono)
values ('Lopez','Maria','Urquiza 333','4545454');
insert into agenda (apellido,nombre,domicilio,telefono)
values ('Lopez','Jose','Urquiza 333','4545454');
insert into agenda (apellido,nombre,domicilio,telefono)
values ('Suarez','Susana','Gral. Paz 1234','4123456');

4- Modifique el registro cuyo nombre sea "Juan" por "Juan Jose" (1 registro actualizado)
5- Actualice los registros cuyo nmero telefnico sea igual a "4545454" por "4445566" (2 registros)
6- Actualice los registros que tengan en el campo "nombre" el valor "Juan" por "Juan Jose" (ningn
registro afectado porque ninguno cumple con la condicin del "where")

Segundo problema:
Trabaje con la tabla "libros" de una librera.
1- Elimine la tabla y crela con los siguientes campos: titulo (cadena de 30 caracteres de longitud),
autor (cadena de 20), editorial (cadena de 15) y precio (entero no mayor a 999.99):
drop table libros;
create table libros (
titulo varchar2(30),
autor varchar2(20),
editorial varchar2(15),
precio number(5,2)
);

3- Ingrese los siguientes registros:


insert into libros (titulo, autor, editorial, precio)
values ('El aleph','Borges','Emece',25.00);
insert into libros (titulo, autor, editorial, precio)
values ('Martin Fierro','Jose Hernandez','Planeta',35.50);
insert into libros (titulo, autor, editorial, precio)
values ('Aprenda PHP','Mario Molina','Emece',45.50);
insert into libros (titulo, autor, editorial, precio)
values ('Cervantes y el quijote','Borges','Emece',25);
insert into libros (titulo, autor, editorial, precio)
values ('Matematica estas ahi','Paenza','Siglo XXI',15);

4- Muestre todos los registros (5 registros)


5- Modifique los registros cuyo autor sea igual a "Paenza", por "Adrian Paenza" (1 registro)
6- Nuevamente, modifique los registros cuyo autor sea igual a "Paenza", por "Adrian Paenza"
32 de 89

Apuntes SQL-Oracle (I)

(ningn registro afectado porque ninguno cumple la condicin)


7- Actualice el precio del libro de "Mario Molina" a 27 pesos (1 registro)
8- Actualice el valor del campo "editorial" por "Emece S.A.", para todos los registros cuya editorial
sea igual a "Emece" (3 registros)

33 de 89

Apuntes SQL-Oracle (I)

10 - Comentarios
Para aclarar algunas instrucciones, en ocasiones, necesitamos agregar comentarios.
Es posible ingresar comentarios en la lnea de comandos, es decir, un texto que no se ejecuta; para
ello se emplean dos guiones (--):
select *from libros;--mostramos los registros de libros

en la lnea anterior, todo lo que est luego de los guiones (hacia la derecha) no se ejecuta.
Para agregar varias lneas de comentarios, se coloca una barra seguida de un asterisco (/*) al
comienzo del bloque de comentario y al finalizarlo, un asterisco seguido de una barra (*/)
select titulo, autor
/*mostramos ttulos y
nombres de los autores*/
from libros;

todo lo que est entre los smbolos "/*" y "*/" no se ejecuta.

34 de 89

Apuntes SQL-Oracle (I)

11 - Valores nulos (null)


"null' significa "dato desconocido" o "valor inexistente".
A veces, puede desconocerse o no existir el dato correspondiente a algn campo de un registro. En
estos casos decimos que el campo puede contener valores nulos.
Por ejemplo, en nuestra tabla de libros, podemos tener valores nulos en el campo "precio" porque es
posible que para algunos libros no le hayamos establecido el precio para la venta.
En contraposicin, tenemos campos que no pueden estar vacos jams.
Veamos un ejemplo. Tenemos nuestra tabla "libros". El campo "titulo" no debera estar vaco nunca,
igualmente el campo "autor". Para ello, al crear la tabla, debemos especificar que tales campos no
admitan valores nulos:
create table libros(
titulo varchar2(30) not null,
autor varchar2(20) not null,
editorial varchar2(15) null,
precio number(5,2)
);

Para especificar que un campo NO admita valores nulos, debemos colocar "not null" luego de la
definicin del campo.
En el ejemplo anterior, los campos "editorial" y "precio" si admiten valores nulos.
Cuando colocamos "null" estamos diciendo que admite valores nulos (caso del campo "editorial");
por defecto, es decir, si no lo aclaramos, los campos permiten valores nulos (caso del campo
"precio").
Cualquier campo, de cualquier tipo de dato permite ser definido para aceptar o no valores nulos. Un
valor "null" NO es lo mismo que un valor 0 (cero) o una cadena de espacios en blanco (" ").
Si ingresamos los datos de un libro, para el cual an no hemos definido el precio podemos colocar
"null" para mostrar que no tiene precio:
insert into libros (titulo,autor,editorial,precio)
values('El aleph','Borges','Emece',null);

Note que el valor "null" no es una cadena de caracteres, NO se coloca entre comillas.
Entonces, si un campo acepta valores nulos, podemos ingresar "null" cuando no conocemos el
valor.
Tambin podemos colocar "null" en el campo "editorial" si desconocemos el nombre de la editorial
a la cual pertenece el libro que vamos a ingresar:
insert into libros (titulo,autor,editorial,precio)
values('Alicia en el pais','Lewis Carroll',null,25);

Una cadena vaca es interpretada por Oracle como valor nulo; por lo tanto, si ingresamos una
35 de 89

Apuntes SQL-Oracle (I)

cadena vaca, se almacena el valor "null".


Si intentamos ingresar el valor "null" (o una cadena vaca) en campos que no admiten valores nulos
(como "titulo" o "autor"), Oracle no lo permite, muestra un mensaje y la insercin no se realiza; por
ejemplo:
insert into libros (titulo,autor,editorial,precio)
values(null,'Borges','Siglo XXI',25);

Cuando vemos la estructura de una tabla con "describe", en la columna "Null", aparece "NOT
NULL" si el campo no admite valores nulos y no aparece en caso que si los permita.
Para recuperar los registros que contengan el valor "null" en algn campo, no podemos utilizar los
operadores relacionales vistos anteriormente: = (igual) y <> (distinto); debemos utilizar los
operadores "is null" (es igual a null) y "is not null" (no es null).
Los valores nulos no se muestran, aparece el campo vaco.
Entonces, para que un campo no permita valores nulos debemos especificarlo luego de definir el
campo, agregando "not null". Por defecto, los campos permiten valores nulos, pero podemos
especificarlo igualmente agregando "null".

36 de 89

Apuntes SQL-Oracle (I)

11 - Valores nulos (null)


Problema:
Trabajamos con la tabla "libros" de una librera.
Eliminamos la tabla "libros":
drop table libros;

Creamos la tabla especificando que los campos "titulo" y "autor" no admitan valores nulos:
create table libros(
titulo varchar2(30) not null,
autor varchar2(30) not null,
editorial varchar2(15) null,
precio number(5,2)
);

Los campos "editorial" y "precio" si permiten valores nulos; el primero, porque lo especificamos
colocando "null" en la definicin del campo, el segundo lo asume por defecto.
Agregamos un registro a la tabla con valor nulo para el campo "precio":
insert into libros (titulo,autor,editorial,precio)
values('El aleph','Borges','Emece',null);

Veamos cmo se almacen el registro:


select *from libros;

No aparece ningn valor en la columna "precio".


Ingresamos otro registro, con valor nulo para el campo "editorial", campo que admite valores
"null":
insert into libros (titulo,autor,editorial,precio)
values('Alicia en el pais','Lewis Carroll',null,0);

Veamos cmo se almacen el registro:


select *from libros;

No aparece ningn valor en la columna "editorial".


Ingresamos otro registro, con valor nulo para los dos campos que lo admiten:
insert into libros (titulo,autor,editorial,precio)
values('Aprenda PHP','Mario Molina',null,null);

Veamos cmo se almacen el registro:


select *from libros;

No aparece ningn valor en ambas columnas.


37 de 89

Apuntes SQL-Oracle (I)

Veamos lo que sucede si intentamos ingresar el valor "null" en campos que no lo admiten, como
"titulo":
insert into libros (titulo,autor,editorial,precio)
values(null,'Borges','Siglo XXI',25);

aparece un mensaje indicando que no se puede realizar una insercin "null" y la sentencia no se
ejecuta.
Para ver cules campos admiten valores nulos y cules no, vemos la estructura de la tabla:
describe libros;

nos muestra, en la columna "Null", que los campos "titulo" y "autor" estn definidos "not null", es
decir, no permiten valores nulos, los otros dos campos si los admiten.
Dijimos que la cadena vaca es interpretada como valor "null". Vamos a ingresar un registro con
cadena vaca para el campo "editorial":
insert into libros (titulo,autor,editorial,precio)
values('Uno','Richard Bach','',18.50);

Veamos cmo se almacen el registro:


select *from libros;

No aparece ningn valor en la columna "editorial" del libro "Uno", almacen "null".
Intentamos ingresar una cadena vaca en el campo "titulo":
insert into libros (titulo,autor,editorial,precio)
values('','Richard Bach','Planeta',22);

Mensaje de error indicando que el campo no admite valores nulos.


Dijimos que una cadena de espacios NO es igual a una cadena vaca o valor "null". Vamos a
ingresar un registro y en el campo "editorial" guardaremos una cadena de 3 espacios:
insert into libros (titulo,autor,editorial,precio)
values('Don quijote','Cervantes','
',20);

Veamos cmo se almacen el registro:


select *from libros;

Se muestra la cadena de espacios.


Recuperamos los registros que contengan en el campo "editorial" una cadena de 3 espacios:
select *from libros where editorial='

';

Primer problema:
Una farmacia guarda informacin referente a sus medicamentos en una tabla llamada
"medicamentos".
1- Elimine la tabla y crela con la siguiente estructura:
drop table medicamentos;

38 de 89

Apuntes SQL-Oracle (I)


create table medicamentos(
codigo number(5) not null,
nombre varchar2(20) not null,
laboratorio varchar2(20),
precio number(5,2),
cantidad number(3,0) not null
);

3- Visualice la estructura de la tabla "medicamentos"


note que los campos "codigo", "nombre" y "cantidad", en la columna "Null" muestra "NOT NULL".
4- Ingrese algunos registros con valores "null" para los campos que lo admitan:
insert into medicamentos (codigo,nombre,laboratorio,precio,cantidad)
values(1,'Sertal gotas',null,null,100);
insert into medicamentos (codigo,nombre,laboratorio,precio,cantidad)
values(2,'Sertal compuesto',null,8.90,150);
insert into medicamentos (codigo,nombre,laboratorio,precio,cantidad)
values(3,'Buscapina','Roche',null,200);

5- Vea todos los registros.


6- Ingrese un registro con valor "0" para el precio y cadena vaca para el laboratorio.
7- Intente ingresar un registro con cadena vaca para el nombre (mensaje de error)
8- Intente ingresar un registro con valor nulo para un campo que no lo admite (aparece un mensaje
de error)
9- Ingrese un registro con una cadena de 1 espacio para el laboratorio.
10- Recupere los registros cuyo laboratorio contenga 1 espacio (1 registro)
11- Recupere los registros cuyo laboratorio sea distinto de ' '(cadena de 1 espacio) (1 registro)

Segundo problema:
Trabaje con la tabla que almacena los datos sobre pelculas, llamada "peliculas".
1- Elimine la tabla:
2- Crela con la siguiente estructura:
create table peliculas(
codigo number(4) not null,
titulo varchar2(40) not null,
actor varchar2(20),
duracion number(3)
);

3- Visualice la estructura de la tabla.


note que el campo "codigo" y "titulo", en la columna "Null" muestran "NOT NULL".
4- Ingrese los siguientes registros:
insert into peliculas (codigo,titulo,actor,duracion)
values(1,'Mision imposible','Tom Cruise',120);
insert into peliculas (codigo,titulo,actor,duracion)
values(2,'Harry Potter y la piedra filosofal',null,180);

39 de 89

Apuntes SQL-Oracle (I)


insert into peliculas (codigo,titulo,actor,duracion)
values(3,'Harry Potter y la camara secreta','Daniel R.',null);
insert into peliculas (codigo,titulo,actor,duracion)
values(0,'Mision imposible 2','',150);
insert into peliculas (codigo,titulo,actor,duracion)
values(4,'Titanic','L. Di Caprio',220);
insert into peliculas (codigo,titulo,actor,duracion)
values(5,'Mujer bonita','R. Gere-J. Roberts',0);

5- Recupere todos los registros para ver cmo Oracle los almacen.
6- Intente ingresar un registro con valor nulo para campos que no lo admiten (aparece un mensaje
de error)
7- Muestre todos los registros.
8- Actualice la pelcula en cuyo campo "duracion" hay 0 por "null" (1 registro)
9- Recupere todos los registros.

40 de 89

Apuntes SQL-Oracle (I)

12 - Operadores relacionales (is null)


Para recuperar los registros que contengan el valor "null" en algn campo, no podemos utilizar los
operadores relacionales vistos anteriormente: = (igual) y <> (distinto); debemos utilizar los
operadores "is null" (es igual a null) y "is not null" (no es null).
Con la siguiente sentencia recuperamos los libros que contienen valor nulo en el campo "editorial":
select *from libros
where editorial is null;

Recuerde que los valores nulos no se muestran, aparece el campo vaco.


Las siguientes sentencias tendrn una salida diferente:
select *from libros where editorial is null;
select *from libros where editorial='
';

Con la primera sentencia veremos los libros cuya editorial almacena el valor "null" (desconocido);
con la segunda, los libros cuya editorial guarda una cadena de 3 espacios en blanco.
Para obtener los registros que no contienen "null", se puede emplear "is not null", esto mostrar los
registros con valores conocidos.
Para ver los libros que NO tienen valor "null" en el campo "precio" tipeamos:
select *from libros where precio is not null;

Problema:
Trabajamos con la tabla "libros" de una librera.
Eliminamos la tabla y la creamos:
drop table libros;
create table libros(
codigo number(4) not null,
titulo varchar2(40) not null,
autor varchar2(20),
editorial varchar2(20),
precio number(6,2)
);

Ingresamos algunos registros:


insert into libros
values(1,'El aleph','Borges','Emece',15.90);
insert into libros
values(2,'Cervantes y el quijote','Borges','Paidos',null);
insert into libros
values(3,'Alicia en el pais de las maravillas','Lewis Carroll',null,19.90);
insert into libros
values(4,'Martin Fierro','Jose Hernandez','Emece',25.90);
insert into libros (codigo,titulo,autor,precio)
values(5,'Antologa potica','Borges',25.50);

41 de 89

Apuntes SQL-Oracle (I)


insert into libros (codigo,titulo,autor)
values(6,'Java en 10 minutos','Mario Molina');
insert into libros (codigo,titulo,autor)
values(7,'Martin Fierro','Jose Hernandez');
insert into libros (codigo,titulo,autor)
values(8,'Aprenda PHP',null);

Recuperamos los registros en los cuales est almacenado el valor "null" en el campo "editorial":
select *from libros
where editorial is null;

Seleccionamos los libros que no contiene "null" en "autor":


select *from libros
where editorial is not null;

Dijimos que una cadena de espacios NO es igual a una cadena vaca o valor "null". Vamos a
ingresar un registro y en el campo "editorial" guardaremos una cadena de 3 espacios:
insert into libros (codigo,titulo,autor,editorial,precio)
values(9,'Don quijote','Cervantes','
',20);

Veamos cmo se almacen el registro:


select *from libros;

Se muestra la cadena de espacios.


Recuperamos los registros que contengan el valor "null" en el campo "editorial" y luego aquellos
que tengan una cadena de 3 espacios:
select *from libros where editorial is null;
select *from libros where editorial='
';

Con la primera sentencia veremos los libros cuya editorial es igual a "null" (desconocido); con la
segunda, los libros cuya editorial almacena una cadena de espacios.
Primer problema:
Una farmacia guarda informacin referente a sus medicamentos en una tabla llamada
"medicamentos".
1- Elimine la tabla y crela con la siguiente estructura:
drop table medicamentos;
create table medicamentos(
codigo number(5) not null,
nombre varchar2(20) not null,
laboratorio varchar2(20),
precio number(5,2),
cantidad number(3,0) not null
);

3- Visualice la estructura de la tabla "medicamentos"


note que los campos "codigo", "nombre" y "cantidad", en la columna "Null" muestra "NOT NULL".
4- Ingrese algunos registros con valores "null" para los campos que lo admitan:
42 de 89

Apuntes SQL-Oracle (I)


insert into medicamentos (codigo,nombre,laboratorio,precio,cantidad)
values(1,'Sertal gotas',null,null,100);
insert into medicamentos (codigo,nombre,laboratorio,precio,cantidad)
values(2,'Sertal compuesto',null,8.90,150);
insert into medicamentos (codigo,nombre,laboratorio,precio,cantidad)
values(3,'Buscapina','Roche',null,200);

5- Vea todos los registros.


6- Ingrese un registro con valor "0" para el precio y cadena vaca para el laboratorio.
7- Intente ingresar un registro con cadena vaca para el nombre (mensaje de error)
8- Intente ingresar un registro con valor nulo para un campo que no lo admite (aparece un mensaje
de error)
9- Recupere los registros que contengan valor "null" en el campo "laboratorio" (3 registros)
10- Recupere los registros que contengan valor "null" en el campo "precio", luego los que tengan el
valor 0 en el mismo campo. Note que el resultado es distinto (2 y 1 registros respectivamente)
11- Recupere los registros cuyo laboratorio no contenga valor nulo (1 registro)
12- Recupere los registros cuyo precio sea distinto de 0, luego los que sean distintos de "null" (1 y 2
resgistros respectivamente)
Note que la salida de la primera sentencia no muestra los registros con valor 0 y tampoco los que
tienen valor nulo; el resultado de la segunda sentencia muestra los registros con valor para el campo
precio (incluso el valor 0).
13- Ingrese un registro con una cadena de 1 espacio para el laboratorio.
14- Recupere los registros cuyo laboratorio sea "null" y luego los que contengan 1 espacio (3 y 1
registros respectivamente)
Note que la salida de la primera sentencia no muestra los registros con valores para el campo
"laboratorio" (un caracter espacio es un valor); el resultado de la segunda sentencia muestra los
registros con el valor " " para el campo precio.
15- Recupere los registros cuyo laboratorio sea distinto de ' '(cadena de 1 espacio), luego los que
sean distintos de "null" (1 y 2 registros respectivamente)
Note que la salida de la primera sentencia no muestra los registros con valor ' ' y tampoco los que
tienen valor nulo; el resultado de la segunda sentencia muestra los registros con valor para el campo
laboratorio (incluso el valor ' ')

Segundo problema:
Trabaje con la tabla que almacena los datos sobre pelculas, llamada "peliculas".
1- Elimine la tabla:
drop table peliculas;

2- Crela con la siguiente estructura:


create table peliculas(
codigo number(4) not null,
titulo varchar2(40) not null,

43 de 89

Apuntes SQL-Oracle (I)


actor varchar2(20),
duracion number(3)
);

3- Visualice la estructura de la tabla. note que el campo "codigo" y "titulo", en la columna "Null"
muestran "NOT NULL".
4- Ingrese los siguientes registros:
insert into peliculas (codigo,titulo,actor,duracion)
values(1,'Mision imposible','Tom Cruise',120);
insert into peliculas (codigo,titulo,actor,duracion)
values(2,'Harry Potter y la piedra filosofal',null,180);
insert into peliculas (codigo,titulo,actor,duracion)
values(3,'Harry Potter y la camara secreta','Daniel R.',null);
insert into peliculas (codigo,titulo,actor,duracion)
values(0,'Mision imposible 2','',150);
insert into peliculas (codigo,titulo,actor,duracion)
values(4,'Titanic','L. Di Caprio',220);
insert into peliculas (codigo,titulo,actor,duracion)
values(5,'Mujer bonita','R. Gere-J. Roberts',0);

5- Recupere todos los registros para ver cmo Oracle los almacen.
6- Intente ingresar un registro con valor nulo para campos que no lo admiten (aparece un mensaje
de error)
7- Muestre los registros con valor nulo en el campo "actor" (2 registros)
8- Actualice los registros que tengan valor de duracin desconocido (nulo) por "120" (1 registro
actualizado)
9- Coloque 'Desconocido' en el campo "actor" en los registros que tengan valor nulo en dicho
campo (2 registros)
10- Muestre todos los registros
11- Muestre todos los registros con valor nulo en el campo "actor" (ninguno)
12- Actualice la pelcula en cuyo campo "duracion" hay 0 por "null" (1 registro)
13- Recupere todos los registros.
14- Borre todos los registros en los cuales haya un valor nulo en "duracion" (1 registro)
15- Verifique que se elimin recuperando todos los registros.

44 de 89

Apuntes SQL-Oracle (I)

13 - Clave primaria (primary key)


Una clave primaria es un campo (o varios) que identifica un solo registro (fila) en una tabla.
Para un valor del campo clave existe solamente un registro.
Veamos un ejemplo, si tenemos una tabla con datos de personas, el nmero de documento puede
establecerse como clave primaria, es un valor que no se repite; puede haber personas con igual
apellido y nombre, incluso el mismo domicilio (padre e hijo por ejemplo), pero su documento ser
siempre distinto.
Si tenemos la tabla "usuarios", el nombre de cada usuario puede establecerse como clave primaria,
es un valor que no se repite; puede haber usuarios con igual clave, pero su nombre de usuario ser
siempre diferente.
Podemos establecer que un campo sea clave primaria al momento de crear la tabla o luego que ha
sido creada. Vamos a aprender a establecerla al crear la tabla. No existe una nica manera de
hacerlo, por ahora veremos la sintaxis ms sencilla.
Tenemos nuestra tabla "usuarios" definida con 2 campos ("nombre" y "clave").
La sintaxis bsica y general es la siguiente:
create table NOMBRETABLA(
CAMPO TIPO,
...,
CAMPO TIPO,
PRIMARY KEY (CAMPO)
);

Lo que hacemos agregar, luego de la definicin de cada campo, "primary key" y entre parntesis, el
nombre del campo que ser clave primaria.
En el siguiente ejemplo definimos una clave primaria, para nuestra tabla "usuarios" para
asegurarnos que cada usuario tendr un nombre diferente y nico:
create table usuarios(
nombre varchar2(20),
clave varchar2(10),
primary key(nombre)
);

Una tabla slo puede tener una clave primaria. Cualquier campo (de cualquier tipo) puede ser clave
primaria, debe cumplir como requisito, que sus valores no se repitan ni sean nulos. Por ello, al
definir un campo como clave primaria, automticamente Oracle lo convierte a "not null".
Luego de haber establecido un campo como clave primaria, al ingresar los registros, Oracle controla
que los valores para el campo establecido como clave primaria no estn repetidos en la tabla; si
estuviesen repetidos, muestra un mensaje y la insercin no se realiza. Es decir, si en nuestra tabla
"usuarios" ya existe un usuario con nombre "juanperez" e intentamos ingresar un nuevo usuario con
nombre "juanperez", aparece un mensaje y la instruccin "insert" no se ejecuta.
Igualmente, si realizamos una actualizacin, Oracle controla que los valores para el campo
45 de 89

Apuntes SQL-Oracle (I)

establecido como clave primaria no estn repetidos en la tabla, si lo estuviese, aparece un mensaje
indicando que se viola la clave primaria y la actualizacin no se realiza.
Podemos ver el campo establecido como clave primaria de una tabla realizando la siguiente
consulta:
select uc.table_name, column_name from user_cons_columns ucc
join user_constraints uc
on ucc.constraint_name=uc.constraint_name
where uc.constraint_type='P' and
uc.table_name='USUARIOS';

No explicaremos la consulta anterior por el momento, slo la ejecutaremos; si la consulta retorna


una tabla vaca, significa que la tabla especificada no tiene clave primaria. El nombre de la tabla
DEBE ir en maysculas, sino Oracle no la encontrar.
Problema:
Trabajamos con la tabla "usuarios".
Eliminamos la tabla:
drop table usuarios;

Creamos la tabla definiendo el campo "nombre" como clave primaria:


create table usuarios(
nombre varchar2(20),
clave varchar2(10),
primary key (nombre)
);

Al campo "nombre" no lo definimos "not null", pero al establecerse como clave primaria, Oracle lo
convierte en "not null", veamos que en la columna "NULL" aparece "NOT NULL":
describe usuarios;

Ingresamos algunos registros:


insert into usuarios (nombre, clave)
values ('juanperez','Boca');
insert into usuarios (nombre, clave)
values ('raulgarcia','River');

Recordemos que cuando un campo es clave primaria, sus valores no se repiten. Intentamos ingresar
un valor de clave primaria existente:
insert into usuarios (nombre, clave)
values ('juanperez','payaso');

aparece un mensaje de error y la sentencia no se ejecuta.


Cuando un campo es clave primaria, sus valores no pueden ser nulos. Intentamos ingresar el valor
"null" en el campo clave primaria:
insert into usuarios (nombre, clave)
values (null,'payaso');

aparece un mensaje de error y la sentencia no se ejecuta.


46 de 89

Apuntes SQL-Oracle (I)

Si realizamos alguna actualizacin, Oracle controla que los valores para el campo establecido como
clave primaria no estn repetidos en la tabla. Intentemos actualizar el nombre de un usuario
colocando un nombre existente:
update usuarios set nombre='juanperez'
where nombre='raulgarcia';

aparece un mensaje indicando que se viola la clave primaria y la actualizacin no se realiza.


Corroboramos que la tabla "usuarios" tiene establecido el campo "nombre" como clave primaria
realizando la siguiente consulta (Recuerde colocar el nombre de la tabla en maysculas, sino Oracle
considerar que no existe la tabla):
select uc.table_name, column_name from user_cons_columns ucc
join user_constraints uc
on ucc.constraint_name=uc.constraint_name
where uc.constraint_type='P' and
uc.table_name='USUARIOS';

Aparece la siguiente tabla:


TABLE_NAME
COLUMN_NAME
-------------------------------------------USUARIOS
NOMBRE

indicando que la tabla "usuarios" tiene establecido el campo "nombre" como clave primaria.
Primer problema:
Trabaje con la tabla "libros" de una librera.
1- Elimine la tabla:
drop table libros;

2- Crela con los siguientes campos, estableciendo como clave primaria el campo "codigo":
create table libros(
codigo number(4) not null,
titulo varchar2(40) not null,
autor varchar2(20),
editorial varchar2(15),
primary key (codigo)
);

3- Ingrese los siguientes registros:


insert into libros (codigo,titulo,autor,editorial)
values (1,'El aleph','Borges','Emece');
insert into libros (codigo,titulo,autor,editorial)
values (2,'Martin Fierro','Jose Hernandez','Planeta');
insert into libros (codigo,titulo,autor,editorial)
values (3,'Aprenda PHP','Mario Molina','Nuevo Siglo');

4- Ingrese un registro con cdigo repetido (aparece un mensaje de error)


5- Intente ingresar el valor "null" en el campo "codigo"
6- Intente actualizar el cdigo del libro "Martin Fierro" a "1" (mensaje de error)
47 de 89

Apuntes SQL-Oracle (I)

7- Actualice el cdigo del libro "Martin Fierro" a "10"


8- Vea qu campo de la tabla "LIBROS" fue establecido como clave primaria
9- Vea qu campo de la tabla "libros" (en minsculas) fue establecido como clave primaria
La tabla aparece vaca porque Oracle no encuentra la tabla "libros", ya que almacena los nombres
de las tablas con maysculas.

Segundo problema:
Un instituto de enseanza almacena los datos de sus estudiantes en una tabla llamada "alumnos".
1- Elimine la tabla "alumnos":
drop table alumnos;

2- Cree la tabla con la siguiente estructura intentando establecer 2 campos como clave primaria, el
campo "documento" y "legajo":
create table alumnos(
legajo varchar2(4) not null,
documento varchar2(8),
nombre varchar2(30),
domicilio varchar2(30),
primary key(codigo),
primary key(documento)
);

Un mensaje indica la tabla solamente puede tener UNA clave primaria.


3- Cree la tabla estableciendo como clave primaria el campo "documento":
create table alumnos(
legajo varchar2(4) not null,
documento varchar2(8),
nombre varchar2(30),
domicilio varchar2(30),
primary key(documento)
);

4- Verifique que el campo "documento" no admite valores nulos


5- Ingrese los siguientes registros:
insert into alumnos (legajo,documento,nombre,domicilio)
values('A233','22345345','Perez Mariana','Colon 234');
insert into alumnos (legajo,documento,nombre,domicilio)
values('A567','23545345','Morales Marcos','Avellaneda 348');

6- Intente ingresar un alumno con nmero de documento existente (no lo permite)


7- Intente ingresar un alumno con documento nulo (no lo permite)
8- Vea el campo clave primaria de "ALUMNOS".

48 de 89

Apuntes SQL-Oracle (I)

49 de 89

Apuntes SQL-Oracle (I)

14 - Vaciar la tabla (truncate table)


Aprendimos que para borrar todos los registro de una tabla se usa "delete" sin condicin "where".
Tambin podemos eliminar todos los registros de una tabla con "truncate table". Sintaxis:
truncate table NOMBRETABLA;

Por ejemplo, queremos vaciar la tabla "libros", usamos:


truncate table libros;

La sentencia "truncate table" vaca la tabla (elimina todos los registros) y conserva la estructura de
la tabla.
La diferencia con "drop table" es que esta sentencia elimina la tabla, no solamente los registros,
"truncate table" la vaca de registros.
La diferencia con "delete" es la siguiente, al emplear "delete", Oracle guarda una copia de los
registros borrados y son recuperables, con "truncate table" no es posible la recuperacin porque se
libera todo el espacio en disco ocupado por la tabla; por lo tanto, "truncate table" es ms rpido que
"delete" (se nota cuando la cantidad de registros es muy grande).
Problema:
Trabajamos con la tabla "libros" que almacena los datos de los libros de una librera.
Eliminamos la tabla:
drop table libros;

Creamos la tabla:
create table libros(
codigo number(4),
titulo varchar2(30),
autor varchar2(20),
editorial varchar2(15),
precio number(5,2)
);

Agregamos algunos registros:


insert into libros (codigo,titulo,autor,editorial,precio)
values (1,'El aleph','Borges','Emece',25.60);
insert into libros (codigo,titulo,autor,editorial,precio)
values (2,'Uno','Richard Bach','Planeta',18);

Seleccionamos todos los registros:


select *from libros;

Truncamos la tabla:
truncate table libros;

50 de 89

Apuntes SQL-Oracle (I)

Si consultamos la tabla, vemos que an existe pero ya no tiene registros:


select *from libros;

Ingresamos nuevamente algunos registros:


insert into libros (codigo,titulo,autor,editorial,precio)
values (1,'El aleph','Borges','Emece',25.60);
insert into libros (codigo,titulo,autor,editorial,precio)
values (2,'Uno','Richard Bach','Planeta',18);

Eliminemos todos los registros con "delete":


delete from libros;

Si consultamos la tabla, vemos que an existe pero ya no tiene registros:


select *from libros;

Ingresamos nuevamente algunos registros:


insert into libros (codigo,titulo,autor,editorial,precio)
values (1,'El aleph','Borges','Emece',25.60);
insert into libros (codigo,titulo,autor,editorial,precio)
values (2,'Uno','Richard Bach','Planeta',18);

Eliminamos la tabla:
drop table libros;

Intentamos seleccionar todos los registros:


select *from libros;

Aparece un mensaje de error, la tabla no existe.

51 de 89

Apuntes SQL-Oracle (I)

15 - Tipos de datos alfanumricos


Ya explicamos que al crear una tabla debemos elegir la estructura adecuada, esto es, definir los
campos y sus tipos ms precisos, segn el caso.
Para almacenar valores alfanumricos (texto) usamos cadenas de caracteres.
Las cadenas se colocan entre comillas simples.
Podemos almacenar letras, smbolos y dgitos con los que no se realizan operaciones matemticas,
por ejemplo, cdigos de identificacin, nmeros de documentos, nmeros telefnicos. Tenemos los
siguientes tipos:
1) char(x): define una cadena de caracteres de longitud fija determinada por el argumento "x". Si se
omite el argumento, por defecto coloca 1. "char" viene de character, que significa caracter en ingls.
Su rango es de 1 a 2000 caracteres.
Que sea una cadena de longitud fija significa que, si definimos un campo como "char(10)" y
almacenamos el valor "hola" (4 caracteres), Oracle rellenar las 6 posiciones restantes con espacios,
es decir, ocupar las 10 posiciones; por lo tanto, si la longitud es invariable, es conveniente utilizar
el tipo char; caso contrario, el tipo varchar2.
Si almacenamos "hola" en un campo definido "char(10)" Oracle almacenar "hola ".
2) varchar2(x): almacena cadenas de caracteres de longitud variable determinada por el argumento
"x" (obligatorio). Que sea una cadena de longitud variable significa que, si definimos un campo
como "varchar2(10)" y almacenamos el valor "hola" (4 caracteres), Oracle solamente ocupa las 4
posiciones (4 bytes y no 10 como en el caso de "char"); por lo tanto, si la longitud es variable, es
conveniente utilizar este tipo de dato y no "char", as ocupamos menos espacio de almacenamiento
en disco. Su rango es de 1 a 4000 caracteres.
3) nchar(x): es similar a "char" excepto que permite almacenar caracteres ASCII, EBCDIC y
Unicode; su rango va de 1 a 1000 caracteres porque se emplean 2 bytes por cada caracter.
4) nvarchar2(x): es similar a "varchar2", excepto que permite almacenar caracteres Unicode; su
rango va de 1 a 2000 caracteres porque se emplean 2 bytes por cada caracter.
5 y 6) varchar(x) y char2(x): disponibles en Oracle8.
7) long: guarda caracteres de longitud variable; puede contener hasta 2000000000 caracteres (2 Gb).
No admite argumento para especificar su longitud. En Oracle8 y siguientes versiones conviene
emplear "clob" y "nlob" para almacenar grandes cantidades de datos alfanumricos.
En general se usarn los 2 primeros.
Si intentamos almacenar en un campo alfanumrico una cadena de caracteres de mayor longitud que
la definida, aparece un mensaje indicando que el valor es demasiado grande y la sentencia no se
ejecuta.
Por ejemplo, si definimos un campo de tipo varchar2(10) y le asignamos la cadena 'Aprenda PHP'
(11 caracteres), aparece un mensaje y la sentencia no se ejecuta.
Si ingresamos un valor numrico (omitiendo las comillas), lo convierte a cadena y lo ingresa como
52 de 89

Apuntes SQL-Oracle (I)

tal.
Por ejemplo, si en un campo definido como varchar2(5) ingresamos el valor 12345, lo toma como si
hubisemos tipeado '12345', igualmente, si ingresamos el valor 23.56, lo convierte a '23.56'. Si el
valor numrico, al ser convertido a cadena supera la longitud definida, aparece un mensaje de error
y la sentencia no se ejecuta.
Es importante elegir el tipo de dato adecuado segn el caso.
Para almacenar cadenas que varan en su longitud, es decir, no todos los registros tendrn la misma
longitud en un campo determinado, se emplea "varchar2" en lugar de "char".
Por ejemplo, en campos que guardamos nombres y apellidos, no todos los nombres y apellidos
tienen la misma longitud.
Para almacenar cadenas que no varan en su longitud, es decir, todos los registros tendrn la misma
longitud en un campo determinado, se emplea "char".
Por ejemplo, definimos un campo "codigo" que constar de 5 caracteres, todos los registros tendrn
un cdigo de 5 caracteres, ni ms ni menos.
Para almacenar valores superiores a 4000 caracteres se debe emplear "long".
Problema:
Un comercio que tiene un stand en una feria registra en una tabla llamada "visitantes" algunos datos
de las personas que visitan o compran en su stand para luego enviarle publicidad de sus productos.
Eliminamos la tabla "visitantes":
drop table visitantes;

Creamos con la siguiente estructura:


create table visitantes(
nombre varchar2(30),
edad number(2),
sexo char(1),
domicilio varchar2(30),
ciudad varchar2(20),
telefono varchar2(11)
);

Los campos "nombre", "domicilio" y "ciudad" almacenarn valores cuya longitud vara, por ello
elegimos el tipo "varchar2" y le damos a cada uno una longitud mxima estimando su tamao. El
campo "sexo" se define de tipo "char", porque necesitamos solamente 1 caracter "f" o "m", que
siempre ser fijo. El campo "telefono" tambin se define como varchar2 porque no todos los
nmeros telefnicos tienen la misma longitud.
Ingresamos un registro:
insert into visitantes (nombre,edad,sexo,domicilio,ciudad,telefono)
values ('Ana Acosta',25,'f','Avellaneda 123','Cordoba','4223344');

Intentamos ingresar una cadena de mayor longitud que la definida en el campo "sexo":
insert into visitantes (nombre,edad,sexo,domicilio,ciudad,telefono)
values ('Betina Bustos',32,'fem','Bulnes 234','Cordoba','4515151');

53 de 89

Apuntes SQL-Oracle (I)

aparece un mensaje de error y la sentencia no se ejecuta.


Ingresamos el mismo registro, esta vez con un slo caracter para el campo "sexo":
insert into visitantes (nombre,edad,sexo,domicilio,ciudad,telefono)
values ('Betina Bustos',32,'f','Bulnes 234','Cordoba','4515151');

Ingresamos un nmero telefnico olvidando las comillas, es decir, como un valor numrico:
insert into visitantes (nombre,edad,sexo,domicilio,ciudad,telefono)
values ('Carlos Caseres',43,'m','Colon 345','Cordoba',03514555666);

lo convierte a cadena, vemoslo:


select *from visitantes;

Primer problema:
Una concesionaria de autos vende autos usados y almacena los datos de los autos en una tabla
llamada "autos".
1- Elimine la tabla "autos"
2- Cree la tabla eligiendo el tipo de dato adecuado para cada campo, estableciendo el campo
"patente" como clave primaria:
create table autos(
patente char(6),
marca varchar2(20),
modelo char(4),
precio number(8,2),
primary key (patente)
);

Hemos definido el campo "patente" de tipo "char" y no "varchar2" porque la cadena de caracteres
siempre tendr la misma longitud (6 caracteres). Lo mismo sucede con el campo "modelo", en el
cual almacenaremos el ao, necesitamos 4 caracteres fijos.
3- Ingrese los siguientes registros:
insert into autos (patente,marca,modelo,precio)
values('ABC123','Fiat 128','1970',15000);
insert into autos (patente,marca,modelo,precio)
values('BCD456','Renault 11','1990',40000);
insert into autos (patente,marca,modelo,precio)
values('CDE789','Peugeot 505','1990',80000);
insert into autos (patente,marca,modelo,precio)
values('DEF012','Renault Megane','1998',95000);

4- Ingrese un registro omitiendo las comillas en el valor de "modelo"


Oracle convierte el valor a cadena.
5- Vea cmo se almacen.
6- Seleccione todos los autos modelo "1990"
7- Intente ingresar un registro con un valor de patente de 7 caracteres
8- Intente ingresar un registro con valor de patente repetida.

54 de 89

Apuntes SQL-Oracle (I)

Segundo problema:
Una empresa almacena los datos de sus clientes en una tabla llamada "clientes".
1- Elimine la tabla "clientes"
2- Crela eligiendo el tipo de dato ms adecuado para cada campo:
create table clientes(
documento char(8) not null,
apellido varchar2(20),
nombre varchar2(20),
domicilio varchar2(30),
telefono varchar2 (11)
);

3- Analice la definicin de los campos. Se utiliza char(8) para el documento porque siempre
constar de 8 caracteres. Para el nmero telefnico se usar "varchar2" y no un tipo numrico porque
si bien es un nmero, con l no se realizarn operaciones matemticas.
4- Ingrese algunos registros:
insert into clientes (documento,apellido,nombre,domicilio,telefono)
values('22333444','Perez','Juan','Sarmiento 980','4223344');
insert into clientes (documento,apellido,nombre,domicilio,telefono)
values('23444555','Perez','Ana','Colon 234',null);
insert into clientes (documento,apellido,nombre,domicilio,telefono)
values('30444555','Garcia','Luciana','Caseros 634',null);

5- Intente ingresar un registro con ms caracteres que los permitidos para el campo "telefono"
6- Intente ingresar un registro con ms caracteres que los permitidos para el campo "documento"
7- Intente ingresar un registro omitiendo las comillas en el campo "apellido"
8- Seleccione todos los clientes de apellido "Perez" (2 registros)

55 de 89

Apuntes SQL-Oracle (I)

16 - Tipos de datos numricos


Ya explicamos que al crear una tabla debemos elegir la estructura adecuada, esto es, definir los
campos y sus tipos ms precisos, segn el caso.
Los valores numricos no se ingresan entre comillas. Se utiliza el punto como separador de
decimales.
Para almacenar valores NUMERICOS Oracle dispone de dos tipos de datos:
1) number(t,d): para almacenar valores enteros o decimales, positivos o negativos. Su rango va de
1.0 x 10-130 hasta 9.999...(38 nueves). Definimos campos de este tipo cuando queremos almacenar
valores numricos con los cuales luego realizaremos operaciones matemticas, por ejemplo,
cantidades, precios, etc.
El parmetro "t" indica el nmero total de dgitos (contando los decimales) que contendr el nmero
como mximo (es la precisin). Su rango va de 1 a 38. El parmetro "d" indica el mximo de
dgitos decimales (escala). La escala puede ir de -84 a 127. Para definir nmero enteros, se puede
omitir el parmetro "d" o colocar un 0.
Un campo definido "number(5,2)" puede contener cualquier nmero entre -999.99 y 999.99.
Para especificar nmero enteros, podemos omitir el parmetro "d" o colocar el valor 0.
Si intentamos almacenar un valor mayor fuera del rango permitido al definirlo, tal valor no se carga,
aparece un mensaje indicando tal situacin y la sentencia no se ejecuta.
Por ejemplo, si definimos un campo de tipo "number(4,2)" e intentamos guardar el valor 123.45,
aparece un mensaje indicando que el valor es demasiado grande para la columna. Si ingresamos un
valor con ms decimales que los definidos, el valor se carga pero con la cantidad de decimales
permitidos, los dgitos sobrantes se omiten.
2) float (x): almacena un nmero en punto decimal. El parmetro indica la precisin binaria
mxima; con un rango de 1 a 126. Si se omite, por defecto es 126.
Para ambos tipos numricos:
- si ingresamos un valor con ms decimales que los permitidos, redondea al ms cercano; por
ejemplo, si definimos "float(4,2)" e ingresamos el valor "12.686", guardar "12.69", redondeando
hacia arriba; si ingresamos el valor "12.682", guardar "12.67", redondeando hacia abajo.
- si intentamos ingresar un valor fuera de rango, no lo acepta.
- si ingresamos una cadena, Oracle intenta convertirla a valor numrico, si dicha cadena consta
solamente de dgitos, la conversin se realiza, luego verifica si est dentro del rango, si es as, la
ingresa, sino, muestra un mensaje de error y no ejecuta la sentencia. Si la cadena contiene caracteres
que Oracle no puede convertir a valor numrico, muestra un mensaje de error y la sentencia no se
ejecuta.
Por ejemplo, definimos un campo de tipo "numberl(5,2)", si ingresamos la cadena '12.22', la
convierte al valor numrico 12.22 y la ingresa; si intentamos ingresar la cadena '1234.56', la
convierte al valor numrico 1234.56, pero como el mximo valor permitido es 999.99, muestra un
mensaje indicando que est fuera de rango. Si intentamos ingresar el valor '12y.25', Oracle no puede
realizar la conversin y muestra un mensaje de error.
56 de 89

Apuntes SQL-Oracle (I)

Problema:
Trabajamos con la tabla "libros" de una librera.
Eliminamos la tabla:
drop table libros;

Creamos la tabla con la siguiente estructura:


create table libros(
codigo number(5) not null,
titulo varchar2(40) not null,
autor varchar2(30),
editorial varchar2(15),
precio number(6,2),
cantidad number(4)
);

Note que definimos el campo "codigo" de tipo "number(5)", esto es porque estimamos que no
tendremos ms de 99999 libros, y no colocamos decimales porque necesitamos nmeros enteros.
Como en el campo "precio" no almacenaremos valores mayores a 9999.99, definimos el campo de
tipo "number(6,2)".
El tipo "float" no es adecuado para representar precios porque no es exacto.
Como los valores para el campo "cantidad" no superarn los 9999, definimos el campo de tipo
"number(4)", no colocamos decimales porque necesitamos valores enteros.
Analicemos la insercin de datos numricos.
Intentemos ingresar un valor para "cantidad" fuera del rango definido:
insert into libros (codigo,titulo,autor,editorial,precio,cantidad)
values(1,'El aleph','Borges','Emece',25.60,50000);

aparece un mensaje de error y la insercin no se ejecuta.


Ingresamos un valor para "cantidad" con decimales:
insert into libros (codigo,titulo,autor,editorial,precio,cantidad)
values(1,'El aleph','Borges','Emece',25.60,100.2);

Lo acepta, veamos qu se almacen:


select *from libros;

Trunc el valor.
Ingresamos un precio con 3 decimales:
insert into libros (codigo,titulo,autor,editorial,precio,cantidad)
values(2,'Don quijote','Cervantes','Emece',25.123,100);

Lo acepta, veamos qu se almacen:


select *from libros;

Trunc el valor.

57 de 89

Apuntes SQL-Oracle (I)

Intentamos ingresar un cdigo con comillas (una cadena):


insert into libros (codigo,titulo,autor,editorial,precio,cantidad)
values(4,'Uno','Richard Bach','Planeta','50',100);

Oracle lo convierte a nmero.


Intentamos ingresar una cadena que Oracle no pueda convertir a valor numrico en el campo
"precio":
insert into libros (codigo,titulo,autor,editorial,precio,cantidad)
values(5,'Alicia en el pais...','Lewis Carroll','Planeta','50.30',200);

Error.
Primer problema:
Un banco tiene registrados las cuentas corrientes de sus clientes en una tabla llamada "cuentas".
La tabla contiene estos datos:
Nmero de Cuenta
Documento
Nombre
Saldo
______________________________________________________________
1234
25666777
Pedro Perez
500000.60
2234
27888999
Juan Lopez
-250000
3344
27888999
Juan Lopez
4000.50
3346
32111222
Susana Molina
1000

1- Elimine la tabla "cuentas":


drop table cuentas;

2- Cree la tabla eligiendo el tipo de dato adecuado para almacenar los datos descriptos arriba:
- Nmero de cuenta: entero hasta 9999, no nulo, no puede haber valores repetidos, clave primaria;
- Documento del propietario de la cuenta: cadena de caracteres de 8 de longitud (siempre 8), no
nulo;
- Nombre del propietario de la cuenta: cadena de caracteres de 30 de longitud,
- Saldo de la cuenta: valores que no superan 999999.99
create table cuentas(
numero number(4) not null,
documento char(8),
nombre varchar2(30),
saldo number(8,2),
primary key (numero)
);

3- Ingrese los siguientes registros:


insert into cuentas(numero,documento,nombre,saldo)
values('1234','25666777','Pedro Perez',500000.60);
insert into cuentas(numero,documento,nombre,saldo)
values('2234','27888999','Juan Lopez',-250000);
insert into cuentas(numero,documento,nombre,saldo)
values('3344','27888999','Juan Lopez',4000.50);
insert into cuentas(numero,documento,nombre,saldo)
values('3346','32111222','Susana Molina',1000);

58 de 89

Apuntes SQL-Oracle (I)

Note que hay dos cuentas, con distinto nmero de cuenta, de la misma persona.
4- Seleccione todos los registros cuyo saldo sea mayor a "4000" (2 registros)
5- Muestre el nmero de cuenta y saldo de todas las cuentas cuyo propietario sea "Juan Lopez" (2
registros)
6- Muestre las cuentas con saldo negativo (1 registro)
7- Muestre todas las cuentas cuyo nmero es igual o mayor a "3000" (2 registros)

Segundo problema:
Una empresa almacena los datos de sus empleados en una tabla "empleados" que guarda los
siguientes datos: nombre, documento, sexo, domicilio, sueldobasico.
1- Elimine la tabla:
drop table empleados;

2- Cree la tabla eligiendo el tipo de dato adecuado para cada campo:


create table empleados(
nombre varchar2(30),
documento char(8),
sexo char(1),
domicilio varchar2(30),
sueldobasico numberl(7,2),--mximo estimado 99999.99
cantidadhijos number(2)--no superar los 99
);

3- Ingrese algunos registros:


insert into empleados
(nombre,documento,sexo,domicilio,sueldobasico,cantidadhijos)
values ('Juan Perez','22333444','m','Sarmiento 123',500,2);
insert into empleados
(nombre,documento,sexo,domicilio,sueldobasico,cantidadhijos)
values ('Ana Acosta','24555666','f','Colon 134',850,0);
insert into empleados
(nombre,documento,sexo,domicilio,sueldobasico,cantidadhijos)
values ('Bartolome Barrios','27888999','m','Urquiza 479',10000.80,4);

4- Ingrese un valor de "sueldobasico" con ms decimales que los definidos (redondea los decimales
al valor ms cercano 800.89)
5- Intente ingresar un sueldo que supere los 7 dgitos (no lo permite)
6- Muestre todos los empleados cuyo sueldo no supere los 900 pesos
7- Seleccione los nombres de los empleados que tengan hijos (3 registros)

59 de 89

Apuntes SQL-Oracle (I)

17 - Ingresar algunos campos


Hemos aprendido a ingresar registros listando todos los campos y colocando valores para todos y
cada uno de ellos luego de "values".
Si ingresamos valores para todos los campos, podemos omitir la lista de nombres de los campos.
Por ejemplo, si tenemos creada la tabla "libros" con los campos "titulo", "autor" y "editorial",
podemos ingresar un registro de la siguiente manera:
insert into libros values ('Uno','Richard Bach','Planeta');

Tambin es posible ingresar valores para algunos campos. Ingresamos valores solamente para los
campos "titulo" y "autor":
insert into libros (titulo, autor)
values ('El aleph','Borges');

Oracle almacenar el valor "null" en el campo "editorial", para el cual no hemos explicitado un
valor.
Al ingresar registros debemos tener en cuenta:
- la lista de campos debe coincidir en cantidad y tipo de valores con la lista de valores luego de
"values". Si se listan ms (o menos) campos que los valores ingresados, aparece un mensaje de error
y la sentencia no se ejecuta.
- si ingresamos valores para todos los campos podemos obviar la lista de campos.
- podemos omitir valores para los campos que permitan valores nulos (se guardar "null"); si
omitimos el valor para un campo "not null", la sentencia no se ejecuta.
Problema:
Trabajamos con la tabla "libros" que almacena los datos de los libros de una librera.
Eliminamos la tabla:
drop table libros;

Creamos la tabla:
create table libros(
codigo number(5) not null,
titulo varchar2(40) not null,
autor varchar2(30),
editorial varchar2(15)
);

Si ingresamos valores para todos los campos, podemos omitir la lista de campos:
insert into libros
values (1,'Uno','Richard Bach','Planeta');

Podemos ingresar valores para algunos de los campos:


60 de 89

Apuntes SQL-Oracle (I)


insert into libros (codigo, titulo, autor)
values (2,'El aleph','Borges');

Veamos cmo Oracle almacen los registros:


select *from libros;

En el campo "editorial", para el cual no ingresamos valor, se almacen "null".


No podemos omitir el valor para un campo declarado "not null", como el campo "codigo":
insert into libros (titulo, autor,editorial)
values ('Alicia en el pais de las maravillas','Lewis Carroll','Planeta');

aparece un mensaje y la insercin no se realiza.


Veamos cmo Oracle almacen los registros:
select *from libros;

Primer problema:
Un banco tiene registrados las cuentas corrientes de sus clientes en una tabla llamada "cuentas".
1- Elimine la tabla "cuentas":
drop table cuentas;

2- Cree la tabla :
create table cuentas(
numero number(10) not null,
documento char(8) not null,
nombre varchar2(30),
saldo number(9,2)
);

3- Ingrese un registro con valores para todos sus campos, omitiendo la lista de campos.
4- Ingrese un registro omitiendo algn campo que admita valores nulos.
5- Verifique que en tal campo se almacen "null"
6- Intente ingresar un registro listando 3 campos y colocando 4 valores. Un mensaje indica que hay
demasiados valores.
7- Intente ingresar un registro listando 3 campos y colocando 2 valores. Un mensaje indica que no
hay suficientes valores.
8- Intente ingresar un registro sin valor para un campo definido "not null".
9- Vea los registros ingresados.

61 de 89

Apuntes SQL-Oracle (I)

18 - Valores por defecto (default)


Hemos visto que si al insertar registros no se especifica un valor para un campo que admite valores
nulos, se ingresa automticamente "null". A este valor se le denomina valor por defecto o
predeterminado.
Un valor por defecto se inserta cuando no est presente al ingresar un registro.
Para campos de cualquier tipo no declarados "not null", es decir, que admiten valores nulos, el valor
por defecto es "null". Para campos declarados "not null", no existe valor por defecto, a menos que
se declare explcitamente con la clusula "default".
Podemos establecer valores por defecto para los campos cuando creamos la tabla. Para ello
utilizamos "default" al definir el campo. Por ejemplo, queremos que el valor por defecto del campo
"autor" de la tabla "libros" sea "Desconocido" y el valor por defecto del campo "cantidad" sea "0":
create table libros(
titulo varchar2(40) not null,
autor varchar2(30) default 'Desconocido' not null,
editorial varchar2(20),
precio number(5,2),
cantidad number(3) default 0
);

Si al ingresar un nuevo registro omitimos los valores para el campo "autor" y "cantidad", Oracle
insertar los valores por defecto; en "autor" colocar "Desconocido" y en cantidad "0".
Entonces, si al definir el campo explicitamos un valor mediante la clusula "default", se ser el
valor por defecto.
La clusula "default" debe ir antes de "not null" (si existiese), sino aparece un mensaje de error.
Para ver si los campos de la tabla "libros" tiene definidos valores por defecto y cules son, podemos
realizar la siguiente consulta:
select column_name,nullable,data_default
from user_tab_columns where TABLE_NAME = 'libros';

Muestra una fila por cada campo, en la columna "data_default" aparece el valor por defecto (si lo
tiene), en la columna "nullable" aparece "N" si el campo no est definido "not null" y "Y" si admite
valores "null".
Tambin se puede utilizar "default" para dar el valor por defecto a los campos en sentencias
"insert", por ejemplo:
insert into libros (titulo,autor,editorial,precio,cantidad)
values ('El gato con botas',default,default,default,100);

Entonces, la clusula "default" permite especificar el valor por defecto de un campo. Si no se


explicita, el valor por defecto es "null", siempre que el campo no haya sido declarado "not null".
Los campos para los cuales no se ingresan valores en un "insert" tomarn los valores por defecto:
62 de 89

Apuntes SQL-Oracle (I)

- si permite valores nulos y no tiene clusula "default", almacenar "null";


- si tiene clusula "default" (admita o no valores nulos), el valor definido como predeterminado;
- si est declarado explcitamente "not null" y no tiene valor "default", no hay valor por defecto, as
que causar un error y el "insert" no se ejecutar.
Un campo slo puede tener un valor por defecto. Una tabla puede tener todos sus campos con
valores por defecto. Que un campo tenga valor por defecto no significa que no admita valores nulos,
puede o no admitirlos.
Un campo definido como clave primaria acepta un valor "default", pero no tiene sentido ya que el
valor por defecto solamente podr ingresarse una vez; si intenta ingresarse cuando otro registro ya
lo tiene almacenado, aparecer un mensaje de error indicando que se intenta duplicar la clave.
Problema:
Trabajamos con la tabla "libros" de una librera.
Eliminamos la tabla:
drop table libros;

Creamos la tabla estableciendo valores por defecto para los campos "autor" y "cantidad":
create table libros(
titulo varchar2(40) not null,
autor varchar2(30) default 'Desconocido' not null,
editorial varchar2(20),
precio number(5,2),
cantidad number(3) default 0
);

Ingresamos un registro omitiendo los valores para el campo "autor" y "cantidad":


insert into libros (titulo,editorial,precio)
values('Java en 10 minutos','Paidos',50.40);

Oracle ingresar el registro con el ttulo, editorial y precio especificados, en "autor" colocar
"Desconocido" y en cantidad "0", vemoslo:
select *from libros;

Si ingresamos un registro sin valor para el campo "precio", que admite valores nulos, se ingresar
"null" en ese campo:
insert into libros (titulo,editorial)
values('Aprenda PHP','Siglo XXI');

Veamos cmo se almacen el registro ingresado anteriormente:


select *from libros;

Veamos si los campos de la tabla "libros" tiene definidos valores por defecto y cules son:
select column_name,nullable,data_default
from user_tab_columns where TABLE_NAME = 'LIBROS';

Muestra la siguiente tabla:


63 de 89

Apuntes SQL-Oracle (I)


COLUMN_NAME
NULLABLE
DATA_DEFAULT
--------------------------------------------TITULO
N
AUTOR
N
'Desconocido'
EDITORIAL
Y
PRECIO
Y
CANTIDAD
Y
0

Muestra una fila por cada campo, en la columna "data_default" aparece el valor por defecto (si lo
tiene), en la columna "nullable" aparece "N" si el campo no est definido "not null" y "Y" si permite
valores nulos.
Podemos emplear "default" para dar el valor por defecto a algunos campos al ingresar un registro:
insert into libros (titulo,autor,editorial,precio,cantidad)
values ('El gato con botas',default,default,default,default);

Veamos cmo se almacen el registro:


select *from libros where titulo='El gato con botas';

Todos los campos, excepto "titulo" almacenaron su valor predeterminado.


Que un campo tenga valor por defecto no significa que no admita valores nulos, puede o no
admitirlos. Podemos ingresar el valor "null" en el campo "cantidad":
insert into libros (titulo,autor,cantidad)
values ('Alicia en el pais de las maravillas','Lewis Carroll',null);

Recuperamos el registro ingresado anteriormente:


select *from libros where autor='Lewis Carroll';

En "cantidad" se almacen "null".


Primer problema:
Un comercio que tiene un stand en una feria registra en una tabla llamada "visitantes" algunos datos
de las personas que visitan o compran en su stand para luego enviarle publicidad de sus productos.
1- Elimine la tabla "visitantes"
2- Cree la tabla con la siguiente estructura:
create table visitantes(
nombre varchar2(30),
edad number(2),
sexo char(1) default 'f',
domicilio varchar2(30),
ciudad varchar2(20) default 'Cordoba',
telefono varchar(11),
mail varchar(30) default 'no tiene',
montocompra number (6,2)
);

4- Analice la informacin que retorna la siguiente consulta:


select column_name,nullable,data_default
from user_tab_columns where TABLE_NAME = 'VISITANTES';

64 de 89

Apuntes SQL-Oracle (I)

Todos los campos admiten valores nulos; hay 3 campos con valores predeterminados.
5- Ingrese algunos registros sin especificar valores para algunos campos para ver cmo opera la
clusula "default":
insert into visitantes (domicilio,ciudad,telefono,mail,montocompra)
values ('Colon 123','Cordoba','4334455','juanlopez@hotmail.com',59.80);
insert into visitantes (nombre,edad,sexo,telefono,mail,montocompra)
values ('Marcos Torres',29,'m','4112233','marcostorres@hotmail.com',60);
insert into visitantes (nombre,edad,sexo,domicilio,ciudad)
values ('Susana Molina',43,'f','Bulnes 345','Carlos Paz');

6- Recupere todos los registros.


Los campos de aquellos registros para los cuales no se ingres valor almacenaron el valor por
defecto ("null" o el especificado con "default").
7- Use la palabra "default" para ingresar valores en un "insert"
8- Recupere el registro anteriormente ingresado.

Segundo problema:
Una pequea biblioteca de barrio registra los prstamos de sus libros en una tabla llamada
"prestamos". En ella almacena la siguiente informacin: ttulo del libro, documento de identidad del
socio a quien se le presta el libro, fecha de prstamo, fecha en que tiene que devolver el libro y si el
libro ha sido o no devuelto.
1- Elimine la tabla "prestamos"
2- Cree la tabla:
create table prestamos(
titulo varchar2(40) not null,
documento char(8) not null,
fechaprestamo date not null,
fechadevolucion date,
devuelto char(1) default 'n'
);

3- Consulte "user_tab_columns" y analice la informacin.


Hay 3 campos que no admiten valores nulos y 1 solo campo con valor por defecto.
4- Ingrese algunos registros omitiendo el valor para los campos que lo admiten.
5- Seleccione todos los registros.
6- Ingrese un registro colocando "default" en los campos que lo admiten y vea cmo se almacen.
7- Intente ingresar un registro colocando "default" como valor para un campo que no admita valores
nulos y no tenga definido un valor por defecto.

65 de 89

Apuntes SQL-Oracle (I)

19 - Operadores aritmticos y de
concatenacin (columnas calculadas)
Aprendimos que los operadores son smbolos que permiten realizar distintos tipos de operaciones.
Dijimos que Oracle tiene 4 tipos de operadores: 1) relacionales o de comparacin (los vimos), 2)
aritmticos, 3) de concatenacin y 4) lgicos (lo veremos ms adelante).
Los operadores aritmticos permiten realizar clculos con valores numricos.
Son: multiplicacin (*), divisin (/), suma (+) y resta (-).
Es posible obtener salidas en las cuales una columna sea el resultado de un clculo y no un campo
de una tabla.
Si queremos ver los ttulos, precio y cantidad de cada libro escribimos la siguiente sentencia:
select titulo,precio,cantidad
from libros;

Si queremos saber el monto total en dinero de un ttulo podemos multiplicar el precio por la
cantidad por cada ttulo, pero tambin podemos hacer que Oracle realice el clculo y lo incluya en
una columna extra en la salida:
select titulo, precio,cantidad,
precio*cantidad
from libros;

Si queremos saber el precio de cada libro con un 10% de descuento podemos incluir en la sentencia
los siguientes clculos:
select titulo,precio,
precio-(precio*0.1)
from libros;

Tambin podemos actualizar los datos empleando operadores aritmticos:


update libros set precio=precio-(precio*0.1);

Para concatenar cadenas de caracteres existe el operador de concatenacin ||.


Para concatenar el ttulo y el autor de cada libro usamos el operador de concatenacin ("||"):
select titulo||'-'||autor
from libros;

Note que concatenamos adems un guin para separar los campos.


Oracle puede convertir automticamente valores numricos a cadenas para una concatenacin; por
ejemplo, en el siguiente ejemplo mostramos el ttulo y precio de cada libro concatenado con el
operador "||":
select titulo||' $'||precio

66 de 89

Apuntes SQL-Oracle (I)


from libros;

Problema:
Trabajamos con la tabla "libros" de una librera.
Eliminamos la tabla:
drop table libros;

Creamos la tabla:
create table libros(
codigo number(5),
titulo varchar2(40) not null,
autor varchar2(20) default 'Desconocido',
editorial varchar2(20),
precio number(6,2),
cantidad number(4) default 0,
primary key (codigo)
);

Ingresamos algunos registros:


insert into libros (codigo,titulo,autor,editorial,precio)
values(1,'El aleph','Borges','Emece',25);
insert into libros
values(2,'Java en 10 minutos','Mario Molina','Siglo XXI',50.40,100);
insert into libros (codigo,titulo,autor,editorial,precio,cantidad)
values(3,'Alicia en el pais de las maravillas','Lewis Carroll','Emece',15,50);

Queremos saber el monto total en dinero de cada libro:


select titulo, precio,cantidad,
precio*cantidad
from libros;

Queremos saber el precio de cada libro con un 10% de descuento:


select titulo,precio,
precio-(precio*0.1)
from libros;

Actualizamos los precios con un 10% de descuento y vemos el resultado:


update libros set precio=precio-(precio*0.1);
select *from libros;

Queremos una columna con el ttulo y autor de cada libro:


select titulo||'-'||autor
from libros;

Mostramos el ttulo y precio de cada libro concatenados:


select titulo||' $'||precio
from libros;

Primer problema:
67 de 89

Apuntes SQL-Oracle (I)

Un comercio que vende artculos de computacin registra los datos de sus artculos en una tabla con
ese nombre.
1- Elimine la tabla:
drop table articulos;

2- Cree la tabla:
create table articulos(
codigo number(4),
nombre varchar2(20),
descripcion varchar2(30),
precio number(8,2),
cantidad number(3) default 0,
primary key (codigo)
);

3- Ingrese algunos registros:


insert into articulos
values (101,'impresora','Epson Stylus C45',400.80,20);
insert into articulos
values (203,'impresora','Epson Stylus C85',500,30);
insert into articulos
values (205,'monitor','Samsung 14',800,10);
insert into articulos
values (300,'teclado','ingles Biswal',100,50);

4- El comercio quiere aumentar los precios de todos sus artculos en un 15%. Actualice todos los
precios empleando operadores aritmticos.
5- Vea el resultado.
6- Muestre todos los artculos, concatenando el nombre y la descripcin de cada uno de ellos
separados por coma.
7- Reste a la cantidad de todas las impresoras, el valor 5, empleando el operador aritmtico menos
("-")
8- Recupere todos los datos de las impresoras para verificar que la actualizacin se realiz.
9- Muestre todos los artculos concatenado los campos para que aparezcan de la siguiente manera
"Cod. 101: impresora Epson Stylus C45 $460,92 (15)"

68 de 89

Apuntes SQL-Oracle (I)

20 - Alias (encabezados de columnas)


Una manera de hacer ms comprensible el resultado de una consulta consiste en cambiar los
encabezados de las columnas. Por ejemplo, tenemos la tabla "libros" con un campo "cantidad"
(entre otros) en el cual se almacena la cantidad de libros en stock; queremos que al mostrar la
informacin de dicha tabla aparezca como encabezado del campo "cantidad" el texto "stock", para
ello colocamos un alias de la siguiente manera:
select titulo,
cantidad as stock,
precio
from libros;

Para reemplazar el nombre de un campo del encabezado por otro, se coloca la palabra clave "as"
seguido del texto del encabezado.
Si el alias consta de una sola cadena las comillas no son necesarias, pero si contiene ms de una
palabra, es necesario colocarla entre comillas dobles:
select titulo,
cantidad as "stock disponible",
precio
from libros;

Tambin se puede crear un alias para columnas calculadas. Por ejemplo:


select titulo,precio,
precio*0.1 as descuento,
precio-(precio*0.1) as "preciofinal"
from libros;

La palabra clave "as" es opcional, pero es conveniente usarla.


Entonces, un "alias" se usa como nombre de un campo o de una expresin. En estos casos, son
opcionales, sirven para hacer ms comprensible el resultado.
Problema:
Trabajamos con nuestra tabla "libros".
Eliminamos la tabla:
drop table libros;

Creamos la tabla:
create table libros(
titulo varchar2(40),
autor varchar2(30),
editorial varchar2(20),
precio number(5,2),
cantidad number(4)
);

69 de 89

Apuntes SQL-Oracle (I)

Ingresamos algunos registros:


insert into libros
values('Uno','Richard Bach','Planeta',15,100);
insert into libros
values('El aleph','Borges','Emece',24,150);
insert into libros
values('Matematica estas ahi','Paenza','Nuevo siglo',12.5,200);

Mostramos la informacin con el encabezado "stock" para el campo "cantidad":


select titulo,
cantidad as stock,
precio
from libros;

Mostramos la informacin con el encabezado "stock disponible" para el campo "cantidad",


necesitamos emplear comillas dobles:
select titulo,
cantidad as "stock disponible",
precio
from libros;

Recuperamos el ttulo, autor, precio, descuento del 10% y precio final con descuento, empleando un
alias para las 2 ltimas columnas:
select titulo,autor,precio,
precio*0.1 as descuento,
precio-(precio*0.1) as "precio final"
from libros;

La palabra clave "as" es opcional, podemos obviarla:


select titulo,precio,
precio-(precio*0.1) "precio con descuento"
from libros;

Primer problema:
Un comercio que vende artculos de computacin registra los datos de sus artculos en una tabla con
ese nombre.
1- Elimine la tabla:
drop table articulos;

2- Cree la tabla:
create table articulos(
codigo number(4),
nombre varchar2(20),
descripcion varchar2(30),
precio number(8,2),
cantidad number(3) default 0,
primary key (codigo)
);

3- Ingrese algunos registros:


70 de 89

Apuntes SQL-Oracle (I)


insert into articulos
values (101,'impresora','Epson Stylus C45',400.80,20);
insert into articulos
values (203,'impresora','Epson Stylus C85',500,30);
insert into articulos
values (205,'monitor','Samsung 14',800,10);
insert into articulos
values (300,'teclado','ingles Biswal',100,50);

4- El comercio hace un descuento del 15% en ventas mayoristas. Necesitamos recuperar el cdigo,
nombre, decripcin de todos los artculos con una columna extra que muestre el precio de cada
artculo para la venta mayorista con el siguiente encabezado "precio mayorista"
5- Muestre los precios de todos los artculos, concatenando el nombre y la descripcin con el
encabezado "artculo" (sin emplear "as" ni comillas)
6- Muestre todos los campos de los artculos y un campo extra, con el encabezado "monto total" en
la que calcule el monto total en dinero de cada artculo (precio por cantidad)
7- Muestre la descripcin de todas las impresoras junto al precio con un 20% de recargo con un
encabezado que lo especifique.

71 de 89

Apuntes SQL-Oracle (I)

21 - Funciones string
Las funciones de manejo de caracteres alfanumricos aceptan argumentos de tipo caracter y
retornan caracteres o valores numricos.
Las siguientes son algunas de las funciones que ofrece Oracle para trabajar con cadenas de
caracteres:
- chr(x): retorna un caracter equivalente al cdigo enviado como argumento "x". Ejemplo:
select chr(65) from dual;-- retorna 'A'.
select chr(100) from dual;-- retorna 'd'.

- concat(cadena1,cadena2): concatena dos cadenas de caracteres; es equivalente al operador ||.


Ejemplo:
select concat('Buenas',' tardes') from dual;--retorna 'Buenas tardes'.

- initcap(cadena): retorna la cadena enviada como argumento con la primera letra (letra capital) de
cada palabra en mayscula. Ejemplo:
select initcap('buenas tardes alumno') from dual;--retorna 'Buenas Tardes
Alumno'.

- lower(cadena): retorna la cadena enviada como argumento en minsculas. "lower" significa


reducir en ingls. Ejemplo:
select lower('Buenas tardes ALUMNO') from dual;--retorna "buenas tardes
alumno".

- upper(cadena): retorna la cadena con todos los caracteres en maysculas. Ejemplo:


select upper('www.oracle.com') from dual;-- 'WWW.ORACLE.COM'

- lpad(cadena,longitud,cadenarelleno): retorna la cantidad de caracteres especificados por el


argumento "longitud", de la cadena enviada como primer argumento (comenzando desde el primer
caracter); si "longitud" es mayor que el tamao de la cadena enviada, rellena los espacios restantes
con la cadena enviada como tercer argumento (en caso de omitir el tercer argumento rellena con
espacios); el relleno comienza desde la izquierda. Ejemplos:
select lpad('alumno',10,'xyz') from dual;-- retorna 'xyzxalumno'
select lpad('alumno',4,'xyz') from dual;-- retorna 'alum'

- rpad(cadena,longitud,cadenarelleno): retorna la cantidad de caracteres especificados por el


argumento "longitud", de la cadena enviada como primer argumento (comenzando desde el primer
caracter); si "longitud" es mayor que el tamao de la cadena enviada, rellena los espacios restantes
con la cadena enviada como tercer argumento (en caso de omitir el tercer argumento rellena con
espacios); el relleno comienza desde la derecha (ltimo caracter). Ejemplos:
select rpad('alumno',10,'xyz') from dual;-- retorna 'alumnoxyzx'
select rpad('alumno',4,'xyz') from dual;-- retorna 'alum'

72 de 89

Apuntes SQL-Oracle (I)

- ltrim(cadena1,cadena2): borra todas las ocurrencias de "cadena2" en "cadena1", si se encuentran al


comienzo; si se omite el segundo argumento, se eliminan los espacios. Ejemplo:
select ltrim('la casa de la cuadra','la') from dual;-- ' casa de la cuadra'
select ltrim(' es la casa de la cuadra','la') from dual;-- no elimina ningn
caracter
select ltrim(' la casa') from dual;-- 'la casa'

- rtrim(cadena1,cadena2): borra todas las ocurrencias de "cadena2" en "cadena1", si se encuentran


por la derecha (al final de la cadena); si se omite el segundo argumento, se borran los espacios.
Ejemplo:
select rtrim('la casa lila','la') from dual;-- 'la casa li'
select rtrim('la casa lila ','la') from dual;-- no borra ningn caracter
select rtrim('la casa lila
') from dual; --'la casa lila'

- trim(cadena): retorna la cadena con los espacios de la izquierda y derecha eliminados. "Trim"
significa recortar. Ejemplo:
select trim('

oracle

') from dual;--'oracle'

- replace(cadena,subcade1,subcade2): retorna la cadena con todas las ocurrencias de la subcadena


de reemplazo (subcade2) por la subcadena a reemplazar (subcae1). Ejemplo:
select replace('xxx.oracle.com','x','w') from dual;

retorna "www.oracle.com'.
- substr(cadena,inicio,longitud): devuelve una parte de la cadena especificada como primer
argumento, empezando desde la posicin especificada por el segundo argumento y de tantos
caracteres de longitud como indica el tercer argumento. Ejemplo:
select substr('www.oracle.com',1,10) from dual;-- 'www.oracle'
select substr('www.oracle.com',5,6) from dual;-- 'oracle'

- length(cadena): retorna la longitud de la cadena enviada como argumento. "lenght" significa


longitud en ingls. Ejemplo:
select length('www.oracle.com') from dual;-- devuelve 14.

- instr (cadena,subcadena): devuelve la posicin de comienzo (de la primera ocurrencia) de la


subcadena especificada en la cadena enviada como primer argumento. Si no la encuentra retorna 0.
Ejemplos:
select instr('Jorge Luis Borges','or') from dual;-- 2
select instr('Jorge Luis Borges','ar') from dual;-- 0, no se encuentra

- translate(): reemplaza cada ocurrencia de una serie de caracteres con otra serie de caracteres. La
diferencia con "replace" es que aquella trabaja con cadenas de caracteres y reemplaza una cadena
completa por otra, en cambio "translate" trabaja con caracteres simples y reemplaza varios. En el
siguiente ejemplo se especifica que se reemplacen todos los caracteres "O" por el caracter "0", todos
los caracteres "S" por el caracter "5" y todos los caracteres "G" por "6":
select translate('JORGE LUIS BORGES','OSG','056') from dual;--'J0R6E LUI5
B0R6E5'

73 de 89

Apuntes SQL-Oracle (I)

Se pueden emplear estas funciones enviando como argumento el nombre de un campo de tipo
carcter.
Problema:
Trabajamos con la tabla "libros" de una librera.
Eliminamos la tabla:
drop table libros;

Creamos la tabla:
create table libros(
codigo number(5),
titulo varchar2(40) not null,
autor varchar2(20) default 'Desconocido',
editorial varchar2(20),
precio number(6,2),
cantidad number(3)
);

Ingresamos algunos registros:


insert into libros
values(1,'El aleph','Borges','Emece',25,100);
insert into libros
values(2,'Java en 10 minutos','Mario Molina','Siglo XXI',50.40,100);
insert into libros
values(3,'Alicia en el pais de las maravillas','Lewis
Carroll','Emece',15.50,200);
insert into libros
values(4,'El pais de las hadas',default,'Emece',25.50,150);

Mostramos slo los 12 primeros caracteres de los ttulos de los libros y sus autores, empleando la
funcin "substr":
select substr(titulo,1,12) as titulo
from libros;

Mostramos slo los 20 primeros caracteres de los ttulos de los libros y rellenando los espacios
restantes con "*", empleando la funcin "rpad":
select rpad(titulo,20,'*') as titulo
from libros;

Mostramos los ttulos de los libros empleando la funcin "initcap":


select initcap(titulo) as titulo
from libros;

Note que cada palabra comienza con maysculas.


Mostramos los ttulos de los libros y sus autores en maysculas:
select titulo,upper(autor) as autor
from libros;

Concatenamos ttulo y autor empleando "concat":


74 de 89

Apuntes SQL-Oracle (I)


select concat(titulo, autor)
from libros;

Mostramos el ttulo y el precio de todos los libros concatenando el signo "$" a los precios:
select titulo,concat('$ ',precio) as precio
from libros;

Recuperamos el ttulo y editorial de "libros" reemplazando "Emece" por "Sudamericana":


select titulo,replace(editorial,'Emece','Sudamericana')
from libros;

Recuperamos el autor de todos los libros reemplazando las letras "abc" por "ABC" respectivamente
(empleando "translate"):
select translate(autor,'abc','ABC') from libros;

Note que cada caracter individual es reemplazado por el especificado.


Mostramos la posicin de la primera ocurrencia de la cadena "pais" en los ttulos de los libros:
select instr(titulo,'pais') from libros;

Note que los ttulos que no contienen la subcadena "pais" muestran el valor cero.

75 de 89

Apuntes SQL-Oracle (I)

22 - Funciones matemticas.
Las funciones matemticas realizan operaciones con expresiones numricas y retornan un resultado,
operan con tipos de datos numricos.
Las funciones numricas aceptan parmetros de entrada de tipo numrico y retornan valores
numricos.
Oracle tiene algunas funciones para trabajar con nmeros. Aqu presentamos algunas.
- abs(x): retorna el valor absoluto del argumento "x". Ejemplo:
select abs(-20) from dual;--retorna 20.

La tabla dual es una tabla virtual que existe en todas las Bases de datos Oracle.
- ceil(x): redondea a entero, hacia arriba, el argumento "x". Ejemplo:
select ceil(12.34) from dual;--retorna 13.

- floor(x): redondea a entero, hacia abajo, el argumento "x". Ejemplo:


select floor(12.34) from dual; --12

- mod(x,y): devuelve el resto de la divisin x/y. Ejemplos:


select mod(10,3) from dual;--retorna 1.
select mod(10,2) from dual;--retorna 0.

- power(x,y): retorna el valor de "x" elevado a la "y" potencia. Ejemplo:


select power(2,3) from dual;--retorna 8.

- round(n,d): retorna "n" redondeado a "d" decimales; si se omite el segundo argumento, redondea
todos los decimales. Si el segundo argumento es positivo, el nmero de decimales es redondeado
segn "d"; si es negativo, el nmero es redondeado desde la parte entera segn el valor de "d".
Ejemplos:
select round(123.456,2) from dual;-- retorna "123.46", es decir, redondea desde
el segundo decimal.
select round(123.456,1) from dual;-- 123.5, es decir, redondea desde el primer
decimal.
select round(123.456,-1) from dual;-- 120, redondea desde el primer valor
entero (hacia la izquierda).
select round(123.456,-2) from dual;-- 100, redondea desde el segundo valor
entero (hacia la izquierda).
select round(123.456) from dual;-- 123.

- sign(x): si el argumento es un valor positivo, retorna 1, si es negativo, devuelve -1 y 0 si es 0.


Ejemplo:
select sign(-120) from dual;--retorna -1
select sign(120) from dual;--retorna 1

76 de 89

Apuntes SQL-Oracle (I)

- trunc(n,d): trunca un nmero a la cantidad de decimales especificada por el segundo argumento. Si


se omite el segundo argumento, se truncan todos los decimales. Si "d" es negativo, el nmero es
truncado desde la parte entera. Ejemplo:
select
select
select
select

trunc(1234.5678,2) from dual;--retorna 1234.56


trunc(1234.5678,-2) from dual;--retorna 1200
trunc(1234.5678,-1) from dual;--retorna 1230
trunc(1234.5678) from dual;--retorna 1234

- sqrt(x): devuelve la raiz cuadrada del valor enviado como argumento. Ejemplo:
select sqrt(9) from dual;--retorna 3

Oracle dispone de funciones trigonomtricas que retornan radianes, calculan seno, coseno, inversas,
etc.: acos, asin, atan, atan2, cos, cosh, exp, ln, log, sin, sinh, tan, tanh. No las veremos en detalle.
Se pueden emplear las funciones matemticas enviando como argumento el nombre de un campo de
tipo numrico.
Problema:
Una empresa almacena los datos de sus empleados en una tabla denominada "empleados".
Eliminamos la tabla:
drop table empleados;

Creamos la tabla:
create table empleados(
legajo number(5),
documento char(8) not null,
nombre varchar2(30) not null,
domicilio varchar2(30),
sueldo number(6,2),
hijos number(2),
primary key (legajo)
);

Ingresamos algunos registros:


insert into empleados
values(1,'22333444','Ana Acosta','Avellaneda 213',870.79,2);
insert into empleados
values(20,'27888999','Betina Bustos','Bulnes 345',950.85,1);
insert into empleados
values(31,'30111222','Carlos Caseres','Caseros 985',1190,0);
insert into empleados
values(39,'33444555','Daniel Duarte','Dominicana 345',1250.56,3);

Vamos a mostrar los sueldos de los empleados redondeando el valor hacia abajo y luego hacia arriba
(empleamos "floor" y "ceil"):
select floor(sueldo) as "sueldo hacia abajo",
ceil(sueldo) as "sueldo hacia arriba"
from empleados;

Mostramos los nombre de cada empleado, su respectivo sueldo, y el sueldo redondeando el valor a
entero ("round") y truncado a entero ("trunc"):
77 de 89

Apuntes SQL-Oracle (I)


select nombre, sueldo, round(sueldo) as "sueldo redondeado",
trunc(sueldo) as "sueldo truncado"
from empleados;

Note que los valores devueltos segn la funcin empleada, son diferentes.
Mostramos el resultado de "2 elevado a la potencia 5" ("power"):
select power(2,5) from dual;

Retorna el valor 32.


Mostramos el resto de la divisin "1234 / 5" ("mod"):
select mod(1234,5) from dual;

Devuelve el valor 4.
Calculamos la raz cuadrada de 81:
select sqrt(81) from dual;

Retorna 9.

78 de 89

Apuntes SQL-Oracle (I)

23 - Funciones de fechas y horas


Oracle dispone de varias funciones que operan con tipos de datos "date". Estas son algunas:
- add_months(f,n): agrega a una fecha, un nmero de meses. Si el segundo argumento es positivo,
se le suma a la fecha enviada tal cantidad de meses; si es negativo, se le resta a la fecha enviada tal
cantidad de meses. Ejemplo:
select add_months('10/06/2007',5) from dual; --retorna "10/11/07"
select add_months('10/06/2007',-5) from dual; --retorna "10/01/07"
select add_months('30/01/2007',1) from dual;-- retorna "25/02/07" ya que es el
ltimo da de ese mes.

- last_day(f): retorna el ultimo da de mes de la fecha enviada como argumento. Ejemplo:


select last_day('10/02/2007') from dual;-- "28/02/07"
select last_day('10/08/2007') from dual;-- "31/08/07"

- months_between(f1,f2): retorna el numero de meses entre las fechas enviadas como argumento.
Ejemplo:
select months_between('19/05/2003','21/06/05') from dual;-- retorna

- next_day(fecha,dia): retorna una fecha correspondiente al primer da especificado en "dia" luego


de la fecha especificada. En el siguiente ejemplo se busca el lunes siguiente a la fecha especificada:
select next_day('10/08/2007','LUNES') from dual;

- current_date: retorna la fecha actual. Ejemplo:


select current_date from dual;

- current_timestamp: retorna la fecha actual


select current_timestamp from dual;

Retorna: 10/08/07 09:59:44,109000000 AMERICA/BUENOS_AIRES


- sysdate: retorna la fecha y hora actuales en el servidor de Oracle.
-systimestamp: retorna fecha y hora actuales.
select systimestamp from dual;

Retorna 10/08/07 10:33:48,984000000 -03:00


- to_date: convierte una cadena a tipo de dato "date". Ejemplo:
select to_date ('05-SEP-2007 10:00 AM','DD-MON-YYYY HH:MI AM') from dual;

Retorna 05/09/07
- to_char: convierte una fecha a cadena de caracteres. Ejemplo:
79 de 89

Apuntes SQL-Oracle (I)


select to_char('10/10/2007')from dual;

- extract(parte,fecha): retorna la parte (especificada por el primer argumento) de una fecha. Puede
extraer el ao (year), mes (month), da (day), hora (hour), minuto (minute), segundo (second), etc.
Ejemplo:
select extract(month from sysdate) from dual;

retorna el nmero mes de la fecha actual.


En Oracle: Los operadores aritmticos "+" (ms) y "-" (menos) pueden emplearse con fechas. Por
ejemplos:
select sysdate-3:

Retorna 3 das antes de la fecha actual.


select to_date('15/12/2007')-5 from dual;

Retorna 10/12/07
Se pueden emplear estas funciones enviando como argumento el nombre de un campo de tipo date.
Problema:
Trabajamos con la tabla "libros" de una librera.
Eliminamos la tabla:
drop table libros;

Creamos la tabla:
create table libros(
titulo varchar2(40) not null,
autor varchar2(20) default 'Desconocido',
editorial varchar2(20),
edicion date,
precio number(6,2)
);

Ingresamos algunos registros:


insert into libros values('El aleph','Borges','Emece','10/10/1980',25.33);
insert into libros values('Java en 10 minutos','Mario Molina','Siglo
XXI','05/05/2000',50.65);
insert into libros
values('Alicia en el pais de las maravillas','Lewis
Carroll','Emece','08/09/2000',19.95);
insert into libros values('Aprenda PHP','Mario Molina','Siglo
XXI','02/04/2000',45);

Mostramos el ttulo del libro y el ao de edicin:


select titulo, extract (year from edicion) from libros;

Mostramos el ttulo del libro y el mes de edicin:


select titulo, extract (month from edicion) from libros;

80 de 89

Apuntes SQL-Oracle (I)

Mostramos el ttulo del libro y los aos que tienen de editados:


select titulo, extract(year from sysdate)-extract(year from edicion) as "aos
de editado"
from libros;

Mostramos los ttulos de los libros que se editaron en el ao 2000:


select titulo from libros
where extract(year from edicion)=2000;

Calcule 3 meses luego de la fecha actual empleando ""add_months":


select add_months(sysdate,3) from dual;

Muestre la fecha del primer martes desde la fecha actual:


select next_day(sysdate,'martes') from dual;

Muestre la fecha que ser 15 das despus de "24/08/2007" empleando el operador "+":
select to_date('24/08/2007')+15 from dual;

Retorna 08/09/07.
Muestre la fecha que 20 das antes del "12/08/2007" empleando el operador "-":
select to_date('12/08/2007')-20 from dual;

Retorna 23/07/07.

81 de 89

Apuntes SQL-Oracle (I)

24 - Ordenar registros (order by)


Podemos ordenar el resultado de un "select" para que los registros se muestren ordenados por algn
campo, para ello usamos la clusula "order by".
La sintaxis bsica es la siguiente:
select *from NOMBRETABLA
order by CAMPO;

Por ejemplo, recuperamos los registros de la tabla "libros" ordenados por el ttulo:
select *from libros
order by titulo;

Aparecen los registros ordenados alfabticamente por el campo especificado.


Tambin podemos colocar el nmero de orden del campo por el que queremos que se ordene en
lugar de su nombre, es decir, referenciar a los campos por su posicin en la lista de seleccin. Por
ejemplo, queremos el resultado del "select" ordenado por "precio":
select titulo,autor,precio
from libros order by 3;

Si colocamos un nmero mayor a la cantidad de campos de la lista de seleccin, aparece un mensaje


de error y la sentencia no se ejecuta.
Por defecto, si no aclaramos en la sentencia, los ordena de manera ascendente (de menor a mayor).
Podemos ordenarlos de mayor a menor, para ello agregamos la palabra clave "desc":
select *libros
order by editorial desc;

Tambin podemos ordenar por varios campos, por ejemplo, por "titulo" y "editorial":
select *from libros
order by titulo,editorial;

Incluso, podemos ordenar en distintos sentidos, por ejemplo, por "titulo" en sentido ascendente y
"editorial" en sentido descendente:
select *from libros
order by titulo asc, editorial desc;

Debe aclararse al lado de cada campo, pues estas palabras claves afectan al campo inmediatamente
anterior.
Es posible ordenar por un campo que no se lista en la seleccin incluso por columnas calculados.
Se puede emplear "order by" con campos de tipo caracter, numrico y date.
Problema:
Trabajamos con la tabla "libros" de una librera.
82 de 89

Apuntes SQL-Oracle (I)

Eliminamos la tabla y la creamos con la siguiente estructura:


drop table libros;
create table libros(
titulo varchar2(40) not null,
autor varchar2(20) default 'Desconocido',
editorial varchar2(20),
edicion date,
precio number(6,2)
);

Ingresamos algunos registros:


insert into libros values('El aleph','Borges','Emece','10/10/1980',25.33);
insert into libros values('Java en 10 minutos','Mario Molina','Siglo
XXI','05/12/2005',50.65);
insert into libros values('Alicia en el pais de las maravillas','Lewis
Carroll','Emece','29/11/2000',19.95);
insert into libros values('Alicia en el pais de las maravillas','Lewis
Carroll','Planeta','27/11/2004',15);

Recuperamos los registros ordenados por el ttulo:


select *from libros
order by titulo;

Ordenamos los registros por el campo "precio", referenciando el campo por su posicin en la lista
de seleccin:
select titulo,autor,precio
from libros order by 3;

Los ordenamos por "editorial", de mayor a menor empleando "desc":


select *from libros
order by editorial desc;

Ordenamos por dos campos:


select *from libros
order by titulo,editorial;

Ordenamos en distintos sentidos:


select *from libros
order by titulo asc, editorial desc;

Podemos ordenar por un campo que no se lista en la seleccin:


select titulo, autor
from libros
order by precio;

Est permitido ordenar por valores calculados, lo hacemos:


select titulo, editorial,
precio+(precio*0.1) as "precio con descuento"
from libros

83 de 89

Apuntes SQL-Oracle (I)


order by 3;

Ordenamos los libros por la fecha de edicin:


select titulo, editorial, edicion
from libros
order by edicion;

Mostramos el ttulo y ao de edicin de todos los libros, ordenados por ao de edicin:


select titulo, extract (year from edicion) as edicion
from libros
order by 2;

Primer problema:
En una pgina web se guardan los siguientes datos de las visitas: nombre, mail, pais y fecha.
1- Elimine la tabla "visitas" y crela con la siguiente estructura:
drop table visitas;
create table visitas (
nombre varchar2(30) default 'Anonimo',
mail varchar2(50),
pais varchar2(20),
fecha date
);

3- Ingrese algunos registros:


insert into visitas values ('Ana Maria
Lopez','AnaMaria@hotmail.com','Argentina','10/10/2006 10:10');
insert into visitas values ('Gustavo
Gonzalez','GustavoGGonzalez@hotmail.com','Chile','10/10/2006 21:30');
insert into visitas values
('Juancito','JuanJosePerez@hotmail.com','Argentina','11/10/2006 15:45');
insert into visitas values ('Fabiola
Martinez','MartinezFabiola@hotmail.com','Mexico','12/10/2006 08:15');
insert into visitas values ('Fabiola
Martinez','MartinezFabiola@hotmail.com','Mexico','12/09/2006 20:45');
insert into visitas values
('Juancito','JuanJosePerez@hotmail.com','Argentina','12/09/2006 16:20');
insert into visitas values
('Juancito','JuanJosePerez@hotmail.com','Argentina','15/09/2006 16:25');

4- Ordene los registros por fecha, en orden descendente.


5- Muestre el nombre del usuario, pais y el mes, ordenado por pais (ascendente) y el mes
(descendente)
6- Muestre los mail, pas, ordenado por pas, de todos los que visitaron la pgina en octubre (4
registros)

84 de 89

Apuntes SQL-Oracle (I)

25 - Operadores lgicos (and - or - not)


Hasta el momento, hemos aprendido a establecer una condicin con "where" utilizando operadores
relacionales. Podemos establecer ms de una condicin con la clusula "where", para ello
aprenderemos los operadores lgicos.
Son los siguientes:
-

and, significa "y",


or, significa "y/o",
not, significa "no", invierte el resultado
(), parntesis

Los operadores lgicos se usan para combinar condiciones.


Si queremos recuperar todos los libros cuyo autor sea igual a "Borges" y cuyo precio no supere los
20 pesos, necesitamos 2 condiciones:
select *from libros
where (autor='Borges') and
(precio<=20);

Los registros recuperados en una sentencia que une dos condiciones con el operador "and", cumplen
con las 2 condiciones.
Queremos ver los libros cuyo autor sea "Borges" y/o cuya editorial sea "Planeta":
select *from libros
where autor='Borges' or
editorial='Planeta';

En la sentencia anterior usamos el operador "or"; indicamos que recupere los libros en los cuales el
valor del campo "autor" sea "Borges" y/o el valor del campo "editorial" sea "Planeta", es decir,
seleccionar los registros que cumplan con la primera condicin, con la segunda condicin y con
ambas condiciones.
Los registros recuperados con una sentencia que une dos condiciones con el operador "or", cumplen
una de las condiciones o ambas.
Queremos recuperar los libros que NO cumplan la condicin dada, por ejemplo, aquellos cuya
editorial NO sea "Planeta":
select *from libros
where not editorial='Planeta';

El operador "not" invierte el resultado de la condicin a la cual antecede.


Los registros recuperados en una sentencia en la cual aparece el operador "not", no cumplen con la
condicin a la cual afecta el "NOT".
Los parntesis se usan para encerrar condiciones, para que se evalen como una sola expresin.
Cuando explicitamos varias condiciones con diferentes operadores lgicos (combinamos "and",
85 de 89

Apuntes SQL-Oracle (I)

"or") permite establecer el orden de prioridad de la evaluacin; adems permite diferenciar las
expresiones ms claramente.
Por ejemplo, las siguientes expresiones devuelven un resultado diferente:
select *from libros
where (autor='Borges') or
(editorial='Paidos' and precio<20);
select *from libros
where (autor='Borges' or editorial='Paidos') and
(precio<20);

Si bien los parntesis no son obligatorios en todos los casos, se recomienda utilizarlos para evitar
confusiones.
El orden de prioridad de los operadores lgicos es el siguiente: "not" se aplica antes que "and" y
"and" antes que "or", si no se especifica un orden de evaluacin mediante el uso de parntesis. El
orden en el que se evalan los operadores con igual nivel de precedencia es indefinido, por ello se
recomienda usar los parntesis.
Entonces, para establecer ms de una condicin en un "where" es necesario emplear operadores
lgicos. "and" significa "y", indica que se cumplan ambas condiciones; "or" significa "y/o", indica
que se cumpla una u otra condicin (o ambas); "not" significa "no.", indica que no se cumpla la
condicin especificada.
Problema:
Trabajamos con la tabla "libros" de una librera.
Eliminamos la tabla y la creamos:
drop table libros;
create table libros(
codigo number(5),
titulo varchar2(40) not null,
autor varchar2(20) default 'Desconocido',
editorial varchar2(20),
precio number(6,2)
);

Ingresamos algunos registros:


insert into libros
values(1,'El aleph','Borges','Emece',15.90);
insert into libros
values(2,'Antologa potica','Borges','Planeta',39.50);
insert into libros
values(3,'Java en 10 minutos','Mario Molina','Planeta',50.50);
insert into libros
values(4,'Alicia en el pais de las maravillas','Lewis Carroll','Emece',19.90);
insert into libros
values(5,'Martin Fierro','Jose Hernandez','Emece',25.90);
insert into libros
values(6,'Martin Fierro','Jose Hernandez','Paidos',16.80);
insert into libros
values(7,'Aprenda PHP','Mario Molina','Emece',19.50);
insert into libros

86 de 89

Apuntes SQL-Oracle (I)


values(8,'Cervantes y el quijote','Borges','Paidos',18.40);

Recuperamos los libros cuyo autor sea igual a "Borges" y cuyo precio no supere los 20 pesos:
select *from libros
where (autor='Borges') and
(precio<=20);

Aparecen 2 libros, los nicos que cumplen con ambas condiciones.


Seleccionamos los libros cuyo autor es "Borges" y/o cuya editorial es "Planeta":
select *from libros
where autor='Borges' or
editorial='Planeta';

Note que aparecen todos los libros de "Borges" y todos los libros de "Planeta", algunos cumplen
ambas condiciones.
Recuperamos los libros cuya editorial NO es "Planeta":
select *from libros
where not editorial='Planeta';

Veamos un ejemplo de cmo el empleo de parntesis permite a Oracle evaluar en forma diferente
ciertas consultas aparentemente iguales:
select *from libros
where (autor='Borges') or
(editorial='Paidos' and precio<20);
select *from libros
where (autor='Borges' or editorial='Paidos') and
(precio<20);

Note que el primer resultado retorna todos los libros de "Borges" (primera condicin) y todos los
libros de "Paidos" con precio inferior a 20 (segunda condicin) (registros 1,2,6 y 8); la segunda
recupera todos los libros de "Borges" o de "Paidos" (primera condicin) cuyo precio sea inferior a
20 (segunda condicin) (registros 1,6 y 8).
Primer problema:
Trabaje con la tabla llamada "medicamentos" de una farmacia.
1- Elimine la tabla y crela con la siguiente estructura:
drop table medicamentos;
create table medicamentos(
codigo number(5),
nombre varchar2(20),
laboratorio varchar2(20),
precio number(5,2),
cantidad number(3),
primary key(codigo)
);

3- Ingrese algunos registros:


insert into medicamentos values(100,'Sertal','Roche',5.2,100);

87 de 89

Apuntes SQL-Oracle (I)


insert
insert
insert
insert
insert

into
into
into
into
into

medicamentos
medicamentos
medicamentos
medicamentos
medicamentos

values(102,'Buscapina','Roche',4.10,200);
values(205,'Amoxidal 500','Bayer',15.60,100);
values(230,'Paracetamol 500','Bago',1.90,200);
values(345,'Bayaspirina','Bayer',2.10,150);
values(347,'Amoxidal jarabe','Bayer',5.10,250);

4- Recupere los cdigos y nombres de los medicamentos cuyo laboratorio sea "Roche' y cuyo precio
sea menor a 5 (1 registro cumple con ambas condiciones)
5- Recupere los medicamentos cuyo laboratorio sea "Roche" o cuyo precio sea menor a 5 (4
registros)
6- Muestre todos los medicamentos cuyo laboratorio NO sea "Bayer" y cuya cantidad sea=100.
Luego muestre todos los medicamentos cuyo laboratorio sea "Bayer" y cuya cantidad NO sea=100
7- Recupere los nombres de los medicamentos cuyo precio est entre 2 y 5 inclusive (2 registros)
8- Elimine todos los registros cuyo laboratorio sea igual a "Bayer" y su precio sea mayor a 10 (1
registro eliminado)
9- Cambie la cantidad por 200, de todos los medicamentos de "Roche" cuyo precio sea mayor a 5 (1
registro afectado)
10- Muestre todos los registros para verificar el cambio.
11- Borre los medicamentos cuyo laboratorio sea "Bayer" o cuyo precio sea menor a 3 (3 registros
borrados)

Segundo problema:
Trabajamos con la tabla "peliculas" de un video club que alquila pelculas en video.
1- Elimine la tabla y crela con la siguiente estructura:
drop table peliculas;
create table peliculas(
codigo number(4),
titulo varchar2(40) not null,
actor varchar2(20),
duracion number(3),
primary key (codigo)
);

3- Ingrese algunos registros:


insert into peliculas
values(1020,'Mision imposible','Tom Cruise',120);
insert into peliculas
values(1021,'Harry Potter y la piedra filosofal','Daniel R.',180);
insert into peliculas
values(1022,'Harry Potter y la camara secreta','Daniel R.',190);
insert into peliculas
values(1200,'Mision imposible 2','Tom Cruise',120);
insert into peliculas
values(1234,'Mujer bonita','Richard Gere',120);
insert into peliculas
values(900,'Tootsie','D. Hoffman',90);

88 de 89

Apuntes SQL-Oracle (I)


insert into peliculas
values(1300,'Un oso rojo','Julio Chavez',100);
insert into peliculas
values(1301,'Elsa y Fred','China Zorrilla',110);

4- Recupere los registros cuyo actor sea "Tom Cruise" o "Richard Gere" (3 registros)
5- Recupere los registros cuyo actor sea "Tom Cruise" y duracin menor a 100 (ninguno cumple
ambas condiciones)
6- Recupere los nombres de las pelculas cuya duracin se encuentre entre 100 y 120 minutos(5
registros)
7- Cambie la duracin a 200, de las pelculas cuyo actor sea "Daniel R." y cuya duracin sea 180 (1
registro afectado)
8- Recupere todos los registros para verificar la actualizacin anterior
9- Borre todas las pelculas donde el actor NO sea "Tom Cruise" y cuya duracin sea mayor o igual
a 100 (2 registros eliminados)

89 de 89

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