SQL : pour quoi faire (2)?

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

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

Langage SQL : créer et interroger une base

SQL Historique

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

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

Intégrité des données

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

Le langage SQL Rappels

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

Bases de données relationnelles

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

Le Langage De Description De Données(LDD)

1 Introduction et installation

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

MySQL / SQL EXEMPLES

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

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

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

Olivier Mondet

16H Cours / 18H TD / 20H TP

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

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

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

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

Le Langage SQL version Oracle

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

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

Vincent Augusto

Intégrité sémantique dans les bases de données relationnelles

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

TP Contraintes - Triggers

I4 : Bases de Données

TP3 : Creation de tables 1 seance

Pour les débutants. langage de définition des données

LE LANGAGE SQL2 1. INTRODUCTION

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

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

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

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

FORMATION A L UTILISATION DE PMB QUELQUES NOTIONS DE SQL

1. LA GESTION DES BASES DE DONNEES RELATIONNELLES

Systèmes de Gestion de Bases de Données

1. Base de données SQLite

Introduction aux Bases de Données 2004/2005

Création et Gestion des tables

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

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

BTS/CGO P10 SYSTEME INFORMATION Année

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

Bases de données et sites WEB

Gestion des transactions et accès concurrents dans les bases de données relationnelles

SQL sous SqlServer OLIVIER D. DEHECQ Olivier 0

Optimisation SQL. Quelques règles de bases

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

A QUOI SERVENT LES BASES DE DONNÉES?

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

Compétences Business Objects

WEB DEVELOPER SGBD SYSTEME DE GESTION DE BASES DE DONNEES L étudiant sera capable :

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

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

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

Support de Cours REQUÊTES TRANSACT-SQL DANS MICROSOFT SQL SERVER Stéphane N GUESSAN Groupe Pigier Abidjan Version 1.

Bases de données relationnelles & SQL

Bases de Données Avancées

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

OpenPaaS Le réseau social d'entreprise

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

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

Encryptions, compression et partitionnement des données

Cours 4 : Agrégats et GROUP BY

I. MySQL : Serveur et SGBD

Mejdi BLAGHGI & Anis ASSÈS

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

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

CREATION WEB DYNAMIQUE

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

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

Auto-évaluation Oracle: cours de base

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

A QUOI SERVENT LES BASES DE DONNÉES?

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

FileMaker 13. Guide de référence SQL

Comprendre les bases de données

SUPPORT SQL. Thierry GRANDADAM

Devoir Data WareHouse

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

MySQL avec Mac OS X. Quelques manipulations avec le terminal sont nécessaires si une version de MySQL est déjà lancée:

Rappel sur les bases de données

MODE OPERATOIRE OPENOFFICE BASE

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

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

INTEGRITE ET BD ACTIVES

Cours SGBD 1. Concepts et langages des Bases de Données Relationnelles

Chapitre 3 LE MODELE RELATIONNEL ET SQL (DDL)

TP Bases de données réparties

Transcription:

SQL : pour quoi faire (1)? Avant SQL, rechercher des données satisfaisant une qualification ressemblait à : Select P.nom From Nageurs N, Baignades B, Plages P Where N.idn = B.idn and B.idp = P.idp and N.qualité = excellent and B.date between O1-08-89 and 31-08-89 LE STANDARD SQL Trois versions normalisées de SQL : - SQL1 (1986) : version minimale - SQL1 (1989) : addendum (intégrité) - SQL2 (1992) : version étendue à trois niveaux de conformité (entry, intermediate, full) - SQL3 (1999) : version étendue à la gestion d objets complexes - SQL3 (2006) : extension à XML SQL : pour quoi faire (2)? Une interface plus simple pour les utilisateurs? la majorité des manipulations utilisateurs se font via des formulaires! Mais rend possible les requêtes libres (ex: analyse) Simplifier le développement des applications Code plus compact et facile à valider/maintenir Indépendance physique et logique des programmes par rapport aux données Optimisation automatique et dynamique des requêtes par le SGBD Une puissance d expression exploitable de nb façons Sélection, mises à jour, intégrité, droits d accès, audit Le standard SQL LANGAGE DE DEFINITION DE DONNEES CREATE TABLE CREATE VIEW LANGAGE DE CONTROLE ALTER.... LANGAGE DE MANIPULATION DE DONNEES SELECT GRANT REVOKE COMMIT WORK ROLLBACK WORK INSERT UPDATE DELETE INTEGRATION AUX LANGAGES DE PROGRAMMATION EXEC SQL MODULE PROCEDURE... 2 1

