-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathchallengesolutions.sql
More file actions
171 lines (95 loc) · 4.01 KB
/
Copy pathchallengesolutions.sql
File metadata and controls
171 lines (95 loc) · 4.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
## 1- INNER JOIN
SELECT
c.nombre_cliente AS cliente,
p.nombre_producto AS producto
FROM ventas v
INNER JOIN clientes c ON v.cliente_id = c.cliente_id
INNER JOIN productos p ON v.producto_id = p.producto_id;
## 2- LEFT JOIN
SELECT
c.nombre_cliente AS cliente,
p.nombre_producto AS producto
FROM clientes c
LEFT JOIN ventas v ON c.cliente_id = v.cliente_id
LEFT JOIN productos p ON v.producto_id = p.producto_id;
## 3- RIGHT JOIN
SELECT
p.nombre_producto AS producto,
c.nombre_cliente AS cliente
FROM ventas v
RIGHT JOIN productos p ON v.producto_id = p.producto_id
LEFT JOIN clientes c ON v.cliente_id = c.cliente_id;
## 4- FULL OUTER JOIN
-- Como MYSQL no soporta directamente a FULL OUTER JOIN, lo simulo usando UNION entre un LEFT JOIN y otro
SELECT
c.nombre_cliente AS cliente,
p.nombre_producto AS producto
FROM clientes c
LEFT JOIN ventas v ON c.cliente_id = v.cliente_id
LEFT JOIN productos p ON v.producto_id = p.producto_id
UNION
SELECT
c.nombre_cliente AS cliente,
p.nombre_producto AS producto
FROM productos p
LEFT JOIN ventas v ON p.producto_id = v.producto_id
LEFT JOIN clientes c ON v.cliente_id = c.cliente_id;
## 5- JOIN + FILTRO
SELECT
c.nombre_cliente AS cliente,
p.nombre_producto AS producto,
v.fecha_venta AS fecha
FROM ventas v
INNER JOIN clientes c ON v.cliente_id = c.cliente_id
INNER JOIN productos p ON v.producto_id = p.producto_id
WHERE c.cliente_pais = 'Argentina';
## 6- JOIN anidado
SELECT
categoria,
COUNT(*) AS total_vendidos
FROM (
SELECT
p.categoria
FROM ventas v
INNER JOIN productos p ON v.producto_id = p.producto_id
) AS ventas_por_categoria
GROUP BY categoria;
## Bonus
1. INNER JOIN
¿Cuándo usarlo?
*Cuando solo interesan los registros que tienen coincidencia en ambas tablas.
*Ideal para análisis donde los datos incompletos no son relevantes.
Ejemplo: Mostrar clientes que realmente realizaron compras.
Resultado: Solo se veran a los clientes que compraron algo. Los que no realizaron compras quedan afuera.
2. LEFT JOIN (o LEFT OUTER JOIN)
¿Cuándo usarlo?
*Cuando se quieren todos los registros de la tabla principal (izquierda), aunque no tengan coincidencia en la tabla relacionada.
*Útil para detectar datos faltantes o inactividad.
Ejemplo: Mostrar todos los clientes, aunque no hayan comprado.
Resultado: Los clientes sin compras aparecen con NULL en la columna del producto.
3. RIGHT JOIN (o RIGHT OUTER JOIN)
¿Cuándo usarlo?
*Cuando interesan todos los registros de la tabla secundaria (derecha) y solo los coincidentes de la principal.
*Perfecto para monitorear productos sin vender o servicios sin uso.
Ejemplo: Mostrar todos los productos, se hayan vendido o no.
Resultado: Los productos no vendidos se mostrarán con NULL en el campo cliente.
4. FULL OUTER JOIN (Simulado en MySQL con UNION)
¿Cuándo usarlo?
*Cuando se quiere obtener todos los registros de ambas tablas, coincidan o no.
*Muy útil para análisis completos que incluyan actividad y falta de actividad.
Ejemplo: Mostrar todos los clientes y todos los productos, hayan participado o no en ventas.
Resultado:
Clientes sin compras ➡ NULL en producto.
Productos sin ventas ➡ NULL en cliente.
5. CROSS JOIN
¿Cuándo usarlo?
*Cuando se necesitan todas las combinaciones posibles entre los registros de dos tablas.
*Se usa en escenarios como creación de escenarios hipotéticos o testing.
Ejemplo: Combinar todos los clientes con todos los productos.
Resultado: Cada cliente aparece combinado con todos los productos, generando un producto cartesiano.
## Resumen final
INNER JOIN: Lo que coincide en ambas tablas
LEFT JOIN: Todos los registros de la tabla izquierda + coincidencias
RIGHT JOIN: Todos los registros de la tabla derecha + coincidencias
FULL OUTER JOIN: Todo de ambas tablas, coincida o no
CROSS JOIN: Todas las combinaciones posibles