Cours 7 : Requêtes d'agrégation en SQL UFR 919 Licence 2 e année

Documents pareils
Cours 4 : Agrégats et GROUP BY

1 Introduction et installation

Le langage SQL Rappels

Bases de données réparties: Fragmentation et allocation

TD : Requêtes SQL (BDR.TD2-1) INSA 3IF

Plan. Bases de Données. Sources des transparents. Bases de SQL. L3 Info. Chapitre 4 : SQL LDD Le langage de manipulation de données : LMD

Le Langage SQL version Oracle

Langage SQL : créer et interroger une base

16H Cours / 18H TD / 20H TP

1. LA GESTION DES BASES DE DONNEES RELATIONNELLES

Bases de données cours 4 Construction de requêtes en SQL. Catalin Dima

SQL Historique

NFA 008. Introduction à NoSQL et MongoDB 25/05/2013

Introduction au Système de Gestion de Base de Données et aux Base de Données

TD n 10 : Ma première Base de Données

ECR_DESCRIPTION CHAR(80), ECR_MONTANT NUMBER(10,2) NOT NULL, ECR_SENS CHAR(1) NOT NULL) ;

Optimisation SQL. Quelques règles de bases

1. Qu'est-ce que SQL? La maintenance des bases de données Les manipulations des bases de données... 5

Langage SQL (1) 4 septembre IUT Orléans. Introduction Le langage SQL : données Le langage SQL : requêtes

Durée : 4 heures Le sujet se présente sous la forme de deux dossiers indépendants

1 Introduction. 2 Le modèle relationnel. 3 Algèbre relationnelle 4 SQL. 5 Organisation physique des données 1/228

COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

Bases de Données. Le cas des BD relationnelles ouverture sur les BD relationnelles spatiales Séance 2 : Mise en oeuvre

SQL Serveur Programme de formation. France Belgique Suisse - Canada. Formez vos salariés pour optimiser la productivité de votre entreprise

Les Entrepôts de Données

Résumé S Q L. Auteur: Alexandre PATIN Edition: 22 février alexandre.patin@free.fr URL :

14/04/2014. un ensemble d'informations sur un sujet : exhaustif, non redondant, structuré, persistant. Gaëlle PERRIN SID2 Grenoble.

Durée : 4 heures coefficient : 4 Le sujet se présente sous la forme de deux dossiers indépendants

CRÉER UNE BASE DE DONNÉES AVEC OPEN OFFICE BASE

Systèmes de Gestion de Bases de Données

Oracle Décisionnel : Modèle OLAP et Vue matérialisée D BILEK

Les bases de données

INTRODUCTION : Données structurées et accès simplifié

SQL. Oracle. pour. 4 e édition. Christian Soutou Avec la participation d Olivier Teste

INTRODUCTION AU DATA MINING

Année Universitaire 2009/2010 Session 2 de Printemps

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

Le Langage De Description De Données(LDD)

Bases de données et sites WEB

MODE OPERATOIRE OPENOFFICE BASE

clef primaire ; clef étrangère ; projection ; restriction ; jointure ; SQL ; SELECT ; FROM ; WHERE

MySQL / SQL EXEMPLES

1 Modélisation d une base de données pour une société de bourse

Intégrité des données

TP base de données SQLite. 1 Différents choix possibles et choix de SQLite : 2 Définir une base de donnée avec SQLite Manager

ORACLE 10G DISTRIBUTION ET REPLICATION. Distribution de données avec Oracle. G. Mopolo-Moké prof. Associé UNSA 2009/ 2010

Compétences Business Objects

INSTITUT NATIONAL DES TELECOMMUNICATIONS CONTROLE DES CONNAISSANCES. 2. Les questions sont indépendantes les unes des autres.

Bases de Données relationnelles et leurs systèmes de Gestion

Vincent Augusto

Introduction aux Bases de Données 2004/2005

Initiation à SQL. Le langage de communication avec une base de données relationnelles. Application avec PostgreSQL. Nathalie Camelin 2011/2012