EXEMPLE DE BASE DE DONNEES Création de table : syntaxe CREATE TABLE <nom_table> (<def_colonne> * [<def_contrainte_table>*]) ; < def_colonne > ::= <nom_colonne> < type > [CONSTRAINT nom_contrainte < NOT NULL UNIQUE PRIMARY KEY CHECK (condition) REFERENCES nom_table (colonne) > ] < def_contrainte_table > ::= CONSTRAINT nom_contrainte < UNIQUE (liste_colonnes) PRIMARY KEY (liste_colonnes) CHECK (condition) FOREIGN KEY (liste_colonnes) REFERENCES nom_table (liste_colonnes)> Création de table : exemple Insertion de données CREATE TABLE RDV( NumRdv Integer PRIMARY KEY, DateRDV Date, NumDoc Integer, NumPat Integer, Motif Varchar(200), CONSTRAINT Référence_DOC FOREIGN KEY (NumDoc) REFERENCES DOC (NumDoc), CONSTRAINT Référence_PAT FOREIGN KEY (NumPat) REFERENCES PAT (NumPat); ) L'association d'un nom à une contrainte est optionnelle. Ce nom peut être utilisé pour référencer la contrainte (ex: messages d'erreurs). Syntaxe : INSERT INTO < nom_table > [( attribute [,attribute] )] {VALUES (<value spec.> [, <value spec.>] ) <query specification>} ; Exemples : INSERT INTO DOC VALUES (1, Dupont, Paris ); INSERT INTO DOC (NumDoc, NomDoc) VALUES (2, Toto ); INSERT INTO PAT (NumPat, NomPat, VillePat) SELECT NumDoc, NomDoc, VilleDoc FROM DOC;

Suppression de données Modification de données SYNTAXE : DELETE FROM <relation_name> [WHERE <search_condition>] EXEMPLES : Supprimer tous les docteurs DELETE FROM DOC Supprimer le docteur numéro 20 DELETE FROM DOC WHERE NumDoc = 20 SYNTAXE : UPDATE <relation_name> SET <attribute> = value_expression [, <attribute> = value_expression ] [WHERE <search condition> ]; EXEMPLES : Modifier l adresse du docteur nro 20 UPDATE DOC SET VilleDoc = Valenton WHERE NumDoc = 20 Supprimer les docteurs qui n ont jamais prescrit de médicament DELETE FROM DOC WHERE NumDoc NOT IN (SELECT NumDoc FROM ORD) Augmenter de 10% le prix de tous les médicaments dont le nom contient Antibio UPDATE MED SET PRIX = PRIX*1.1 WHERE NomMed = %Antibio% INTERROGATION DES DONNEES INTERROGATION DES DONNEES SYNTAXE ELEMENTAIRE DU SELECT SELECT <liste des attributs projetés Ai> FROM <liste des relations impliquées Rj> WHERE <critères de recherche Ci> SEMANTIQUE PROJECTION Ai ( RESTRICTION Ci ( PRODUIT ( Rj ) )

SELECT : forme générale SELECT [DISTINCT ALL] { * <value exp.> [, <value exp.>]...} FROM relation [variable], relation [ variable] [WHERE <search condition>] [GROUP BY <attribute> [,<attribute>]...] [HAVING <search condition>] [ORDER BY <attribute> [{ASC DESC}] [,<attribute>[{asc DESC}] ]...] * EXPRESSION DE VALEURS - Calculs arithmétiques - Fonctions agrégats * CONDITION DE RECHERCHE - Sélection, projection, jointure - Recherche textuelle - Recherche par intervalle - Recherche sur valeur nulle Projections et restrictions simples Liste des médicaments de plus de 50 NomMed SELECT NomMed FROM MED WHERE Prix> 50 ; Liste des médicaments de plus de 50 NomMed (prix stocké en FF) SELECT NomMed FROM MED WHERE Prix/6,55957 > 50 ; Docteurs habitant une ville dont le nom commence par Villeneuve NomDoc SELECT NomDoc FROM DOC WHERE VilleDoc LIKE Villeneuve% Liste des motifs des consultations du 25/12/2008 Motif sans doublons SELECT DISTINCT Motif FROM RDV WHERE DateRDV = 25/12/2008 Forme générale de la condition de recherche <search condition> ::= [NOT] <search condition> AND OR <search condition> <nom_colonne> θ constante <nom_colonne> θ <nom_colonne> <nom_colonne> LIKE <modèle_de_chaîne> <nom_colonne> BETWEEN constante AND constante <nom_colonne> IN <liste_de_valeurs> <nom_colonne> θ (ALL ANY SOME) <liste_de_valeurs> EXISTS <liste_de_valeurs> UNIQUE <liste_de_valeurs> <tuple> MATCH [UNIQUE] <liste_de_tuples> avec θ ::= < = > <> Remarque: <liste_de_valeurs> peut être déterminée par une requête Restrictions complexes et jointures Liste des patients ayant un RDV avec le docteur Dupont NomPat SELECT PAT.NomPat FROM PAT, RDV, DOC WHERE PAT.NumPat = RDV.NumPat and RDV.NumDoc = DOC.NumDoc and DOC.NomDoc = Dupont ; Médicaments commençant par «ASPI» et prescrits en août 2008 NomMed SELECT DISTINCT M.NomMed FROM MED M, DET D, ORD O WHERE M.NumMed = D.NumMed and D.NumOrd = O.NumOrd and NomMed like ASPI% and O.Date BETWEEN 01/08/2008 and 31/08/2008 ; Docteurs ayant le même nom qu un patient NomDoc SELECT D.NomDoc FROM PAT P, DOC D WHERE P.NomPat = D.NomDoc;

Requêtes imbriquées : IN et EXIST Que veut dire? Liste des patients ayant un RDV avec le docteur Dupont NomPat Nom des docteurs ayant au moins un RDV pour une grippe NomDoc SELECT DISTINCT P.NomPat FROM PAT P, RDV R, DOC D WHERE P.NumPat = R.NumPat and R.NumDoc = D.NumDoc and D.NomDoc = Dupont ; SELECT D.NomDoc FROM DOC D WHERE EXISTS (SELECT * FROM RDV R WHERE R.NumDoc = D.NumDoc AND R.Motif = grippe ); Ou bien SELECT P.NomPat FROM PAT P WHERE P.NumPat in (SELECT R.NumPat FROM RDV R WHERE R.NumDoc in (SELECT D.NumDoc FROM DOC WHERE D.NomDoc = Dupont )); Nom des patients qui n'ont jamais eu de rendez-vous NomPAT SELECT P.NomPat FROM PAT P WHERE P.NumPat NOT IN (SELECT R.NumPat FROM RDV R ); SELECT P.NomPat FROM PAT P WHERE EXISTS (SELECT * FROM RDV R WHERE P.NumPat = R.NumPat and EXISTS (SELECT * FROM DOC D WHERE R.NumDoc=D.NumDoc and D.NomDoc = Dupont )); Nom des docteurs ayant eu au moins un RDV avec tous les patients NomDoc L imbrication est un moyen de décomposer une requête complexe en sous-requêtes plus simples SELECT D.NomDoc FROM DOC D WHERE NOT EXISTS (SELECT * FROM PAT P WHERE NOT EXISTS SELECT * FROM RDV R WHERE D.NumDoc = RDV.NumDoc and P.NumPat = RDV.NumPat); Agrégation, Tri, Union, Intersection, Différence Calculs d'agrégats Les fonctions d agrégation (Count, Sum, Avg, Min, Max) permettent de réaliser des calculs sur des ensembles de données Calcul de statistiques globales Nombre total de patients : SELECT count(*) FROM PAT Prix moyen des médicaments : SELECT avg(prix) FROM MED Calcul de statistiques par groupe Nombre de patients par ville : SELECT VillePat, count(*) NbPatient FROM PAT GROUP BY VillePat Nombre de patients par ville ayant consulté pour un mal de tête SELECT VillePat, count(distinct(numpat)) NbPatient FROM PAT, RDV WHERE PAT.NumPat = RDV.NumPat and Motif = mal de tête GROUP BY VillePat Villes dans lesquelles plus de 10 patients ont consulté pour un mal de tête SELECT VillePat FROM PAT, RDV WHERE PAT.NumPat = RDV.NumPat and Motif = mal de tête GROUP BY VillePat HAVING count(distinct(numpat)) > 10 18

Sélections sur agrégats et tri 21 Nom du(des) médicament(s) le(s) moins cher(s) SELECT NomMed FROM MED WHERE Prix = (SELECT MIN(Prix) FROM MED) Liste des médecins ordonnée par montant (quantité*prix) de médicaments prescrits SELECT D1.NumDoc, sum(m.prix * D2.Qté) PrixTotal FROM DOC D1, ORD O, DET D2, MED M WHERE D1.NumDoc = O.NumDoc and O.NumOrd = D2.NumOrd and D2.NumMed = M.NumMed GROUP BY D1.NumDoc ORDER BY PrixTotal Quelques conseils 23 Avant de se lancer dans l écriture d une requête, il faut bien comprendre le schéma des tables sur lequel on va s appuyer. Si le schéma est complexe, il faut le dessiner (tables et relations entre ces tables avec leur cardinalité). En lisant la question, on repère sur le schéma dans quelle(s) relation(s) se trouve chaque donnée dont on a besoin. Si la question est complexe, il faut la reformuler et/ou la décomposer. Une fois ce travail effectué, on peut commencer à écrire du SQL. Évaluation «sémantique» d une requête SQL 1. FROM Réalise le produit cartésien des relations 2. WHERE Réalise restriction et jointures 3. GROUP BY Constitue les partitions (e.g., tri sur l intitulé du groupe) 4. HAVING Restreint aux partitions désirées YYY YYY 5. SELECT Réaliser les projections/calculs finaux 6. ORDER BY Trier les tuples résultat AGG1 AGG3 AGG1 AGG3 Reformulation d une question (1) Paraphrasage : En exprimant de manière plus détaillée une requête floue, elle devient plus claire... (vive La Palice) Exemple : Qui est dans la base? Ensemble des personnes de la base médicale Nom des médecins et nom des patients Union des noms des médecins et des noms des patients SELECT NomMed NomPers FROM MED UNION SELECT NomPat NomPers FROM PAT AGG1 AGG2 AGG3 22 24

Reformulation (2) : Négation L inverse de la requête peut être plus facile à exprimer, notamment lorsque la requête contient un quantificateur universel ( ): que Dans quelle ville n y a-t-il que des patients de plus de 40 ans? L ensemble des villes moins celles où il y a au moins un patient de moins de 40 ans aucun Dans quelle ville n y a-t-il aucun patient de plus de 40 ans? L ensemble des villes moins celles où il y a au moins un patient de plus de 40 ans tous Quels sont les patients dont tous les motifs de rendez-vous sont «mal de tête» L ensemble des patients qui ont un RDV pour un mal de tête moins les patients qui ont un RDV pour un motif différent Tous Quels sont les patients qui ont RDV avec tous les médecins Les patients pour lesquels il n existe pas de docteur avec qui ils n ont pas eu de RDV Ou encore les patients qui ont eu rendez-vous avec un nombre de docteurs (distincts) égal au nombre de docteurs de la base Doublons Deux types de doublons peuvent apparaître. plusieurs réponses identiques plusieurs réponses sémantiquement équivalentes Les premiers s éliminent en utilisant la clause DISTINCT. Les seconds apparaissent lorsque l on construit des combinaisons (ex: couples de personnes satisfaisant une qualification). Le résultat (A,B) est sémantiquement équivalent à (B,A). Dans ce cas, il suffit d utiliser un prédicat > entre chaque composante (ex: A > B) afin de n obtenir qu une seule des combinaisons equivalentes. 25 27 Instances de table Il faut parfois utiliser plusieurs instances de la même table. Pourquoi? Lorsqu un même tuple d une table A doit joindre avec des tuples de la même table B satisfaisant des critères différents. Exemple : Nom des patients ayant eu des RDV avec les docteurs Dupont et Durand SELECT DISTINCT P.NomPat FROM PAT P, RDV R, DOC D, RDV R1, DOC D1 WHERE P.NumPat = R1.NumPat and R1.NumDoc = D1.NumDoc and D1.NomDoc = Dupont and P.NumPat = R2.NumPat and R2.NumDoc = D2.NumDoc and D2.NomDoc = Durand ); RDV (R1) DOC (D1) Dupont PAT (P) RDV (R2) DOC (D2) Durand Base de tests Quand une requête est vraiment complexe, on peut, malgré tout, avoir un doute sur la solution trouvée. Dans ce cas, il faut créer l extension d une base de test afin de vérifier sa validité. Exemple 1 : Quels couples de parents ont au moins deux enfants? Dans la base de test il faut avoir : des couples de parents qui ont 1, 2 et 3 enfants des parents seuls ayant au moins 2 enfants Exemple 2 : Quels producteurs ne voient que les films qu ils produisent? Dans la base de test il faut avoir : un producteur qui ne voit aucun film un producteur qui ne voit que des films qu il produit un producteur qui voit des films qu il produit et d autres Un producteur qui ne voit aucun des films qu il produit 26 28