sql >> Base de Datos >  >> RDS >> MariaDB

Explicación del operador MariaDB UNION

En MariaDB, la UNION operador combina los resultados de múltiples SELECT declaraciones en un único conjunto de resultados.

Sintaxis

La sintaxis oficial es así:

SELECT ...
UNION [ALL | DISTINCT] SELECT ...
[UNION [ALL | DISTINCT] SELECT ...]
[ORDER BY [column [, column ...]]]
[LIMIT {[offset,] row_count | row_count OFFSET offset}]

A partir de MariaDB 10.4.0, se pueden usar paréntesis para especificar la precedencia.

Ejemplo

Supongamos que tenemos las siguientes tablas:

SELECT * FROM Teachers;
SELECT * FROM Students;

Resultado:

+-----------+-------------+
| TeacherId | TeacherName |
+-----------+-------------+
|         1 | Warren      |
|         2 | Ben         |
|         3 | Cathy       |
|         4 | Cathy       |
|         5 | Bill        |
|         6 | Bill        |
+-----------+-------------+

+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
|         1 | Faye        |
|         2 | Jet         |
|         3 | Spike       |
|         4 | Ein         |
|         5 | Warren      |
|         6 | Bill        |
+-----------+-------------+

Podemos usar la UNION operador para devolver a todos los profesores y estudiantes:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;

Resultado:

+-------------+
| TeacherName |
+-------------+
| Warren      |
| Ben         |
| Cathy       |
| Bill        |
| Faye        |
| Jet         |
| Spike       |
| Ein         |
+-------------+
8 rows in set (0.003 sec)

De forma predeterminada, UNION operador aplica implícitamente un DISTINCT operación. En otras palabras, devuelve solo valores distintos de forma predeterminada. Entonces, los resultados anteriores contienen solo uno de Warren, Cathy y Bill. Esto es a pesar del hecho de que las tablas combinadas en realidad contienen dos Warren, dos Cathy y tres Bill (hay dos maestros llamados Cathy, un maestro y un cliente llamado Warren, y dos llamados Bill, así como un estudiante llamado Bill).

Aquí hay un ejemplo que usa explícitamente DISTINCT operador:

SELECT TeacherName FROM Teachers
UNION DISTINCT
SELECT StudentName FROM Students;

Resultado:

+-------------+
| TeacherName |
+-------------+
| Warren      |
| Ben         |
| Cathy       |
| Bill        |
| Faye        |
| Jet         |
| Spike       |
| Ein         |
+-------------+
8 rows in set (0.004 sec)

Entonces obtenemos el mismo resultado que obtuvimos sin DISTINCT operador.

Incluir duplicados

Podemos usar el ALL palabra clave para incluir valores duplicados en los resultados:

SELECT TeacherName FROM Teachers
UNION ALL
SELECT StudentName FROM Students;

Resultado:

+-------------+
| TeacherName |
+-------------+
| Warren      |
| Ben         |
| Cathy       |
| Cathy       |
| Bill        |
| Bill        |
| Faye        |
| Jet         |
| Spike       |
| Ein         |
| Warren      |
| Bill        |
+-------------+
12 rows in set (0.002 sec)

Esta vez obtuvimos doce filas en lugar de las ocho que obtuvimos en nuestro primer ejemplo.

Podemos ver que ambos Cathys fueron devueltos y los tres Bills fueron devueltos.