Bases de données. Yamine AIT AMEUR. INPT-ENSEEIHT DIMA 2 Rue Charles Camichel Toulouse Cedex 7

BTS/CGO P10 SYSTEME INFORMATION Année

LA GESTION DES VUES 1. INTRODUCTION

Bases de données Cours 4 : Le langage SQL pour ORACLE

Cours 3. Développement d une application BD. DBA - Maîtrise ASR - Université Evry

Master Exploration Informatique des données Data Mining & Business Intelligence. Evelyne CHARIFOU Priscillia CASSANDRA

Option OLAP d'oracle Database 10g

ERP open source une solution pour les entreprises. 17/02/2010 Page: 1

Bases de données multidimensionnelles et mise en œuvre dans Oracle

Interpréteur d algèbre relationnelle

TP Contraintes - Triggers

Comment Créer une Base de Données Ab Initio

Corrigés détaillés des exercices

Création de Sous-Formulaires

Objectif. Participant. Prérequis. Oracle BI Suite EE 10g R3 - Développer des référentiels. 5 Jours [35 Heures]

SQL sous SqlServer OLIVIER D. DEHECQ Olivier 0

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

FileMaker 13. Guide de référence SQL

SQL Server 2012 Implémentation d'une solution de Business Intelligence (Sql Server, Analysis Services...)

Cours SQL. Base du langage SQL et des bases de données

Plan 1/9/2013. Génération et exploitation de données. CEP et applications. Flux de données et notifications. Traitement des flux Implémentation

TP Bases de données réparties

Bases de données Oracle Virtual Private Database (VPD) pour la gestion des utilisateurs d applications

Département Génie Informatique

Introduction à la modélisation dimensionnelle

A QUOI SERVENT LES BASES DE DONNÉES?

Entrepôt de données : Extensions du langage SQL (SQL-3/SQL-99) pour lʼolap (7.1)

UE8 Systèmes d information de gestion Corrigé indicatif

SOMMAIRE. Travailler avec les requêtes... 3

SQL Server et Active Directory

Plan d Exécution Graphique pour des Requêtes SQL Simples

Bases de Données. Plan

Bases de données élémentaires Maude Manouvrier

Bases de données relationnelles

La présente publication est protégée par les droits d auteur. Tous droits réservés.

Administration des bases de données. Jean-Yves Antoine

1. Introduction Création d'une requête...2

LE LANGAGE SQL2 1. INTRODUCTION

Plan de formation : Certification OCA Oracle 11g. Les administrateurs de base de données (DBA) Oracle gèrent les systèmes informatiques

1 Introduction. Business Intelligence avec SharePoint Server 2010

Évolution de schémas dans les entrepôts de données mise à jour de hiérarchies de dimension pour la personnalisation des analyses

Bases de données. Mihaela Mathieu

Bases de données avancées Introduction

Java et les bases de données: JDBC: Java DataBase Connectivity SQLJ: Embedded SQL in Java. Michel Bonjour

COURS de BASES de DONNEES

CREATION WEB DYNAMIQUE

Sommaire. 2 LINQ to Objects

Transcription:

