Eléments concernant les requêtes sous ACCESS

Requêtes en QBE

Access utilise le « langage » visuel QBE pour exécuter les requêtes. Cela évite de connaître et/ou de saisir celles-ci en langage SQL, mais cette possibilité est disponible sous ACCESS. En fait les requêtes que nous saisissons en mode QBE sont « transformées » en SQL par Access pour les exécuter. .Il est préférable d'utiliser le mode Création afin de bénéficier de plus de possibilités qu'avec l'assistant. Il faut auparavant avoir réglé le problème des relations entre les tables pour pouvoir travailler sur les requêtes (sous peine de se trouver en présence de produits cartésiens)

Une fois la requête en mode création demandée Access propose de sélectionner les tables nécessaires. Pour beaucoup de requêtes il est donc inutile de les sélectionner toutes pour chaque requête ; cela conduit parfois à de graves erreurs.

Les tables étant sélectionnées, choisissons les champs :

Un clic sur exécute la requête. Il est conseillé de sauvegarder les requêtes créés et de les doter d'un nom significatif.

Comment filtrer les données ? En remplissant correctement la zone Critères située au-dessous de chaque champ. Vous avez noté que la sélection du tri est possible pour chaque colonne. L'ordre des tris est simple : une colonne située à gauche prime sur celle qui est à sa droite.

L'utilisation de jokers (identiques à ceux du Dos et de Windows) est permise. Le caractère * remplace n'importe quel caractère en n'importe quel nombre, alors que  ? n'en remplace qu'un, mais n'importe lequel. Ces jokers viennent enrichir les critères de sélection.

Exemples :

Etudiants dont le nom commence par la lettre d

d* ou comme "d*"

Dont le nom commence par un des lettres a, b, c, d

Comme "[a-d]*"

Dont le nom contient la lettre u

*u* ou comme "*u*"

Dont le nom contient exactement 4 lettres

Comme "????"

Tous les jours d'octobre 2005

Comme "*/10/2005"

Remarque : Bien souvent il n'est pas indispensable de saisir Comme .

Les critères peuvent se combiner pour une même colonne :

Paris ou les villes dont le nom commence par v

"paris" Ou Comme "v*"

Toutes les villes sauf Paris

Pas "paris"

Villes parmi une liste (ici Paris et Rouen)

In ('paris';'rouen')

Aucune ville de la liste

Pas In ('paris';'rouen')

Pour les champs numériques les caractères de comparaison classiques sont disponibles (>, >=, < , <=, =, complétés par d'autres :

Age supérieur à 25

>25

Age inférieur ou égal à 25

<=25

Age egal à 30

30

Age compris entre 22 et 26

entre 23 Et 28

Entre le 15/10/2005 et le 3/11/2005

Entre 15/10/2005 et à3/11/2005

Concernant les dates  :

Date du jour

Date()

Date précédent aujourd'hui

<Date()

Les 15 derniers jours

<Date()-15

Entre le mois dernier et le mois suivant

Entre Date()-30 Et Date()+30

Cas des champs oui/non  : Il suffit de saisir OUI ou NON sous la colonne concernée.

Vérifier la présence de valeurs pour une colonne :

Pas de valeurs

EST NULL

Que les lignes dont ce champ n'est pas vide

EST PAS NULL

Requête paramétrable  : Celle-ci invite l'utilisateur à saisir ce qu'il désire voir.

Nom d'un étudiant

[saisir un nom]

Partie du nom d'un étudiant

Comme "*" & [saisir un nom] & "*"

L'exécution dans le premier cas va faire apparaître une boîte de dialogue permettant la saisie du nom exact . Dans le second cas un partie du nom suffit.

Requêtes combinées

Etudiants dont l'âge est inférieur à l'âge moyen.

< (SELECT avg(age) from etudiant);

Eléments relatifs aux calculs :

Champ calculés : On le sait, ceux-ci ne sont pas saisis ni sauvegardés. En revanche le mode de calcul l'est. Principe :

Frais= age de l'étudiant * 50 €

Frais :[age]*50

Requêtes contenant des calculs : un clic sur l'icône Sigma permet d'ajouter une ligne Opérations .

Beaucoup de ces fonctions de calcul concernent les champs numériques, mais certaines s'appliquent aussi à d'autres types de champs. Ll'aide d'Access détaille les fonctions disponibles.

 

Quelques exemples : Nombre d'étudiants par communes :

Age moyen des étudiants par cycle, tri décroissant :

Les requêtes en langage SQL.

Ecrire directement ses requêtes en SQL est possible avec ACCESS. Pour cela dans l'onglet Requête créer une nouvelle requête en mode création (sans l'assistant donc). On ferme de suite sans sélectionner de table , puis on passe en mode SQ comme indiqué ci-contre : On arrive à une zone de saisie des requêtes en mode SQL : Le modèle relationnel (très simple) utilisé ici sera le suivant, sachant qu'on se restreint aux requêtes de type SELECT  :

Etudiant ( num_etudiant , nom, prenom, civilite, age, #cycle )

formation ( cycle , intitule)

Extraction de données : SELECT nom_des_champs FROM nom_de_table

Tous les champs de la table ETUDIANT

SELECT * FROM etudiant ;

Prénoms, et noms des étudiants

SELECT prenom, nom FROM etudiant ;

Tri des données extraites: ORDER BY nom_de_champ ASC, DESC

Nom et âge (tri croissant) des étudiants

SELECT nom, age FROM etudiant ORDER BY age ;

Prénoms et cycles, (tri décroissant)

SELECT prenom, cycle FROM etudiant ORDER BY cycle DESC ;

Sélection ( WHERE ) les jokers évoqués ci-dessus restent valables, ainsi que les opérateurs de comparaisons pour les champs numériques :.

Etudiants dont le nom commence par la lettre d

SELECT * FROM etudiant WHERE nom LIKE 'd*' ;

Dont le nom commence par un des lettres a, b, c, d

SELECT * FROM etudiant WHERE nom LIKE "[a-d]*"

Dont le nom contient la lettre u

SELECT * FROM etudiant WHERE nom LIKE '*u*'

Dont le nom contient exactement 4 lettres

SELECT nom from etudiant WHERE nom LIKE '????';

Etudiant dont l'âge est compris entre 22 et 25 ans

SELECT * FROM etudiant WHERE age BETWEEN 22 AND 25

Etudiants dont l'âge n'est pas supérieur à 25 ans

SELECT * from etudiant where NOT(age>25);

Jointures:

Nom et intitulé de la formation suivie

SELECT nom, intitule FROM etudiant, formation WHERE etudiant.cycle=formation.cycle;

SELECT Etudiant.nom, formation.intitule FROM formation INNER JOIN Etudiant ON formation.cycle = Etudiant.cycle;

Calculs et regroupements

Nombre d'étudiants

SELECT COUNT(*) FROM etudiant

Age moyen par formation

SELECT intitule, Avg(age) AS AgeMoyen FROM formation, etudiant

WHERE (etudiant.cycle=formation.cycle) GROUP BY intituled

Champs calculés: age exprimé en mois

SELECT age*12 AS Frais from etudiant

AS est un alias qui permet de designer clairement le nouvel objet créé par la requête.

Requêtes combinées (SELECT dans SELECT)

Etudiants dont l'âge est inférieur à l'âge moyen.

SELECT nom, age FROM etudiant WHERE age < (SELECT avg(age) from etudiant);

Aristeri.com est le site de Bernard Andruccioli Mentions légales -
http://aristeri.com/?rubrique=Access_Requetes/?rubrique=Access_Requetes