viernes, 14 de junio de 2013

PROCEDURE - CURSOR


create or replace procedure listaPro(pNumero char) is
  contador integer := 0;
  vnombre empleado.nombre%type;

  cursor cpropiedad (pnumempleado empleado.numempleado%type) is
  select * from propiedad
  where numempleado = pnumempleado;

begin

  select nombre into vnombre
  from empleado
  where numempleado = pNumero;

  dbms_output.put_line('Nombre                         Numero');
  dbms_output.put_line(vnombre || ' ' || pNumero);
  dbms_output.put_line('      Numero      Tipo                      Renta');
  for rprop in cpropiedad(pNumero)
  LOOP
     dbms_output.put_line('      '|| rprop.numpropiedad ||'        ' || rprop.tipo || ' ' || rprop.renta);
     contador := contador + 1;  
  END LOOP;
  dbms_output.put_line('Total propiedades: ' || contador);
  exception
  when no_data_found then
  dbms_output.put_line('No hay registros');

end;


set serveroutput on
begin
  listaPro('SL21');
end;




--------------------------------------------------------------------------------------------------


create or replace
PROCEDURE CalcularEstadisticas is

  type prop is record(
  cantidad propiedad.numpropiedad%type,
  rentaPromedio float,
  rentaMaxima float,
  rentaMinima float
  );  
  cls prop;

begin
 
  select count(numpropiedad), avg(renta), max(renta), min(renta) into cls
  from propiedad;
 
  dbms_output.put_line('Total Propiedades: '||cls.cantidad||' rentaPromedio: '||cls.rentaPromedio||' rentaMaxima: '||cls.rentaMaxima||' renta minima: '||cls.rentaMinima);
 
end;

set serveroutput on
begin
CalcularEstadisticas;
end;

miércoles, 12 de junio de 2013

Creación de paquetes en PL/SQL


--creación de paquetes
create or replace package elPaquete is
procedure imprim (p1 numeric);

function sumar (p1 numeric, p2 numeric) return numeric;

function restar (p1 numeric, p2 numeric) return numeric;

function dividir (p1 numeric, p2 numeric) return numeric;

function multiplicar (p1 numeric, p2 numeric) return numeric;
end alPaquete;



--Agregar cuerpo al paquete
create or replace package body elPaquete is
procedure imprim(p1 numeric) is
begin
  dbms_output.put_line('El resultado es: '|| p1);
end imprim;
function sumar (p1 numeric, p2 numeric) return numeric is
begin

  return (p1+p2);
end sumar;
function restar (p1 numeric, p2 numeric) return numeric is
begin

  return (p1-p2);
end restar;

function dividir (p1 numeric, p2 numeric) return numeric is
begin
  if p2 = 0 then
    dbms_output.put_line('Error. no se puede dividir por cero');
    return 0;
  end if;
  return (p1/p2);
end dividir;
function multiplicar (p1 numeric, p2 numeric) return numeric is
begin

  return (p1*p2);
end multiplicar;
end elPaquete;


---- ejecutar el paquete!
select elPaquete.sumar(2,3) from dual;

select elPaquete.restar(2,3) from dual;

select elPaquete.dividir(10,5) from dual;

select elPaquete.multiplicar(2,3) from dual;

set serveroutput on
declare
  mivariable numeric;
begin
  mivariable := elPaquete.sumar(2,3);
  elPaquete.imprim(mivariable);
end;

viernes, 10 de mayo de 2013

Crear TABLAS con RECORD en PL/SQL


SET SERVEROUTPUT ON
DECLARE
  TYPE TEMPLEADO IS RECORD(
  NUMEMPLEADO EMPLEADO.NUMEMPLEADO%TYPE,
  NOMBRE EMPLEADO.NOMBRE%TYPE,
  FECHA EMPLEADO.FECHNAC%TYPE
  );

  TYPE TEMPLEADOS IS TABLE OF TEMPLEADO
  INDEX BY  BINARY_INTEGER;

  VEMPLEADOS TEMPLEADOS;
BEGIN
 

/*=============================================================
HAY DOS FORMAS DE INGRESAR LOS DATOS EN BRUTO O CON UN SELECT.
=============================================================*/


   VEMPLEADOS(1).NUMEMPLEADO := 1;
   VEMPLEADOS(1).NOMBRE := 'MIGUEL';
   VEMPLEADOS(1).FECHA := '15/04/2013';
 
   VEMPLEADOS(2).NUMEMPLEADO := 2;
   VEMPLEADOS(2).NOMBRE := 'ENRIQUE';
   VEMPLEADOS(2).FECHA := '29/09/1985';
 
   SELECT NUMEMPLEADO,NOMBRE,FECHNAC INTO VEMPLEADOS(3)
   FROM EMPLEADO
   WHERE NUMEMPLEADO = 'SL21';
 
   SELECT NUMEMPLEADO,NOMBRE,FECHNAC INTO VEMPLEADOS(4)
   FROM EMPLEADO
   WHERE NUMEMPLEADO = 'SL22';
 
   SELECT NUMEMPLEADO,NOMBRE,FECHNAC INTO VEMPLEADOS(5)
   FROM EMPLEADO
   WHERE NUMEMPLEADO = 'SL40';


/*=============================================================
CREAMOS UN CICLO FOR PARA LISTAR LOS REGISTROS DE LA TABLA
=============================================================*/


   FOR I IN VEMPLEADOS.FIRST..VEMPLEADOS.LAST
   LOOP
    DBMS_OUTPUT.PUT_LINE('Numero Empleado: '||VEMPLEADOS(I).NUMEMPLEADO ||'    Nombre: '||VEMPLEADOS(I).NOMBRE ||' Fecha: '||VEMPLEADOS(I).FECHA);
   END LOOP;
END;

miércoles, 1 de mayo de 2013

create table autor(
cod_autor integer not null,
nombre_autor varchar2(50) not null,
fecha_nacimiento date not null,
nacionalidad varchar2(50),
constraint pk_cod_autor primary key(cod_autor)
);
create table libro(
cod_libro integer not null,
titulo varchar2(50) not null,
id_autor integer not null,
año varchar2(20) not null,
nom_editorial varchar2(50) not null,
precio float not null,
constraint pk_cod_libro primary key(cod_libro)
);
insert into autor values('10','Alejandro Dumas', '10-10-1982', 'Francesa');
insert into autor values('12','Ruben Dario', '05-10-1987', 'Nicaraguense');
insert into autor values('11','Mark Twain', '11-06-1835', 'Estadounidense');
insert into autor values('13','Victor Hugo', '04-10-1802', 'Francesa');
insert into libro values('102','Los tres Mosqueteros','10','2003', 'Altazor',15700);
insert into libro values('101','El Conde de Monte Cristo','10','2004', 'Antares',12500);
insert into libro values('103','Las Aventuras de Tom Sawyer','11','2002', 'Contra Punto',17800);
insert into libro values('104','Cantos de Vida y Esperanza','12','2002', 'Antares',19800);
insert into libro values('105','Los Miserables','13','2003', 'Contra Punto',16700);
desc autor;
desc libro;
drop table libro cascade constraint;
-----------------------------------------------------------------------------
1)Determinar la cantidad de libros en cada editorial
select nom_editorial, count(cod_libro) as "Cantidad de Libros"
from libro
group by nom_editorial ;
--------------------------------------------------------------
2)Determinar la suma de los precios de los libros de cada editorial
select nom_editorial, sum(precio) as "Suma total"
from libro
group by nom_editorial;
---------------------------------------
3)Determinar la cantidad de libros de cada editorial que no superen el precio de 18000
SELECT nom_editorial, count(cod_libro) as Cantidad_libros
FROM libro
WHERE precio < 18000
GROUP BY nom_editorial;
-------------------------------------------------------------
4)Determinar cuantas nacionalidades hay de cada autor ordenadas descendentemente
SELECT nacionalidad, count(cod_autor) AS Cantidad_de_Autores
FROM Autor
GROUP BY nacionalidad
Order by nacionalidad desc;
----------------------------------------------------------
5)Determinar la suma de los precios de los libros de cada editorial que no superen los 34000
SELECT nom_editorial, sum(precio) as suma_libros
FROM libro
GROUP BY nom_editorial
HAVING sum(precio) < 34000
-------------------------------------------------
6)Crear una vista que almacene la cantidad de libros de cada editorial que no superen el precio de 18000
Create view cant_libros as
SELECT nom_editorial, count(cod_libro) as Cantidad_libros
FROM libro
WHERE precio < 18000
GROUP BY nom_editorial

