0% encontró este documento útil (0 votos)
62 vistas22 páginas

Apex 2

Este documento muestra ejemplos de cómo crear, modificar e indexar tablas y campos en una base de datos. Se crea una tabla "alumnos" con diferentes campos y se le agregan índices únicos y no únicos a diferentes campos. También se establecen restricciones primarias y únicas. Luego se muestran ejemplos de cómo eliminar índices y restricciones de la tabla.

Cargado por

Daniel Cortes
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como TXT, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
62 vistas22 páginas

Apex 2

Este documento muestra ejemplos de cómo crear, modificar e indexar tablas y campos en una base de datos. Se crea una tabla "alumnos" con diferentes campos y se le agregan índices únicos y no únicos a diferentes campos. También se establecen restricciones primarias y únicas. Luego se muestran ejemplos de cómo eliminar índices y restricciones de la tabla.

Cargado por

Daniel Cortes
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como TXT, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 22

-- 5 -- Indices (Crear - Información)

-- Primer problema

-- 1 -- Elimine la tabla y créela con la siguiente estructura:


drop table alumnos;
create table alumnos(
legajo char(5) not null,
documento char(8) not null,
nombre varchar2(30),
curso char(1),
materia varchar2(30),
notafinal number(4,2)
);

-- 2 -- Ingresamos algunos registros:

insert into alumnos values ('A123','22222222','Perez Patricia','5','Matematica',9);


