Comando JOIN-GROUP BY


**Base de datos Librería.


Comando JOIN en MYSQL sirve para combinar 2 o mas tablas según las designación de variables que queremos o necesitemos, unión entre varias tablas, devuelve la información que se encuentra esa unión (Relación).


INNER JOIN

Sintaxis:
>>> select * from tabla1 inner join tabla2 on tabla1.id=tabla2.id inner join tabla3 on tabla2.id=tabla3.id2

Ejercicio:
Visualizar el codifico del libro, el nombre del libro, el código del autor y el nombre del autor con sus respectivos libro escritos.

ANÁLISIS:
1. Que desea consultar y de que tablas?
  libro.idlibro 
  libro.descripcion
  autor.codautor
  autor.nombre

2. Que tablas se ven afectada o involucradas.?
   libro         autor      liautedi
3. Condiciones.?
  N/A
4. Como se relacionan las tablas.?
   libro.idlibro=liautedi.idlibro
   liautedi.codautor=autor.codautor
5. Que comando se debe utilizar.?
   Select, inner join.

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 autor.codautor=liautedi.codautor;


LEFT JOIN
El left join se utiliza para saber que registro no tiene correspondencia en otra tabla. Verifica de una tabla izquierda a una tabla derecha, si no encuentra coincidencias se genera una fila extra con todos los campos ceteados a NULL.


Ejercicio:
Visualizar que libro no se le ha asignado un autor utilizando el left.


ANÁLISIS:
1. Que desea consultar y de que tablas?
 libro.idlibro
 libro.descripcion
 liautedi.idlibro
2. Que tablas se ven afectada o involucradas.?
   libro       liautedi
3. Condiciones.?
 liautedi.idlibro is null;
4. Como se relacionan las tablas.?
 libro.idlibro=liautedi.idlibro
5. Que comando se debe utilizar.?
 Select, left join.

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


RIGHT JOIN

El right join opera del mismo modo que el left join, solo que la búsqueda de coincidencias las realiza del modo contrario, es decir busca valores de coincidencias desde a tabla de la derecha hacia la tabla que esta a ala izquierda y sucede lo mismo que en el left, sino encuentra coincidencias se genera una fila extra con todos los campos ceteados en NULL.
*** Este right join podemos reemplazar en los comando de inner join.

Ejercicio:
Visualizar listado de los libros que tienen al menos un autor asignado.

ANÁLISIS:
1. Que desea consultar y de que tablas?
libro.idlibro
libro.descripcion
liautedi.idlibro
2. Que tablas se ven afectada o involucradas.?
libro liautedi
3. Condiciones.?
N/A
4. Como se relacionan las tablas.?
libro.idlibro=liautedi.idlibro
5. Que comando se debe utilizar.?
Select, right join. 

Sintaxis:
>>> select distinct libro.idlibro, libro.descripcion, liautedi.idlibro from libro right join liautedi on libro.idlibro=liautedi.idlibro;


GROUP BY

Lo utilizamos cuando tenemos información que se repita.
En la sintaxis del GroupBy se utilizan normalmente la funciones(max,min,sum,avg,count)
Cuando manejamos consultas con condiciones no se hacen con Where sino con HAVING.
Sintaxis: >>>  Select * from tabla group by nombre_campo;

Ejercicio:
Visualizar la cantidad de visitantes por ciudad.

ANÁLISIS
1.Que deseo consultar.?
  Ciudad
2. Campo en el que se aplica la función.?
  MontoCompra
3.Campo por el cual voy a agrupar.?
  Ciudad
4. Comando.?
  Group by, select, count.

Sintaxis. >>> 
Select ciudad, count(ciudad) as 'CANTIDAD VISITANTES' from visitantes group by ciudad;


Ejercicio
Visualizar el total comprado por ciudad.

ANÁLISIS
1.Que deseo consultar.?
Ciudad
2. Campo en el que se aplica la función.?
MontoCompra
3.Campo por el cual voy a agrupar.?
Ciudad
4. Comando.?
Group by, select, sum.

Sintaxis. >> 
Select ciudad, sum(montocompra) as 'COMPRADO POR CIUDAD' from visitantes group by ciudad;


Ejercicio:
Visualizar el total comprado por sexo.

ANÁLISIS
1.Que deseo consultar.?
Sexo
2. Campo en el que se aplica la función.?
MontoCompra
3.Campo por el cual voy a agrupar.?
Sexo.
4. Comando.?
Group by, select, sum.
Sintaxis. >> 
Select sexo, sum(montocompra) as 'COMPRADO POR SEXO' from visitantes group by sexo;


Ejercicio:
Visualizar la ciudad a al que van mas de 2 visitantes.

ANÁLISIS
1.Que deseo consultar.?
Ciudad
2. Campo en el que se aplica la función.?
Ciudad
3.Campo por el cual voy a agrupar.?
Ciudad
4. Comando.?
Group by, select, count, having.
Sintaxis. >>
Select ciudad, count(ciudad) 'CIUDADES CON MAS DE 2 VISISTANTES' from visitantes group by ciudad having count(ciudad)>2;


Ejercicio:
Calcular el valor el valor promedio del monto compra agrupados por ciudad y sexo.

ANÁLISIS
1.Que deseo consultar.?
Ciudad, Sexo
2. Campo en el que se aplica la función.?
MontoCompra
3.Campo por el cual voy a agrupar.?
Ciudad, Sexo
4. Comando.?
Group by, select, avg.
Sintaxis. >>
Select ciudad,sexo, avg(montocompra) from visitantes group by ciudad,sexo;


Ejercicio:
Visualizar el monto de compra por ciudad mayores a 5 millones.

ANÁLISIS
1.Que deseo consultar.?
Ciudad
2. Campo en el que se aplica la función.?
MontoCompra
3.Campo por el cual voy a agrupar.?
Ciudad
4. Comando.?
Group by, select, sum, having.
Sintaxis. >>
Select ciudad, sum(montocompra) 'CIUDAD CON COMPRAS MAYORES A 5 MILLONES' from visitantes group by ciudad having sum(montocompra)>5000000;


VISTAS
Se utilizan para crear tablas temporales.

Sintaxis: >>  create view nombre de la vista.

Ejercicio:
Crear una vista con los nombres que terminan en 'A'

ANÁLISIS
1.Que deseo consultar.?
Nombre
2. Campo en el que se aplica la función.?

3.Campo por el cual voy a agrupar.?

4. Comando.?
Group by, select, sum, having.
Sintaxis. >>
create view visitantesaa as select * from visitantes where nombre like '%a';


Ejercicio:
insertamos un registro nuevo y vemos que pasa con la tabla vista(visitantesaa) se actualiza automáticamente.

Sintaxis. >>
insert into visitantes(nombre,ciudad,sexo,montocompra) values ('Ana Maria Guerrero Guasca', 'Cartagena', 'Femenino',5000000);

Ejercicio:
Eliminar una vista .

Sintaxis. >>
Drop view visitantesa;


OTROS COMANDO MYSQL


COMANDO 'AUTO_INCREMENT'
Permite crear campos que se auto incrementan automáticamente.

Ejercicio:
Crear una tabla utilizando este comando.

Insertamos registros y verificamos que el campo si este auto incrementando.

Eliminar un registro y mostrar la información y volvemos a insertar otro registro.

CREAR O MODIFICAR CAMPOS QUE NO ADMITAN TENER VALORES NEGATIVOS


Primero identificamos el Valor que tenemos Negativos.
y aplicamos la siguiente Sintaxis.

Para crear seria con la siguiente sintaxis:
>>>> create table producto(codigo int auto_increment, nombre char(30) not null, precio float unsigned, primary key(codigo));

El comando UNSIGNED permite crear o modificar campos que no tengan valores negativos teniendo en cuenta la información o datos que se van a almacenar.
>>>> alter table nombre_tabla modify campo tipo_de_dato unsigned not null;

Ejemplo: