jueves, 8 de noviembre de 2012

viernes, 2 de noviembre de 2012

jueves, 1 de noviembre de 2012

Correspondencias entre SQL y MONGO


MySQL termMongo term/concept
databasedatabase
tablecollection
indexindex
rowBSON document
columnBSON field
joinembedding and linking
primary key_id field
group byaggregation

SQL Statement Mongo Statement 
CREATE TABLE USERS (a Number, b Number)
implicit; can also be done explicitly with
db.createCollection("mycoll")
ALTER TABLE users ADD ...
implicit
  
INSERT INTO USERS VALUES(3,5)
db.users.insert({a:3,b:5})
  
SELECT a,b FROM users
db.users.find({}, {a:1,b:1})
SELECT * FROM users
db.users.find()
SELECT * FROM users WHERE age=33
db.users.find({age:33})
SELECT a,b FROM users WHERE age=33
db.users.find({age:33}, {a:1,b:1})
SELECT * FROM users WHERE age=33 ORDER BY name
db.users.find({age:33}).sort({name:1})
SELECT * FROM users WHERE age>33
db.users.find({age:{$gt:33}})
SELECT * FROM users WHERE age!=33
db.users.find({age:{$ne:33}})
SELECT * FROM users WHERE name LIKE "%Joe%"
db.users.find({name:/Joe/})
SELECT * FROM users WHERE name LIKE "Joe%"
db.users.find({name:/^Joe/})
SELECT * FROM users WHERE age>33 AND age<=40
db.users.find({'age':{$gt:33,$lte:40}})
SELECT * FROM users ORDER BY name DESC
db.users.find().sort({name:-1})
SELECT * FROM users WHERE a=1 and b='q'
db.users.find({a:1,b:'q'})
SELECT * FROM users LIMIT 10 SKIP 20
db.users.find().limit(10).skip(20)
SELECT * FROM users WHERE a=1 or b=2
db.users.find( { $or : [ { a : 1 } , { b : 2 } ] } )
SELECT * FROM users LIMIT 1
db.users.findOne()
SELECT order_id FROM orders o, order_line_items li WHERE li.order_id=o.order_id AND li.sku=12345
db.orders.find({"items.sku":12345},{_id:1})
SELECT customer.name FROM customers,orders WHERE orders.id="q179" AND orders.custid=customer.id
var o = db.orders.findOne({_id:"q179"});
var name = db.customers.findOne({_id:o.custid})
  
SELECT DISTINCT last_name FROM users
db.users.distinct('last_name')
SELECT COUNT(*y)
FROM users
db.users.count()
SELECT COUNT(*y)
FROM users where AGE > 30
db.users.find({age: {'$gt': 30}}).count()
SELECT COUNT(AGE) from users
db.users.find({age: {'$exists': true}}).count()
  
CREATE INDEX myindexname ON users(name)
db.users.ensureIndex({name:1})
CREATE INDEX myindexname ON users(name,ts DESC)
db.users.ensureIndex({name:1,ts:-1})
  
EXPLAIN SELECT * FROM users WHERE z=3
db.users.find({z:3}).explain()
  
UPDATE users SET a=1 WHERE b='q'
db.users.update({b:'q'}, {$set:{a:1}}, false, true)
UPDATE users SET a=a+2 WHERE b='q'
db.users.update({b:'q'}, {$inc:{a:2}}, false, true)
  
DELETE FROM users WHERE z="abc"
db.users.remove({z:'abc'});

Consultas Mongodb


Sorting (clasificación): consultas ordenadas.
Las consultas en MongoDB pueden devolver los resultados ordenados.
Ejemplo:Para devolver todos los documentos y ordenar por apellido en orden ascendente,la consulta seria de la siguiente manera:

db.registro.find({}).sort({apellido: 1});




slaveOk (consultas secundarias):

Cuando se consulta un conjunto de réplicas,  para realizar una consulta  (arbitrariamente seleccionado) secundaria, la consulta se puede ejecutar con la opción slaveOk.
En la consola mongo, para indicar el modo slaveOk, escriba lo siguiente:

rs.slaveOk (); / / permiten consultar una secundaria
db.users.find ()

Al indicar slaveOk, estamos declarando que "es una lectura secundaria".


Ejercicios en clase mongodb



Sentencias básicas mongodb


para crear base de datos en mongo

use (nombre de la bd)


crear un documento
// video seria el nombre de la coleccion

doc={nombrepelicula: 'real'}
db.video.save(doc)
db.video.find()

para mostrar todos los indices

db.system.indexes.find()

db.(nombre de la coleccion).ensureindexes({edad:1})

db.indexes.find ({ns:"basedato.video"})

para ver las bases de datos que hay
show dbs


jueves, 18 de octubre de 2012

SQL vs NoSQL


Google I / O 2012 - SQL vs NoSQL: La batalla de los backends



FACTUAL


FACTUAL

Esta plataforma permite incorporar datos en aplicaciones y descargas, el objetivo de la plataforma es permitir a los usuarios cargar grandes conjuntos de datos en la plataforma y al mismo tiempo permite que otros usuarios puedan navegar o consultar libremente los datos y hasta descargarlo para su propio uso. En pocas palabras lo que buscan es hacer que los datos sean mas accesibles ofreciendo calidad, bajo costo y menos espacio de memoria para su almacenamiento. Ofrece datos estructurados y y permite compartir las fuentes a los desarrolladores a través de ambos descarga y acceso a la API en términos liberales.
Factual proporciona acceso a los datos globales definitivos para la alimentación de red y las aplicaciones móviles, publicidad móvil y soluciones empresariales.

jueves, 11 de octubre de 2012

Infochimps


 Infochimps
Es una plataforma que permite el manejo e infraestructura de grandes cantidades de datos que se manejan en la nube ya que manejar información en la nube permite acceder a ella desde cualquier lugar y en cualquier momento según las necesidades. Infochimps permite una sincronización los grandes volúmenes de datos con el entorno existente. Permite almacenar y analizar su información de aplicaciones de Hadoop o NoSql en tiempo real.
Infochimps es una plataforma que ha creado uno de los mayores mercados de datos, ya que sabe el manejo adecuado de grandes cantidades de datos y su escalabilidad, es experto en el manejo de datos en la nube, sus servicios se adaptan a grandes desafíos de datos de manera escalable, flexible y económica.
Infochimps se puede considerar como un mercado de “información”, donde cualquiera puede poner a la venta o compartir de forma gratuita todo conjunto de datos que se haya recolectado.

Indices


INDICES BASES DE DATOS

Los índices son objetos de base de datos diseñados para mejorar el rendimiento de las consultas y que son aplicados a una o mas tablas o vistas. Su estructura permite facilitar una respuesta rápida de conjuntos de resultados. Los índices hacen de asistentes al motor de bases de datos en la ubicación de registros,  guardando parejas de elementos: el elemento que se desea indexar y su posición en la base de datos.
los índices generalmente contienen solamente los campos clave de acuerdo con los que la tabla será ordenada, y excluyen el resto de los detalles de la tabla), lo que da la posibilidad de almacenar en memoria los índices de tablas que no cabrían en ella. En una base de datos relacional un índice es una copia de una parte de la tabla.
Existen los índices agrupados y los no agrupados, los no agrupados es una estructura independiente del ordenamiento físico de los registros en la tabla. Un índice agrupado contiene los registros de la tabla ordenados según la clave del índice agrupado (físicamente)

jueves, 13 de septiembre de 2012

triggers


create trigger insertar_persona2 AFTER INSERT ON persona
FOR EACH ROW
INSERT INTO persona2 (nombre_nuevo, apellido_nuevo, telefono_nuevo, direccion_nuevo, email_nuevo, celular_nuevo, usuario. modificado, proceso, idpersona);