Agrégations Introduction aux Bases de données Cours 7 : Requêtes d'agrégation en SQL UFR 919 Licence e année 1 u Jusqu à présent on a vu des requêtes comme suite d opérations tuple à tuple u Les fonctions d agrégation permettent d exprimer des conditions/de faire des opérations sur des groupes de tuples u Avec SQL nous pouvons: n Partitionner une relation en groupes n Exprimer des relations sur des groupes n Agréger des valeurs sur les groupes u Il existe un groupe par défaut: la relation entière Project 01 Dev web 100k Paris 0 Dev web 00k Lyon 0 Rech info 10k Paris 05 Assurances 80k Lyon Grouper par city 01 0 0 05 Dev web Rech info Dev web Assurances 100k 10k 00k 80k Paris Lyon SQL : Fonctions d'agrégation Agrégation sur l'agrégat par défaut Elles peuvent servir à calculer une valeur numérique à partir d'une relation : Agg(A) ou A est un nom d'attribut (ou *) et Agg est une fonction parmi : COUNT(A) ou COUNT(*) : nombre de valeurs ou n-uplets, SUM(A) : somme des valeurs, MAX(A) : valeur maximale, MIN(A) : valeur minimale, AVG(A) : moyenne des valeurs dans l'ensemble des valeurs désignées par A 01 0 0 05 Dev web Rech info Dev web Assurances 100k 10k 00k 80k Paris Lyon Count(*) SUM(budget) City Paris Lyon Pau 1 count City sum Paris 0k Lyon 80k Pau 100k On applique des fonctions de calcul sur le résultat d'une requête : SELECT Agg1(A i ),, AggN(A j ) FROM R 1,..., R m WHERE Conditions On exécute la requête (clause from et where). On applique les différentes fonctions Aggk sur l'ensemble du résultat. Project 01 Dev web 100k Paris 0 Dev web 00k Lyon 0 Rech info 10k Paris 05 Assurances 80k Lyon Select city, count(*), sum(budget) From Project Where city= Paris ; City count sum Paris 0k 4

Agrégation sur l'agrégat par défaut quelques remarques Exemples d'agrégation la fonction d'agrégation Agg peut s'appliquer : Sur une ligne, uniquement pour le COUNT : COUNT(*), pour compter le nombre de lignes du résultat d'une requête Sur un attribut : Agg(att) applique la fonction aux valeurs NON NULLES de l'attribut att Sur un attribut avec DISTINCT : Agg(DISTINCT att) pour appliquer la fonction aux valeurs distinctes de l'attribut att Nombre d'employés parisiens? SELECT COUNT(*) WHERE City='Paris ; 01 Dev web 100k Paris 0 Dev web 00k Lyon 0 Rech info 10k Paris 05 Assurances 80k Lyon Select count(*) From Project ; Select count(city) From Project ; Select count(distinct city) From Project ; count 5 count 5 Plus grand salaire et plus petit salaire de toutes les professions? SELECT MAX(Salary), MIN(Salary) ; 6 Exemples d'agrégation Agrégation sur l'agrégat par défaut quelques remarques () Budgets totaux des budgets des projets de Paris? SELECT SUM(Budget) FROM Project WHERE City = 'Paris ; Nombre de villes où il y a un projet avec l'employé E4? SELECT COUNT(DISTINCT City) FROM Project, Works WHERE Project.Pno = Works.Pno AND Works.Eno = 'E4 ; Attention aux agrégations dans le WHERE : SELECT TITLE WHERE Salary=MAX(Salary); => cette formulation est INTERDITE! Pas d'attribut dans le SELECT si agrégation (sauf si GROUP BY voir après) SELECT TITLE,MAX(Salary) ; => cette formulation est INTERDITE! Comment faire pour connaître alors la profession payant le plus? 7 8

Fonctions d'agrégation et imbrication Fonctions d'agrégation et imbrication Pour utiliser des attributs de tables du FROM et une agrégation, il faut souvent passer par une sous-requête : Noms des professions qui payent le plus (et les salaires correspondant)? SELECT Title, Salary WHERE Salary = (SELECT MAX(Salary) ); Noms des projets dont le budget est supérieur au budget moyen? SELECT Pname FROM Project WHERE Budget > (SELECT AVG(Budget) FROM Project); singleton Remarque : dans le cas où la requête imbriquée retourne le résultat d'un agrégat (donc un seul résultat), pas besoin d'utiliser un IN, ANY ou ALL (mais pas faux) après l opérateur =, <, >, <=, >= 9 10 Requêtes de groupement : GROUP BY Pour partitionner les n-uplets résultats en fonction des valeurs de certains attributs : Principes : SELECT A i,, A n, agg1, agg, FROM R 1,, R m WHERE P GROUP BY A j, A k ; On exécute la requête FROM-WHERE On regroupe le résultat en paquets d'enregistrements en plaçant dans un paquet tous les enregistrements ayant la même valeur pour A j, A k On fait le select en appliquant les agrégations à chaque paquet R1 A1 A 1 1 6 1 8 R B1 a GROUP BY SELECT A1, B1, sum(a) FROM R 1, R WHERE A1 < GROUP BY A1, B1 ; from A1 A B1 6 a 1 1 a 8 a a 1 a a where A1 A B1 6 a 1 1 a 8 a 1 a group by A1 B1 A* 1 a 1 a 6 8 select A1 B1 sum(a) 1 a a 14 11 1

