Documente Academic
Documente Profesional
Documente Cultură
Les langages
d'interrogation
Version: 9.2011
manuel labor par
Jean-Marie Ottel, LTECG
e-mail : jean-marie.ottele@education.lu
4
3
2
1
ZORRO
3
Nom: SCHMIT
Ville: Luxembourg
SCHMIT
1
Nom: DUPONT
Ville: Luxembourg
MULLER
DUPONT
PERSONNES
PERSONNES
Il existe 2 langages d'interrogation (e : query language) standard pour les SGBD relationnels :
SQL
QBE
Champ/Field
Table/Table
Tri/Sort
Afficher/Show
Critre/Criteria
Ces 2 langages relationnels ont en commun d'tre non-procduraux, c.--d. l'utilisateur indique uniquement le
rsultat qui l'intresse sans prciser comment procder pour y parvenir.
SQL et QBE peuvent cependant possder quelques particularits selon le SGBD utilis.
Sources :
- page 2 -
jmo 9.2011
Syntaxe SQL
Tableau des commandes:
SQL interactif
LDD
LMD
LCD
CREATE
DROP
ALTER
INSERT
DELETE
UPDATE
SELECT
GRANT
REVOKE
CONNECT
COMMIT
ROLLBACK
SET
SQL intgr
SQL dynamique
DECLARE
CURSOR
FETCH
PREPARE
DESCRIBE
EXECUTE
LDD:
LMD:
LCD:
- page 3 -
jmo 9.2011
Table : client
numcli
nom
adresse
localit
datenaiss
mari nbrenfants
Schmit
Mersch
20.04.77
oui
Duront
Luxembourg
non
Dupont
33 Rue de lAlzette
Mersch
30.12.78
oui
Muller
6 Rue de Schouweiler
Hautcharage
11.11.79
oui
Zorro
32 Rue Adolphe
Ptange
04.04.77
oui
Adam
Howald
05.04.77
non
Maier
10 Avenue de la Gare
Mersch
06.12.77
non
Schmit
Hautcharage
30.10.81
non
Schmit
7 Rue de la Gare
Mersch
20.05.64
oui
Crer la structure de la table en choisissant les types appropris. Entrer les donnes.
Nom champ
Type
- page 4 -
Longueur
jmo 9.2011
1. La projection
La projection permet de ne conserver que les champs (colonnes) intressants.
Exemple 1: Afficher le nom et la localit de tous les clients.
SQL
QBE
Champ/Field
Table/Table
Tri/Sort
Afficher/Show
Critre/Criteria
Rsultat de la requte :
SQL
QBE
Champ/Field
Table/Table
Tri/Sort
Afficher/Show
Critre/Criteria
Rsultat de la requte :
- page 5 -
jmo 9.2011
2. La slection
La slection permet de ne conserver que les enregistrements (lignes) respectant une condition vrifie.
Condition
ayant 2 enfants
ayant plus de 2 enfants
logique/boolen
tant maris
n'tant pas maris
date
ns le 5 avril 1977
ns avant le 5 avril 1977
Attention :
diffrent de ()
infrieur (<)
infrieur ou gal ()
......
......
......
SQL :
.
.
.
.
Rsultat de la requte :
- page 6 -
jmo 9.2011
Loprateur NOT
Loprateur NOT inverse la valeur dune condition.
Exemple 1: Afficher le nom et la localit des clients nhabitant pas Mersch (utiliser NOT).
SQL :
.
.
.
.
Rsultat de la requte :
.
.
.
.
Rsultat de la requte :
- page 7 -
jmo 9.2011
Loprateur AND
Loprateur AND permet de ne considrer les enregistrements vrifiant simultanment les deux conditions unies par
un ET logique.
.
.
.
.
Rsultat de la requte :
Exemple 2: Afficher le nom, la localit et le nombre denfants des clients ayant 1 2 enfants.
SQL :
.
.
.
.
Rsultat de la requte :
.
.
.
.
Rsultat de la requte :
Remarque :
- page 8 -
jmo 9.2011
Loprateur OR
Loprateur OR permet de considrer les enregistrements vrifiant une premire condition et/ou ceux dune
deuxime condition.
.
.
.
.
Rsultat de la requte :
.
.
.
Rsultat de la requte :
- page 9 -
jmo 9.2011
SQL
Exemple 1: Afficher le nom des clients qui nont pas donn des renseignements concernant leur date de naissance.
SQL :
.
.
.
Rsultat de la requte :
Exemple 2: Afficher le nom des clients qui ont donn des renseignements concernant leur date de naissance.
SQL :
.
.
.
Rsultat de la requte :
.
.
.
Exemple 4: Afficher le nom des clients qui nont pas donn des renseignements concernant le nombre denfants.
SQL :
.
.
.
- page 10 -
jmo 9.2011
SQL
?
_
*
%
Remarque:
Lorsqu'on veut utiliser le point d'interrogation (?) ou l'astrisque (*) dans sa fonction propre, alors
il faut utiliser: ...................................................
Quelle est la diffrence entre: WHERE nom = "Htel du Parc *" et WHERE nom LIKE "Htel du Parc *" ?
..
..
Exemple 1: Afficher les localits des clients habitant dans une localit commenant avec H .
SQL
..
..
..
..
Rsultat de la requte :
- page 11 -
jmo 9.2011
Exemple 2: Afficher tous les clients habitant dans une localit contenant la lettre h .
SQL :
.
.
.
Rsultat de la requte :
.
.
.
Rsultat de la requte :
.
.
.
Rsultat de la requte :
.
.
.
Rsultat de la requte :
- page 12 -
jmo 9.2011
.
.
.
Rsultat de la requte :
Exemple 7: Afficher le nom des clients ayant leur adresse dans un boulevard.
SQL :
.
.
.
Rsultat de la requte :
Exemple 8: Afficher toutes les donnes des clients habitant dans une localit contenant 2 fois la lettre h .
SQL :
.
.
.
Rsultat de la requte :
Exemple 9: Afficher le nom de tous les clients ayant dans leur nom 1 ou plusieurs caractres prcdant la premire
lettre a .
SQL :
.
.
.
Rsultat de la requte :
Exemple 10: Afficher les localits de tous les clients habitant dans une localit comportant uniquement un h .
SQL :
.
.
.
Rsultat de la requte :
- page 13 -
jmo 9.2011
.
.
.
Rsultat de la requte :
Exemple 2 : Afficher le nom et le nombre denfants des clients nayant pas 1 3 enfants.
SQL :
.
.
.
Rsultat de la requte :
Exemple 3: Afficher le nom et la date de naissance des clients ns entre le 12.2.77 et le 31.12.79.
SQL :
.
.
.
Rsultat de la requte :
Exemple 4 : Afficher le nom et la date de naissance des clients ns entre le 12.2.77 et le 31.12.79 (sans BETWEEN).
SQL :
.
.
.
- page 14 -
jmo 9.2011
Exemple 1 : Afficher le nom et le nombre denfants des clients ayant 0, 2 ou 4 enfants. (avec IN)
SQL :
.
.
.
.
.
.
Rsultat de la requte :
Remarque :
Exemple 2: Afficher le nom et la localit des clients habitant Howald, Mersch ou Ptange.
SQL :
.
.
.
Rsultat de la requte :
Exemple 3: Afficher le nom et la localit des clients nhabitant pas Howald, Mersch ou Ptange.
SQL :
.
.
.
Rsultat de la requte :
- page 15 -
jmo 9.2011
Exemple 1:
SQL :
arithmtiques
()
Exposant
* /
+ -
logiques
()
NOT
AND
OR
.
.
.
ou
.
ou
.
ou
.
Rsultat de la requte :
Exemple 2:
SQL :
Montrer le numro, le nom et la localit des clients habitant soit Mersch, soit Hautcharage, mais
qui sont tous clibataires.
.
.
.
ou
SQL :
.
.
.
Rsultat de la requte :
- page 16 -
jmo 9.2011
Exemple 3:
SQL :
.
.
.
ou
SQL :
.
.
.
.
Rsultat de la requte :
Exemple 4:
SQL :
Montrer le nom, la localit, le nombre denfants et ltat civil des clients habitant Mersch ou ayant
2 enfants, et qui sont tous clibataires.
.
.
.
.
Rsultat de la requte :
- page 17 -
jmo 9.2011
SQL
Exemple 1: Afficher la liste de toutes les localits, en numrant chaque localit quune seule fois.
SQL
..
..
Rsultat de la requte :
Exemple 2: Afficher le nom et la localit des clients en numrant chaque nom et localit quune seule fois
SQL
..
..
Rsultat de la requte :
Exemple 3: Afficher le nom des clients en numrant chaque nom quune seule fois
SQL
..
..
Rsultat de la requte :
SELECT nom
SELECT DISTINCT nom
SELECT nom, localit
SELECT DISTINCT nom, localit
SELECT DISTINCT nom, localit, datenaiss
SELECT DISTINCT numcli, nom
- page 18 -
jmo 9.2011
7. Le tri / le classement
Le tri permet de classer les enregistrements du rsultat dune requte dans un ordre alphabtique, numrique ou
chronologique.
Lordre de tri
Lordre de tri correspond la manire dont on souhaite organiser les donnes. On peut trier une table en ordre
croissant (e: ascending) ou dcroissant (e: descending). Le tri se fait par dfaut par ordre croissant.
Si on utilise un ordre croissant, le texte est class de A Z, les nombres sont classs de 0 9 et les
dates de la plus ancienne la plus rcente.
SQL
.........................................................................................
.........................................................................................
Si on utilise par contre un ordre dcroissant, le texte est class de Z A, les nombres sont classs
de 9 0 et les dates de la plus rcente la plus ancienne.
SQL
.........................................................................................
.........................................................................................
Remarques :
Dans un systme de gestion de base de donnes relationnel, les enregistrements nont pas dordre particulier dans
une table !
Ce nest que par des commandes de tri que les enregistrements sont visualiss selon un critre de tri spcifi. On
peut utiliser plusieurs critres de tri pour sortir les enregistrements dans un ordre bien prcis.
Le rsultat du tri peut varier selon le type (texte, numrique, date) du champ tri.
Un annuaire tlphonique est tri sur quels critres ?
- page 19 -
jmo 9.2011
Exemple 1: Afficher le nom et la localit de tous les clients, ayant au moins un enfant, tris selon lordre croissant
des localits.
SQL :
.
.
.
.
Rsultat de la requte :
Exemple 2: Afficher les adresses tries de manire croissante de tous les clients.
SQL :
.
.
.
.
Rsultat de la requte :
Remarque
Exemple 3: Afficher la localit, le nom et le nombre denfants de tous les clients tris selon lordre dcroissant des
localits, croissant des noms et dcroissant des adresses.
SQL :
.
.
.
.
Rsultat de la requte :
- page 20 -
jmo 9.2011
8. L'qui-jointure
L'qui-jointure permet de fusionner les enregistrements de 2 tables possdant un domaine commun.
SQL
Table : client
numcli nom
adresse
localit
Table : commande
numcom date
numcli
Schmit
Mersch
2.1.2010
Duront
Luxembourg
2.1.2010
Dupont
33 Rue de lAlzette
Mersch
5.1.2010
Muller
6 Rue de Schouweiler
Hautcharage
3.1.2010
Zorro
32 Rue Adolphe
Ptange
Adam
Howald
Dessinez le MLD.
adresse
localit
Table : commande
numcom date
Schmit
Mersch
2.1.1998 2
Duront
Luxembourg
2.1.1998 3
Dupont
33 Rue de lAlzette
Mersch
5.1.1998 2
Muller
6 Rue de Schouweiler
Hautcharage
3.1.1998 4
Zorro
32 Rue Adolphe
Ptange
Adam
Howald
numcli
.
.
.
Rsultat de la requte :
numcom
date
Commande.
numcli
Client.
numcli
nom
adresse
localit
1
2
3
4
2.1.1998
2.1.1998
5.1.1998
3.1.1998
2
3
2
4
2
3
2
4
Duront
Dupont
Duront
Muller
Luxembourg
Mersch
Luxembourg
Hautcharage
- page 21 -
jmo 9.2011
Exemple 2: Afficher derrire chaque numro de commande le nom et le numro du client correspondant.
SQL
..
..
..
..
Rsultat de la requte :
Exercice :
table: commande
numcom
date
table: comprendre
numcom
numpro
quantit
1
2
3
4
1
1
2
2
2
2
2
1
4
3
1
3
15.2.2007
16.2.2007
17.2.2007
18.2.2007
1.
2.
3.
1
3
2
1
6
5
table produit
numpro nom
prix
1
2
3
4
5
6
7
3
4
1
5
6
7
2
Ajax
Bjax
Cjax
Djax
Ejax
Fjax
Gjax
Combien de lignes est-ce quon obtient aprs lqui-jointure entre les tables commande et comprendre ?
Combien de lignes est-ce quon obtient aprs lqui-jointure entre les tables comprendre et produits ?
Combien de lignes est-ce quon obtient aprs lqui-jointure entre les tables commande, comprendre et
produits ?
9. LALIAS
Un ALIAS est un nom synonyme ou un nom de remplacement dune expression, dun champ ou dune table.
Lutilisation dun ALIAS peut avoir plusieurs intrts:
employer une abrviation du nom dune table, dun champ1) ou dune expression1), ce qui simplifie le travail avec
de longs noms
employer un nom pour une expression, ce qui rend le rsultat de la requte plus significatif
une requte comportant un critre portant sur la valeur dun champ par rapport la valeur de ce mme champ
dans un autre enregistrement de la mme table: lauto-jointure
SQL
jmo 9.2011
nom
Schmit
Muller
Feller
Maurer
Popov
Thill
Schmitz
Meier
prnom
Isabelle
Carine
Pierre
Lea
Alex
Paul
Charlotte
Lynn
num_personnel_chef
7
6
5
3
3
5
6
d) Montrer la liste des noms et prnoms de tout employ ensemble avec le nom et prnom de son chef respectif.
SQL :
.
.
.
Rsultat de la requte :
- page 23 -
jmo 9.2011
Exemple 2: Afficher pour toutes les routes dune longueur suprieure 20 km : le numro de la route, le nom de la
localit de dpart et le nom de la localit darrive.
SQL :
.
.
.
.
.
- page 24 -
jmo 9.2011
Exemple 3: Afficher le nom des lves avec le nom de sa classe actuelle et prcdente.
Elve
No_Eleve
Nom
NoClassePrcdente
NoClasseActuelle
Classe
NoClasse
Nom
SQL :
.
.
.
.
.
- page 25 -
jmo 9.2011
Fonction
Exemple
Rsultat
.
.
.
Rsultat de la requte :
- page 26 -
jmo 9.2011
.
.
.
Rsultat de la requte :
.
.
.
Rsultat de la requte :
.
.
.
Rsultat de la requte :
- page 27 -
jmo 9.2011
Exercice 1 : Pour la fte de Saint Nicolas, tout client reoit un bon de 80,50 par enfant. Afficher le nom des clients
ainsi que le montant de chaque bon.
SQL :
.
.
.
Rsultat de la requte :
Exercice 2 : Afficher le nom et lge des clients en jours en utilisant la fonction ...................... pour connatre la date
courante.
SQL :
.
.
.
Rsultat de la requte :
Exercice 3 : Afficher le nom et lge des clients en annes.
SQL :
.
.
.
Rsultat de la requte :
Exercice 4 : Afficher les numros des commandes passes il y a deux semaines et plus.
SQL :
.
.
.
Rsultat de la requte :
- page 28 -
jmo 9.2011
.
.
.
Rsultat de la requte :
Exercice 2 : Afficher le nombre total denfants des clients.
SQL :
.
.
.
Rsultat de la requte :
Exercice 3 : Afficher le nombre denfants le plus lev des clients.
SQL :
.
.
.
Rsultat de la requte :
Exercice 4 : Afficher le nombre de clients.
SQL :
.
.
.
Rsultat de la requte :
- page 29 -
jmo 9.2011
.
.
.
.
Rsultat de la requte :
Exercice 2 : Calculer la moyenne de nombre denfants par anne de naissance des clients. Afficher les annes de
naissance, ainsi que les moyennes. Trier les annes de manire dcroissante.
SQL :
.
.
.
.
Rsultat de la requte :
Exercice 3 : Calculer lge moyen (en annes) des clients en fonction du nombre denfants. Afficher le nombre
denfants, ainsi que lge.
SQL :
.
.
.
Rsultat de la requte :
Exercice 4 : Calculer le nombre total denfants par anne de naissance des clients.
SQL :
.
.
.
- page 30 -
jmo 9.2011
Rsultat de la requte :
Exercice 5 : Compter le nombre de commandes par clients. Afficher le numro des clients, ainsi que le nombre de
commandes.
SQL :
.
.
.
Exercice 6 : Compter le nombre de commandes par clients. Afficher le numro et le nom des clients, ainsi que le
nombre de commandes.
SQL :
.
.
.
.
.
.
.
Rsultat de la requte :
Exercice 2 : Afficher les localits dans lesquelles la moyenne de nombre denfants par client est infrieure ou gale
2.
SQL :
.
.
.
.
Rsultat de la requte :
- page 31 -
jmo 9.2011
Exercice 1 Afficher le nom et la date de naissance de tous les clients tant plus gs que le client N4.
SQL :
.
.
.
.
.
.
Rsultat de la requte :
Exercice 2 : Refaire exercice 1 en affichant aprs les donnes de chaque client en plus le nom et la date de naissance
du client N4.
SQL :
.
.
.
.
.
.
Rsultat de la requte :
- page 32 -
jmo 9.2011
Exercice 3 : Afficher les noms des clients qui ont plus denfants que la moyenne.
SQL :
.
.
.
.
.
.
Rsultat de la requte :
Exercice 4 : Afficher les noms des clients qui ont plus denfants que Zorro.
SQL :
.
.
.
.
.
.
Rsultat de la requte :
Exercice 5 : Afficher les noms des clients qui ont plus denfants que Schmit.
SQL :
.
.
.
.
.
.
Rsultat de la requte :
Remarque :
- page 33 -
jmo 9.2011
Table : commande
numcom date
numcli nom
1
Schmit
adresse
9 Rue G-D Charlotte
localit
Mersch
2.1.2010 2
Duront
Luxembourg
2.1.2010 3
Dupont
33 Rue de lAlzette
Mersch
5.1.2010 2
Muller
6 Rue de Schouweiler
Hautcharage
3.1.2010 4
Zorro
32 Rue Adolphe
Ptange
Adam
Howald
Maier
10 Avenue de la Gare
Mersch
Schmit
Hautcharage
Schmit
7 Rue de la Gare
Mersch
numcli
Exercice 1 : Afficher le nom et la localit des clients habitant dans une localit o habite au moins un client dont le
nom commence par S
SQL :
.
.
.
.
.
.
Rsultat de la requte :
Exercice 2 : Donner le nom des clients qui n'ont pas encore pass de commande.
SQL :
.
.
.
.
.
.
Rsultat de la requte :
- page 34 -
jmo 9.2011
SQL
Remarque : Ceci nest pas implment dans les versions actuelles dACCESS, mais dans BASE.
.
.
.
Rsultat de la requte :
SQL :
Afficher le nom et ladresse des clients dune localit dont la localit reste spcifier lors de
lexcution de la requte.
.
.
.
Exercice 2:
SQL :
Afficher le nom et le nombre denfants des clients dont le nombre denfants se situe entre 2 valeurs
entres par clavier.
.
.
.
- page 35 -
jmo 9.2011
pr_cli
prnom
pr_cli AS prnom
Ajouter le nom de la table devant le nom du champ lorsque le nom dun champ intervient dans 2 tables utilises.
p. ex. client.nom, fournisseur.nom
FROM
FROM < toutes les tables utilises>
Utiliser un alias lors de lutilisation dune auto-jointure ou dune relation double.
WHERE
WHERE <quijointure(s)> et <condition(s) sur champs>
Les champs / expressions des 2 cts des oprateurs de comparaisons (=, <>, <, <=, >, >=) doivent tre du
mme type (numrique, texte, date, logique, etc.).
GROUP BY
SELECT <champ(s)> + <fonction(s) de groupe>
GROUP BY <champ(s)>
HAVING
SELECT <champs> + <fonction(s) de groupe>
GROUP BY <champs>
HAVING <condition(s) sur fonction(s) de groupe>
Les champs / expressions des 2 cts des oprateurs de comparaisons (=, <>, <, <=, >, >=) sont de type
numrique.
p.ex.
SELECT
HAVING
COUNT(*)>10;
ou
HAVING nombre>10;
ORDER BY
- page 36 -
jmo 9.2011
date_fact
1.4.98
3.4.98
2.4.98
2.4.98
et GROUP
date_fact
1.4.98
2.4.98
2.4.98
3.4.98
SELECT *
FROM facture
ORDER BY num_cli;
num_fact
1
4
2
3
BY
BY
num_cli
1
2
3
1
num_cli
1
2
3
nombre
2
1
1
GROUP BY = regroupement
Requte imbrique
Fonctions de groupe
COUNT()
num_fact
1
2
3
4
date
1.4.98
2.4.98
2.4.98
SELECT COUNT(*)
FROM facture;
Rsultat:
num_cli
1
2
3
1
SELECT COUNT(num_fact)
FROM facture;
Rsultat:
SELECT COUNT(date)
FROM facture;
Rsultat:
- page 37 -
jmo 9.2011
table: comprendre
numcom
numpro
quantit
table : produit
numpro nom
prix unitaire
1
2
3
4
1
1
2
2
2
3
2
1
4
3
1
3
1
2
3
4
5
6
3
4
1
5
6
7
15.2.2004
16.2.2004
17.2.2004
18.2.2004
1
3
2
1
6
5
Ajax
Bjax
Cjax
Djax
Ejax
Fjax
1) Soulignez les cls des tables ci-dessus. Remplissez les tableaux et formulez les requtes en SQL suivantes:
quantit
prix unitaire
- page 38 -
jmo 9.2011
- page 39 -
jmo 9.2011
8) Afficher le numro et la date des commandes pour lesquelles on na pas encore commandes des produits.
numro commande
date
- page 40 -
jmo 9.2011
Exercice B
Afficher pour tout travail qui est actuellement encore en cours, le libell du travail, la date de dbut du
travail, ainsi que la localit o ce travail est effectu. (5 points)
b)
c)
Calculer les dpenses totales par immeuble pour les travaux termins en 1997. (4 points)
d)
Afficher le libell des types de travaux ayant cot en total plus de 100.000 (5 points)
e)
Afficher le nombre dhabitations par propritaire. Trier de manire dcroissante sur le nombre dhabitations
et en suite de manire croissante sur le nom. (5 points)
codeprop
nom
nombre
11
Dos Santos
10
7
Miller
4
5
Schmitz
2
f)
Afficher le type dhabitation de tous les clibataires dont le nom commence par C ou D (4 points)
- page 41 -
jmo 9.2011
Exercice C
2.
3.
4.
Calculer pour chaque produit la quantit totale commande. Afficher le code et le nom du produit, ainsi que le
total.
5.
6.
7.
Afficher le numro de commande, la date de la commande et le montant total pour chaque commande.
8.
Afficher le nom des clients (soc_cli) avec leur montant total respectif.
9.
Afficher le nom des clients (soc_cli) avec un montant total suprieur 100.000
- page 42 -
jmo 9.2011