Vous êtes sur la page 1sur 53

OFPPT – ISTA BENI MELLAL © RHATAY – BENTALEB

Module N° 5 : Système d’information


Séquence N° 4 : Accèss : Requêtes Durée : 5 Jours
Objectif : Savoir Interroger une base de données à l’aide de requêtes SQL.

SOMMAIRE

I. LE LANGAGE SQL............................................................3
SQL ( STRUCTURED QUERY LANGAGE = LANGAGE DE REQUÊTE STRUCTURÉ ) N’EST PAS UN LANGAGE DE PROGRAMMATION
AU SENS CLASSIQUE DU TERME, MAIS PLUTÔT UN ENSEMBLE DE VERBES PERMETTANTS DE CRÉER EST DE MANIPULER DES TABLES
RELATIONNELLES, VERBES QUI DOIVENT EUX-MÊMES ÊTRE RETOURNÉS OU INCLUS DANS UN AUTRE LANGAGE. ........................3
1. LANGAGE DE DÉFINITION DE DONNÉES (DDL).........................................................................................................3
CREATE TABLE : Crée une nouvelle table.....................................................................................................3

II. SYNTAXE...........................................................................3
Description........................................................................................................................................................3
CREATE INDEX : Crée un nouvel index pour une table existante.............................................................5
Syntaxe.........................................................................................................................................................................5
ALTER TABLE : Modifie une table créée avec l’instruction CREATE .......................................................6
TABLE........................................................................................................................6
CONSTRAINT :.................................................................................................................................................9
DROP : Supprime une table d’une base de données ou supprime un index d’une table.............................11
Syntaxe.......................................................................................................................................................................11
2. LANGAGE DE MANIPULATION DE DONNÉES...............................................................................................................12
L’Instruction SELECT : Requête Sélection.....................................................................................................12
SQL ET L’ALGÈBRE RELATIONNELLE........................................................................................................................15
1.La Restriction...........................................................................................................................................................16

NUMCMD............................................................................16
2.La Projection............................................................................................................................................................16

NUMCMD............................................................................16
3.Le Produit cartésien ................................................................................................................................................16

NUMCMD............................................................................17
Paris................................................................................................................................................................17

C.NUMCMD.........................................................................17
Paris................................................................................................................................................................17
Paris................................................................................................................................................................17
Paris................................................................................................................................................................17
4.La Jointure...............................................................................................................................................................17

NUMCMD............................................................................18
Paris................................................................................................................................................................18
Grenoble.........................................................................................................................................................18

C.NUMCMD.........................................................................18
Ou Aussi..........................................................................................................................................................18
5.L’Union...................................................................................................................................................................19

 Page 1
OFPPT – ISTA BENI MELLAL © RHATAY – BENTALEB
Module N° 5 : Système d’information
Séquence N° 4 : Accèss : Requêtes Durée : 5 Jours
Objectif : Savoir Interroger une base de données à l’aide de requêtes SQL.

NUMCMD............................................................................19
NUMCMD............................................................................19
NUMCMD............................................................................19
6.L’Intersection...........................................................................................................................................................20

NUMCMD............................................................................20
NUMCMD............................................................................20
NUMCMD............................................................................20
7.La Différence :.........................................................................................................................................................20

NUMCMD............................................................................21
NUMCMD............................................................................21
NUMCMD............................................................................21
8.La Division .............................................................................................................................................................21
Ligne de COM Article ...................................................................................................................22
Les Prédicats : ALL, DISTINCT, DISTINCTROW, TOP ..............................................................................22
Les Fonctions de Regroupement :...................................................................................................................27
La Fonction AVG :.....................................................................................................................................................27
La Fonction Count :....................................................................................................................................................28
La Fonction MIN et MAX :........................................................................................................................................30
La Fonction Sum :.......................................................................................................................................................31
La Clause GROUP BY ..... HAVING :............................................................................................................33
La Clause Order..... BY :................................................................................................................................35
INNER JOIN :.................................................................................................................................................37
LEFT | RIGHT JOIN......................................................................................................................................40
PARAMETERS :..............................................................................................................................................42
SELECT .... INTO .... : Crée une requête de création de table.......................................................................43
INSERT INTO : Requête Ajout.......................................................................................................................44
Update : Requête Mise à jour.........................................................................................................................48

LES MISES À JOUR NE PEUVENT FAIRE APPEL AUX


FONCTIONS AVG, COUNT, MAX, MIN, SUM................48
DELETE : Requête suppression......................................................................................................................49
La Clause Where ............................................................................................................................................50
Fieldlist ..........................................................................................................................................................51

 Page 2
OFPPT – ISTA BENI MELLAL © RHATAY – BENTALEB
Module N° 5 : Système d’information
Séquence N° 4 : Accèss : Requêtes Durée : 5 Jours
Objectif : Savoir Interroger une base de données à l’aide de requêtes SQL.

I. Le Langage SQL

SQL ( Structured Query Langage = Langage de Requête structuré ) n’est pas


un langage de programmation au sens classique du terme, mais plutôt un
ensemble de verbes permettants de créer est de manipuler des tables
relationnelles, verbes qui doivent eux-mêmes être retournés ou inclus dans un
autre langage.

1. Langage de Définition de Données (DDL)

SQL n’est pas seulement un langage de requêtes, il permet en effet de définir


des structures de données, de spécifier des contraintes d’intégrité pour maîtriser leur
cohérence, d’imposer des droits d’accès garantissant la confidentialité des
informations. Tout cela va donc au-delà de simples possibilités d’interrogation et
d’extraction. Les instructions permettant ces opérations sont comme suit :

 CREATE TABLE : Crée une nouvelle table.

II. Syntaxe

CREATE TABLE table (field1 type [(size)] [NOT NULL] [index1]


[, field2 type [(size)] [NOT NULL] [index2] [, ...]] [, CONSTRAINT
multifieldindex [, ...]])

L’instruction CREATE TABLE se compose des éléments suivants :

Elément Description
Table Nom de la table à créer.
field1, field2 Nom du ou des champs à créer dans la nouvelle table. Vous
devez créer au moins un champ.
Type Type de données du field dans la nouvelle table.
Size Taille du champ en caractères (pour les données de type Texte
ou Binaire uniquement).
index1, index2 Clause CONSTRAINT définissant un index monochamp. Pour
plus d'informations sur la façon de le créer, reportez-vous à
l’aide relative à la clause CONSTRAINT.
Multifieldindex Clause CONSTRAINT définissant un index multichamp. Pour
plus d'informations sur la façon de le créer, reportez-vous à
l’aide relative à la clause CONSTRAINT.

 Page 3
OFPPT – ISTA BENI MELLAL © RHATAY – BENTALEB
Module N° 5 : Système d’information
Séquence N° 4 : Accèss : Requêtes Durée : 5 Jours
Objectif : Savoir Interroger une base de données à l’aide de requêtes SQL.

 Remarques

Employez l’instruction CREATE TABLE pour définir une nouvelle table, ses
champs et ses contraintes. Si NOT NULL est utilisé dans la définition d’un champ, les
nouveaux enregistrements devront contenir une donnée valide dans ce champ.

Une clause CONSTRAINT place diverses restrictions d’emploi sur un champ et


peut servir à définir la clé primaire. Vous pouvez aussi utiliser l’instruction CREATE
INDEX pour créer une clé primaire ou de nouveaux index sur des tables existantes.

Vous pouvez appliquer NOT NULL sur un champ unique ou à l’intérieur d’une
clause CONSTRAINT nommée s’appliquant à un champ unique ou à un champ
multiple. Cependant, cette restriction NOT NULL ne peut s’appliquer qu’une seule
fois sur un champ, sinon une erreur d’exécution se produit.

 Exemple :

L'exemple suivant présente la création d'une nouvelle table avec deux champs
de type Texte :

CREATE TABLE PremièreTable(Prénom TEXT, Nom TEXT) ;

L'exemple suivant montre la création d'une nouvelle table avec deux champs de
type Texte, un champ Date/Heure et un index unique reprenant ces trois champs :

CREATE TABLE DeuxièmeTable(Prénom TEXT,


Nom TEXT, DateDeNaissance DATETIME,
CONSTRAINT MaContrainteTable UNIQUE (Prénom, Nom,DateDeNaissance) ;

L'exemple suivant présente la création d'une nouvelle table avec deux champs
de type Text et un champ de type Entier. Le champ NSS est la clé primaire.

CREATE TABLE TroisièmeTable (Prénom TEXT, Nom TEXT, NSS INTEGER


CONSTRAINT MaContrainteChamp PRIMARY KEY) ;

 Page 4
OFPPT – ISTA BENI MELLAL © RHATAY – BENTALEB
Module N° 5 : Système d’information
Séquence N° 4 : Accèss : Requêtes Durée : 5 Jours
Objectif : Savoir Interroger une base de données à l’aide de requêtes SQL.

 CREATE INDEX : Crée un nouvel index pour une table existante.

Syntaxe

CREATE [ UNIQUE ] INDEX index


ON table (field [ASC|DESC][, field [ASC|DESC], ...])
[WITH { PRIMARY | DISALLOW NULL | IGNORE NULL }]

L’instruction CREATE INDEX se compose des éléments suivants :

Elément Description
index Nom de l’index à créer.
Table Nom de la table existante dans laquelle l’index doit être créé.
Field Nom du ou des champs à indexer. Pour créer un index monochamp,
spécifiez le nom de champ entre parenthèses à la suite du nom de la
table. Pour créer un index multichamp, spécifiez le nom de chaque
champ à inclure dans l'index. Pour créer des index établis par ordre
décroissant, utilisez le mot réservé DESC ; par défaut, les index sont
établis par ordre croissant.

 Remarques

Pour éviter les doublons dans le ou les champs indexés de différents


enregistrements, utilisez le mot réservé UNIQUE.

Dans la clause WITH facultative, vous avez la possibilité de forcer les règles de
validation des données. Pour ce faire, vous pouvez :

 Interdire les entrées Null dans le ou les champs indexés des nouveaux
enregistrements en utilisant l'option DISALLOW NULL.
 Empêcher que les enregistrements contenant des valeurs Null dans le ou les
champs indexés soient inclus dans l'index en utilisant l'option IGNORE NULL.
 Définir le ou les champs indexés comme clé primaire en utilisant le mot réservé
PRIMARY. Cela implique alors que la clé doit être unique, ainsi vous pouvez
omettre le mot réservé UNIQUE.

Vous pouvez également utiliser l'instruction ALTER TABLE pour ajouter un


index monochamp ou un index multichamp à une table. En outre, vous pouvez utiliser
cette instruction ou l'instruction DROP pour supprimer un index créé avec ALTER
TABLE ou CREATE INDEX

 Page 5
OFPPT – ISTA BENI MELLAL © RHATAY – BENTALEB
Module N° 5 : Système d’information
Séquence N° 4 : Accèss : Requêtes Durée : 5 Jours
Objectif : Savoir Interroger une base de données à l’aide de requêtes SQL.

 Note : N'utilisez pas le mot réservé PRIMARY lorsque vous créez un nouvel index
sur une table qui dispose déjà d'une clé primaire. Cette opération provoque une
erreur.

 Exemple :

L'exemple suivant présente la création d'un index comportant les champs Tél
domicile et Extension dans la table Employés :

CREATE INDEX NouvIndex ON Employés ([Tél domicile], Extension) ;

L'exemple suivant présente la création dans la table Clients d'un index


comportant le champ N° client. Deux enregistrements ne peuvent avoir les mêmes
données, et la valeur Null est interdite.

CREATE UNIQUE INDEX Numcli ON Clients ([N° client]) WITH DISALLOW


NULL ;

Pour supprimer l'index créé dans l'exemple précédent, vous devez utiliser
l'instruction DROP. Vous ne pouvez supprimer cet index de la table en mode Création
à moins de supprimer également la relation avec la table Clients. L'instruction suivante
supprime le nouvel index en utilisant l'instruction DROP :

DROP INDEX Numcli ON Clients ;

 ALTER TABLE : Modifie une table créée avec l’instruction CREATE


TABLE.

Syntaxe

ALTER TABLE table {ADD {COLUMN field type[(size)] [NOT NULL]


[CONSTRAINT index] I
CONSTRAINT multifieldindex} |
DROP {COLUMN field I CONSTRAINT indexname} }

 Page 6
OFPPT – ISTA BENI MELLAL © RHATAY – BENTALEB
Module N° 5 : Système d’information
Séquence N° 4 : Accèss : Requêtes Durée : 5 Jours
Objectif : Savoir Interroger une base de données à l’aide de requêtes SQL.

L’instruction ALTER TABLE se compose des éléments suivants :

Élément Description
Table Nom de la table à modifier.
Field Nom du champ à ajouter ou à supprimer dans la table.
Type Type de donnée du field.

Size Taille du champ, en caractères (champs Texte et Binaire


uniquement).
Index Index de field. Pour plus d'informations sur la création de cet index,
reportez-vous à la rubrique d’aide relative à la clause
CONSTRAINT.

Multifieldindex Définition d’un index multichamp à ajouter à la table. Pour plus


d'informations sur la création de cet index, reportez-vous à la
rubrique d’aide relative à la clause CONSTRAINT.
Indexname Nom de l’index multichamp à supprimer.

 Remarque :

L'instruction ALTER TABLE permet de modifier une table existante de plusieurs


façons. Ainsi, vous pouvez :

 Utiliser ADD COLUMN pour ajouter un nouveau champ à la table. Spécifiez alors
le nom du champ, son type de données et (dans le cas de champs Texte et Binaire)
sa taille (facultative). Par exemple, l'instruction suivante ajoute un champ de texte
de 25 caractères appelé Remarques à la table Employés :

ALTER TABLE Employés ADD COLUMN Remarques TEXT(25)

Vous pouvez également définir un index sur ce champ. Pour plus d'informations
sur les index monochamp, reportez-vous à la rubrique d'aide relative à la clause
CONSTRAINT.

Si vous ajoutez l’indication NOT NULL pour un champ, les nouveaux


enregistrements doivent contenir des données valides dans ce champ.

 Utiliser ADD CONSTRAINT pour ajouter un index multichamp. Pour plus


d'informations sur les index multichamps, reportez-vous à la rubrique d'aide
relative à la clause CONSTRAINT.

 Page 7
OFPPT – ISTA BENI MELLAL © RHATAY – BENTALEB
Module N° 5 : Système d’information
Séquence N° 4 : Accèss : Requêtes Durée : 5 Jours
Objectif : Savoir Interroger une base de données à l’aide de requêtes SQL.

 Utiliser DROP COLUMN pour supprimer un champ. Spécifiez alors uniquement le


nom du champ .
 Utiliser DROP CONSTRAINT pour supprimer un index multichamp. Spécifiez
alors uniquement le nom d'index suivant le mot réservé CONSTRAINT.

 Notes :

♦ Vous ne pouvez pas ajouter ou supprimer plusieurs champs ou index à la fois.


♦ Vous pouvez utiliser l'instruction CREATE INDEX pour ajouter un index
monochamp ou multichamp à une table, et vous pouvez utiliser l'instruction
ALTER TABLE ou DROP pour supprimer un index créé avec ALTER TABLE ou
CREATE INDEX.
♦ Vous pouvez employer NOT NULL pour un champ unique ou dans une clause
CONSTRAINT nommée s’appliquant soit à un simple champ soit à un champ
multiple nommé CONSTRAINT. Toutefois, vous ne pouvez appliquer la
restriction NOT NULL qu’une seule fois par champ ; sinon, une erreur se produit
lors de l’exécution.

 Exemple :

L'exemple suivant ajoute à la table Employés une donnée Salaire avec un champ de
type Monétaire :

ALTER TABLE Employés ADD COLUMN Salaire MONÉTAIRE ;

L'exemple suivant retire de la table Employés le champ Salaire :

ALTER TABLE Employés DROP COLUMN Salaire ;

L'exemple suivant retire la clé externe existante de la table Commandes :

ALTER TABLE Commandes DROP CONSTRAINT EmployésCommandes ;

L'exemple suivant remet la clé externe dans la table Commandes :

ALTER TABLE Commandes ADD CONSTRAINT EmployésCommandes


FOREIGN KEY (N° employé) REFERENCES Employés (N° employé) ;

 Page 8
OFPPT – ISTA BENI MELLAL © RHATAY – BENTALEB
Module N° 5 : Système d’information
Séquence N° 4 : Accèss : Requêtes Durée : 5 Jours
Objectif : Savoir Interroger une base de données à l’aide de requêtes SQL.

 CONSTRAINT :

une contrainte est identique à un index mais elle peut être également utilisée
pour établir une relation avec une autre table.
Utilisez la clause CONSTRAINT dans les instructions ALTER TABLE et
CREATE TABLE pour créer ou supprimer des contraintes. Il existe deux types de
clauses CONSTRAINT : une pour la création d'une contrainte portant sur un seul
champ et une autre pour la création d'une contrainte portant sur plusieurs champs.

Syntaxe

Contrainte monochamp :

CONSTRAINT name {PRIMARY KEY | UNIQUE | NOT NULL |


REFERENCES foreigntable [(foreignfield1, foreignfield2)]}

Contrainte multichamp :

CONSTRAINT name
{PRIMARY KEY (primary1[, primary2 [, ...]]) |
UNIQUE (unique1[, unique2 [, ...]]) |
NOT NULL (notnull1[, notnull2 [, ...]]) |
FOREIGN KEY (ref1[, ref2 [, ...]]) REFERENCES foreigntable [(foreignfield1 [,
foreignfield2 [, ...]])]}

La clause CONSTRAINT se compose des éléments suivants :

Elément Description
Name Nom de la contrainte à créer.
primary1, primary2 Nom du ou des champs à spécifier comme clé primaire.
unique1, unique2 Nom du ou des champs à spécifier comme clé unique.
Notnull1, notnull2 Nom du ou des champs ne devant pas contenir la valeur
Null.
ref1, ref2 Nom du ou des champs de clé externe faisant référence à
des champs d’une autre table.
Foreigntable Nom de la table externe contenant le ou les champs
spécifiés par foreignfield.
Foreignfield1, Nom du ou des champs de la foreigntable spécifié(s) par
foreignfield2 ref1, ref2. Vous pouvez omettre cette clause si le champ
faisant l’objet de la référence constitue la clé primaire de
foreigntable .

 Page 9
OFPPT – ISTA BENI MELLAL © RHATAY – BENTALEB
Module N° 5 : Système d’information
Séquence N° 4 : Accèss : Requêtes Durée : 5 Jours
Objectif : Savoir Interroger une base de données à l’aide de requêtes SQL.

 Remarques

Utilisez la syntaxe d’une contrainte monochamp dans la clause de définition de


champ d'une instruction ALTER TABLE ou CREATE TABLE immédiatement après
la spécification du type de données du champ.

Utilisez la syntaxe d'une contrainte multichamp chaque fois que vous utilisez le
mot réservé CONSTRAINT hors d'une clause de définition de champ dans une
instruction ALTER TABLE ou CREATE TABLE.
CONSTRAINT permet de définir un des types de contraintes suivantes pour un
champ :

 Vous pouvez utiliser le mot réservé UNIQUE pour définir un champ comme clé
unique. Cela signifie que deux enregistrements de la table ne peuvent pas avoir la
même valeur dans ce champ. Vous pouvez contraindre n'importe quel champ ou
liste de champs à être unique. Si un index multichamp est défini comme clé unique,
les valeurs combinées de tous les champs de l'index doivent être uniques, même si
plusieurs enregistrements ont la même valeur dans un seul des champs.

 Vous pouvez utiliser les mots réservés PRIMARY KEY pour définir un champ ou
une plage de champs sur une table comme clé primaire. Toutes les valeurs de la clé
primaire doivent être uniques et non Null et vous ne pouvez définir qu'une seule clé
primaire par table.

 Note : Ne définissez pas une contrainte PRIMARY KEY sur une table
disposant déjà d'une clé primaire. Cette opération provoque une erreur.

 Vous pouvez utiliser les mots réservés FOREIGN KEY pour définir un champ
comme clé externe. Si la clé primaire de la table externe se compose de plusieurs
champs, vous devez utiliser une définition de contrainte multichamp en spécifiant
tous les champs de référence, le nom de la table externe et les noms des champs
référencés dans cette table, et cela, dans l'ordre des champs de référence. Si le ou
les champs référencés constituent la clé primaire de la table externe, il est inutile de
les spécifier ; par défaut, le moteur Microsoft Jet considère que ces champs
constituent la clé primaire.

 Exemple : (Voir L’Exemple de Create Table)

 Page 10
OFPPT – ISTA BENI MELLAL © RHATAY – BENTALEB
Module N° 5 : Système d’information
Séquence N° 4 : Accèss : Requêtes Durée : 5 Jours
Objectif : Savoir Interroger une base de données à l’aide de requêtes SQL.

 DROP : Supprime une table d’une base de données ou supprime un index


d’une table.

Syntaxe

DROP {TABLE table | INDEX index ON table}

L’instruction DROP se compose des éléments suivants :

Elément Description
Table Nom de la table à supprimer ou de la table contenant l’index à
supprimer.
Index Nom de l’index à supprimer dans la table.

 Remarques

Vous devez fermer la table avant de la supprimer ou d'y supprimer un index.


Vous pouvez également utiliser l’instruction ALTER TABLE pour supprimer un index
d’une table.

Vous pouvez utiliser CREATE TABLE pour créer une table et CREATE INDEX
ou ALTER TABLE pour créer un index. Pour modifier une table, utilisez ALTER
TABLE.

 Exemple :

L'exemple suivant supprime l'index MonIndex de la table Employés :

DROP INDEX MonIndex ON Employés ;

L'exemple suivant supprime la table Stagiaires de la base de données :

DROP TABLE Stagiaires ;

 Page 11
OFPPT – ISTA BENI MELLAL © RHATAY – BENTALEB
Module N° 5 : Système d’information
Séquence N° 4 : Accèss : Requêtes Durée : 5 Jours
Objectif : Savoir Interroger une base de données à l’aide de requêtes SQL.

2. Langage de Manipulation de données

Le language SQL permet la manipulation et la mise à jour des données d’une


base de données.
Il comporte quatre verbes de manipulation des données :

Select : Recherche
Insert : Ajout
Update : Mise à jour
Delete : Suppression

 L’Instruction SELECT : Requête Sélection

Demande au moteur de base de données Microsoft Jet de lui renvoyer des


informations depuis la base de données sous la forme d'une série d'enregistrements.

Syntaxe

SELECT [predicate] { * | table.* | [table.]field1 [AS alias1]


[, [table.]field2 [AS alias2] [, ...]]}
FROM tableexpression [, ...] [IN externaldatabase]
[WHERE... ]
[GROUP BY... ]
[HAVING... ]
[ORDER BY... ]
[WITH OWNERACCESS OPTION]

L’instruction SELECT se compose des éléments suivants :

Elément Description
Predicate L'un des prédicats suivants : ALL, DISTINCT, DISTINCTROW
ou TOP. Les prédicats permettent de limiter le nombre
d'enregistrements renvoyés. Si aucun n’est précisé, ALL est choisi
par défaut.
* Indique que tous les champs de la ou des tables spécifiées sont
sélectionnés.
Table Nom de la table contenant les champs dans lesquels les
enregistrements sont sélectionnés.

 Page 12
OFPPT – ISTA BENI MELLAL © RHATAY – BENTALEB
Module N° 5 : Système d’information
Séquence N° 4 : Accèss : Requêtes Durée : 5 Jours
Objectif : Savoir Interroger une base de données à l’aide de requêtes SQL.

field1, field2 Noms des champs contenant les données à extraire. Si vous incluez
plusieurs champs, les données seront extraites dans l'ordre indiqué.
alias1, alias2 Noms à utiliser comme en-têtes de colonne à la place des noms de
colonnes originaux dans table.
Tableexpression Nom de la ou des tables contenant les données à extraire.
Externaldatabase Nom de la base de données contenant les tables de tableexpression
si elles ne se trouvent pas dans la base de données en cours.

 Remarques

Pour effectuer cette opération, le moteur Jet recherche la ou les tables


spécifiées, extrait les colonnes choisies, sélectionne les lignes qui satisfont aux
critères, trie et/ou regroupe ces lignes dans l'ordre indiqué.

SELECT ne modifie pas les données dans la base de données.

SELECT constitue généralement le premier mot d'une instruction SQL. Les


instructions SQL sont pour la plupart des instructions SELECT ou SELECT...INTO.
La syntaxe minimale d'une instruction SELECT est la suivante :

SELECT fields FROM table

Vous pouvez utiliser un astérisque (*) pour sélectionner tous les champs d'une
table. Les exemples suivants sélectionnent tous les champs dans la table Employés :

SELECT * FROM Employés;

Si le nom d'un champ figure dans plusieurs tables stipulées par la clause
FROM, faites-le précéder du nom de la table correspondante et de l'opérateur . (point).
Dans l'exemple suivant, le champ "Département" se trouve à la fois dans les tables
Employés et Superviseurs. L'instruction SQL sélectionne "Département" dans la table
Employés et "NomSupv" dans la table Superviseurs :

SELECT Employés.Département, Superviseurs.NomSupv


FROM Employés, Superviseurs
WHERE Employés.Département = Superviseurs.Département;

Lorsqu'un objet Recordset est créé, le moteur de base de données Microsoft Jet
utilise le nom de champ de la table comme nom de l'objet Field dans l'objet Recordset.
Si vous souhaitez utiliser un autre nom de champ ou un nom qui n'est pas concerné par
l'expression utilisée pour générer le champ, utilisez le mot réservé AS. L'exemple
suivant utilise le titre Anniversaire comme nom pour l'objet Field renvoyé dans l'objet
Recordset résultant :

 Page 13
OFPPT – ISTA BENI MELLAL © RHATAY – BENTALEB
Module N° 5 : Système d’information
Séquence N° 4 : Accèss : Requêtes Durée : 5 Jours
Objectif : Savoir Interroger une base de données à l’aide de requêtes SQL.

SELECT [Date de naissance] AS Anniversaire FROM Employés;

Chaque fois que vous utilisez des fonctions de regroupement ou des requêtes
qui renvoient des noms d'objets Field ambigus ou en double, vous devez utiliser la
clause AS pour fournir un nom de remplacement à l'objet Field. Les exemples suivants
utilisent le titre Effectif comme nom pour l'objet Field renvoyé dans l'objet Recordset
résultant :

SELECT COUNT([N° employé]) AS Effectif FROM Employés;

Vous pouvez utiliser les autres clauses d'une instruction SELECT pour limiter
et organiser davantage les données renvoyées. Pour plus d'informations, reportez-vous
à la rubrique d'aide relative à la clause que vous utilisez.

 Exemple :

L'exemple suivant montre la sélection des champs Nom et Prénom de tous les
enregistrements dans la table Employés :

SELECT Nom, Prénom FROM Employés ;

L'exemple suivant montre la sélection de tous les champs dans la table


Employés :

SELECT * FROM Employés ;

L'exemple suivant montre ce que deviennent les prix unitaires de produits


quand chacun est augmenté de 10 pour cent. Les prix unitaires de produits ne sont pas
modifiés dans la base de données.

SELECT NomProduit, PrixUnitaire AS Courant, PrixUnitaire * 1.1 AS


NouveauPrixProposé
FROM Produits ;

L'exemple suivant affiche le NomProduit et le PrixUnitaire de chaque


enregistrement de la table Produits. La phrase "a un prix unitaire de" sépare les deux
champs dans la présentation des résultats.

SELECT NomProduit, ' a un prix unitaire de ', PrixUnitaire FROM Produits ;

 Page 14
OFPPT – ISTA BENI MELLAL © RHATAY – BENTALEB
Module N° 5 : Système d’information
Séquence N° 4 : Accèss : Requêtes Durée : 5 Jours
Objectif : Savoir Interroger une base de données à l’aide de requêtes SQL.

 SQL et l’Algèbre relationnelle

Les relations normalisées vont pouvoir faire l’objet de manipulations en


utilisant des opérateur dérivés de la théorie des ensembles.

CODD a défini huit opérateurs principaux pour la manipulation des relations.


Quatre d’entre eux correspondent aux opérations traditionnelles sur les ensembles :
Union, Intersection, différence et produit cartésien. Quatre autres sont spécifiques à la
manipulation de tableaux : Projection, Restriction, jointure, division.

Union Intersection Différence Produit Cartésien

A 1
1 A 2
A X 2 =
B 1
B
B 2
C
C 1
C 2

Select * Select * From A


Select * From A
From A Where Not Exists
Where Exists
Union ( Select * from B Slect * From A, B
( Select * from B
Select * Where Ai=Bi )
Where Ai=Bi )
From B

Projection Restriction Jointure Division

A 1
A 1 W 1 R1 A 1 W 1 R1 D 2
B 2 X 2 R2 B 2 X 2 R2 A 3 1
C 1 W 3 R3 C 1 W 1 R1 B 1 3 A
D 4 Z C 2
A 2

Select Ai, Aj Select * From A A1


Select * From A Select * From A, B Where Not exists
From A
Where Ai = X Where Ai = Bi (Select * From B
Where Not exists
(Select * from A A2
Where A1i = A2i
AND Bj=A2j ))

 Page 15
OFPPT – ISTA BENI MELLAL © RHATAY – BENTALEB
Module N° 5 : Système d’information
Séquence N° 4 : Accèss : Requêtes Durée : 5 Jours
Objectif : Savoir Interroger une base de données à l’aide de requêtes SQL.

1. La Restriction

La restriction permet d’effectuer un découpage horizontal de la relation on ne


conservant que les lignes qui vérifient une condition définie. Le tableau résultant
comporte le même nombre de colonnes que le tableau initial.

 Exemple : Quelles sont les commandes passées en 1989 ?

Numcmd Datcmd Numfour Mncmd


1050 26/10/89 TH008 1587,50
1025 28/09/89 TH009 1678,90
1021 18/10/88 BM118 4857,10
1051 18/10/88 BM118 2547,70
1450 28/02/89 MN010 1154,30

Select * from Commande Where Datcmd like ‘’ *89 ‘’ ;

2. La Projection

La projection permet d’effectuer un découpage vertical de la relation en ne


concervant que les attributs souhaités.

 Exemple : Quels sont les fournisseurs et les montants de commande


associés ?

Numcmd Datcmd Numfour Mncmd


1050 26/10/89 TH008 1587,50
1025 28/09/89 TH009 1678,90
1021 18/10/88 BM118 4857,10
1051 18/10/88 BM118 2547,70
1450 28/02/89 MN010 1154,30

Select Numfour, Mncmd from Commande ;

3. Le Produit cartésien

Réalise la concaténation de tous les t-uplets de la première table avec chaque t-


uplet de la seconde. Il permet d’élaborer l’opérateur de jointure, indisponsable dans de
nombreuses requêtes multi-tables.

 Page 16
OFPPT – ISTA BENI MELLAL © RHATAY – BENTALEB
Module N° 5 : Système d’information
Séquence N° 4 : Accèss : Requêtes Durée : 5 Jours
Objectif : Savoir Interroger une base de données à l’aide de requêtes SQL.

 Exemple : Etablir le produit cartésien des commandes et fournisseurs

Commande (C)
Numcmd Datcmd Numfour Mncmd
1050 26/10/89 TH008 1587,50
1025 28/09/89 TH009 1678,90
1021 18/10/88 BM118 4857,10

Fournisseurs (F)
Numfour Adrfour
TH009 Bordeaux
TH008 Paris

Le Produit Cartésien
C.Nu C.Datcmd C.Numfour C.Mncmd F. Numfour F.Adrfour
mcmd
1050 26/10/89 TH008 1587,50 TH009 Bordeaux
1025 28/09/89 TH009 1678,90 TH009 Bordeaux
1021 18/10/88 BM118 4857,10 TH009 Bordeaux
1050 26/10/89 TH008 1587,50 TH008 Paris
1025 28/09/89 TH009 1678,90 TH008 Paris
1021 18/10/88 BM118 4857,10 TH008 Paris

Select C.Numcmd, C.Datcmd, C.Numfour, C.Mncmd, F. Numfour, F.Adrfour


From C, F ;

4. La Jointure

La jointure n’est en fait que l’utilisation combiné de deux opérateurs : Produit et


Restriction. Il s’opère sur deux tables possédant un champ en commun.

 Exemple : Dans notre exemple Commande et Fournisseurs s’est opéré


une restriction de façon à ne garder en résultat que les lignes qui vérifie
l’egalité Commande.Numfour = Fournisseur.Numfour. Le résultat permet
ainsi de juxtaposer les informations de commandes et les informations des
fournisseurs détenteur de cette commande.

 Page 17
OFPPT – ISTA BENI MELLAL © RHATAY – BENTALEB
Module N° 5 : Système d’information
Séquence N° 4 : Accèss : Requêtes Durée : 5 Jours
Objectif : Savoir Interroger une base de données à l’aide de requêtes SQL.

On va etablir un tableau relatif à l’ensemble des commandes en le completant


avec les informations de leur fournisseur.

Commande
Numcmd Datcmd Numfour Mncmd
1050 26/10/89 TH008 1587,50
1025 28/09/89 TH009 1678,90
1021 18/10/88 BM118 4857,10

Fournisseurs
Numfour Adrfour
TH009 Bordeaux
TH008 Paris
TH010 Grenoble

Join (Commande.Numfour = Fournisseur.Numfour)

C.Nu C.Datcmd C.Numfour C.Mncmd F. Numfour F.Adrfour


mcmd
1050 26/10/89 TH008 1587,50 TH008 Paris
1025 28/09/89 TH009 1678,90 TH009 Bordeaux

Select C.Numcmd, C.Datcmd, C.Numfour, C.Mncmd, F. Numfour,


F.Adrfour From C , F Where C.Numfour= F.Numfour ;

Ou Aussi

Select C.Numcmd, C.Datcmd, C.Numfour, C.Mncmd, F. Numfour,


F.Adrfour From C Inner join F On C.Numfour= F.Numfour ;

 L’Auto-Jointure

Lorsque la condition de recherche introduite par la clause Where porte sur les
valeurs d’un attribut qu’il s’agit de comparer avec les valeur de ce même attribut dans
les mêmes enregistrements de la même table, l’élaboration d’un produit cartésien de la
relation avec elle même devient nécessaire. Ce type de requête est appelée auto-
jointure.

 Exemples : Trouver les articles ayant le même prix unitaire que l’article n°14 ?

 Page 18
OFPPT – ISTA BENI MELLAL © RHATAY – BENTALEB
Module N° 5 : Système d’information
Séquence N° 4 : Accèss : Requêtes Durée : 5 Jours
Objectif : Savoir Interroger une base de données à l’aide de requêtes SQL.

Select X.Ref from Article X, Article Y Where X.PU=Y.PU and Y.Ref=14 ;

5. L’Union

L’opération d’union entre deux tables de même schéma permet de réunir en une
table résultat l’ensemble des t-uplets appartenant à l’une ou aux deux tables de départ.

 Exemple :

La liste des commandes qui ont été passées soit en 1988, soit en 1989

Commande 88
Numcmd Datcmd Numfour Mncmd
1050 26/10/88 TH008 1587,50
1025 28/09/88 TH009 1678,90
1021 18/10/88 BM118 4857,10

Commande 89
Numcmd Datcmd Numfour Mncmd
1023 15/09/89 TH010 2534,30
1051 23/07/89 MN008 3548,90
950 19/05/89 BM107 4721,20

Commande88 Union Commande89


Numcmd Datcmd Numfour Mncmd
1050 26/10/88 TH008 1587,50
1025 28/09/88 TH009 1678,90
1021 18/10/88 BM118 4857,10
1023 15/09/89 TH010 2534,30
1051 23/07/89 MN008 3548,90
950 19/05/89 BM107 4721,20

Select Numcmd,Datcmd,Numfour,Mncmd From Commande88


Union
Select Numcmd,Datcmd,Numfour,Mncmd From Commande89 ;

 Page 19
OFPPT – ISTA BENI MELLAL © RHATAY – BENTALEB
Module N° 5 : Système d’information
Séquence N° 4 : Accèss : Requêtes Durée : 5 Jours
Objectif : Savoir Interroger une base de données à l’aide de requêtes SQL.

6. L’Intersection

Permet de presenter en une table résultat l’ensemble des t-uplets appartenant aux
deux tables de départ.

 Exemple : Quelles sont les commands mentionnée à la fois dans la table


Commande88 et dans la table Commande88/TH ?

Commande 88
Numcmd Datcmd Numfour Mncmd
1050 26/10/88 TH008 1587,50
1025 28/09/88 TH009 1678,90
1021 18/10/88 BM118 4857,10

Commande 88/TH
Numcmd Datcmd Numfour Mncmd
1023 15/09/88 TH010 2534,30
1025 28/09/88 TH009 1678,90
1021 18/10/88 BM118 4857,10
1051 23/07/88 MN008 3548,90
950 19/05/88 BM107 4721,20

Commande88 Intersect Commande88/TH


Numcmd Datcmd Numfour Mncmd
1025 28/09/88 TH009 1678,90
1021 18/10/88 BM118 4857,10

Select Numcmd,Datcmd, Numfour, Mncmd from [Commande88] Where


Exists (Select Numcmd,Datcmd, Numfour, Mncmd from [Commande88/TH]
Where [Commande88].Numcmd=[Commande88/TH].Numcmd)

7. La Différence :

Permet de présenter en une table les t-uplets de la première en éliminant ceux qui
appartiennent aussi à la seconde.

 Page 20
OFPPT – ISTA BENI MELLAL © RHATAY – BENTALEB
Module N° 5 : Système d’information
Séquence N° 4 : Accèss : Requêtes Durée : 5 Jours
Objectif : Savoir Interroger une base de données à l’aide de requêtes SQL.

 Exemple : Quelles sont les commandes qui ne sont pas mentionnées dans la table
commandeTH ?

Commande
Numcmd Datcmd Numfour Mncmd
1023 15/09/88 TH010 2534,30
1025 28/09/88 TH009 1678,90
1021 18/10/88 BM118 4857,10
1051 23/07/88 MN008 3548,90
950 19/05/88 BM107 4721,20

Commande TH
Numcmd Datcmd Numfour Mncmd
1025 28/09/88 TH009 1678,90
1051 23/07/88 MN008 3548,90
950 19/05/88 BM107 4721,20

Commande DIFF CommandeTH


Numcmd Datcmd Numfour Mncmd
1023 15/09/88 TH010 2534,30
1021 18/10/88 BM118 4857,10

Select Numcmd,Datcmd, Numfour, Mncmd from [Commande] Where


Not Exists (Select Numcmd,Datcmd, Numfour, Mncmd from [Commande TH]
Where [Commande].Numcmd=[Commande TH].Numcmd)

8. La Division

La division s’effectue sur deux tables (Dividende, Diviseur) possédant des


colonnes à champ commun. Elle permet de répondre à la question suivante : quels sont
tous les éléments d’une table qui sont associés à tous les éléments d’une autres table.
(Exprime « Pour tous les » )

 Exemple :

Quelles sont les commandes concernant tous les articles ?

 Page 21
OFPPT – ISTA BENI MELLAL © RHATAY – BENTALEB
Module N° 5 : Système d’information
Séquence N° 4 : Accèss : Requêtes Durée : 5 Jours
Objectif : Savoir Interroger une base de données à l’aide de requêtes SQL.

Ligne de COM Article


Numcmd Codart Codart
1080 CS30 CS10
1050 CS10 CS20
1070 CS10 CS30
1050 CS20
1070 CS20
1021 CS10
1050 CS30
1021 CS20
1070 CS30

Ligne de Com DIV Article

Numcmd
1050
1070

Select Numcmd from LC LC1 Where


Not exists (Select Codart from article Where
Not exists ( Select * from LC LC2 Where
LC1.Numcmd= LC2.Numcmd
And LC1.Codart= LC2.Codart ) )

 Les Prédicats : ALL, DISTINCT, DISTINCTROW, TOP

Spécifie les enregistrements sélectionnés par des requêtes SQL.

Syntaxe

SELECT [ALL | DISTINCT | DISTINCTROW | [TOP n [PERCENT]]]


FROM table

 Page 22
OFPPT – ISTA BENI MELLAL © RHATAY – BENTALEB
Module N° 5 : Système d’information
Séquence N° 4 : Accèss : Requêtes Durée : 5 Jours
Objectif : Savoir Interroger une base de données à l’aide de requêtes SQL.

Une instruction SELECT contenant ces prédicats se compose des éléments suivants :

Elément Description
ALL Si vous n'incluez aucun prédicat, le moteur de base de données
Microsoft Jet sélectionne tous les enregistrements qui
remplissent les conditions de l'instruction SQL. Les deux
exemples suivants sont équivalents et renvoient tous les
enregistrements de la table Employés :

SELECT ALL *
FROM Employés
ORDER BY [N° employé];

SELECT *
FROM Employés
ORDER BY [N° employé];

DISTINCT Omet tous les enregistrements pour lesquels les champs


sélectionnés contiennent des données en double. Ainsi, pour
être incluses dans les résultats de la requête, les valeurs de
chaque champ répertorié dans l'instruction SELECT doivent
être uniques. Par exemple, plusieurs employés répertoriés dans
une table Employés peuvent avoir le même nom. Si deux
enregistrements contiennent Durand dans le champ "Nom",
l'instruction SQL suivante ne renvoie alors qu'un seul de ces
enregistrements :

SELECT DISTINCT Nom


FROM Employés;

Si vous omettez DISTINCT, cette requête renvoie les deux


enregistrements Durand. Si la clause SELECT contient
plusieurs champs, la combinaison des valeurs de tous ces
champs doit être unique, pour un enregistrement donné, pour
que ces valeurs apparaissent dans le résultat. Le résultat d'une
requête qui utilise DISTINCT ne peut pas être mis à jour et ne
reflète pas les modifications ultérieures effectuées par d'autres
utilisateurs.
DISTINCTROW Omet les données sur la base des enregistrements complets en
double, et pas seulement de champs en double. Par exemple,
vous pouvez créer une requête qui joint les tables Clients et
Commandes à l'aide du champ "Code client". La table Clients

 Page 23
OFPPT – ISTA BENI MELLAL © RHATAY – BENTALEB
Module N° 5 : Système d’information
Séquence N° 4 : Accèss : Requêtes Durée : 5 Jours
Objectif : Savoir Interroger une base de données à l’aide de requêtes SQL.

ne contient aucun doublon dans le champ "Code client", mais


la table Commandes en contient car chaque client passe
plusieurs commandes. L'instruction SQL suivante montre
comment utiliser DISTINCTROW pour produire une liste de
sociétés qui ont passé au moins une commande, sans afficher
le détail de ces commandes :

SELECT DISTINCTROW Société


FROM Clients INNER JOIN Commandes
ON Clients.[Code client]= Commandes.[Code client]
ORDER BY Société;

Si vous omettez DISTINCTROW, cette requête produit


plusieurs lignes pour chaque société ayant passé plusieurs
commandes.DISTINCTROW n'a d'effet que si vous
sélectionnez des champs dans seulement certaines des tables
utilisées dans la requête.DISTINCTROW est ignoré si votre
requête n'inclut qu'une seule table ou si vous sélectionnez les
champs de toutes les tables.
TOP n [PERCENT] Renvoie un certain nombre d'enregistrements situés au début
ou à la fin d'une plage spécifiée par une clause ORDER BY.
Supposons que vous souhaitiez obtenir les noms des 25
premiers étudiants de la promotion 1996 :

SELECT
TOP 25
Nom, Prénom
FROM Etudiants
WHERE Promotion = 1996
ORDER BY Moyenne DESC;

Si vous n'incluez pas la clause ORDER BY, la requête renverra


une série de 25 enregistrements choisis arbitrairement parmi
ceux de la table Students qui remplissent les conditions de la
clause WHERE. Le prédicat TOP n'effectue pas de choix entre
des valeurs égales. Dans l'exemple précédent, si, parmi les
meilleurs résultats obtenus, le vingt-cinquième et le vingt-
sixième ont obtenu la même moyenne, la requête renvoie 26
enregistrements. Vous pouvez également utiliser le mot réservé
PERCENT pour renvoyer un certain pourcentage des premiers
ou derniers enregistrements d'une plage spécifiée par la clause
ORDER BY. Supposons qu'au lieu des 25 meilleurs étudiants,
vous souhaitiez sélectionner 10 pour cent de la promotion :

 Page 24
OFPPT – ISTA BENI MELLAL © RHATAY – BENTALEB
Module N° 5 : Système d’information
Séquence N° 4 : Accèss : Requêtes Durée : 5 Jours
Objectif : Savoir Interroger une base de données à l’aide de requêtes SQL.

SELECT TOP 10 PERCENT


Nom, Prénom
FROM Etudiants
WHERE Promotion = 1994
ORDER BY Moyenne ASC;

Le prédicat ASC donne des valeurs croissantes. La valeur qui


suit TOP doit être un entier non signé. TOP n'affecte pas les
possibilités de mise à jour de la requête.
table Nom de la table contenant les enregistrements à extraire.

 Exemple :

Pour essayer les exemples suivants sous Microsoft Access, créez deux
nouvelles tables comme celles présentées ci-dessous. Créez une nouvelle requête dans
l'exemple de votre base de données. Passez en mode SQL, Ecrivez votre code SQL,
puis exécutez la requête.

Table Clients

Prénom Code client


Bob 1
Adam 2
Beverly 3
Bob 4

Table Factures

Code client N° facture


1 1
1 2
2 3
2 4
2 5
4 6
4 7

 Page 25
OFPPT – ISTA BENI MELLAL © RHATAY – BENTALEB
Module N° 5 : Système d’information
Séquence N° 4 : Accèss : Requêtes Durée : 5 Jours
Objectif : Savoir Interroger une base de données à l’aide de requêtes SQL.

L'exemple suivant retourne tous les enregistrements retournés par une jointure
interne entre les deux tables. Le résultat peut être mis à jour.

SELECT ALL Prénom FROM Clients INNER JOIN Factures


ON Clients.CodeClient = Factures.CodeClient ;

Résultat
Bob
Bob
Adam
Adam
Adam
Bob
Bob

L'exemple suivant ne sélectionne que les enregistrements à valeur unique


retournés par une jointure interne entre les deux tables. La présentation des résultats
n'est pas modifiable.

SELECT DISTINCT Prénom FROM Clients INNER JOIN Factures


ON Clients. Codeclient = Factures. Codeclient ;

Résultat
Bob
Adam

L'exemple suivant ne sélectionne que les enregistrements uniques retournés par


une jointure interne entre les deux tables. Le résultat est modifiable.

SELECT DISTINCTROW Prénom FROM Clients INNER JOIN Factures


ON Clients. Codeclient = Factures. Codeclient ;

Résultat
Bob
Adam
Bob

 Page 26
OFPPT – ISTA BENI MELLAL © RHATAY – BENTALEB
Module N° 5 : Système d’information
Séquence N° 4 : Accèss : Requêtes Durée : 5 Jours
Objectif : Savoir Interroger une base de données à l’aide de requêtes SQL.

L'exemple suivant présente la sélection des cinq premiers enregistrements


retournés par une jointure interne entre les deux tables. Le résultat est modifiable.

SELECT TOP 5 Prénom FROM Clients INNER JOIN Factures


ON Clients. Codeclient = Factures. Codeclient
ORDER BY Factures.N° facture ;

Résultat
Bob
Bob
Adam
Adam
Adam

Calcule la moyenne arithmétique d'une série de valeurs contenues dans un champ


spécifié dans une requête.

 Les Fonctions de Regroupement :

♦ La Fonction AVG :

Syntaxe

Avg(expr)

L'argument expr représente une expression de chaîne qui identifie le champ


contenant les données numériques dont vous souhaitez calculer la moyenne ou une
expression qui exécute un calcul sur la base des données contenues dans ce champ.
Les opérandes associés à expr peuvent comprendre le nom d'un champ de table, une
constante ou une fonction (qui peut être soit intrinsèque, soit définie par l'utilisateur, à
l'exclusion de toute autre fonction de regroupement SQL).

 Exemple :

L'exemple suivant suppose que vous disposiez d'une table Commandes


contenant le champ Port. La fonction Moyenne (Avg) vous permet de calculer la
moyenne des frais de port des commandes pour les frais dépassant 100F. Tapez
l'expression suivante en mode SQL dans la fenêtre Requête :

 Page 27
OFPPT – ISTA BENI MELLAL © RHATAY – BENTALEB
Module N° 5 : Système d’information
Séquence N° 4 : Accèss : Requêtes Durée : 5 Jours
Objectif : Savoir Interroger une base de données à l’aide de requêtes SQL.

SELECT Avg(Port) AS [PortMoyen] FROM Commandes WHERE Port > 100;

L'exemple qui suit crée un contrôle calculé qui affiche les frais de port moyens
relatifs aux enregistrements sous-jacents d'un formulaire, à partir de la même table
Commandes. Ouvrez un nouveau formulaire et attribuez Commandes à sa propriété
Source (RecordSource). Tapez l'expression suivante dans la propriété SourceContrôle
(ControlSource) d'une zone de texte du formulaire. Pour appliquer une condition qui
limite le calcul à quelques enregistrements seulement, comme ceux qui se rapportent
aux commandes de plus de 100F, paramétrez la propriété Filtre (Filter) du formulaire.

=Avg(Port)

 Remarques

La moyenne calculée par Avg est la moyenne arithmétique (la somme des
valeurs divisée par le nombre de valeurs). Vous pouvez utiliser Avg, par exemple,
pour calculer le coût moyen du transport de marchandises.

La fonction Avg n'intègre aucun champ Null à ses calculs.

Vous pouvez utiliser Avg dans une expression de requête.

♦ La Fonction Count :

Calcule le nombre d'enregistrements renvoyés par une requête.

Syntaxe

Count(expr)

L'argument expr représente une expression de chaîne qui identifie le champ


contenant les données numériques dont vous souhaitez obtenir le nombre ou une
expression qui exécute un calcul sur la base des données contenues dans ce champ.
Les opérandes associés à expr peuvent comprendre le nom d'un champ de table ou une
fonction (qui peut être soit intrinsèque, soit définie par l'utilisateur, à l'exclusion de
toute autre fonction de regroupement SQL). Vous pouvez compter toute sorte de
données y compris les données de type texte.

 Page 28
OFPPT – ISTA BENI MELLAL © RHATAY – BENTALEB
Module N° 5 : Système d’information
Séquence N° 4 : Accèss : Requêtes Durée : 5 Jours
Objectif : Savoir Interroger une base de données à l’aide de requêtes SQL.

 Remarques

Vous pouvez utiliser la fonction Count pour compter le nombre


d'enregistrements présents dans une requête sous-jacente. Par exemple, vous pouvez
utiliser la fonction Count pour compter le nombre de commandes expédiées vers un
pays donné.

Bien que l’argument expr puisse exécuter un calcul sur un champ, la fonction
Count ne fait que dénombrer les enregistrements. Le type des valeurs contenues dans
les enregistrements est sans importance.

La fonction Count ne compte pas les enregistrements possédant des champs


avec valeurs Null sauf si l’argument expr est remplacé par le caractère générique
astérisque (*). Si vous utilisez un astérisque, la fonction Count calcule le nombre total
des enregistrements en incluant ceux qui contiennent des champs avec valeurs Null.
Count(*) s'exécute beaucoup plus rapidement que Count([nom de colonne]).
L'astérisque doit être entré sans apostrophes (' '). Dans l'exemple suivant, on calcule le
nombre d'enregistrements contenus dans la table Commandes.

SELECT Count(*)
AS TotalCommandes FROM Commandes;

Si expr identifie plusieurs champs, la fonction Count ne compte un


enregistrement que si au moins un de ses champs contient une valeur différente de
Null. Si tous les champs spécifiés ont la valeur Null, l'enregistrement n'est pas
comptabilisé. Les noms des champs doivent être séparés par une perluète (&).
L'exemple suivant montre comment limiter le comptage aux enregistrements pour
lesquels Date envoi ou Port est différent de Null :

SELECT
Count('[Date envoi] & Port')
AS [Nonnull] FROM Commandes

Vous pouvez utiliser Count dans une expression de requête.

 Exemple :

L'exemple suivant suppose que vous disposez d'une table Commandes


contenant le champ PaysLivraison. Utilisez la fonction Compte (Count) pour calculer
le nombre de commandes expédiées en Belgique. Tapez l'expression suivante en mode
SQL dans la fenêtre Requête :

 Page 29
OFPPT – ISTA BENI MELLAL © RHATAY – BENTALEB
Module N° 5 : Système d’information
Séquence N° 4 : Accèss : Requêtes Durée : 5 Jours
Objectif : Savoir Interroger une base de données à l’aide de requêtes SQL.

SELECT Count([PaysLivraison]) AS [Commandes BEL] FROM


Commandes WHERE [PaysLivraison] = 'Belgique';

L'exemple qui suit crée un contrôle calculé qui affiche le nombre de


commandes de la même table Commandes. Ouvrez un nouveau formulaire et attribuez
Commandes à sa propriété Source (RecordSource). Tapez l'expression suivante dans la
propriété SourceContrôle (ControlSource) d'une zone de texte du formulaire. Pour
appliquer une condition qui limite le compte à quelques enregistrements seulement,
comme ceux qui se rapportent aux commandes expédiées en Belgique, paramètrez la
propriété Filtre (Filter) du formulaire.

=Count([PaysLivraison])

♦ La Fonction MIN et MAX :

Renvoient la valeur minimum ou maximum d'une série de valeurs contenues


dans un champ spécifié dans une requête.

Syntaxe

Min(expr)
Max(expr)

L'argument expr représente une expression de chaîne qui identifie le champ


contenant les données que vous souhaitez évaluer ou une expression qui exécute un
calcul sur la base des données contenues dans ce champ. Les opérandes associés à expr
peuvent comprendre le nom d'un champ de table, une constante ou une fonction (qui
peut être soit intrinsèque, soit définie par l'utilisateur, à l'exclusion de toute autre
fonction de regroupement SQL).

 Remarques

Vous pouvez utiliser les fonctions Min et Max pour déterminer les valeurs les
plus basses et les plus élevées contenues dans un champ en fonction du mode de
regroupement spécifié. Par exemple, vous pouvez utiliser ces fonctions pour renvoyer
les coûts de transport de marchandises les plus bas et les plus élevés. Si aucun
regroupement n'est spécifié, toute la table est utilisée.

Vous pouvez utiliser les fonctions Min et Max dans une expression de requête.

 Page 30
OFPPT – ISTA BENI MELLAL © RHATAY – BENTALEB
Module N° 5 : Système d’information
Séquence N° 4 : Accèss : Requêtes Durée : 5 Jours
Objectif : Savoir Interroger une base de données à l’aide de requêtes SQL.

 Exemple :

L'exemple suivant suppose que vous disposiez d'une table Commandes


contenant les champs Port et PaysLivraison. Utilisez les fonctions Min et Max pour
retourner les frais de port les plus faibles et les plus élevés concernant les commandes
expédiées en Belgique. Tapez l'expression suivante en mode SQL dans la fenêtre
Requête :

SELECT Min(Port) AS [Port min] FROM Commandes WHERE [PaysLivraison]


= 'Belgique';

SELECT Max(Port) AS [Port max] FROM Commandes WHERE


[PaysLivraison] = 'Belgique';

L'exemple qui suit crée un contrôle calculé qui affiche les frais de port les plus
faibles parmi tous les enregistrements de la même table Commandes. Ouvrez un
nouveau formulaire et attribuez Commandes à sa propriété Source (RecordSource).
Tapez l'expression suivante dans la propriété SourceContrôle (ControlSource) d'une
zone de texte du formulaire. Pour appliquer une condition qui limite la recherche à
quelques enregistrements seulement, comme ceux qui se rapportent aux commandes
expédiées en Belgique, paramétrez la propriété Filtre (Filter) du formulaire.

=Min(Port)

♦ La Fonction Sum :

Renvoie la somme d'une série de valeurs contenues dans un champ spécifié dans
une requête.

Syntaxe

Sum(expr)

L'argument expr représente une expression de chaîne qui identifie le champ


contenant les données numériques dont vous souhaitez calculer la somme ou une
expression qui exécute un calcul sur la base des données contenues dans ce champ.
Les opérandes associés à expr peuvent comprendre le nom d'un champ de table, une
constante ou une fonction (qui peut être soit intrinsèque, soit définie par l'utilisateur, à
l'exclusion de toute autre fonction de regroupement SQL).

 Page 31
OFPPT – ISTA BENI MELLAL © RHATAY – BENTALEB
Module N° 5 : Système d’information
Séquence N° 4 : Accèss : Requêtes Durée : 5 Jours
Objectif : Savoir Interroger une base de données à l’aide de requêtes SQL.

 Remarques

La fonction Sum totalise les valeurs contenues dans un champ. Par exemple,
vous pouvez utiliser la fonction Sum pour déterminer le coût total des frais de
transport.

La fonction Sum ignore les enregistrements contenant des champs avec la


valeur Null. L'exemple suivant montre comment calculer la somme des produits
contenus dans les champs Prix unitaire et Quantité.

SELECT
Sum([Prix unitaire] * Quantité)
AS [Rapport Total] FROM [Détails commandes];

Vous pouvez utiliser la fonction Sum dans une expression de requête.

 Exemple :

L'exemple suivant suppose que vous disposiez d'une table Commandes


contenant les champs Réf produit et PaysLivraison, ainsi que d'une table Détails
commandes contenant les champs PrixUnitaire et Quantité. Utilisez la fonction
Somme (Sum) pour calculer le total des ventes relatives aux commandes expédiées en
Belgique. Tapez l'expression suivante en mode SQL dans la fenêtre Requête :

SELECT Sum([PrixUnitaire]*[Quantité]) AS [TotalVentes BEL]


FROM Commandes INNER JOIN [Détails commandes] ON Commandes.
[NumeroCommande] = [Détails commandes].[NumeroCommande]
WHERE ([PaysLivraison] = 'Belgique');

L'exemple qui suit crée un contrôle calculé qui affiche les ventes totales
relatives aux enregistrements de la table Détails commandes. Ouvrez un nouveau
formulaire et attribuez Détails commandes à sa propriété Source (RecordSource).
Tapez l'expression suivante dans la propriété SourceContrôle (ControlSource) d'une
zone de texte du formulaire. Pour appliquer une condition qui limite la recherche à
quelques enregistrements seulement, comme ceux qui se rapportent aux commandes
expédiées en Belgique, paramétrez la propriété Filtre (Filter) du formulaire.

=Sum([PrixUnitaire]*[Quantité])

 Page 32
OFPPT – ISTA BENI MELLAL © RHATAY – BENTALEB
Module N° 5 : Système d’information
Séquence N° 4 : Accèss : Requêtes Durée : 5 Jours
Objectif : Savoir Interroger une base de données à l’aide de requêtes SQL.

 La Clause GROUP BY ..... HAVING :

La clause GROUP BY combine en un seul enregistrement les enregistrements


comportant des valeurs identiques dans la liste des champs spécifiés. Une valeur de
synthèse est créée pour chaque enregistrement si vous incluez une fonction de
regroupement SQL, par exemple Sum ou Count, dans l'instruction SELECT.

Syntaxe

SELECT fieldlist
FROM table
[WHERE criteria]
[GROUP BY groupfieldlist [HAVING Groupcriteria ]]

Une instruction SELECT contenant une clause GROUP BY se compose des éléments
suivants :

Élément Description
Fieldlist Nom du ou des champs à extraire ainsi que des alias de nom de
champ, fonctions de regroupement SQL, prédicats de sélection
(ALL, DISTINCT, DISTINCTROW ou TOP) ou autres options
d'instructions SELECT.
Table Nom de la table contenant les enregistrements à extraire. Pour plus
d'informations, reportez-vous à la rubrique relative à la clause
FROM.
Criteria Critères de sélection. Si l'instruction inclut une clause WHERE, le
moteur de base de données Microsoft Jet regroupe les valeurs après
avoir appliqué les conditions WHERE aux enregistrements.
Groupfieldlist Noms des champs (10 au maximum) utilisés pour regrouper les
enregistrements. L'ordre des noms de champs dans groupfieldlist
détermine les niveaux de regroupement, du plus élevé au plus bas.
Groupcriteria Expression qui détermine quels sont les enregistrements regroupés
à afficher.

 Remarques

 La clause GROUP BY est facultative.

 Les valeurs de synthèse sont omises si l'instruction SELECT ne contient aucune


fonction de regroupement SQL.

 Page 33
OFPPT – ISTA BENI MELLAL © RHATAY – BENTALEB
Module N° 5 : Système d’information
Séquence N° 4 : Accèss : Requêtes Durée : 5 Jours
Objectif : Savoir Interroger une base de données à l’aide de requêtes SQL.

 Les valeurs Null des champs GROUP BY sont regroupées et ne sont pas omises.
Toutefois, les valeurs Null ne sont évaluées dans aucune fonction de regroupement
SQL.

 Utilisez la clause WHERE pour exclure les lignes que vous ne souhaitez pas
regrouper et la clause HAVING pour filtrer les enregistrements après leur
regroupement.

 À moins de contenir des données de type Memo ou OLE Object, un champ d'une
liste de champs GROUP BY peut faire référence à n'importe quel champ de la
clause FROM, même si celui-ci n'est pas inclus dans l'instruction SELECT, à
condition toutefois que l'instruction SELECT inclue au moins une fonction de
regroupement SQL. Le moteur de base de données Microsoft Jet ne peut pas faire
porter des opérations de regroupement sur des champs Memo ou OLE.

 Tous les champs de la liste de champs SELECT doivent être inclus dans la clause
GROUP BY ou, sous forme d'arguments, dans une fonction de regroupement SQL.

 La clause HAVING est facultative.

 HAVING est similaire à WHERE, qui détermine quels sont les enregistrements à
sélectionner. Une fois que GROUP BY a regroupé les enregistrements, HAVING
détermine quels sont les enregistrements qui seront affichés :

SELECT [Code catégorie],


Sum([Unités en stock])
FROM Produits
GROUP BY [Code catégorie]
HAVING Sum([Unités en stock]) > 100 And Like "BOS*";

Une clause HAVING peut contenir jusqu'à 40 expressions liées par des opérateurs
logiques comme And et Or.

 Exemple

L'exemple suivant trouve la moyenne des prix unitaires de chaque fournisseur et


regroupe la liste des prix par fournisseur :

SELECT N°Fournisseur, Avg(PrixUnitaire) AS PrixUnitMoyen


FROM Produits GROUP BY N°Fournisseur ;

 Page 34
OFPPT – ISTA BENI MELLAL © RHATAY – BENTALEB
Module N° 5 : Système d’information
Séquence N° 4 : Accèss : Requêtes Durée : 5 Jours
Objectif : Savoir Interroger une base de données à l’aide de requêtes SQL.

L'exemple suivant trouve le prix unitaire maximal par produit dans chaque
catégorie :

SELECT CodeCatégorie, Max(PrixUnitaire) AS PrixUnitMax


FROM Produits GROUP BY CodeCatégorie ;

L'exemple suivant compte le nombre de commandes attribuées à chaque


employé(e) dans la base de données :

SELECT N°Employé, Count(N° commande) AS CompteN° commande


FROM Commandes GROUP BY N° employé ;

L'exemple suivant trouve les fournisseurs dont les produits ont un prix unitaire
moyen supérieur à 25 F :

SELECT N° fournisseur, Avg(PrixUnitaire) AS PrixUnitMoyen


FROM Produits GROUP BY N° fournisseur
HAVING (Avg(PrixUnitaire)>25) ;

L'exemple suivant présente la sélection des employés qui ont vendu plus de
100 commandes :

SELECT N° employé, Count(N° commande) AS CompteN° commande


FROM Commandes GROUP BY N° employé
HAVING Count(N° commande) > 100 ;

 La Clause Order..... BY :

Trie, par ordre croissant ou décroissant, les enregistrements résultants d'une requête
en fonction du ou des champs spécifiés.

Syntaxe

SELECT fieldlist
FROM table
WHERE selectcriteria
[ORDER BY field1 [ASC | DESC ][, field2 [ASC | DESC ]][, ...]]]

 Page 35
OFPPT – ISTA BENI MELLAL © RHATAY – BENTALEB
Module N° 5 : Système d’information
Séquence N° 4 : Accèss : Requêtes Durée : 5 Jours
Objectif : Savoir Interroger une base de données à l’aide de requêtes SQL.

Une instruction SELECT contenant une clause ORDER BY se compose des


éléments suivants :

Élément Description
Fieldlist Noms du ou des champs à extraire avec leurs alias de nom de champ,
fonctions de regroupement SQL, prédicats de sélection (ALL,
DISTINCT, DISTINCTROW, ou TOP) ou autres options
d'instruction SELECT.
Table Nom de la table contenant les enregistrements à extraire. Pour plus
d'informations, reportez-vous à la rubrique relative à la clause FROM.
Selectcriteria Critères de sélection. Si l'instruction contient une clause WHERE, le
moteur de base de données Microsoft Jet trie les valeurs après avoir
appliqué les conditions WHERE aux enregistrements.
field1, field2 Noms des champs sur lesquels doit porter le tri.

 Remarques

La clause ORDER BY est facultative. Mais si vous n'incluez pas ORDER BY,
les données sont affichées sans être triées.
L'ordre de tri par défaut est l'ordre croissant (de A à Z et de 0 à 9). Toutefois,
vous pouvez inclure le mot réservé ASC à la fin de chaque champ que vous souhaitez
trier par ordre croissant.

Dans les deux exemples suivants, les employés sont triés sur leur nom :

SELECT Nom, Prénom


FROM Employés
ORDER BY Prénom;

SELECT Nom, Prénom


FROM Employés
ORDER BY Prénom ASC;

Pour effectuer un tri par ordre décroissant (de Z à A et de 9 à 0), ajoutez le mot
réservé DESC à la fin de chaque champ que vous souhaitez trier par ordre décroissant.
Dans les deux exemples suivants, les employés sont sélectionnés, puis triés par ordre
décroissant :

SELECT Nom, Salaire


FROM Employés
ORDER BY Salaire DESC, Nom;

 Page 36
OFPPT – ISTA BENI MELLAL © RHATAY – BENTALEB
Module N° 5 : Système d’information
Séquence N° 4 : Accèss : Requêtes Durée : 5 Jours
Objectif : Savoir Interroger une base de données à l’aide de requêtes SQL.

Si vous spécifiez un champ contenant des données de type Memo ou OLE


Object dans la clause ORDER BY, une erreur se produit. Le moteur de base de
données Microsoft Jet ne peut trier des champs contenant ces types de données.

ORDER BY est généralement le dernier élément d'une instruction SQL.

Vous pouvez inclure des champs supplémentaires dans une clause ORDER BY.
Les enregistrements sont triés tout d'abord en fonction du premier champ spécifié
après ORDER BY. Ensuite, les enregistrements pour lesquels ce champ contient des
valeurs identiques sont triés en fonction de la valeur du second champ spécifié, et ainsi
de suite.

 Exemple
Cet exemple trie les enregistrements par ordre décroissant sur le nom de famille
(Z à A) :

SELECT Nom, Prénom FROM Employés ORDER BY Nom DESC ;

Cet exemple trie d'abord par catégorie, puis par nom de produit :

SELECT Réfproduit, Nomproduit, Prixunitaire FROM Produits


ORDER BY Réfproduit, Nomproduit ;

 INNER JOIN :

Fusionne les enregistrements de deux tables lorsqu’un champ commun contient des
valeurs identiques

Syntaxe

FROM table1 INNER JOIN table2 ON table1.field1 compopr


table2.field2

 Page 37
OFPPT – ISTA BENI MELLAL © RHATAY – BENTALEB
Module N° 5 : Système d’information
Séquence N° 4 : Accèss : Requêtes Durée : 5 Jours
Objectif : Savoir Interroger une base de données à l’aide de requêtes SQL.

L'opération INNER JOIN comprend les éléments suivants :

Elément Description
table1, table2 Noms des tables depuis lesquelles les enregistrements sont fusionnés.
field1, field2 Noms des champs reliés entre eux. S'ils ne sont pas numériques, les
champs doivent avoir le même type de données et contenir des données
de nature identique. Leurs noms peuvent être différents.
Oprcomp Tout opérateur de comparaison relationnelle tel que "=", "<", ">",
"<=", ">=", ou "<>".

 Remarques

Vous pouvez utiliser une opération INNER JOIN dans n'importe quelle clause
FROM. Il s'agit du type de jointure le plus répandu. Les jointures INNER JOIN
fusionnent les enregistrements de deux tables lorsqu’un champ commun contient des
valeurs identiques.Vous pouvez utiliser INNER JOIN avec les tables Services et
Employés pour sélectionner tous les employés appartenant à un service donné. À
l'opposé, pour sélectionner tous les services (même si certains n'ont aucun personnel)
ou tous les employés (même si certains ne sont liés à aucun service), vous pouvez
utiliser une opération LEFT JOIN or RIGHT JOIN pour créer une jointure externe.

Si vous tentez d'établir une jointure entre des champs contenant des données de
type Memo ou OLE Object , une erreur se produit.

Une jointure peut impliquer deux champs numériques de type identique. Vous
pouvez, par exemple, établir une jointure entre les champs AutoNumber et Long car il
s'agit de types identiques. Par contre, il est impossible d'établir une jointure entre les
types de champs Single et Double.

 Exemple :

L'exemple qui suit montre comment réaliser une jointure entre les tables
Catégories et Produits, sur la base du champ Nom de catégorie :

SELECT [Nom de catégorie], [Nom du produit]


FROM Catégories INNER JOIN Produits
ON Catégories.[Nom de catégorie] = Produits.[Nom de catégorie];

Dans cet exemple, le champ sur lequel se fait la jointure est Nom de catégorie
mais il n'est pas visible dans le résultat de la requête car il n'a pas été inclus dans
l'instruction SELECT. Pour inclure le champ de base de la jointure, intégrez son nom à
l'instruction SELECT ¾ dans le cas présent, Catégories.[Nom de catégorie].

 Page 38
OFPPT – ISTA BENI MELLAL © RHATAY – BENTALEB
Module N° 5 : Système d’information
Séquence N° 4 : Accèss : Requêtes Durée : 5 Jours
Objectif : Savoir Interroger une base de données à l’aide de requêtes SQL.

