Cómo combinar los resultados de múltiples consultas SQL utilizando la declaración de la Unión
- 2516
- 25
- Carmen Casillas
En un artículo anterior hablamos sobre el tipo de tipo de UNIRSE
Podemos usar en una base de datos mariadb/mysql. Esta vez, en cambio, echamos un vistazo a UNIÓN
Declaración: cómo funciona, cómo podemos usarlo para combinar el resultado de las consultas ejecutadas en diferentes tablas y cuáles son sus peculiaridades.
En este tutorial aprenderás:
- Cómo usar la declaración de la Unión en un servidor mariadb/mysql
- ¿Cuáles son las propiedades de la declaración de la Unión?
El resultado de una declaración de la Unión
Requisitos y convenciones de software utilizados
Categoría | Requisitos, convenciones o versión de software utilizada |
---|---|
Sistema | INDEPENDO DEL OS |
Software | Una base de datos mariadb/mysql que funciona |
Otro | Conocimientos básicos de la base de datos MariadB/MySQL |
Convenciones | # - requiere que los comandos de Linux dados se ejecuten con privilegios raíz directamente como un usuario raíz o mediante el uso de sudo dominiops - Requiere que los comandos de Linux dados se ejecuten como un usuario regular no privilegiado |
La declaración de la Unión
El UNIÓN
Declaración Combinar los resultados de dos o más consultas. Mientras que al realizar una unión, podemos ejecutar algún tipo de acción o recuperar información adicional sobre la base de las relaciones existentes entre las tablas, al usar el UNIÓN
Declaración, si se cumplen algunas condiciones, las filas resultantes de consultas lanzadas en tablas diferentes, incluso no relacionadas, se pueden combinar. En este tutorial veremos un ejemplo básico y de un mundo real de cómo podemos usar el UNIÓN
declaración en un entorno mariadb/mysql.
Un ejemplo básico
Comencemos con un ejemplo muy básico para introducir las peculiaridades del UNIÓN
declaración. Supongamos que tenemos dos tablas completamente no relacionadas: la primera llamada "película" y la segunda "color". En la primera, cada fila contiene información sobre una película: el título, el género y la fecha de lanzamiento. El último alberga solo el nombre de algunos colores. Así es como se ven las tablas:
+----+---------------+---------+--------------+ | ID | título | género | Release_date | +----+---------------+---------+--------------+| 1 | Una nueva esperanza | fantasía | 1977-05-25 | | 2 | El padrino | Drama | 1972-05-24 | +----+---------------+---------+--------------++- -+ --------+ | ID | nombre | +----+--------+| 1 | Azul | | 2 | Amarillo | +----+--------+
Copiar Y esta es su descripción:
+--------------+-------------+------+-----+---------+----------------+ | Campo | Tipo | NULL | Clave | Predeterminado | Extra | +--------------+-------------+------+-----+------- -+ ----------------+ | ID | int (2) | No | PRI | NULL | auto_increment | | título | Varchar (20) | No | | NULL | | | género | Varchar (20) | No | | NULL | | | Release_date | Fecha | No | | NULL | | +--------------+-------------+------+-----+------- -+----------------++-------+-------------+------++ -----+---------+----------------+| Campo | Tipo | NULL | Clave | Predeterminado | Extra | +-------+-------------+------+-----+---------+---- ------------+ | ID | int (2) | No | PRI | NULL | auto_increment | | nombre | Varchar (10) | No | | NULL | | +-------+-------------+------+-----+---------+----------------+
Copiar Como se dijo antes, estas dos tablas no tienen absolutamente ninguna conexión entre sí. Mediante el uso del UNIÓN
Declaración, sin embargo, podemos combinar los resultados de dos consultas separadas lanzadas en ellas. Corramos:
Seleccione Título, Género de Movie Union Select ID, nombre del color;
El comando anterior devuelve el siguiente resultado:
+---------------+---------+ | título | género | +---------------+---------+| Una nueva esperanza | fantasía | | El padrino | Drama | | 1 | Azul | | 2 | Amarillo | +---------------+---------+
Copiar Explicemos. Realizamos dos diferentes SELECCIONAR
Consultas: en la primera seleccionamos el valor del "título" y "género" de las columnas para cada fila de la tabla de la película. En el segundo, en su lugar, seleccionamos las columnas "ID" y "Nombre" de la tabla "Color", nuevamente sin usar ningún filtro.
Incluso si las dos tablas están completamente no relacionadas, ya que usamos el UNIÓN
Declaración entre las dos consultas, las filas devueltas por cada una de ellas se combinan: el resultado es la tabla que puede ver arriba.
Incluso si en la gran mayoría de los casos del mundo real, las columnas seleccionadas de las tablas involucradas probablemente tendrían los mismos tipos de datos, en el ejemplo tonto anterior, podemos ver claramente cómo UNIÓN
sucede incluso si las columnas de las dos tablas originales contienen diferentes tipos de datos: ambas columnas seleccionadas de la tabla "Película" son de la Varar
Tipo de datos, mientras que la columna "ID" de la tabla "Color" es de tipo EN T
. Esto es posible porque la base de datos realiza automáticamente las conversiones de datos necesarias.
Otra cosa muy importante a notar es que las columnas en el UNIÓN
resultado, heredó sus nombres de los seleccionados en el primero
consulta, la que está a la izquierda del UNIÓN
Palabra clave: "Título" y "Género". Mirar el ejemplo anterior probablemente te haría preguntarte cuál UNIÓN
La declaración puede ser útil para el escenario de la vida real: veamos otro ejemplo.
El caso de fútbol de fantasía
Hace algún tiempo he estado involucrado en la creación de una pequeña aplicación de fútbol de fantasía. En la base de datos de la aplicación, había una tabla llamada "Club", que alojaba información sobre los clubes de fantasía involucrados en la competencia. Este es un extracto de ello:
+----+-----------------+--------+ | ID | nombre | Presupuesto | +----+-----------------+--------+| 1 | La Habana Blu | 4 | | 2 | Longobarda | 4 | | 3 | Real Siderno | 0 | | 4 | Equipo de terremoto | 66 | | 5 | Kalapagos | 33 | | 6 | Cantasant | 5 | | 7 | F.C. Mojito | 0 | | 8 | Apoel Nicotina | 1 | | 9 | Dharma | 0 | | 10 | Real 1908 | 12 | +----+-----------------+--------+
Copiar En el mismo proyecto también había una llamada de tabla "Calendario", en la que cada fila representaba un partido entre dos de los clubes enumerados anteriormente. Como teníamos 10 clubes, cada día de campeonato organizó un total de 5 partidos. Como ejemplo, aquí hay un extracto de todos los partidos de los primeros cuatro días:
+----+-----+------+-------------+-------+--------------+ | ID | día | anfitrión | host_scores | invitado | invitados_scores | +----+-----+------+-------------+-------+--------- -----+ | 1 | 1 | 2 | 75.5 | 8 | 67 | | 2 | 1 | 4 | 80 | 6 | 77 | | 3 | 1 | 7 | 63 | 9 | 71.5 | | 4 | 1 | 3 | 79.5 | 5 | 68 | | 5 | 1 | 10 | 64 | 1 | 72.5 | | 6 | 2 | 5 | 66.5 | 10 | sesenta y cinco.5 | | 7 | 2 | 9 | 82 | 3 | 62.5 | | 8 | 2 | 6 | 83 | 7 | 69.5 | | 9 | 2 | 8 | 77 | 4 | 79.5 | | 10 | 2 | 1 | 67 | 2 | 81.5 | | 11 | 3 | 4 | 73 | 2 | 58 | | 12 | 3 | 7 | 70.5 | 8 | 75.5 | | 13 | 3 | 3 | 66.5 | 6 | 88 | | 14 | 3 | 10 | 74.5 | 9 | 60.5 | | 15 | 3 | 5 | 68.5 | 1 | 72.5 | | 16 | 4 | 9 | 68 | 5 | 69 | | 17 | 4 | 6 | 60 | 10 | 66 | | 18 | 4 | 8 | 70.5 | 3 | 73.5 | | 19 | 4 | 2 | 71.5 | 7 | 79 | | 20 | 4 | 1 | 68.5 | 4 | 68 | +----+-----+------+-------------+-------+--------------+
Copiar La primera columna de cada fila contiene un clave sustituta
utilizado como el Clave primaria
para la mesa. El segundo contiene el entero que representa el día en que el partido es parte de. El anfitrión
, host_scores
, y invitado
, invitados_scores
Las columnas contienen, respectivamente, la identificación y los puntajes del club que jugaron como anfitriones y los del club que jugaron como invitado.
Ahora, digamos que queremos generar un rango en el que todos los clubes figuran en orden descendente en la base de los puntajes totales que realizaron en los primeros cuatro días de campeonato. Si cada identificación del club se enumerara solo en una columna, digamos "host", la operación sería realmente fácil: solo calcularíamos la suma de los puntajes utilizando el SUMA()
función agregada y agrupar los resultados por la identificación de los clubes, mostrándolos en orden descendente:
Seleccionar host, sum (host_scores) como total_scores del grupo calendario por orden de host por total_scores DESC
Copiar Sin embargo, dado que cada día de campeonato, un club juega alternativamente como anfitrión y como invitado, la consulta anterior no devolvería los resultados que queremos, pero produciría los puntajes totales de un equipo que incluye solo los puntajes hechos cuando jugó como anfitrión (o alternativamente, como invitado).
Ese es un caso en el que el UNIÓN
La declaración puede ser útil: podemos realizar dos consultas separadas, una que involucra las columnas "host" y "host_scores", y la otra que involucra las "invitadas" y "invitados_scores"; Entonces podemos usar el UNIÓN
Declaración para agregar la fila resultante de la segunda consulta a las devueltas por la primera y finalmente calcular los valores agregados. Además, podemos realizar una unión con la tabla "Club", para que el nombre de cada club aparezca en el resultado. Aquí está la consulta completa:
Seleccionar datos.Team_id, club.Nombre, suma (puntajes) como Total_scores de (seleccione Host como Team_id, Host_Scores como puntajes de Calendar Union All Select Guest, Guest_Scores de Calendar) como datos se unen al club en el club.id = datos.GRUPO EQUIP_ID POR DATOS.ORDER_ID ORDER por Total_Scores Desc;
Copiar Aquí está el resultado de la consulta:
+---------+-----------------+--------------+ | Team_id | nombre | Total_scores | +---------+-----------------+--------------+| 6 | Cantasant | 308 | | 4 | Equipo de terremoto | 300.5 | | 8 | Apoel Nicotina | 290 | | 2 | Longobarda | 286.5 | | 3 | Real Siderno | 282 | | 9 | Dharma | 282 | | 7 | F.C. Mojito | 282 | | 1 | La Habana Blu | 280.5 | | 5 | Kalapagos | 272 | | 10 | Real 1908 | 270 | +---------+-----------------+--------------+
Copiar Como puede ver, al final del cuarto día de campeonato, el equipo "Cantasant" fue el que tenía los puntajes más altos. Otra cosa a notar en la consulta anterior es el uso de la TODO
palabra clave junto con UNIÓN
: Era necesario porque cuando el UNIÓN
La declaración se utiliza, por defecto, se eliminan las filas duplicadas; si Unión todos
se usa, en su lugar, las filas se conservan.
Conclusiones
En este tutorial aprendimos a conocer el UNIÓN
Declaración en bases de datos mariadb/mysql. Vimos un ejemplo básico para demostrar algunas de las propiedades de la declaración y un ejemplo del mundo real, tomado de un proyecto real. Para resumir, las características de un UNIÓN
declaración:
- En la tabla resultante, se usa el nombre de las columnas seleccionadas en la primera consulta;
- El número de columnas debe ser el mismo en todas las consultas;
- Los tipos de datos de las columnas pueden ser diferentes, la base de datos realizará la conversión;
- Por defecto, cuando el
UNIÓN
Se utiliza la declaración, se eliminan las filas duplicadas en los resultados: para evitar esto podemos usarUnión todos
;
Expanda aún más su conocimiento de la declaración de la Unión, puede echar un vistazo a la documentación oficial.
Tutoriales de Linux relacionados:
- Instale MySQL en Ubuntu 20.04 LTS Linux
- Cómo instalar MySQL en Almalinux
- Ubuntu 20.04 WordPress con instalación de Apache
- Cosas para instalar en Ubuntu 20.04
- Introducción a los motores de almacenamiento MySQL
- Instalación de ampache Raspberry Pi
- Una introducción a la automatización, herramientas y técnicas de Linux
- Cómo crear una pila de lámparas basada en Docker usando Docker en ..
- Cómo cambiar la contraseña de usuario de mariadb
- Cómo persistir los datos a PostgreSQL en Java
- « Ajuste de rendimiento de PostgreSQL para una ejecución de consulta más rápida
- Introducción a Mariadb y MySQL desencadenantes »