insert into alumnos values ('A234','23333333','Lopez Ana','5','Matematica',9);
insert into alumnos values ('A345','24444444','Garcia
Carlos','6','Matematica',8.5);
insert into alumnos values ('A348','25555555','Perez Patricia','6','Lengua',7.85);
insert into alumnos values ('A457','26666666','Perez Fabian','6','Lengua',3.2);

-- 3 -- Intente crear un índice agrupado único para el campo "apellido".


-- No lo permite porque hay valores duplicados.

create unique INDEX I_alumnos_nombre


on alumnos(nombre);

-- 4 -- Cree un índice no único, para el campo "nombre".

create index I_alumnos_nombre


on alumnos(nombre);

-- 5 -- Cree un índice único, para el campo "lejago".

create unique index I_alumnos_legajo


on alumnos(legajo);

-- 6 -- Establezca una restricción "primary key" sobre el campo "legajo".

alter table alumnos


add constraint PK_alumnos_legajo
primary key (legajo);

-- 7 -- Verifique que Oracle no creó un índice al agregar la restricción, utilizó


el índice "I_alumnos_legajo" existente.

select index_name, index_type, uniqueness


from user_indexes
where table_name='alumnos';

-- 8 -- Agregue una restricción única sobre el campo "documento".

alter table alumnos


add constraint UQ_alumnos_documento
unique (documento);
-- 9 -- Verifique que Oracle creó un índice al agregar la restricción y le dio el
nombre de la restricción.

select constraint_name, constraint_type, index_name


from user_constraints
where table_name='EMPLEADOS';

-- 10 -- Intente crear un índice único para la tabla "alumnos" sobre el campo


"notafinal"

create unique index I_alumnos_notafinal


on alumnos(notafinal);

-- 11 -- Indexe la tabla "alumnos" por el campo "notafinal" (índice no único)

create index I_alumnos_notafinal


on alumnos(notafinal);

-- 12 -- Indexe la tabla "alumnos" por los campos "curso" y "materia" (índice no


único)

create index I_alumnos_curso


on alumnos(curso, materia);

-- 13 -- Intente crear un índice único sobre "materia" (error pues hay datos
duplicados)

create index I_alumnos_curso


on alumnos(materia);

-- 14 -- Vea los indices de "alumnos"

select index_name, index_type


from user_indexes
where table_name='alumnos';

-- 46 -- Indices (eliminar)

-- 1 -- Elimine la tabla y créela con la siguiente estructura:

drop table alumnos;


create table alumnos(
legajo char(5) not null,
documento char(8) not null,
nombre varchar2(30),
curso char(1) not null,
materia varchar2(20) not null,
notafinal number(4,2)
);

-- 2 -- Cree un índice no único para el campo "nombre".

create index I_alumnos_nombre


on alumnos(nombre);

-- 3 -- Establezca una restricción "primary key" para el campo "legajo"


alter table alumnos
add constraint PK_alumnos_legajo
primary key (legajo);

-- 4 -- Verifique que se creó un índice con el nombre de la restricción.

select constraint_name, constraint_type, index_name


from user_constraints
where table_name='alumnos';

-- 5 -- Verifique que se creó un índice único con el nombre de la restricción


consultando el diccionario de índices.

select index_name, index_type


from user_indexes
where table_name='alumnos';

-- 6 -- Intente eliminar el índice "PK_alumnos_legajo" con "drop index".

drop index PK_alumnos_legajo;

-- 7 -- Cree un índice único para el campo "documento".

create index I_alumnos_documento


on alumnos(documento);

-- 8 -- Agregue a la tabla una restricción única sobre el campo "documento" y


verifique que no se creó un índice, Oracle emplea el índice creado en el punto
anterior.

select constraint_name, constraint_type, index_name


from user_constraints
where table_name='ALUMNOS';

-- 9 -- Intente eliminar el índice "I_alumnos_documento" (no se puede porque una


restricción lo está utilizando)

drop index I_alumnos_documento;

-- 10 -- Elimine la restricción única establecida sobre "documento".

alter table alumnos


drop constraint UQ_ALUMNOS_DOCUMENTO;

-- 11 -- Verifique que el índice "I_alumnos_documento" aún existe.

select index_name,uniqueness
from user_indexes
where table_name='ALUMNOS';

-- 12 -- Elimine el índice "I_alumnos_documento", ahora puede hacerlo porque no hay


restricción que lo utilice.

drop index I_alumnos_documento;


-- 13 --Elimine el índice "I_alumnos_nombre".

drop index I_alumnos_nombre;

-- 14 -- Elimine la restricción "primary key"/

alter table alumnos


drop constraint PK_ALUMNOS_LEGAJO;

-- 15 -- Verifique que el índice "PK_alumnos_legajo" fue eliminado (porque fue


creado por Oracle al establecerse la restricción)

select index_name,uniqueness
from user_indexes
where table_name='ALUMNOS';

-- 16 -- Cree un índice compuesto por los campos "curso" y "materia", no único.

create index I_alumnos_cursomateria


on alumnos(curso,materia);

-- 17 -- Verifique su existencia.

select index_name,uniqueness
from user_indexes
where table_name='ALUMNOS';

-- 18 -- Elimine la tabla "alumnos" y verifique que todos los índices han sido
eliminados junto con ella.

drop table alumnos;

select index_name,uniqueness
from user_indexes
where table_name='ALUMNOS';

--
48 -- Combinación interna (join)

-- 1 -- Elimine las tablas "clientes" y "provincias":

drop table clientes;


drop table provincias;

-- 2 -- Créelas con las siguientes estructuras:

create table clientes(


codigo number(5),
nombre varchar2(30),
domicilio varchar2(30),
ciudad varchar2(20),
codigoprovincia number(2)
);

create table provincias(


codigo number(2),
nombre varchar2(20)
);

-- 3 -- Ingrese algunos registros para ambas tablas:

insert into provincias values(1,'Cordoba');


insert into provincias values(2,'Santa Fe');
insert into provincias values(3,'Corrientes');
insert into provincias values(null,'La Pampa');
insert into clientes values (1,'Lopez Marcos','Colon 111','Córdoba',1);
insert into clientes values (2,'Perez Ana','San Martin 222','Cruz del Eje',1);
insert into clientes values (3,'Garcia Juan','Rivadavia 333','Villa Maria',null);
insert into clientes values (4,'Perez Luis','Sarmiento 444','Rosario',2);
insert into clientes values (5,'Pereyra Lucas','San Martin 555','Cruz del Eje',1);
insert into clientes values (6,'Gomez Ines','San Martin 666','Santa Fe',2);
insert into clientes values (7,'Torres Fabiola','Alem 777','Ibera',3);
insert into clientes values (8,'Garcia Paco','Avellaneda 888','Rawson',5);

-- 4 -- Obtenga los datos de ambas tablas, usando alias.

select c.nombre,domicilio,ciudad,p.nombre
from clientes c
join provincias p
on c.codigoprovincia=p.codigo;

-- 5 -- Obtenga la misma información anterior pero ordenada por nombre de provincia


(join y order by)

select c.nombre,domicilio,ciudad,p.nombre
from clientes c
join provincias p
on c.codigoprovincia=p.codigo
order by p.nombre;

-- 6 -- Recupere todos los datos de los clientes de la provincia "Santa Fe" (join
con where) (2 registros devueltos)

select c.nombre,domicilio,ciudad
from clientes c
join provincias p
on c.codigoprovincia=p.codigo
where p.nombre='Santa Fe';

-- Un club dicta clases de distintos deportes. Almacena la información en una


tabla llamada "inscriptos" que incluye el documento, el nombre, el deporte y si la
matricula
--esta paga o no y una tabla llamada "inasistencias" que incluye el documento, el
deporte y la fecha de la inasistencia.

-- 1 - Elimine las tablas y créelas:

drop table inscriptos;


drop table inasistencias;

create table inscriptos(


nombre varchar2(30),
documento char(8),
deporte varchar2(15),
matricula char(1), --'s'=paga; 'n'=impaga
primary key(documento,deporte)
);

create table inasistencias(


documento char(8),
deporte varchar2(15),
fecha date
);

-- 2 -- Ingrese algunos registros para ambas tablas:

insert into inscriptos values('Juan Perez','22222222','tenis','s');


insert into inscriptos values('Maria Lopez','23333333','tenis','s');
insert into inscriptos values('Agustin Juarez','24444444','tenis','n');
insert into inscriptos values('Marta Garcia','25555555','natacion','s');
insert into inscriptos values('Juan Perez','22222222','natacion','s');
insert into inscriptos values('Maria Lopez','23333333','natacion','n');
insert into inasistencias values('22222222','tenis','01/12/2006');
insert into inasistencias values('22222222','tenis','08/12/2006');
insert into inasistencias values('23333333','tenis','01/12/2006');
insert into inasistencias values('24444444','tenis','08/12/2006');
insert into inasistencias values('22222222','natacion','02/12/2006');
insert into inasistencias values('23333333','natacion','02/12/2006');

--3 -- Muestre el nombre, el deporte y las fechas de inasistencias, ordenado por


nombre y deporte.

select nombre,insc.deporte,ina.fecha
from inscriptos insc
join inasistencias ina
on insc.documento=ina.documento and
insc.deporte=ina.deporte
order by nombre, insc.deporte;

-- 4 -- Obtenga el nombre, deporte y las fechas de inasistencias de un determinado


inscripto en un determinado deporte (3 registros).

select nombre,insc.deporte, ina.fecha


from inscriptos insc
join inasistencias ina
on insc.documento=ina.documento and
insc.deporte=ina.deporte
where insc.documento='22222222';

-- 5 -- Obtenga el nombre, deporte y las fechas de inasistencias de todos los


inscriptos que pagaron la matrícula (4 registros)

select nombre,insc.deporte, ina.fecha


from inscriptos insc
join inasistencias ina
on insc.documento=ina.documento and
insc.deporte=ina.deporte
where insc.matricula='s';

-- 49 -- Combinación externa izquierda (left join)

-- Primer problema:
-- Una empresa tiene registrados sus clientes en una tabla llamada "clientes",
también tiene una tabla "provincias" donde registra los nombres de las provincias.

-- 1 -- Elimine las tablas "clientes" y "provincias", créelas y agregue


restricciones únicas para los campos "codigo" de ambas tablas:

drop table clientes;


drop table provincias;

create table clientes (


codigo number(5),
nombre varchar2(30),
domicilio varchar2(30),
ciudad varchar2(20),
codigoprovincia number(3)
);

create table provincias(


codigo number(3),
nombre varchar2(20)
);

alter table clientes


add constraints UQ_clientes_codigo
unique (codigo);

alter table provincias


add constraints UQ_provincias_codigo
unique (codigo);

--2 -- Ingrese algunos registros para ambas tablas. Incluya valores nulos para el
campo "codigo" de "provincias" y valores nulos para el campo "codigoprovincia" de
"clientes". Incluya en "clientes" un código de provincia que no exista en
"provincias":

insert into provincias values(1,'Cordoba');


insert into provincias values(2,'Santa Fe');
insert into provincias values(3,'Corrientes');
insert into provincias values(4,'Santa Cruz');
insert into provincias values(null,'Salta');
insert into provincias values(null,'Jujuy');
insert into clientes values (100,'Lopez Marcos','Colon 111','Córdoba',1);
insert into clientes values (200,'Perez Ana','San Martin 222','Cruz del Eje',1);
insert into clientes values (300,'Garcia Juan','Rivadavia 333','Villa Maria',null);
insert into clientes values (400,'Perez Luis','Sarmiento 444','Rosario',2);
insert into clientes values (500,'Gomez Ines','San Martin 666','Santa Fe',2);
insert into clientes values (600,'Torres Fabiola','Alem 777','La Plata',5);
insert into clientes values (700,'Garcia Luis','Sucre 475','Santa Rosa',null);

-- 3 -- Muestre todos los datos de los clientes, incluido el nombre de la provincia

select c.nombre,domicilio,ciudad, p.nombre


from clientes as c
left join provincias as p
on codigoprovincia = p.codigo;

-- 4 -- Realice la misma consulta anterior pero alterando el orden de las tablas.

select c.nombre,domicilio,ciudad, p.nombre


from clientes as c
left join provincias as p
on codigoprovincia = p.codigo;

-- 5- - Muestre solamente los clientes de las provincias que existen en


"provincias" (4 registros)

select c.nombre,domicilio,ciudad, p.nombre


from clientes as c
left join provincias as p
on codigoprovincia = p.codigo
where p.codigo is not null;

-- 6 -- Muestre todos los clientes cuyo código de provincia NO existe en


"provincias" ordenados por nombre del cliente (3 registros)

from clientes as c
left join provincias as p
on codigoprovincia = p.codigo
where p.codigo is null
order by c.nombre;

-- 7 -- Obtenga todos los datos de los clientes de "Cordoba" (2 registros)

select c.nombre,domicilio,ciudad, p.nombre


from clientes as c
left join provincias as p
on codigoprovincia = p.codigo
where p.nombre='Cordoba';

-- 50 -- Combinación externa derecha (right join)

-- Primer problema:

-- Una empresa tiene registrados sus clientes en una tabla llamada "clientes",
también tiene una tabla "provincias" donde registra los nombres de las provincias.

-- 1 -- Elimine las tablas "clientes" y "provincias" y créelas:

drop table clientes;


drop table provincias;

create table clientes (


codigo number(5),
nombre varchar2(30),
domicilio varchar2(30),
ciudad varchar2(20),
codigoprovincia number(2),
primary key(codigo)
);

create table provincias(


codigo number(2),
nombre varchar2(20),
primary key (codigo)
);

-- 2 -- Ingrese algunos registros para ambas tablas:


insert into provincias values(1,'Cordoba');
insert into provincias values(2,'Santa Fe');
insert into provincias values(3,'Corrientes');
insert into clientes values (101,'Lopez Marcos','Colon 111','Córdoba',1);
insert into clientes values (102,'Perez Ana','San Martin 222','Cruz del Eje',1);
insert into clientes values (103,'Garcia Juan','Rivadavia 333','Villa Maria',1);
insert into clientes values (104,'Perez Luis','Sarmiento 444','Rosario',2);
insert into clientes values (105,'Gomez Ines','San Martin 666','Santa Fe',2);
insert into clientes values (106,'Torres Fabiola','Alem 777','La Plata',4);
insert into clientes values (107,'Garcia Luis','Sucre 475','Santa Rosa',5);

-- 3 -- Muestre todos los datos de los clientes, incluido el nombre de la provincia


empleando un "right join".

select c.nombre,domicilio,ciudad, p.nombre


from provincias as p
right join clientes as c
on codigoprovincia = p.codigo;

-- 4 -- Obtenga la misma salida que la consulta anterior pero empleando un "left


join".

select c.nombre,domicilio,ciudad, p.nombre


from clientes as c
left join provincias as p
on codigoprovincia = p.codigo;

-- 5 -- Empleando un "right join", muestre solamente los clientes de las provincias


que existen en "provincias" (5 registros)

select c.nombre,domicilio,ciudad, p.nombre


from provincias as p
right join clientes as c
on codigoprovincia = p.codigo
where p.codigo is not null;

-- 6 -- Muestre todos los clientes cuyo código de provincia NO existe en


"provincias" ordenados por ciudad (2 registros)

select c.nombre,domicilio,ciudad, p.nombre


from provincias as p
right join clientes as c
on codigoprovincia = p.codigo
where p.codigo is null
order by ciudad;

-- 51 -- Combinación externa
completa (full join)

-- Primer problema:

-- Un club dicta clases de distintos deportes. Almacena la información en una tabla


llamada "deportes" en la cual incluye el nombre del deporte y el nombre del
profesor y en otra tabla
-- llamada "inscriptos" que incluye el documento del socio que se inscribe, el
deporte y si la matricula está paga o no.
-- 1 -- Elimine las tablas, créelas y agregue dos restricciones, una "primary key"
sobre el campo "codigo" de "deportes" y otra compuesta por "documento" y
"codigodeporte" de "inscriptos":

drop table deportes;


drop table inscriptos;

create table deportes(


codigo number(2),
nombre varchar2(30),
profesor varchar2(30)
);

create table inscriptos(


documento char(8),
codigodeporte number(2),
matricula char(1) --'s'=paga; 'n'=impaga
);

alter table deportes


add constraint PK_deportes
primary key(codigo);

alter table inscriptos


add constraint PK_inscriptos
primary key(documento,codigodeporte);

-- 2 -- Ingrese algunos registros para ambas tablas:

insert into deportes values(1,'tenis','Marcelo Roca');


insert into deportes values(2,'natacion','Marta Torres');
insert into deportes values(3,'basquet','Luis Garcia');
insert into deportes values(4,'futbol','Marcelo Roca');
insert into inscriptos values('22222222',3,'s');
insert into inscriptos values('23333333',3,'s');
insert into inscriptos values('24444444',3,'n');
insert into inscriptos values('22222222',2,'s');
insert into inscriptos values('23333333',2,'s');
insert into inscriptos values('22222222',4,'n');
insert into inscriptos values('22222222',5,'n');

-- 3 -- Muestre todos la información de la tabla "inscriptos", y consulte la tabla


"deportes" para obtener el nombre de cada deporte (6 registros)

select documento,d.nombre,matricula
from inscriptos as i
join deportes as d
on codigodeporte=codigo;

-- 4 -- Empleando un "left join" con "deportes" obtenga todos los datos de los
inscriptos (7 registros)

select documento,d.nombre,matricula
from inscriptos as i
left join deportes as d
on codigodeporte=codigo;

-- 5 -- Obtenga la misma salida anterior empleando un "rigth join"


select documento,d.nombre,matricula
from deportes as d
right join inscriptos as i
on codigodeporte=codigo;

-- 6 -- Muestre los deportes para los cuales no hay inscriptos, empleando un "left
join" (1 registro)

select nombre
from deportes as d
left join inscriptos as i
on codigodeporte=codigo
where codigodeporte is null;

-- 7 -- Muestre los documentos de los inscriptos a deportes que no existen en la


tabla "deportes" (1 registro)

select nombre
from deportes as d
left join inscriptos as i
on codigodeporte=codigo
where codigodeporte is null;

-- 8 -- Emplee un "full join" para obtener todos los datos de ambas tablas,
incluyendo las inscripciones a deportes inexistentes en "deportes" y los deportes
que no tienen inscriptos (8 registros)

select documento,nombre,profesor,matricula
from inscriptos as i
full join deportes as d
on codigodeporte=codigo;
create table alumnos(
legajo char(5) not null,
documento char(8) not null,
nombre varchar2(30),
curso char(1),
materia varchar2(30),
notafinal number(4,2)
);

insert into alumnos values ('A123','22222222','Perez Patricia','5','Matematica',9);


insert into alumnos values ('A234','23333333','Lopez Ana','5','Matematica',9);
insert into alumnos values ('A345','24444444','Garcia
Carlos','6','Matematica',8.5);
insert into alumnos values ('A348','25555555','Perez Patricia','6','Lengua',7.85);
insert into alumnos values ('A457','26666666','Perez Fabian','6','Lengua',3.2);

-- Intente crear un índice agrupado único para el campo "apellido".


-- No lo permite porque hay valores duplicados.

create unique INDEX I_alumnos_nombre


on alumnos(nombre);

-- Cree un índice no único, para el campo "nombre".

create index I_alumnos_nombre


on alumnos(nombre);

-- Cree un índice único, para el campo "lejago".

create unique index I_alumnos_legajo


on alumnos(legajo);

-- 6 -- Establezca una restricción "primary key" sobre el campo "legajo".

alter table alumnos


add constraint PK_alumnos_legajo
primary key (legajo);

-- 7 -- Verifique que Oracle no creó un índice al agregar la restricción, utilizó


el índice "I_alumnos_legajo" existente.

select index_name, index_type, uniqueness


from user_indexes
where table_name='alumnos';

-- 8 -- Agregue una restricción única sobre el campo "documento".

alter table alumnos


add constraint UQ_alumnos_documento
unique (documento);

-- 9 -- Verifique que Oracle creó un índice al agregar la restricción y le dio el


nombre de la restricción.

select constraint_name, constraint_type, index_name


from user_constraints
where table_name='EMPLEADOS';

-- 10 -- Intente crear un índice único para la tabla "alumnos" sobre el campo


"notafinal"

create unique index I_alumnos_notafinal


on alumnos(notafinal);

-- 11 -- Indexe la tabla "alumnos" por el campo "notafinal" (índice no único)

create index I_alumnos_notafinal


on alumnos(notafinal);

-- 12 -- Indexe la tabla "alumnos" por los campos "curso" y "materia" (índice no


único)

create index I_alumnos_curso


on alumnos(curso, materia);

-- 13 -- Intente crear un índice único sobre "materia" (error pues hay datos
duplicados)

create index I_alumnos_curso


on alumnos(materia);

-- 14 -- Vea los indices de "alumnos"

select index_name, index_type


from user_indexes
where table_name='alumnos';

-- 1 -- Elimine la tabla y créela con la siguiente estructura:

drop table alumnos;


create table alumnos(
legajo char(5) not null,
documento char(8) not null,
nombre varchar2(30),
curso char(1) not null,
materia varchar2(20) not null,
notafinal number(4,2)
);

-- 2 -- Cree un índice no único para el campo "nombre".

create index I_alumnos_nombre


on alumnos(nombre);

-- 3 -- Establezca una restricción "primary key" para el campo "legajo"

alter table alumnos


add constraint PK_alumnos_legajo
primary key (legajo);

-- 4 -- Verifique que se creó un índice con el nombre de la restricción.

select constraint_name, constraint_type, index_name


from user_constraints
where table_name='alumnos';

-- 5 -- Verifique que se creó un índice único con el nombre de la restricción


consultando el diccionario de índices.

select index_name, index_type


from user_indexes
where table_name='alumnos';

-- 6 -- Intente eliminar el índice "PK_alumnos_legajo" con "drop index".

drop index PK_alumnos_legajo;

-- 7 -- Cree un índice único para el campo "documento".

create index I_alumnos_documento


on alumnos(documento);

-- 8 -- Agregue a la tabla una restricción única sobre el campo "documento" y


verifique que no se creó un índice, Oracle emplea el índice creado en el punto
anterior.

select constraint_name, constraint_type, index_name


from user_constraints
where table_name='ALUMNOS';

-- 9 -- Intente eliminar el índice "I_alumnos_documento" (no se puede porque una


restricción lo está utilizando)

drop index I_alumnos_documento;

-- 10 -- Elimine la restricción única establecida sobre "documento".

alter table alumnos


drop constraint UQ_ALUMNOS_DOCUMENTO;

-- 11 -- Verifique que el índice "I_alumnos_documento" aún existe.

select index_name,uniqueness
from user_indexes
where table_name='ALUMNOS';

-- 12 -- Elimine el índice "I_alumnos_documento", ahora puede hacerlo porque no hay


restricción que lo utilice.

drop index I_alumnos_documento;

-- 13 --Elimine el índice "I_alumnos_nombre".


drop index I_alumnos_nombre;

-- 14 -- Elimine la restricción "primary key"/

alter table alumnos


drop constraint PK_ALUMNOS_LEGAJO;

-- 15 -- Verifique que el índice "PK_alumnos_legajo" fue eliminado (porque fue


creado por Oracle al establecerse la restricción)

select index_name,uniqueness
from user_indexes
where table_name='ALUMNOS';

-- 16 -- Cree un índice compuesto por los campos "curso" y "materia", no único.

create index I_alumnos_cursomateria


on alumnos(curso,materia);

-- 17 -- Verifique su existencia.

select index_name,uniqueness
from user_indexes
where table_name='ALUMNOS';

-- 18 -- Elimine la tabla "alumnos" y verifique que todos los índices han sido
eliminados junto con ella.

drop table alumnos;

select index_name,uniqueness
from user_indexes
where table_name='ALUMNOS';

--
48 -- Combinación interna (join)

-- 1 -- Elimine las tablas "clientes" y "provincias":

drop table clientes;


drop table provincias;

-- 2 -- Créelas con las siguientes estructuras:

create table clientes(


codigo number(5),
nombre varchar2(30),
domicilio varchar2(30),
ciudad varchar2(20),
codigoprovincia number(2)
);

create table provincias(


codigo number(2),
nombre varchar2(20)
);
-- 3 -- Ingrese algunos registros para ambas tablas:

insert into provincias values(1,'Cordoba');


insert into provincias values(2,'Santa Fe');
insert into provincias values(3,'Corrientes');
insert into provincias values(null,'La Pampa');
insert into clientes values (1,'Lopez Marcos','Colon 111','Córdoba',1);
insert into clientes values (2,'Perez Ana','San Martin 222','Cruz del Eje',1);
insert into clientes values (3,'Garcia Juan','Rivadavia 333','Villa Maria',null);
insert into clientes values (4,'Perez Luis','Sarmiento 444','Rosario',2);
insert into clientes values (5,'Pereyra Lucas','San Martin 555','Cruz del Eje',1);
insert into clientes values (6,'Gomez Ines','San Martin 666','Santa Fe',2);
insert into clientes values (7,'Torres Fabiola','Alem 777','Ibera',3);
insert into clientes values (8,'Garcia Paco','Avellaneda 888','Rawson',5);

-- 4 -- Obtenga los datos de ambas tablas, usando alias.

select c.nombre,domicilio,ciudad,p.nombre
from clientes c
join provincias p
on c.codigoprovincia=p.codigo;

-- 5 -- Obtenga la misma información anterior pero ordenada por nombre de provincia


(join y order by)

select c.nombre,domicilio,ciudad,p.nombre
from clientes c
join provincias p
on c.codigoprovincia=p.codigo
order by p.nombre;

-- 6 -- Recupere todos los datos de los clientes de la provincia "Santa Fe" (join
con where) (2 registros devueltos)

select c.nombre,domicilio,ciudad
from clientes c
join provincias p
on c.codigoprovincia=p.codigo
where p.nombre='Santa Fe';

-- Un club dicta clases de distintos deportes. Almacena la información en una


tabla llamada "inscriptos" que incluye el documento, el nombre, el deporte y si la
matricula
--esta paga o no y una tabla llamada "inasistencias" que incluye el documento, el
deporte y la fecha de la inasistencia.

-- 1 - Elimine las tablas y créelas:

drop table inscriptos;


drop table inasistencias;

create table inscriptos(


nombre varchar2(30),
documento char(8),
deporte varchar2(15),
matricula char(1), --'s'=paga; 'n'=impaga
primary key(documento,deporte)
);
create table inasistencias(
documento char(8),
deporte varchar2(15),
fecha date
);

-- 2 -- Ingrese algunos registros para ambas tablas:

insert into inscriptos values('Juan Perez','22222222','tenis','s');


insert into inscriptos values('Maria Lopez','23333333','tenis','s');
insert into inscriptos values('Agustin Juarez','24444444','tenis','n');
insert into inscriptos values('Marta Garcia','25555555','natacion','s');
insert into inscriptos values('Juan Perez','22222222','natacion','s');
insert into inscriptos values('Maria Lopez','23333333','natacion','n');
insert into inasistencias values('22222222','tenis','01/12/2006');
insert into inasistencias values('22222222','tenis','08/12/2006');
insert into inasistencias values('23333333','tenis','01/12/2006');
insert into inasistencias values('24444444','tenis','08/12/2006');
insert into inasistencias values('22222222','natacion','02/12/2006');
insert into inasistencias values('23333333','natacion','02/12/2006');

--3 -- Muestre el nombre, el deporte y las fechas de inasistencias, ordenado por


nombre y deporte.

select nombre,insc.deporte,ina.fecha
from inscriptos insc
join inasistencias ina
on insc.documento=ina.documento and
insc.deporte=ina.deporte
order by nombre, insc.deporte;

-- 4 -- Obtenga el nombre, deporte y las fechas de inasistencias de un determinado


inscripto en un determinado deporte (3 registros).

select nombre,insc.deporte, ina.fecha


from inscriptos insc
join inasistencias ina
on insc.documento=ina.documento and
insc.deporte=ina.deporte
where insc.documento='22222222';

-- 5 -- Obtenga el nombre, deporte y las fechas de inasistencias de todos los


inscriptos que pagaron la matrícula (4 registros)

select nombre,insc.deporte, ina.fecha


from inscriptos insc
join inasistencias ina
on insc.documento=ina.documento and
insc.deporte=ina.deporte
where insc.matricula='s';

-- 49 -- Combinación externa izquierda (left join)

-- Primer problema:

-- Una empresa tiene registrados sus clientes en una tabla llamada "clientes",
también tiene una tabla "provincias" donde registra los nombres de las provincias.
-- 1 -- Elimine las tablas "clientes" y "provincias", créelas y agregue
restricciones únicas para los campos "codigo" de ambas tablas:

drop table clientes;


drop table provincias;

create table clientes (


codigo number(5),
nombre varchar2(30),
domicilio varchar2(30),
ciudad varchar2(20),
codigoprovincia number(3)
);

create table provincias(


codigo number(3),
nombre varchar2(20)
);

alter table clientes


add constraints UQ_clientes_codigo
unique (codigo);

alter table provincias


add constraints UQ_provincias_codigo
unique (codigo);

--2 -- Ingrese algunos registros para ambas tablas. Incluya valores nulos para el
campo "codigo" de "provincias" y valores nulos para el campo "codigoprovincia" de
"clientes". Incluya en "clientes" un código de provincia que no exista en
"provincias":

insert into provincias values(1,'Cordoba');


insert into provincias values(2,'Santa Fe');
insert into provincias values(3,'Corrientes');
insert into provincias values(4,'Santa Cruz');
insert into provincias values(null,'Salta');
insert into provincias values(null,'Jujuy');
insert into clientes values (100,'Lopez Marcos','Colon 111','Córdoba',1);
insert into clientes values (200,'Perez Ana','San Martin 222','Cruz del Eje',1);
insert into clientes values (300,'Garcia Juan','Rivadavia 333','Villa Maria',null);
insert into clientes values (400,'Perez Luis','Sarmiento 444','Rosario',2);
insert into clientes values (500,'Gomez Ines','San Martin 666','Santa Fe',2);
insert into clientes values (600,'Torres Fabiola','Alem 777','La Plata',5);
insert into clientes values (700,'Garcia Luis','Sucre 475','Santa Rosa',null);

-- 3 -- Muestre todos los datos de los clientes, incluido el nombre de la provincia

select c.nombre,domicilio,ciudad, p.nombre


from clientes as c
left join provincias as p
on codigoprovincia = p.codigo;

-- 4 -- Realice la misma consulta anterior pero alterando el orden de las tablas.

select c.nombre,domicilio,ciudad, p.nombre


from clientes as c
left join provincias as p
on codigoprovincia = p.codigo;

-- 5- - Muestre solamente los clientes de las provincias que existen en


"provincias" (4 registros)

select c.nombre,domicilio,ciudad, p.nombre


from clientes as c
left join provincias as p
on codigoprovincia = p.codigo
where p.codigo is not null;

-- 6 -- Muestre todos los clientes cuyo código de provincia NO existe en


"provincias" ordenados por nombre del cliente (3 registros)

from clientes as c
left join provincias as p
on codigoprovincia = p.codigo
where p.codigo is null
order by c.nombre;

-- 7 -- Obtenga todos los datos de los clientes de "Cordoba" (2 registros)

select c.nombre,domicilio,ciudad, p.nombre


from clientes as c
left join provincias as p
on codigoprovincia = p.codigo
where p.nombre='Cordoba';

-- 50 -- Combinación externa derecha (right join)

-- Primer problema:

-- Una empresa tiene registrados sus clientes en una tabla llamada "clientes",
también tiene una tabla "provincias" donde registra los nombres de las provincias.

-- 1 -- Elimine las tablas "clientes" y "provincias" y créelas:

drop table clientes;


drop table provincias;

create table clientes (


codigo number(5),
nombre varchar2(30),
domicilio varchar2(30),
ciudad varchar2(20),
codigoprovincia number(2),
primary key(codigo)
);

create table provincias(


codigo number(2),
nombre varchar2(20),
primary key (codigo)
);

-- 2 -- Ingrese algunos registros para ambas tablas:

insert into provincias values(1,'Cordoba');


insert into provincias values(2,'Santa Fe');
insert into provincias values(3,'Corrientes');
insert into clientes values (101,'Lopez Marcos','Colon 111','Córdoba',1);
insert into clientes values (102,'Perez Ana','San Martin 222','Cruz del Eje',1);
insert into clientes values (103,'Garcia Juan','Rivadavia 333','Villa Maria',1);
insert into clientes values (104,'Perez Luis','Sarmiento 444','Rosario',2);
insert into clientes values (105,'Gomez Ines','San Martin 666','Santa Fe',2);
insert into clientes values (106,'Torres Fabiola','Alem 777','La Plata',4);
insert into clientes values (107,'Garcia Luis','Sucre 475','Santa Rosa',5);

-- 3 -- Muestre todos los datos de los clientes, incluido el nombre de la provincia


empleando un "right join".

select c.nombre,domicilio,ciudad, p.nombre


from provincias as p
right join clientes as c
on codigoprovincia = p.codigo;

-- 4 -- Obtenga la misma salida que la consulta anterior pero empleando un "left


join".

select c.nombre,domicilio,ciudad, p.nombre


from clientes as c
left join provincias as p
on codigoprovincia = p.codigo;

-- 5 -- Empleando un "right join", muestre solamente los clientes de las provincias


que existen en "provincias" (5 registros)

select c.nombre,domicilio,ciudad, p.nombre


from provincias as p
right join clientes as c
on codigoprovincia = p.codigo
where p.codigo is not null;

-- 6 -- Muestre todos los clientes cuyo código de provincia NO existe en


"provincias" ordenados por ciudad (2 registros)

select c.nombre,domicilio,ciudad, p.nombre


from provincias as p
right join clientes as c
on codigoprovincia = p.codigo
where p.codigo is null
order by ciudad;

-- 51 -- Combinación externa
completa (full join)

-- Primer problema:

-- Un club dicta clases de distintos deportes. Almacena la información en una tabla


llamada "deportes" en la cual incluye el nombre del deporte y el nombre del
profesor y en otra tabla
-- llamada "inscriptos" que incluye el documento del socio que se inscribe, el
deporte y si la matricula está paga o no.

-- 1 -- Elimine las tablas, créelas y agregue dos restricciones, una "primary key"
sobre el campo "codigo" de "deportes" y otra compuesta por "documento" y
"codigodeporte" de "inscriptos":

drop table deportes;


drop table inscriptos;

create table deportes(


codigo number(2),
nombre varchar2(30),
profesor varchar2(30)
);

create table inscriptos(


documento char(8),
codigodeporte number(2),
matricula char(1) --'s'=paga; 'n'=impaga
);

alter table deportes


add constraint PK_deportes
primary key(codigo);

alter table inscriptos


add constraint PK_inscriptos
primary key(documento,codigodeporte);

-- 2 -- Ingrese algunos registros para ambas tablas:

insert into deportes values(1,'tenis','Marcelo Roca');


insert into deportes values(2,'natacion','Marta Torres');
insert into deportes values(3,'basquet','Luis Garcia');
insert into deportes values(4,'futbol','Marcelo Roca');
insert into inscriptos values('22222222',3,'s');
insert into inscriptos values('23333333',3,'s');
insert into inscriptos values('24444444',3,'n');
insert into inscriptos values('22222222',2,'s');
insert into inscriptos values('23333333',2,'s');
insert into inscriptos values('22222222',4,'n');
insert into inscriptos values('22222222',5,'n');

-- 3 -- Muestre todos la información de la tabla "inscriptos", y consulte la tabla


"deportes" para obtener el nombre de cada deporte (6 registros)

select documento,d.nombre,matricula
from inscriptos as i
join deportes as d
on codigodeporte=codigo;

-- 4 -- Empleando un "left join" con "deportes" obtenga todos los datos de los
inscriptos (7 registros)

select documento,d.nombre,matricula
from inscriptos as i
left join deportes as d
on codigodeporte=codigo;

-- 5 -- Obtenga la misma salida anterior empleando un "rigth join"

select documento,d.nombre,matricula
from deportes as d
right join inscriptos as i
on codigodeporte=codigo;

-- 6 -- Muestre los deportes para los cuales no hay inscriptos, empleando un "left
join" (1 registro)

select nombre
from deportes as d
left join inscriptos as i
on codigodeporte=codigo
where codigodeporte is null;

-- 7 -- Muestre los documentos de los inscriptos a deportes que no existen en la


tabla "deportes" (1 registro)

select nombre
from deportes as d
left join inscriptos as i
on codigodeporte=codigo
where codigodeporte is null;

-- 8 -- Emplee un "full join" para obtener todos los datos de ambas tablas,
incluyendo las inscripciones a deportes inexistentes en "deportes" y los deportes
que no tienen inscriptos (8 registros)

select documento,nombre,profesor,matricula
from inscriptos as i
full join deportes as d
on codigodeporte=codigo;

También podría gustarte