Vous pouvez également relier plusieurs clauses ON dans une instruction JOIN,
à l'aide de la syntaxe suivante :

SELECT fields
FROM table1 INNER JOIN table2
ON table1.field1 compopr table2.field1 AND
ON table1.field2 compopr table2.field2) OR
ON table1.field3 compopr table2.field3)];

Vous pouvez également imbriquer des instructions JOIN à l'aide de la syntaxe


suivante:

SELECT fields
FROM table1 INNER JOIN
(table2 INNER JOIN [( ]table3
[INNER JOIN [( ]tablex [INNER JOIN ...) ]
ON table3.field3 compopr tablex.fieldx)]
ON table2.field2 compopr table3.field3)
ON table1.field1 compopr table2.field2;

Une jointure LEFT JOIN ou RIGHT JOIN peut être imbriquée dans une
jointure INNER JOIN mais il est impossible d'imbriquer une jointure INNER JOIN
dans une jointure LEFT JOIN ou RIGHT JOIN.

 Exemple :
L'exemple suivant présente la création de deux équi-jointures : l'une
entre les tables Détails des commandes et Commandes, et l'autre entre les tables
Commandes et Employés. Les deux jointures sont nécessaires car la table
Employés ne contient pas de données de ventes, et la table Détail des
commandes ne contient pas de données d'employés. La requête aboutit à une
liste d'employés et leurs ventes totales.