para revisar la vista
Select * from cant_libros;
----------------------------------
7)Crear una vista que almacene la suma de los precios de los libros de cada editorial que no superen los 34000
Create view suma_precios(editorial, suma) as
SELECT nom_editorial, sum(precio) FROM libro
GROUP BY nom_editorial
HAVING sum(precio) < 34000;
select *from cant_libros;
-----------------------------------------------------------
8) Crear una vista que almacene los nombres de los autores cuyos libros fueron editados por antares

Create view nom_autores(nombre) as
SELECT nombre_autor"
FROM libro, autor
Where cod_autor =id_autor and nom_editorial = 'antares';
--------------------------
9)Crear una vista que almacena los nombres de los libros que fueron escritos por Alejandro Dumas
Create or replace view  nom_libro(nombre_libro) as
SELECT titulo
FROM libro, autor
Where cod_autor =id_autor and nombre_autor = 'Alejandro Dumas' With read only;

select * from nom_libro;
drop table Empleado cascade constraints;
drop table Departamento cascade constraints;
drop table Asignacion cascade constraints;
CREATE TABLE Empleado(
  num_emp number,
  nombre varchar2(40) constraint non_nn NOT NULL,
  tarifa_hora varchar2(20) constraint tar_nn NOT NULL,
  profesion varchar2(40) constraint pro_nn NOT NULL,
  constraint num_emp_pk primary key(num_emp));
CREATE TABLE Departamento(
  numero number,
  nombre varchar2(40) constraint nondep_nn NOT NULL,
  constraint numero_pk primary key(numero));
CREATE TABLE Asignacion(
  num_emp number, constraint num_emp_fk foreign key(num_emp)
  references Empleado(num_emp),
  fecha_ini varchar2(20) constraint fecha_ini_nn NOT NULL,
  numerodep number, constraint numerodep_fk foreign key(numerodep)
  references Departamento(numero));
INSERT into Empleado VALUES(1235,'Marcia Pérez','7000','Contador');
INSERT into Empleado VALUES(1412,'Carlos garcía','6500','Analista de Sistemas');
INSERT into Empleado VALUES(2920,'Ricardo Gómez','5800','Analista de Sistemas');
INSERT into Empleado VALUES(3231,'Patricio Morán','6300','Ingeniero en Informática');
INSERT into Empleado VALUES(2331,'Paula Marín','9000','Ingeniero en Informática');
INSERT into Empleado VALUES(4531,'Ricardo Pardo','6300','Contador');
INSERT into Empleado VALUES(8931,'ana Mora','7300','Analista de Sistemas');
INSERT into Empleado VALUES(3267,'Paula Morán','9200','Ingeniero Comercial');
INSERT into departamento VALUES(101014,'Finanzas');
INSERT into departamento VALUES(110115,'Contabilidad');
INSERT into departamento VALUES(101514,'Informática');
INSERT into departamento VALUES(110215,'Desarrollo');
INSERT into Asignacion VALUES(1235,'20/03/2013',110115);
INSERT into Asignacion VALUES(2920,'18/01/2013',110215);
INSERT into Asignacion VALUES(1412,'17/02/2013',110215);
INSERT into Asignacion VALUES(3231,'20/03/2013',101514);
INSERT into Asignacion VALUES(2331,'25/02/2013',110215);
INSERT into Asignacion VALUES(4531,'18/01/2013',101014);
INSERT into Asignacion VALUES(8931,'17/01/2013',110215);
INSERT into Asignacion VALUES(3267,'20/01/2013',101014);
INSERT into Asignacion VALUES(2920,'25/03/2013',101514);
--------------------------------------------------
---1)Mostrar el nombre y profesion del o los empleados cuya fecha de inicio de
--asignacion fue el 20/03/2013. El resultado debe salir en Mayusculas y
---debe usar un operador Join
desc empleado;
desc asignacion;
desc departamento;
select upper (nombre) Empleado,Upper(profesion) profesion
from empleado e
join Asignacion asi on e.num_emp = asi.num_emp
where fecha_ini='20/03/2013';

select upper (nombre) Empleado,Upper(profesion) profesion ---Otra forma
from empleado e
join Asignacion asi on e.num_emp = asi.num_emp
where to_date(fecha_ini)='20/03/2013';

select upper (nombre) Empleado,Upper(profesion) profesion ---Otra forma
from empleado e
join Asignacion asi on e.num_emp = asi.num_emp
where to_date(fecha_ini, 'dd-mm-yyyy')='20/03/2013';


----------------------------------------------------------------
-- 2) Mostrar la cantidad de dias que llevan trabajados Carlos Garcia
--y Ana mora a la fecha de hoy. El resultado debe ser entero y debe
--crear un alias llamado Dias_Trabajados.
select num_emp, nombre,sum (trunc(sysdate -to_date(fecha_ini, 'dd-mm-yyyy')))"Dias Trabajados"
from empleado e
natural join asignacion asi
where lower (nombre) in ('carlos garcia', 'ana mora')
group by num_emp, nombre
order by nombre;
select trunc (125.34) from dual; ---Para esto sirve el trunc
select round (125.35,1) from dual; ---Para esto sirve el round

-------------------------------------------------------------------
--3)Mostrar la cantidad de empleados agrupados por porfesion
select profesion, count(num_emp)
from empleado
group by profesion;

-----------------------------------------
---4)Mostrar la cantidad de empleados cuya tarifa hora es menor que el
--promedio de las tarifas horas de los empleados registrados
--en la base de datos
select count (tarifa_hora)
from empleado
where tarifa_hora<(select avg (tarifa_hora) from empleado);
----------------------------------
--5)En una sola instruccion select mostrar el maximo y minimo de las tarifa hora
--de los empleados.Use alias para mejorar la salida
select max(tarifa_hora) maximo, min (tarifa_hora) minimo
from empleado;
---------------------------
--6)Mostrar el nombre del empleado y nombre de departamento cuya fecha de inicio
-- de asignacion esta entre el 01/01/2013 al 01/03/2013, ambas fechas inclusive
---. EL resultado debe salir en minisculas. Debe usar where
select lower(E.nombre) Nombre,lower (d.nombre) Departamento
from Empleado e,Asignacion asi, departamento d
where e.num_emp=asi.num_emp
and asi.numerodep=d.numero
and to_date(fecha_ini, 'dd-mm-yyyy')
between '01/01/2013' and '01/03/2013';
----------------------------------------------------------
---7) Mostrar el nombre y departamento de los empleados que no pertenecen
---al departamento de desarollo
select E.nombre Nombre, d.nombre Departamento
from Empleado e,Asignacion asi, departamento d
where e.num_emp=asi.num_emp
and asi.numerodep=d.numero
and lower (d.nombre)<>'Desarrollo';
select E.nombre Nombre, d.nombre Departamento ---Otra forma
from Empleado e,Asignacion asi, departamento d
where e.num_emp=asi.num_emp
and asi.numerodep=d.numero
and lower (d.nombre)not in ('Desarrollo');
select E.nombre, d.nombre  ---otra forma
from Empleado e
natural join Asignacion asi
join Departamento d on asi.numerodep=d.numero
where lower(d.nombre) not in ('desarrollo');