GROUP BY : problèmes courants SELECT A1, B1, sum(a) FROM WHERE R 1, R A1 < GROUP BY A1, B1 ; Group by Exemples de groupement Numéros des projets avec leurs effectifs? A1 B1 A 1-1 - 1 6 0 8 Group by les attributs projetés doivent être dans le group by R1 SELECT A1, B1, sum(a) FROM R 1, R WHERE A1 < GROUP BY A1; Sauf si Agg(atti) et pas de partitionnement sur atti R SELECT A1, min(b1), sum(a) FROM R 1, R WHERE A1 < GROUP BY A1; Résultat R1 Résultat R pas de sens A1 min sum 1-0 14 SELECT Pno, Count(Eno) GROUP BY Pno; Pour chaque ville, nombre d'employés par profession? SELECT City, Title, Count(*) GROUP BY City, Title; 1 14 Exemples de groupement Prédicats sur des groupes Numéros et noms des projets avec la durée moyenne et la durée maximale de participation des employés? SELECT Pno, Pname, AVG(Dur), MAX(Dur)=>OK pour ajouter, Project Pname, la clé de Projet WHERE Works.Pno=Project.Pno est dans GROUP BY GROUP BY Pno, Pname On a ajouté Pname dans le GROUP BY (alors que Pno suffisait pour faire les agrégats) afin de le mettre dans le SELECT Numéro,nom, et responsable des projets et la durée maximale de participation d un employé à ce projet? SELECT Pno, Pname, resp, MAX(Dur)=>INTERDIT, pas de clé de, Project Works dans GROUP BY WHERE Works.Pno=Project.Pno GROUP BY Pno, Pname 15 Pour garder (éliminer) les groupes (partitions) qui satisfont (ne satisfont) pas une certaine condition : SELECT A i,, A n, agg1,agg,... FROM R 1,, R m WHERE P GROUP BY A j, A k HAVING Q ; Principe : une fois la requête FROM-WHERE exécutée, on regroupe en agrégat avec le GROUP BY et on ne garde ensuite que les agrégats satisfaisants le HAVING 16

Ordre d'exécution des clauses : 5 SELECT 1 FROM WHERE GROUP BY 4 HAVING 6 ORDER BY Remarques Conséquence : à partir de on manipule des agrégats donc pour 4, 5 et 6 on ne manipule que des fonctions d'agrégations ou des attributs apparaissant dans le GROUP BY Exemples de groupement (1) Villes dans lesquelles habitent plus de employés? SELECT City GROUP BY City HAVING COUNT(ENO) > ; Projets demandant plus de 1000 jours/homme? SELECT Pno, Pname FROM Project, Works WHERE Projet.Pno=Work.Pno GROUP BY Pno, Pname HAVING SUM(Dur) > 1000 ; 17 18 Exemples de groupement () Numéros et noms des projets ayant des employés venant de plus de 5 villes différentes? SELECT Pno, Pname FROM Project, Works, Emp WHERE Projet.Pno=Work.Pno AND Work.Eno=Emp.Eno GROUP BY Pno,Pname HAVING COUNT(DISTINCT Emp.City) > 5 ; Liste des employés triés par temps total de travail décroissants? SELECT Eno, Ename, SUM(Dur), Emp WHERE Work.Eno=Emp.Eno GROUP BY Eno,Ename ORDER BY SUM(Dur) DESC ; 19 Imbrication de fonctions d'agrégation On peut imbriquer dans le SELECT deux fonctions d'agrégation : agg1(agg [DISTINCT] att) Où agg1 : MIN, MAX ou AVG Il faut que l'agrégat interne soit associé à un GROUP BY L'agrégat externe agg1 s'applique au résultat que retournerait la requête avec uniquement agg et le GROUP BY. Agg1 n'est donc pas associé au GROUP BY Attention : pas implanté dans tous les systèmes! 0

