Vous êtes sur la page 1sur 35

ACCESS 2

Requtes une base de donnes SQL

Base de donnes pour cette partie


Schma:
EMPLOYEE(Nom, Prenom, Deptnom, Age, NSS, Fonction, Salaire) DEPARTEMENT(Deptnom, DirNSS, Ville, Adresse) PROJET(Pnumber, ProjectName,Site,Priority) PARTICIPATION(NSS, Pnumber, DateDebut, DateFin)

Interrogation dune base de donnes


Extraire information de BD, Exemples: Trouver le dpartement o travaille jean dupont Trouver la fonction et lage de jean dupont Trouver le directeur du dep. consulting Trouver le directeur de jean dupont Trouver les directeurs de tous les dpartements Trouver tous les emploies qui travaillent sur le site de Marseille Trouver le nombre et le salaire moyen des emploies qui travaillent au dep. research Trouver le salaire et lage moyen des employs de tous les departements Trouver les projets aux quels participe jean dupont Trouver les projets aux quels participe quelques employs du dep consulting Trouver les employes qui travaillet au projets de priorit very important

Requtes en ACCESS
Par linterface graphique Par un langage textuel: SQL Linterface graphique traduit une requte en SQL Nous verrons auparavant SQL

SQL
SQL: "Structured Query Language" Langage avec plusieurs fonctionnalits: DDL: Data Definition langage: DML: Data Manipulation langage: Interrogation Insertion et modification des donnes Dfinition et gestion de vues Maintien de l'intgrit Gestion des droits d'access Gestion des transactions

Definition de donnes avec SQL:


create table ETUDIANT( Matricule char(8) primary key, Nom char(32) not null, Prenom char(32) not null, DateNais date, constraint EUN UNIQUE(Nom, Prenom)); create table COURS( Code Int primary key, CoursNom char(32), Enseignant char(32)); create table EXAMEN ( Code int, Matricule char(8) , NoteEx int, Edate date, Primary key (Code, Mat), Foreign key (code) references COURS(code), Foreign key (Mat) references ETUDIANT(Mat));

Requtes des slection


Lexcution dune requte de selection produit une table contenant les donnes slectionnes Cette table ne fait pas partie de la base de donnes, il sagit dune table virtuelle Cette table peut tre utilise aussi pour mettre jours les donnes et pour construire autres requtes

Requtes SQL avec ACCESS


Crer une requte en mode cration Ignorer les tables ajouter (fermer) Slectionner dans le volet Affichage Mode SQL

Interrogation SELECT
SELECT ListeAttributs target list FROM ListeTables [ WHERE Condition] SELECT ListeAttributs: ListeAttributs: les attributs qui seront montrs dans la table resultante FROM ListeTables: La table (ou les tables) dont les donnes sont recuperes WHERE Condition: La condition de slection

exemple1
Afficher nom et prnom de tous les employs: SELECT Nom, Prenom FROM Employee ; Faire: Afficher les fonctions de tous les employs Faire: Afficher les nom de dpartements et leurs sites (Deptnom, Ville)

exemple2
Slectionner tous les attributs: Select * From Employee; Affiche la table entire - Faire: slectionner tous les attributs de la table project

exemple3
Simple Condition avec WHERE Slectionner les employs qui ont la fonction du manager (afficher nom et departement)
SELECT nom, deptnom, fonction FROM employee WHERE fonction='Manager

exemple4
Trouver le dpartement o Bennet travaille SELECT deptnom FROM Employee WHERE Nom='Bennet ; Faire: Trouver tous les emploies qui travaillent dans le dpartement production

exemple5
Condition where complexe: Trouver les employs qui ont un salaire > 3800 et un age < 45 (Afficher Nom, Age et Salaire) SELECT Nom, Age, Salaire FROM employee WHERE salaire>3800 And Age<45;

exemple6
Trouver les employs qui travaillent au dpartement research et les employs qui travaillent au dpartement administration SELECT * FROM employee WHERE deptnom='Research' Or deptnom='Administration';

exemple7
Condition complexe (assiociativit des parentheses) Trouver les employs dage > 40 qui travaillent au dp research et les employs qui travaillent au dp administration (nimporte quelle age ils aient) Trouver les employs qui travaillent au dp research (nimporte quelle age ils aient) et les employs qui travaillent au dp administration et ont Age > 40 Trouver les employs d Age > 40 qui travaillent au dp research ou administration

exemple 8
Renommer les attributs: SELECT Nom as Employee, Age, Salaire as Revenues FROM employee WHERE salaire>3800 And Age<45;

Renommage et expressions dans la target list


exemple 9 select Salaire*6 as SalaireSemestrel from Employee where Nom = Bennet and Prenom = David;

Les parametres: exemple


Slectionner un employ dont le nom est donn lorsque la requte est excute SELECT * FROM employee WHERE Nom=[inserer le nom]; Slectionner les employs qui travaillent dans un certain dpartement (paramtre) et ont un age non suprieur une certaine valeur (paramtre)