select E.nombre  ---otra forma  ---Cuantos trabajan en informatica y no en desarrollo--usamos el MINUS(oPERACION DE
from Empleado e
natural join Asignacion asi
join Departamento d on asi.numerodep=d.numero
where d.nombre= 'Informática'
minus --resta una tabla de la otra(operacion de conjunto)
select E.nombre  ---otra forma
from Empleado e
natural join Asignacion asi
join Departamento d on asi.numerodep=d.numero
where d.nombre= 'Desarrollo';
select E.nombre  ---otra forma  ---Cuantos trabajan en informatica y no en desarrollo--usamos el MINUS(oPERACION DE
from Empleado e
natural join Asignacion asi
join Departamento d on asi.numerodep=d.numero
where d.nombre= 'Informática'
intersect --resta una tabla de la otra(operacion de conjunto)
select E.nombre  ---otra forma
from Empleado e
natural join Asignacion asi
join Departamento d on asi.numerodep=d.numero
where d.nombre= 'Desarrollo';

 -----------------------------------------
 --8)Mostrar el nombre y sueldo liquido de cada empleado cuya asignacion comenco el mes de
 --Marzo del 2013, sabiendo que trabajo 20 dias, ocho horas diarias y tiene descuentos del 7%
 -- de salud y 12% de AFP. El resultado debe ser entero.Debe crear un alias llamado
 ---Sueldo_Liquido

 select nombre, tarifa_hora*20*8*0.81
 from empleado;
select nombre,to_number( tarifa_hora)*20*8*0.81
 from empleado;

 select nombre, round ((tarifa_hora)*20*8*0.81) "Sueldo Liquido"
 from empleado;
select nombre,
tarifa_hora*20*8 Base,
tarifa_hora*20*8*0.19 descuento,
round((tarifa_hora*20*8*0.81)) liquido
from empleado;      
             
select nombre,
to_char(tarifa_hora*20*8 , '999,999,999') base,
to_char(tarifa_hora*20*8*0.19, '999,999,999')descuento,
to_char(round(tarifa_hora*20*8-tarifa_hora*20*8*0.19),'999,999,999') liquido
from empleado;
Drop table Proyecto cascade constraints;
Drop table Empleado cascade constraints;
Drop table Hora cascade constraints;
create table Proyecto (
codpro varchar2 (5),
nombre varchar2 (25),
area varchar2 (20),
oficina varchar2 (5)
);
alter table Proyecto
add constraint proyecto_pk primary key (codPro);
create table Empleado (
rut varchar2 (12),
nombre varchar2 (25),
fechnac date,
direccion varchar2 (35),
ciudad varchar2 (15),
telefono varchar2 (10)
);
alter table Empleado
add constraint empleado_pk primary key (rut);
create table Hora (
fecha date,
horas integer,
codpro varchar2(5),
rut varchar2 (12)
);
alter table Hora
add constraint Hora_fk_references_Proyecto foreign key (codPro)
references Proyecto (codPro);
alter table Hora
add constraint Hora_fk_references_empleado foreign key (rut)
references Empleado (rut);
/*
PROYECTO
101 WEB Ipaid Marketing 1
102 Plan Cuentas Contabilidad 2
103 Sala Clases Arquitectura 3
104 Capacitación RRHH 4
EMPLEADO
1-7 Luis Ponce 25-ene-1958 Cienfuegos 45 Santiago 5678654
2-8 Ana Zamora 30-mar-1960 null Santiago 6754345
3-5 Pedro Figueroa 1-ene-1970 Portales 890 Valparaíso null
4-6 Camila Espinoza 27-04-1980 cuevas 67 Rancagua null
HORA
2012-11-07 2 101 4-6
2012-11-07 4 101 1-7
2012-11-04 3 102 3-5
2012-12-03 6 103 3-5
*/
insert into Proyecto values ('101','WEB Ipaid','Marketing','1');
insert into Proyecto values ('102','Plan Cuentas','contabilidad','2');
insert into Proyecto values ('103','Sala Clases','Arquitectura','3');
insert into Proyecto values ('104','Capacitacion','RRHH','4');
insert into Empleado values ('1-7','Luis Ponce','25-ene-1958','cienfuegos 45','santiago','5678654');
insert into Empleado values ('2-8','Ana Zamora','30-mar-1960',null,'santiago','67543445');
insert into Empleado values ('3-5','Pedro Figueroa','01-ene-1970','portales 890','Valparaiso',null);
insert into Empleado values ('4-6','Camila Espinoza','27-04-1980','cuevas 67','Rancagua',null);
insert into Hora values (to_date('2012-11-07', 'yyyy-mm-dd'),2,'101','4-6');
insert into Hora values (to_date('2012-11-07', 'yyyy-mm-dd'),4,'101','1-7');
insert into Hora values (to_date('2012-11-04', 'yyyy-mm-dd'),3,'102','3-5');
insert into Hora values (to_date('2012-12-03', 'yyyy-mm-dd'),6,'103','3-5');
---------------------------------------------------------------------------------------
 Control N°2
a) Mostrar la cantidad de hora que hay registrada por dia
select fecha, sum(horas)
from hora
group by fecha
------------------------------------------------
b) Mostrar el promedio de la edad de los empleados
select trunc((sysdate - to_date('29-09-1975'))/365)
from dual;
select round(avg (trunc ((sysdate -fechnac))/365),1)
from empleado;
-------------------------------------------------------------
c) Mostrar el nombre de los empleados que no tienen registrados telefonos en la base de datos
select nombre
from empleado
where telefono is null;
NVL : Si el valor es nulo, pongale valor por ejemplo, si el valor es Nulo, hay que ponerlo en 0
---------------------------------------------------------------------------
d) Mostrar los nombres de los empleados que trabajaron en Noviembre del 2012
select nombre
from empleado e
join hora h on  e.rut=h.rut
where fecha between '1-11-2012' and  '30-11-2012' ;

---Usando natural Join
select nombre
from empleado natural join hora
where fecha between '1-11-2012' and  '30-11-2012' ;

---------------------------------------------------------------------------------
e) Mostrar el codigo y nombre de los proyectos cuya Area sea es Arquitectura o Marketing
select codpro, nombre
from proyecto
where lower (area) in ('arquitectura',  'marketing');
-----------------------------------------------
f) Crear una vista llamada VEmpCiudad que muestre la cantidad
de empleados por ciudad, incluyendo solamente las ciudades
de Santiago y Valparaiso
drop view VEmpCiudad;
create view VEmpCiudad as
select ciudad, count(*)as Total
from empleado
where lower(ciudad)in ('santiago', 'valparaiso')
group by ciudad;
desc VEmpCiudad
select * from VEmpCiudad;
select ciudad, count(*)
from empleado
where lower(ciudad)in ('santiago', 'valparaiso')
group by ciudad;
---Ahora seleccionando las ciudades con mas de un empleado
select ciudad, count(*) total
from empleado
group by ciudad
having count (*) >1;
--------------------------------------------------------------
Crear una vists VProyFigueroa que muestre los nombres de los proyectos en los que ha trabajado Pedro
Figueroa, eliminando los registros duplicados (use Join)
select p.nombre
from proyecto p
join hora h on p.codpro=h.codpro
join empleado e on e.rut=h.rut
where lower (e.nombre) = 'pedro figueroa';
---Con subSelect
select rut
from empleado
where lower (nombre) = 'pedro figueroa';
select nombre
from proyecto
where codpro in (select codpro
from hora
where rut=(select rut
from empleado
where lower (nombre) = 'pedro figueroa'));
select codpro
from hora
where rut=(select rut
from empleado
where lower (nombre) = 'pedro figueroa');
create or replace view xyz as
select nombre
from proyecto
where codpro in (select codpro
from hora
where rut=(select rut
from empleado
where lower (nombre) = 'pedro figueroa'));
select * from xyz;
---------------------------------
Crear la vista VEmpProy que muestre los nombres de los empleados y el nombre de los proyectos, que se
trabajaron el dia 2012-11-07.(Usando Where, sin usar Join)
select e.nombre, p.nombre
from empleado e, hora h,proyecto p
where e.rut=h.rut
and h.codpro=p.codpro
and fecha= to_date('2012-11-07', 'yyyy-mm-dd');
create or replace view VEmpProy as
select e.nombre "nombre empleado" , p.nombre "nombre proyecto"
from empleado e, hora h,proyecto p
where e.rut=h.rut
and h.codpro=p.codpro
and fecha= to_date('2012-11-07', 'yyyy-mm-dd');
desc VEmpProy;
select * from VEmpProy;
select "nombre empleado" from VEmpProy;
--------------------------------------------------
select *
from  user_views;
MIÉRCOLES, 18 DE JULIO DE 2007
Dream home completo
Aquí una descripción resumida del Modelo de datos de Dream Home

