Opération DIVISION. Huit opérations de base de l algèbre relationnelle. SELECT [ALL] [DISTINCT] liste d'attributs FROM table



Documents pareils
Le langage SQL Rappels

Cours: Les Jointures 1

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

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

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

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

Langage SQL : créer et interroger une base

1 Introduction et installation

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

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

1. LA GESTION DES BASES DE DONNEES RELATIONNELLES

Année Universitaire 2009/2010 Session 2 de Printemps

Cours 4 : Agrégats et GROUP BY

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

Le Langage SQL version Oracle

TP Bases de données réparties

INTRODUCTION AU DATA MINING

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

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

16H Cours / 18H TD / 20H TP

Les bases de données

Magasins et entrepôts de données (Datamart, data warehouse) Approche relationnelle pour l'analyse des données en ligne (ROLAP)

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

Systèmes de Gestion de Bases de Données

SQL Historique

Bases de données relationnelles

A QUOI SERVENT LES BASES DE DONNÉES?

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

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

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

ÉTUDE DE CAS. Durée : 5 heures Coefficient : 5 CAS FEFORT ÉLÉMENTS DE CORRECTION

A QUOI SERVENT LES BASES DE DONNÉES?

Introduction aux Bases de Données 2004/2005

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

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

Exemple accessible via une interface Web. Bases de données et systèmes de gestion de bases de données. Généralités. Définitions

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

ISC Système d Information Architecture et Administration d un SGBD Compléments SQL

MODE OPERATOIRE OPENOFFICE BASE

Introduction à la B.I. Avec SQL Server 2008

BD et XML : Exercices

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

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

SQL Server et Active Directory

MapReduce. Malo Jaffré, Pablo Rauzy. 16 avril 2010 ENS. Malo Jaffré, Pablo Rauzy (ENS) MapReduce 16 avril / 15

Plan Général Prévisionnel (1/2) (non contractuel) Internet et Outils L1/IO S2-IO2 Bases de données: Jointures, Transactions

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

Chapitre Introduction : Notion de Bases de données. 2. Définition : BD Répartie. 3. Architecture des SGBD. 4. Conception des bases réparties

BTS/CGO P10 SYSTEME INFORMATION Année

Bases de Données. Plan

TP 8: LES OPERATEURS ENSEMBLISTES

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

IFT3030 Base de données. Chapitre 1 Introduction

Bases de données avancées Introduction

Bases de Données Relationnelles. Le Modèle Relationnel

COMPRENDRE LES DIFFERENTS TYPES DE CONNEXION LORS DE LA

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

Entrepôt de données 1. Introduction

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

Optimisation SQL. Quelques règles de bases

Chapitre VIII. Les bases de données. Orientées Objet. Motivation

Interpréteur d algèbre relationnelle

Cours Bases de données 2ème année IUT

Création de Sous-Formulaires

Modélisation de bases de données : Le modèle relationnel

Présentation Windows Azure Hadoop Big Data - BI

Ecole Polytechnique de Louvain INGI Fichiers et bases de données

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

SQL sous SqlServer OLIVIER D. DEHECQ Olivier 0

LA GESTION DES VUES 1. INTRODUCTION

Bases de Données. Stella MARC-ZWECKER. Maître de conférences Dpt. Informatique - UdS

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

TP2_1 DE BUSINESS INTELLIGENCE ISIMA ZZ3 F3

Partie I : Créer la base de données. Année universitaire 2008/2009 Master 1 SIIO Projet Introduction au Décisionnel, Oracle

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

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

FileMaker 13. Guide de référence SQL

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

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

Formation Webase 5. Formation Webase 5. Ses secrets, de l architecture MVC à l application Web. Adrien Grand <jpountz@via.ecp.fr> Centrale Réseaux

Les bases de données Page 1 / 8

SGBDR. Systèmes de Gestion de Bases de Données (Relationnelles)

Bases de données - Modèle relationnel

Exercices et solutions

Programmes des classes préparatoires aux Grandes Ecoles

Le Langage De Description De Données(LDD)

Comprendre les bases de données

SESSION 2014 ÉPREUVE À OPTION. (durée : 4 heures coefficient : 6 note éliminatoire 4 sur 20)

Bases de Données OLAP

I4 : Bases de Données

Quelques aspects du Relationnel-Objet du SGBD Oracle

SQL pour. Oracle 10g. Razvan Bizoï. Tsoft, Groupe Eyrolles, 2006, ISBN : , ISBN 13 :

Intégrité des données

Évaluation et optimisation de requêtes

Compte-rendu de projet de Système de gestion de base de données

Comprendre et optimiser la base de données WordPress WP TECH 2014

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

Transcription:

Opération DIVISION Huit opérations de base de l algèbre relationnelle PROJECTION SELECTION JOINTURE SELECT [ALL] [DISTINCT] liste d'attributs FROM table SELECT liste d'attributs FROM table WHERE condition SELECT liste d'attributs FROM table1 JOIN table2 ON table1.attribut1=table2.attribut1...ou WHERE DIVISION??? UNION SELECT liste d'attributs FROM table UNION SELECT liste d'attributs FROM table INTERSECTION SELECT liste d'attributs FROM table INTERSECT SELECT liste d'attributs FROM table ou WHERE avec NOT IN

DIFFERENCE PRODUIT SELECT liste d'attributs FROM table EXCEPT SELECT liste d'attributs FROM table SELECT * FROM table1, table2 (pas de where) ou SELECT * FROM table1 CROSS JOIN table2 Il n'existe pas en SQL d'équivalent direct à la division! Recherche d une autre solution

