Introducción a la base de datos se une a los ejemplos de mariadb y mysql unirse
- 4226
- 617
- Sra. Lorena Sedillo
Objetivo
Aprenda a conocer el tipo diferente de uniones y cómo usarlos trabajando con bases de datos MySQL o MariadB
Requisitos
- Sin requisitos particulares
Convenciones
- # - requiere que el comando Linux dado se ejecute con privilegios raíz
directamente como usuario raíz o mediante el uso desudo
dominio - ps - Dado el comando Linux para ser ejecutado como un usuario regular no privilegiado
Introducción
En un sistema de base de datos relacional, los datos están organizados en tablas, compuestos por filas y columnas. Cada fila es una instancia de la entidad representada por la tabla, con las columnas utilizadas como sus propiedades. Las relaciones entre las tablas se establecen mediante el uso de claves extranjeras, y la declaración con la que podemos realizar consultas que abarcan en varias tablas, se llama unirse
. En este tutorial veremos el tipo diferente de uniones disponibles al usar MySQL o Mariadb.
La base de datos "Movie_store"
Lo que vamos a hacer en este tutorial es reproducir algunos casos concretos en los que las uniones pueden ayudarnos a lograr lo que queremos.
Lo primero que debe hacer es crear una base de datos de prueba. Digamos que tenemos una tienda de películas y necesitamos realizar un seguimiento de los títulos que tenemos disponibles: vamos a crear una base de datos "Movie_store" y una mesa para alojar información sobre los directores de películas:
Mariadb [(ninguno)]> Crear base de datos Movie_store; Mariadb [(ninguno)]> usar películas_store; Mariadb [Movie_store]> Crear Director de tabla ( -> ID SmallInt (1) Unsigned No Null Auto_incement, -> Nombre Varchar (35) No NULL, -> Fecha de nacimiento no nula, -> Clave primaria (id));
Copiar Aquí está la representación visual de la tabla que acabamos de crear:
Mariadb [películas]> describir al director; +-----------+----------------------+------+-----+- --------+ ----------------+ | Campo | Tipo | NULL | Clave | Predeterminado | Extra | +-----------+----------------------+------+-----+- --------+ ----------------+ | ID | SmallInt (1) Unsigned | No | PRI | NULL | auto_increment | | nombre | Varchar (35) | No | | NULL | | | Fecha de nacimiento | Fecha | No | | NULL | | +-----------+----------------------+------+-----+---------+----------------+
Copiar Primero creamos la base de datos Movie_store, que la "ingresamos" utilizando el USAR
declaración, y finalmente creó la tabla del director. Como dijimos antes, cada fila en una tabla representa una "instancia" de la entidad representada por la mesa misma, en este caso un director de cine.
Cada director tiene algunas propiedades representadas por las columnas de la tabla, por lo que, por ejemplo, cada director tiene un nombre y un cumpleaños. Cada fila tiene un identificador único, que es el valor en la columna que es el Clave primaria
de la mesa.
En este ejemplo, la clave principal es también lo que se llama clave sustituta
. Este tipo de clave es un identificador "artificial", en el sentido de que no está relacionado con la naturaleza de la entidad (un directorio en este caso): no tiene significado semántico, y es generado y utilizado por el sistema para su sistema propio de trabajo interno. La clave se genera automáticamente y, dado que tiene el AUTOINCREMENTO
Propiedad, se inserta incrementalmente cada vez que creamos una nueva fila, por lo que no necesitamos insertarla explícitamente:
Mariadb [Movie_store]> Insertar en el director ('Nombre', 'Birthdate') Valores-> ('George Lucas', '1944-05-14'),-> ('George Romero', '1940-02-04' ),-> ('John Mctiernan', '1951-01-08'),-> ('Rian Johnson', '1973-12-17');
Copiar Nuestra tabla ahora contiene cuatro directores:
+----+----------------+------------+ | ID | nombre | Fecha de nacimiento | +----+----------------+------------+| 1 | George Lucas | 1944-05-14 | | 2 | George Romero | 1940-02-04 | | 3 | John McTiernan | 1951-01-08 | | 4 | Rian Johnson | 1973-12-17 | +----+----------------+------------+
Copiar Cada uno de esos directores tiene una o más películas asociadas con él: ¿cómo podríamos representarlos? ? No podemos agregar información sobre las películas en esta tabla: esto significaría tener muchos datos repetidos: cada vez que agregamos una película, repetiríamos la información de su director, y sería horrible decir lo menos. Necesitamos crear una tabla dedicada para organizar la información de las películas, y al mismo tiempo, necesitamos poder crear una referencia entre ella y su director. Eso es lo que llaves extranjeras
son para:
Mariadb [Movie_store]> Crear Título de la tabla ( -> ID SmallInt (1) Unsigned no NULL Auto_incement, -> Nombre Varchar (35) No NULL, -> Fecha de lanzamiento_date no nulo, -> Género Varchar (10) No NULL, ->> director_id smallInt (1) sin firmar no nulo, -> clave primaria (id), -> clave extranjera (direct_id) Director de referencias (ID));
Copiar Creamos la tabla al igual que antes, definiendo una clave primaria y agregamos una restricción de clave extranjera. Así es como habilitamos una relación entre dos tablas: básicamente, estamos imponiendo que se inserte una fila, el valor de la columna Director_ID debe corresponder a un valor en la columna de identificación de la tabla del director (que es único, ya que es el Tabla clave principal). En otras palabras, cada título debe tener una referencia a un director existente en nuestra base de datos, de lo contrario se activará un error: esto garantiza la consistencia.
Insertemos algunos títulos en nuestra mesa:
Mariadb [Movie_store]> Insertar en el título ('Nombre', 'Release_Date', 'Género', 'Director_id') Valores-> ('Night of the Living Dead', '1968-10-01', 'Horror', 2 ),-> ('Revenge of the Sith', '2005-05-19', 'Space Opera', 1),-> ('Die Hard', '1988-07-15', 'Acción', 3) ;
Copiar Eso es todo, tenemos algún título. Primero insertamos esa obra maestra de una película que es 'Night of the Living Dead', dirigida por George Romero: Observe que el 2
En la columna Director_ID corresponde a la identificación de George Romero en la tabla Director.
Usando el mismo principio, insertamos una película de George Lucas (ID 1 en la mesa del Director), 'Revenge of the Sith' y 'Die Hard', una famosa película de acción dirigida por John McTiernan (ID 3 en Director Table). En este momento no tenemos películas de Rian Johnson: hay una razón para esto (aparte del hecho de que me decepcionó el último Jedi), y lo veremos más tarde. Ahora que configuramos una estructura de base de datos muy básica, podemos comenzar a hablar sobre Uniones
.
Cuantos tipos de uniones?
Se utilizan diferentes nombres para hacer referencia al mismo tipo de uniones, pero básicamente tenemos interno
y exterior
Uniones. Los primeros también se llaman Crossed Junes
o simplemente Uniones
(Son sinónimos en mysql - mariadb). La última categoría incluye izquierda
y bien
Uniones.
Juntas internas
Una unión interna, emparejemos las filas en una mesa con filas en otra. Esta asociación puede basarse en la relación entre las dos tablas o se puede hacer independientemente de ella: en este caso, todas las filas de una mesa se unirán con todas las filas de la otra, produciendo lo que se llama A producto cartesiano
. Esto no tiene mucho sentido en nuestro ejemplo, pero lo demostremos:
Mariadb [película_store]> Seleccionar * Del director de unión del director; +----+----------------+------------+----+--------- -----------------+--------------+------------+---- ---------+ | ID | nombre | Fecha de nacimiento | ID | nombre | Release_date | género | director_id | +----+----------------+------------+----+--------- -----------------+--------------+------------+---- ---------+ | 1 | George Lucas | 1944-05-14 | 1 | Noche de los muertos vivos | 1968-10-01 | Horror | 2 | | 1 | George Lucas | 1944-05-14 | 2 | Venganza de los Sith | 2005-05-19 | operación espacial | 1 | | 1 | George Lucas | 1944-05-14 | 3 | Morir duro | 1988-07-15 | acción | 3 | | 2 | George Romero | 1940-02-04 | 1 | Noche de los muertos vivos | 1968-10-01 | Horror | 2 | | 2 | George Romero | 1940-02-04 | 2 | Venganza de los Sith | 2005-05-19 | operación espacial | 1 | | 2 | George Romero | 1940-02-04 | 3 | Morir duro | 1988-07-15 | acción | 3 | | 3 | John McTiernan | 1951-01-08 | 1 | Noche de los muertos vivos | 1968-10-01 | Horror | 2 | | 3 | John McTiernan | 1951-01-08 | 2 | Venganza de los Sith | 2005-05-19 | operación espacial | 1 | | 3 | John McTiernan | 1951-01-08 | 3 | Morir duro | 1988-07-15 | acción | 3 | | 4 | Rian Johnson | 1973-12-17 | 1 | Noche de los muertos vivos | 1968-10-01 | Horror | 2 | | 4 | Rian Johnson | 1973-12-17 | 2 | Venganza de los Sith | 2005-05-19 | operación espacial | 1 | | 4 | Rian Johnson | 1973-12-17 | 3 | Morir duro | 1988-07-15 | acción | 3 | +----+----------------+------------+----+--------------------------+--------------+------------+-------------+
Copiar Como puede ver, cada fila de una tabla se ha combinado con cada fila de la otra, produciendo 12 filas.
Veamos ahora un caso de uso diferente para una unión. Digamos que queremos inspeccionar nuestra base de datos para verificar todas las películas dirigidas por George Lucas que tenemos en la tienda. Para lograr esta tarea, debemos restringir la unión con un EN
cláusula, para que se base en la relación entre los títulos y su director:
Mariadb [película_store]> Seleccionar director.nombre, título.Nombre como película_title del director -> Únete al título en el director.id = título.director_id -> donde director.nombre = "George Lucas"
Copiar Aquí está el resultado de la consulta anterior:
+--------------+---------------------+ | nombre | Movie_title | +--------------+---------------------+| George Lucas | Venganza de los Sith | +--------------+---------------------+
Copiar Usando una unión restringida, basada en la relación entre las dos tablas, descubrimos que solo tenemos un título de George Lucas en la tienda: Revenge of the Sith. No solo restringimos la unión en la base de la relación existente entre las dos tablas, sino que restringimos aún más la consulta a las películas dirigidas por Lucas, utilizando el DÓNDE
declaración. Si lo hubiéramos omitido, la consulta habría producido una tabla con todo el director existente - Correspondencia de la película:
+----------------+--------------------------+ | nombre | Movie_title | +----------------+--------------------------+| George Lucas | Venganza de los Sith | | George Romero | Noche de los muertos vivos | | John McTiernan | Morir duro | +----------------+--------------------------+
Copiar Observe que Rian Johnson no está incluido en la consulta. Por que esto pasa? Esta es una característica de las uniones internas: muestran solo filas donde existe un partido en ambas tablas. Como no existe correspondencia para Rian Johnson en la tabla de título, no tenemos resultados para este director.
Juntas externas
El otro tipo de uniones que tenemos son el Juntas externas
. Esta categoría está dividida en Se une a la izquierda
y Se une a la derecha
. ¿Cuál es la diferencia con las uniones internas que vimos arriba? ? Por el contrario de lo que sucede con una unión interna, una unión externa muestra coincidencias incluso cuando no existe una correspondencia en ambas tablas. Cuando sea el caso, mostrará un valor nulo en las columnas solicitadas de la tabla donde no existe la coincidencia.Esto puede ser útil, por ejemplo, si queremos saber si hay algunos directores asociados sin películas. En nuestro caso, ya sabemos que es el caso, pero verifiquemos que use una unión a la izquierda:
Mariadb [película_store]> Seleccionar director.nombre, título.Nombre como Movie_title -> Del director de la izquierda Unir el título en el título.director_id = director.identificación
Copiar El resultado de la consulta:
+----------------+--------------------------+ | nombre | Movie_title | +----------------+--------------------------+| George Romero | Noche de los muertos vivos | | George Lucas | Venganza de los Sith | | John McTiernan | Morir duro | | Rian Johnson | NULL | +----------------+--------------------------+
Copiar El único director que no tiene películas en nuestra tienda es Rian Johnson. Al usar una unión externa, el orden en el que especificamos las tablas es importante. Por ejemplo, usando un Se unió a la izquierda
, Como acabamos de hacer anteriormente, cuando la fila de la mesa izquierda (en este caso el director) no tiene rival en las filas de la tabla derecha (título), un NULO
El valor se especifica en cada columna solicitada de este último; Cuando se encuentra una coincidencia, en cambio, su valor se muestra tal como sucede con una unión interna.
A Juego correcto
Funciona de la misma manera, la única diferencia es que el papel de las tablas está invertido. En la derecha, une toda la fila de la tabla derecha que no tiene coincidencia en la tabla izquierda está marcada con un valor nulo.
Esta propiedad del exterior se une es muy útil, pero hay casos en los que puede surgir un poco de confusión, particularmente cuando una tabla tiene un valor nulo permitido en algunas de sus columnas.
Tutoriales de Linux relacionados:
- Instale MySQL en Ubuntu 20.04 LTS Linux
- Cosas para instalar en Ubuntu 20.04
- Cómo instalar MySQL en Almalinux
- Cómo cambiar la contraseña de usuario de mariadb
- Introducción a los motores de almacenamiento MySQL
- Aplicaciones gráficas de interfaz de usuario (GUI) para administrar ..
- Ubuntu 20.04 WordPress con instalación de Apache
- Una introducción a la automatización, herramientas y técnicas de Linux
- Instalación de WordPress OpenLitespeed
- Instalación de ampache Raspberry Pi
- « Conceptos avanzados de Python
- Cómo realizar solicitudes HTTP con Python - Parte 1 La biblioteca estándar »