Vous êtes sur la page 1sur 11

Master 2 C.G.A.O. - A.

Olivier

Analyse et conception d’une base de données - Cours 3 -


Analyser les données (1) - Le langage SQL

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.

Créer une base de données Access


Créer une nouvelle base de données Access.
Créer 3 tables dans cette base (choisir le type de données “texte court” pour tous les champs sauf
pour CA ; ne définir ni clé primaire, ni index).
Saisir les enregistrements des 3 tables.

Table Fournisseur

Table Champignons Table Résultats

Accéder au code SQL d’une requête

Sur l’interface Access, créer


une requête simple pour afficher
la liste des fournisseurs.
Comment afficher le code SQL
de cette requête?
Requête en mode création Affichage - Mode SQL. Code SQL correspondant
Analyser les données - Le langage SQL - Master 2 C.G.A.O. - A. Olivier 2

Ecrire une requête en SQL sous Access

Lancer la création d’une


requête en mode création (Créer
- Création de requête).
Ne pas sélectionner de table
dans Afficher la table.
Puis basculer en Mode SQL.

Nous utiliserons cette fenêtre tout au long de ce cours afin de tester les instructions SQL.

Rappel : pour exécuter une requête, utiliser le bouton executer.


Puis revenir en mode SQL avec la commande Affichage - Mode SQL.

1 Les requêtes simples


1.1 Projection ou sélection simple

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

1.2 Les tris


select liste d’attributs from table La clause order by permet d’effectuer des tris.
order by attribut1, attribut2 Elle est suivi du nom de la (des) clé(s) de tri.
Le tri par défaut est croissant. Préciser desc après
le nom de l’attribut pour un tri décroissant.

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

1.3 Suppression des doublons


select distinct liste d’attributs from table La clause distinct élimine les doublons : les enregis-
trements dont tous les champs sont identiques deux-
à-deux ne figureront qu’une seule fois dans la feuille
de résultats.

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

1.4 Création de champ dans une requête


select calcul à partir d’un ou plusieurs attri- Pour “calculer” l’attribut, on utilisera l’opérateur de
buts, autre(s) attribut(s) concaténation &, ou d’autres fonctions:
as nom attribut calculé - numériques (Sum(), Avg()...),
from table - de date (Year(), Month()...),
- ou de texte (Left(), Right()...).
La clause as est suivie du nom de l’attribut (cet at-
tribut n’est créé que dans le cadre de la requête).

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

1.5 Sélection avec critères


select liste d’attributs from table La clause where est suivie de la (des) condition(s)
where condition appliquée(s) à un ou plusieurs attributs et permet de
filtrer les enregistrements.
Les conditions peuvent porter sur des attributs ne
figurant pas dans la liste d’attributs sélectionnés dans
la requête.

Les conditions peuvent être spécifiées à l’aide :


– des opérateurs de comparaison : = , > , < , <= , >= , <> ;
– des opérateurs logiques : AND, OR, NOT ;
– des opérateurs IN, BETWEEN, LIKE, IS, ALL ;
– de fonctions numériques, financières, statistiques, de dates, de texte, etc.

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

1.6 Sélection avec regroupement


select attribut1, fonction agrégat(attribut2) La clause group by regroupe les enregistrements
as nom attribut agrégé d’après l’attribut1, en agrégeant la donnée de l’attri-
from table but2 (somme, moyenne, compte, etc).
group by attribut1 L’opération crée une variable agrégée. Son nom est
défini après as.

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

On peut introduire une ou plusieurs conditions :


– avant le regroupement avec la clause WHERE,
– après le regroupement avec la clause HAVING.
Analyser les données - Le langage SQL - Master 2 C.G.A.O. - A. Olivier 5

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

espece CA total categorie CA max


Cèpe 2082,00 Conserve 1385,00
Girolle 1659,00 Sec 1401,00

La condition s’applique après le regroupement.


La condition s’applique ici avant le regroupe- Il n’y a donc pas les mêmes lignes que dans le ta-
ment, avec where. Les lignes du tableau sont donc bleau de l’exemple 12 : seules celles répondant à la
identiques à celles de l’exemple 11. Seuls les mon- condition (> 1200) sont conservées.
tants changent. On utiliser dans ce cas la clause having.

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

1.8 L’analyse croisée


La requête analyse croisée transforme une feuille de données en colonnes en tableau croisé.

transform fonction agrégat(attribut3) 3 attributs sont nécessaires pour un tableau croisé :


as nom attribut agrégé un en ligne (attribut1 ), un en colonne (attribut2 ) et
select attribut1 une donnée numérique dans le corps du tableau (at-
from table tribut3 ).
group by attribut1 La clause transform bascule l’attribut numérique
pivot attribut 2 en donnée agrégée.
La clause group by définit l’attribut en ligne.
La clause pivot spécifie l’attribut en colonne.

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

transform Sum(CA) as TotalCA


select espece
from resultats
group by espece
pivot categorie Analyse croisée pour la table Résultats

2 Les requêtes action


Les requêtes vues dans la première partie entraı̂nent la création de feuilles de données créées exclusi-
vement dans le cadre de la requête. Elles ne modifient PAS les tables sources.

Il en va tout autrement des requêtes appelées requêtes action, que sont :


– les requêtes création de table,
– les requêtes ajout permettant d’ajouter des éléments à une table,
– les requêtes mise-à-jour pour actualiser la valeur d’un ou plusieurs attributs dans une table,
– et les requêtes suppression pour supprimer un ou plusieurs enregistrements.

2.1 Création de table


select liste d’attributs into NouvelleTable Cette syntaxe simple permet de créér une table en
from table rapatriant un ensemble d’attributs issus d’une autre
table.
La clause into définit le nom de cette nouvelle table.
On peut bien sûr ajouter une clause where ou
d’autres fonctionnalités vues dans la partie 1.

Exemple 18 -

Création d’une table nommée Table simplifiée, à


partir de la même projection que dans l’exemple 2.

select espece, categorie into [Table simplifiée]

from Champignons Table simplifiée

Exemple 19 -

Création d’une table sans doublons, nommée


Liste produits, à partir de l’exemple 7, à laquelle
nous ajouterons un tri.
select distinct espece & (( - )) & categorie Liste produits
as [nom produit] into [liste produits]
from Champignons
order by espece & (( - )) & categorie
Analyser les données - Le langage SQL - Master 2 C.G.A.O. - A. Olivier 7

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).

insert into Fournisseurs


select nom, espece
Table Nouveaux fournisseurs from [Nouveaux fournisseurs]

2.3 Mise à jour


update table La clause update met à jour la valeur d’un attribut
set attribut1 = calcul sur attribut1 pour tous les enregistrements d’une table.
set est suivi d’une expression donnant le résultat de
cette mise à jour (à l’aide des opérateurs ou fonc-
tions).

Exemple 22 -

Faire une copie de la table Résultats.

A l’aide d’une requête SQL, mettre à jour les CA


de cette table en appliquant une hausse de 20%.

update Resultats2 set CA = [CA]*1.2 Résultats 2 mis à jour (extrait)

Exemple 23 -

Nous souhaitons que les noms des fournis-


seurs apparaissent en majuscules dans la table
Fournisseurs.
A l’aide d’une requête SQL, mettre à jour les
enregistrements de cette table.
update Fournisseurs set nom = Ucase([nom]) Fournisseurs mis à jour
Analyser les données - Le langage SQL - Master 2 C.G.A.O. - A. Olivier 8

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 -

Supprimer les produits appartenant à l’espèce


Morille dans la table Champignons.
delete *
from Champignons
where espece = “Morille” Table Champignons actualisée

Exemple 25 -

Supprimer tous les enregistrements de la table


Liste produits.
delete *
from [Liste produits] Table Liste produits

3 Requêtes avec plusieurs tables

3.1 Les jointures


La plupart des fonctionnalités présentées jusqu’à ce point ne concernaient qu’une seule table. Elle
peuvent également s’appliquer à deux ou plusieurs tables.
Comment spécifier, en SQL, une jointure entre deux tables ?
C’est ce que nous allons voir maintenant.

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 -

Afficher la liste non redondante des fournisseurs


et les catégories de produits qui leurs sont associées.
select distinct nom, categorie
from champignons, fournisseurs
where champignons.espece=fournisseurs.espece

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.

Nous partirons de trois tables présentant le même schéma :


– faire des copies de la table Champignons (la table Magasin1 est identique),
– changer le nom des attributs pour Magasin3,
– modifier les données des tables Magasin2 et Magasin3.

Magasin1 Magasin2 Magasin3

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 -

Les attributs de Magasin1 et de Magasin2 sont


classés dans le même ordre et ont le même nom. (( * ))
est suffisant pour sélectionner tous les attributs.

select * from Magasin1


union
select * from Magasin2

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.

select espece, categorie, conditionnement from Magasin1


union
select variete, type, presentation from Magasin3

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.

select espece as Colonne1, categorie as


Colonne2, conditionnement as Colonne3
from Magasin1
where espece=“Girolle”
union
select * from Magasin2 ;
where espece=“Girolle”

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.

select distinct table1.attribut1, L’intersection ne concerne ici que deux attributs


table1.attribut2 (même si les tables en possèdent plus de deux et si
from table1, table2 elles n’en possèdent pas le même nombre), ceux-ci
where table1.attribut1=table2.attribut1 devant être égaux deux-à-deux.
and table1.attribut2=table2.attribut2
Analyser les données - Le langage SQL - Master 2 C.G.A.O. - A. Olivier 11

Exemple 27 - (pour les tables Magasin1 et Magasin2 )

select distinct Magasin1.*


from Magasin1, Magasin2
where Magasin1.espece=Magasin2.espece
and Magasin1.categorie=Magasin2.categorie
and Magasin1.conditionnement=Magasin2.conditionnement

Exemple 28 - (pour trouver les couples espece, categorie communs aux tables Magasin2 et Resultats)

select distinct magasin2.espece,


magasin2.categorie
from magasin2, resultats
where magasin2.espece=resultats.espece
and magasin2.categorie=resultats.categorie

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

3.4 Produit cartésien


En théorie des ensembles, le produit cartsien de deux ensembles X et Y est l’ensemble de tous les
couples dont la première composante appartient à X et la seconde à Y.
Le produit cartésien de deux tables sera l’ensemble de toutes les combinaisons possibles des occurences
de ces tables.

Soient les deux tables simples suivantes :

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 -

Le produit cartésien ci-contre regroupe tous les


couples possibles des deux tables espece et categorie.
La clause order by permet de retrouver la struc-
ture de la table Résultats (hors CA).

select *
from espece, categorie
order by nom

Vous aimerez peut-être aussi