/*==============================================================*/
/* BORRADO DE TABLAS */
/*==============================================================*/
drop table TotPropEmpleado cascade constraints;
drop table ARRIENDO cascade constraints;
drop table CLIENTE cascade constraints;
drop table EMPLEADO cascade constraints;
drop table OFICINA cascade constraints;
drop table PROPIEDAD cascade constraints;
drop table PROPIETARIO cascade constraints;
drop table VISITA cascade constraints;
/*==============================================================*/
/* Tabla: ARRIENDO */
/*==============================================================*/
create table ARRIENDO (
NUMARRIENDO INTEGER not null,
NUMPROPIEDAD CHAR(4),
NUMCLIENTE CHAR(4),
RENTA FLOAT,
FORMAPAGO CHAR(10),
DEPOSITO FLOAT,
PAGADO CHAR(1),
INICIORENTA DATE,
FINRENTA DATE,
constraint PK_ARRIENDO primary key (NUMARRIENDO)
);
/*==============================================================*/
/* Tabla: CLIENTE */
/*==============================================================*/
create table CLIENTE (
NUMCLIENTE CHAR(4) not null,
NOMBRE CHAR(30),
APELLIDO CHAR(30),
DIRECCION CHAR(35),
TELEFONO CHAR(10),
TIPOPREF CHAR(25),
MAXRENT FLOAT,
constraint PK_CLIENTE primary key (NUMCLIENTE)
);
/*==============================================================*/
/* Tabla: EMPLEADO */
/*==============================================================*/
create table EMPLEADO (
NUMEMPLEADO CHAR(4) not null,
NOMBRE CHAR(30),
APELLIDO CHAR(30),
CARGO CHAR(35),
SEXO CHAR(1),
FECHNAC DATE,
SALARIO FLOAT,
NUMOFICINA CHAR(4),
constraint PK_EMPLEADO primary key (NUMEMPLEADO)
);
/*==============================================================*/
/* Tabla: OFICINA */
/*==============================================================*/
create table OFICINA (
NUMOFICINA CHAR(4) not null,
CALLE CHAR(30),
CIUDAD CHAR(25),
CODIGOPOSTAL CHAR(10),
constraint PK_OFICINA primary key (NUMOFICINA)
);
/*==============================================================*/
/* Tabla: PROPIEDAD */
/*==============================================================*/
create table PROPIEDAD (
NUMPROPIEDAD CHAR(4) not null,
CALLE CHAR(30),
CIUDAD CHAR(25),
CODIGOPOSTAL CHAR(10),
TIPO CHAR(25),
HAB INTEGER,
RENTA FLOAT,
NUMPROPIETARIO CHAR(4),
NUMEMPLEADO CHAR(4),
constraint PK_PROPIEDAD primary key (NUMPROPIEDAD)
);
/*==============================================================*/
/* Tabla: PROPIETARIO */
/*==============================================================*/
create table PROPIETARIO (
NUMPROPIETARIO CHAR(4) not null,
NOMBRE CHAR(30),
APELLIDO char(30),
DIRECCION CHAR(30),
TELEFONO CHAR(10),
constraint PK_PROPIETARIO primary key (NUMPROPIETARIO)
);
/*==============================================================*/
/* Tabla: VISITA */
/*==============================================================*/
create table VISITA (
NUMCLIENTE CHAR(4) not null,
NUMPROPIEDAD CHAR(4) not null,
FECHA DATE not null,
COMENTARIO VARCHAR2(30),
constraint PK_VISITA primary key (NUMCLIENTE, NUMPROPIEDAD, FECHA)
);
/*==============================================================*/
/* Tabla TotPropEmpleado */
/* Se utiliza para insertar desde otra tabla
/*==============================================================*/
create table TotPropEmpleado (
NUMEMPLEADO CHAR(4) not null,
totProp INTEGER,
constraint PK_TotPropEmpleado primary key (NUMEMPLEADO)
);
alter table TotPropEmpleado
add constraint FK_TotProp_REFERENCE_EMPLEADO foreign key (NUMEMPLEADO)
references EMPLEADO (NUMEMPLEADO);
alter table EMPLEADO
add constraint FK_EMPLEADO_REFERENCE_OFICINA foreign key (NUMOFICINA)
references OFICINA (NUMOFICINA);
alter table PROPIEDAD
add constraint FK_PROPIEDA_REFERENCE_EMPLEADO foreign key (NUMEMPLEADO)
references EMPLEADO (NUMEMPLEADO);
alter table VISITA
add constraint FK_VISITA_REFERENCE_CLIENTE foreign key (NUMCLIENTE)
references CLIENTE (NUMCLIENTE);
alter table VISITA
add constraint FK_VISITA_REFERENCE_PROPIEDA foreign key (NUMPROPIEDAD)
references PROPIEDAD (NUMPROPIEDAD);

