Académique Documents
Professionnel Documents
Culture Documents
Olivier
Introduction
SQL (“Structured Query Language” ou “Langage de recherche structuré”) est un langage de gestion
des bases de données relationnelles.
SQL représente un outil universel de manipulation des données. Il est particulièrement usité comme
langage de requête.
Sous Access, l’utilisation de SQL peut prendre plusieurs formes :
– L’utilisateur a accès au langage SQL des requêtes créées sur l’interface classique.
– L’utilisateur peut également formuler ses requêtes directement en SQL.
On pourra ainsi effectuer des requêtes que n’autorise pas l’interface graphique Access (requête
permettant l’union de deux tables par exemple).
– Il est également possible d’intégrer du code SQL aux programmes Visual Basic attachés aux bases
de données. C’est ce que nous verrons dans le cadre du cours Programmation et bases de données.
Dans ce cours, nous présenterons les principaux concepts et instructions SQL.
Chacune de ces notions sera ensuite testée sur une base de données Access.
Table Fournisseur
Nous utiliserons cette fenêtre tout au long de ce cours afin de tester les instructions SQL.
select liste d’attributs from table select et from sont des “clauses”.
Table désigne la table source.
select attribut1, attribut2 from table Les attributs sont séparés par des virgules ; Les noms
select * from table d’attributs contenant un espace ou un tiret doivent
être notés entre crochets [ ].
* désigne tous les attributs
Exemple 1 : Exemple 2 :
select espece from Champignons select espece, categorie from Champignons
espece espece categorie
Girolle Girolle Conserve
Girolle Girolle Sec
Cèpe Cèpe Frais
Girolle Girolle Sec
Exemple 3 : Exemple 4 :
Tri de l’exemple 1 dans l’ordre croissant. Tri de l’exemple 2 dans l’ordre croissant des
espèces, puis dans l’ordre décroissant des catégories.
select espece from Champignons
order by espece select espece, categorie from Champignons
order by espece, categorie desc
espece espece categorie
Cèpe Cèpe Frais
Girolle Girolle Sec
Girolle Girolle Sec
Girolle Girolle Conserve
Analyser les données - Le langage SQL - Master 2 C.G.A.O. - A. Olivier 3
Exemple 5 : Exemple 6 :
Suppression des doublons dans l’exemple 1. Suppression des doublons dans l’exemple 2.
select distinct espece, categorie
select distinct espece from Champignons
from Champignons
espece categorie
espece Girolle Conserve
Girolle Girolle Sec
Cèpe Cèpe Frais
Exemple 7 : Exemple 8 :
Definir un nouvel attribut dans une requête à Afficher l’attribut conditionnement avec une
partir de la table Champignons. Nom produit doit majuscule dans la requête et renommer l’attribut
être entre [ ]. ainsi obtenu.
On affichera aussi l’attribut espece.
select espece & (( - )) & categorie
as [nom produit] select UCase(conditionnement)
from Champignons as emballage, espece
from Champignons
nom produit emballage espece
Girolle - Conserve BOCAL Girolle
Girolle - Sec VERRINE Girolle
Cèpe - Frais BOITE Cèpe
Girolle - Sec SACHET PLASTIQUE Girolle
Analyser les données - Le langage SQL - Master 2 C.G.A.O. - A. Olivier 4
Exemple 9 : Exemple 10 :
Afficher les enregistrements de la table Afficher les enregistrements de la table Resultats
Champignons pour la catégorie “sec”. dont le CA est compris entre 1000 et 1200. Le CA
ne sera pas affiché.
select *
from Champignons select espece, categorie
from resultats
where categorie=“sec”
where CA>1000 and CA<1200
(ou bien : CA between 1000 and 2000)
espece categorie conditionnement
Girolle Sec Verrine espece categorie
Girolle Sec Sachet plastique Girolle Frais
Exemple 11 : Exemple 12 :
Afficher le CA total par espèce pour la table Afficher le CA maximum par catégorie.
Résultats.
select categorie, Max(CA) as [CA max]
select espece, Sum(CA) as [CA total] from resultats
from Resultats group by categorie
group by espece
categorie CA max
espece CA total Conserve 1385,00
Cèpe 3467,00 Frais 1098,00
Girolle 2586,00 Sec 1401,00
Exemple 13 : Exemple 14 :
Afficher le même résultat qu’à l’exemple 11 mais Afficher le CA maximum par catégorie (voir
en excluant la catégorie “conserve”. exemple 12), uniquement lorsque celui-ci excède
1200.
select espece, Sum(CA) as [CA total]
from Resultats select categorie, Max(CA) as [CA max]
from resultats
where categorie not like “conserve”
group by categorie
group by espece having Max(CA) > 1200
1.7 Le comptage
Le comptage est une opération particulière de regroupement qui permet de compter les enregistrements.
Exemple 15 : Exemple 16 :
Déterminer le nombre de catégorie par espèce Afficher le nombre d’enregistrements de la table
pour la table Champignons. Champignons.
select espece, Count(categorie)
as NombreCategorie select Count(*) as NombreEnregistrements
from Champignons from Champignons
group by espece
Espèce NombreCatégorie
Girolle 3 NombreEnregistrements
Cèpe 1 4
Exemple 17 :
Créer un tableau croisé à partir de la table Resultats.
Analyser les données - Le langage SQL - Master 2 C.G.A.O. - A. Olivier 6
Exemple 18 -
Exemple 19 -
2.2 Ajout
insert into table destination Encore une syntaxe simple pour ajouter un
select liste d’attributs ou plusieurs attributs d’une table source à une
from table source table destination, grâce à la clause insert into.
Exemple 20 -
Soit la table Champignons2, dont la structure La requête suivante ajoute les enregistrements
est la même que celle de la table Champignons et de la table Champignons2 à la table Champignons.
dont le contenu est le suivant :
insert into Champignons
select *
Table Champignons2 from Champignons2
Exemple 21 -
Soit la table Nouveaux fournisseurs dont la Nous souhaitons ajouter les enregistrements de
structure est différente de celle de la table cette table à la table Fournisseurs, en respectant
Fournisseurs : la structure de cette dernière (seuls deux attributs
seront ajoutés).
Exemple 22 -
Exemple 23 -
2.4 Suppression
delete attributs La clause delete supprime un ou plusieurs enregis-
from table trements d’une table. Elle est généralement suivie de
where condition de suppression ((*)).
La clause where est facultative.
Exemple 24 -
Exemple 25 -
select liste d’attributs La clause where est utilisée dans ce cadre pour
from Table1, Table2 préciser la condition de jointure, c’est-à-dire l’attri-
where Table1.attribut1=table2.attribut1 but commun aux deux tables.
A cette condition de jointure, peuvent s’ajouter
d’autres conditions classiques (voir 1.5) utilisant
where.
Remarquez que la clause from est suivie du nom des
deux tables.
select liste d’attributs Une jointure à trois tables est, en fait, un ensemble
from Table1, Table2, Table3 de deux jointures de tables prises deux-à-deux (il y
where Table1.attribut1=table2.attribut1 aura donc deux conditions where).
and Table3.attribut2=Table2.attribut2
Jusqu’à maintenant, lorsque l’on se référait à un attribut dans une instruction SQL, la question ne se
posait pas de savoir d’où venait cet attribut puisque l’on utilisait qu’une seule table.
Faut-il, lorsque l’on utilise plusieurs tables, préciser pour chaque attribut, la table dont il est issu?
Analyser les données - Le langage SQL - Master 2 C.G.A.O. - A. Olivier 9
Dans les listes d’attributs, les conditions where, ainsi que dans toutes les clauses faisant intervenir des
attributs, il faudra faire précéder le nom de chaque attribut du nom de la table associée, s’il existe
plus d’un attribut portant ce nom dans l’ensemble des tables de la jointure.
Exemple 26 -
Exemple 27 -
Afficher la même liste avec, pour chaque ligne, select distinct nom, champignons.categorie,
le CA total correspondant. sum(CA) AS [CA total]
Cette requête nécessite trois tables, et donc deux from champignons, fournisseurs, resultats
jointures deux-à-deux avec deux conditions where. where champignons.espece=fournisseurs.espece
Les deux conditions where sont reliées par and. and fournisseurs.espece=resultats.espece
group by nom, champignons.categorie
A cela s’ajoute un regroupement avec création
d’un attribut d’agrégation.
Dans cet exemple, on remarquera l’importance
du nom de la table devant le nom de l’attribut lors-
qu’il y a doublon (et donc confusion) possible (pour
les attributs espece et categorie).
3.2 Union
L’union de deux tables contient toutes les occurrences de la première table et toutes celles de la seconde.
L’opération élimine les doublons.
Les attributs peuvent porter des noms différents mais doivent être de même type.
select liste d’attributs from Table1 La clause union regroupe les enregistrements des
union deux tables, selon l’ordre spécifié dans la liste d’at-
select liste d’attributs from Table2 tributs.
Les doublons n’apparaı̂tront pas dans la table
résultat.
Analyser les données - Le langage SQL - Master 2 C.G.A.O. - A. Olivier 10
Exemple 24 -
Exemple 25 -
Le contenu de Magasin3 est identique à celui de Magasin2 mais les noms des attributs diffèrent.
La requête suivante donnera donc le même résultat que l’exemple 24.
Les instructions SQL précisent les noms des attributs de chaque table.
L’ordre des attributs est important.
L’ordre des tables aussi : les noms des colonnes affichés dans le résultat sont ceux de la première table.
Exemple 26 -
Il est également possible de changer le nom des attributs dans la feuille de résultats.
Nous ajoutons ici en outre une condition avec where : remarquez que cette condition doit être précisée
pour chaque table.
3.3 Intersection
select distinct table1.* Pour trouver l’intersection entre deux tables, on uti-
from table1, table2 lisera la clause where : cette clause doit préciser
where table1.attribut1=table2.attribut1 quels attributs doivent être égaux deux-à-deux.
and table1.attribut2=table2.attribut2
... Remarquez que la clause select est suivie des attri-
and table1.attributn=table2.attributn... buts d’une seule table.
La clause from est par contre suivie du nom des
deux tables, comme pour une jointure.
Les doublons n’apparaı̂tront pas dans le résultat.
Exemple 28 - (pour trouver les couples espece, categorie communs aux tables Magasin2 et Resultats)
Remarque : Il existe une autre syntaxe non reconnue par Access. Elle utiliser l’opérateur intersect.
select liste d’attributs from Table1 Cette syntaxe, comparable à celle de l’opération
intersect union, ne fonctionne pas sous Access.
select liste d’attributs from Table2
Table espece
Table categorie
select * from Table1, Table2 Il n’y a pas de clause ni d’opérateur spécifique pour
le produit cartésien.
Remarquez que la clause from est suivi du nom des
deux tables.
Exemple 29 -
select *
from espece, categorie
order by nom