346 CHAPITRE 8. BASES DE DONNÉES, LANGAGE SQL

Documents pareils
Le langage SQL Rappels

1 Introduction et installation

SQL Historique

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

Langage SQL : créer et interroger une base

1. LA GESTION DES BASES DE DONNEES RELATIONNELLES

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

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

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

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

Les bases de données

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

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

MODE OPERATOIRE OPENOFFICE BASE

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

Systèmes de Gestion de Bases de Données

Bases de données relationnelles

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

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

16H Cours / 18H TD / 20H TP

TP Bases de données réparties

Dossier I Découverte de Base d Open Office

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

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

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

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

BTS/CGO P10 SYSTEME INFORMATION Année

Cours 4 : Agrégats et GROUP BY

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

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

FORD C-MAX + FORD GRAND C-MAX CMAX_Main_Cover_2013_V3.indd /08/ :12

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

Le Langage De Description De Données(LDD)

Optimisation SQL. Quelques règles de bases

CREATION WEB DYNAMIQUE

MySQL / SQL EXEMPLES

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

Vincent Augusto

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

Celestia. 1. Introduction à Celestia (2/7) 1. Introduction à Celestia (1/7) Université du Temps Libre - 08 avril 2008

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Auto-évaluation SQL. Document: f0453test.fm 19/04/2012. ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium

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

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

Sommaire. I.1 : Alimentation à partir d un fichier Access (.mdb)...2

Le Langage SQL version Oracle

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

COMPRENDRE LES DIFFERENTS TYPES DE CONNEXION LORS DE LA

A QUOI SERVENT LES BASES DE DONNÉES?

Olivier Mondet

3W Academy Programme de Formation Développeur Intégrateur web Total : 400 heures

Mysql avec EasyPhp. 1 er mars 2006

Base de données relationnelle et requêtes SQL

PHP 5. La base de données MySql. A. Belaïd 1

Exploiter les statistiques d utilisation de SQL Server 2008 R2 Reporting Services

1. SAS FEDERATION SERVER - POINT D'ACCES UNIQUE ET SECURISE AUX DONNEES DE L'ENTREPRISE

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

Mise en oeuvre d'une base de données mono-utilisateur avec SQLite

Les bases de l optimisation SQL avec DB2 for i

Introduction aux Bases de Données 2004/2005

Année Universitaire 2009/2010 Session 2 de Printemps

SQL sous SqlServer OLIVIER D. DEHECQ Olivier 0

FORMATION A L UTILISATION DE PMB QUELQUES NOTIONS DE SQL

Comprendre l Univers grâce aux messages de la lumière

2 Serveurs OLAP et introduction au Data Mining

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

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

Session S12 Les bases de l optimisation SQL avec DB2 for i

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

Réplication E-maj Foreign Data Wrapper PostGIS PostgreSQL-f

Performance web. Mesurer. Analyser. Optimiser. Benjamin Lampérier - Benoît Goyheneche. RMLL Beauvais. 8 Juillet 2015

Whitepaper. Méthodologie de création de rapports personnalisés SQL Server Reporting Services

Bases de Données. Plan

OLAP : Mondrian + Pentaho. Maguelonne Teisseire Hugo Alatrista Salas hugo.alatrista- salas@teledetec9on.fr Flavien Bouillot

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

SUGARCRM MODULE RAPPORTS

Les Entrepôts de Données

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

Jean-François Boulicaut & Mohand-Saïd Hacid

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

TP2_1 DE BUSINESS INTELLIGENCE ISIMA ZZ3 F3

Les BASES de DONNEES dans WampServer

SQL Server et Active Directory

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

Bases de données Page 1 de 11. Bases de données. Prof. : Dzenan Ridjanovic

Administration de Bases de Données : Optimisation

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

Support de cours. Introduction à SQL et MySQL. 2003, Sébastien Namèche

Java DataBaseConnectivity

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

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

Les bases fondamentales du langage Transact SQL

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

INFO 364 : Bases de Données Projet Professeur : Esteban Zimányi Assistants : Pierre Stadnik et Mohammed Minout Année Académique :

Comprendre les bases de données

Transcription:

