TD N 1 de S.G.B.D. 1 I.U.P. 3 GSI option TI TD N 1 de S.G.B.D. Ce TD a pour objectif de vous faire découvrir et utiliser les requête SQL. Il s agira d écrire diverses requêtes, création de tables, d insérer des données, de les effacer. 1 Modèle conceptuel et relations Soit le modèle conceptuel suivant : Etudiant id (identifiant) nom prénom naissance sexe adresse ville année (promotion) notes note Matières idm (identifiant) intitulé Donner le schéma relationnel du modèle conceptuel ci-dessus : Les relations qui en découlent sont les suivantes : - etud(id, nom, prénom, naissance, sexe, adresse, ville, année), id : 5 chiffres nom : 15 caractères prénom : 15 caractères naissance : entier sur 4 chiffres sexe : M ou F (1 caractère) adresse : 30 caractères ville : 15 caractères année : 1, 2 ou 3 (1 chiffre) - notes(id, note, idm), id : 5 chiffres note : 4 chiffres dont 2 après la virgule idm : 5 chiffres - matières(idm, intitulé), idm : 5 chiffres intitulé : 15 caractères 2 Création de table Créer les trois tables et les identifiants qui correspondent aux trois relations, et en respectant les spécifications (noms de tables, nom des attributs et domaines des attributs). create table etud ( create table matières ( create table notes ( id number(5) not null, nom char(15), prénom char(10), naissance number(4), sexe char(1), adresse char(30), ville char(15), année number(10)) * UNIQUE id ; idm number(5) not null, intitulé char(15)) * UNIQUE idm ; id number(5) not null,
2 TD N 1 de S.G.B.D. idm number(5) not null, note number (2,2)) * UNIQUE (id, idm) ; 3 Insertion et effacement de données Écrire les requêtes qui permettent d insérer et d effacer quelques valeurs dans les différentes tables. insert into etud values ( 200, "Douguet", "Nicolas", 1972 ; "M", "adresse", "ville) ; insert into matières values ( 100, "Maths") ; insert into notes values ( 200, 100, 10.2) ; delete from note where id=2 ; 4 Requêtes mono table les différentes villes de provenance des étudiants (sans doublon) select distinct ville ; les étudiants habitant à METZ where ville="metz" ; les étudiants de 2ème année habitant à NANCY where ville="nancy" and année=2 ; Les étudiantes de 2ème année ou 3ème année where sexe="f" and année!=1 ; le nom et prénom des étudiants de 3ème année nés après 70, prénom where (naissance>1970 and année=3) ; les étudiants dont le nom commence par L where nom like L% ; 5 Sélection avec tri I.U.P. 3 GSI option TI Université de Metz 8 décembre 2003
TD N 1 de S.G.B.D. 3 nom et prénom des étudiants, du plus jeune au plus vieux, prénom, naissance order by naissance desc ; noms, prénoms des étudiants triés par promotion croissante et ordre alphabétique inverse, prénom, année order by année, nom desc ; 6 Jointure tous les étudiants avec leurs notes, note, notes where etud.id=notes.id ; les notes de DURAND select note, notes where (etud.id=notes.id and etud.nom="durand") ; toutes les notes de maths select note from matières, notes where (notes.idm=matières.idm and matière.initulé="maths") ; nom, intitulé matière et notes de tous les étudiants, triés par promotion, nom et intitulé matière, intitulé, note from matières, etud, notes where etud.id=notes.id and matières.idm=notes.idm order by etud.année, etud.nom, matière.initulé ; 7 Select imbriqués les étudiants qui habitent la même ville que DURAND, ville where ville in (select ville where Nom="DURAND") ; les étudiants qui ont une meilleure note que DUPOND en ANGLAIS, intitulé, note from matières, etud, notes where ((etud.id=notes.id) and (matières.idm=notes.idm) and (matière.intitulé="anglais") and (notes.note > select note from notes, etud, matières where (etud.id=notes.id and notes.idm=matières.idm end etud.nom="dupond" and matières.intitulé="anglais")))) ;
4 TD N 1 de S.G.B.D. 8 Opérateurs et Agrégats Écrire les requêtes qui permettent de donner : le nombre d étudiants en première année select count(id) where année=1 ; l âge moyen des étudiants de l école, puis uniquement ceux de première année select avg(2002-naissance) ; select avg(2002-naissance) where année=1 ; la moyenne de DURAND select avg(note), notes where (notes.id=etud.id and nom="durand") ; le nom de l étudiant qui a eu la meilleure note en SGBD, note,notes, matières where (note in (select max(note) from notes, matières where (notes.idm=matières.idm and matières.initulé="sgbd")) and etud.id)notes.id and matière.idm=notes.idm and matières.intitulé= SGBD ) ; 9 Groupe Écrire les requêtes qui permettent de donner : la moyenne des notes par matière select avg(note), intitulé from notes, matières where notes.idm=matières.idm groupe by matières.intitulé ; la moyenne générale par élève, prénom, avg(note) from notes, etud where notes.id=etud.id groupe by etud.nom, etud.prenom ; l âge moyen par promo select année, avg(2002-naissance) groupe by etud.année ; le classement de la dernière année, prénom, avg(note), notes groupe by etud.bom, etud.prénom order by avg(note) ; I.U.P. 3 GSI option TI Université de Metz 8 décembre 2003
TD N 1 de S.G.B.D. 5 nom et moyenne des élèves qui passent en deuxième année (moyenne > 10), prénom, avg(note), notes where (etud.id=notes.id and etud.année=1) having (avg(note)>10) groupe by etud.nom, etud.prénom ; le nom et prénom du major de promo en dernière année, prénom, avg(note), notes group by etud.nom, etud.prénom having (avg(note))=(select max(avg(note)), note group by etud.nom)) ;