Comme vous pouvez le constater, il est très simple à utiliser. Mais il y a quelques règles à respecter lors d’une fusion.
1.UNION doit être composé de deux ou plusieurs instructions SELECT, séparées par le mot-clé UNION (par conséquent, si 4 instructions SELECT sont combinées, 3 mots-clés UNION seront utilisés).
2. Chaque requête dans une UNION doit contenir les mêmes colonnes, expressions ou fonctions d'agrégation (bien que les colonnes n'aient pas besoin d'être répertoriées dans le même ordre).
3. Les types de données des colonnes doivent être compatibles : les types ne doivent pas nécessairement être exactement les mêmes, mais doivent être des types que le SGBD peut convertir implicitement (par exemple, différents types numériques ou différents types de date). Si ces règles ou restrictions de base sont respectées, vous pouvez l'utiliser pour toute tâche de récupération de données.
Inclure ou annuler les lignes en double
Nous avons remarqué que lors de l'exécution séparée, le premier Le premier SELECT L'instruction renvoie 4 lignes et la deuxième instruction SELECT renvoie 5 lignes. Mais après avoir combiné les deux instructions SELECT avec UNION, seules 8 lignes ont été renvoyées au lieu de 9.
UNION supprime automatiquement les lignes en double du jeu de résultats de la requête (en d'autres termes, elle se comporte comme plusieurs conditions de clause WHERE dans une seule instruction SELECT). Étant donné que le fournisseur 1002 produit également un article dont le prix est inférieur à 5 , les deux instructions SELECT renvoient cette ligne. Lors de l'utilisation de UNION, les lignes en double sont automatiquement supprimées.
Il s'agit du comportement par défaut d'UNION, mais il peut être modifié si vous le souhaitez. En fait, si vous souhaitez renvoyer toutes les lignes correspondantes, utilisez UNION ALL au lieu de UNION .
Voir l'exemple ci-dessous :
Entrée :
select vend_id,prod_id,prod_price from products where prod_price <= 5 union all select vend_id,prod_id,prod_price from products where vend_id in (1001,1002);
Sortie :
Analyse : en utilisant UNION ALL , MySQL ne supprime pas les lignes en double. Ainsi, l'exemple ici renvoie 9 lignes, dont une apparaît deux fois.
UNION AND WHERE UNION fait presque toujours le même travail que plusieurs conditions WHERE. UNION ALL est une forme d'UNION, qui complète le travail que la clause WHERE ne peut pas. Si vous avez vraiment besoin que toutes les
lignes correspondantes pour chaque condition apparaissent (y compris les lignes en double), vous devez utiliser UNION ALL au lieu de WHERE.
Trier les résultats de la requête combinée
La sortie de l'instruction SELECT est triée à l'aide de la clause ORDER BY. Lors de la combinaison de requêtes avec UNION, une seule clause ORDER BY peut être utilisée et elle doit apparaître après la dernière instruction SELECT. Il n'existe aucune situation dans laquelle une partie d'un ensemble de résultats peut être triée dans un sens et une autre partie dans un autre, donc plusieurs clauses ORDER BY ne sont pas autorisées.
L'exemple suivant trie les résultats renvoyés par l'UNION précédente :
Entrée :
select vend_id,prod_id,prod_price from products where prod_price <= 5 union select vend_id,prod_id,prod_price from products where vend_id in (1001,1002) order by vend_id,prod_price;
Sortie :
Analyse : Cette UNION utilise la clause ORDER BY après la dernière instruction SELECT. Bien que la clause ORDER BY puisse sembler faire partie intégrante de la dernière instruction SELECT uniquement, MySQL l'utilisera en réalité pour classer tous les résultats renvoyés par toutes les instructions SELECT.
Combinez différentes tables. Pour simplifier l'expression, les requêtes combinées dans les exemples de ce chapitre utilisent toutes la même table. Mais la requête combinée utilisant UNION peut s'appliquer à différentes tables.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!