13. Unión de celdas y tablas vertientes: Inner join, Left join,Right join.

UNIÓN DE CELDAS Y TABLAS VERTIENTES: INNER JOIN, LEFT JOIN, RIGHT JOIN 

Unión de celdas 

Es cuando se juntan dos columnas o dos celdas de dichos campos combinado los resultados a múltiples consultas mediante el "select".

Join y vertientes

Sirven para combinar filas de dos o más tablas basándose en un campo común entre ellas devolviendo valores de datos de diferentes tablas. Por lo tanto esta se produce cuando se unen dos o más tablas y si no encuentra coincidencia no se muestra.

Inner join

Se puede usar como join sin nada más en esta también si no se encuentran coincidencias en las tablas unidas no te mostrará nada.

Left join 

Devuelve todos los registros de la tabla del lado izquierdo y por lo tanto si no hay coincidencias manda null del lado derecho. 

Right

Combina los valores de la primera tabla con valores de la segunda, pero esta devuelve las filas aunque no cumpla la condición.

Outer join o full outer join

En este caso se recupera todos los datos de ambas tablas. Este tipo de join no es compatible con MySQL y para conseguir un outer join hay que usar la unión de sentencias con unión del inner join y del left join. En MySQL la unión tienen que tener el mismo número de campos en el select sino dará error.

Figura 45. Unión de tablas 1

Figura 46 Unión de tablas 2

FUNCIONES COUNT,AVG Y SUM EN MARIADB 

Count 

Es la función que devuelve el número de filas de la consulta en caso de tener valores nulos estos no serán tomados en cuenta.
Su sintaxis es la siguiente: 
SELECT COUNT (columna) FROM tabla;

Figura 47. COUNT 

Por lo tanto hay dos maneras de utilizarlo ya sea para obtener el número de filas de una tabla: SELECT COUNT (*) FROM table; o para obtener un número de valores distintos de la columna: SELECT COUNT(DISTINCT columna ) FROM tabla;

Figura 48. COUNT (*)

Figura 49. COUNT  DISTINCT

AVG

Es una función que devuelve un valor promedio de un grupo de valores.
Su sintaxis es:
SELECT AVG(columna) FROM table;

Figura 50. AVG

La cual tiene también dos formas de usarse para calcular un promedio de todos los valores de una tabla: SELECT AVG(ALL column) FROM table; o para calcular el promedio de valores distintos de la columna: SELECT AVG(DISTINCT column) FROM table;

Figura 51. AVG ALL

Figura 52. AVG DISTINCT

Sum

Nos permite obtener la suma total de valores por lo cual su sintaxis es la siguiente: 
SELECT SUM(columna) FROM tabla;

Figura 53. SUM

 MIN, MAX Y BETWEEN

Min

La función min devuelve el valor más pequeño de los registros especificados dentro de una tabla. Su sintaxis es: 
select MIN(nombre_columna) from Nombre_tabla;

por lo que realizaremos un ejemplo con la función MIN, por lo que usaremos la tabla de alumnos que contiene lo siguiente:

Figura 54. Registros de la tabla alumnos

Como puedes notar en nuestra tabla nos permite obtener el número más pequeño de todos los registros en la columna edad por lo que usaremos la siguiente instrucción:

Figura 55. Registros con función MIN

Como puedes observar nos aparece solo el 16 ya que es la edad más pequeña que tenemos en nuestros registros.

Max

La función Max devuelve el valor más grande que contienen nuestros registros de nuestra tabla. Su sintaxis es: 
select MAX(nombre_columna) from nombre_tabla;

Haremos un ejemplo utilizando es la función Max, tomando los registros de nuestra tabla de alumnos usando la siguiente instrucción como se muestra en la imagen:

Figura 56. Registros con la función  MAX

Como pudiste observar nos mostró el 17 ya que este es la edad más grande de nuestros registros.

between 

Es un operador utilizado para especificar rangos de valores inclusivos, normalmente es usado para fechas aunque también se puede usar en string y números. Su sintaxis es: 
select * from nombre_tabla where nombre_columna BETWEEN  rango1 and rango2;

Ahora haremos un ejemplo usando el operador between por lo que usaremos nuestra tabla alumnos, en la cual mostraremos aquellos registros que se encuentran entre el rango de la "A" a la "M". Usaremos la sentencia la cual se muestra en la siguiente imagen: 

Figura 57. Registros con el uso del operador BETWEEN

Como puedes observar aparecen todos aquellos registros que están dentro del rango de "A" a la "M", pero en nuestro rango no se incluye la "M" ya que indica que solo nos muestre todos aquellos registros que estén antes de la letra "M".
También te mostraré como usar el between para que no nos muestre ciertos atributos por lo que se utiliza la siguiente sintaxis:
select * from nombre_tabla where nombre_tabla not between rango1 and rango2;

