Luis Miguel Gutierrez Ramirez
Armando Tacza
Armando Tacza
Erick Daniel Pérez Mata
Victor Luis Landaeta Jimenez
Diaz Mauricio
Nahun Fernando Oseguera Villalobos
Freddy Córdova Arana
Jaime Alexander Uribe Uribe
Alejandro Lopez Ramírez
Syddar Bujato Herrera
Yezid Garcia Medina
Emerson Y
Victor Luis Landaeta Jimenez
Daniel Andrés Giraldo Benites
Juan José Restrepo Patiño
Matias Nicolas Caballero Gomez
Alan Fernandez
Roberto Alessandro Castro Montoya
Nicolás Pérez
JUAN EDUARDO LÓPEZ JAIME
iVICH Dev
Antonio Madrid
Jaime Alexander Uribe Uribe
Angie Loren Casas Sanabria
Jair Aguilar Peña
Jordan Sobrino Santos
Manuel Rivera
Antonio Rafael González Ferrer
Diego Edgardo Vega Herrera
Daniel Andrés Giraldo Benites
Jose Colmenares
Francisco Javier Caicedo Izquierdo
Daniel Andrés Giraldo Benites
Rene Ismael Barrios Rojas
Joaquin Fontela
Rene Ismael Barrios Rojas
Steven Matias
Emerson Cedeño
Cristian Orozco Benjumea
CIRO VLADIMIR ARREOLA CAMACHO
Angel de Jesus Quintero Pereira
Juan Esteban Moreno Vergara
Smerlyn Javier Eusebio Bonifacio
Gracias por el aporte man !
Para los que tienen la tabla transactions vacío deben correr éste Script :
INSERT INTO transactions(transaction_id,book_id,client_id,`type`,`finished`) VALUES(1,12,34,'sell',1), (2,54,87,'lend',0), (3,3,14,'sell',1), (4,1,54,'sell',1), (5,12,81,'lend',1), (6,12,81,'return',1), (7,87,29,'sell',1);
Anexo los registros de la tabla transactions:
INSERT INTO transactions (book_id, client_id, type, finished) VALUES (12,34,'sell',1), (54,87,'lend',0), (3,14,'sell',1), (1,54,'sell',1), (12,81,'lend',1), (12,81,'sell',1), (87,29,'sell',1);
Gracias!
Gracias
Como se habran dado cuenta en el archivo na hay datos para su trabla transactions y ademas la columna type solo soporta ‘sell’ y ‘lend’, hay que agregarle el ‘return’:
tienen que realizar las siguientes dos modificaciones:
ALTER TABLE transactions MODIFY COLUMN `type` enum('lend','return','sell') NOT NULL;
INSERT INTO transactions(transaction_id,book_id,client_id,`type`,`finished`) VALUES(1,12,34,'sell',1), (2,54,87,'lend',0), (3,3,14,'sell',1), (4,1,54,'sell',1), (5,12,81,'lend',1), (6,12,81,'return',1), (7,87,29,'sell',1);
Muchas gracias colega, con tu aporte ya podemos continuar la clase con tranquilidad. Saludos.
Muchas gracias.

