Este blog está pensado para la gestión de los recursos del curso Bases de Datos de la Universidad Autónoma Latinoamericana. Semestre III
jueves, 8 de noviembre de 2012
viernes, 2 de noviembre de 2012
jueves, 1 de noviembre de 2012
Correspondencias entre SQL y MONGO
| MySQL term | Mongo term/concept |
|---|---|
| database | database |
| table | collection |
| index | index |
| row | BSON document |
| column | BSON field |
| join | embedding and linking |
| primary key | _id field |
| group by | aggregation |
| SQL Statement | Mongo Statement |
|---|---|
CREATE TABLE USERS (a Number, b Number) | implicit; can also be done explicitly withdb.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".
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
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 ;
Suscribirse a:
Comentarios (Atom)


