ORDONNER les tuples dans le rsultat


Nom et Salaire des Personnes avec moins de 30 ans en ordre alphabtique select Nom, Salaire from Employee where Age < 30 order by nom Syntax: order by Attribut [asc | desc] {, Attribut [asc | desc]} asc (default) ordre croissant desc: ordre dcroissant Avec plusieurs attributs on impose un ordre lexicographique

select Nom, Salaire from Employee where Age < 30

select Nom, Salaire from Employee where Age < 30 order by Nom

Employee Nom Paul David Philippe Salaire 2100 1500 3000

Employee Nom David Paul Philippe Salaire 1500 2100 3000

Distinct
La table resultant d'une requte n'est pas une relation, car elle contient de doublons Essayer: select nom from Employee order by nom Pour liminer les doublons et obtenir un ensemble on outilise le mot cl distinct select distinct nom from Employee order by nom

fonctions d'agrgation
Dans les expressions de la target list on peut avoir des expressions qui calculent des valeurs partir d'un ensemble de tuples: count, min, max, avg, sum syntax: Fonction ([ DISTINCT ] *) Fonction ( [ DISTINCT ] Attribut )

fonctions d'agrgation
Dans une requte select Fonction (attribut) from .... where

1. les tuples qui satisfient la clause where sont selectionns 2. la Fonction est applique l'ensemble des valeurs d'attribut 3. les valeurs NULL ne sont pas tenues en compte

fonctions d'agrgation : COUNT


Trouver le nombre des Employees:
SELECT Count(*) AS NumEmp FROM employee;

Trouver le nombre des Employees qui travaillent au dpartement Research:


SELECT Count(*) AS NumEmpREsearch FROM employee WHERE Deptnom=Research;

Faire: Trouver le nombre des Employees qui sont manager ou top manager

Autres fonctions d'agrgation


SUM, AVG, MAX, MIN Moyenne des salaires des employs du department research SELECT Avg(Salaire) AS SalaireMoyenneREsearch FROM employee WHERE Deptnom=Research; Faire: Afficher le total (sum) des salaires des manager et topmanager (67.000) Faire: Afficher le salaire maximum des tous les employs (9.000)

fonctions d'agrgation et agrgats


Les fonctions peuvent tre appliques au partition de relations Clause GROUP BY: GROUP BY liste des Attributs

fonctions d'agrgation et agrgats


Le nombre des employs de chaque dpartement SELECT Deptnom, Count(*) AS NumEmp FROM Employee GROUP BY deptnom;
Deptnom Administration Consulting Production Research Trade NumEmp 6 4 5 5 6

fonctions d'agrgation et agrgats


1. Execution de la requte sans group by et sans fonction d'aggregation select * from Employee 2. partitionnement de la table par l'attribut Deptnom en sous-tables, 3. la fonction count(*) est applique chaque soustable

fonctions d'agrgation 2
Le nombre des employs de chaque dpartement dage <= 35 SELECT Deptnom, Count(*) AS NumEmpYoung FROM Employee WHERE age<=35 GROUP BY Deptnom;
Deptnom Administration Consulting Production Research Trade NumEmpYoung 4 1 3 3 1

fonctions d'agrgation 3
Exercices (Faire) 1. Le salaire moyen des employs de chaque dpartement 2. Le salaire moyen des employs de chaque dpartement dage >= 30 3. Le salaire moyen des employs pour chaque fonction

Departement

Fonction EmployeeN1 EMployeeN2 Cadre Secretaire Manager Secretaire TopManager EmployeeN1 Manager Secretaire TopManager EMployeeN2 Manager Cadre TopManager EmployeeN1 EMployeeN2 Manager Cadre TopManager

NumEmp 1 2 2 1 1 2 1 1 2 1 1 2 1 1 1 1 1 2 1 1

Agrgation sur deux attributs: trouver le nombre des employs de chaque departement pour chaque fonction: SELECT Deptnom, Fonction, Count(*) AS NumEmp FROM Employee GROUP BY Deptnom, Fonction;

Administration Administration Administration Administration Consulting Consulting Consulting Production Production Production Production Research Research Research Research Trade Trade Trade Trade Trade

requete: select LIST_ATT, Fonction(Attribut) from ... where ... group by LIST_ATT1 il faut que LIST_ATT soit inclus dans LIST_ATT1

Selection sur le resultat de la fonction d'agrgation


Compter le nombre des employs de chaque dpartement et afficher seulement ceux qui ont un nombre demploys >=5 SELECT Deptnom AS Dept, Count(*) AS NumEmp FROM Employee GROUP BY Deptnom HAVING Count(*)>=5; Faire: Determiner le salaire moyen des employs de chaque dpartement, afficher seulement les dpartements o le salaire moyen est < 4500

Syntax, rsumons:
SelectSQL ::=
select ListAttributs/Expressions from ListeTables [ where Condition] [ group by ListAttributsAgrgation ] [ having ConditionAgrgation ] [ order by ListeAttributsDeOrdre]