Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- create table pokemones
- (
- pokedex numeric,
- nombre varchar(10),
- tipo1 varchar(10),
- tipo2 varchar(10),
- primary key (pokedex)
- );
- CREATE TABLE mis_pokemones
- (
- pokedex numeric,
- fecha_captura DATE,
- lugar VARCHAR(30),
- huevo CHAR(5),
- peso decimal(10,2),
- estatura decimal(10,2),
- FOREIGN KEY (pokedex) REFERENCES pokemones(pokedex)
- );
- select * from pokemones;
- select * from mis_pokemones;
- /* INNER JOIN */
- SELECT *
- -- selecciona todos los registros
- FROM pokemones
- -- de la tabla pokemones
- INNER JOIN mis_pokemones
- -- relacionada con la tabla mis_pokemones
- ON pokemones.pokedex=mis_pokemones.pokedex;
- -- donde el campo pokedex de la tabla A, sea igual a de la tabla B ORDER BY nombre;
- -- ordenado por nombre
- /* LEFT JOIN */
- SELECT *
- -- selecciona todos los registros
- FROM pokemones
- -- de la tabla pokemones (tabla izquierda)
- LEFT JOIN mis_pokemones
- -- en relación a la tabla mis_pokemones (tabla derecha)
- on pokemones.pokedex=mis_pokemones.pokedex
- -- relacionados a través de la columna pokedex
- ORDER BY nombre;
- -- ordenados por nombre
- /* RIGHT JOIN */
- SELECT *
- -- selecciona todos los registros
- FROM pokemones
- -- de la tabla pokemones (tabla izquierda)
- RIGHT JOIN mis_pokemones
- -- en relación a la tabla mis_pokemones (tabla derecha)
- on pokemones.pokedex=mis_pokemones.pokedex
- -- relacionados a través de la columna pokedex
- ORDER BY nombre;
- -- ordenados por nombre
- /* Right Excluding JOIN --> NO EXISTE EN POSTGRE */
- SELECT *
- -- selecciona todos los registros
- FROM pokemones
- -- de la tabla pokemones (tabla izquierda)
- RIGHT JOIN mis_pokemones
- -- en relación a la tabla mis_pokemones (tabla derecha)
- on pokemones.pokedex=mis_pokemones.pokedex
- -- relacionados a través de la columna pokedex
- where pokemones.pokedex is NULL
- ORDER BY nombre;
- -- ordenados por nombre
- /* FULL JOIN */
- SELECT *
- -- selecciona todos los registros
- FROM pokemones
- -- de la tabla pokemones (tabla izquierda)
- FULL JOIN mis_pokemones
- -- en relación a la tabla mis_pokemones (tabla derecha)
- on pokemones.pokedex=mis_pokemones.pokedex
- -- relacionados a través de la columna pokedex
- ORDER BY nombre;
- /* ********************** REPASO CON EL EJEMPLO DE AYER ***************** */
- CREATE TABLE Departamentos
- (
- Id int,
- Nombre varchar(20)
- );
- CREATE TABLE Empleados
- (
- Nombre varchar(20),
- DepartamentoId int
- );
- INSERT INTO Departamentos VALUES(31, 'Ventas');
- INSERT INTO Departamentos VALUES(32, 'Logistica');
- INSERT INTO Departamentos VALUES(33, 'Informatica');
- INSERT INTO Departamentos VALUES(34, 'Legal');
- INSERT INTO Departamentos VALUES(35, 'Marketing');
- INSERT INTO Empleados VALUES('Rodrigo', 31);
- INSERT INTO Empleados VALUES('Cristian', 33);
- INSERT INTO Empleados VALUES('Vicente', NULL);
- INSERT INTO Empleados VALUES('Eugenia', 33);
- INSERT INTO Empleados VALUES('Maximiliano', 34);
- INSERT INTO Empleados VALUES('Matilde', 34);
- INSERT INTO Empleados VALUES('Turuleca', NULL);
- select * from Departamentos;
- select * from Empleados;
- /* ********* Cláusula INNER join */ -- para postgree un inner join es un JOIN
- select *
- from empleados
- inner join departamentos
- on Empleados.DepartamentoId = Departamentos.Id;
- /* ************ Cláusula LEFT JOIN */
- select *
- from empleados
- left join departamentos
- on Empleados.DepartamentoId = Departamentos.Id;
- /* ************** Cláusula RIGHT JOIN */
- select *
- from empleados
- right join departamentos
- on Empleados.DepartamentoId = Departamentos.Id;
- /* **************** Cláusula FULL JOIN */
- select *
- from empleados
- full join departamentos
- on Empleados.DepartamentoId = Departamentos.Id;
- /* UNA VARIANTE EXTRA */
- /* ************* Right Excluding JOIN ***** */ -- EN POSTGRE no EXISTE
- select *
- from empleados
- Right join departamentos
- on Empleados.DepartamentoId = Departamentos.Id
- where Empleados.DepartamentoId is null;
- /* *************************** */
- /* ******** TRANSACCIONES **** */
- /* *************************** */
- CREATE TABLE cuentas (
- numero_cuenta numeric NOT NULL UNIQUE PRIMARY KEY,
- balance decimal(11,2) CHECK (balance >= 0.00)
- -- check valida la condición que el monto sea mayor a cero
- );
- INSERT INTO cuentas (numero_cuenta, balance)
- values (1, 1000);
- INSERT INTO cuentas (numero_cuenta, balance)
- values (2, 1000);
- select * from cuentas;
- -- inicio de transacción de ejemplo
- BEGIN TRANSACTION;
- select * from cuentas;
- UPDATE cuentas SET balance = balance - 1000 WHERE numero_cuenta = 1;
- select * from cuentas;
- UPDATE cuentas SET balance = balance + 1000 WHERE numero_cuenta = 2;
- select * from cuentas;
- commit;
- --
- /* acciones con maldad */
- BEGIN TRANSACTION;
- select * from cuentas;
- UPDATE cuentas SET balance = balance + 1000 WHERE numero_cuenta = 2;
- select * from cuentas;
- UPDATE cuentas SET balance = balance - 1000 WHERE numero_cuenta = 1;
- select * from cuentas;
- commit;
- /* *************************** */
- /* ******* EJEMPLO PIZZAS **** */
- /* *************************** */
- CREATE TABLE pizzas(
- id INT,
- stock INT CHECK (stock >= 0.00),
- costo DECIMAL,
- nombre VARCHAR(25),
- PRIMARY KEY(id)
- );
- CREATE TABLE ventas(
- cliente VARCHAR(20),
- fecha DATE,
- monto DECIMAL,
- pizza INT,
- FOREIGN KEY (pizza) REFERENCES pizzas(id)
- );
- select * from PIZZAS;
- select * from VENTAS;
- INSERT INTO pizzas (id, stock, costo, nombre) VALUES (1, 0, 12000, 'Uhlalá');
- -- transacción
- BEGIN;
- select * from PIZZAS;
- INSERT INTO pizzas (id, stock, costo, nombre) VALUES (2, 2, 15000, 'Jamón a todo dar');
- select * from PIZZAS;
- COMMIT;
- -- transacción con maldad (se quiere hacer una venta).
- -- para ello tengo que vender y reflejar la venta en la tabla venta. Y luego, disminuyo el stock en la tabla pizzas
- BEGIN;
- select * from ventas;
- INSERT INTO ventas (cliente, fecha, monto, pizza) VALUES ('Dexter Gonzalez', '2020-02-02', 12000, 1);
- select * from ventas;
- select * from pizzas;
- UPDATE pizzas SET stock = stock - 1 WHERE id = 1;
- select * from pizzas;
- COMMIT;
- -- transacción con doble maldad (ni tanta)
- BEGIN TRANSACTION;
- select * from VENTAS;
- INSERT INTO ventas (cliente, fecha, monto, pizza)
- VALUES ('Juan Bravo','2020-02-02', 15000, 2);
- select * from VENTAS;
- select * from PIZZAS;
- UPDATE pizzas SET stock = stock - 1 WHERE id = 2;
- select * from PIZZAS;
- SAVEPOINT checkpoint1;
- select * from VENTAS;
- INSERT INTO ventas (cliente, fecha, monto, pizza)
- VALUES ('Utonio Ramirez', '2020-02-02', 12000, 1);
- select * from VENTAS;
- select * from PIZZAS;
- UPDATE pizzas SET stock = stock - 1 WHERE id = 1;
- -- Acá recibirás un error por intentar rebajar el stock de una pizza cuyo stock es 0
- rollback TO checkpoint1;
- commit;
- select * from PIZZAS;
- select * from VENTAS;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement