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). 1 Souheib BAARIR. Page web : Université Paris Ouest Nanterre la Défense
2 Données statistiques Le nombre d’étudiants de chaque formation. La moyenne des notes du module de BD. Le produit le moins acheté dans un supermarché. … Le nombre d’étudiants de chaque formation. La moyenne des notes du module de BD. Le produit le moins acheté dans un supermarché. … Une définition minimale : Données dénombrées et dénombrables ! Une définition minimale : Données dénombrées et dénombrables !
3 Dans une BD, l’information statistique n’est pas directement représentée … On aura, sinon, de la redondance ! Dans une BD, l’information statistique n’est pas directement représentée … On aura, sinon, de la redondance ! Sachant que les requêtes SQL de base (vus jusqu’à aujourd’hui) ne permettent qu’une extraction d’information simple…, la question est, donc, comment extraire (visualiser) les données statistiques ? Sachant que les requêtes SQL de base (vus jusqu’à aujourd’hui) ne permettent qu’une extraction d’information simple…, la question est, donc, comment extraire (visualiser) les données statistiques ? Données statistiques et BD Les requêtes statistiques
4 Le calcul se fait sur les données d’un groupe de plusieurs enregistrements d’une table T 0. 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 : o Une partie des champs communs (éventuellement tous). o Les résultats des calculs. Les enregistrements ainsi décrits forment une nouvelle table T 1 (le résultat de la requête). Requêtes statistiques : principes
5 Requêtes statistiques : exemple N° auteur SexeNom auteur Prénom auteur A. naissanceA. décès 1MHUGOVictor FSANDGeorge MDUMASAlexandre FYOURCENARMarguerite FDe STAËLGermaine MRACINEJean MVERLAINEPaul Combien y a-t-il d’auteurs par sexe dans la BD ? Deux groupes d’enregistrements : dans chaque groupe la valeur du champ sexe est identique. Agréger les enregistrements de chaque groupe (pour n’en faire qu’un), avec le résultat des calculs. Sexe NB M4 F3 T1 T0
Requêtes statistiques : SQL 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 prédicats], 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. 6 Les requêtes statistiques
Syntaxe : nom_de_la_fonction (expression). Sémantique : calcule une valeur à partir des valeurs de tous les enregistrements agrégés. Les fonctions d’agrégats Les fonctions disponibles sont : Sum : somme Count : compte Avg : moyenne Min : le plus petit Max : le plus grand StDev : écart type Var : variance First : premier Last : dernier 7
Fonctions d’agrégats : Sum Sum : fournit la somme d’un champ N° Produit désignationquantité 1Marteau40 2Pelle10 3Truelle5 4Tournevis100 La quantité de tout le matériel en stock ? SELECT Sum(quantité) FROM Stock Stock Exp SELECT Sum(quantité) as QG FROM Stock QG 155 8
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 Nombre FROM étudiant Group by formation étudiants formationNombre MMIA1 Gestion3 Anglais2 9 N° étudiant NomPrénomformation MARTINMarieMMIA BERNARDLouisGestion THOMASAliceAnglais MARTINBernardAnglais MARIEPhilippeGestion MounierAliceGestion
Quelles sont les formations de plus de 2 étudiants? SELECT formation, count([N° étudiant]) as Nombre FROM étudiant Group by formation Having count([N° étudiant]) > 2 N° étudiant NomPrénomformation MARTINMarieMMIA BERNARDLouisGestion THOMASAliceAnglais MARTINBernardAnglais MARIEPhilippeGestion MounierAliceGestion étudiants formationNombre Gestion3 Fonctions d’agrégats : Count (2/2) 10
11 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 !
12 Exemples SELECT formation, count([N° étudiant]) FROM étudiant Group by formation Having count([N° étudiant]) >2 SELECT formation, prénom, count([N° étudiant]) FROM étudiant Group by formation Having count([N° étudiant]) >2 prénom SELECT formation, prénom, count([N° étudiant]) FROM étudiant Group by formation, prénom Having count([N° étudiant]) >2 SELECT formation, count([N° étudiant]) FROM étudiant Group by formation, prénom Having count([N° étudiant]) >2 formation formation, prénom 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 13 [ORDER BY liste de champs]
Les tris : exemple 1 14 Quelles sont les formations triées par ordre alphabétique? SELECT formation FROM étudiant Order By formation N° étudiant NomPrénomformation MARTINMarieMMIA BERNARDLouisGestion THOMASAliceAnglais MARTINBernardAnglais MARIEPhilippeGestion MOUNIERAliceGestion étudiants Formation Anglais Gestion MMIA SELECT Distinct formation FROM étudiant Order By formation Formation Anglais Gestion MMIA
Les tris : exemple 2 15 Quelles sont les formations triées par ordre alphabétique inversé? SELECT formation FROM étudiant Order By formation DESC N° étudiant NomPrénomformation MARTINMarieMMIA BERNARDLouisGestion THOMASAliceAnglais MARTINBernardAnglais MARIEPhilippeGestion MOUNIERAliceGestion étudiants Formation MMIA Gestion Anglais
Exercice : BD Cinéma 16 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
17 BD Cinéma : Qui joue dans « mission impossible » ? SELECT nom, prénom, nationalité FROM Films INNER JOIN (Acteurs INNER JOIN Joue ON Acteur.codeA =Joue.refA) ON Films.codeF=Joue.refF WHERE titre= "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)
18 BD Cinéma : Combien de films a réalisé « Spielberg » ? SELECT count(codeF) as Nombre FROM Réalisateurs INNER JOIN Films ON Films.refR=Réalisateurs.codeR WHERE nom= "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)
19 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é
20 BD Cinéma : Quels sont les réalisateurs dont le nom commence par « Spiel »? 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. 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)
21 BD Cinéma : Quels sont les films de durée entre 90 et 120 minutes? 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 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)
22 BD Cinéma : Quels sont les films dont la catégorie n’est pas renseignée? SELECT Films.titre FROM Films WHERE ISNULL(Filmes.refC) ISNULL : est une fonction qui teste le renseignement d’une valeur dans un champ. 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)
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] 23 Les sous-requêtes, (SELECT…. ) exp IN (SELECT...) exp NOT IN (SELECT...) exp op ANY (SELECT...) exp op ALL (SELECT...) EXISTS (SELECT...) NOT EXISTS (SELECT...) [GROUP BY groupes] [HAVING prédicats]
24 Sous-requêtes : exemple 1 SELECT nom, prénom FROM Acteurs WHERE CodeA NOT IN (SELECT refA FROM Joue) Quels sont les acteurs qui n’ont joué dans aucun film de notre BD ? 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 formation FROM étudiant GROUP BY formation HAVING count(N° étudiant) = ( ) N° étudiant NomPrénomformation MARTINMarieMMIA BERNARDLouisGestion THOMASAliceAnglais MARTINBernardAnglais MARIEPhilippeGestion MounierAliceGestion 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 maximum 3 formation Gestion Sous-requêtes : exemple 2