Skip to content

Commit

Permalink
Clase 5
Browse files Browse the repository at this point in the history
Comandos JOIN
  • Loading branch information
mouredev committed Nov 1, 2023
1 parent 3a0a661 commit 3618685
Show file tree
Hide file tree
Showing 6 changed files with 176 additions and 4 deletions.
38 changes: 37 additions & 1 deletion 04_Tables/04_relationships.sql
Original file line number Diff line number Diff line change
Expand Up @@ -64,4 +64,40 @@ CREATE TABLE users_languages(
Relación de Auto-Referencia
Relación que indica que un un registro en la tabla A puede
relacionarse con otro registro de la tabla A.
*/
*/

/*
INSERT y UPDATE para trabajar con JOIN
Clase 5: https://twitch.tv/videos/1965141039
*/

-- "dni" (Relación 1:1)
INSERT INTO dni (dni_number, user_id) VALUES (11111111, 1);
INSERT INTO dni (dni_number, user_id) VALUES (22222222, 2);
INSERT INTO dni (dni_number, user_id) VALUES (33333333, 3);
INSERT INTO dni (dni_number) VALUES (44444444);

-- "companies" y "users" (Relación 1:N)
INSERT INTO companies (name) VALUES ('MoureDev');
INSERT INTO companies (name) VALUES ('Apple');
INSERT INTO companies (name) VALUES ('Google');

UPDATE users SET company_id = 1 WHERE user_id = 1;
UPDATE users SET company_id = 2 WHERE user_id = 3;
UPDATE users SET company_id = 3 WHERE user_id = 4;
UPDATE users SET company_id = 1 WHERE user_id = 7;

-- "languages" y "users_languages" (Relación N:M)
INSERT INTO languages (name) VALUES ('Swift');
INSERT INTO languages (name) VALUES ('Kotlin');
INSERT INTO languages (name) VALUES ('JavaScript');
INSERT INTO languages (name) VALUES ('Java');
INSERT INTO languages (name) VALUES ('Python');
INSERT INTO languages (name) VALUES ('C#');
INSERT INTO languages (name) VALUES ('COBOL');

INSERT INTO users_languages (user_id, language_id) VALUES (1, 1);
INSERT INTO users_languages (user_id, language_id) VALUES (1, 2);
INSERT INTO users_languages (user_id, language_id) VALUES (1, 5);
INSERT INTO users_languages (user_id, language_id) VALUES (2, 3);
INSERT INTO users_languages (user_id, language_id) VALUES (2, 5);
51 changes: 51 additions & 0 deletions 05_Join/01_inner_join.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
/*
INNER JOIN (JOIN)
Clase 5: https://twitch.tv/videos/1965141039
*/

-- Realiza un JOIN de manera incorrecta, ya que no existe un campo de relación
SELECT * FROM users
INNER JOIN dni;

-- Obtiene los datos de los usuarios que tienen un dni
SELECT * FROM users
INNER JOIN dni
ON users.user_id = dni.user_id;

-- Obtiene los datos de los usuarios que tienen un dni (JOIN es lo mismo que INNER JOIN)
SELECT * FROM users
JOIN dni
ON users.user_id = dni.user_id;

-- Obtiene el nombre y el dni de los usuarios que tienen un dni y los ordena por edad
SELECT name, dni_number FROM users
JOIN dni
ON users.user_id = dni.user_id
ORDER BY age ASC;

-- Obtiene los datos de los usuarios que tienen empresa
SELECT * FROM users
JOIN companies
ON users.company_id = companies.company_id;

-- Obtiene los datos de las empresas que tienen usuarios
SELECT * FROM companies
JOIN users
ON users.company_id = companies.company_id;

-- Obtiene el nombre de las empresas junto al nombre de sus usuarios
SELECT companies.name, users.name FROM companies
JOIN users
ON companies.company_id = users.company_id;

-- Obtiene los nombres de usuarios junto a los lenguajes que conocen
SELECT users.name, languages.name
FROM users_languages
JOIN users ON users_languages.user_id=users.user_id
JOIN languages ON users_languages.language_id=languages.language_id;

-- Obtiene los nombres de usuarios junto a los lenguajes que conocen (utilizando otro orden de relación entre tablas)
SELECT users.name, languages.name
FROM users
JOIN users_languages ON users.user_id=users_languages.user_id
JOIN languages ON users_languages.language_id=languages.language_id;
25 changes: 25 additions & 0 deletions 05_Join/02_left_join.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
/*
LEFT JOIN
Clase 5: https://twitch.tv/videos/1965141039
*/

-- Obtiene los datos de todos los usuarios junto a su dni (lo tenga o no)
SELECT * FROM users
LEFT JOIN dni
ON users.user_id = dni.user_id;

-- Obtiene el nombre de todos los usuarios junto a su dni (lo tenga o no)
SELECT name, dni_number FROM users
LEFT JOIN dni
ON users.user_id = dni.user_id;

-- Obtiene todos los dni junto al nombre de su usuario (lo tenga o no)
SELECT name, dni_number FROM dni
LEFT JOIN users
ON users.user_id = dni.user_id;

-- Obtiene el nombre de todos los usuarios junto a sus lenguajes (los tenga o no)
SELECT users.name, languages.name
FROM users
LEFT JOIN users_languages ON users.user_id=users_languages.user_id
LEFT JOIN languages ON users_languages.language_id=languages.language_id;
25 changes: 25 additions & 0 deletions 05_Join/03_right_join.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
/*
RIGHT JOIN
Clase 5: https://twitch.tv/videos/1965141039
*/

-- Obtiene todos los dni junto a su usuario (lo tenga o no)
SELECT * FROM users
RIGHT JOIN dni
ON users.user_id = dni.user_id;

-- Obtiene todos los dni junto al nombre de su usuario (lo tenga o no)
SELECT name, dni_number FROM users
RIGHT JOIN dni
ON users.user_id = dni.user_id;

-- Obtiene el nombre de todos los usuarios junto a su dni (lo tenga o no)
SELECT name, dni_number FROM dni
RIGHT JOIN users
ON users.user_id = dni.user_id;

-- Obtiene el nombre de todos los lenguajes junto a sus usuarios (los tenga o no)
SELECT users.name, languages.name
FROM users
RIGHT JOIN users_languages ON users.user_id=users_languages.user_id
RIGHT JOIN languages ON users_languages.language_id=languages.language_id;
30 changes: 30 additions & 0 deletions 05_Join/04_union.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/*
UNION (FULL JOIN)
Clase 5: https://twitch.tv/videos/1965141039
*/

-- UNION elimina duplicados

-- Obtiene todos los id de usuarios de las tablas dni y usuarios (exista o no relación)
SELECT users.user_id AS u_user_id, dni.user_id AS d_user_id
FROM users
LEFT JOIN dni
ON users.user_id = dni.user_id
UNION
SELECT users.user_id AS user_id, dni.user_id AS d_user_id
FROM users
RIGHT JOIN dni
ON users.user_id = dni.user_id;

-- Obtiene todos los datos de las tablas dni y usuarios (exista o no relación)
SELECT *
FROM users
LEFT JOIN dni
ON users.user_id = dni.user_id
UNION
SELECT *
FROM users
RIGHT JOIN dni
ON users.user_id = dni.user_id;

-- UNION ALL mantiene duplicados
11 changes: 8 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,21 +10,26 @@
### Proyecto realizado durante emisiones en directo desde [Twitch](https://twitch.tv/mouredev)
> ##### Si consideras útil el curso, apóyalo haciendo "★ Star" en el repositorio. ¡Gracias!
## Próxima Clase: Martes 31/10/2023
### ⏰ 20:00 (hora España) en directo desde [Twitch](https://twitch.tv/mouredev)
### 🌐 Consulta el horario por país y crea un recordatorio desde [Discord](https://discord.gg/mouredev?event=1166600316016402452)
## Próxima Clase: Muy pronto
### Avisaré en redes sociales y actualizaré este repositorio con la siguiente fecha.

## Clases anteriores

### Clase 1 (05/10/2023): Introducción, fundamentos e instalación MySQL
#### ▶️ [Ver clase en vídeo](https://www.twitch.tv/videos/1943373276?t=00h19m44s)

### Clase 2 (12/10/2023): Instalación MySQL Workbench, creación BBDD, tablas y comandos SELECT
#### ▶️ [Ver clase en vídeo](https://www.twitch.tv/videos/1949226275?t=00h25m17s)

### Clase 3 (17/10/2023): Comandos SELECT y de escritura (INSERT, UPDATE y DELETE)
#### ▶️ [Ver clase en vídeo](https://www.twitch.tv/videos/1953432950?t=00h23m40s)

### Clase 4 (25/10/2023): Comandos DATABASE, TABLE y tipos de relación entre tablas
#### ▶️ [Ver clase en vídeo](https://www.twitch.tv/videos/1959296112?t=00h19m20s)

### Clase 5 (31/10/2023): Comandos JOIN
#### ▶️ [Ver clase en vídeo](https://www.twitch.tv/videos/1965141039?t=00h23m19s)

Durante el curso aprenderemos los fundamentos del lenguaje SQL y las bases de datos relacionales con ejemplos prácticos.
Nos centraremos en MySQL para llevar a cabo las clases, ya que es uno de los más usados en enseñanza y a nivel profesional. También utilizaremos PostgreSQL ya que es una de las bases de datos más populares de la actualidad. De todas formas, no debe preocuparte el motor de bases de datos utilizado, ya que SQL es un lenguaje estándar, por lo que se utilizará prácticamente igual en todas ellas. Una vez lo conozcas no tendrá dificultad alguna llevar esos conocimientos a otros sistemas.
Todo el código estará disponible para que cualquiera pueda usarlo.
Expand Down

0 comments on commit 3618685

Please sign in to comment.