/*==============================================================*/
/*= P o b l a m i e n t o d e t a b l a s =*/
/*==============================================================*/
/*==============================================================*/
/* datos: oficina */
/*==============================================================*/
insert into oficina values('B005','16 Holhead','Aberdeem','AB7 5SU');
insert into oficina values('B007','6 Argvill St.','London','NW2');
insert into oficina values('B003','164 Main street','Glasgow','G119Qx');
insert into oficina values('B004','2 Manor Rd','Glasgow','G114Qx');
insert into oficina values('B001','10 Dale Rd','bristol','G12');
insert into oficina values('B002','17 Holhead','Aberdeem','AB7 5SU');
insert into oficina values('B008','7 Argvill St.','London','NW21');
insert into oficina values('B006','163 Main street','Glasgow','G11');
insert into oficina values('B010','2 Manor Rd','Glasgow','G114x');
insert into oficina values('B011','14 Dale Rd','bristol','G2');
insert into oficina values('B017','6 Argvill St.','London','W2');
insert into oficina values('B013','166 Main street','Glasgow','9Qx');
insert into oficina values('B014','3 Manor Rd','Glasgow','Qx');
insert into oficina values('B012','11 Dale Rd','bristol','GH2');
insert into oficina values('B015','Costanera 25','Valdivia','0324');
insert into oficina values('B115','Picarte 124','Valdivia','0324');
insert into oficina values('B215','El Morro 110','Arica','10300');
insert into oficina values('B315','El Vergel 1500','Arica','123123');
insert into oficina values('B415','Av. Walker Martinez 1360','Santiago','W101');
insert into oficina values('B515','Av. Antonio Varas 929','Santiago','W101');
/*==============================================================*/
/* datos: cliente */
/*==============================================================*/
insert into cliente values('CR76','Jhon','Kay','56 High ST,Londonn,SW14EH','0207774563','Departamento',450);
insert into cliente values('CR56','Aline','Stewart','64 Fern Dr, Glasgow G42 OBL','0141324182','Departamento',350);
insert into cliente values('CR74','Mike','Ritchie','63 Well St, Glasgow,G42','0141943742','Casa',750);
insert into cliente values('CR62','Mary','Tregear','12 Park PI, Glasgow, G40QR','0141225742','Departamento',600);
insert into cliente values('CR78','Juan','Kayser','55 High ST,Londonn,SW14EH','0207774564','Departamento',450);
insert into cliente values('CR57','Alicia','Soto','63 Fern Dr,. GlasgowG42 OBL','0141324183','Departamento',350);
insert into cliente values('CR72','Miguel','Torres','62 Well St, Glasgow,G42','0141943740','Casa',750);
insert into cliente values('CR63','Maria','Perez','13 Park PI, Glasgow,G4 0QR','0141225741','Departamento',600);
/*==============================================================*/
/* datos: empleado */
/*==============================================================*/
insert into empleado values('SL21','Jhon','White','Gerente','M','01/10/45',300000,'B005');
insert into empleado values('SG37','Peter','Denver','Asistente','M','10/11/60',120000,'B006');
insert into empleado values('SG14','David','Ford','Supervisor','M','09/09/58',180000,'B003');
insert into empleado values('SA9','Mary','Lee','Asistente','F','17/09/59',90000,'B007');
insert into empleado values('SG5','Susan','Sarandon','Gerente','F','21/03/60',240000,'B003');
insert into empleado values('SL41','Julie','Roberts','Asistente','F','13/06/63',90000,'B005');
insert into empleado values('SL22','Juan','Blanco','Gerente','M','01/10/44',300000,'B005');
insert into empleado values('SG36','Luis','Jara','Asistente','M','10/11/61',120000,'B003');
insert into empleado values('SG13','David','Gates','Supervisor','M','09/09/58',180000,'B003');
insert into empleado values('SA8','Maria','Bombal','Asistente','F','17/09/59',90000,'B007');
insert into empleado values('SG4','Susana','Sarandons','Gerente','F','21/03/60',240000,'B003');
insert into empleado values('SL40','James','Bond','Asistente','F','13/06/63',90000,'B005');
insert into empleado values('SL50','Juan','Perez','Vendedor','M','13/06/63',151000,'B015');
insert into empleado values('SL60','Jaime','Soto','Vendedor','M','14/06/83',350000,'B115');
insert into empleado values('SL70','Julia','Berne','Vendedor','F','23/01/53',200000,'B215');
insert into empleado values('SL55','Jorge','Fernandez','Vendedor','M','13/06/63',151000,'B015');
insert into empleado values('SL65','Jose','Isla','Vendedor','M','14/06/83',350000,'B115');
/*==============================================================*/
/* datos: Propietario */
/*==============================================================*/
insert into propietario values('C046','Joe','Keogh','2 Fergus Dr, AberdeenAB 7SX','0122486121');
insert into propietario values('C087','Carol','Farrel','6 Achray St.Glasgow, G32 9DX','0141357741');
insert into propietario values('C040','Tina','Murphy','63 Well St, Glasgow, G42','0141943742');
insert into propietario values('C093','Tony','Shaw','12 Park PI, Glasgow, G40QR','0141225742');
insert into propietario values('C047','Jose','Casanova','El Volvan 123, Santiago AB 7SX','0122486125');
insert into propietario values('C088','Carolina','Fernandez','Macul 1800. Santiago, G32 9DX','0141357741');
insert into propietario values('C041','Cristina','Mora','Av. Matta 1800, Santiago, G42','0141943752');
insert into propietario values('C094','Tomas','Figueroa','Av. Macul 120, Santiago, G40QR','0141225542');
/*==============================================================*/
/* datos: PROPIEDAD */
/*==============================================================*/
insert into PROPIEDAD values('PA14','16 Holhead','Aberdeem','AB7 5SU','Casa','6','650','C046','SL21');
insert into PROPIEDAD values('PL94','6 Argvill St.','London','NW2','Departamento','4','400','C087','SL21');
insert into PROPIEDAD values('PG4' ,'6 Lawrence St','Glasgow','G119QX','Departamento','3','350','C040','SA9');
insert into PROPIEDAD values('PG36','2 Manor Rd','Glasgow','G114QX','Departamento','3','375','C093','SA9');
insert into PROPIEDAD values('PG21','AV. Matta 150','Santiago','G12','Casa','5','600','C087','SG5' );
insert into PROPIEDAD values('PR01','Macul 120 ','Santaigo','G129AX','Departamento','4','450','C093','SA8');
insert into PROPIEDAD values('PR02','Macul 220','Santiago','G129AX','Departamento','5','550','C093','SG13');
insert into PROPIEDAD values('PR03','Macul 420','Santiago','G129AX','Departamento','6','650','C093','SG14');
insert into PROPIEDAD values('PR04','Macul 620','Santiago','G129AX','Departamento','3','350','C093','SG36');
insert into PROPIEDAD values('PR05','Loa 100','Santiago','G129AX','Departamento','2','250','C093','SG4');
insert into PROPIEDAD values('PG16','Arturo Prats 250','Santiago','G129AX','Departamento','4','450','C047','SL22');
insert into PROPIEDAD values('PR07','Gorbea 200','Santiago','G129AX', 'Departamento','6','650','C047','SL40');
insert into PROPIEDAD values('PR08','Gomez 230','Santiago','G129AX', 'Departamento','2','250','C041','SL41');
insert into PROPIEDAD values('PR09','Garibaldi 1500','Santiago','G129AX', 'Departamento','6','650','C041','SL50');
insert into PROPIEDAD values('PR10','Las Urbinas 210','Santiago','G129AX', 'Departamento','6','650','C094','SL55');
insert into PROPIEDAD values('PR11','Lastarria 1400','Santiago','G129AX', 'Departamento','3','350','C094','SL60');
insert into PROPIEDAD values('PR12','Las Giraldas 200','Santiago','G129AX','Departamento','4','450','C093','SL70');
/*==============================================================*/
/* datos: VISITA */
/*==============================================================*/
insert into visita values('CR56','PA14','24-11-1999','muy pequeño');
insert into visita values('CR62','PA14','14-11-1999','no tiene salón');
insert into visita values('CR76','PG4','20-10-1999','muy lejos');
insert into visita values('CR72','PG16','24-06-2007','Bakan');
insert into visita values('CR72','PG36','24-06-2007','Super');
insert into visita values('CR62','PG16','25-06-2007','Cool');
insert into visita values('CR62','PG4','25-06-2007', NULL);
insert into visita values('CR62','PG36','25-06-2007','No salva');
insert into visita (numCliente, numPropiedad, fecha) values ('CR72','PG4','25-06-2007');
insert into visita (numCliente, numPropiedad, fecha) values('CR56','PG36','28-10-1999');
insert into visita (numCliente, numPropiedad, fecha) values('CR56','PG4','26-11-1999');
/*==============================================================*/
/* datos: ARRIENDO*/
/*==============================================================*/
insert into arriendo values('10024','PA14','CR62','650','Visa','1300','Y','01-06-2005','31-05-2006');
insert into arriendo values('10075','PL94','CR76','400','Contado','800','N','01-08-2005','31-01-2006');
insert into arriendo values('10012','PG21','CR74','600','Cheque','1200','Y','01-07-2005','30-06-2006');
------------crear la table T1
create table T1(
a1 integer,
a2 integer
);
create table T2(
c1 integer,
c2 varchar2(10),
c3 integer
);
select * from t1;
insert into t1 values (10,20);
insert into t1 (a2, a1) values (50, 100); ----Inserta valores sin saber el orden
select * from t1;
insert into t1 (a1) values (350); ---Arroja en A2 valor null, por que no hay dato alguno
insert into t1 values (450, NULL); ---Solo asigna el primer parametro
insert into t2 values (210, 'Pedro', 113);
insert into t2 values (220, 'Juan', 114);
insert into t2 values (230, 'Diego', 115);
insert into t2 values (240, 'Maria', 116);
insert into t2 values (250, 'Alicia', 117);
insert into t2 values (260, 'Teresa', 118);
insert into t2 values (270, 'Julia', 119);
select * from t2
where c1 >=240;
select c3, c1 from t2
where c1 >=240;
insert into t1(select c3, c1 from t2
where c1 >=240);
select * from t1;
insert into t1 (select 1000, 101 from dual); ---Inserta un solo registro
------------------------------------------Resolucion de las guias para estudiar para el control del viernes
select distinct profesion -----eliminando las profesiones duplicadas
from Empleado e , asignacion a
where e.num_emp = a.num_emp;
-----Los numeros y nombres  de los empleados que trabajan en el edificio tipo choza
select e.num_emp, nombre
from Empleado e, asignacion a, Edificio ed
where e.num_emp = a.num_emp
 and a.num_edi = ed.num_edi
 and tipo = 'Choza';

 ---Usando Join
 select e.num_emp, nombre