SELECT DISTINCTROW Sum(Prixunitaire * Quantité)


AS Ventes, Prénom & " " & Nom AS Nomcomplet FROM Employés
INNER JOIN(Commandes INNER JOIN [Détails commandes]
ON Commandes.N° commande = [Détails commandes].N° commande)
ON Employés.N° employé = Commandes.N° commande
GROUP BY Prénom & " " & Nom ;

 Page 39
OFPPT – ISTA BENI MELLAL © RHATAY – BENTALEB
Module N° 5 : Système d’information
Séquence N° 4 : Accèss : Requêtes Durée : 5 Jours
Objectif : Savoir Interroger une base de données à l’aide de requêtes SQL.

 LEFT | RIGHT JOIN

Fusionnent des enregistrements de tables source lorsqu'on les utilise dans une
clause FROM.

Syntaxe

FROM table1 [ LEFT | RIGHT ] JOIN table2


ON table1.field1 compopr table2.field2

Les opérations LEFT JOIN et RIGHT JOIN comprennent les éléments suivants :

Elément Description
table1, table2 Noms des tables depuis lesquelles les enregistrements sont
fusionnés.
field1, field2 Noms des champs reliés entre eux. Les champs doivent avoir le
même type de données et contenir des données de nature
identique. Leurs noms peuvent être différents.
Compopr Tout opérateur de comparaison relationnelle tel que "=","<", ">",
"<=", ">=", ou "<>".

 Remarques