create trigger modifica_persona2 before update on persona
FOR EACH ROW
INSERT INTO persona2 (nombre_anterior, apellido_anterior, telefono_anterior, direccion_anterior, email_anterior, celular_anterior,nombre_nuevo, apellido_nuevo, telefono_nuevo, direccion_nuevo, email_nuevo, celular_nuevo, usuario, modificado,  idpersona)
values (old.nombre, old.apellido,old.telefono,old.direccion, old.email, old.celular, new.nombre, new.apellido,new.telefono, new.direccion, new.email, new.celular, current_user(), now(), new.idpersona);



miércoles, 5 de septiembre de 2012

Procedimiento Abogados


delimiter //
CREATE PROCEDURE audiencia (in idpersona VARCHAR(10))
block1: BEGIN
declare  ultfech date;
declare  cont int (20) ;
declare  idcaso1 varchar (20) ;
declare cursor1 for select audiencia.fecha from audiencia;persona;caso;tipocaso where audiencia.idcaso=caso.idcaso
and persona.idpersona=audiencia.idacusado
and caso.idtipocaso=tipocaso.idtipocaso
and audiencia.fecha>=( DATE_ADD( CURDATE() ,INTERVAL-12 MONTH))
cont=0;
OPEN cursor1;
cursor1: LOOP
FETCH cursor1 Into  ultfech
if ( ultfech >=( DATE_ADD( CURDATE() ,INTERVAL-12 MONTH))) then
cont=cont+1;
END IF
END LOOP cursor1;
if (cont=0)then
UPDATE caso SET idestadocaso="1" WHERE  idcaso=idcaso;
END IF
close  audiencia;

//

Base de Datos Abogados


DROP DATABASE IF EXISTS acta;

CREATE DATABASE caso;

USE  caso;

DROP TABLE IF EXISTS persona;
CREATE TABLE persona(idpersona varchar(10) not null,
nombres varchar(100) not null, apellidos varchar(100) not null,
telefono varchar(15) not null, direccion varchar(100) not null,
email varchar(100), celular varchar(20),
PRIMARY KEY(idpersona));

DROP TABLE IF EXISTS rol;
CREATE TABLE rol (idrol varchar(2) not null,
descripcion varchar(100) not null,
PRIMARY KEY(idrol));

DROP TABLE IF EXISTS tipocaso;
CREATE TABLE tipocaso (idtipocaso varchar(2) not null,
descripcion varchar(100) not null,
PRIMARY KEY(idtipocaso));

DROP TABLE IF EXISTS fallo;
CREATE TABLE fallo (idfallo varchar(2) not null,
descripcion varchar(100) not null,
PRIMARY KEY(idfallo));

DROP TABLE IF EXISTS caso;
CREATE TABLE caso (idcaso varchar(5) not null,
descripcion varchar(200) not null,
idtipocaso varchar(2) not null,
idfallo varchar(2) not null,
PRIMARY KEY(idcaso),
FOREIGN KEY(idtipocaso) REFERENCES tipocaso(idtipocaso),
FOREIGN KEY(idfallo) REFERENCES fallo(idfallo));

DROP TABLE IF EXISTS sede;
CREATE TABLE sede (idsede varchar(2) not null,
nombre varchar(100) not null,
direccion varchar(100) not null,
PRIMARY KEY(idsede));

DROP TABLE IF EXISTS personarolcaso;
CREATE TABLE personarolcaso (idpersona varchar(10) not null,
idrol varchar(2) not null,
idcaso varchar(5) not null,
FOREIGN KEY(idpersona) REFERENCES persona(idpersona),
FOREIGN KEY(idrol) REFERENCES rol(idrol),
FOREIGN KEY(idcaso) REFERENCES caso(idcaso));