A continuación te mostraré un ejemplo de como usar el between para que no muestre ciertos registros, utilizando nuestra tabla alumnos. Usaremos la instrucción que aparece en la siguiente imagen:

Figura 58. Sentencia para no mostrar registros con NOT BETWEEN

Como puedes observar en la imagen solo nos está mostrando aquellos registros que su "id" es menor a 5 pero mayor que 7, ya que la condición que tenía era que no nos mostrará aquellos registros que estuvieran entre el 5 y el 7.

ELIMINAR LLAVE FORÁNEA Y LLAVE PRIMARIA DE LAS TABLAS 

Eliminar relaciones entre las tablas

Cuando trabajamos con bases de datos relacionales como MySQL o bien MariaDB, debemos establecer relaciones entre las entidades que conforman nuestra base de datos; esto nos permitirá, estructurar los datos y asociarlos según la lógica que deseamos imprimir a nuestro proyecto.
Es muy común luego de crear las relaciones entre las tablas desear eliminarlas, en algunas ocasiones incluso luego de contar con campos insertados

Restricciones (Constraint)

Se pueden colocar restricciones para limitar el tipo de dato que puede ingresarse en una tabla. Dichas restricciones pueden especificarse cuando la tabla se crea por primera vez a través de la instrucción create table o luego de crear la tabla a través de la instrucción alter table.

CREATE TABLE VENTAS(id_ventas smallint(4), id_productos smallint(4), Primary key(id_ventas),KEY id_productos (id_productos));

CONSTRAINT Nombre_restricción foreign key(id_productos) references PRODUCTOS(id_productos));

Eliminar llave Foránea(Foreign key)

Si intentamos borrar una llave foránea que tenga registros dependientes de una llave primaria , dará un error semejante a:
ERROR 1025 (HY000): Error on rename of ‘.\sistema\venta’ to ‘.\sistema\#sql2-b5c
-21’ (errno: 152)

Lo único que debes de hacer es primero eliminar la restricción, y después borrar la clave foránea. Como en  los siguientes ejemplos:
ALTER TABLE Nombre_tabla DROP CONSTRAIN Nombre_restricción;
DROP INDEX Nombre_restricción on Nombre_tabla;

Eliminar llave primaria (Primary key)

Si queremos eliminar la clave primaria establecida en un campo "auto_increment" aparece un mensaje de error y la sentencia no se ejecuta porque si existe un campo con este atributo debe ser clave primaria. Primero se debe modificar el campo quitándole el atributo "auto_increment" y luego se podrá eliminar la clave.
La instrucción para eliminar la llave primaria es:
ALTER TABLE Nombre_tabla DROP Primary key; 

Con "alter table" y "Drop Primary key“ eliminamos una clave primaria definida al crear la tabla o agregada luego.

VALORES NULL, SELECCIONAR CAMPOS CON VALOR NULL, SELECCIONAR CAMPOS CON VALOR DIFERENTE A NULL.

Valores null 

Se utilizan cuando un valor de un registro es desconocido o ajeno a nosotros, estos valores nos se pueden colocar con ningún operador aritmético por lo que usaremos el "is" o en caso del negativo el "is not". Su sintaxis es:
select * from nombre_tabla where nombre_columna is null; 

Por lo que hemos modificado nuestra tabla alumnos y le hemos agregado 3 registros para que puedas notar la diferencias de el valor null. Por lo que quedó de la siguiente forma: 

Figura 59. Registros de nuestra tabla alumnos modificada.

Ahora mostraremos un ejemplo utilizado la sentencia para mostrar valores null, por lo que usaremos la siguiente instrucción como se muestra en la imagen:

Figura 60. Mostrar registros NULL

Como puedes observar solo nos aparecen aquellos registros que tienen el valor null en edad en este caso solo tenemos un registro.
También podemos mostrar todos los registros excepto los que tengan un valor null, por lo que usaremos la siguiente sintaxis:
select * from nombre_tabla where nombre_columna is not null; 

Un ejemplo en el cual no nos muestre los valores null por lo que usaremos nuestra tabla de alumnos, con la siguiente instrucción.

Figura 61. No mostrar registros con valores NULL

Como puedes notar el la imagen anterior no nos nuestra los registros que tienen un valor null. Pero también puedes observar nos aparecen aquellos registros que tienen un campo vacío.
Ahora te mostraré cómo debemos colocar la instrucción para aquellos registros que tengan un campo vacío. Tal y como se muestra en la siguiente imagen.

Figura 62. No mostrar registros con valor NULL o espacio vacío.

Como puedes observar en la imagen anterior no nos muestra valores que tienen una edad null o un espacio vacío. 

EXPRESIÓN LIKE

