Comandos Join y Group by - Mysql

Comando Join

El comando Join en mysql, sirve para combinar dos o más tablas según la designación de variables que queramos o necesitemos. Unión entre varias tablas, devuelve la información que encuentra en esa unión.

Tiene tres variables: 

1. Inner Join

Sintaxis

select*from tabla1 inner join tabla2 on tabla1.id=tabla2.id inner join tabla3 on tabla2.id=tabla3.id2;

Ejemplo

Visualizar el código del libro, nombre del libro, codigo del autor  y el nombre del autor con sus respectivos libros escritos. 

Analisis

1. Que se desea consultar y de que tablas?

libro.idlibro
libro.descripcion
autor.codautor
autor.nombre

2. Qué tablas se ven afectadas o involucradas?

Tabla 1: tabla principal= Libro
Tabla 2: tabla relacional=liautedi
Tabla 3: tabla principal=autor


3. Condición

No hay ninguna condición

4. Como se relacionan las tablas?

libro.idlibro=liautedi.idlibro
liautedi.codautor=autor.codautor

5. Que comando se debe utilizar?

Select-inner Join 

6. Sintaxis

select distinct libro.idlibro,libro.descripcion,autor.codautor,autor.nombre from libro inner join liautedi on libro.idlibro=liautedi.idlibro inner join autor on liautedi.codautor=autor.codautor;



Nota: para exportar a excel entonces:

select distinct libro.idlibro,libro.descripcion,autor.codautor,autor.nombre from libro inner join liautedi on libro.idlibro=liautedi.idlibro inner join autor on liautedi.codautor=autor.codautor into outfile 'c:/xampp/libroautorjoin.xls';

2. left join

Este comando se utiliza para saber que registros no tienen correspondencia en otra tabla. Verifica de una tabla izquierda a una tabla derecha, sino encuentra coincidencias se genera una fila extra con todos los campos iguales a Null. 

Sintaxis






Ejemplo

Visualizar a que libros no se les a asignado un autor utilizando el left join


Analisis

1. Que se desea consultar y de que tablas?

libro.idlibro
libro.descripcion



2. Qué tablas se ven afectadas o involucradas?

Tabla 1: tabla principal= Libro
Tabla 2: tabla relacional=liautedi


3. Condición

Libros que no tengan autor

4. Como se relacionan las tablas?

libro.idlibro=liautedi.idlibro

5. Que comando se debe utilizar?

Select-left join 

6. Sintaxis

select libro.idlibro,libro.descripcion,liautedi.idlibro from libro left join liautedi on libro.idlibro=liautedi.idlibro where liautedi.idlibro is null;



3. Right join

El right join opera del mismo modo que el left join, sólo que la búsqueda de coincidencias la realiza del modo contrario, es decir busca valores de coincidencias desde la tabla de la derecha hacia la tabla que esta a la izquierda y sucede lo mismo que en el left, sino encuentra coincidencia se genera una fila extra con todos los campos iguales a null.

Ejemplo

Visualizar el listado de los libros que tienen al menos un autor asignado


Analisis

1. Que se desea consultar y de que tablas?

libro.idlibro
libro.descripcion


2. Qué tablas se ven afectadas o involucradas?

Tabla 1: tabla principal= Libro
Tabla 2: tabla relacional=liautedi



3. Condición

Libros que tengan al menos un autor

4. Como se relacionan las tablas?

libro.idlibro=liautedi.idlibro


5. Que comando se debe utilizar?

select-right join 

6. Sintaxis


select distinct libro.idlibro,libro.descripcion,liautedi.idlibro from libro rigth join liautedi on libro.idlibro=liautedi.idlibro;

Ejercicio 

Visualizar los autores con las editoriales que le publican 


Analisis

1. Que se desea consultar y de que tablas?

libro.idlibro
libro.descripcion
editorial.codedit
editorial.nombre



2. Qué tablas se ven afectadas o involucradas?

Tabla 1: tabla principal= Libro
Tabla 2: tabla relacional=liautedi
Tabla 3: tabla primaria=editorial


3. Condición

Ninguna

4. Como se relacionan las tablas?

libro.idlibro=liautedi.idlibro
liautedi.codedit=editorial.codedit

5. Que comando se debe utilizar?

Select inner join 


6. Sintaxis

select distinct libro.idlibro,libro.descripcion,editorial.codedit,editorial.nombre from libro inner join liautedi on libro.idlibro=liautedi.idlibro inner join editorial on liautedi.codedit=editorial.codedit;