Resumen de la clase:
-- Listar todos los autores con ID entre 1 y 5 con los filtro mayor y menor igual SELECT * FROM authors WHERE author_id > 0 AND author_id <= 5; -- Listar todos los autores con ID entre 1 y 5 con el filtro BETWEEN SELECT * FROM authors WHERE author_id BETWEEN 1 AND 5; -- Listar los libros con filtro de author_id entre 1 y 5 SELECT book_id, author_id, title FROM books WHERE author_id BETWEEN 1 AND 5; -- Listar nombre y titulo de libros mediante el JOIN de las tablas books y authors SELECT b.book_id, a.name, a.author_id, b.title FROM books AS b JOIN authors AS a ON a.author_id = b.author_id WHERE a.author_id BETWEEN 1 AND 5; -- Listar transactions con detalle de nombre, titulo y tipo. Con los filtro genero = F y tipo = Vendido. -- Haciendo join entre transactions, books y clients. SELECT c.name, b.title, t.type FROM transactions AS t JOIN books AS b ON t.book_id = b.book_id JOIN clients AS c ON t.client_id = c.client_id WHERE c.gender = 'F' AND t.type = 'sell'; -- Listar transactions con detalle de nombre, titulo, autoor y tipo. Con los filtro genero = M y de tipo = Vendido y Devuelto. -- Haciendo join entre transactions, books, clients y authors. SELECT c.name, b.title, a.name, t.type FROM transactions AS t JOIN books AS b ON t.book_id = b.book_id JOIN clients AS c ON t.client_id = c.client_id JOIN authors AS a ON b.author_id = a.author_id WHERE c.gender = 'M' AND t.type IN ('sell', 'lend');
Buen aporte gracias
muy bien, siempre es buena practica comentar el código, 🙌🏻
Para las personas que no tengan datos en la tabla de trasactions, yo tuve que eliminar la tabla original (la que venía en el archivo, DROP TABLE), porque no tenía dentro del ENUM a 'return', así que la volví a crear, esto es una pregunta también, si existe otra manera de hacerlo con el UPDATE, agradezco que me digan cómo. Luego hice el INSERT yo mismo, con los datos que tenía el profesor, los dejo aquí por si les sirven.
INSERT INTO transactions(book_id, client_id, type, finished)
VALUES(12, 34, 'sell',1),
(54, 87, 'lend',0),
(3, 14, 'sell',1),
(1, 54, 'sell',1),
(12, 81, 'lend',1),
(12, 81, 'returned',1),
(87, 29, 'sell',1);
Tenia el mismo problema, la solucion que encontre fue poner
ALTER TABLE transactions modifytype enum('lend', 'sell', 'return') NOT NULL;
Gracias!
Script Tabla transactions:
INSERT INTO transactions(transaction_id,book_id,client_id,type,finished)
VALUES(1,12,34,'sell',1),
(2,54,87,'lend',0),
(3,3,14,'sell',1),
(4,1,54,'sell',1),
(5,12,81,'lend',1),
(6,12,81,'return',1),
(7,87,29,'sell',1);
Insertar datos en ‘transactions’: INSERT INTO transactions (book_id, client_id, type, finished) VALUES (12,34,‘sell’,1), (54,87,‘lend’,0), (3,14,‘sell’,1), (1,54,‘sell’,1), (12,81,‘lend’,1), (12,81,‘return’,1), (87,29,‘sell’,1);
Muchas gracias!
type es una palabra reservada. No puedo ponerla tal cual para ingresar valores.
Insertar datos en transactions
INSERT INTO transactions(book_id, client_id, type,f inished) VALUES (12,34,‘sell’,1),
(54,87,‘lend’,0),
(14,3,‘sell’,1),
(1,54,‘sell’,1),
(12,81,‘lend’,1),
(12,81,‘return’,1),
(87,29,‘sell’,1);
Gracias
Alguien lo noto?
Claro que si tambien podemos ver los resultados al seleccionar el author_id = 2 :
data transactions
INSERT INTO transactions (book_id, client_id, type, finished) VALUES (12,34,'sell',1), (54,87,'lend',0), (3,14,'sell',1), (1,54,'sell',1), (12,81,'lend',1), (12,81,'sell',1), (87,29,'sell',1);
El script no incluye trasacciones 😥
INSERT INTO transactions(book_id, client_id, type,f inished) VALUES (12,34,‘sell’,1), (54,87,‘lend’,0), (14,3,‘sell’,1), (1,54,‘sell’,1), (12,81,‘lend’,1), (12,81,‘return’,1), (87,29,‘sell’,1);
Ustedes cargaron las transaction manualmente?
Si sr.
INSERT INTO transactions(book_id, client_id, type, finished)
VALUES(12, 34,'sell', 1),
(54, 87, 'lend', 0),
(3, 14, 'sell', 1),
(1, 54, 'sell', 1),
(12, 81, 'lend', 1),
(12, 81, 'return', 1),
(87, 29, 'sell', 1)
;
Puedes usar el codigo que varios compañeros suben en los comentarios: INSERT INTO transactions(book_id, client_id, type,f inished) VALUES (12,34,‘sell’,1), (54,87,‘lend’,0), (14,3,‘sell’,1), (1,54,‘sell’,1), (12,81,‘lend’,1), (12,81,‘return’,1), (87,29,‘sell’,1);
El usar los alias "ejemplo" books como b es en mi personal punto de vista mala práctica dado que si tienes demasiadas tablas a la hora de hacer los cruces se confunde mucho dado que me ha tocado revisar queries bastante largos y suelen poner el alias así mismo como en esta clase y es tedioso andar buscando a que tabla se le nombró así, es mejor una buena descripción. saludos.
Pense lo mismo, he visto mas de una vez que aca lo recomiendan, pero no termino de encontrarle el sentido.
Bueno es que en mi experiencia, precisamente algunos compañeros cuando hacen vistas o procedimientos almacenados usan alias así, y realmente cuando toca modificar es un tanto complicado ponerla solo la inicial de tu tabla como alias :(
Muy interesante llegar a este punto y darse cuenta de lo que la normalizacion de los datos nos permite hacer. Para todos aquellos que desean entender un poco mas sobre esto les recomiendo leer un poco sobre "las doce reglas de Codd" esto les dara una vision clara de como funciona todo esto.
PRO Tips: USING en lugar de ON:
En el caso de hacer JOINS entre tablas cuyo nombre siga el convention over configuration explicado por el profe, se puede usar USING(`nombre_campo`) en lugar del ON, es decir:
esto:
… FROM table_1 AS t1 JOIN table_2 AS t2 USING(`campo_en_comun_id`) …
en lugar de:
… FROM table_1 AS t1 JOIN table_2 AS t2 ON t1.`campo_en_comun_id` = t2.`campo_en_comun_id` …
Buen tip, muchas gracias!!!
Excelente tip!
y a mi que no me gustaba la redundancia en el nombre de la columna id. :P
p.ej. books.book_id en vez de books.id
Pero utilizando el mismo nombre en varias tablas para referirnos al id nos permite utilizar USING.
Solamente observar que debes ordenar las tablas de acuerdo al join que estas haciendo, p.ej. en la siguiente consulta no puedes poner el join a clients antes de transactions o te dará el error ERROR 1054 (42S22): Unknown column 'client_id' in 'from clause'
select a.name as author, b.title as book, t.type, c.name as client, c.gender from authors a join books b using(author_id) join transactions t using(book_id) join clients c using(client_id) where c.gender = 'M' limit 5
14- Comando JOIN
El corazón de una bases de datos relacional son las relaciones entre tablas.
SELECT count() FROM authors; count() nos devuelve el número de resultados de una sentencia SELECT.
SELECT * FROM authors WHERE author_id > 0 AND author_id<= 5; la palabra reservada AND nos permite anidar condiciones o sentencias.
SELECT * FROM books WHERE author_id BETWEEN 1 and 5; la palabra reservada BETWEEN nos ayuda a crear rangos.
La sentencia JOIN sirve para realizar cruce de tablas, es decir permite juntar datos de distintas tablas y mostrarlas en un tabla temporal (SELECT) con la finalidad de aportar información puntual, legible y autentica.
SELECT b.book_id, b.title, a.name, a.author_id FROM authors AS a JOIN books AS b ON a.author_id=b.author_id WHERE a.author_id between 1 AND 30 ; La palabra reservada ON Ayuda al JOIN relacionar y condicionar las búsquedas de un SELECT-JOIN.
Se puede utilizar varios JOIN en una misma sentencia e incluso uno de los JOIN puede utilizar como tabla pivote que este en un JOIN anterior a esta.SELECT * FROM transactions WHERE t.type=IN('sell','lend'); la Función lo que permites es acotar búsquedas de palabras especifica.
Para los que copiaron la creación de la tabla ‘transactions’ de la imagen que dejó el profesor, les dejo la sentencia para modificarla y agregarle la opción de ‘return’ en el campo type:
alter table transactions MODIFY type enum('lend','sell','return') NOT NULL;
además les dejo los datos que se ingresan:
INSERT INTO transactions(book_id, client_id, type, finished) VALUES(12, 34,'sell', 1), (54, 87, 'lend', 0), (3, 14, 'sell', 1), (1, 54, 'sell', 1), (12, 81, 'lend', 1), (12, 81, 'return', 1), (87, 29, 'sell', 1) ;