• Aucun résultat trouvé

Proposition de démarche

N/A
N/A
Protected

Academic year: 2022

Partager "Proposition de démarche "

Copied!
15
0
0

Texte intégral

(1)

De la demande formulée à la requête SQL

Proposition de démarche

pour la construction d’une requête

(2)

Démarche

Bien comprendre le modèle relationnel proposé

Rechercher la correspondance des mots de la phrase avec les noms de colonnes demandées

déterminer des calculs nécessaires

Rechercher les moyens d’obtenir ces colonnes : quel « chemin » cohérent en utilisant les liens entre les tables (clef étrangère -> clef primaire)

?

Écrire la requête SQL

(3)

Modèle de données

Coefficient (idCoef, salBase)

idCoef : PK

Salarie (idSal, nomSal, idCoef)

idSal : PK / idCoef : FK vers coefficient (idCoef)

Projet (idProj, titreProjet, idSalResp)

idProj : PK / idSalResp : FK vers salarie (idSal)

Tache (idTache, nomTache, idProj)

idTache : PK / idProj : FK vers projet (idProj)

Realiser (idSal, idTache, dateRealiser,nbheures)

idSal, idTache, dateExecuter : PK / idSal : FK vers salarie (idSal), idTache : FK vers tache

PK = Primary Key = clef primaire / FK = Foreign Key = clef étrangère

(4)

Modèle de données

Coefficient (idCoef, salBase)

Salarie (idSal, nomSal, idCoef)

Projet (idProj, titre, budg, datFin, idSalResp)

Tache (idTache, nomTache, idProj)

Realiser (idSal, idTache, dateRealiser, nbheures) (=)

(=) (=)

(=)

(=)

(5)

Question posée :

Lister les projets terminés dont le budget a été dépassé, classés du plus grand au plus petit dépassement

Compléments :

Lister : numéro, titre, budget et réalisé du projet

Un projet est terminé quand sa date de fin est renseignée

Le ‘réalisé’ d’un projet correspond aux heures

réalisées au coût horaire selon le coefficient

(6)

Quelles données ? Quel chemin ?

Coefficient (idCoef, salBase)

Salarie (idSal, nomSal, idCoef)

Projet (idProj, titre, budg, datFin, idSalResp)

Tache (idTache, nomTache, idProj)

Realiser (idSal, idTache, dateRealiser, nbheures) (=)

(=)

(=) (=)

NOT NULL

* SUM

<

-1-

-3- -2-

-4-

-

DESC

(7)

SQL, proposition de réponse

SELECT

P.idProj, titre, budget, SUM(nbHeures*salBase)

FROM

Projet P INNER JOIN Tache T ON P.idProj = T.idProj

INNER JOIN realiser R ON T.idTache = R.idTache

INNER JOIN salarie S ON R.idSal = S.idSal

INNER JOIN coefficient C ON S.idCoef = C.idCoef

WHERE

datFin IS NOT NULL

GROUP BY

P.idProj, titre, budget

HAVING

budget < SUM(nbHeures*salBase)

ORDER BY

(SUM(

nbHeures*salBase) – budget ) DESC

;

(8)

SQL, proposition de réponse avec alias de colonne

SELECT

P.idProj, titre, budget, SUM(nbHeures*salBase) AS realise

FROM

Projet P INNER JOIN Tache T ON P.idProj = T.idProj

INNER JOIN realiser R ON T.idTache = R.idTache

INNER JOIN salarie S ON R.idSal = S.idSal

INNER JOIN coefficient C ON S.idCoef = C.idCoef

WHERE

datFin IS NOT NULL

GROUP BY

P.idProj, titre, budget

HAVING

budget < realise

ORDER BY

(realise

– budget ) DESC

;

(9)

SQL, proposition de réponse

avec alias de colonne et USING

SELECT

idProj, titre, budget, SUM(nbHeures*salBase) AS realise

FROM