Utilisez une opération LEFT JOIN pour créer une jointure externe gauche. Avec
deux tables, les jointures externes gauches comprennent tous les enregistrements de la
première table (celle de gauche) même s'il n'existe aucune valeur correspondante aux
enregistrements dans la deuxième table (celle de droite).

Utilisez une opération RIGHT JOIN pour créer une jointure externe droite.
Avec deux tables, les jointures externes droites comprennent tous les enregistrements
de la deuxième table (celle de droite) même s'il n'existe aucune valeur correspondante
aux enregistrements dans la première table (celle de gauche).

Vous pouvez utiliser, par exemple, une jointure LEFT JOIN avec les tables
Services (gauche) et Employés (droite) pour sélectionner tous les services y compris
ceux auquel aucun employé n'est affecté. Pour sélectionner tous les employés, y
compris ceux ne relevant d'aucun service en particulier, vous pouvez utiliser une
jointure RIGHT JOIN.

 Page 40
OFPPT – ISTA BENI MELLAL © RHATAY – BENTALEB
Module N° 5 : Système d’information
Séquence N° 4 : Accèss : Requêtes Durée : 5 Jours
Objectif : Savoir Interroger une base de données à l’aide de requêtes SQL.

L'exemple qui suit montre comment réaliser une jointure entre les tables
Catégories et Produits, sur la base du champ Nom de catégorie. La requête produit une
liste exhaustive des catégories qui comprend aussi celles ne contenant aucun produit.