346 CHAPITRE 8. BASES DE DONNÉES, LANGAGE SQL Corrigé n 8.6 de l exercice 8.6 Cet exercice présente une base dont le schéma est simple. Il a pour but de vous exercer à construire des requêtes. Le schéma de la table astre par exemple, suppose que l on sait nommer les étoiles sans ambiguïté et que les noms ne changeront pas au cours de la vie de la base, ce qui nous permettra de choisir l attribut astre.nomastre comme identifiant ou clé primaire dans cette la table. Ce n est peut être pas (sûrement pas ce que nous ferions pour une base en taille réelle destinée à durer des décennies. Nous n abordons pas non plus les problèmes pratiques liés à la représentation des données numériques dans une base de données 2. 1. Choix de clés primaires. astre(nomastre, Diamètre : On choisira astre.nom. Le couple (nomastre, Diamètre est une réponse acceptable sur le plan de la syntaxe, mais moins pertinente si nous voulons des clés étrangères vers la table Astre dans les autres tables (telles qu elles sont. planète (nomastre, nomplanète, diamètre, masse, tempsrévolution : On choisira pour clé l attribut nomplanète (sans hésiter, si on sait que, selon certaines conventions des astrophysiciens, c est un identifiant formé du nom du système stellaire suivi du nom de la planète... A défaut, le couple (nomastre, nomplanète est aussi acceptable (mais même remarque pour le choix des clés étrangères. astrophysicien (nom, prénom, pays : C est plus délicat, des homonymies sont fort possibles, on choisira (astrophysicien.nom, astrophysicien.prénom. Une date de naissance aurait réduit les risque de collision. Mais on ne touche pas au schéma de la table avons nous dit! astéroïde(nomastéroïde, masse, nom, prénom : le nom devrait suffire (si la façon de nommer est bijective, ce que l on supposera. collision (nomastre, nomplanète, nomastéroïde, date : là il est certain que les attributs nomplanète, nomastéroïde sont nécessaires. Peut il y avoir plusieurs dates de collision? Si oui la clé primaire (nomplanète, nomastéroïde, date s impose. Deux réponses acceptables. 2. Clés étrangères : astre(nomastre, Diamètre : pas de clé étrangère ; planète (nomastre, nomplanète, diamètre, masse, tempsrévolution : clé étrangère vers la table astre nomastre ; astrophysicien (nom, prénom, pays : pas de clé étrangère ; astéroïde(nomastéroïde, masse, nom, prénom : clé étrangère vers la table astrophysicien : (astéroïde.nom, astéroïde.prénom collision (nomastre, nomplanète, nomastéroïde, date : deux clés étrangères, l un vers la table Astre (c est collision.nomastre et vers la table Planète (c est collision.nomplanète. 2. Que l on rencontrerait vite ici dans MySQL avec les masses des astres qui, comme chacun le sait sont astronomiques Essayez de taper la masse du soleil :1.9891 10 30 kg sous MySQL.

8.7. CORRECTION DES EXERCICES 347 3. (a Recherche des noms des astres de diamètre supérieur à10 6 km (remplacé ici par 0.72 diamètre du soleil : en pratique on aura intérêt à introduire les grandeurs physiques des astres en rayon solaire, masse solaire... : SELECT nomastre FROM astre WHERE diamètre > 0.72 (b Planètes du système solaire et dont le temps de révolution dépasse les 500 jours (terrestres! : SELECT nomplanète WHERE nomastre = Soleil AND tempsrévolution > 500 4. (a La question mériterait d être précisée (pour une proposition de sujet blanc!. - C est une simple sélection projection si on ne veut que les noms des découvreurs : SELECT DISTINCT nom FROM astéroïde - Si par contre, on veut toutes leurs coordonnées, il faudra réaliser une jointure entre deux tables : SELECT FROM WHERE DISTINCT astrophysicien.nom, astrophysicien.prénom, astrophysicien.pays astéroïde JOIN astrophysicien astéroïde.nom = astrophysicien.nom Ce que l on peut encore écrire : SELECT FROM ON DISTINCT astrophysicien.nom, astrophysicien.prénom astrophysicien JOIN astéroïde astéroïde.nom = astrophysicien.nom

348 CHAPITRE 8. BASES DE DONNÉES, LANGAGE SQL Il est préférable d ajouter la clause DISTINCT pour le cas des multidécouvreurs... (b On fera une projection-sélection sur la différence entre la table astrophysicien et la sous-table obtenue par la même projection-sélection sur le résultat d une jointure. SELECT DISTINCT astrophysicien.nom, astrophysicien.prénom FROM astrophysicien WHERE astrophysicien.nom NOT IN ( SELECT astrophysicien.nom FROM astrophysicien JOIN astéroïde ON astéroïde.nom = astrophysicien.nom (c Allons y par étapes sachant que l on cherche le complémentaire, dans l ensemble des astres, du sous-ensemble des astres dont une planète est sans collision. Nous chercherons dans l ordre : i. les planètes avec collision(s ; ii. les planètes sans collision ; iii. les astres dont une planète est sans collision ; iv. les astres qui ont une planète renseignée au moins et dont toutes les planètes ont une collision 3 ; ON planète.nomplanète = collision.nomplanète On passe au complémentaire : ON (planète.nomplanète = collision.nomplanète 3. Attention à la propriété toujours vraie si E = : x E, P(x.

8.7. CORRECTION DES EXERCICES 349 On observera que l on aurait pu écrire *** placer ici la requête précédente *** Les astres dont une planète est sans collision : Dans le cas où l on ne veut que les noms, il suffit de faire : SELECT planète.nomastre JOIN collision ON (planète.nomplanète = collision.nomplanète Les astres dont une planète est sans collision bis : si nous voulons accéder à la table astre elle même, il nous faudra joindre les tables astre, planète et collision : SELECT astre.nomastre, astre.diamètre ON astre.nomastre = planète.nomastre ON (planète.nomplanète = collision.nomplanète Enfin, le complémentaire :

350 CHAPITRE 8. BASES DE DONNÉES, LANGAGE SQL SELECT DISTINCT planète.nomastre WHERE planète.nomastre NOT IN ( SELECT planète.nomastre ON (planète.nomplanète = collision.nomplanète A nouveau le complémentaire dans l ensemble des astres ayant une planète renseignée au moins, de la table des astres dont une planète est sans collision : là il nous faut trois jointures (pour un astre, toutes les planètes doivent avoir été explorées (au sens de la base de données, cela va de soi. SELECT astre.nomastre ON astre.nomastre =planète.nomastre WHERE astre.nomastre NOT IN ( SELECT astre.nomastre ON astre.nomastre = planète.nomastre ON (planète.nomplanète = collision.nomplanète Attention : la requête qui suit renvoie aussi les astres sans planète renseignée dans la base :

8.7. CORRECTION DES EXERCICES 351 SELECT astre.nomastre FROM astre WHERE astre.nomastre NOT IN ( SELECT astre.nomastre ON astre.nomastre = planète.nomastre ON (planète.nomplanète = collision.nomplanète 5. Fonctions d agrégation et comptage. (a Pour afficher les astrophysiciens qui ont découvert un astéroïde, la clause GROUP BY permet de regrouper en une ligne ceux qui en ont découvert plus d un : SELECT astrophysicien.nom, astrophysicien.prénom FROM astrophysicien JOIN astéroïde ON astéroïde.nom = astrophysicien.nom GROUP BY astrophysicien.nom, astrophysicien.prénom Pour compter le nombre d astéroïdes découvert par chacun d eux ; COUNT(... permet de dénombrer les nombre de tuples regroupés sur une même ligne dans la requête précédente : SELECT astrophysicien.nom, astrophysicien.prénom, COUNT(astéroïde.nom FROM astrophysicien JOIN astéroïde ON astéroïde.nom = astrophysicien.nom GROUP BY astrophysicien.nom, astrophysicien.prénom (b Astres et planètes dans la base. Avançons toujours à petits pas. Le nombre de planètes par astre (identifié par son nom. Tout simplement, si on ne veut que le nom qui est renseigné dans collision :

352 CHAPITRE 8. BASES DE DONNÉES, LANGAGE SQL SELECT planète.nomastre, COUNT(* GROUP BY planète.nomastre Si par contre, on souhaite avoir accès à la table astre elle même il nous faudra faire un jointure : SELECT astre.nomastre, astre.diamètre, COUNT(planète.nomAstre ON (astre.nomastre = planète.nomastre GROUP BY astre.nomastre Réponse alternative On trie dans l ordre DESCendant : SELECT astre.nomastre, COUNT(planète.nomAstre ON (astre.nomastre = planète.nomastre GROUP BY astre.nomastre ORDER BY COUNT(planète.nomAstre DESC On affiche un seul résultat avec LIMIT... (page 327- ou p327 première édition : SELECT astre.nomastre, COUNT( planète.nomastre FROM astre JOIN planète ON ( astre.nomastre = planète.nomastre GROUP BY astre.nomastre ORDER BY COUNT( planète.nomastre DESC LIMIT 0, 1 Une meilleure réponse. Arrivés là, nous observons qu il peut y avoir plusieurs astres correspondant à ce maximum, ; cette façon de faire n est donc pas pleinement satisfaisante. Pensons donc à la clause HAVING (page 333 ou 333 première édition. On sélectionne avec HAVING, parmi les astres précédemment sélection-