Exemple 1 : Une entreprise de la grande distribution possède des entrepôts dans différentes villes de France. Ces entrepôts peuvent abriter les produits de différents rayons. Question: quels sont les entrepôts capables de servir TOUS les rayons?

Exemple 1 (suite) :

Exemple 1 (suite) : Réponse : TOULOUSE et MARSEILLE Il suffit de trouver les entrepôts qui sont reliés à TOUS les rayons. Table des rayons : - nom : T_RAYON - attribut RYN Tables des entrepôts : - nom : T_ENTREPOT - attributs : - VILLE_ETP - RAYON_RYN Solution : division de T_ENTREPOT par T_RAYON

Implémentation 1 : Idée : compter le nombre d'occurrences des rayons et de le faire coïncider avec le dénombrement des rayons des différents entrepôts : SELECT VILLE_ETP FROM T_ENTREPOT GROUP BY VILLE_ETP HAVING COUNT(*) = (SELECT COUNT(*) FROM T_RAYON) Résultat : MARSEILLE, TOULOUSE Cette solution est correcte uniquement si : 1. il n'y a aucune redondance de données dans la table diviseur (RYN est unique) 2. il n'y a pas de rayon en sus pour un entrepôt, non recensé dans la table T_RAYON Résolution problème 1 : HAVING COUNT(*) = (SELECT COUNT(DISTINCT RYN) FROM T_RAYON)

Implémentation 2 (double négation): SELECT DISTINCT VILLE_ETP FROM T_ENTREPOT AS ETP1 WHERE NOT EXISTS (SELECT * FROM T_RAYON RYN WHERE NOT EXISTS (SELECT * FROM T_ENTREPOT AS ETP2 WHERE ETP1.VILLE_ETP = ETP2.VILLE_ETP AND (ETP2.RAYON_RYN = RYN.RAYON_RYN))) Cette requête recherche les entrepôts pour qui il n'existe pas de rayon qu'ils ne peuvent pas fournir

Implémentation 3 (différence entre tables) : Solution plus rapide: SELECT DISTINCT VILLE_ETP FROM T_ENTREPOT AS ETP1 WHERE (SELECT RAYON_RYN FROM T_RAYON EXCEPT SELECT RAYON_RYN FROM T_ENTREPOT AS ETP2 WHERE ETP1.VILLE_ETP = ETP2.VILLE_ETP ) IS NULL

Implémentation 3 (division exacte) : Utilisation de la division soit "exacte", c'est à dire que la table dividende corresponde exactement avec les valeurs du diviseur, ni plus ni moins. Trouver quels sont les entrepôts qui disposent de tous les rayons de la table T_RAYON, mais aussi d'aucun autre. Utilisation de la double négation : SELECT VILLE_ETP FROM T_ENTREPOT ETP1 WHERE NOT EXISTS (SELECT * FROM T_RAYON WHERE NOT EXISTS (SELECT * FROM T_ENTREPOT ETP2 WHERE (ETP1.VILLE_ETP = ETP2.VILLE_ETP) AND (ETP2.RAYON_RYN = T_RAYON.RAYON_RYN))) GROUP BY VILLE_ETP HAVING COUNT (*) = (SELECT COUNT(*) FROM T_RAYON)

Exemple 2 : Tables : PARTICIPER EPREUVE Athlète Epreuve Epreuve Les athlètes ayant participé au moins à toutes les épreuves de la table EPREUVE SELECT Athlète FROM PARTICIPER GROUP BY Athlète HAVING COUNT(*) = (SELECT COUNT(DISTINCT Epreuve) FROM EPREUVE) ;

Les athlètes qui ont participé uniquement aux épreuves de la table EPREUVE et à aucune autre (Division "exacte"), ici Martin. Basé sur une jointure externe (SQL2) et utilisation la particularité des fonctions d'agrégation d'ignorer les valeurs nulles. SELECT Athlète FROM PARTICIPER A LEFT JOIN (SELECT DISTINCT Epreuve FROM EPREUVE) B ON A.Epreuve = B.Epreuve GROUP BY Athlète HAVING COUNT(*) = (SELECT COUNT(DISTINCT Epreuve) FROM EPREUVE) AND COUNT(B.Epreuve) = (SELECT COUNT(DISTINCT Epreuve) FROM EPREUVE) ;

Voici un résultat renvoyé par la jointure externe gauche (LEFT JOIN) entre PARTICIPER et EPREUVE : Athlète A.Epreuve B.Epreuve Dupont 200 m 200 m Dupont 400 m 400 m Dupont 110 m H 110 m H Dupont 100 m NULL Martin 200 m 200 m Martin 400 m 400 m Martin 110 m H 110 m H Bertrand 400 m 400 m Bertrand 200 m 200 m Michel 200 m 200 m Ensuite le regroupement avec comptage renvoie : Athlète COUNT(*) COUNT(B.Epreuve) Dupont 4 3 Martin 3 3 Bertrand 2 2 Michel 1 1

Autre type de solution (plus élégante) basée sur la double négation et les SELECT imbriqués et corrélés : SELECT Athlète FROM PARTICIPER A WHERE NOT EXISTS (SELECT * FROM EPREUVE WHERE NOT EXISTS (SELECT * FROM PARTICIPER B WHERE (A.Athlète = B.Athlète) AND (B.Epreuve = EPREUVE.Epreuve))) GROUP BY Athlète HAVING COUNT(*) = (SELECT COUNT (DISTINCT Epreuve) FROM EPREUVE) ;