Projet INNER JOIN Tache USING (idProj)

INNER JOIN realiser USING (idTache)

INNER JOIN salarie USING (idSal)

INNER JOIN coefficient USING (idCoef)

WHERE

datFin IS NOT NULL

GROUP BY

idProj, titre, budget

HAVING

budget < realise

ORDER BY

(realise

– budget ) DESC

;

(10)

Question posée

1 - Lister les salariés (numéro et nom) responsables de projets; classer par

ordre alphabétique …

2 - … qui n’ont participé à la réalisation

d’aucune tâche

(11)

SQL, proposition de réponse 1

SELECT

idSal, nomSal

FROM

salarie

WHERE

idSal IN

(SELECT DISTINCT idSalResp FROM projet)

ORDER BY

nomSal ;

Ou bien :

SELECT

DISTINCT idSal, nomSal

FROM

Salarie INNER JOIN projet ON idSal = idSalResp

ORDER BY

nomSal ;

Responsables de projets

(12)

SQL, proposition de réponse 2

SELECT

idSal, nomSal

FROM

salarie

WHERE

idSal IN

(SELECT DISTINCT idSalResp FROM projet)

AND

NOT ( idSal IN

(SELECT DISTINCT idSal FROM realiser)

)

ORDER BY

nomSal

;

qui n’ont participé à la réalisation d’aucune

tâche

(13)

Question posée (plus difficile…)

Plusieurs salariés peuvent travailler sur la même tâche : lister les salariés qui ont travaillé en même temps que

‘Pierre’ pendant la période du 2 au 5

janvier 2005

(14)

SQL, proposition de réponse étape 1

dates auxquelles Pierre a travaillé pendant la période

SELECT

DISTINCT dateRealiser

FROM

realiser

WHERE

idSal =

(SELECT idSal FROM salarie WHERE nomsal = ‘Pierre’)

AND dateRealiser BETWEEN ’02/01/2005’ AND ’05/01/2005’ ;

(15)

SQL, proposition de réponse Etape 2

Les salariés qui ont travaillé en même temps que Pierre

SELECT

DISTINCT idSal, nomSal

FROM

salarie

WHERE

idSal IN

(SELECT DISTINCT idSal FROM realiser WHERE dateRealiser

IN

(

SELECT DISTINCT dateRealiser FROM realiser WHERE idSal

= (SELECT idSal FROM salarie WHERE nomsal = ‘Pierre’) AND dateRealiser BETWEEN ’02/01/2005’ AND ’05/01/2005’

)

)

AND idSal <> (SELECT idSal FROM salarie WHERE nomsal = ‘Pierre’) ;

Références

Documents relatifs

Certains dÈlais sont vide car les commandes en questions n'ont pas encore ÈtÈ livrÈes (valeur NULL).

The communication area of Tape Loader-Monitor C contains a four-character equipment configuration field in locations 151-154 (octal 227-232), which is used by Update

Simulez le fonctionnement en utilisant la premi` ere colonne de l’annexe 1. Notez a) le nombre de d´ efauts de pages (chargement d’une page de la m´ emoire virtuelle vers la m´

Simulez l’exécution de l’algorithme Driver LL(1) avec la table précédemment calculée sur la chaîne « select matricule from etudiants » où matricule et etudiants sont

l’efficacité des interventions n’est pas dé- montrée ne signifie pas qu’elles sont ineffi- caces. De plus, nos entretiens avec des ex- perts internationaux, canadiens et québécois

a) They must be carried out in a pre- hospital emergency service capable of guaranteeing to the MSSS that it will comply with high standards with respect to both staff training

ƒ There is currently not enough solid evi- dence to support the generalized intro- duction of an advanced-care program throughout Québec. ƒ Preliminary data show that advanced care

La lettre doit préciser l’objet de l’entretien (mais il n’est pas obligé d’indiquer les causes qui lui font envisager le licenciement : Cour de cassation, chambre sociale,