Upload
gilberte-pinto
View
109
Download
2
Embed Size (px)
Citation preview
Initiation aux bases de données et à la programmation événementielle
Cours N°2 :
langage d’interrogation de données.
(Les requêtes statistiques et autres).
Support de cours de Souheib BAARIR.
Page web : pagesperso-systeme.lip6.fr/Souheib.Baarir/bdvba/support.htmE-mail : [email protected]
Université Paris Ouest Nanterre la Défense.2009-2010. 1
SQL : requêtes statistiques
•Plusieurs types de requêtes : d’interrogation. de manipulation : insert, update, delete… de définition : create, alter, drop…
SELECT [DISTINCT] liste de champs
FROM liste de tables
[WHERE prédicats]
[GROUP BY définition des groupes]
[HAVING condition]
, fonctions d’agrégats
Liste des champs servant à l’agrégation
de plusieurs enregistrements
Autre clause de restriction qui portent sur les fonctions et
champs d’agrégat.2
Les requêtes statistiques
3
• Le calcul se fait sur les données d’un groupe de plusieurs enregistrements d’une table R0.
• Ces enregistrements doivent avoir un point commun : des champs qui ont la même valeur.
• Ils sont agrégés pour n’en faire plus qu’un qui comprend :
• Une partie des champs communs (éventuellement tous).
• Les résultats des calculs.
• Les enregistrements ainsi décrits forment une nouvelle table R1 (le résultat de la requête).
Requêtes statistiques
• Syntaxe : nom_de_la_fonction (expression).
• Sémantique : calcule une valeur à partir des valeurs de tous lesenregistrements agrégés.
Les fonctions d’agrégats
• Les fonctions disponibles sont :
Sum : sommeCount : compte Avg : moyenne Min : le plus petit Max : le plus grand StDev : écart type Var : variance First : premier Last : dernier 4
Fonctions d’agrégats : Sum
Sum : fournit la somme d’un champ
N° Produit désignation quantité
1 Marteau 40
2 Pelle 10
3 Truelle 5
4 Tournevis 100
La quantité de tout le matériel en stock ?
SELECT Sum(quantité) FROM Stock
Stock
Exp1000
155
SELECT Sum(quantité) as QG FROM Stock
QG
155 5
Fonctions d’agrégats : Count (1/2)
Count : permet de compter le nombre d’enregistrements
Quel est le nombre d’étudiants par formation ?
SELECT formation, count ([N° étudiant]) as NombreFROM étudiantGroup by formation
étudiants
formation Nombre
MMIA 1
Gestion 3
Anglais 2 6
N° étudiant Nom Prénom formation
105230 MARTIN Marie MMIA
105234 BERNARD Louis Gestion
105237 THOMAS Alice Anglais
105239 MARTIN Bernard Anglais
105250 MARIE Philippe Gestion
105211 Mounier Alice Gestion
Quelles sont les formations de Plus de 2 étudiants?
SELECT formation, count([N° étudiant]) as NombreFROM étudiantGroup by formationHaving count([N° étudiant]) > 2
N° étudiant Nom Prénom formation
105230 MARTIN Marie MMIA
105234 BERNARD Louis Gestion
105237 THOMAS Alice Anglais
105239 MARTIN Bernard Anglais
105250 MARIE Philippe Gestion
105211 Mounier Alice Gestion
étudiants
formation Nombre
Gestion 3
Fonctions d’agrégats : Count (2/2)
7
8
Tous les champs sur lesquels on fait la projection (clause Select) doivent servir dans la clause d’agrégat (clause Group By).
Mais, un champ peut figurer dans la clause d’agrégat sans servir à la projection.
De même, les champs utilisés dans la restriction Where peuvent ne pas servir à la projection.
Important !
9
ExemplesSELECT formation, count([N° étudiant])FROM étudiantGroup by formationHaving count([N° étudiant]) >2
SELECT formation, prénom, count([N° étudiant])FROM étudiantGroup by formationHaving count([N° étudiant]) >2
prénom
SELECT formation, prénom, count([N° étudiant])FROM étudiantGroup by formation, prénomHaving count([N° étudiant]) >2
SELECT formation, count([N° étudiant])FROM étudiantGroup by formation, prénomHaving count([N° étudiant]) >2
formation
formation
formation, prénom
formation, prénom
formation
formation
formation
formation prénom
SQL : les tris
•Plusieurs types de requêtes : d’interrogation. de manipulation : insert, update, delete… de définition : create, alter, drop…
SELECT [DISTINCT] liste de champs
FROM liste de tables
[WHERE prédicats]
[GROUP BY définition des groupes]
[HAVING condition]
, fonctions d’agrégats
10
[ORDER BY liste de champs]
Les tris : exemple 1
11
Quelles sont les formations triées par ordre alphabétique?
SELECT formation FROM étudiantOrder By formation
N° étudiant Nom Prénom formation
105230 MARTIN Marie MMIA
105234 BERNARD Louis Gestion
105237 THOMAS Alice Anglais
105239 MARTIN Bernard Anglais
105250 MARIE Philippe Gestion
105211 MOUNIER Alice Gestion
étudiants
Formation
Anglais
Anglais
Gestion
Gestion
Gestion
MMIA SELECT Distinct formation FROM étudiantOrder By formation
Formation
Anglais
Gestion
MMIA
Les tris : exemple 2
12
Quelles sont les formations triées par ordre alphabétique
inversé?
SELECT formation FROM étudiantOrder By formation DESC
N° étudiant Nom Prénom formation
105230 MARTIN Marie MMIA
105234 BERNARD Louis Gestion
105237 THOMAS Alice Anglais
105239 MARTIN Bernard Anglais
105250 MARIE Philippe Gestion
105211 MOUNIER Alice Gestion
étudiants
Formation
MMIA
Gestion
Gestion
Gestion
Anglais
Anglais
Exercice : base de données Cinéma
13
•Catégories(codeC,intitulé)
•Réalisateurs(codeR,nom,prénom,nationalité)
•Films(codeF,titre,durée, refR,refC)
•Acteurs(codeA,nom,prénom)
•Joue(refF,refA)
refR
codeR
refC
codeC
refF
codeF
refA
codeA
14
BD Cinéma : Qui joue dans « mission impossible » ?
•Catégories(codeC,intitulé)•Réalisateurs(codeR,nom,prénom,nationalité)•Films(codeF,titre,durée,refR,refC)•Acteurs(codeA,nom,prénom)•Joue(refF,refA)
SELECT Acteurs.nom,Acteurs.prénom
FROM Films INNER JOIN (Acteurs INNER JOIN Joue ON Acteur.codeA =Joue.refA) ON Films.codeF=Joue.refF
WHERE films.titre= "Mission impossible"
15
BD Cinéma : Combien de films a réalisé « Spielberg » ?
•Catégories(codeC,intitulé)•Réalisateurs(codeR,nom,prénom,nationalité)•Films(codeF,titre,durée,refR,refC)•Acteurs(codeA,nom,prénom)•Joue(refF,refA)
SELECT count(codeF) as Nombre
FROM Réalisateurs INNER JOIN Films ON Films.refR=Réalisateurs.codeR
WHERE Réalisateurs.nom= "Spielberg"
16
BD Cinéma : Combien de films de chaque catégorie a réalisé
« Spielberg » ?
•Catégories(codeC,intitulé)•Réalisateurs(codeR,nom,prénom,nationalité)•Films(codeF,titre,durée,refR,refC)•Acteurs(codeA,nom,prénom)•Joue(refF,refA)
SELECT Catégorie.intitulé,count(codeF) as Nombre
FROM Réalisateurs INNER JOIN (Films INNER JOIN Catégories ON Films.refC= Catégories.codeC)
ON Films.refR=Réalisateurs.codeR
WHERE Réalisateurs.nom= "Spielberg"
Groupe By Catégorie.codeC, Catégorie.intitulé
17
BD Cinéma : Quels sont les réalisateurs dont le nom
commence par « Spiel »?
•Catégories(codeC,intitulé)•Réalisateurs(codeR,nom,prénom,nationalité)•Films(codeF,titre,durée,refR,refC)•Acteurs(codeA,nom,prénom)•Joue(refF,refA)
SELECT Réalisateurs.nom
FROM Réalisateurs
WHERE Réalisateurs.nom LIKE "Spiel*"
LIKE : compare deux expression avec des joker.* : Joker qui signifie une chaine de n’importe quelle taille.
? : Joker qui signifie un seul caractère.
18
BD Cinéma : Quels sont les films de durée entre 90 et 120
minutes?•Catégories(codeC,intitulé)•Réalisateurs(codeR,nom,prénom,nationalité)•Films(codeF,titre,durée,refR,refC)•Acteurs(codeA,nom,prénom)•Joue(refF,refA)
SELECT Films.titre
FROM Films
WHERE Filmes.durée BETWEEN 90 AND 120
SELECT Films.titre
FROM Films
WHERE Filmes.durée >= 90 AND Filmes.durée <=120
19
BD Cinéma : Quels sont les films dont la catégorie n’est pas
renseignée?•Catégories(codeC,intitulé)•Réalisateurs(codeR,nom,prénom,nationalité)•Films(codeF,titre,durée,refR,refC)•Acteurs(codeA,nom,prénom)•Joue(refF,refA)
SELECT Films.titre
FROM Films
WHERE ISNULL(Filmes.refC)
ISNULL : est une fonction qui teste le renseignement d’une valeur dans un champ.
SQL : sous-requêtes
•Plusieurs types de requêtes : d’interrogation. de manipulation : insert, update, delete… de définition : create, alter, drop…
SELECT [DISTINCT] liste de champs
FROM liste de tables
[WHERE prédicats]
20
Les sous-requêtes
, (SELECT…. )
• exp op ANY (SELECT...)• exp op ALL (SELECT...)• exp IN (SELECT...)• exp NOT IN (SELECT...)• …
Exemple
SELECT formationFROM étudiantGROUP BY formationHAVING count(N° étudiant) = (
)
N° étudiant Nom Prénom formation
105230 MARTIN Marie MMIA
105234 BERNARD Louis Gestion
105237 THOMAS Alice Anglais
105239 MARTIN Bernard Anglais
105250 MARIE Philippe Gestion
105211 Mounier Alice Gestion
Quelle est la formation ayant la le plus grand nombre d’étudiants ?
étudiants
SELECT count(N° étudiant) as nb FROM étudiant GROUP BY formation
SELECT max(nb) as maximum FROM (
)
nb
1
3
2
maximum
3
formation
Gestion