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



Documents pareils
COMMANDES SQL... 2 COMMANDES DE DEFINITION DE DONNEES... 2

Bases de données relationnelles

Le langage SQL Rappels

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

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

SQL Historique

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

Langage SQL : créer et interroger une base

Cours 4 : Agrégats et GROUP BY

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

1 Introduction et installation

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

Devoir Data WareHouse

Le Langage SQL version Oracle

1. LA GESTION DES BASES DE DONNEES RELATIONNELLES

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

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

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

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

Gestion de base de données

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

Le langage SQL pour Oracle - partie 1 : SQL comme LDD

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

Partie 0 : Gestion des tablespace et des utilisateurs... 3

A QUOI SERVENT LES BASES DE DONNÉES?

Olivier Mondet

Le Langage De Description De Données(LDD)

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

1. Base de données SQLite

FileMaker 13. Guide de référence SQL

Présentation Windows Azure Hadoop Big Data - BI

16H Cours / 18H TD / 20H TP

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

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

Les Triggers SQL. Didier DONSEZ. Université de Valenciennes Institut des Sciences et Techniques de Valenciennes

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

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

SQL sous SqlServer OLIVIER D. DEHECQ Olivier 0

Optimisation SQL. Quelques règles de bases

1 Position du problème

Modélisation PHP Orientée Objet pour les Projets Modèle MVC (Modèle Vue Contrôleur) Mini Framework

Vincent Augusto

TP 8: LES OPERATEURS ENSEMBLISTES

BTS/CGO P10 SYSTEME INFORMATION Année

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

TP3 : Creation de tables 1 seance

Le langage SQL (première partie) c Olivier Caron

Systèmes de Gestion de Bases de Données

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

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

Corrigés détaillés des exercices

Création et Gestion des tables

MySQL / SQL EXEMPLES

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

CREATION WEB DYNAMIQUE

Historisation des données

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

A QUOI SERVENT LES BASES DE DONNÉES?

Les bases de données

Groupe 11 TABLE DES MATIERES

TP Contraintes - Triggers

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

Introduction aux Bases de Données 2004/2005

Mysql avec EasyPhp. 1 er mars 2006

UNIVERSITE DE CONSTANTINE 1 FACULTE DES SIENCES DE LA TECHNOLOGIE DEPARTEMENT D ELECTRONIQUE 3 ème année LMD ELECTRONIQUE MEDICALE

I4 : Bases de Données

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

A.E.C. GESTION DES APPLICATIONS TECHNOLOGIE DE L'INFORMATION LEA.BW

Exercices et solutions

Compétences Business Objects

FORMATION A L UTILISATION DE PMB QUELQUES NOTIONS DE SQL

MODE OPERATOIRE OPENOFFICE BASE

Objectifs du TP : Initiation à Access

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

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

Installation d'un serveur FTP géré par une base de données MySQL

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

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

Notes de cours : bases de données distribuées et repliquées

PHP. Bertrand Estellon. 26 avril Aix-Marseille Université. Bertrand Estellon (AMU) PHP 26 avril / 214

I. MySQL : Serveur et SGBD

Bases de données. PTSI Lycée Eiffel. 28 février 2014

Bases de Données Avancées

OpenPaaS Le réseau social d'entreprise

Système de Gestion de Bases de Données Relationnelles. MySQL. Youssef CHAHIR

Thème : Gestion commerciale

Licence de MIDO - 3ème année Spécialités Informatique et Mathématiques Appliquées

SUPPORT SQL. Thierry GRANDADAM

Intégrité des données

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

Auto-évaluation Oracle: cours de base

Comment Connecter une Base de Données MySQL via un Driver JDBC Avec OpenOffice.org

Comprendre les bases de données

UML et les Bases de Données

Pratique et administration des systèmes

Procédures Stockées WAVESOFT ws_sp_getidtable Exemple : ws_sp_getnextsouche Exemple :... 12

Transcription:

TD : Requêtes SQL (BDR.TD2-1) INSA 3IF 2008-2009 Loïc Maisonnasse 1 Objectif Ce TD a pour objectif de vous familiariser avec le langage de requêtes SQL. Et de vous apprendre à écrire des requêtes SQL pour rechercher des informations précises dans une base de données en utilisant les différents opérateurs de SQL. 2 Exercice 1 2.1 Schéma Soit la base de données suivante permettant de gérer les consultations entre des médecins identifiés par leurs numéros RPPS (répertoire partagé des professionnels de santé) et des patients identifiés par leur numéro de sécurité social et associés à un médecin traitant. PATIENT (numss, nomp, prenomp, sexe, datenaiss, numrpps#) Le patient est identifié par son numss numéro de sécurité social et son médecin traitant est numrpps MEDECIN (numrpps, nomm, prenomm, specialite, ville, adresse) Le médecin est identifié par numrpps et il peut avoir une spécialité CONSULTE (numrpps#, numss#, date, diagnostic,numord#) Un patient consulte un médecin à une certaine date. Le médecin effectue un diagnostic et lui prescrit une ordonnance dont l'identifiant est numord. 2.2 Requêtes Écrire en SQL les requêtes qui permettent d effectuer les actions suivantes : 1) Afficher la liste de tous les médecins SELECT * 2) Afficher le nom et le prénom de tous les patients, trier par ordre inverse sur les noms; SELECT nomp, prenomp ORDER BY nom DESC ; 3) Afficher le nom, le prénom et la spécialité de tous les médecins de Lyon, si le médecin n a

pas de spécialité, afficher généraliste ; SELECT nomm, prénomm, nvl(specialite, 'généraliste') AS Spé WHERE ville='lyon' 4) Afficher tous les patients nés après le 01/05/1985 ; SELECT nomp, prenomp WHERE datenaiss>'1985-05-01' 5) Afficher le nom et le prénom des médecins dont la spécialité contient la chaîne "logue" ; SELECT nomm, prénomm WHERE specialite LIKE '%logue%' ; 6) Afficher les prénoms des patients dont le nom est Dupont, Durant ou Martin ; SELECT prenom WHERE nom IN ('Dupont', 'Durant', 'Martin') ; 7) Afficher le nombre de médecins à Lyon ; SELECT COUNT(*) WHERE ville='lyon' ; 8) Afficher la liste des consultations qui n ont pas donné lieu à une ordonnance; SELECT * FROM CONSULT WHERE numord is null; 9) Afficher tous les médecins qui ont la même spécialité et qui sont dans la même ville que le médecin Paul DESMON ; SELECT nomm, prenomm WHERE (specialite, ville) = (SELECT specialite, ville WHERE nomm= DESMON AND prenomm= Paul ; 10) Afficher la liste des patients (nom, prénom) avec le nom de leur médecin traitant, par ordre alphabétique inverse sur les noms puis sur les prénoms ; SELECT nomp, prenomp, nomm, MEDECIN WHERE PATIENT.numRPPS=MEDECIN.numRPPS ORDER BY nomp desc, prenomp desc;

11) Afficher pour chaque patient (nom, prénom) le nom et le prénom des médecins qu il a consulté ;, nomm, MEDECIN, CONSULT WHERE PATIENT.numSS=CONSULTE.numSS AND CONSULTE.numRPPS=MEDECIN.numRPPS; 12) Afficher le nombre de consultations de chaque médecin (numrpps) pour la journée du 14-10-2008, étiqueter cette colonne nbconsult ; SELECT numrpps, COUNT(*) as ( nbconsult ) FROM CONSULTE WHERE date= 14-10-2008 GROUP BY numrpps; 13) Numéro de sécurité sociale du patient qui a le plus de consultations ; SELECT numss FROM CONSULTE GROUP BY numss HAVING COUNT(*)= (SELECT MAX(COUNT(*)) FROM CONSULT GROUP BY numss) 14) Afficher tous les patients (numss, nom, prénom) qui ont consulté un autre médecin que leur médecin traitant ; SELECT numss, nomp, prénomp p WHERE EXISTS (SELECT * FROM CONSULTE WHERE numss=p.numss AND numrpps!=p.numrpps); SELECT numss, nomp, prénomp FROM CONSULTE, PATIENT WHERE PATIENT.numRPPS <> CONSULT.numRPPS AND PATIENT.numSS=CONSUL.numSS ; 15) Afficher le nom et le prénom du ou des médecins qui sont médecins traitants du plus grand nombre de patients ; SELECT DISTINCT nomm, prénomm WHERE MEDECIN.numRPPS = (SELECT numrpps GROUP BY numrpps HAVING COUNT(numSS) = (SELECT MAX(COUNT(numSS)) GROUP BY numrpps)); 16) Afficher tous les patients (nom, prénom) qui ont consulté le médecin ayant le numrpps 12345 entre le 18-06-2008 et le 17-07-2008 ;

SELECT nomp, prenomp WHERE numss IN (SELECT numss FROM CONSULTE WHERE numrpps='12345' AND date BETWEEN '18-06-2008' AND '17-07-2008') ; 17) Afficher tous les patients (nom, prénom) qui ont consulté le médecin ayant le numrpps 12345 le 18-06-2008 et le 17-07-2008 ;, CONSULT AS c1, CONSULT AS c2 WHERE PATIENT.numSS = c1.numss AND PATIENT.numSS = c2.numss AND c1.numrpps = c2.numrpps AND c2.numrpps = 12345 AND c1.date = 18-06-2008 AND c2.date = 17-07-2008, CONSULT WHERE PATIENT numss = CONSULT.numSS AND date = 18-06-2008 INTERSECT, CONSULT WHERE PATIENT numss = CONSULT.numSS AND date = 17-07-2008 18) Liste des patients qui ont consulté au moins deux médecins de la même spécialité le même jour ;, CONSULTE, MEDECIN WHERE PATIENT.numSS = CONSULTE.numSS AND CONSULTE.numRPPS = MEDECIN.numRPPS GROUP BY CONSULTE.numSS, CONSULTE.date, MEDECIN.spécialité HAVING COUNT(DISTINCT numrpps) > 2 ; P WHERE (SELECT COUNT(DISTINCT numrpps) FROM CONSULTE, MEDECIN WHERE CONSULTE.numRPPS = MEDECIN.numRPPS AND CONSULTE.numSS = P.numRPPS GROUP BY CONSULTE.numSS, CONSULTE.date, MEDECIN.spécialité) >2

Exercice 2 2.3 Schéma On souhaite maintenant ajouter les deux tables suivantes pour pouvoir gérer les prescriptions des médecins. PRESCRIPTION (numord, idmed#, nbboites) Une ligne de l ordonnance du médecin numord prévoit de donner nbboites du médicament idmed MEDICAMENT (idmed, nommed, prix, categorie) Le médicament est identifié, il a un certain prix et correspond à une catégorie de médicament 2.4 Création des tables 19) Créer la table PRESCRIPTION ; CREATE TABLE PRESCRIPTION (numord NUMBER, idmed NUMBER, nbboites NUMBER, PRIMARY KEY (numord, idmed), FOREIGN KEY (idmed) REFERENCES MEDICAMENT(idMed) 20) Créer la table MEDICAMENT ; CREATE TABLE MEDICAMENT (idmed NUMBER PRIMARY KEY, nommed CHAR(40), prix FLOAT) 21) Ajouter le médicament n 5432, avec le nom aspirine et le prix 11,05 et de catégorie Antalgique ; INSERT INTO MEDICAMENT VALUES (5432, aspirine, 11,05, Antalgique ) 2.5 Requêtes 22) Pour chaque médicament écrire une requête qui donne le résultat suivant : < nom du médicament > coute < prix >euros toutes taxes et < prix / 1.055> hors taxes SELECT nom ' coute ' prix ' euros toutes taxes et ' prix/1.055 " hors taxes" FROM MEDICAMENT 23) Donner le prix et le nom des médicaments dont le prix est supérieur au prix moyen de leur catégorie. SELECT nommed, prix FROM MEDICAMENT m WHERE m.prix > (SELECT AVG(prix) FROM MEDICAMENT WHERE m.categorie=categorie) 24) Donner le nom de la catégorie et le prix du médicament le moins cher de la catégorie ayant le plus grand prix moyen. SELECT categorie, MIN(prix) FROM MEDICAMENT GROUP BY categorie HAVING avg (prix) = (SELECT MAX(AVG(prix)) FROM MEDICAMENT GROUP BY categorie)

25) Afficher pour tous les médecins (numrpps) en activité le 11-08-2008 la liste des patients (numss) qu ils ont traité ainsi que le montant total de leurs ordonnances (somme des médicaments prescrits avec le prix multiplié par le nombre de boites) ; SELECT numrpps, numss, SUM(prix*nbBoite) FROM CONSULT c,prescription p,medicament m WHERE c.numord=p.numord AND p.nummed=m.nummed AND c.date='11-08-2008' group by (numrpps, numss) 26) Afficher le prix de la plus petite ordonnance ; SELECT SUM(prix*nbBoites) FROM PRESCRIPTION,MEDICAMENT HAVING SUM(prix*nbBoites)= (SELECT MIN(SUM(prix*nbBoites)) FROM PRESCRIPTION,MEDICAMENT ) 2.6 Requêtes facultatives 27) Afficher la liste des médecins accompagnée du prix maximum de leur ordonnance ; SELECT nomm,prenomm, max(px), (SELECT numord, numrpps, SUM(prix*nbBoites) AS px FROM CONSULTE,PRESCRIPTION,MEDICAMENT WHERE CONSULTE.numOrd=prescription.numOrd PRESCRIPTION.id_med = MEDICAMENT.id_med GROUP BY numord, numrpps) WHERE DEP.numRPPS=MEDECIN.numRPPS 28) Donner le nom et le prénom des patients qui ont eu la plus grosse prescription ; SELECT nomp,prenomp,consult WHERE PATIENT.numSS=CONULT.numSS AND CONSULT.numOrd IN (SELECT numord FROM PRESCRIPTION,MEDICAMENT HAVING SUM(prix*nbBoites)= (SELECT MAX(SUM(prix*nbBoites)) FROM PRESCRIPTION,MEDICAMENT ) ) 29) Donner le nom du médicament le plus prescrit par les pneumologues ; SELECT idmed, CONSULT, PRESCRIPTION WHERE MEDECIN.specialite = pneumologue AND MEDECIN.numRPPS=CONSULT.numRPPS

AND CONSULT.numOrd=PRESCRIPTION.numOrd GROUP BY idmed HAVING count(*)=(select MAX(COUNT(*)), CONSULT, PRESCRIPTION WHERE MEDECIN.specialite = pneumologue AND MEDECIN.numRPPS=CONSULT.numRPPS AND CONSULT.numOrd=PRESCRIPTION.numOrd GROUP BY idmed)