SELECT [Nom de catégorie],


[Nom du produit]
FROM Catégories LEFT JOIN Produits
ON Catégories.[Nom de catégorie] = Produits.[Nom de catégorie];

Dans cet exemple, le champ sur lequel se fait la jointure est Nom de catégorie
mais il n'est pas visible dans les résultats de la requête car il n'a pas été inclus dans
l'instruction SELECT. Pour inclure le champ de base de la jointure, intégrez son nom à
l'instruction SELECT, dans le cas présent, Catégories.[Nom de catégorie].

 Notes

 Pour créer une requête ne comprenant que les enregistrements dans lesquels les
données des champs reliés sont identiques, utilisez une opération INNER JOIN.

 Une jointure LEFT JOIN ou RIGHT JOIN peut être imbriquée dans une jointure
INNER JOIN mais il est impossible d'imbriquer une jointure INNER JOIN dans
une jointure LEFT JOIN ou RIGHT JOIN. Reportez-vous aux informations
données sur l'imbrication, dans la section consacrée à la jointure INNER JOIN,
pour voir comment imbriquer des jointures les unes dans les autres.

 Vous pouvez relier plusieurs clauses ON. Reportez-vous aux informations données
sur la liaison des clauses, dans la section consacrée à la jointure INNER JOIN, pour
voir comment procéder.

 Si vous tentez d'établir une jointure entre des champs contenant des données de
type Memo ou OLE Object , une erreur se produit.

 Exemple :

L'exemple suivant présente la sélection de tous les clients, y compris les clients
sans commandes :

SELECT Clients.CodeClient, Société, N° commande


FROM Clients
LEFT JOIN Commandes
ON Clients.CodeClient = Commande.CodeClient
ORDER BY N° commande ;

 Page 41
OFPPT – ISTA BENI MELLAL © RHATAY – BENTALEB
Module N° 5 : Système d’information
Séquence N° 4 : Accèss : Requêtes Durée : 5 Jours
Objectif : Savoir Interroger une base de données à l’aide de requêtes SQL.

 PARAMETERS :

Déclare le nom et le type de données de chaque paramètre dans une requête Paramètre.

Syntaxe

PARAMETERS nom datatype [, nom datatype [, ...]]

La déclaration PARAMETERS comprend les éléments suivants :

Élément Description
Nom Nom du paramètre. Affecté à la propriété Name de l'objet Parameter
et servant à identifier ce paramètre dans la collection Parameters.
Vous pouvez utiliser nom comme une chaîne affichée dans une boîte
de dialogue pendant que votre application exécute la requête. Utilisez
des crochets ([ ]) pour encadrer les textes contenant des espaces ou
des signes de ponctuation. Par exemple, [Prix bas] et [Lancer l'état à
compter de quel mois ?] sont des arguments de nom valides.
Datatype Types de données SQL Microsoft Jet primaires ou leurs synonymes.

 Remarques

Pour les requêtes que vous exécutez périodiquement, vous pouvez utiliser une
déclaration PARAMETERS pour créer une requête Paramètre. La création d'une
requête Paramètre peut faciliter l'automatisation du processus de modification des
critères de requête. Avec une requête Paramètre, votre code devra fournir les
paramètres à chaque exécution de la requête.

La déclaration PARAMETERS est facultative mais, lorsqu'on l'inclut, elle doit


se placer avant toute autre instruction y compris l'instruction SELECT.

Si la déclaration implique plusieurs paramètres, séparez-les par des virgules.


Dans l'exemple qui suit, les paramètres sont au nombre de deux.

PARAMETERS [Prix bas] Monnaie, [Date de commencement] DateHeure;

Vous pouvez utiliser nom mais pas datatype dans une clause WHERE ou
HAVING. Dans l'exemple qui suit, on doit fournir deux paramètres. Les critères sont
ensuite appliqués aux enregistrements de la table Commandes.

 Page 42
OFPPT – ISTA BENI MELLAL © RHATAY – BENTALEB
Module N° 5 : Système d’information
Séquence N° 4 : Accèss : Requêtes Durée : 5 Jours
Objectif : Savoir Interroger une base de données à l’aide de requêtes SQL.

PARAMETERS [Prix bas] Monnaie,


[Date de commencement] DateHeure;
SELECT [N°commande], MontantCommande
FROM Commandes
WHERE MontantCommande > [Prix bas]
AND DateCommande >= [Date de commencement];

 SELECT .... INTO .... : Crée une requête de création de table.

Syntaxe

SELECT field1[, field2[, ...]] INTO newtable


[IN externaldatabase]
FROM source [Where Critère]

L'instruction SELECT...INTO comprend les éléments suivants :

Élément Description
field1, field2 Noms des champs à copier dans la nouvelle table.
Newtable Nom de la table à créer. Ce nom doit respecter les conventions
d'appellation standard. Si newtable est identique au nom d'une
table existante, une erreur récupérable se produit.
Externaldatabase Chemin d’accès d'une base de données externe. Pour obtenir une
description du chemin, examinez la clause IN.
Source Nom de la table dans laquelle les enregistrements sont
sélectionnés. Il peut s'agir d'une ou de plusieurs tables, ou encore
d'une requête.

 Remarques

Vous pouvez utiliser les requêtes de création de tables pour archiver les
enregistrements, faire des copies de sauvegarde des tables, ou pour faire des copies à
exporter dans une autre base de données ou à utiliser pour produire des états
concernant des données sur une période déterminée. Par exemple, vous pouvez
produire un état Ventes Mensuelles par Région en exécutant la même requête de
création de table chaque mois.

 Page 43
OFPPT – ISTA BENI MELLAL © RHATAY – BENTALEB
Module N° 5 : Système d’information
Séquence N° 4 : Accèss : Requêtes Durée : 5 Jours
Objectif : Savoir Interroger une base de données à l’aide de requêtes SQL.

 Notes

 Vous souhaiterez peut-être définir une clé primaire pour la nouvelle table. Lorsque
vous créez la table, les champs de la nouvelle table héritent du type de données et
de la taille de champ de chaque champ présent dans les tables sous-jacentes de la
requête. Aucune autre propriété de champ ou de table n'est transférée.
 Pour ajouter des données à une table existante, utilisez l'instruction INSERT INTO
au lieu de créer une requête Ajout.

 Pour savoir quels enregistrements seront sélectionnés avant d'exécuter la requête de


création de table, lancez d'abord une requête Sélection avec les mêmes critères de
sélection puis examinez les résultats obtenus.

 INSERT INTO : Requête Ajout.

Ajoute un ou plusieurs enregistrements à une table.

Syntaxe

Requête Ajout avec plusieurs enregistrements :

INSERT INTO target [IN externaldatabase] [(field1[, field2[, ...]])]