from Empleado e
join asignacion a on e.num_emp = a.num_emp
join Edificio ed on a.num_edi = ed.num_edi
where  tipo = 'Choza';
------------------------------------------------
---Listar los empleados que trabajan en la oficina ubicada en '163 Main Street'
select *
from empleado e
join oficina o on o.numoficina = e.numoficina
where trim (lower(calle)) = '163 main street';
------------------------------------------------------
select *from oficina;
select *
from empleado
where numoficina= (SELECT numoficina
                   from oficina
                   where lower (calle) = '163 main street');
-------------------------------------------------------------
select numEmpleado, nombre, apellido, cargo
from empleado
where numoficina in(SELECT numoficina
                   from oficina
                   where lower (ciudad) = 'glasgow');
---------------------------------------------------------      
select numEmpleado, nombre, apellido, cargo
from empleado
where numoficina not in(SELECT numoficina
                   from oficina
                   where lower (ciudad) = 'glasgow');

viernes, 22 de marzo de 2013

Consultas SQL con dos tablas


/*==============================================================*/
/* BORRADO DE TABLAS */
/*==============================================================*/

drop table TotPropEmpleado cascade constraints;

drop table ARRIENDO cascade constraints;

drop table CLIENTE cascade constraints;

drop table EMPLEADO cascade constraints;

drop table OFICINA cascade constraints;

drop table PROPIEDAD cascade constraints;

drop table PROPIETARIO cascade constraints;

drop table VISITA cascade constraints;
/*==============================================================*/
/* Tabla: ARRIENDO */
/*==============================================================*/

create table ARRIENDO (
NUMARRIENDO INTEGER not null,
NUMPROPIEDAD CHAR(4),
NUMCLIENTE CHAR(4),
RENTA FLOAT,
FORMAPAGO CHAR(10),
DEPOSITO FLOAT,
PAGADO CHAR(1),
INICIORENTA DATE,
FINRENTA DATE,
constraint PK_ARRIENDO primary key (NUMARRIENDO)
);

/*==============================================================*/
/* Tabla: CLIENTE */
/*==============================================================*/
create table CLIENTE (
NUMCLIENTE CHAR(4) not null,
NOMBRE CHAR(30),
APELLIDO CHAR(30),
DIRECCION CHAR(35),
TELEFONO CHAR(10),
TIPOPREF CHAR(25),
MAXRENT FLOAT,
constraint PK_CLIENTE primary key (NUMCLIENTE)
);

/*==============================================================*/
/* Tabla: EMPLEADO */
/*==============================================================*/
create table EMPLEADO (
NUMEMPLEADO CHAR(4) not null,
NOMBRE CHAR(30),
APELLIDO CHAR(30),
CARGO CHAR(35),
SEXO CHAR(1),
FECHNAC DATE,
SALARIO FLOAT,
NUMOFICINA CHAR(4),
constraint PK_EMPLEADO primary key (NUMEMPLEADO)
);

/*==============================================================*/
/* Tabla: OFICINA */
/*==============================================================*/
create table OFICINA (
NUMOFICINA CHAR(4) not null,
CALLE CHAR(30),
CIUDAD CHAR(25),
CODIGOPOSTAL CHAR(10),
constraint PK_OFICINA primary key (NUMOFICINA)
);

/*==============================================================*/
/* Tabla: PROPIEDAD */
/*==============================================================*/
create table PROPIEDAD (
NUMPROPIEDAD CHAR(4) not null,
CALLE CHAR(30),
CIUDAD CHAR(25),
CODIGOPOSTAL CHAR(10),
TIPO CHAR(25),
HAB INTEGER,
RENTA FLOAT,
NUMPROPIETARIO CHAR(4),
NUMEMPLEADO CHAR(4),
constraint PK_PROPIEDAD primary key (NUMPROPIEDAD)
);

/*==============================================================*/
/* Tabla: PROPIETARIO */
/*==============================================================*/

create table PROPIETARIO (
NUMPROPIETARIO CHAR(4) not null,
NOMBRE CHAR(30),
APELLIDO char(30),
DIRECCION CHAR(30),
TELEFONO CHAR(10),
constraint PK_PROPIETARIO primary key (NUMPROPIETARIO)
);

/*==============================================================*/
/* Tabla: VISITA */
/*==============================================================*/
create table VISITA (
NUMCLIENTE CHAR(4) not null,
NUMPROPIEDAD CHAR(4) not null,
FECHA DATE not null,
COMENTARIO VARCHAR2(30),
constraint PK_VISITA primary key (NUMCLIENTE, NUMPROPIEDAD, FECHA)
);

/*==============================================================*/
/* Tabla TotPropEmpleado */
/* Se utiliza para insertar desde otra tabla
/*==============================================================*/

create table TotPropEmpleado (
NUMEMPLEADO CHAR(4) not null,
totProp INTEGER,
constraint PK_TotPropEmpleado primary key (NUMEMPLEADO)
);

alter table TotPropEmpleado
add constraint FK_TotProp_REFERENCE_EMPLEADO foreign key (NUMEMPLEADO)
references EMPLEADO (NUMEMPLEADO);

alter table EMPLEADO
add constraint FK_EMPLEADO_REFERENCE_OFICINA foreign key (NUMOFICINA)
references OFICINA (NUMOFICINA);

alter table PROPIEDAD
add constraint FK_PROPIEDA_REFERENCE_EMPLEADO foreign key (NUMEMPLEADO)
references EMPLEADO (NUMEMPLEADO);

alter table VISITA
add constraint FK_VISITA_REFERENCE_CLIENTE foreign key (NUMCLIENTE)
references CLIENTE (NUMCLIENTE);

alter table VISITA
add constraint FK_VISITA_REFERENCE_PROPIEDA foreign key (NUMPROPIEDAD)
references PROPIEDAD (NUMPROPIEDAD);


/*==============================================================*/
/*= P o b l a m i e n t o d e t a b l a s =*/
/*==============================================================*/

/*==============================================================*/
/* datos: oficina */
/*==============================================================*/
insert into oficina values('B005','16 Holhead','Aberdeem','AB7 5SU');
insert into oficina values('B007','6 Argvill St.','London','NW2');
insert into oficina values('B003','164 Main street','Glasgow','G119Qx');
insert into oficina values('B004','2 Manor Rd','Glasgow','G114Qx');
insert into oficina values('B001','10 Dale Rd','bristol','G12');
insert into oficina values('B002','17 Holhead','Aberdeem','AB7 5SU');
insert into oficina values('B008','7 Argvill St.','London','NW21');
insert into oficina values('B006','163 Main street','Glasgow','G11');
insert into oficina values('B010','2 Manor Rd','Glasgow','G114x');
insert into oficina values('B011','14 Dale Rd','bristol','G2');
insert into oficina values('B017','6 Argvill St.','London','W2');
insert into oficina values('B013','166 Main street','Glasgow','9Qx');
insert into oficina values('B014','3 Manor Rd','Glasgow','Qx');
insert into oficina values('B012','11 Dale Rd','bristol','GH2');
insert into oficina values('B015','Costanera 25','Valdivia','0324');
insert into oficina values('B115','Picarte 124','Valdivia','0324');
insert into oficina values('B215','El Morro 110','Arica','10300');
insert into oficina values('B315','El Vergel 1500','Arica','123123');
insert into oficina values('B415','Av. Walker Martinez 1360','Santiago','W101');
insert into oficina values('B515','Av. Antonio Varas 929','Santiago','W101');

/*==============================================================*/
/* datos: cliente */
/*==============================================================*/
insert into cliente values('CR76','Jhon','Kay','56 High ST,Londonn,SW14EH','0207774563','Departamento',450);
insert into cliente values('CR56','Aline','Stewart','64 Fern Dr, Glasgow G42 OBL','0141324182','Departamento',350);
insert into cliente values('CR74','Mike','Ritchie','63 Well St, Glasgow,G42','0141943742','Casa',750);
insert into cliente values('CR62','Mary','Tregear','12 Park PI, Glasgow, G40QR','0141225742','Departamento',600);
insert into cliente values('CR78','Juan','Kayser','55 High ST,Londonn,SW14EH','0207774564','Departamento',450);
insert into cliente values('CR57','Alicia','Soto','63 Fern Dr,. GlasgowG42 OBL','0141324183','Departamento',350);
insert into cliente values('CR72','Miguel','Torres','62 Well St, Glasgow,G42','0141943740','Casa',750);
insert into cliente values('CR63','Maria','Perez','13 Park PI, Glasgow,G4 0QR','0141225741','Departamento',600);

/*==============================================================*/
/* datos: empleado */
/*==============================================================*/
insert into empleado values('SL21','Jhon','White','Gerente','M','01/10/45',300000,'B005');
insert into empleado values('SG37','Peter','Denver','Asistente','M','10/11/60',120000,'B006');
insert into empleado values('SG14','David','Ford','Supervisor','M','09/09/58',180000,'B003');
insert into empleado values('SA9','Mary','Lee','Asistente','F','17/09/59',90000,'B007');
insert into empleado values('SG5','Susan','Sarandon','Gerente','F','21/03/60',240000,'B003');
insert into empleado values('SL41','Julie','Roberts','Asistente','F','13/06/63',90000,'B005');
insert into empleado values('SL22','Juan','Blanco','Gerente','M','01/10/44',300000,'B005');
insert into empleado values('SG36','Luis','Jara','Asistente','M','10/11/61',120000,'B003');
insert into empleado values('SG13','David','Gates','Supervisor','M','09/09/58',180000,'B003');
insert into empleado values('SA8','Maria','Bombal','Asistente','F','17/09/59',90000,'B007');
insert into empleado values('SG4','Susana','Sarandons','Gerente','F','21/03/60',240000,'B003');
insert into empleado values('SL40','James','Bond','Asistente','F','13/06/63',90000,'B005');
insert into empleado values('SL50','Juan','Perez','Vendedor','M','13/06/63',151000,'B015');
insert into empleado values('SL60','Jaime','Soto','Vendedor','M','14/06/83',350000,'B115');
insert into empleado values('SL70','Julia','Berne','Vendedor','F','23/01/53',200000,'B215');
insert into empleado values('SL55','Jorge','Fernandez','Vendedor','M','13/06/63',151000,'B015');
insert into empleado values('SL65','Jose','Isla','Vendedor','M','14/06/83',350000,'B115');

/*==============================================================*/
/* datos: Propietario */
/*==============================================================*/
insert into propietario values('C046','Joe','Keogh','2 Fergus Dr, AberdeenAB 7SX','0122486121');
insert into propietario values('C087','Carol','Farrel','6 Achray St.Glasgow, G32 9DX','0141357741');
insert into propietario values('C040','Tina','Murphy','63 Well St, Glasgow, G42','0141943742');
insert into propietario values('C093','Tony','Shaw','12 Park PI, Glasgow, G40QR','0141225742');
insert into propietario values('C047','Jose','Casanova','El Volvan 123, Santiago AB 7SX','0122486125');
insert into propietario values('C088','Carolina','Fernandez','Macul 1800. Santiago, G32 9DX','0141357741');
insert into propietario values('C041','Cristina','Mora','Av. Matta 1800, Santiago, G42','0141943752');
insert into propietario values('C094','Tomas','Figueroa','Av. Macul 120, Santiago, G40QR','0141225542');

/*==============================================================*/
/* datos: PROPIEDAD */
/*==============================================================*/
insert into PROPIEDAD values('PA14','16 Holhead','Aberdeem','AB7 5SU','Casa','6','650','C046','SL21');
insert into PROPIEDAD values('PL94','6 Argvill St.','London','NW2','Departamento','4','400','C087','SL21');
insert into PROPIEDAD values('PG4' ,'6 Lawrence St','Glasgow','G119QX','Departamento','3','350','C040','SA9');
insert into PROPIEDAD values('PG36','2 Manor Rd','Glasgow','G114QX','Departamento','3','375','C093','SA9');
insert into PROPIEDAD values('PG21','AV. Matta 150','Santiago','G12','Casa','5','600','C087','SG5' );
insert into PROPIEDAD values('PR01','Macul 120 ','Santaigo','G129AX','Departamento','4','450','C093','SA8');
insert into PROPIEDAD values('PR02','Macul 220','Santiago','G129AX','Departamento','5','550','C093','SG13');
insert into PROPIEDAD values('PR03','Macul 420','Santiago','G129AX','Departamento','6','650','C093','SG14');
insert into PROPIEDAD values('PR04','Macul 620','Santiago','G129AX','Departamento','3','350','C093','SG36');
insert into PROPIEDAD values('PR05','Loa 100','Santiago','G129AX','Departamento','2','250','C093','SG4');
insert into PROPIEDAD values('PG16','Arturo Prats 250','Santiago','G129AX','Departamento','4','450','C047','SL22');
insert into PROPIEDAD values('PR07','Gorbea 200','Santiago','G129AX', 'Departamento','6','650','C047','SL40');
insert into PROPIEDAD values('PR08','Gomez 230','Santiago','G129AX', 'Departamento','2','250','C041','SL41');
insert into PROPIEDAD values('PR09','Garibaldi 1500','Santiago','G129AX', 'Departamento','6','650','C041','SL50');
insert into PROPIEDAD values('PR10','Las Urbinas 210','Santiago','G129AX', 'Departamento','6','650','C094','SL55');
insert into PROPIEDAD values('PR11','Lastarria 1400','Santiago','G129AX', 'Departamento','3','350','C094','SL60');
insert into PROPIEDAD values('PR12','Las Giraldas 200','Santiago','G129AX','Departamento','4','450','C093','SL70');

/*==============================================================*/
/* datos: VISITA */
/*==============================================================*/
insert into visita values('CR56','PA14','24-11-1999','muy pequeño');
insert into visita values('CR62','PA14','14-11-1999','no tiene salón');
insert into visita values('CR76','PG4','20-10-1999','muy lejos');
insert into visita values('CR72','PG16','24-06-2007','Bakan');
insert into visita values('CR72','PG36','24-06-2007','Super');
insert into visita values('CR62','PG16','25-06-2007','Cool');
insert into visita values('CR62','PG4','25-06-2007', NULL);
insert into visita values('CR62','PG36','25-06-2007','No salva');
insert into visita (numCliente, numPropiedad, fecha) values ('CR72','PG4','25-06-2007');
insert into visita (numCliente, numPropiedad, fecha) values('CR56','PG36','28-10-1999');
insert into visita (numCliente, numPropiedad, fecha) values('CR56','PG4','26-11-1999');

/*==============================================================*/
/* datos: ARRIENDO*/
/*==============================================================*/
insert into arriendo values('10024','PA14','CR62','650','Visa','1300','Y','01-06-2005','31-05-2006');
insert into arriendo values('10075','PL94','CR76','400','Contado','800','N','01-08-2005','31-01-2006');
insert into arriendo values('10012','PG21','CR74','600','Cheque','1200','Y','01-07-2005','30-06-2006');
/*==============================================================*/

desc oficina
desc cliente

select numempleado, trim(nombre)||' '||trim(apellido) as "Nombre Apellido", ciudad
from empleado, oficina
where empleado.numoficina = oficina.numoficina

desc empleado
desc oficina


create view empleadoofi as
select numempleado, trim(nombre)||' '||trim(apellido) as "Nombre Apellido", ciudad
from empleado, oficina
where empleado.numoficina = oficina.numoficina

select * from empleadoofi

select ciudad, count(numempleado) as "TOTAL EMPLEADOS"
from EMPLEADOOFI
group by ciudad
having count(numempleado) > 2
order by "TOTAL EMPLEADOS" desc

----
select ciudad, count(numempleado) as "TOTAL EMPLEADOS"
from empleado, oficina
where empleado.numoficina = oficina.numoficina
group by ciudad
having count(numempleado) > 2
order by count(numempleado) desc

select * from empleado