DROP TABLE IF EXISTS audiencia;
CREATE TABLE audiencia (idaudiencia varchar(2) not null,
fecha date not null,
idcaso varchar(5) not null,
idsede varchar(2) not null,
idjuez varchar(10) not null,
idabogadodefensor varchar(10) not null,
idabogadoacusador varchar(10) not null,
idfiscal varchar(10) not null,
idacusado varchar(10) not null,
PRIMARY KEY(idaudiencia),
FOREIGN KEY(idjuez) REFERENCES persona(idpersona),
FOREIGN KEY(idabogadodefensor) REFERENCES persona(idpersona),
FOREIGN KEY(idfiscal) REFERENCES persona(idpersona),
FOREIGN KEY(idacusado) REFERENCES persona(idpersona),
FOREIGN KEY(idsede) REFERENCES sede(idsede));

DROP TABLE IF EXISTS testigoaudiencia;
CREATE TABLE testigoaudiencia (idaudiencia varchar(2) not null,
idpersona varchar(10) not null,
FOREIGN KEY(idaudiencia) REFERENCES audiencia(idaudiencia),
FOREIGN KEY(idpersona) REFERENCES persona(idpersona));

INSERT INTO persona
VALUES ('71000000','SARA','GARCIA','1111111','CARRERA 1 CALLE 100','sara@garcia.com','1111111111'),
('72000000','LAURA','AGUDELO','2222222','CARRERA 2 CALLE 200','laura@agudelo.com','2222222222'),
('73000000','ANA','MONTOYA','3333333','CARRERA 3 CALLE 300','ana@montoya.com','3333333333'),
('74000000','HAROL','VALDES','4444444','CARRERA 4 CALLE 400','harol@valdes.com','4444444444'),
('75000000','SAMUEL','GARCIA','5555555','CARRERA 5 CALLE 500','samuel@garcia.com','5555555555'),
('76000000','EDWIN','ZAPATA','6666666','DESCONOCIDO','','6666666666'),
('77000000','DARIO','VALENCIA','7777777','DESCONOCIDO','','7777777777'),
('78000000','PEDRO','IDARRAGA','8888888','DESCONOCIDO','','8888888888'),
('79000000','ANIBAL','MAYA','9999999','DESCONOCIDO','','9999999999'),
('80000000','VANESA','MONSALVE','8000000','CARRERA 30 EDIFICIO 50','vanesa@medellin.co','8000000000'),
('81000000','MABEL','COLORADO','8111111','CARRERA 35 EDIFICIO 55','mabel@medellin.co','8111111111'),
('82000000','HARRY','MONSALVE','8222222','CARRERA 45 EDIFICIO 65','harry@medellin.co','8222222222'),
('83000000','TOMY','MONSALVE','8333333','CARRERA 35 EDIFICIO 55','tomy@medellin.co','8333333333'),
('84000000','LEONEL','LOAIZA','8444444','BELLAVISTA AV. 56','','8444444444');

INSERT INTO rol
VALUES ('01','JUEZ'),('02','FISCAL'),('03','ABOGADO DEFENSOR'),('04','ABOGADO ACUSADOR'),
('05','ACUSADO'),('06','TESTIGO'),('07','JURADO'),('08','SECRETARIO');

INSERT INTO tipocaso
VALUES ('01','HOMICIDIO'),('02','HURTO CALIFICADO'),('03','LESIONES PERSONALES'),
('04','VIOLACION'),('05','PREVARICATO'),('06','FALSEDAD EN DOCUMENTO PUBLICO'),
('07','EVASION DE IMPUESTOS'),('08','DEMANDA POR ALIMENTOS');

INSERT INTO fallo
VALUES ('01','EN PROCESO'),('02','FALLADO'),('03','SUSPENDIDO'),('04','EN RECESO'),
('05','CANCELADO');

INSERT INTO caso
VALUES ('C0001','ASESINATO PERSONA MAYOR EN LA CRA 50 CALLE 50 EN MEDELLIN','01','01'),
('C0002','EVASION DE IMPUESTOS POR PARTE DEL CIUDADANO REY','07','01'),
('C0003','VIOLACION DEL MENOR DE EDAD XXX POR PARTE DEL CIUDADANO X','04','02'),
('C0004','FALTA A LAS OBLIGACIONES PARENTALES POR PARTE DEL SEÑOR ABC RESPECTO DE SU HIJO','08','04'),
('C0005','ROBO A MANO ARMADA DEL VEHICULO XYZ POR PARTE DEL MENOR DE EDAD AAA','02','05'),
('C0006','LESIONES PERSONALES CON ARMA BLANCA','03','01');

