Advertisement
ADL_Rodrigo_Silva

Untitled

Jan 19th, 2022
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2.  
  3. create table pokemones
  4. (
  5.     pokedex numeric,
  6.     nombre varchar(10),
  7.     tipo1 varchar(10),
  8.     tipo2 varchar(10),
  9.     primary key (pokedex)
  10. );
  11.  
  12.  
  13.  
  14. CREATE TABLE mis_pokemones
  15. (
  16.     pokedex numeric,
  17.     fecha_captura DATE,
  18.     lugar VARCHAR(30),
  19.     huevo CHAR(5),
  20.     peso decimal(10,2),
  21.     estatura decimal(10,2),
  22.     FOREIGN KEY (pokedex) REFERENCES pokemones(pokedex)
  23. );
  24.  
  25.  
  26. select * from pokemones;
  27. select * from mis_pokemones;
  28.  
  29.  
  30. /*  INNER JOIN */
  31.  
  32. SELECT *
  33. -- selecciona todos los registros
  34. FROM pokemones
  35. -- de la tabla pokemones
  36. INNER JOIN mis_pokemones  
  37. -- relacionada con la tabla mis_pokemones
  38. ON pokemones.pokedex=mis_pokemones.pokedex;
  39. -- donde el campo pokedex de la tabla A, sea igual a de la tabla B ORDER BY nombre;
  40. -- ordenado por nombre
  41.  
  42.  
  43. /*  LEFT JOIN */
  44.  
  45.  
  46. SELECT *
  47. -- selecciona todos los registros
  48. FROM pokemones
  49. -- de la tabla pokemones (tabla izquierda)
  50. LEFT JOIN mis_pokemones
  51. -- en relación a la tabla mis_pokemones (tabla derecha)
  52. on pokemones.pokedex=mis_pokemones.pokedex
  53. -- relacionados a través de la columna pokedex
  54. ORDER BY nombre;
  55. -- ordenados por nombre
  56.  
  57.  
  58. /*  RIGHT JOIN */
  59.  
  60.  
  61. SELECT *
  62. -- selecciona todos los registros
  63. FROM pokemones
  64. -- de la tabla pokemones (tabla izquierda)
  65. RIGHT JOIN mis_pokemones
  66. -- en relación a la tabla mis_pokemones (tabla derecha)
  67. on pokemones.pokedex=mis_pokemones.pokedex
  68. -- relacionados a través de la columna pokedex
  69. ORDER BY nombre;
  70. -- ordenados por nombre
  71.  
  72.  
  73. /*  Right Excluding JOIN  --> NO EXISTE EN POSTGRE */
  74.  
  75.  
  76. SELECT *
  77. -- selecciona todos los registros
  78. FROM pokemones
  79. -- de la tabla pokemones (tabla izquierda)
  80. RIGHT JOIN mis_pokemones
  81. -- en relación a la tabla mis_pokemones (tabla derecha)
  82. on pokemones.pokedex=mis_pokemones.pokedex
  83. -- relacionados a través de la columna pokedex
  84. where pokemones.pokedex is NULL
  85. ORDER BY nombre;
  86. -- ordenados por nombre
  87.  
  88.  
  89.  
  90. /*  FULL JOIN  */
  91.  
  92.  
  93. SELECT *
  94. -- selecciona todos los registros
  95. FROM pokemones
  96. -- de la tabla pokemones (tabla izquierda)
  97. FULL JOIN mis_pokemones
  98. -- en relación a la tabla mis_pokemones (tabla derecha)
  99. on pokemones.pokedex=mis_pokemones.pokedex
  100. -- relacionados a través de la columna pokedex
  101. ORDER BY nombre;
  102.  
  103.  
  104. /* ********************** REPASO CON EL EJEMPLO DE AYER ***************** */
  105.  
  106.  
  107. CREATE TABLE Departamentos
  108. (
  109.     Id int,
  110.     Nombre varchar(20)
  111. );
  112.  
  113. CREATE TABLE Empleados
  114. (
  115.     Nombre varchar(20),
  116.     DepartamentoId int
  117. );
  118.  
  119.  
  120. INSERT INTO Departamentos VALUES(31, 'Ventas');
  121. INSERT INTO Departamentos VALUES(32, 'Logistica');
  122. INSERT INTO Departamentos VALUES(33, 'Informatica');
  123. INSERT INTO Departamentos VALUES(34, 'Legal');
  124. INSERT INTO Departamentos VALUES(35, 'Marketing');
  125.  
  126.  
  127.  
  128. INSERT INTO Empleados VALUES('Rodrigo', 31);
  129. INSERT INTO Empleados VALUES('Cristian', 33);
  130. INSERT INTO Empleados VALUES('Vicente', NULL);
  131. INSERT INTO Empleados VALUES('Eugenia', 33);
  132. INSERT INTO Empleados VALUES('Maximiliano', 34);
  133. INSERT INTO Empleados VALUES('Matilde', 34);
  134. INSERT INTO Empleados VALUES('Turuleca', NULL);
  135.  
  136.  
  137. select * from Departamentos;
  138. select * from Empleados;
  139.  
  140.  
  141. /* ********* Cláusula INNER join  */ -- para postgree un inner join es un JOIN
  142.  
  143. select *
  144. from empleados
  145. inner join departamentos
  146. on Empleados.DepartamentoId = Departamentos.Id;
  147.  
  148.  
  149. /* ************ Cláusula LEFT JOIN  */
  150.  
  151. select *
  152. from empleados
  153. left join departamentos
  154. on Empleados.DepartamentoId = Departamentos.Id;
  155.  
  156.  
  157. /* ************** Cláusula RIGHT JOIN */
  158.  
  159. select *
  160. from empleados
  161. right join departamentos
  162. on Empleados.DepartamentoId = Departamentos.Id;
  163.  
  164.  
  165. /* **************** Cláusula FULL JOIN  */
  166.  
  167.  
  168. select *
  169. from empleados
  170. full join departamentos
  171. on Empleados.DepartamentoId = Departamentos.Id;
  172.  
  173.  
  174. /* UNA VARIANTE EXTRA */
  175. /* ************* Right Excluding JOIN ***** */ -- EN POSTGRE no EXISTE
  176.  
  177. select *
  178. from empleados
  179. Right join departamentos
  180. on Empleados.DepartamentoId = Departamentos.Id
  181. where Empleados.DepartamentoId is null;
  182.  
  183.  
  184.  
  185.  
  186. /* *************************** */
  187. /* ******** TRANSACCIONES **** */
  188. /* *************************** */
  189.  
  190.  
  191.  CREATE TABLE cuentas (
  192.  
  193.     numero_cuenta numeric NOT NULL UNIQUE PRIMARY KEY,
  194.     balance decimal(11,2) CHECK (balance >= 0.00)
  195.         -- check valida la condición que el monto sea mayor a cero
  196.  );
  197.  
  198. INSERT INTO cuentas (numero_cuenta, balance)
  199. values (1, 1000);
  200.  
  201.  
  202. INSERT INTO cuentas (numero_cuenta, balance)
  203. values (2, 1000);
  204.  
  205. select * from cuentas;
  206.  
  207.  
  208. -- inicio de transacción de ejemplo
  209.  
  210. BEGIN TRANSACTION;
  211.     select * from cuentas;
  212.      UPDATE cuentas SET balance = balance - 1000 WHERE numero_cuenta = 1;
  213.     select * from cuentas;
  214.      UPDATE cuentas SET balance = balance + 1000 WHERE numero_cuenta = 2;
  215.     select * from cuentas;
  216. commit;
  217.  
  218.  
  219. --
  220. /* acciones con maldad */
  221.  
  222. BEGIN TRANSACTION;
  223. select * from cuentas;
  224.     UPDATE cuentas SET balance = balance + 1000 WHERE numero_cuenta = 2;
  225. select * from cuentas;
  226.     UPDATE cuentas SET balance = balance - 1000 WHERE numero_cuenta = 1;
  227. select * from cuentas;
  228. commit;
  229.  
  230.  
  231. /* *************************** */
  232. /* ******* EJEMPLO PIZZAS **** */
  233. /* *************************** */
  234.  
  235.  
  236. CREATE TABLE pizzas(
  237.     id INT,
  238.     stock INT CHECK (stock >= 0.00),
  239.     costo DECIMAL,
  240.     nombre VARCHAR(25),
  241.     PRIMARY KEY(id)
  242. );
  243.  
  244. CREATE TABLE ventas(
  245.     cliente VARCHAR(20),
  246.     fecha DATE,
  247.     monto DECIMAL,
  248.     pizza INT,
  249.     FOREIGN KEY (pizza) REFERENCES pizzas(id)
  250. );
  251.  
  252. select * from PIZZAS;
  253. select * from VENTAS;
  254.  
  255. INSERT INTO pizzas (id, stock, costo, nombre) VALUES (1, 0, 12000, 'Uhlalá');
  256.  
  257.  
  258. -- transacción
  259.  
  260. BEGIN;
  261.     select * from PIZZAS;
  262.     INSERT INTO pizzas (id, stock, costo, nombre) VALUES (2, 2, 15000, 'Jamón a todo dar');
  263.     select * from PIZZAS;
  264. COMMIT;
  265.  
  266.  
  267. -- transacción con maldad (se quiere hacer una venta).
  268. --  para ello tengo que vender y reflejar la venta en la tabla venta. Y luego, disminuyo el stock en la tabla pizzas
  269.  
  270. BEGIN;
  271. select * from ventas;
  272.     INSERT INTO ventas (cliente, fecha, monto, pizza) VALUES ('Dexter Gonzalez', '2020-02-02', 12000, 1);
  273. select * from ventas;
  274. select * from pizzas;
  275.     UPDATE pizzas SET stock = stock - 1 WHERE id = 1;
  276. select * from pizzas;
  277. COMMIT;
  278.  
  279.  
  280. -- transacción con doble maldad (ni tanta)
  281.  
  282. BEGIN TRANSACTION;
  283. select * from VENTAS;
  284.     INSERT INTO ventas (cliente, fecha, monto, pizza)
  285.     VALUES ('Juan Bravo','2020-02-02', 15000, 2);
  286. select * from VENTAS;
  287. select * from PIZZAS;
  288.     UPDATE pizzas SET stock = stock - 1 WHERE id = 2;
  289. select * from PIZZAS;
  290.  
  291.     SAVEPOINT checkpoint1;
  292.  
  293. select * from VENTAS;
  294.     INSERT INTO ventas (cliente, fecha, monto, pizza)
  295.     VALUES ('Utonio Ramirez', '2020-02-02', 12000, 1);
  296. select * from VENTAS;
  297. select * from PIZZAS;
  298.     UPDATE pizzas SET stock = stock - 1 WHERE id = 1;
  299.     -- Acá recibirás un error por intentar rebajar el stock de una pizza cuyo stock es 0
  300.  
  301. rollback TO checkpoint1;
  302. commit;
  303.  
  304. select * from PIZZAS;
  305. select * from VENTAS;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement