— Comandos JOIN/GROUP BY —
Comando JOIN
El comando JOIN en MySQL, sirve para combinar 2 o mas tablas según la designación de variables que queremos o necesitamos. Unión entre varias tablas, devuelve la información que encuentra esa unión (Relación).
Sintaxis
SELECT * FROM TABLA1
INNER JOIN TABLA2 ON TABLA1.ID=TABLA2.ID
INNER JOIN TABLA3 ON TABLA3.ID2;
CONSULTAS RELACIONALES (Entre varias tablas)
Visualizar el codigo del libro, el nombre del libro,
el codigo del autor con sus respectivos libros escritos.
Analisis
1.Que se desea consultar y tablas
libro.idlibro
libro.descripcion
autor.codautor
autor.nombre
2.Que tablas se ven afectadas
Libro
Autor
liautedi
3.Condicciones
No hay
4.Como se relacionan las tablas
libro.idlibro = liautedi.idlibro
liautedi.codautor = autor.codautor
5.Que comando utilizar
SELECT
INNER JOIN
Sintaxis
SELECT 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;
LEFT JOIN
El left join se utiliza para saber que registros no tienen 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.
*Visualizar que libros no se les ha asignado un autos utilizando el left
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 busqueda 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 el left, sino encuentra coincidencias se genera una fila extra con todos los campos ceteados en NULL.
Visualizar el listado de los libros que tienen al menos un autor asignado
SELECT DISTINC
LIBRO.IDLIBRO,
LIBRO.DESCRIPCION,
LIAUTEDI.IDLIBRO
FROM LIBRO
RIGHT JOIN LIAUTEDI ON LIBRO.IDLIBRO=LIAUTEDI.IDLIBRO;
SELECT LIBRO.IDLIBRO,
LIBRO.DESCRIPCION,
AUTOR.CODAUTOR,
AUTOR.NOMBRE
FROM LIBRO
RIGHT JOIN LIAUTEDI ON LIBRO.IDLIBRO = LIAUTEDI.IDLIBRO
RIGHT JOIN AUTOR ON LIAUTEDI.CODAUTOR = AUTOR.CODAUTOR;
TURISMO.SQL
AGRUPAR INFORMACION
Comando GROUP BY
Sintaxis
SELECT * FROM NOMBRETABLA GROUP BY NOMBRECAMPO;
NOTA: El group by normalmente utiliza las funciones
(MAX,MIN,SUM,AVG,COUNT)
Visualizar la cantitades de visitantes por ciudad
Analisis
1.Que se desea consultar
2.Campo en el que se aplica la funcion
montocompra
3.Campo por el cual va agrupar
Ciudad
4.Comando
GROUP BY
SELECT
COUNT
Sintaxis
Select nombrecampo (s), funcion (campofuncion) as
nombredeseado from nombretabla group by nomcampo;
SELECT ciudad,
count(ciudad) as 'cantidad visitantes'
FROM visitantes group by ciudad;
Visualizar el total comprado por ciudad
Analisis
1.Que se desea consultar
2.Campo en el que se aplica la funcion
montocompra
3.Campo por el cual va agrupar
Ciudad
4.Comando
GROUP BY
SELECT
SUM
SELECT ciudad,
sum(montocompra) as 'Total comprado por ciudad'
FROM visitantes group by ciudad;
Visualizar el monto de compra por sexo
Analisis
1.Que se desea consultar
Ciudad
2.Campo en el que se aplica la funcion
montocompra
3.Campo por el cual va agrupar
sexo
4.Comando
GROUP BY
SELECT
SUM
SELECT sexo,
sum(montocompra) as 'monto de compra por sexo'
FROM visitantes group by sexo;
Visualizar la cantidad de visitantes
Sintaxis
SELECT ciudad,
count(ciudad) as 'cantidad de visitantes'
FROM visitantes group by ciudad having
count(ciudad)>2;
NOTA: Cuando utilizamos gruop by y se manejan conducciones no funciona con el comando where sino con having.
Calcular el valor promedio de montocompra agrupados por ciudad y sexo
Analisis
1.Que se desea consultar
Ciudad,sexo
2.Campo en el que se aplica la funcion
montocompra
3.Campo por el cual va agrupar
sexo,ciudad
4.Comando
GROUP BY
SELECT
AVG
Sintaxis
SELECT ciudad,
sexo,
avg(montocompra) as 'promedio de montocompra agrupados por ciudad y sexo'
FROM visitantes group by ciudad,sexo;
Visualizar el monto compra por ciudad mayores a 5millones
Analisis
1.Que se desea consultar
Ciudad
2.Campo en el que se aplica la funcion
montocompra
3.Campo por el cual va agrupar
ciudad
4.Comando
GROUP BY
SELECT
count
Sintaxis
SELECT ciudad,
sum(montocompra) as 'monto compra por ciudad mayores a 5millones'
FROM visitantes group by ciudad having
sum(montocompra)>5000000;
VISTAS
Se utilizan para crear tablas temporales
Comando VIEW
Sintaxis
Ejemplo: Crear una vista con los nombres que terminan en A
Create view visitantesa as select * from visitantes
where nombre like '%a';
Nota: Se crea una tabla tal cual es la original, pero con la información consultada.
Inserta un nuevo visitantes
insert into visitantes(nombre, ciudad, sexo, montocompra)
values('Ana Maria Guerrero Guasca', 'Cartajena', 'Femenino', 5000000);
Para eliminar la vista es DROP VIEW NOMBREDELAVISTA;
DROP VIEW VISITANTESA;
OTROS COMANDOS MYSQL
Comando auto_increment;
Permite crear campos que se incrementan automaticamente.
Crear una tabla utilizando este comando.
create table edicion (codigo int auto_increment primary key, descripcion char (30) not null);
insert into edicion (descripcion) values ('primera edicion'),('segunda edicion'),('tercera edicion');
delete from edicion where codigo=1;
insert into edicion (descripcion) values ('primera edicion') ;
insert into edicion (descripcion) values ('cuarta edicion') ;
truncate table edicion;
CONTINUACIÓN CLASE (COMO CREAR CAMPOS QUE NO ADMITA VALORES NEGATIVOS)
create table producto(codigo int auto_increment, nombre char (30) not null,precio float, primary key (codigo));
insert into producto (nombre,precio) value('camisa',25000),('pantalon',45000),('chaqueta',-1000000);
alter table producto modify precio float unsigned not null;
NOTA: el comando unsigned sirve para crear campos que no permitan valores negativos, teniendo en cuenta la información o datos que se van a almacernar
update producto set precio=1000000 where codigo=3;