Like

like: Es una expresión que se utiliza para cadenas con un modelo en una expresión SQL  ya que permite encontrar valores en campos que coincidan con la expresión dada. Su sintaxis es:
select * from nombre_tabla where nombre_columna like 'patrón';

A continuación te mostraré un ejemplo en el cual utilizaremos la expresión like, ya que nos permitirá mostrar los registros siempre y cuando cumplan con una condición. Utilizaremos la siguiente instrucción que se muestra en la imagen: 

Figura 63. Mostrar registros con LIKE

Como puedes notar en la imagen anterior solo nos muestra los registros que comiencen con la letra "A" en la columna nombre de manera que el signo "%" de porcentaje nos indica que puede llevar cualquier letra después de la "A" siempre y cuando comience con la "A".

También podemos utilizar el like para que no nos muestre ciertos registros por lo que su sintaxis es:
select * from nombre_tabla where nombre_columna like 'patrón';

por lo que te mostraré un ejemplo usando esta sintaxis, utilizaremos nuestra tabla de alumnos, en la cual no nos mostrar los registros que tengan el patrón de la condición. Por lo que usaremos la siguiente instrucción que se muestra en la imagen.

Figura 64. No mostrar ciertos registros con LIKE

Como puedes observar en la imagen anterior solo nos muestra los registros que no llevan una "a" en la segunda posición de nuestro nombre, ya que el signo de porciento "%" que tiene al inicio indica que puede comenzar con cualquier letra pero que la segunda letra debe de ser "a" y que después puede ser cualquier letra por eso se encuentra otro signo de porciento "%". Por lo tanto solo nos muestra aquellos que no tiene una letra "a" en la segunda posición.

INSTRUCCIÓN UPDATE

Update 

Es una instrucción que actualiza registros de los campos existentes de una tabla con nuevos valores.
Sintaxis:
Update nombre tabla set nombre campo = 'dato nuevo' where nombre campo = 'dato viejo' 

Se usan las cláusulas: 

Where: Especifica qué resultados se modificarán.
Order by: Se modificara el orden según los deseas.
Limit: Es para establecer un límite de números que se  pueden actualizar.
Set: Es para establecer el nuevo valor para las columnas indicadas.

Diferencia entre Alter y Update

Alter: Se usa para actualizar la estructura de la tabla ya sea para agregar o eliminar columnas, etc.
Update: Se usa para actualizar los datos y cambiar registros en la tabla dejando la estructura de tal sin ningún cambio. 

 CREATE PROCEDURE 

¿Qué es un procedimiento de almacenamiento?

Es una porción de código que puedes guardar y reutilizar. Es útil cuando se repite la misma tarea varias veces, es un método  para encapsular el código además permite usar parámetros. Su síntesis para almacenamiento de procesos es:
create procedure nombre_proceso
->as
->sentencia_sql
->GO;
La síntesis para ejecutar un proceso es:
call nombre_proceso(param1, param2,..);

Parámetros 

Los parámetros se separan por comas, estos parámetros pueden ser de tres tipos los cuales son:
IN: Es el tipo de parámetro que se usa por defecto. La aplicación o código que invoque al procedimiento tendrá que pasar un argumento para este parámetros y trabaja con una copia de su valor.
OUT: El valor de este parámetro puede ser cambiado en el proceso y su valor modificado será enviado de vuelta por el código.
INOUT: Es la mezcla de los parámetros anteriores, la aplicación o código invocando en el procedimiento puede pasar un valor y devolver un valor modificado.

¿Cómo crear procedimientos de almacenamiento?

Para definir procedimientos debemos usar delimitadores que trata de un bloque independiente, y que retomara de nuevo en la sentencia DELIMITER del final. 

DROP PROCEDURE

Este comando se usa para borrar un procedimiento o función almacenado, debe tener el permiso de ALTER ROUTINE este permiso se otorga automáticamente.
La cláusula IF EXIXTS es una extensión de MySQL, evita que ocurra un error si la función o procedimiento no existe, generando una advertencia SHOW WARNINGS. Su síntesis es:
DROP (PROCEDURE|FUNCTION)(IF EXISTS)

ALTER PROCEDURE

Este comando puede usarse para cambiar las características de un procedimiento o función almacenada, debe tener el permiso ALTER ROUTILE. Su síntesis es:
ALTER(PROCEDURE|FUNCTION)sp_name(characteristic...)

show procedure

Es una extensión que retorna características de rutinas, como el nombre de la base de datos, nombre, tipo, creador, fecha de creación y modificación. Si no se especifica un patrón se alistara la información de todos los procedimientos almacenados. Su síntesis es:
SHOW CREATE PROCEDURE nombre_del_procedimientos\G

Fuentes:
Apuntes de clase (2020).