Exemples de groupement () Exemples de groupement (4) Effectif maximal des projets SELECT MAX(COUNT(*)) GROUP BY Pno ; Nombre moyen d'employés provenant de chaque ville? SELECT AVG(COUNT(*)) GROUP BY City ; Comment connaître le nom du (des) projet(s) avec le plus de travailleurs? SELECT Pno,MAX(COUNT(*)) GROUP BY Pno ; => INTERDIT! Le GROUP BY sert pour le COUNT, pas de GROUP BY pour le MAX, donc pas Pno dans le SELECT Solution? Il faut imbriquer! SELECT Pno,COUNT(*) GROUP BY Pno HAVING COUNT(*)= (SELECT MAX(COUNT(*)) GROUP BY Pno) ; 1 Division à l'aide de l'agrégation On souhaite connaître les employés ayant travaillé sur tous les projets Rappel : on calcule les employés pour lesquels il n'existe pas de projets auxquels ils n'ont pas participé Soit une double-négation! Exemples de division (1) Quels sont les employés ayant travaillé sur tous les projets? SELECT Eno,Ename FROM Project FROM Work WHERE Work.Eno=Emp.Eno AND Work.Pno=Project.Pno)); Bien observer que la (les) table(s) faisant le lien entre les autres tables se trouve(nt) dans la ème imbrication et réalise(nt) les jointures 4

Exemples de division () Exemples de division () Quels sont les villes dans lesquelles tous les salaires d'employés sont représentés? SELECT DISTINCT City A B WHERE B.Title=Pay.Title AND B.City=A.City)); Quels sont les projets parisiens pour lesquels toutes les professions gagnant plus de 000 euros ont participé? SELECT Pno,Pname FROM Projet WHERE City='Paris' AND NOT EXISTS (SELECT * WHERE Salary>000 AND NOT EXISTS (SELECT * FROM Work, Emp WHERE Work.Eno=Emp.Eno AND Work.Pno=Project.Pno AND Emp.Title=Pay.Title)); 5 6 Division : autre solution Une autre solution pour faire la division repose sur les agrégats On procède en étapes : On compte le nombre d'enregistrements correspondant à l'ensemble de référence On compte pour chaque candidat potentiel à combien d'éléments de l'ensemble de référence il peut être associé Si c'est égal au total, on retourne ce candidat Exemples de division avec agrégats(1) Quels sont les employés ayant travaillé sur tous les projets? SELECT Eno,Ename FROM Project FROM Work WHERE Work.Eno=Emp.Eno AND Work.Pno=Project.Pno)) ; SELECT Eno,Ename, Work WHERE Emp.Eno=Work.Eno GROUP BY Eno, Ename HAVING COUNT(DISTINCT Pno)=(SELECT COUNT(*) FROM Projet); utilisation indispensable du GROUP BY dans ce type de division 7 8

Exemples de division avec agrégats() Quels sont les villes dans lesquelles tous les salaires d'employés sont représentés? SELECT City A B WHERE B.Title=Pay.Title AND B.City=A.City)); Exemples de division avec agrégats() Quels sont les villes dans lesquelles tous les salaires d'employés sont représentés? SELECT City, Pay WHERE Emp.Title=Pay.Title GROUP BY City HAVING COUNT(DISTINCT Salary) = (SELECT COUNT(DISTINCT Salary) ); 9 0 Exemples de division avec agrégats(4) Quels sont les projets parisiens pour lesquels toutes les professions gagnant plus de 000 euros ont participé? SELECT Pno,Pname FROM Projet, Work, Emp, Pay WHERE Projet.City='Paris' AND Projet.Pno=Work.Pno AND Work.Eno=Emp.Eno AND Emp.Title=Pay.Title AND Salary>000 GROUP BY Pno, Pname HAVING COUNT(DISTINCT Title)= (SELECT COUNT(Title) WHERE Salary>000); 1