INSERT INTO sede
VALUES ('S1','EDIFICIO DEL CAFE','CARRERA 46 CALLE 49'),('S2','EDFICIO FURATENA','CALLE 50 CARRERA 47'),
('S3','EDIFICIO COLTEJER','CARRERA 46 CALLE 52'),('S4','OFICINA REGIONAL MEDELLIN','CARRERA 25 CALLE 80'),
('S5','OFICINA POBLADO','CALLE 10 CARRERA 39');

INSERT INTO personarolcaso
VALUES ('71000000','01','C0002'),('72000000','02','C0002'),('71000000','03','C0001'),
('73000000','04','C0005'),('72000000','04','C0005'),('75000000','01','C0003'),
('75000000','01','C0004'),('75000000','03','C0002'),('74000000','04','C0001'),
('74000000','02','C0004'),('74000000','04','C0002'),('76000000','05','C0002'),
('71000000','03','C0003'),('72000000','04','C0003'),('73000000','02','C0003'),
('77000000','05','C0003'),('71000000','03','C0004'),('73000000','04','C0004'),
('78000000','05','C0004'),('72000000','01','C0001'),('73000000','02','C0001'),
('79000000','05','C0001'),('80000000','02','C0006'),('81000000','03','C0006'),
('82000000','06','C0006'),('83000000','01','C0006'),('84000000','05','C0006'),
('79000000','04','C0006');

INSERT INTO audiencia
VALUES ('01','2012-07-4','C0002','S5','71000000','75000000','74000000','72000000','76000000'),
('02','2012-06-15','C0003','S2','75000000','71000000','72000000','73000000','77000000'),
('03','2012-05-19','C0004','S3','75000000','71000000','73000000','74000000','78000000'),
('04','2012-04-25','C0001','S1','72000000','71000000','74000000','73000000','79000000'),
('05','2012-03-06','C0006','S4','83000000','81000000','79000000','80000000','84000000');

INSERT INTO testigoaudiencia 
VALUES ('01','71000000'),('01','75000000'),('01','74000000'),('01','72000000'),('01','76000000'),
('02','75000000'),('02','71000000'),('02','72000000'),('02','73000000'),('02','77000000'),
('03','75000000'),('03','71000000'),('03','73000000'),('03','74000000'),('03','78000000'),
('04','72000000'),('04','71000000'),('04','74000000'),('04','73000000'),('04','79000000'),
('05','83000000'),('05','81000000'),('05','79000000'),('04','80000000'),('04','84000000');


miércoles, 9 de mayo de 2012

Cursor


delimiter //

create procedure clientedelmes()

begin
declare Cid_cliente varchar (20);
declare Cmes date;
declare Cnombreclient varchar (40);
declare Cvalor int (40);

declare cursorclientemes cursor for Select cliente.id_cliente, cliente.nombre_cliente, transacciones.valortransaccion,  transacciones.fechatransaccion
from cliente,transacciones 
where transacciones.id_cliente = cliente.id_cliente 
and month (fechatransaccion)= MONTH(DATE_ADD(CURDATE(),INTERVAL - 1 MONTH))
and valortransaccion >= (50000)
group by id_cliente;

open cursorclientemes;
cursorclientemes_loop: LOOP
fetch cursorclientemes into Cid_cliente, Cnombreclient, Cvalor, Cmes;

insert into clientemes values (Cid_cliente, Cnombreclient, Cvalor, Cmes);

END LOOP cursorclientemes_loop; 
close cursorclientemes;
END;
//

call clientedelmes//





domingo, 22 de abril de 2012

Procedimiento


