Intro :

Les opérateurs de requêtes se classent en trois catégories :

 

- Les opérateurs relationnels (« algèbre relationnel ») qui font l’objet de ce chapitre

- Les opérateurs ensemblistes (issus de la théorie des ensembles)(pas d’étude théorique)

- Les opérateurs de calcul

 

Tous les exemples et exercices figurant sur ce document sont à exécuter avec la base de données « GESNOTES.MDB »

 

Schéma relationnel du domaine « Gestion des notes » (Cf chap 4)

 

EPREUVE(Codeépreuve, Désignépreuve, coeff)

ZONE(CodeZone, libelléZone)

CANDIDAT(Num candidat, Non candidat, #CodeEtab)

ETABLISSEMENT(Codeétab, Nométab, #CodeZone)

NOTATION(#Codeépreuve+#NumCandidat, note)

 

Les opérateurs relationnels sont au nombre de trois :

- la projection

- la sélection

- la jointure

 

I.                   La projection

Elle consiste à choisir un ou plusieurs champs (attributs = colonnes) et d’afficher toutes les enregistrements.

Notation en langage algébrique :

R2=PROJECTION(R1, attribut 1, attribut 2,…)

R1

 

Attribut1

Attribut2

Attribut3

Attribut4

….

 

 

Enregistrement1

 

 

 

 

 

 

 

Enregistrement2

 

 

 

 

 

 

 

Enregistrement3

 

 

 

 

 

 

 

Enregistrement4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


Par tableau :

 

RELATION (source de la requête)

OPERATEURS

CONDITION

RELATION

RESULTAT

R1

Projection

          …………

R2(attribut 1, attribut 2)

 

Remarques : Lorsqu’un nom de champ comporte des espaces, il faut le mettre

 
En SQL :

SELECT [Attribut 1], [Attribut 2]

FROM R1 ;

 

 

Application 1 :

On souhaite afficher le nom et les coefficients des épreuves d’examen

Résultat à obtenir :

Désign épreuve

Coeff

Philosophie

1

Français

3

Mathématiques

3

Histoire Géo

1

LV1

2

Economie Droit

8

Comptabilité

8

 

Par tableau :

 

RELATION

OPERATEURS

CONDITION

RELATION

RESULTAT

EPREUVE

Projection

 

R1(Désignépreuve,coeff)

 

 

- En QBE (A faire avec  ACCESS) : le nom de la requête sera R1

 

 

- En SQL : Pour créer une requête en langage SQL dans Access, après avoir ouvert une requête vierge en mode création, cliquez sur le menu Affichage – Mode SQL. Vous pouvez alors saisir la requête. ATTENTION : si le nom du champ comporte un espace il faut le mettre entre [ ]

SELECT Désignépreuve, Coeff

FROM EPREUVE

 

 

 

Enregistrez la requête SQL sous le nom R1SQL

 

 

Application 2 : On souhaite obtenir le numéro des candidats ayant passé les épreuves 

Problème : Si on utilise la même syntaxe que précédemment, Access va afficher plusieurs fois le même numéro de candidat. Pour n’avoir qu’une seule fois les codes produits, on doit utiliser ici une clause SQL supplémentaire : DISTINCT

Par tableau

RELATION

OPERATEURS

CONDITION

RELATION

RESULTAT

NOTATION

PROJECTION DISTINCT

 

R2(NumCandidat)

 

 

En QBE : Créez la requête dans ACCESS.

Affichez la fenêtre « Propriétés de la requête » et paramétrez la propriété « Valeurs Distinctes » à Oui. Enregistrez la requête sous le nom R2

 

- En SQL :

SELECT DISTINCT  NumCandidat

FROM NOTATION

 

Créez dans ACCESS une nouvelle requête en saisissant le code SQL ci-dessus. Vous enregistrerez la requête sous le nom R2SQL

 

 

II.                La sélection

Elle consiste à choisir les lignes qui répondent à une certaine condition (critère)

- Notation en langage algébrique : R2=SELECTION(R1, critère)

 

- Formulation par tableau :

RELATION

OPERATEURS

CONDITION

RELATION

RESULTAT

R2

SELECTION

critère

R2(

 

 

- En langage SQL :

SELECT *

FROM R1

WHERE critère

 

Le critère se pose par rapport à un champ et utilise des opérateurs de comparaison :

Opérateur de comparaison

En Français (QBE)

En anglais (SQL)

Exemple

>, <, <=, >=, =

>, <, <=, >=, =

Codeart>5

Moyeleve>Moyclasse (comparaison entre 2 champs)

Entre … Et …

Between … And …

PUHT Entre 60 Et 100

(fixe un intervalle de valeur)

Revient à :

PUHT>=60 ET PUHT<=100

Comme

LIKE

Nomcli Comme ‘[A-C]*’

(Tous les clients dont le nom commence par les lettres A à C quelque soit le reste du nom)

Dans(valeur1, valeur2,…)

IN(valeur1,valeur2,…)

Codeclasse Dans (‘1CGO1’, ‘1CGO2’, ‘TSTT4’)

(toutes les lignes pour lesquelles CodeClasse est 1CGO1,

 

Combinaison de critères

 

Si une requête contient plusieurs critères, on utilise :

- le ET logique (pour « multiplier » les critères)

- le OU logique pour « ajouter » les critères

Légende encadrée 3: Pour combiner les critères avec un ET, les critères sont à mettre sur la même ligneDans Access :

 

Légende encadrée 3: Pour combiner les critères avec un OU, les critères sont à mettre sur différentes lignes

 

 

 

 

exemples de critères: soit la relation suivante :

ELEVE(CodeEleve, NomEleve,…, #CodeClasse, #optionobligatoire)

 

On veut obtenir la liste des élèves de SNDEA ayant choisi l’option IGC.

Formuler le critère à inclure dans la requête pour obtenir le résultat escompté.

CodeClasse= « SNDEA » ET optionobligatoire= « IGC »

 

Autre exemple : on veut la liste des élèves de SNDEA ou SNDEC qui ont choisi l’option SES

Formuler le critère à inclure dans la requête pour obtenir le résultat escompté.

(Codeclasse= « SNDEA ou Codeclasse= « SNDEC ») ET optionobligatoire= « SES »

 

 

 

 

APPL.ICATIONS sur la sélection (à partir du SLD relationnel du cas  « GESNOTES »

 

Application 3-1

 

On veut la liste des candidats provenant du lycée n° 230 (tous les champs)

Résultat à obtenir :

Nom Candidat

Code étab

FABER

230

CREATIX

230

           

 

Formulation de la requête par tableau

RELATION

OPERATEURS

CONDITION

RELATION

RESULTAT

CANDIDAT

SELECTION

PROJECTION

Codeétab=230

R31(NomCandidat)

 

 

En SQL

SELECT NomCandidat

FROM CANDIDAT

WHERE Codeétab=230;

 

 

Application 3-2 Combinaison de critères

 

On veut connaître le code des candidats ainsi que leur note ayant obtenu entre 8 et 14 à l’épreuve 6

Résultat à obtenir :

Num candidat

Code épreuve

Note

3

6

9

9

6

13

12

6

8

16

6

13

 

 

Formulation de la requête par tableau

RELATION

OPERATEURS

CONDITION

RELATION

RESULTAT

NOTATION

SELECTION

PROJECTION

Codeépreuve=6 et (Note entre 8 et 14)

R32(NumCandidat,note)

 

 

En SQL

SELECT NumCandidat, Note

FROM NOTATION

WHERE Codeépreuve=6 AND (Note BETWEEN 8 AND 14) ;

RMQ au lieu de note BETWEEN 8 AND 14 on peut metre : Note>=8 AND NOTE<=14

 

Remarque : généralement une sélection est immédiatement suivie d’une projection.

 

Application 3.3 Requête avec paramètre

 

Un paramètre de requête est une valeur saisie par l’utilisateur au moment où il exécute la requête. Le paramètre peut alors être utilisé comme critère dans une opération de sélection.

 

Exemple : On veut afficher le numéro et le nom des candidats provenant d’un lycée préalablement sélectionné

 

RELATION

OPERATEURS

CONDITION

RELATION

RESULTAT

CANDIDAT

SELECTION

PROJECTION

[Saisissez le code du lycée]

R33(NumCand, NomCand)

 

 

En SQL

SELECT NumCand, NomCand

FROM CANDIDAT

WHERE Codeétab=[Saisissez le code du lycée] ;

Pour définir un paramètre dans Access : Menu Requête – Paramètres…

Utilisation du paramètre dans la zone critère :

Légende encadrée 3: Le nom du paramètre se met entre crochet

 

Légende encadrée 3: Une boîte de dialogue invite l’utilisateur à saisir la valeur du paramètre
 


Lors de l’exécution de la requête :

 

 

 

Application 3-4 : Critère de tri dans une requête SQL

 

En SQL, le tri se traduit par la clause ORDER BY nomduchamp ASC/DESC ajoutée à la fin

Pour un tri croissant, l’instruction se termine par ASC (Ascending)(facultatif)

Pour un tri décroissant, l’instruction se termine par DESC (Descending)

 

Si plusieurs champs sont à trier, il faut les séparer par des virgules :

ORDER BY NomChamp1 ASC ou DESC, NomChamp2 ASC ou DESC…

 

On veut obtenir la liste  des codes élèves et des notes obtenues à l’épreuve d’économie (code épreuve = 6). Cette liste doit être classée de manière à établir un classement de la meilleure note à la moins bonne.

 

En SQL

SELECT *

FROM NOTATION

WHERE Codeépreuve=6

ORDER BY Note DESC

 

 

 

 

 

III.              La jointure

Elle consiste à créer une relation  R3 à partir de deux relations R1 et R2 ayant un attribut en commun. R3 Comportera les lignes pour lesquelles l’attribut commun a la même valeur.

 

FORMALISME : R3 = JOINTURE ( R1 , R2 , R1.attribut commun = R2.Attribut commun)

 

Exemple : on veut obtenir la liste des candidats (numéro, nom, code établissement) leur note et le code des épreuves qu’ils ont passées.

 

 

R34 = JOINTURE (CANDIDAT,NOTATION, CANDIDAT.NumCandidat=NOTATION.NumCandidat)

R34Bis=PROJECTION(R34,NumCand, NomCand,Codeétab, Note)

Par tableau :

RELATION

OPERATEURS

CONDITION

RELATION

RESULTAT

CANDIDAT, NOTATION

Jointure

Projection

Candidat.numCandidat=NOTATION.NumCandidat

R34(NumCand, NomCand,Codeétab, Note)

 

 

En SQL lorsque deux champs de même nom proviennent de deux tables, on doit indiquer le nom de la table devant le nom du champ

 
 


En SQL :

SELECT Candidat.NumCand, NomCand,Codeétab, Note

FROM CANDIDAT, NOTATION

WHERE Candidat.numCandidat=NOTATION.NumCandidat

 

Remarque : comme la sélection, la jointure est généralement suivie d’une projection

Reprise de l’exemple précédent :

 

Application 4 : On veut connaître le nom des candidats ayant passé une épreuve ainsi que le nom de leur établissement d’origine

Par tableau :

RELATION

OPERATEURS

CONDITION

RELATION

RESULTAT

CANDIDAT

NOTATION

 

Jointure

Projection

CANDIDAT.Numcandidat=NOTATION.NumCandidat

R35(NomCandidat, Codeéétab)

R35

ETABLISSEMENT

 

Jointure

Projection

R35.Codeétab=ETABLISSEMENT.Codeétab

R36(NomCandidat, Nométab)

Comme le champ notation.numcandidat fait partie d’un critère de jointure, la table NOTATION doit être incluse dans la clause FROM

 
En SQL :

SELECT NomCandidat, Nométab

FROM CANDIDAT, ETABLISSEMENT, NOTATION

WHERE CANDIDAT.Numcandidat=NOTATION.NumCandidat

AND CANDIDAT.Codeétab=ETABLISSEMENT.Codeétab


Application 5 Création d’un champ calculé

 

Rappel : les champs calculés ne sont pas repris dans les tables car ils peuvent être obtenus de manière dynamique dans les requêtes.

 

Un champ calculé se met entre crochet suivi de : et de la « formule de calcul »

 

Exemple : Dans la base de données « GESNOTES » on souhaiterait afficher le code élève, le code épreuve, la note, le coefficient et la note coefficientée (note * coeff)

 

TAF :

Formulez la requête par tableau puis en SQL

 

Par tableau

RELATION

OPERATEURS

CONDITION

RELATION

RESULTAT

EPREUVE

NOTATION

 

Jointure

Projection

EPREUVE.Codeépreuve=Notation.Codeépreuve

R37(Codeépreuve,Note,Coeff,NoteCoefficientée :[Note*[Coeff])

 

 

 

 

R38(

 

En SQL

SELECT EPREUVE.Codeépreuve, Note, Coeff, Note*Coeff AS NoteCoefficientée

FROM EPREUVE, NOTATION

WHERE EPREUVE.Codeépreuve=Notation.Codeépreuve ;