SELECT [source.]field1[, field2[, ...]
FROM tableexpression [Where Critère]

Requête Ajout avec un seul enregistrement :

INSERT INTO target [(field1[, field2[, ...]])]


VALUES (value1[, value2[, ...])

L'instruction INSERT INTO comprend les éléments suivants :

Elément Description
Target Nom de la table ou de la requête à laquelle on souhaite ajouter des
enregistrements.
Externaldatabase Chemin d’accès d'une base de données externe. Pour obtenir une
description du chemin, examinez la clause IN.
Source Nom de la table ou de la requête à partir de laquelle on souhaite
copier les enregistrements.

 Page 44
OFPPT – ISTA BENI MELLAL © RHATAY – BENTALEB
Module N° 5 : Système d’information
Séquence N° 4 : Accèss : Requêtes Durée : 5 Jours
Objectif : Savoir Interroger une base de données à l’aide de requêtes SQL.

field1, field2 Noms des champs auxquels on souhaite ajouter les données, s'ils
sont placés à la suite de l'argument target, ou noms des champs à
partir desquels on souhaite extraire les données, s'ils sont placés à
la suite de l’argument source.
Tableexpression Nom de la ou des tables à partir desquelles les enregistrements sont
insérés. Cet argument peut être constitué d'un seul nom de table ou
d'un composé obtenu par une opération INNER JOIN, LEFT JOIN
ou RIGHT JOIN, ou encore d'une requête sauvegardée.
value1, value2 Valeurs à insérer dans des champs spécifiques du nouvel
enregistrement. Chaque valeur vient s'insérer dans le champ
correspondant à la position de la valeur dans la liste : value1
s'insère dans le field1 du nouvel enregistrement, value2 dans le
field2 et ainsi de suite. Vous devez séparer les valeurs par une
virgule et encadrer les zones de texte par des apostrophes (' ').

 Remarques

Vous pouvez utiliser l'instruction INSERT INTO pour ajouter un


enregistrement unique à une table en vous servant de la syntaxe de requête Ajout
d'enregistrement unique décrite plus haut. Dans ce cas, le code spécifie le nom et la
valeur associés à chaque champ de l'enregistrement. Vous devez spécifier chacun des
champs de l'enregistrement auquel une valeur doit être affectée ainsi qu'une valeur
pour chacun d'eux. Si vous ne spécifiez pas tous les champs, la valeur par défaut ou
Null s'insère à la place des colonnes manquantes. Les enregistrements sont ajoutés à la
fin de la table.

Vous pouvez aussi utiliser INSERT INTO pour ajouter une série
d'enregistrements depuis une autre table ou requête, conjointement à la clause
SELECT ... FROM comme décrit plus haut dans la syntaxe de requête Ajout avec
plusieurs enregistrements. Dans ce cas, la clause SELECT mentionne les champs à
ajouter à la table target spécifiée.

La cible source ou target peut spécifier une requête ou une table. Dans le cas
d'une requête, le moteur de base de données Microsoft ajoute les enregistrements à
toutes les tables spécifiées par la requête, sans exception.

INSERT INTO est facultatif mais, lorsqu'on l'inclut, doit se placer avant
l'instruction SELECT.

Si votre table de destination contient une clé primaire, assurez-vous que vous
ajoutez des valeurs uniques et différentes de Null aux champs de clé primaire ; dans le

 Page 45
OFPPT – ISTA BENI MELLAL © RHATAY – BENTALEB
Module N° 5 : Système d’information
Séquence N° 4 : Accèss : Requêtes Durée : 5 Jours
Objectif : Savoir Interroger une base de données à l’aide de requêtes SQL.

cas contraire, le moteur de base de données Microsoft Jet n'ajoutera pas les
enregistrements.

Si vous ajoutez des enregistrements à une table dotée d'un champ AutoNumber
et que vous désirez changer les numéros des enregistrements ajoutés, n'intégrez pas le
champ AutoNumber à votre requête. En revanche, faites-le si vous souhaitez conserver
les valeurs d'origine du champ.

Utilisez la clause IN pour ajouter des enregistrements à une table située dans
une autre base de données.

Pour créer une nouvelle table, utilisez l'instruction SELECT... INTO au lieu de
créer une requête de création de table.

Pour savoir quels enregistrements seront ajoutés avant d'exécuter la requête


Ajout, lancez d'abord une requête Sélection avec les mêmes critères de sélection, puis
examinez les résultats obtenus.

Une requête Ajout copie des enregistrements à partir d'une ou de plusieurs


tables vers une autre. La requête Ajout n'a aucun effet sur les tables contenant les
enregistrements que vous ajoutez.

Au lieu d'ajouter des enregistrements existant à partir d'une autre table, vous
pouvez spécifier la valeur de chaque champ dans un nouvel et unique enregistrement
en utilisant la clause VALUES. Si vous omettez la liste des champs, la clause
VALUES doit comprendre une valeur pour chaque champ de la table. À défaut,
l'opération INSERT échouera. Utilisez une instruction INSERT INTO supplémentaire,
associée à une clause VALUES, pour chaque nouvel enregistrement que vous
souhaitez créer.

 Exemple :

Pour tester l'exemple suivant, créez une copie de la table Clients et nommez-la
NouveauxClients. Cet exemple présente la sélection de tous les enregistrements de la
table NouveauxClients et les ajoute à la table Clients. Si les colonnes individuelles ne
sont pas désignées, les noms de colonne de la table SELECT doivent correspondre
exactement à ceux de la table INSERT INTO.

INSERT INTO Clients SELECT * FROM NouveauxClients ;

 Page 46
OFPPT – ISTA BENI MELLAL © RHATAY – BENTALEB
Module N° 5 : Système d’information
Séquence N° 4 : Accèss : Requêtes Durée : 5 Jours
Objectif : Savoir Interroger une base de données à l’aide de requêtes SQL.

Cet exemple présente la création d'un nouvel enregistrement dans la table


Employés :

INSERT INTO Employés (Prénom,Nom, Fonction) VALUES ('Harry',


'Washington', 'Stagiaire') ;

L'exemple suivant présente la sélection, à partir d'une table Stagiaires existante,


de tous les stagiaires embauchés depuis plus de 30 jours, et ajoute leurs
enregistrements à la table Employés.

INSERT INTO Employés SELECT Stagiaires.* FROM Stagiaires WHERE


Dated'embauche < Now() - 30 ;

Vous pouvez utiliser la clause INSERT INTO pour sauvegarder les


informations de votre base de données avant toute modification. Par exemple, vous
pouvez sauvegarder les informations d'une table Employés juste avant qu'un utilisateur
introduise une quelconque modification dans cette table.

Pour tester l'exemple suivant, à partir de la fenêtre Base de données,copiez la


table Employés vers une nouvelle table nommée HistoriqueEmployé en cliquant sur la
table, puis sur Copier dans la barre d'outils, et enfin sur Coller . Dans les Options de la
boîte de dialogue Coller la table sous, cliquez sur Structure seulement. Cette copie ne
contient que la structure de la table, sans aucune donnée. Collez ensuite l'instruction
SQL suivante dans une nouvelle requête et enregistrez-la sous SauvegardeRequête :

INSERT INTO HistoriqueEmployé(Prénom, Nom, Fonction)


VALUES (Forms!Employés!Prénom, Forms!Employés!Nom,Forms!Employés!
Fonction) ;

Ouvrez le formulaire Employés en mode Formulaire et définissez la propriété


AvantMAJ (BeforeUpdate) du formulaire à [Event Procedure]. Dans la procédure
événementielle Avant MAJ, entrez le code suivant :

DoCmd.OpenQuery "SauvegardeRequête"

Désormais, à chaque modification de la tables Employés par un utilisateur, les


données existantes de la table Employés seront copiées dans la table de sauvegarde.

 Page 47
OFPPT – ISTA BENI MELLAL © RHATAY – BENTALEB
Module N° 5 : Système d’information
Séquence N° 4 : Accèss : Requêtes Durée : 5 Jours
Objectif : Savoir Interroger une base de données à l’aide de requêtes SQL.

 Update : Requête Mise à jour

Permet la mise à jour (modification) de lignes appartenant à une table.

Syntaxe

Update Tablename Set fields=Newval [Where Criteria]


L’instruction Update comprend les elements suivants :

Elément Description
Tablename Nom de la table dans laquelle des enregistrements sont modifier.
Fields Nom du champ de la table pour lequel la valeur va changer
Newval Nouvelle valeur du champ
Criteria Expression qui détermine quels enregistrements seront mis à jour.

 Remarque

 Les mises à jour ne peuvent faire appel aux fonctions AVG, Count, Max, Min,
Sum.
 La nouvelle valeur doit être compatible avec la definition de la colonne (Type,
Taille,...).

 Exemples

La requête mise à jour suivante va permettre de doubler la quantité en stock pour


tous les articles ayant une TVA = 19 %

UPDATE ARTICLE
SET Stock=Stock * 2
Where TVA=19

 Page 48
OFPPT – ISTA BENI MELLAL © RHATAY – BENTALEB
Module N° 5 : Système d’information
Séquence N° 4 : Accèss : Requêtes Durée : 5 Jours
Objectif : Savoir Interroger une base de données à l’aide de requêtes SQL.

 DELETE : Requête suppression

Crée une requête Suppression qui supprime des enregistrements dans une ou
dans plusieurs des tables mentionnées dans la clause FROM qui correspond à la clause
WHERE.

Syntaxe

DELETE [table.*]
FROM table
[WHERE criteria]

L'instruction DELETE comprend les éléments suivants :

Elément Description
Table Nom facultatif de la table dans laquelle des enregistrements sont
supprimés.
Table Nom de la table dans laquelle des enregistrements sont supprimés.
Criteria Expression qui détermine quels enregistrements seront mis à jour.

 Remarques

DELETE est particulièrement utile lorsque vous désirez supprimer de


nombreux enregistrements en même temps.

Pour supprimer l'ensemble d'une table d'une base de données, vous pouvez utiliser la
méthode Execute conjointement à une instruction DROP. Notez que, si vous
supprimez la table, la structure associée est perdue. En revanche, si vous employez
DELETE, seules les données sont supprimées ; la structure de la table et toutes ses
propriétés, notamment les attributs de champs et les index, sont conservées.

Vous pouvez utiliser DELETE pour supprimer des enregistrements impliqués


dans une relation un-à-plusieurs avec d'autres tables. Les opérations de suppression en
cascade entraînent la suppression des enregistrements des tables placées du côté
"plusieurs" de la relation lorsque l'enregistrement correspondant, placé du coté "un" de
la relation, est lui même supprimé de la requête. Par exemple, dans la relation établie
entre les tables Clients et Commandes, la table Clients se situe du côté "un" tandis que
la table Commandes est du côté "plusieurs". Supprimer un enregistrement dans Clients

 Page 49
OFPPT – ISTA BENI MELLAL © RHATAY – BENTALEB
Module N° 5 : Système d’information
Séquence N° 4 : Accèss : Requêtes Durée : 5 Jours
Objectif : Savoir Interroger une base de données à l’aide de requêtes SQL.

entraîne la suppression des enregistrements correspondants dans Commandes si


l'option de suppression en cascade a été choisie.

Une requête Suppression efface des enregistrements dans leur intégralité et non
seulement les données de certains champs. Si vous désirez supprimer des valeurs
contenues dans un champ déterminé, créez une requête de mise à jour pour remplacer
les valeurs par Null.

 Important

 Une fois que vous avez supprimé des enregistrements à l'aide d'une requête
Suppression, vous ne pouvez pas annuler l'opération. Si vous désirez savoir quels
enregistrements ont été supprimés, faites d'abord une requête Sélection avec les
mêmes critères, examinez les résultats obtenus, puis exécutez la requête
Suppression.

 Conservez toujours des copies de sauvegarde de vos données. Si vous supprimez


des enregistrements par inadvertance, vous pourrez les récupérer à partir de vos
copies de sauvegarde.

 Exemple :

Pour essayer l'exemple suivant, ajoutez quelques enregistrements à la table


Employés avec une Fonction de "Stagiaire".
Cet exemple supprime tous les enregistrements d'employés dont la Fonction est
Stagiaire. Quand la clause FROM ne s'applique qu'à une seule table, il est inutile de
faire figurer le nom de la table dans l'instruction DELETE.

DELETE * FROM Employés WHERE Fonction = 'Stagiaire' ;

 La Clause Where

Indique quels enregistrements des tables citées dans la clause FROM sont
affectés par l’instruction SELECT, UPDATE ou DELETE.

Syntaxe

SELECT fieldlist
FROM tableexpression
WHERE criteria

 Page 50
OFPPT – ISTA BENI MELLAL © RHATAY – BENTALEB
Module N° 5 : Système d’information
Séquence N° 4 : Accèss : Requêtes Durée : 5 Jours
Objectif : Savoir Interroger une base de données à l’aide de requêtes SQL.

Une instruction SELECT contenant une clause WHERE se compose des


éléments suivants :

Élément Description
Fieldlist Nom du ou des champs à extraire .
Tableexpression Nom de la ou des tables contenant les données à extraire.
Criteria Expression que les enregistrements doivent satisfaire pour être
inclus dans le résultat de la requête.

 Remarques

Le moteur de base de données Microsoft Jet sélectionne les enregistrements qui


remplissent les conditions répertoriées dans la clause WHERE. Si vous ne spécifiez
pas de clause WHERE, votre requête renvoie toutes les lignes de la table. Si vous
spécifiez plusieurs tables dans votre requête et que vous n'avez pas inclus de clause
WHERE ou JOIN, votre requête génère un produit cartésien des tables.
La clause WHERE est facultative mais, si elle est présente, elle doit suivre la
clause FROM.

Si vous n'utilisez pas de clause JOIN pour effectuer des opérations de jointure
SQL sur plusieurs tables, l'objet Recordset résultant ne pourra pas être mis à jour.

WHERE est similaire à HAVING. WHERE détermine quels sont les


enregistrements à sélectionner. De même, une fois que les enregistrements sont
regroupés à l'aide de GROUP BY, HAVING détermine quels sont les enregistrements
à renvoyer.

Utilisez la clause WHERE pour éliminer les enregistrements que vous ne


souhaitez pas regrouper à l'aide d'une clause GROUP BY.

Utilisez plusieurs expressions différentes pour déterminer quels seront les


enregistrements renvoyés par l'instruction SQL. Par exemple, l'instruction SQL
suivante sélectionne tous les employés dont le salaire dépasse 21 000 F :

SELECT Nom, Salaire


FROM Employés
WHERE Salaire > 21000;

Une clause WHERE peut contenir jusqu'à 40 expressions liées par des
opérateurs logiques comme And et Or.

 Page 51
OFPPT – ISTA BENI MELLAL © RHATAY – BENTALEB
Module N° 5 : Système d’information
Séquence N° 4 : Accèss : Requêtes Durée : 5 Jours
Objectif : Savoir Interroger une base de données à l’aide de requêtes SQL.

Lorsque vous entrez un nom de champ contenant une espace ou un signe de


ponctuation, placez ce nom entre crochets ([ ]). Par exemple :

SELECT [Restaurant favori]

Si vous spécifiez l'argument criteria, vous devez indiquer les littéraux date au
format américain, et ce, même si vous n'utilisez pas la version américaine du moteur
de base de données Microsoft Jet. Par exemple, le 10 mai 1996, s'écrit sous la forme
10/5/96 en France et 5/10/96 aux Etats-Unis. N'oubliez pas d'indiquer vos littéraux
date entre deux caractères #, comme dans l'exemple ci-dessous.

Pour rechercher les enregistrements datés du 10 mai 1996 dans une base de
données française, utilisez l'instruction SQL suivante :

SELECT *
FROM Commandes
WHERE [Date envoi] = #5/10/96#;

Vous pouvez également utiliser la fonction DateValue qui reconnaît les


paramètres régionaux de Microsoft Windows. Par exemple, pour un code écrit aux
Etats-Unis :

SELECT *
FROM Orders
WHERE ShippedDate = DateValue('5/10/96');

Par exemple, pour un code écrit en France :

SELECT *
FROM Commandes
WHERE [Date envoi] = DateValue('10/5/96');

 Exemples

L'exemple suivant présente la sélection des champs Nom et Prénom de chaque


enregistrement dont le nom de famille est Leroy :

SELECT Nom, Prénom FROM Employés


WHERE Nom = 'Leroy' ;

 Page 52
OFPPT – ISTA BENI MELLAL © RHATAY – BENTALEB
Module N° 5 : Système d’information
Séquence N° 4 : Accèss : Requêtes Durée : 5 Jours
Objectif : Savoir Interroger une base de données à l’aide de requêtes SQL.

L'exemple suivant présente la sélection des champs Nom et Prénom des


Employés dont le nom de famille commence par la lettre S :

SELECT Nom, Prénom FROM Employés


WHERE Nom Like 'S*' ;

L'exemple suivant présente la sélection des produits dont les prix unitaires sont
compris entre 20 et 50 F inclusivement :

SELECT NomProduit, PrixUnitaire FROM Produits


WHERE (PrixUnitaire >=20.00 And PrixUnitaire<= 50.00) ;

L'exemple suivant présente la sélection de tous les produits qui apparaissent par
ordre alphabétique entre "Cha" et "Out", inclusivement. "Outback Lager" n'est pas
retenu parce que "Outback Lager" vient après "Out"et se trouve donc en dehors de la
plage spécifiée.

SELECT NomProduit, PrixUnitaire FROM Produits


WHERE NomProduit Between 'Cha' And 'Out' ;

L'exemple suivant présente la sélection des commandes qui se situent durant la


première moitié de 1995 :

SELECT N°Commande, DateCommande FROM Commandes


WHERE DateCommande Between #1-1-95# And #30-6-95# ;
Par exemple, vous pouvez sélectionner tous les employés du service Ventes :

WHERE Dept = 'Ventes'

Ou tous les clients qui ont entre 18 et 30 ans :

WHERE Age BETWEEN 18 And 30

L'exemple suivant présente la sélection des commandes livrées dans les états de
l'Idaho, de l'Orégon ou de Washington :

SELECT N°Commande, RégionLivraison FROM Commandes


WHERE RégionLivraison In ('ID', 'OR', 'WA') ;

 Page 53

Vous aimerez peut-être aussi