CREATE PROCEDURE realizarcompra (in pid_articulo varchar (20), pid_transaccion varchar (20), pid_cliente varchar (20), pfechatransaccion date, pvalor_transaccion int (40))
begin
insert into transacciones (id_cliente,id_articulo,id_transaccion,fechatransaccion,valor_transaccion) values ("3", "4", "1", "2010-10-10", "600000");
insert into transaccionxarticulo (id_articulo, id_transaccion) values ("401", "03");
end


Vistas


☻Vista1: Muestra el tipo y precio de cada articulo

create view vista1 as
select articulo.id_articulo,articulo.nombre,articulo.id_tipo,articulo.valor,tipo.descripcion from articulo,tipo
where articulo.id_tipo = tipo.id_tipo;
select * from vista1 ;




 ☻Vista2: Muestra las ventas que realiza un empleado en 3 meses

create view vista2 as
select empleado.id_empleado,empleado.nombre_emp
from empleado,transacciones
where empleado.id_empleado=transacciones.id_empleado
and fechatransaccion > (date_add(curdate(),interval -  3 month )) ;
select * from vista2 ;


☻ Consulta que utiliza las dos vistas (vista1 y vista2) y muestre que artículos ha vendido cada empleado

select vista1.id_articulo , vista1.nombre, vista2. nombre_emp, fechatransaccion  from artxtrans, transacciones, vista1, vista2
where vista1.id_articulo=artxtrans.id_articulo
and vista2.id_empleado=transacciones.id_empleado
and transacciones.id_transaccion=artxtrans.id_transaccion;


Consultas por descripción


select descripcion,count(*) from tipo
join articulo
on tipo.id_tipo = articulo.id_tipo
join artxtrans
on artxtrans.id_articulo=articulo.id_articulo
join transacciones
on transacciones.id_transaccion = artxtrans.id_transaccion
group by (descripcion);


Consultas Join


CONSULTA left outer join
select nombre,id_transaccion from articulo
left outer join transacciones
on transacciones.id_articulo = articulo.id_articulo
group by nombre;


select nombre_cliente, email,id_transaccion from cliente
left outer join transacciones
on transacciones.id_cliente = cliente.id_cliente
group by nombre_cliente;


CONSULTA right outer join 
select nombre,id_transaccion from articulo
right outer join transacciones
on transacciones.id_articulo = articulo.id_articulo
group by nombre;


select nombre_cliente,email,id_transaccion from cliente
right outer join transacciones
on transacciones.id_cliente = cliente.id_cliente
group by nombre_cliente;

CONSULTA join
Consulta joing que muestre el nombre, teléfono del cliente ademas del vendedor que hizo la venta y el articulo que se compro
select nombre_cliente,email,nombre_emp,nombre
from transacciones
join cliente
on transacciones.id_cliente = cliente.id_cliente
join empleado
on transacciones.id_empleado = empleado.id_empleado
join artxtrans
on artxtrans.id_transaccion = transacciones.id_transaccion
join articulo
on articulo.id_articulo = artxtrans.id_articulo
where fechatransaccion >  (date_add(curdate(),interval - 1 month)) ;






Consulta de una fecha especifica


Select cliente.id_cliente, cliente.nombre_cliente, transacciones.id_transaccion, transacciones.fechatransaccion, dayname('2012-02-03'),monthname('2012-02-03')
from cliente,transacciones,artxtrans,articulo
where transacciones.id_transaccion = artxtrans.id_transaccion
and transacciones.id_cliente = cliente.id_cliente
and fechatransaccion = ('2012-02-03')
group by id_cliente
order by nombre_cliente asc ;

Select cliente.id_cliente, cliente.nombre_cliente, transacciones.id_transaccion, transacciones.fechatransaccion, dayname('2012-02-15'),monthname('2012-02-15')
from cliente,transacciones,artxtrans,articulo
where transacciones.id_transaccion = artxtrans.id_transaccion
and transacciones.id_cliente = cliente.id_cliente
and fechatransaccion = ('2012-02-15')
group by id_cliente
order by nombre_cliente asc ;