Dans MariaDB, l'UNION
l'opérateur combine les résultats de plusieurs SELECT
instructions dans un seul ensemble de résultats.
Syntaxe
La syntaxe officielle ressemble à ceci :
SELECT ...
UNION [ALL | DISTINCT] SELECT ...
[UNION [ALL | DISTINCT] SELECT ...]
[ORDER BY [column [, column ...]]]
[LIMIT {[offset,] row_count | row_count OFFSET offset}]
Depuis MariaDB 10.4.0, les parenthèses peuvent être utilisées pour spécifier la priorité.
Exemple
Supposons que nous ayons les tables suivantes :
SELECT * FROM Teachers;
SELECT * FROM Students;
Résultat :
+-----------+-------------+ | 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 | +-----------+-------------+
Nous pouvons utiliser le UNION
opérateur pour renvoyer tous les enseignants et élèves :
SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;
Résultat :
+-------------+ | TeacherName | +-------------+ | Warren | | Ben | | Cathy | | Bill | | Faye | | Jet | | Spike | | Ein | +-------------+ 8 rows in set (0.003 sec)
Par défaut, le UNION
l'opérateur applique implicitement un DISTINCT
opération. En d'autres termes, il ne renvoie que des valeurs distinctes par défaut. Ainsi, les résultats ci-dessus contiennent un seul chacun de Warren, Cathy et Bill. Ceci malgré le fait que les tables combinées contiennent en fait deux Warrens, deux Cathys et trois Bills (il y a deux enseignants appelés Cathy, un enseignant et un client appelé Warren, et deux appelés Bill, ainsi qu'un étudiant appelé Bill).
Voici un exemple qui utilise explicitement le DISTINCT
opérateur :
SELECT TeacherName FROM Teachers
UNION DISTINCT
SELECT StudentName FROM Students;
Résultat :
+-------------+ | TeacherName | +-------------+ | Warren | | Ben | | Cathy | | Bill | | Faye | | Jet | | Spike | | Ein | +-------------+ 8 rows in set (0.004 sec)
Nous obtenons donc le même résultat que nous avons obtenu sans le DISTINCT
opérateur.
Inclure les doublons
Nous pouvons utiliser le ALL
mot-clé pour inclure les valeurs en double dans les résultats :
SELECT TeacherName FROM Teachers
UNION ALL
SELECT StudentName FROM Students;
Résultat :
+-------------+ | TeacherName | +-------------+ | Warren | | Ben | | Cathy | | Cathy | | Bill | | Bill | | Faye | | Jet | | Spike | | Ein | | Warren | | Bill | +-------------+ 12 rows in set (0.002 sec)
Cette fois, nous avons eu douze lignes au lieu des huit que nous avions dans notre premier exemple.
Nous pouvons voir que les deux Cathys ont été retournées et que les trois Bills ont été retournés.