buen curso, para saber como manipular SQL en consola , aunque me quedo con interfaz gráfica xD
Introducción
Todo lo que aprenderás sobre SQL y MySQL
Instalación local de un RDBMS (Windows)
Instalación local de un RDBMS (Mac)
Instalación local de un RDBMS (Ubuntu)
La consola de MySQL
¿Qué es una base de datos?
CREATE
Comando CREATE
Tipos de columnas / Creación de la tabla books
Tipos de columnas / Creación de la tabla authors
Tipos de columnas usando / Creación de la tabla clientes
INSERT
Comando INSERT
Comando on duplicate key
Inserción de datos usando queries anidados
Bash y archivos SQL
Bash y archivos SQL
SELECT
Su majestad el SELECT
Comando JOIN
Left JOIN
Tipos de JOIN
5 casos de negocio
Continuación de casos de negocio
Comandos UPDATE Y DELETE
Consultas en MySQL
Super Querys
Comando mysqldump
Contenido Bonus
Bases de datos para Big Data
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
No se trata de lo que quieres comprar, sino de quién quieres ser. Aprovecha el precio especial.
Antes: $249
Paga en 4 cuotas sin intereses
Termina en:
Alberto Alcocer (Beco)
Aportes 129
Preguntas 11
buen curso, para saber como manipular SQL en consola , aunque me quedo con interfaz gráfica xD
Buen curso, fatlò mencionar triggers, procedimientos, llaves foreanas.
al principio me quejaba porque no sabia instalar MySQL pero con mucha investigación y dedicación al curso aprendí a como crear base de datos desde cero en terminales de comandos, algo que a mi no me enseñaron en la universidad como practica aunque sea algo común, ahora ya entiendo mejor como utilizar esta aplicación, fue un excelente curso gracias profe alberto alcocer.
Hola a todos, hice un resumen de las buenas prácticas que iba nombrando el profesor, espero les sirva. Un abrazo.
1. Que cada tabla se llame en el plural del sustantivo que vamos a llamar. Ej: Sustantivo libro --> Nombre de tabla: libros.
2. Hacerlo en inglés Ej: books.
3. Esto lo necesita toda tabla, un id.
4. Lo que yo guardo en la BD, nunca es un binario (imagen), lo que guardo es en un varchar, la url de la imagen, donde está almacenada.
5. Mysql permite escribir en mayúsculas y minúsculas, tanto en palabras reservadas, como en columnas, nombres de columnas y tablas. Lo recomendado es: Todos los nombres de columnas y tablas van en minúsculas y todas las palabras reservadas del lenguaje SQL van en mayúsculas.
6. A la tabla, al crearla, no se le agrega automáticamente el FOREING KEY, ya que si se hace y la tabla referenciada aún no se ha creado no existe, tirará un error. Por eso es mejor crear todas las tablas y luego hacer un ALTER para crear las FOREING KEY.
7. created_at, siempre debería ir en la tabla de la BD.
8. NINGUNA tupla de la BD se borra jamás. Esta se pone activa o inactiva.
9. Para que los datos se mantengan bien y en las conexiones no haya ningún problema, es bueno hacer inserciones (INSERT) de a 50, así si llega a haber algún problema con la conexión, se pierden de 50 en 50, puedes establecer un número máximo en la configuración y con eso definir que tantos vas a insertar o hasta cuantos puedes insertar.
10. Nunca en la vida usar ON DUPLICATE KEY IGNORE ALL, porque con esto ignora todos los errores que podrían suceder. “Los errores están ahí por algo, una aplicación que no lanza errores está condenada al fracaso” [Alberto Alcocer 4:34]
11. El orden de las condiciones de filtrado deben ser de las más posibles a las más específicas. Ej: WHERE nationality IS NOT NULL
AND nationality NOT IN(‘RUS’).
“Primero deberíamos descartar basándonos en valores NULL y en números enteros que son los más rápidos de procesar y luego condicionar por cadenas de caracteres porque lo va a hacer sobre una cama más pequeña.”(Comentario de Eduardo Kiriakos - C19)
12. Nunca borrar los datos de una BD, siempre que sea legal, ético, etc. Para esto, siempre tenemos un booleano (ej: active), para saber si ese dato está activo o no.
13. Ser muy específico al usar DELETE, lo mejor es eliminar de acuerdo al ID. Ej: DELETE FROM authors WHERE author_id = 161;
14. Al hacer DELETE, siempre usar un LIMIT, así nos aseguramos en caso de equivocarnos, no eliminar más de el LIMIT, Ej: DELETE FROM authors WHERE author_id = 161 LIMIT 1;
15. Usar la documentación https://dev.mysql.com/doc/refman/8.0/en/preface.html
16. Podemos versionar el esquema de la base de datos, pero los datos es prácticamente imposible versionarlos, por eso es que los datos no se versionan, sino que se respaldan.
¿Y donde está lo de Big Data?
Este último vídeo hasta me inspiro
SQL y MySql
¿Qué es una base de datos?
Una Base de datos es un lugar donde se almacenan una gran cantidad de datos que posteriormente a través de un proceso se convierten en información.
Comandos MySql
Iniciar sesión
mysql -u user-name -p
Donde -u es usuario y -p es password.
use data-base-name;
Cambiar de base de datos a utilizar.
show full columns from books;
Muestra el detalle completo de la tabla.
Motores de base de datos
Los motores de base datos más conocidos son Innodb y Myissam, entre ambos existen ciertas diferencia notables que vale la pena mencionar para saber cuál elegir.
Innodb considerado como un motor de base de datos transaccional conforme ACID con la capacidad de commit, rollback, recuperación de fallos.
Myissam es un motor de base de datos que trata tablas no transaccionales lo cual lo hace más rápido en la lectura y escritura de datos.
Algunas ventajas y desventajas
Innodb
Soporte de transacciones.
Bloqueo de registros.
Myissam
Mayor velocidad en la recuperación de datos.
Recomendable para aplicaciones donde predominan la sentencia select que los inserts/updates.
Cardinalidad
La cardinalidad son simplemente las relaciones que pueden existir entre las tablas de una base de datos.
uno a uno
uno a muchos
muchos a a uno
Lenguaje DDL
Lenguaje de definición de datos:
Create: crear objectos tales como vistas, tablas, store procedures e indices.
Drop: Utilizado para eliminar objectos como vistas, store procedures, tablas.
Alter: Empleado para editar tablas agregando campos o cambiando la definición de los mismos.
Una buena practica es que el nombre de la tabla debe ser un sustantivo en plural en ingles.
create table if not exists books(
id Integer unsigned primary key auto_increment,
author Integer,
title varchar(100) not null,
year integer unsigned default 1990,
language varchar(2) not null default 'es' comment 'ISO 639',
cover_url varchar(500),
price double(6,2) not null default 10.0,sellable tinyint () defaul 1,
copies integer not null default 1,
description text
);
Lenguaje DML
Lenguaje de manipulación de datos proporcionado por los sistemas gestores de base de datos que permite tareas de consultas o modificación de datos.
Select
select * from table where field = 'value'
Insert
insert into table (field1, field2) values (value1, value2);
Update
udate table field = 'value to modify' where field = value
Delete
delete from table where field = value;
Inner JOIN
Es considerada la forma más fácil de obtener información, prácticamente se obtienen todos las filas dela tabla A que coinciden con la table B.
select * from table_a as a inner join table_b as b on a.pk = b.pk;
Left JOIN
Se selecciona todas las filas de la tabla A y ademas de las que coincidan de la tabla B.
select * from table_a as a left join table_b as b on a.pk = b.pk;
Right JOIN
Se selecciona todas las filas de la tabla B y ademas de las que coincidan de la tabla A.
select * from table_a as a left join table_b as b on a.pk = b.pk;
Outer JOIN
Retorna todas las filas de ambas tablas ademas de hacer la unión entre las tablas que coinciden.
select * from table_a as a outer join table_b as b on a.pk = b.pk;
Left excluding JOIN
Para este caso retorna todas las filas de la tabla A que no tengan ninguna coincidencia con la tabla B.
select * from table_a as a left join table_b as b on a.pk = b.pk where b.pk is null;
Right excluding JOIN
Para este caso retorna todas las filas de la tabla B que no tengan ninguna coincidencia con la tabla A.
select * from table_a as a right join table_b as b on a.pk = b.pk where b.pk is null;
Outer excluding JOIN
Para este caso retorna todas las filas de ambas tablas que no tengan coincidencias.
select * from table_a as a full outer join table_b as b on a.pk = b.pk where a.pk is null or b.pk is null;```
La terminal es tu amiga 💚
Brutal este curso, y el profe es sumamente talentoso, a quienes llegaron aquí los invito al curso de expresiones regulares con este mismo profe. 😃
Excelente curso y excelente profesor!!! Para ser la primera vez que me acerco a este lenguaje, fue muy explícito y útil!!!
Gracias!
La verdad es mi primer curso de base de datos y aun cuando no tengo ninguna experiencia en creación y manejo pues mi trabajo a sido solo administrar servidores y redes de datos, pero este curso me ha llevado de la mano para entender de manera clara y concisa lo que es una base de datos y como se puede ínter actuar con ella sacando le el máximo provecho. Es todo un mundo nuevo para mi. Gracias por enseñar tan bien las bases que se necesitan para adentrarse en esta área de la informática tan importante.
Muchas gracias Beco! Me gusto el curso!
Excelente profesor y excelente curso, de los mejores en platzi!
El profesor Beto es una eminencia. No sabía nada de SQL y ahora considero tener un conocimiento decente, estuvo excelente el curso y su forma de enseñar
Un muy buen curso, gracias Alberto Alcocer 💚
excelente curso, muy buen profesor
Fue un gran curso. Todo detallado, preciso y super entendible.
Me gustó mucho el curso, bastante fácil y entendible
Estoy confundido, ¿No es Structured Query Language. Soy yo o escuché Standard en lugar de Structured?
buen curso para inicio en sql y mysql
Un curso muy interesante.
Buen curso para ya empezar a poner en práctica MySQL, ¡muchas gracias profe!
no me gusto la terminal
Amé, amé, amé, este curso! Muchas gracias profesor, aprendí muchísimo 😄
Aprendí demasiado, gracias.♡
Hola!! Miren, entre a arc dev
dev, un lugar para encontrar trabajos remotos y estos a su vez nos dan una iniciativa para aprender teoria de x lenguaje, entonces... obtuve estas preguntas.
Fundamental SQL Interview Questions
What are joins in SQL?
A join is an operation that is used to combine data from multiple tables into a new table. Different types of joins specify how data between tables are matched into the new table. When you need to retrieve data from multiple tables in a single query, there’s a good chance that you’ll be using a join operation.
Interviewers ask this question as a way to test your fundamental understanding of how data is queried and how it's necessary for almost every kind of application. We cannot simply dump all data into one table as it will get unwieldy and poorly organized.
Example: We would want to store a table of customers (with their name, address, company they represent, etc.) separately from a table of transactions (with the items purchased, when the transaction was made, how much items cost, who made the purchase, etc.). When we store the information of who made the purchase, we would not want to duplicate all of the customer’s information into every row of the transactions table, and we would only want to store the customer ID. In order to answer a question such as “how many purchases were made by customers who live in a specific zip code?”, we would need to join the two tables to get this answer:
SELECT COUNT(*) FROM customers c JOIN transactions t ON t.customer_id = c.id WHERE c.zipcode = 94107;
What is the difference between DELETE and TRUNCATE statements?
This question is intended to gauge your understanding of how database rows are stored and managed internally. While DELETE and TRUNCATE can both be used to remove all data from a table, the database processes these queries differently. DELETE operations can filter rows that are targeted as it supports a WHERE clause, whereas a TRUNCATE operation removes an entire table.
When deleting a whole table with these two operations, TRUNCATE performs faster at the expense of being unable to perform some operations that rely on the transaction log. For example, some SQL servers can rollback DELETE operations and not TRUNCATE operations.
In general, you should opt to use the DELETE operation due to benefits such as a history in the transaction log. In situations where a DELETE operation on an entire table takes too long, you can look into using the TRUNCATE operation. An interviewer would be interested in hearing about the tradeoffs between the two operations.
What is the difference between a primary key and unique key?
Primary keys must be unique and are used to identify table records, whereas unique keys serve as constraints in the table’s data. Understanding unique keys shows the interviewer that you understand some of the important ways to maintain a database table’s data integrity.
For example, when you’re designing a table to track users, you may have a column for user_id as the primary key. user_id will be unique and is used to reference the rest of the data in a row. To maintain data quality, you may have a column for phone_number as a unique key to ensure that only one of each phone number can exist in the table.
What is the purpose of a foreign key in SQL?
Foreign keys are columns used to reference primary keys in other tables. This helps set a constraint on the column to enforce referential integrity across tables. Foreign keys are a fundamental concept in database table design, and interviewers will want to verify that you understand them and have used them before in the past. Understanding them shows that you know how to design schemas that span across multiple database tables.
For example, imagine that you have two tables: orders and users. Every order should have been created by a user so the orders table can have a foreign key to the user table’s primary key. This constraint ensures that every user defined in the orders table is referencing a valid row.
Read More: How to Prepare for a Zoom Interview (Senior Developer Position)
What are some ways to optimize a query?
Query plans are a useful way to examine how a query will be performed, and can help you better understand what is making your query slow.
For example, prepending a query in PostgreSQL with EXPLAIN will show the query plan for the command. This will reveal the table scans that will be involved in the query.
So if we wanted to check the behavior of the query: SELECT * FROM table_1;, we can run the query EXPLAIN SELECT * FROM table_1;. From there, the query plan will break down the various steps that will be taken to execute the query. It’s a common way to identify unnecessary full table scans that could be alleviated with setting up proper indices.
These techniques are important because interviewers want to understand how you may approach troubleshooting database queries. If a candidate only knows how to run a query against the database to measure performance, it shows a lack of familiarity and industry experience with using relational databases.
What are some ways to identify how a query can be optimized?
Queries can be optimized in many ways. A few common examples are as follows:
Reduce amount of data to query with WHERE clauses.
Limit the amount of useful rows the database needs to query with a LIMIT clause.
Add an index on columns that are frequently queried.
The goal for this question is often not to just list every example above. Since this question is open-ended, some interviewers may present this question with a scenario where certain optimizations can be identified and applied.
Read More: How to Get Your Profile Noticed by Hiring Managers
What is normalization and what are the advantages of it?
Database normalization is a strategy to efficiently organize data in a database. The goal is to reduce redundant data so that the same data is not stored across multiple tables. Instead, data will be referenced with a primary key.
For example, a table named orders may have a column named user_id. Rather than maintaining a copy of user data in the orders table, we can simply reference that data from another table with a join.
This is often asked to gauge a candidate’s understanding of table design. Normalizing data is a key component of designing table schemas in relational databases.
What are entities and relationships?
An entity is an abstraction of a set of related data and are represented as tables. Relationships define how entities are associated with one another.
For example, let’s say we have two tables named orders and users. Our orders and users are our entities. We can imagine that one user could possibly have many orders. Therefore, users can have a “one-to-many” relationship with orders.
Entities and relationships are often used in the table schema design process. By understanding how to define entities and map their relationships, you show that you can be productive in a team’s collaborative session on database table design.
How can you set up a table so that queries for certain rows won't result in full table scans?
Full table scans can be possibly avoided by querying on indexed columns and using limits. Indexed columns help the database optimize how it performs lookups on the tables.
There are many strategies for reducing the rows queried and these can be confirmed with query plans. Interviewers will often ask this to gauge your understanding of how to properly design SQL tables and optimize queries.
Read More: Prepare for Your Big Day With These Important Behavioral Interview Questions and Answers
Advanced SQL Interview Questions and Answers
Explain some different types of indexes in SQL.
A clustered index has data physically stored in the same area on a table so that they can be efficiently queried and retrieved together. A non-clustered index is often used for key-based queries whereas a clustered index is often used for ranges.
Most SQL databases will choose the best index type for your use case. Interviewers will typically ask this to gauge your understanding of how indices are set up internally.
What is a scenario when you would choose to use a zero or blank space over a NULL value in a row?
Using a zero or blank space over a NULL value is a design decision. NULL can represent the absence of data.
An example can be made with middle names: if a user has not provided a middle name, then their middle name would be NULL. If a user has indicated that they have no middle name, then their middle name would be an empty string.
If we know we will never care for differentiating between a zero / blank space value and the absence of a value, then we can go ahead and default a column to a zero or blank space value. This might be useful in a table that keeps track of how many times something has occurred (e.g. number of website visits). We have no need to differentiate between 0 and absence of data as absence of data implies 0, so we can simplify our application code by defaulting to 0.
An interviewer may ask this question to gauge your understanding of how different types are stored in a database table. Being able to communicate these decisions shows that you understand some considerations for choosing appropriate design tradeoffs.
What is the difference between a cross join and natural join?
When unspecified, a join will default to using an inner join. While there’s a chance that you may not have used a cross join or natural join before, understanding different join types can show your interviewer that you are familiar with different ways to combine data across tables.
A cross join will produce the Cartesian product between two tables. It is typically used when you want to create a combination using every row from two tables. For example, if you want to find every combination of colors between various pieces of clothing, you would use a cross join to retrieve every combination.
A natural join will produce a table that joins columns with the same names and types. Any shared column between tables will be considered for a join. This is different from the commonly-used inner join where joins are explicitly done on specified columns. What’s important to note is that if a natural join does not find any matching columns, it will essentially produce the same result as a cross join.
What are UNION, MINUS, and INTERSECT commands?
These three commands are known as set operations. Interviewers will ask you this question to gauge your familiarity with data analysis and data processing using SQL. If you have used SQL extensively but haven’t been exposed to these commands, it may reveal to the interviewer that you may use SQL commands to perform CRUD operations instead of data analysis.
UNION will produce a table that has the data contained in two tables.
MINUS will produce a table that has data from the first table minus that of the second table.
INTERSECT will produce a table that has shared data between the two tables.
If we imagine a Venn diagram with two intersecting circles and three distinct parts, UNION represents all three parts, MINUS represents the left part, and INTERSECT represents the middle part.
La experiencia no se improvisa. Se demuestra. Excelentes clases profe 👍
Big Data nos da información con la cual generamos una decisión.
En otros términos podemos predecir lo que va a pasar.
LES DEJO AQUÍ MIS APUNTES 👀💚🚀
Excelente curso, recomiendo que agreguen llaves foráneas!
Gracias.
Sin duda este fue uno de los mejores cursos básicos.
Mil gracias @beco este curso ha mejorado mis competencias con MySQL, es un excelente profesor.
excelente curso, me gusto mucho que todo lo manejaremos desde la terminal
El mejor curso de MySQL para entender de manera clara y concisa y sacar el máximo provecho.
Excelente curso y muy buen profesor! gracias!
Interesante.
muy buen curso!
Muy buen curso!!
Un gran curso.
Excelente curso y profesor
Gracias por explicar tan bien!
Buen Curso BECO
Muy buen curso ha cambiado mi perspectiva sobre lo que son las bases de datos.
Muchas gracias profe Alberto. Tu curso de BD MySql y Linea de Comandos son excelentes, gracias por ponerle pasión a tus clases.
EXCELENTE CURSO
Muy bueno, ahora a ponerlo en práctica.
Gran curso, explica super super bien
excelente curso, ahora a profundizar más en ella.Saludos
Buen curso, muchas gracias
gracias @beco buenísimo el curso
excelente curso, muchisimas gracias.
gran gran curso la verdad me sirvió mucho hacerlo forzosamente por linea de comandos
Gracias por todo lo que aprendí, temática excelente
Un excelente curso! aprendí nuevas cosas.
Curso preciso y detallado, excelente.
Beco, muchas gracias por compartir tus conocimientos y experiencias, todo fue muy claro y la forma en la que explicas es muy detallada pero sin ser rebuscado.
Excelente curso!! 5 estrellas. ⭐️⭐️⭐️⭐️⭐️
Es un gran curso aprendí y reforce mis conocimientos en MYSQL. En mi carrera profesional he usado casi en un 100% oracle pero por motivos personales estoy usando mysql
Excelente curso no me arrepiento de un segundo que le inverti a este curso, me arrepiento no haber invertido mas tiempo
He aprendido mucho, muchas gracias
“El dato puntual rara vez nos sirve de algo tenemos que asociarlo con más datos y con contexto para hacer información y tomar decisiones”
Qué puntual
Estimado profesor Alberto Alcocer:
Dios le bendiga y la Virgen María siempre le acompañe. Muchas gracias por el curso.
Pese a que sé siento que cosas como mysqldump o entender mejor los join me ayudó astante
4 años de este curso y se mantiene vigente. De lo mejor acá en Platzi en SQL. Sólo faltó lo de Foreign Keys, pero para aprender sintáxis es muy valioso.
Excelente curso
Excelente curso.
Me encantó el curso, muy claro y práctico.
El curso me parece una buena herrramienta introductoria, de nivel básico a semi intermedio, el profesor ha sido excelente, y las lecciones muy amables. Lo único de que podría quejarme es el tema de la actualización y disponibilidad de los recursos para las lecciones.
Tenia mis dudas a usar SQL desde consola pero veo que no tiene que ser necesariamente doloroso
De los mejores cursos, aquí les dejo de los comandos usados en este curso:
SHOW databases; - muestra las bases de datos existentes.
USE database_name; - selecciona una base de datos específica.
SHOW tables; - muestras las tablas de la base de datos.
SELECT database(); - me muestra el nombre de la base de datos seleccionada.
CREATE database database_name; - crea una nueva base de datos.
CREATE DATABASE IF NOT EXISTS database_name; - crea una base de datos si no existe.
SHOW warnings; - muestra las advertencias.
DROP table table_name; - Elimina permanentemente una tabla.
DESCRIBE table_name; - Nos indica las columnas que tenemos en una tabla.
SHOW FULL COLUMNS FROM table_name; - es parecido al comando DESCRIBE pero muestra mas datos.
INSERT INTO table_name(columns) VALUES(values); - inserta una tupla.
ON DUPLICATE KEY IGNORE ALL - esta sentencia ignora las resticciones al insertar una tupla
con un valor repetido y que esta restringido en una columna con UNIQUE (Nota: nunca utilizarlo).
ON DUPLICATE KEY UPDATE column = VALUES(value) - al insertar una tupla con un campo duplicado
actualiza un el valor de un campo específico con un nuevo valor tomado de los datos insertados.
SELECT * FROM table_name WHERE column_value = 1\G - en lugar de cerrar la sentencia con ;
se utiliza \G, lo cual muestra los datos de una manera mas legible.
mysql -u root -p < all_schema.sql - con este comando podemos ejecutar un script SQL inmediatamente
despues de acceder a la base de datos.
mysql -u root -p -D database_name < all_schema.sql - este comando es parecido al anterior solo
que con la bandera -D indicamos el nombre de la base de datos sobre la que queremos ejecutar el script.
SELECT YEAR(NOW()); - esta sentencia me muestra el año de la fecha actual utilizando las funciones YEAR() y NOW().
SELECT * FROM table_name WHERE column_value like ‘%value%’; - esta sentencia nos muestra las tuplas que en un
campo específico contengan un valor, el wildcard % indica que no nos importa que valor existan antes o despues del
dato que especificamos.
SELECT COUNT(*) FROM table_name; - devuelve el número de tuplas de una tabla.
SELECT * FROM table_name WHERE column_value BETWEEN value AND value; - nos devuelve las tuplas que se encuentren
en medio de los valores indicados.
DELETE FROM table_name WHERE column_value = value; - elimina una tupla de una tabla.
UPDATE table_name SET [column_value = value, …] WHERE column_value = value; - actualiza una tupla de una tabla.
TRUNCATE table_name; - borra todo el contenido de una tabla.
mysqldump -u user -p database_name > esquema.sql - guarda el esquema de una base de datos con todo y datos en un
archivo sql.
mysqldump -u user -p -d database_name es parecido al comando anterior solo que aquí no se guardan los datos.
Excelente curso!!! La forma de explicar de Alberto es muy buena y lo mejor es la experiencia que transmite para poder realizar buenas practicas.
Muy buen curso de SQL, me ha ayudado a afianzar mis conocimientos. Gracias.
muchas gracias profe 😄
Saludos, aca les comparto mis apuntes. https://github.com/JulioFS12/curso-sql-mysql/blob/main/README.md
¡Excelente profesor y excelente curso!
Perfecto, gracias por compartir sus conicmienitos
Como hacer para precisamente hacer una tabla expansiva?
Gran curso de sql y mysql, excelente para inciar!
Gracias por el Curso muy bueno!
excelente
Gracias Totales Profe Alberto, ademas de las llaves foraneas que comentan, agregaria a las super queries, la función with, con esta se pueden hacer joins muchos mas largos sin perder la legibilidad e incluso hacer consultas anidadas complejas, por lo demas 👌 😌
excelentes clases
Excelente Curso!, bien explicado, y con buenisimos ejercicios. Mis Felicitaciones.
este video debio ser al inicio jejeje pero si, es bastante inspirador, y buen curso
a manera de bibliografia les dejo un libro de sql que me gusto mucho por si quieren saber mas, “sql facil” de pere chardi garcia , no es brutalmente profunda pero si siente completo
muy buen curso me dejo a mi parecer buenas bases me dejo muchas gracias
Excelente, siempre existe algo nuevo por aprender.
Excelente curso!!! me gusto mucho
excelente explicacion del curso… se agradace.
Interesante este nuevo curso .
Excelente
Estupendo.
excelente curso
Excelente curso.
Muy buen curso.
Excelente Curso!
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?