Ébauche de requête
Le mode Ébauche de requête permet de créer et d'éditer une requête de base de données.
La plupart des bases de données utilisent des requêtes pour filtrer ou trier les tables de base de données, ou bien pour afficher les enregistrements à l'écran. Les vues offrent les mêmes fonctionnalités que les requêtes, mais côté serveur. Si votre base de données se trouve sur un serveur qui prend en charge les vues, vous pouvez utiliser ces dernières pour filtrer les enregistrements stockés sur le serveur et accélérer le temps d'affichage.
Sélectionner la commande Créer une vue dans l'onglet Tables d'un document de base de données permet d'afficher la fenêtre Ébauche de vue, similaire à la fenêtre Ébauche de requête décrite ici.
La mise en page de la fenêtre Ébauche de requête est enregistrée avec une requête créée mais ne peut pas être enregistrée avec une vue créée.
Mode Ébauche
Pour créer une requête, cliquez sur l'icône Requêtes dans un document de base de données, puis sur Créer une requête en mode Ébauche.
En mode Ébauche, vous pouvez définir la requête dans le volet inférieur de la fenêtre. Pour définir une requête, spécifiez les noms des champs de la base de données que vous souhaitez inclure, ainsi que les critères d'affichage des champs. Pour réorganiser les colonnes dans l'espace inférieur de la fenêtre du mode Ébauche, faites glisser un en-tête de colonne vers un autre endroit, ou sélectionnez la colonne et appuyez sur CommandeCtrl+touche fléchée.
Les icônes des barres Ébauche de requête et Ébauche s'affichent en haut de la fenêtre du mode Ébauche de requête.
Si vous souhaitez tester une requête, double-cliquez sur le nom de la requête dans le document de base de données. Le résultat de la requête s'affiche dans une table similaire à la vue des sources de données. Remarque : la table affichée est temporaire.
Touches en mode Ébauche de requête
Touche |
Fonction |
F4 |
Aperçu |
F5 |
Exécuter la requête |
F7 |
Ajouter une table ou une requête |
Parcourir
Lorsque vous ouvrez l'ébauche de requête pour la première fois, vous voyez une boîte de dialogue dans laquelle vous devez d'abord sélectionner la table ou la requête qui sera la base de votre nouvelle requête.
Double-cliquez sur les champs à ajouter à la requête. Définissez des relations par glisser-déposer.
Lorsque vous concevez une requête, vous ne pouvez pas modifier les tables sélectionnées.
Supprimer des tables
Pour supprimer une table de la fenêtre d'ébauche, cliquez sur le bord supérieur de la fenêtre des tables, activez le menu contextuel et sélectionnez la commande Supprimer. Vous pouvez également utiliser la touche Suppr.
Déplacer une table et modifier la taille de la table
Vous pouvez organiser les tables à votre gré et en modifier la taille. Pour déplacer une table, cliquez sur le bord supérieur et faites-la glisser jusqu'à la position voulue. Pour agrandir ou réduire l'affichage, faites glisser un bord ou un angle de la table.
Relations de table
S'il y a des relations de données entre un nom de champ dans une table et un nom de champ dans une autre table, vous pouvez utiliser ces relations dans votre requête.
Si, par exemple, vous disposez d'une feuille de calcul pour les articles identifiés par un numéro d'article et d'une feuille de calcul pour les clients dans laquelle vous enregistrez tous les articles qu'un client commande à l'aide des numéros d'article correspondants, une relation est alors établie entre les deux champs de données "numéro d'article". Si vous ne souhaitez pas créer une requête renvoyant tous les articles qu'un client a commandés, vous devez conserver les données des deux feuilles de calcul. Pour cela, vous devez spécifier à LibreOffice la relation existant entre les données des deux feuilles de calcul.
Pour ce faire, cliquez sur un champ de données d'une table (par exemple le champ "Numéro d'article" de la table Clients) et, tout en maintenant le bouton de la souris enfoncé, faites-le glisser jusqu'au champ de données de l'autre table ("Numéro d'article" de la table Articles). Lorsque vous relâchez le bouton de la souris, vous voyez un trait qui relie les deux champs des deux fenêtres. La condition correspondante, à savoir que le contenu des deux champs de données doit être identique, est entrée dans la requête SQL résultante.
La création d'une requête basée sur plusieurs feuilles liées n'est possible que si vous utilisez LibreOffice en tant qu'interface pour une base de données relationnelle telle qu'Adabas.
Vous ne pouvez pas accéder aux tables de plusieurs bases de données dans une requête. Les requêtes impliquant plusieurs tables ne peuvent être créées que dans une seule base de données.
Définir le type de lien
Si vous double-cliquez sur la ligne reliant deux champs liés ou si vous activez la commande de menu Insérer - Nouvelle relation, vous pouvez spécifier le type de lien dans la boîte de dialogue Relations.
Vous pouvez également appuyer sur la touche Tabulation jusqu'à ce que la ligne de jointure soit sélectionnée (elle s'affiche agrandie). Appuyez ensuite sur Maj+F10 pour afficher le menu contextuel et choisissez la commande Éditer. Certaines bases de données ne prennent en charge que certains sous ensembles possibles de types de jointures.
Supprimer les relations
Pour supprimer une relation entre deux tables, cliquez sur la ligne de connexion puis appuyez sur la touche Suppr.
Vous pouvez également supprimer les entrées respectives dans la zone Champs utilisés de la boîte de dialogue Relations. Vous pouvez aussi appuyer sur la touche Tabulation jusqu'à ce que le vecteur de connexion soit mis en évidence, puis appuyer sur Maj+F10 pour ouvrir le menu contextuel et sélectionner la commande Supprimer.
Définir une requête
Sélectionnez les conditions de définition de votre requête. Toutes les colonnes de la table d'ébauche acceptent des champs de données pour les requêtes. Les conditions d'une ligne donnée sont liées par un ET logique.
Spécifier un nom de champ
Sélectionnez d'abord tous les noms de champ dans les tables devant être ajoutées à la requête. Pour ce faire, vous pouvez effectuer un glisser-déposer ou double-cliquer sur un nom de champ dans la fenêtre de la table. Avec la méthode glisser-déposer, utilisez la souris pour amener un nom de champ depuis la fenêtre de table jusqu'à la zone inférieure de l'ébauche de requête. Ce faisant, vous pouvez décider dans quelle colonne vous souhaitez ajouter le champ. Sélectionnez un nom de champ en double-cliquant dessus. Il est alors ajouté à la colonne libre suivante.
Supprimer les noms de champ
Pour supprimer un nom de champ de la requête, cliquez sur l'en-tête de la colonne du champ, puis choisissez la commande Supprimer du menu contextuel de la colonne.
Enregistrer une requête
Utilisez l'icône Enregistrer de la barre Standard pour enregistrer la requête. Une boîte de dialogue vous invite à attribuer un nom à la requête. Si la base de données prend en charge les schémas, vous pouvez également entrer un schéma.
Schéma
Saisissez le nom du schéma auquel doit être assignée la requête ou la vue de table.
Nom de la requête ou de la vue de table
Saisissez le nom de la requête ou vue de table.
Filtrer les données
Pour filtrer les données de la requête, définissez les préférences souhaitées dans la zone inférieure du mode Ébauche. Les lignes suivantes sont disponibles :
Champ
Saisissez le nom du champ de données auquel vous avez fait référence dans la requête. Tous les paramètres figurant dans les lignes inférieures se réfèrent à ce champ. Si vous activez une cellule d'un clic de souris, vous apercevez une touche de direction permettant de sélectionner un champ. L'option "Nom de la table.*" permet de sélectionner tous les champs de données et les critères sont valides pour l'ensemble des champs de la table.
Alias
Indique un alias. Ce dernier sera listé dans une requête au lieu du nom de champ. Cela permet d'utiliser les étiquettes de colonne personnalisées. Par exemple, si le champ de données comporte "n° référence" et qu'à la place vous souhaitez voir apparaître "Numéro de référence" dans la requête, saisissez "Numéro de référence" en tant qu'alias.
Dans une instruction SQL, les noms d'alias se définissent comme suit :
SELECT column AS alias FROM table.
Par exemple :
SELECT "NoArticle" AS Numéro-article FROM "Articles"
Table
La table de base de données correspondante du champ de données sélectionné est listée ici. Si vous activez une cellule à l'aide d'un clic de souris, une flèche apparaît afin que vous puissiez sélectionner une autre table de la requête active.
Trier
Si vous cliquez sur la cellule, vous pouvez choisir parmi les options suivantes : croissant, décroissant et non trié. Les champs de texte sont triés alphabétiquement et les champs numériques, numériquement. Pour la plupart des bases de données, les administrateurs peuvent paramétrer les options de tri.
Visible
Si vous cochez la propriété Visible pour un champ de données, ce champ est visible dans la requête. Si un champ de données est utilisé dans le seul but de formuler une condition, son affichage n'est pas indispensable.
Critères
Indique les critères selon lesquels le contenu du champ de données doit être filtré.
ou
Sur chaque ligne vous pouvez saisir un critère supplémentaire. Plusieurs critères d'une colonne sont liés par une relation de type OU.
En outre, vous pouvez insérer une ligne de fonction supplémentaire via le menu contextuel des en-têtes de ligne dans la partie inférieure de l'ébauche de requête :
Fonctions
Les fonctions que vous pouvez exécuter ici dépendent de la base de données utilisée.
Si vous utilisez la base de données HSQL, la zone de liste dans la ligne Fonction propose les options suivantes :
Option |
SQL |
Effet |
Aucune fonction |
Aucune fonction n'est exécutée. |
|
Moyenne |
AVG |
Calcule la moyenne arithmétique d'un champ. |
Nombre |
NB |
Détermine le nombre d'enregistrements dans la table. Les champs vides peuvent être comptés (a) ou non (b). a) COUNT(*) : Lorsque vous fournissez un astérisque en guise d'argument, tous les enregistrements de la table sont comptés. b) COUNT(column) : Lorsque vous fournissez un champ de données en guise d'argument, seules les colonnes dont le champ de données en question contient une valeur sont comptées. Autrement dit, dans ce cas, les valeurs Null (champs vides) ne sont pas comptées. |
Maximum |
MAX |
Renvoie la plus grande valeur d'un champ. |
Minimum |
MIN |
Renvoie la plus petite valeur d'un champ. |
Somme |
SOMME |
Calcule la somme des valeurs des champs associés. |
Grouper |
GROUP BY |
Regroupe les données de la requête en fonction du nom de champ sélectionné. Les fonctions sont exécutées selon les groupes spécifiés. En SQL, cette commande correspond à la clause GROUP BY (grouper par). Si un critère est ajouté, cette entrée s'affiche dans le SQL HAVING. |
Vous pouvez également saisir des appels de fonctions directement dans l'instruction SQL. La syntaxe est la suivante :
SELECT FUNCTION(column) FROM table.
Par exemple, l'appel de fonction permettant de calculer une somme se présentera comme suit dans SQL :
SELECT SUM("Prix") FROM "Articles".
Sauf pour la fonction Grouper, les fonctions ci-dessus sont appelées fonctions consolidées. Ce sont des fonctions calculant les données afin de créer des récapitulatifs des résultats. D'autres fonctions que celles listées dans la zone de liste sont également disponibles. Elles dépendent du système de base de données spécifique utilisé et de l'état actuel du pilote Base.
Pour utiliser d'autres fonctions qui ne sont pas listées dans la zone de liste, vous devez les saisir sous Champ.
Pour les appels de fonctions, vous pouvez également utiliser des alias. Pour que les noms de fonctions n'apparaissent pas dans l'en-tête de colonne de la requête, indiquez ce nom sous Alias.
Dans une instruction SQL, l'appel de fonction correspondant se présente comme suit :
SELECT FUNCTION() AS alias FROM table
Exemple :
SELECT COUNT(*) AS Nombre FROM "Articles"
Lorsque vous exécutez une fonction, vous ne pouvez pas insérer d'autres colonnes pour la requête que celles incluses dans la fonction "Grouper".
Exemples
Dans l'exemple suivant, une requête portant sur deux tables est exécutée : une table "Articles" contenant le champ "No_article" et une table "Fournisseurs" contenant le champ "Nom_fournisseur". Par ailleurs, les deux tables possèdent un champ commun, en l'occurrence "No_fournisseur"
Pour créer une requête contenant tous les fournisseurs qui livrent plus de trois articles, les étapes suivantes sont nécessaires.
-
Insérer les tables "Articles" et "Fournisseurs" dans l'ébauche de requête.
-
Lier les champs "No_fournisseur" des deux tables, au cas où il n'existe pas déjà de relation de ce type entre les deux tables.
-
Double-cliquer sur le champ "No_article" de la table "Articles". Afficher la ligne Fonction via le menu contextuel et sélectionner la fonction Nombre.
-
Entrer le critère >3 et désactiver l'option Visible.
-
Double-cliquer sur le champ "Nom_fournisseur" de la table "Fournisseurs" et sélectionner la fonction Groupement.
-
Exécutez la requête.
Si la table "Articles" contient les champs "Prix" (prix unitaire de chaque article) et "No_fournisseur" (désignant le fournisseur de l'article), la requête suivante vous permet de calculer le prix moyen des articles proposés par un fournisseur :
-
Insérer la table "Articles" dans l'ébauche de requête.
-
Double-cliquer sur les champs "Prix" et "No_fournisseur".
-
Activer la ligne Fonction et sélectionner la fonction Moyenne pour le champ "Prix".
-
Si vous le souhaitez, vous pouvez entrer l'alias de "Moyenne" sur la ligne (sans les guillemets).
-
Sélectionner la fonction Groupement pour le champ "No_fournisseur".
-
Exécutez la requête.
Voici les commandes de menu contextuel et les icônes disponibles :
Fonctions
Affiche ou masque une ligne pour la sélection de fonctions.
Nom de la table
Affiche ou masque la ligne pour le nom de table.
Nom d'alias
Affiche ou masque la ligne pour l'alias.
Valeurs distinctes
N'applique que des valeurs distinctes à la requête. Ceci s'applique aux enregistrements contenant des données figurant plusieurs fois dans les champs sélectionnés. Si la commande Valeurs distinctes est active, la requête contient un seul enregistrement (DISTINCT). Dans le cas contraire, elle contient tous les enregistrements correspondant aux critères de la requête (TOUT).
Par exemple, si le nom "Martin" est présent plusieurs fois dans votre base de données d'adresses, vous pouvez choisir la commande Valeurs distinctes pour indiquer dans la requête que le nom "Martin" ne doit s'afficher qu'une seule fois.
Pour une requête utilisant plusieurs champs, la combinaison des valeurs provenant de tous les champs doit être unique afin que le résultat puisse être constitué à partir d'un enregistrement spécifique. Un carnet d'adresses peut contenir, par exemple, une occurrence de "Martin de Brest" et deux occurrences de "Martin de Paris". Si la commande Valeurs distinctes est utilisée, la requête utilise les champs "nom" et "ville", et son résultat contient une fois "Martin de Brest" et une fois "Martin de Paris".
En SQL, cette commande correspond au prédicat DISTINCT.
Limite
Permet de maximiser le nombre d'enregistrements que la requête renvoie.
Si une Limite est ajoutée, vous obtiendrez au moins autant de lignes que le nombre spécifié. Sinon, les enregistrements affichés correspondent alors au critère de la requête.
Formuler les conditions de filtrage
Lors de la formulation des conditions de filtrage, plusieurs opérateurs et commandes sont disponibles. Outre les opérateurs relationnels, il existe des commandes SQL spécifiques appelant le contenu des champs de base de données. Si vous utilisez ces commandes dans la syntaxe LibreOffice, LibreOffice les convertit automatiquement dans la syntaxe SQL correspondante. Vous pouvez également saisir la commande SQL directement. Les tableaux suivants donnent une vue générale des opérateurs et des commandes :
Opérateur |
Signification |
La condition est remplie si... |
= |
égal à |
... le contenu du champ est identique à l'expression entrée. L'opérateur = n'est pas affiché dans les champs de requête ; si vous saisissez une valeur sans opérateur, c'est l'opérateur = qui sera adopté. |
<> |
différent de |
... le contenu du champ ne correspond pas à l'expression spécifiée. |
> |
supérieur à |
... le contenu du champ est supérieur à l'expression spécifiée. |
< |
inférieur à |
... le contenu du champ est inférieur à l'expression spécifiée. |
>= |
supérieur ou égal à |
... le contenu du champ est supérieur ou égal à l'expression spécifiée. |
<= |
inférieur ou égal à |
... le contenu du champ est inférieur ou égal à l'expression spécifiée. |
Exemples
='Madame' |
renvoie les champs de données contenant l'expression "Madame" |
<'2001-01-10' |
renvoie les dates antérieures au 10 janvier 2001 |
LIKE 'g?ve' |
renvoie le nom des champs ayant un contenu du type "give" et "gave". |
LIKE 'S*' |
renvoie les champs de données contenant l'expression "Sun". |
COMPRIS ENTRE 10 ET 20 |
renvoie les champs de données dont le contenu est compris entre les valeurs 10 et 20 (il peut s'agir aussi bien de champs de texte que de champs numériques). |
IN (1 ; 3 ; 5 ; 7) |
renvoie les champs de données contenant les valeurs 1, 3, 5, 7. Si ce champ contient par exemple un numéro d'article, vous pouvez créer une requête qui restitue l'article correspondant au numéro entré. |
PAS DANS ('Martin') |
renvoie des champs de données ne contenant pas "Martin". |
Like Escape Sequence: {escape 'escape-character'}
Exemple : select * from Article where NomArticle like 'The *%' {escape '*'}
L'exemple renvoie toutes les entrées dont le nom de l'article commence par 'The *'. Ceci vous permet donc de rechercher des caractères (interprétés dans d'autres cas comme substituants) tels que *, ?, _, % ou le point.
Outer Join Escape Sequence: {oj outer-join}
Exemple : select Article.* from {oj Article LEFT OUTER JOIN Commandes ON NoArticle=Commandes.NOA}
Interroger les champs de texte
Pour interroger le contenu d'un champ de texte, vous devez inclure l'expression entre apostrophes. Le système ne fait pas de différence entre les majuscules et les minuscules.
Interroger les champs de date
champs Date sont représentés sous la forme #Date# pour les identifier clairement comme des dates. Les constantes (expressions littérales) Date, Heure et Date&Heure utilisées dans des conditions peuvent être de type syntaxe d'échappement SQL ou syntaxe SQL2 par défaut.
Élément de type Date |
Syntaxe d'échappement SQL #1 - peut-être obsolète |
Syntaxe d'échappement SQL #2 |
Syntaxe SQL2 |
Date |
{D'YYYY-MM-DD'} |
{d 'YYYY-MM-DD'} |
'YYYY-MM-DD' |
Heure |
{D'HH:MM:SS'} |
{t 'HH:MI:SS[.SS]'} |
'HH:MI:SS[.SS]' |
Date et heure |
{D'YYYY-MM-DD HH:MM:SS'} |
{ts 'YYYY-MM-DD HH:MI:SS[.SS]'} |
'YYYY-MM-DD HH:MI:SS[.SS]' |
Exemple : select {d '1999-12-31'} from world.years
Exemple : select * from ma_table where annees='1999-12-31'
Toutes les expressions littérales de date doivent être placées entre guillemets simples. (Pour plus de détails, consultez la documentation de référence de la base de données et du connecteur que vous utilisez.)
Interroger les champs Oui/Non
Pour lancer une requête sur des champs Oui/Non, utilisez la syntaxe suivante pour des tables dBase :
État |
Critères de requête |
Exemple |
Oui |
pour les tables dBASE : différente d'une quelconque valeur donnée |
=1 renvoie tous les enregistrements pour lesquels le champ Oui/Non est de statut "Oui" ou "activé" (sélectionné en noir), |
Non |
. |
=0 renvoie tous les enregistrements pour lesquels le champ Oui/Non a l'état "Non" ou "désactivé" (aucune sélection). |
Null |
EST NUL |
IS NULL renvoie tous les enregistrements pour lesquels le champ Oui/Non n'a ni l'état Oui ni l'état Non (sélectionné en gris). |
La syntaxe dépend du système de base de données utilisé. Remarquez également que les champs Oui/Non peuvent être définis différemment (deux statuts seulement au lieu de trois).
Requêtes avec paramètre
Les requêtes paramétrées permettent à l'utilisateur de fournir des valeurs à l'exécution. Ces valeurs sont utilisées dans les critères pour sélectionner les enregistrement à afficher. Chacune de ces valeurs est associée à un nom de paramètre qui est utilisé pour demander à l'utilisateur de fournir cette valeur lorsque la requête est exécutée.
Les noms de paramètre sont précédés par un deux-points dans les deux modes Ébauche et SQL d'une requête. Ils peuvent être utilisés partout où une valeur peut apparaître. Si la même valeur doit apparaître plus d'une fois dans une requête, le même nom de paramètre sera utilisé.
Dans le cas le plus simple où l'utilisateur saisit une valeur pour une relation d'égalité, le nom de paramètre précédé de son deux-points est simplement saisi dans la ligne du critère. En mode SQL cela devrait être saisi sous la forme WHERE "Field" = :Parameter_name
Les noms de paramètre ne peuvent contenir aucun des caractères <space>`!"$%^*()+={}[]@'~#<>?/,. Ils ne peuvent pas être identiques à des noms de champs ni à des mots SQL réservés. Ils peuvent être identiques à des alias.
Une construction utile pour sélectionner des enregistrements sur la base de parties du contenu d'un champ texte, est d'ajouter une colonne masquée avec "LIKE '%' || :Part_of_field || '%'" comme critère. Cela sélectionnera les enregistrements avec une correspondance exacte. Si l'on veut un test insensible à la casse, une solution est d'utiliser LOWER (Field_Name) comme champ et LIKE LOWER ( '%' || :Part_of_field || '%' ) comme critère. Notez que les espaces dans le critère sont importants ; s'ils sont absents l'analyseur syntaxique SQL interprète le critère entier comme une chaîne de caractères à mettre en correspondance. En mode SQL cela devrait être saisi sous la forme LOWER ( "Field_Name" ) LIKE LOWER ( '%' || :Part_of_field || '%' ).
Les requêtes de paramètre peuvent être utilisées comme source de donnée pour sous-formulaire afin de permettre à l'utilisateur de limiter les enregistrements affichés.
Saisie de paramètre
La boîte de dialogue Saisie de paramètre demande à l'utilisateur d'indiquer les valeurs des paramètres. Saisissez une valeur pour chaque paramètre de requête et confirmez en cliquant sur OK ou en appuyant sur Entrée.
Pour la saisie des valeurs l'utilisateur peut utiliser n'importe quel caractère autorisé pour le SQL pour le critère correspondant ; cela peut dépendre du système de base de données sous-jacent.
L'utilisateur peut utiliser les caractères de substitution SQL "%" (chaîne de caractères arbitraire) ou "_" (caractère arbitraire) comme partie de la valeur pour extraire des enregistrements avec des critères plus complexes.
Mode SQL
L'abréviation SQL signifie "Structured Query Language" (langage de requête structuré) et désigne un ensemble d'instructions destinées à interroger, actualiser et gérer des bases de données relationnelles.
Dans LibreOffice, vous n'avez pas besoin de connaître le SQL pour la plupart des requêtes, dans la mesure où vous n'avez pas à saisir le code SQL. Si vous créez une requête dans l'ébauche de requête, LibreOffice convertit automatiquement les instructions dans la syntaxe SQL correspondante. Si vous passez en mode SQL à l'aide du bouton (Dés)activer le mode Ébauche, vous pouvez afficher les commandes SQL d'une requête ayant été créée précédemment.
Vous pouvez formuler votre requête directement en code SQL. Remarquez cependant que la syntaxe exacte dépend du système de base de données que vous utilisez.
Lorsque vous saisissez le code SQL manuellement, vous pouvez créer des requêtes SQL spécifiques qui ne sont pas prises en charge par l'interface graphique dans l'ébauche de requête. De telles requêtes doivent être exécutées en mode SQL natif.
En cliquant sur l'icône Exécuter directement l'instruction SQL dans la vue SQL, vous pouvez formuler une requête n'étant pas traitée par LibreOffice.