Ejercicio 

Visualizar que autores no han escrito libros


Analisis

1. Que se desea consultar y de que tablas?

libro.idlibro
autor.codautor
autor.nombre



2. Qué tablas se ven afectadas o involucradas?

Tabla 3: tabla primaria= autor
Tabla 2: tabla relacional=liautedi



3. Condición

Autores que no han escrito ningún libro

4. Como se relacionan las tablas?

autor.codautor=liautedi.codautor


5. Que comando se debe utilizar?

Select left join 



6. Sintaxis



select autor.codautor,autor.nombre,liautedi.codautor from autor left join liautedi on autor.codautor=liautedi.codautor where liautedi.codautor is null;

Ejercicio 3

Visualizar las asignaturas que tienen libros asignados


Analisis

1. Que se desea consultar y de que tablas?

libro.codigomat
libro.descripcion
asignatura.codiogmat





2. Qué tablas se ven afectadas o involucradas?

Tabla 1: tabla principal= Libro
Tabla 2: tabla primaria= asignatura

3. Condición

Se muestra las asignaturas con libros

4. Como se relacionan las tablas?

libro.codigomat=asignatura.codiogmat


5. Que comando se debe utilizar?

Select right join 



6. Sintaxis

select distinct libro.codigomat,libro.descripcion from libro rigth join asignatura on libro.codigomat=asignatura.codigomat



Comando Group by

Se utiliza cuando en una tabla hay información que se repite 

Sintaxis 

select*from nombretabla group by nombrecampo;



Ejemplo:

Usando las funciones (max,min,sum.avg,count), visualizar las cantidades de visitantes por ciudad

Análisis

1. Que se desea consultar?
    cantidad de visitantes por ciudad  
2. Campo en el que se aplica la función?
    montocompra
3. Campo por el cual va a agrupar
    Ciudad
4. Campo
    group by -select -count

Sintaxis

select  nombrecampo(s),funcion(campofuncion) as nombredeseado from nombretabla group by nombrecampo;

select ciudad, count (ciudad) as 'cantidad visitantes' from visitantes group by ciudad;



Ejemplo

Visualizar el total comprado por ciudad

Análisis

1. Que se desea consultar?
    total comprado por ciudad  
2. Campo en el que se aplica la función?
    montocompra
3. Campo por el cual va a agrupar
    Ciudad
4. Campo
    group by -select -sum


select ciudad, sum(montocompra) as 'total compra' from visitantes group by ciudad;




Ejemplo

Visualizar el monto de compra por género

Análisis

1. Que se desea consultar?
    total comprado por género
2. Campo en el que se aplica la función?
    montocompra
3. Campo por el cual va a agrupar
    sexo
4. Campo
    group by -select -sum

select sexo, sum(montocompra) as 'total por genero' from visitantes group by sexo;





Ejemplo

Visualizar las ciudades a las que van más de dos visitantes

Análisis

1. Que se desea consultar?
    ciudad con mas de dos visitantes
2. Campo en el que se aplica la función?
    ciudad
3. Campo por el cual va a agrupar
    ciudad
4. Campo
    group by -select -count having
  
select ciudad, count(ciudad) as 'Ciudad más de 2 visitantes' from visitantes group by ciudad having count(ciudad)>2;

Nota: cuando utilizamos group by y se manejan condiciones estas no funcionan con where sino con la opción having


Ejemplo

Calcular el valor promedio de montocompra agrupados por ciudad y sexo

Análisis

1. Que se desea consultar?
    Valor promedio de compra por ciudad y género
2. Campo en el que se aplica la función?
    montocompra
3. Campo por el cual va a agrupar
    ciudad y sexo
4. Campo
    group by -select -avg  


select ciudad,sexo, avg(montocompra) as 'Promedio compra ' from visitantes group by ciudad,sexo;




Ejemplo

Visualizar el monto compra por ciudad mayores a 5 millones

Análisis

1. Que se desea consultar?
    Valor compra por ciudad mayor a 5 millones
2. Campo en el que se aplica la función?
    montocompra
3. Campo por el cual va a agrupar
    ciudad
4. Campo

    group by -select -sum having


select ciudad, sum(montocompra) as 'Ciudad con compra mayor a 5 millones' from visitantes group by ciudad having sum(montocompra)>5000000;