select numempleado, cargo
from empleado
where cargo='Gerente' or cargo='Supervisor' --- siempre poner los nombres igual que el de la base de datos con mayusculas y minusculas

select numempleado, cargo
from empleado
where lower(cargo) in('gerente','supervisor', 'ssistente') -- listar empleados por los siguientes cargos

select numempleado, cargo
from empleado
where lower(cargo) not in('gerente','supervisor', 'asistente')  --- lista empleados que no tengan el cargo indicado en la consulta


-- cuantos empleados tengo por cargo

select cargo, count(numempleado) as "Cantidad de empleados"
from empleado
where lower(cargo) in('gerente','supervisor', 'asistente')  --- lista empleados que no tengan el cargo indicado en la consulta
group by cargo

---cuanto gasto en los siguentes empleados
select trim(cargo) as "cargo", to_char(trim(sum(salario)), '9,999,999')  as "Gasto de dinero por cargo"
from empleado
where lower(cargo) in('gerente','supervisor', 'asistente')  ---
group by cargo

--uso de likees para buscar uns palabra especifica en la consulta
select numcliente, direccion
from cliente
where direccion like '%G4%'

--encontrar las direcciones que empiezan con 5
select numcliente, direccion
from cliente
where direccion like '%G4%'

--encontrar las direcciones que empiezan con h
select numcliente, direccion
from cliente
where trim(direccion) not like '%H%'

desc empleado

---seleccionar todas las vistas que tienen comentarios null
select * from visita
where comentario is null

---seleccionar todas las vistas que tienen comentarios not null
select * from visita
where comentario is not null


---seleccionar el caracter null por un comentario
select numcliente, nvl(comentario, 'no dejo comentarios') from visita
where comentario is null

---ordenar de mayor a menor
select numpropiedad, tipo, hab, renta
from propiedad
group by tipo

-- seleccionar propiedades que cuestan mas de 350 de alquiler
--desc propiedad
select count(numpropiedad) from propiedad
where renta > 350
----
select count(*) from propiedad
where renta > 350
---

--cuantas propiedades se visitaron en noviembre de 1999
select count(numpropiedad) from visita
where fecha >= '01/11/1999' and fecha <= '30/11/1999'

--cuantas distintas hay(visitas a casas diferentes)
select count(distinct numpropiedad) from visita
where fecha >= '01/11/1999' and fecha <= '30/11/1999'

select * from visita
desc propiedad

--listar numero de empleados por oficina de ciudad
select ciudad, count(numempleado) as "numero de empleados", to_char(sum(salario), '9,999,999') as "suma de sueldos"
from oficina, empleado
where oficina.numoficina = empleado.numoficina
group by ciudad

----numero de oficina

select oficina.NUMOFICINA, count(numempleado) as "numero de empleados", to_char(sum(salario), '9,999,999') as "suma de sueldos"
from oficina, empleado
where oficina.numoficina = empleado.numoficina
group by oficina.NUMOFICINA
order by oficina.NUMOFICINA

-- incluir ciudad de oficina y ordebnar por oficina
select trim(oficina.NUMOFICINA)as "NUMERO OFICINA",TRIM(oficina.ciudad) AS "CIUDAD"
, TRIM(count(numempleado)) as "numero de empleados", to_char(sum(salario), '9,999,999') as "suma de sueldos"
from oficina, empleado
where oficina.numoficina = empleado.numoficina
group by oficina.NUMOFICINA, oficina.ciudad
order by oficina.NUMOFICINA



desc empleado

desc oficina

viernes, 15 de marzo de 2013

Trabajo de Funciones

Tarea en clases el 15-03-2013: Sobre funciones:

---ROUND devuelve un valor de numeric_expression redondeado, independientemente del tipo de datos, cuando length es un número negativo.
SELECT ROUND(748.58, -2 )
from dual
----------------------------------------------
----------------------------------------------ROUND siempre devuelve un valor.Si length es un valor negativo y mayor que el número de dígitos anteriores al separador decimal, ROUND devuelve 0.
select round(748.58, -4)
from dual
--------------------------------------------------------------------------------------------
-------------------------------La Funcion Trunc. Si el parámetro es un número devuelve la parte entera.
SELECT TRUNC(9.99)
FROM DUAL;
--------------------------------------------------------------------------------------
---Funcion MOD:-- Devuelve el modulo de dividir 20/15  FROM DUAL
SELECT MOD(20,15)
from dual
-------------------------------------------------------
http://www.devjoker.com/contenidos/articulos/67/Funciones-integradas-de-PLSQL.aspx


-- Uso de funcion to_namber, es para convertit un string a
-- numero usando los siguientes formatos

select to_number('5,540.52','9,999.99')
from dual

select to_number('250','999')
from dual

select to_number('25','99')
from dual

--------------------------------------------------------------------------------

-- el uso de to_char es para dar un valor o formato a un texto o variable

select to_char(51.254,'99.99') -- solo mostraremos dos numeros despues de la coma
from dual

select to_char(sysdate, 'dd') -- en esta opción solo tomaremos el dia de la fecha actual
from dual

- months_between: retorna el numero de meses entre las fechas enviadas como argumento.
Ejemplo:

select months_between('19/05/2003','21/06/05') from dual;-- retorna

-----------------------------------------------------------------------------------------------------------------------------------------------------

- add_months: agrega a una fecha, un número 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"

-----------------------------------------------------------------------------------------------------------------------------------------------------
- next_day(fecha,dia): retorna una fecha correspondiente al primer día 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;

---------------------------------------------------------------------------------------------------------------------------------------------------

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

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


url:
http://www.oracleya.com.ar/temarios/descripcion.php?cod=181&punto=23







miércoles, 13 de marzo de 2013

Clase del 13-03-2013

PBD3501: Profesor Erwin Fischer

*create sequence...(Investigar funcion) : seqcliente. Se crea en la base de datos y se almacena en ella, se usa de la siguente manera:
seqcliente.nextval (me dara el valor que corresponde)

create table Cliente(
idCliente integer not null,
nombre varchar2(25)not null,
apellido varchar2(30) not null,
fechaNac date
);  ---Creacion de la tabla
----------------------------------------------------------------
create  sequence sqCliente
start with 10
increment by 10;  --crea secuencia para incrementar
-----------------------------------------------------------
select sqCliente.nextval
from dual;   ---Selecciona la secuencia
---------------------------------------------------------------
alter table Cliente
add  rut varchar(12);  ---Modifica la Tabla y se le agrega un campo
----------------------------------------------------------------
desc Cliente  ---Describe la tabla
-------------------------------------------------------------------
insert into Cliente values (sqCliente.nextval,'Paparatsi', 'Argentino', '24/12/1920', '1-9');
insert into Cliente values(sqCliente.nextval, 'Sepulveda', 'Peruano', '25/10/1992', '6969');
insert into Cliente values(sqCliente.nextval, 'Aceituno', 'Boliviano', '12/04/1992','6965'); ---Insertar Datos
--------------------------------------------------------------------------------------------------------
drop sequence sqCliente;  --Borra la Secuencia
-----------------------------------------------------------------------------------------------
drop table Cliente;  ---Borra la Tabla
--------------------------------------------------------------------------------------------------
select * from Cliente;  ---Consultamos la Tabla
--------------------------------------------------------------------------------------------
select nombre from Cliente;  --Selecciona los nombres de la Tabla
--------------------------------------------------------------------------
select *
from Cliente
where fechaNac >= '01/01/1920'
and fechaNac <= '31/12/1992'  ---Selecciona fechas desde y hasta
----------------------------------------------------------------------------
select *
from Cliente
where fechaNac between '01/01/1920'
and '31/12/1992'
--------------------------------------------------------------------------
select *
from Cliente
where extract (year from fechaNac)=1920
----------------------------------------------------------------------
select extract(year from sysdate) from dual;
-----------------------------------------
select trim (to_char(idCliente))as idCliente, rut, nombre, apellido, to_char(fechaNac, 'dd/mm/yy') as "Fecha de Nacimiento"
from Cliente
where extract (year from fechaNac)=1920