Vous êtes sur la page 1sur 11

Florilège

Une petite revisite complète des sujets de concours


Questionnement concernant Les BDD
Avertissement : ce florilège fait référence aux questions de sujets de concours. Il a pour objectif de revisiter les points
délicats mais aussi de rappeler la syntaxe SQL ainsi que des notions importantes.

Concours CCINP
Session 2015 : Robot Evolap - Suivi d’instrument chirurgical
Cette base de données est constituée de deux tables.
La table INSTRUMENTS contient les déférents types d’instruments avec les attributs :
– id : identifiant de type entier, clé primaire,
– name : nom de l’instrument de type texte,
– serialnumber : numéro de série du produit,
– purchasedate : date d’achat de l’instrument,
– autres attributs non détaillés ...
La table DEFINITIONS contient des entités qui correspondent à la définition d’un instrument pour une configuration
donnée (nommée motif). Elle contient les attributs :
– id : identifiant de type entier, clé primaire,
– mid : identifiant de l’instrument correspondant à la définition de type entier,
– height : hauteur en pixels du motif de type entier,
– width : largeur en pixels du motif de type entier,
– filename : nom du fichier image de type texte (stocké sur réseau) correspondant à ce motif. A un instrument peut
correspondre une ou plusieurs définitions.
Q3- Ecrire une requête SQL permettant de récupérer les noms de toutes les images qui correspondent à l’instrument
dont le nom est "pince".
SELECT filename
FROM DEFINITIONS JOIN INSTRUMENTS ON DEFINITIONS.mid=INSTRUMENTS.id
WHERE INSTRUMENTS.name="pince";
Session 2017 : Etude de la capacité et de la congestion de l’autoroute A7
La table STATIONS répertorie les stations de mesures, elle contient les attributs
– id station (clé primaire), entier identifiant chaque station,
– nom, chaîne de caractères désignant le nom de la station,
– nombre voies, entier donnant le nombre de voies de la section d’autoroute.
La table COMPTAGES répertorie les différents enregistrements de données réalisés au cours du temps par les stations
de comptage. Elle contient les attributs :
– id comptage, entier identifiant chaque comptage,
– id station, entier identifiant la station concernée,
– date, entier datant la mesure,
– voie, entier numérotant la voie sur laquelle a été effectuée la mesure,
– q_exp, flottant donnant le débit mesuré pendant 6 minutes,
– v_exp, flottant donnant la vitesse moyenne mesurée pendant 6 minutes.

Q1- L’étude se focalise uniquement sur les mesures de l’une des stations, la M8B. Ecrire une requête SQL qui renvoie
les données de comptage (id comptage, date, voie, q_exp, v_exp) mesurées à la station de comptage de nom M8B.

SELECT (id_comptage, date, voie, q_exp, v_exp)


FROM COMPTAGES JOIN STATIONS ON COMPTAGES.id_station=STATIONS.id_station
1
WHERE nom=’M8B’;

Le résultat de la requête précédente est stocké dans une nouvelle table COMPTAGES M8B à cinq colonnes (id
comptage, date, voie, q_exp, v_exp). On fait l’hypothèse que les mesures sur les différentes voies d’une même station
sont enregistrées de façon synchronisée. Lors d’un enregistrement pour une station à trois voies, on écrit donc trois
lignes dans la table COMPTAGES avec trois dates identiques. Pour chacun des enregistrements de la station M8B, trois
lignes avec trois dates identiques sont donc présentes dans la nouvelle table COMPTAGES M8B. Pour la suite de
l’étude,les résultats expérimentaux de chacune des trois voies doivent être agrégés pour se ramener à une voie
unique.
Q2- Ecrire une requête SQL qui renvoie, pour chaque date des données de COMPTAGES M8B, le débit correspondant
à la somme des débits de chaque voie.

SELECT date, SUM(q_exp)


FROM COMPTAGES_M8B
GROUP BY date;
Session 2018 : Système d’aide à l’arbitrage : le HawkEye
Ces données d’un tournoi sont stockées dans une base de données constituée de deux tables.
La table MATCHS contient les déférents matchs d’un tournoi avec les attributs :
- id : identifiant de type entier, clé primaire,
- nom : nom du match de type texte,
- numéro : numéro du match dans la planification du tournoi,
- date : date où le match s’est déroulé,
- joueur1 : nom du premier joueur,
- joueur2 : nom du deuxième joueur (les joueurs 1 et 2 sont rangés par ordre alphabétique);
- autres attributs non détaillés...
La table POINTS contient des entités correspondant aux points joués lors d’un match. Elle contient les attributs :
- id : identifiant de type entier, clé primaire,
- mid : identifiant du match correspondant à la définition de type entier,
- nombre : nombre d’échanges de type entier,
- fichier : nom du fichier image de la trajectoire (stockée) correspondant au point,
- autres attributs non détaillés...

Q19. Rappeler la définition et l’intérêt d’une clé primaire.


La « clé primaire » permet d’identifier chaque tuple (enregistrement, une ligne d’une table) de façon univoque. La
valeur de cet attribut est unique. Une clé primaire est simplement un choix de clé candidate. Elle renforce l'efficacité
des procédures d'interrogation de la table.
Indiquer au système une clé primaire pour chaque table permet une indexation des données à l'aide de cette clé.
Q20- Écrire une requête SQL permettant d’afficher les identifiants des matchs joués par Federer, joueur pris pour
exemple.

SELECT id
FROM MATCHS
WHERE joueur1="Federer" OR joueur2="Federer";

Q21- Écrire une requête SQL permettant d’afficher le nombre d’échanges maximum lors du match dont l’identifiant
du match est mid=4.

SELECT MAX(nombre)
FROM POINTS
WHERE mid="4";

Q22- Écrire une requête SQL permettant de récupérer le nom des fichiers de toutes les images qui correspondent au
match dont le nom est "Federer-Murray".
2
SELECT fichier
FROM POINTS JOIN MATCHS ON mid=MATCHS.id
WHERE nom="Federer-Murray";

Session 2019 : IntelligenceArtificielle-Applicationenmédecine

On considère deux tables : PATIENT et MEDICAL.


La table PATIENT contient les attributs suivants :
- id : identifiant d’un individu (entier), clé primaire,
- nom : nom du patient (chaîne de caractères),
- prénom : prénom du patient (chaîne de caractères),
- adresse : adresse du patient (chaîne de caractères),
- email : (chaîne de caractères),
- naissance : année de naissance (entier).
La table MEDICAL contient les attributs suivants :
- id : identifiant d’un ensemble de propriétés médicales (entier), clé primaire,
- data1 : donnée (flottant),
- data2 : donnée (flottant),
- ...;
- idpatient : identifiant du patient représenté par l’attribut id de la table PATIENT (entier),
- etat : description de l’état du patient (chaîne de caractères).

Q1 - Écrire une requête SQL permettant d’extraire les identifiants des patients ayant une « hernie discale ».
SELECT idpatient
FROM MEDICAL
WHERE etat= « herniediscale »

Q2- Écrire une requête SQL permettant d’extraire les noms et prénoms des patients atteints de « spondylolisthésis».
SELECT nom, prenom
FROM PATIENT JOIN MEDICAL ON PATIENT.id=MEDICAL.idpatient
WHERE MEDICAL.etat = « spondylolisthésis »

Q3- Écrire une requête SQL permettant d’extraire chaque état et le nombre de patients pour chaque état.
SELECT etat,COUNT(*)
FROM PATIENT JOIN MEDICAL ON PATIENT.id=MEDICAL.idpatient
GROUP BY etat
Mais aussi :
SELECT etat,COUNT(DISTINCT idpatient)
FROM MEDICAL
GROUP BY etat

3
Concours Centrale Supélec
Session 2015 : Autour de la dynamique gravitationnelle
La table CORPS répertorie les corps étudiés, elle contient les colonnes :
- id_corps (clé primaire) entier identifiant chaque corps,
- nom, chaine de caractères, désigne le nom usuel du corps,
- masse de type flottant, contient la masse du corps.
La table ETAT rassemble l’historique des états successifs (positions et vitesses) des corps étudiés. Elle est constituée
de huit colonnes :
- id_corps de type entier, identifie le corps concerné,
- datem est la date de la mesure, sous forme d’un entier donnant le nombre de secondes écoulées depuis un instant
d’origine
- Trois colonnes de types flottant pour les composantes de la position x, y, z,
- Trois colonnes de types flottant pour les composantes de la position vv, vy, vz,
IV.A – Écrire une requête SQL qui renvoie la liste des masses de tous les corps étudiés.
SELECT masse FROM corps
IV.B – Les états des différents corps ne sont pas forcément tous déterminés exactement au même instant. Nous allons
assimiler l’état initial (à la date 𝑡𝑚𝑖𝑛 ) de chaque corps à son dernier état connu antérieur à 𝑡min. Dans toute la suite,
on supposera que la valeur de 𝑡𝑚𝑖𝑛 , sous le format utilisé dans la table ETAT, est accessible à toute requête SQL via
l’expression tmin().
IV.B.1) On souhaite d’abord vérifier que tous les corps étudiés disposent d’un état connu antérieur à tmin(). Le nombre
de corps présents dans la base est obtenu grâce à la requête SELECT count(*) FROM corps.
Écrire une requête SQL qui renvoie le nombre de corps qui ont au moins un état connu antérieur à tmin().
SELECT COUNT(DISTINCT id_corp)
FROM etat
WHERE datem < tmin()
IV.B.2) Écrire une requête SQL qui renvoie, pour chaque corps, son identifiant et la date de son dernier état antérieur
à tmin().
SELECT id_corps, MAX(datem) -- datem par rapport à l’origine lointaine
FROM etat
WHERE datem < tmin()
GROUP BY id_corps
IV.B.3) Le résultat de la requête précédente est stocké dans une nouvelle table date_mesure à deux colonnes :
−id_corps de type entier, contient l’identifiant du corps considéré,
−date_der de type entier, correspond à la date du dernier état connu du corps considéré, antérieur à tmin().
Pour simplifier la simulation, on décide de négliger l’influence des corps ayant une masse strictement inférieure à une
valeur fixée masse_min() et de ne s’intéresser qu’aux corps situés dans un cube, centré sur l’origine du référentiel de
référence et d’arête arete() donnée. Les faces de ce cube sont parallèles aux plans formés par les axes du référentiel
de référence.

4
Écrire une requête SQL qui renvoie la masse et l’état initial (sous la forme masse, x, y, z, vx, vy, vz) de chaque corps
retenu pour participer à la simulation. Classez les corps dans l’ordre croissant par rapport à leur distance à l’origine du
référentiel.
SELECT a.masse, b.x, b.y, b.z, b.vx, b.vy, b.vz
-- Les id_corps des derniers sont dans date_mesure => index ETAT et CORPS
FROM date_mesure AS c -- l’état initial est dans date_mesure
-- Le dernier état et même id_corps (pour la position et vitesse)
JOIN etat AS b ON c.id_corps=b.id_corps AND c.date_der=b.datem
-- Le dernier état et même id_corps
JOIN corps AS a ON c.id_corps=a.id_corps
-- A ce stade, nous avons une table qui retourne masse, pos, vit des derniers
corps connus. La clause WHERE filtre au cube
WHERE ABS(b.x) < arete()/2
AND ABS(b.y) < arete()/2
AND ABS(b.z) < arete()/2
AND a.masse > masse_min()
-- La clause ORDER BY permet le classement par ordre croissant
ORDER BY SQRT(POWER(b.x,2)+POWER(b.y,2)+POWER(b.z,2)) ASC;
Session 2016 : Prévention des collisions aériennes
La table VOL qui répertorie les plans de vol déposés par les compagnies aériennes; elle contient les colonnes :
- id_vol : numéro du vol (chaine de caractères),
- depart : code de l’aéroport de départ (chaine de caractères),
- arrivee : code de l’aéroport d’arrivée (chaine de caractères),
- jour : jour du vol (de type date, affiché au format aaaa-mm-jj),
- heure : heure de décollage souhaitée (de type time, affiché au format hh:mi),
- niveau : niveau de vol souhaité (entier).
La table AEROPORT qui répertorie les aéroports européens ; elle contient les colonnes,
- id_aero : code de l’aéroport (chaine de caractères),
- ville : principale ville desservie (chaine de caractères),
- pays : pays dans lequel se situe l’aéroport (chaine de caractères).
I.A- Écrire une requête SQL qui fournit le nombre de vols qui doivent décoller dans la journée du 2 mai 2016 avant
midi.
SELECT COUNT(id_vol)
FROM vol
WHERE jour = "2016-05-02" AND heure < "12:00"
I.B- Écrire une requête SQL qui fournit la liste des numéros de vols au départ d’un aéroport desservant Paris le 2 mai
2016.
SELECT id_vol
FROM vol
JOIN aeroport ON arrivee = id_aero
WHERE ville LIKE "Paris" AND jour = "2016-05-02"; -- même chose que « = 'Paris' »
-- L’opérateur LIKE est utilisé dans la clause WHERE des requêtes SQL. Ce mot-
clé permet d’effectuer une recherche sur un modèle particulier. Il est par exemple
possible de rechercher les enregistrements dont la valeur d’une colonne commence
par Paris%, se termine par %Paris
I.C- Que fait la requête suivante ?

SELECT id_vol
FROM vol
JOIN aeroport AS d ON d.id_aero = depart
5
JOIN aeroport AS a ON a.id_aero = arrivee
WHERE
d.pays = 'France' AND
a.pays = 'France' AND
jour = '2016-05-02';
Elle renvoie les numéros des vols intérieurs à la France pour le jour du 2 mai 2016.

I.D- Certains vols peuvent engendrer des conflits potentiels : c’est par exemple le cas lorsque deux avions suivent un
même trajet, en sens inverse, le même jour et à un même niveau.
Écrire une requête SQL qui fournit la liste des couples(Id1,Id2) des identifiants des vols dans cette situation.

SELECT vol1.id_vol AS Id1,vol2.id_vol AS Id2


FROM vol AS vol1,vol AS vol2
WHERE Id1<Id2 AND vol1.niveau = vol2.niveau
AND vol1.jour = vol2.jour
AND vol1.depart = vol2.arrivee
AND vol1.arrivee = vol2.depart;
Session 2017 : Mars Exploration Rovers Mission d’exploration martienne
I.C.1) Écrire une requête SQL qui donne le numéro de l’exploration en cours, s’il y en a une.
SELECT ex_num
FROM explo
WHERE ex_deb IS NOT NULL AND ex_fin IS NULL;
I.C.2) Écrire une requête SQL qui donne, pour une exploration dont on connait le numéro, la liste des points d’intérêts
de cette exploration avec leurs coordonnées.
SELECT pi_num, pi_x , pi_y FROM pi WHERE ex_num = n;
I.C.3) Écrire une requête SQL qui donne la surface, en mètres carrés, de chaque zone déjà explorée par le robot. La
zone d’exploration est définie comme le plus petit rectangle qui englobe l’ensemble des points d’intérêts de
l’exploration et dont les bords sont parallèles aux axes de référence (axes des abscisse et des ordonnées).
SELECT ex_num, (MAX(pi_x) − MIN(pi_x)) * (MAX(pi_y) − MIN(pi_y)) * 1e−6
FROM explo JOIN pi ON (ex_num)
WHERE ex_fin IS NOT NULL
GROUP BY ex_num ;
I.C.5) Écrire une requête SQL qui donne, pour l’exploration en cours, le nombre de fois où chaque instrument doit être
utilisé et sa durée d’utilisation théorique (en jours martiens) pour la totalité de l’exploration.
SELECT in_nom, COUNT(*), SUM(it_dur)
FROM explo AS E
JOIN analy AS A ON E. ex_num = A.ex_num
JOIN intyp AS I ON A. ty_num = I.ty_num
WHERE ex_deb IS NOT NULL AND ex_fin IS NULL
GROUP BY in_nom;
Session 2018 : Simulation de la cinétique d’un gaz parfait
Q 34. Écrire une requête SQL qui donne le nombre de simulations effectuées pour chaque nombre de dimensions de
l’espace de simulation.
Il s’agit ici de chercher dans la table SIMULATION l’ensemble des simulations suivant un critère de dimensions. Pour
cela il est pratique de compter (count(*)) après regroupement selon SI_DIM.
SELECT SI_DIM, count(*)
FROM SIMULATION
GROUP BY SI_DIM ;

6
Q 35. Écrire une requête SQL qui donne, pour chaque simulation, le nombre de rebonds enregistrés et la vitesse
moyenne des particules qui frappent une paroi.
Comme chaque rebond est enregistré, il faut les compter après les avoir regroupé pour chaque simulation. On projette
suivant SI_NUM pour afficher le numéro de simulation ; on compte avec count(*) et on réalise la moyenne avec
AVG(RE_VIT).
SELECT SI_NUM, COUNT(*), AVG(RE_VIT)
FROM REBOND
GROUP BY SI_NUM;
Q 36. Écrire une requête SQL qui, pour une simulation 𝑛 donnée, calcule, pour chaque paroi, la variation de quantité
de mouvement due aux chocs des particules sur cette paroi tout au long de la simulation. On se rappellera que lors du
rebond d’une particule sur une paroi la composante de sa vitesse normale à la paroi est inversée, ce qui correspond à
une variation de quantité de mouvement de 2𝑚|𝑣⊥|où 𝑚 désigne la masse de la particule et 𝑣⊥ la composante de sa
vitesse normale à la paroi.
Il faut penser à sommer les variations à chaque choc (SUM(2*PA_M*RE_VP)). Ensuite il faut nécessairement une
double jointure afin de regrouper les tables. De plus, il faut sélectionner selon le numéro de simulation (WHERE). Enfin,
il faut regrouper selon la direction de la paroi (GROUP BY).
SELECT RE_DIR, SUM(2*PA_M*RE_VP)
FROM SIMULATION as S
JOIN REBOND as R ON S.SI_NUM = R.SI_NUM
JOIN PARTICULE as P ON R.PA_NUM = P.PA_NUM
WHERE S.SI_NUM = n
GROUP BY R.RE_DIR;

Concours Mines-Ponts
Session 2015 : Tests de validation d’une imprimante
Soit les deux tables suivantes :

Q8. Rédiger une requête SQL permettant d’obtenir les numéros de série des imprimantes ayant une valeur de Imoy
comprise strictement entre deux bornes Imin et Imax.
SELECT nSerie
FROM testfin
WHERE Imoy > Imin AND Imoy < Imax;
Q9. Rédiger une requête SQL permettant d’obtenir les numéros de série, la valeur de l’écart type et le fichier de
mesures des imprimantes ayant une valeur de Iec strictement inférieure à la valeur moyenne de la colonne Iec.
La sous requête permettant d’obtenir la valeur moyenne de l’écart type est :
SELECT AVG(Iec) FROM testfin;

7
La requête complète est :
SELECT nSerie, Iec, fichierMes
FROM testfin
WHERE Iec > (SELECT AVG(Iec) FROM testfin);
Q10. Rédiger une requête SQL qui permettra d’extraire à partir de la table testfin le numéro de série et le fichier de
mesures correspondant aux imprimantes qui n’ont pas été validées en sortie de production.
SELECT nSerie, fichierMes
FROM testfin
WHERE nSerie NOT IN (SELECT nSerie FROM production) ;
Session 2016 : Modélisation de la propagation d’une épidémie
La table palu recense le nombre de nouveaux cas confirmés et le nombre de décès liés au paludisme ; certaines
lignes de cette table sont données en exemple (on précise que iso est un identifiant unique pour chaque pays) :

La table demographie recense la population totale de chaque pays ; certaines lignes de cette table sont données en
exemple :

Q5 - Au vu des données présentées dans la table palu, parmi les attributs nom, iso et annee, quels attributs peuvent
servir de clé primaire ? Un couple d’attributs pourrait-il servir de clé primaire ?

(on considère qu’une clé primaire peut posséder plusieurs attributs). Si oui, en préciser un.

Aucun champ ne peut servir de clé primaire car aucun d'eux n'est suffisant pour différencier les enregistrements. En
revanche les couples {nom, année} ou {iso, année} peuvent servir de clé primaire (dans le mesure où l'on considère
qu'une clé primaire peut posséder plusieurs attributs).

Q6 - Ecrire une requête en langage SQL qui récupère depuis la table palu toutes les données de l’année 2010 qui
correspondent a` des pays ou` le nombre de décès dus au paludisme est supérieur ou égal à 1000.
SELECT *
FROM palu
WHERE annee=2010 AND deces>=1000;
On appelle taux d’incidence d’une épidémie le rapport du nombre de nouveaux cas pendant une période donnée sur
la taille de la population-cible pendant la même période. Il s’exprime généralement en « nombre de nouveaux cas
pour 100000 personnes par année ». Il s’agit d’un des critères les plus importants pour évaluer la fréquence et la
vitesse d’apparition d’une épidémie.

Q7 - Ecrire une requête en langage SQL qui détermine le taux d’incidence du paludisme en 2011 pour les différents
pays de la table palu.
SELECT nom, cas*100000/pop
8
FROM palu JOIN demographie
ON iso=pays AND annee=periode
WHERE annee=2011;
Q8 - Ecrire une requête en langage SQL permettant de déterminer le nom du pays ayant eu le deuxième plus grand
nombre de nouveaux cas de paludisme en 2010 (on pourra supposer qu’il n’y a pas de pays ex æquo pour les nombres
de cas).

SELECT nom
FROM palu
WHERE annee = 2010 AND cas=( SELECT max(cas)
FROM palu
WHERE cas!= ( SELECT MAX(cas)
FROM palu
WHERE annee=2010));
Session 2017 : Etude de trafic routier
On modélise ici un réseau routier par un ensemble de croisements et de voies reliant ces croisements. Les voies partent
d’un croisement et arrivent à un autre croisement. Ainsi, pour modéliser une route à double sens, on utilise deux voies
circulant en sens opposés. La base de données du réseau routier est constituée des relations suivantes :
- Croisement(id, longitude, latitude)
- Voie(id, longueur, id croisement debut, id croisement fin)
Dans la suite on considère c l’identifiant (id) d’un croisement donné.
Q26 - Ecrire la requête SQL qui renvoie les identifiants des croisements atteignables en utilisant une seule voie à partir
du croisement ayant l’identifiant c.
SELECT id_croisement_fin
FROM croisement
WHERE id_croisement_debut = c
Q27 - Ecrire la requête SQL qui renvoie les longitudes et latitudes des croisements atteignables en utilisant une seule
voie, à partir du croisement c.
SELECT longitude, lattitude
FROM croisement JOIN voie
ON id_croisement_fin = croisement.id
WHERE id_croisement_debut = c
Q28 - Que renvoie la requête SQL suivante?

SELECT V2.id_croisement_fin
FROM Voie AS V1 JOIN Voie AS V2
ON V1.id_croisement_fin = V2.id_croisement_debut
WHERE V1.id_croisement_debut = c

Cette requête renvoie les identifiants des croisements atteignables en utilisant exactement deux voies, à partir du
croisement c.
Session 2018 : Mesures de houle
On dispose d’une base de données relationnelle Vagues.
La première table est Bouee. On se limite aux attributs suivants : le numéro d’identification idBouee, le nom du site
nomSite, le nom de la mer ou de l’océan localisation, le type du capteur typeCapteur et la fréquence d’échantillonnage
frequence.

9
La seconde table est Campagne. On se limite aux attributs suivants : le numéro d’identification idCampagne, le numéro
d’identification de la bouée idBouee, la date de début debutCampagne et la date de fin finCampagne.

La troisième table est Tempete. Les informations fournies relatives à un événement “tempête” sont les suivantes :
- Date de début et fin de tempête,
- Evolution des paramètres H1/3 et Hmax en fonction du temps,
- Le détail de certains paramètres non définis ici, obtenus au pic de tempête.
On se limite aux attributs suivants : le numéro d’identification de la tempête idTempete, le numéro
d’identification de la bouée idBouee, la date de début debutTempete, la date de fin finTempete, la valeur
maximale de hauteur de vague Hmax.

Q19 - Formuler les requêtes SQL permettant de répondre aux questions suivantes :
« Quels sont le numéro d’identification et le nom de site des bouées localisées en Méditerranée ? »

SELECT idBouee, nomSite


FROM Bouee
WHERE localisation = "Mediterranee";

« Quel est le numéro d’identification des bouées où il n’y a pas eu de tempêtes ? »

SELECT idBouee
FROM Bouee
WHERE idBouee NOT IN ( SELECT idBouee
FROM Tempete);

« Pour chaque site, quelle est la hauteur maximale enregistrée lors d’une tempête ? »
SELECT nomSite, MAX(Hmax)
FROM Bouee JOIN Tempete
ON Tempete.idBouee = Bouee.idBouee
GROUP BY nomSite;
Session 2019 : Autour des nombres premiers
Q25 Expliquer pourquoi il n’est pas possible d’utiliser l’attribut nom comme cl´e primaire de la table fonctions.
Nom ne peut pas être une clé primaire car il n'identifie pas de manière unique un n-uplet.
Q26 Ecrire des requêtes SQL permettant de :
1. Connaître le nombre d’ordinateurs disponibles et leur quantité moyenne de mémoire vive.
2. Extraire les noms des PC sur lesquels l’algorithme rectangles n’a pas été testée pour la fonction nommée li. 3
3. Pour la fonction nommée Ei, trier les résultats des tests du plus lent au plus rapide. Pour chaque test retenir le nom
de l’algorithme utilisé, le nom du pc sur lequel il a été effectué et la puissance du PC.

10
SELECT COUNT(nom), AVG(ram)
FROM ordinateurs ;

SELECT teste_sur
FROM fonctions
WHERE id NOT IN ( SELECT id
FROM fonctions
WHERE algorithme='rectangles');

SELECT algorithme, ordinateurs.nom, gflops


FROM ordinateurs JOIN fonctions
ON ordinateurs.nom=teste_sur
WHERE fonctions.nom='Ei'
ORDER BY temps_exec DESC ;

11

Vous aimerez peut-être aussi