|
Fr:Utiliser une instruction UNION dans une vue
From NeoWiki
La commande SQL UNION vous permet d'afficher des enregistrements depuis différentes tables ou requêtes comme s'ils étaient inclus dans une seule table. La commande UNION ne peut être utilisée qu'en mode SQL direct.
Les vues ressemblent aux requêtes mais avec plusieurs différences :
- Toutes les connexions de bases de données ne permettent pas l'utilisation des vues
- Une fois créées les vues ne peuvent pas être éditées. Vous devez repartir d'une nouvelle vue si vous voulez la modifier
- Les vues apparaissent dans la section Tables de la fenêtre principale de la base de données et sont à maints égards traitées comme des tables.
Utiliser UNION pour permettre des instructions OU multiples
Supposons que nous voulions trouver toutes les observations dans lesquelles une femelle ou un jeune a été identifié. À cause d'un problème connu avec les instructions OU multiples, notre requête sera plus rapide si nous utilisons une vue et une commande UNION. En outre, si nous voulions grouper ces résultats par Espèce, nous devrions utiliser cette méthode, car une telle requête basée sur une requête contenant de multiples instructions OU entraînerait un blocage de NeoOffice.
Alors que quelqu'un familiarisé avec le langage SQL peut construire complètement la vue en mode SQL, nous allons construire la première partie de la vue en utilisant le mode ébauche de vues, puis passer en vue SQL et en mode SQL direct. Notez qu'une fois le mode SQL direct choisi, il n'est pas possible de retourner en mode ébauche.
- Dans la fenêtre principale, cliquez sur l'icône Tables dans la colonne de gauche.
- Cliquez sur Créer une vue….
- Dans la fenêtre Ajouter des tables, ajoutez les tables suivantes en les sélectionnant et en cliquant sur le bouton Ajouter.
- Oiseaux
- Sorties
- Observations
- Fermez la fenêtre Ajouter des tables.
- Ajoutez les champs suivants à la table Vue en bas de la fenêtre Ébauche de vue. . Voir Utiliser une Requête pour Combiner des Champs de Différentes Tables si vous n'êtes pas sûrs de la méthode à utiliser pour faire cela.
- OiseauxID (depuis Oiseaux)
- NomAnglais (depuis Oiseaux)
- Femelle (depuis Observations)
- Jeune (depuis Observations )
- Date (depuis Sorties)
- Dans la ligne Critère sous Femelle, entrez TRUE
- Dans la première ligne Ou sous Jeune, entrez TRUE
- Cliqez sur le bouton (Dés)activer le mode ébauche de la barre d'outils (l'icône de source de données avec un triangle bleu). La vue passera en mode SQL et vous verrez une instruction SQL semblable à celle-ci : The view will shift to SQL view. and you will see and SQL statement that looks something like this:
- SELECT "Oiseaux"."OiseauxID", "Oiseaux"."NomAnglais", "Observations"."Femelle", "Observations"."Jeune", "Sorties"."Date" FROM "Observations", "Oiseaux", "Sorties" WHERE ( "Observations"."NomOiseau" = "Oiseaux"."NomAnglais" AND "Observations"."ObservationsSortiesID" = "Sorties"."SortiesID" ) AND ( ( "Observations"."Femelle" = True ) OR ( "Observations"."Jeune" = True ) )
- Copiez l'instruction SQL complète.
- Cliquez après l'instruction SQL et pressez la touche Retour deux ou trois fois. (Cela est simplement destiné à faciliter la lecture de l'instructionSQL).
- Tapez le mot UNION et pressez la touche Retour deux fois de plus.
- Collez l'instruction SELECT que vous avez copiée, vous avez deux instructions SELECT identiques, l'une avant et l'autre après la commande UNION.
- Retournez à la première instruction SELECT, et trouvez la section affichant :
- AND ( ( "Observations"."Femelle" = True ) OR ( "Observations"."Jeune" = True ) )
- Modifiez-la de la façon suiv ante :
- AND ( "Observations"."Femelle" = True )
- Allez à la seconde instruction SELECT, trouvez la même section, et modifiez-la de la façon suivante :
- AND ( "Observations"."Jeune" = True )
- Cliquez sur le bouton on the Exécuter directement l'instruction SQL de la barre d'outils (l'icône d'unique source de base de données avec une flèche verte pointant vers le bas).
- Cliquez sur le bouton Exécuter la requête de la barre d'outils (l'icône de double source de données avec une flèche verte pointant vers le bas).
- Vérifiez que la requête s'exécute correctement.
- Enregistrez la vue en cliquant sur le bouton Enregistrer de la barre d'outils. Donnez-lui un nom comme FemOuJeune
- Fermez la vue.
Utiliser UNION avec des tables non liées
L'exemple ci-dessus utilise les mêmes tables des deux côtés de l'instruction UNION. Mais vous pouvez aussi utiliser cette instruction pour combiner des enregistrements de deux tables ou requêtes non liées. Un lycée par exemple, peut avoir des tables séparées pour les élèves et la faculté, mais peut désirer combiner les enregistrements de ces tables pour créer un répertoire téléphonique.
Dans notre exemple, disons que nous avons fait un voyage à l'étranger en Asie du Nord par exemple, et que nous avons fait là de l'ornithologie. Tous les oiseaux observés ne sont pas nécessairement sur notre liste Oiseaux. Nous allons donc créer un ensemble de tables et de formulaires dans le même fichier de base de données mais spécifiquement prévu pour suivre les oiseaux de la région paléarctique. Nous voulons afficher une liste incluant les oiseaux communs aux tables Oiseaux et Oiseaux_Paléarctique. Une instruction UNION nous permettra de le faire.
Préparer les instructions SELECT
Une instruction UNION est constituée de deux instructions SELECT (l'assistant de requête vous permet de construire une instruction SELECT sans connaître le langage SQL) liées par la commande UNION. Dans notre cas, l'une des instructions SELECT sélectionnera les données des oiseaux dans la table Oiseaux, l'autre dans la table Oiseaux_Paléarctique. Il n'est pas nécessaire que les champs aient le même nom dans les deux instructions, mais les règles suivantes doivent être observées :
- Chaque instruction doit contenir le même nombre de champs
- Les champs en parallèle doivent être dans le même ordre dans les deux instructions
- Les champs en parallèle doivent être de même type, ou de type très similaires (i.e. un champ de texte et un champ de date ne peuvent pas être en parallèle).
Ceux qui sont très à l'aise avec SQL peuvent créer ces instructions SELECT "à partir de zéro", mais pour la majorité d'entre nous, il est plus facile d'utiliser le mode ébauche pour créer les instructions SELECT pour nous. Voici comment faire :
- Créez une nouvelle requête en mode ébauche, et fixez les champs que vous voulez utiliser. Si vous voulez utiliser la vue dans une requête groupée, assurez-vous de ne pas préciser un ordre de tri.
- Passez en mode SQL en cliquant sur l'icône (Dés)activer le mode ébauche de la barre d'outils. Ma requête ressemble à ceci :
- SELECT "Oiseaux"."OiseauxID", "Observations"."NomOiseau", "Sorties"."Date", "Sites"."NomLieu", "Sites"."Région" FROM "Observations", "Oiseaux", "Sorties", "Sites" WHERE ( "Observations"."NomOiseau" = "Oiseaux"."NomAnglais" AND "Observations"."ObservationsSortiesID" = "Sorties"."SortiesID" AND "Sorties"."Site" = "Sites"."NomLieu" )
- Copiez l'instruction SQL et collez-la dans un document facilement accessible, par exemple un document Writer vierge.
- Créez une atre requête en mode ébauche pour la deuxième instruction SELECT et collez-la comme précédemment. Ma deuxième requête ressemble à ceci :
- SELECT "zOiseaux_Paléarctique"."ID_PA", "zOiseaux_Paléarctique"."Nom_Anglais", "zSorties_Paléarctique"."Date", "zSites_Paléarctique"."NomLieu", "zSites_Paléarctique"."Pays" FROM "zObservations_Paléarctique", "zOiseaux_Paléarctique","zSorties_Paléarctique", "zSites_Paléarctique" WHERE ( "zObservations_Paléarctique"."NomAnglais" = "zOiseaux_Paléarctique"."Nom_Anglais" AND "zObservations_Paléarctique"."ID_Sortie_PA" = "zSorties_Paléarctique"."ID_Sortie" AND "zSorties_Paléarctique"."Lieu" = "zSites_Paléarctique"."NomLieu" )
- Créez une nouvelle vue en cliquant sur l'icône dans la colonne Base de données de la fenêtre principale du document et en cliquant ensuite sur l'icône Créer une vue… de la section Tâches.
- Fermez la fenêtre Ajouter des tables.
- Cliquez sur le bouton (Dés)activer le mode ébauche de la barre d'outils pour passer en mode SQL.
- Cliquez sur le bouton Exécuter directement l'instruction SQL.
- Collez la première instruction SQL dans la fenêtre Ébauche de vue.
- Cliquez après l'instruction et pressez la touche Retour deux fois.
- Entrez UNION
- Pressez la touche Retour deux fois.
- Collez la seconde instruction SELECT après le retour ligne.
- Cliquez sur le bouton Exécuter la requête pour vérifier le fonctionnement correct.
- Enregistrez et fermez la requête.
Dans notre exemple, cette méthode créerait une liste de toutes les observations de tous les oiseaux dans les deux tables. Pour créer une liste personnelle une requête utilisant la fonction GROUPE devrait être construite, basée sur cette vue.