Le modèle relationnel (partie II)

Documents pareils
SQL Historique

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

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

Les bases de données

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

Langage SQL : créer et interroger une base

Le langage SQL Rappels

1 Introduction et installation

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

Le Langage SQL version Oracle

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

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

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

16H Cours / 18H TD / 20H TP

Bases de données relationnelles

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

Olivier Mondet

1. LA GESTION DES BASES DE DONNEES RELATIONNELLES

Systèmes de Gestion de Bases de Données

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

Le Langage De Description De Données(LDD)

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

Optimisation SQL. Quelques règles de bases

Cours: Les Jointures 1

FileMaker 13. Guide de référence SQL

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

CREATION WEB DYNAMIQUE

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

MySQL / SQL EXEMPLES

SQL sous SqlServer OLIVIER D. DEHECQ Olivier 0

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

Introduction aux Bases de Données 2004/2005

Bases de données et sites WEB

A QUOI SERVENT LES BASES DE DONNÉES?

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

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

Cours Base de données relationnelles. M. Boughanem, IUP STRI

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

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

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

MODE OPERATOIRE OPENOFFICE BASE

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

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

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

TP Contraintes - Triggers

Bases de données élémentaires Maude Manouvrier

FORMATION A L UTILISATION DE PMB QUELQUES NOTIONS DE SQL

Bases de Données. Plan

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

Les BASES de DONNEES dans WampServer

Intégrité des données

TP Bases de données réparties

LE LANGAGE SQL2 1. INTRODUCTION

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

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

Rappel sur les bases de données

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

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

Information utiles. webpage : Google+ : digiusto/

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

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

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

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

Cours 4 : Agrégats et GROUP BY

Encryptions, compression et partitionnement des données

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

Bases de données relationnelles & SQL

OpenPaaS Le réseau social d'entreprise

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

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

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

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

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

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

Comprendre les bases de données

BTS/CGO P10 SYSTEME INFORMATION Année

Access et Org.Base : mêmes objectifs? Description du thème : Création de grilles d écran pour une école de conduite.

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

Structured Query Language

TP3 : Creation de tables 1 seance

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

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

Sybase Adaptive Server Enterprise 15

Patrice BOURSIER. Professeur, Univ. de La Rochelle. Bases de Données. Notes de cours

Bases de données - Modèle relationnel

SUPPORT SQL. Thierry GRANDADAM

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

Les bases fondamentales du langage Transact SQL

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

Dossier I Découverte de Base d Open Office

TP 8: LES OPERATEURS ENSEMBLISTES

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

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

1. Base de données SQLite

I4 : Bases de Données

Interpréteur d algèbre relationnelle

Transcription:

Le modèle relationnel (partie II) Olivier Caron Polytech Lille Avenue Paul Langevin Cité Scientifique Lille 1 59655 Villeneuve d Ascq cedex http://ocaron.plil.fr Olivier.Caron@polytech-lille.fr Olivier Caron September 14, 2016 1/63

Plan Partie I Olivier Caron September 14, 2016 2/63

Plan Partie I Le modèle relationnel Olivier Caron September 14, 2016 2/63

Plan Partie I Le modèle relationnel Le langage SQL, partie DDL (Data Definition Language) Olivier Caron September 14, 2016 2/63

Plan Partie I Le modèle relationnel Le langage SQL, partie DDL (Data Definition Language) Passage d un schéma conceptuel à un schéma relationnel Olivier Caron September 14, 2016 2/63

Plan Partie I Le modèle relationnel Le langage SQL, partie DDL (Data Definition Language) Passage d un schéma conceptuel à un schéma relationnel Partie II Olivier Caron September 14, 2016 2/63

Plan Partie I Le modèle relationnel Le langage SQL, partie DDL (Data Definition Language) Passage d un schéma conceptuel à un schéma relationnel Partie II L algèbre relationnelle (base de requêtes) Olivier Caron September 14, 2016 2/63

Plan Partie I Le modèle relationnel Le langage SQL, partie DDL (Data Definition Language) Passage d un schéma conceptuel à un schéma relationnel Partie II L algèbre relationnelle (base de requêtes) Le langage SQL, partie requêtes et modification de données Olivier Caron September 14, 2016 2/63

Algèbre relationnelle Egalement définie par Codd (1970) Olivier Caron September 14, 2016 3/63

Algèbre relationnelle Egalement définie par Codd (1970) Basée sur des opérateurs algébriques simples Olivier Caron September 14, 2016 3/63

Algèbre relationnelle Egalement définie par Codd (1970) Basée sur des opérateurs algébriques simples Construire des requêtes par composition de ces opérateurs Olivier Caron September 14, 2016 3/63

La commande Select du langage SQL Supporte l algèbre relationnelle de Codd via une seule commande Olivier Caron September 14, 2016 4/63

La commande Select du langage SQL Supporte l algèbre relationnelle de Codd via une seule commande Plusieurs représentations possibles pour une même requête (évolutions successives de la norme SQL) Olivier Caron September 14, 2016 4/63

La commande Select du langage SQL Supporte l algèbre relationnelle de Codd via une seule commande Plusieurs représentations possibles pour une même requête (évolutions successives de la norme SQL) En interne, le SGBD traduit la requête SQL en une composition optimisée des opérateurs algébriques. Olivier Caron September 14, 2016 4/63

Exemple base Vins1 Numéro Cru Millésime Degré 100 Chablis 1974 12 110 Mercurey 1978 13 120 Meursault 1977 12 Vins2 Numéro Cru Millésime Degré 100 Chablis 1974 12 200 Sancerre 1974 12 Olivier Caron September 14, 2016 5/63

Consultation simple d une table requete u s u e l l e : select from vins1 ; d e f i n i t i o n e x p l i c i t e s des colonnes de l a t a b l e : ordre des colonnes quelconque select numero, cru, millesime, degre from vins1 ; u t i l i s a t i o n des noms de t a b l e select vins1. from vins1 u t i l i s a t i o n d une v a r i a b l e pour l e nom de l a t a b l e : select t a b l e v i n s. from vins1 t a b l e v i n s ; Olivier Caron September 14, 2016 6/63

Opérateur d union Définition L union de 2 relations R et S de même schéma est une relation T de même schéma contenant l ensemble des tuples appartenant à R ou S Olivier Caron September 14, 2016 7/63

Opérateur d union Définition L union de 2 relations R et S de même schéma est une relation T de même schéma contenant l ensemble des tuples appartenant à R ou S Notation texte : T = R S ou T = union(r, S) Olivier Caron September 14, 2016 7/63

Exemple Union select from vins1 union select from vins2 ; Vins3 : Numéro Cru Millésime Degré Vins1 Vins2 100 Chablis 1974 12 110 Mercurey 1978 13 120 Meursault 1977 12 200 Sancerre 1974 12 Olivier Caron September 14, 2016 8/63

Opérateur de différence Définition la différence de 2 relations R et S de même schéma est une relation T de même schéma contenant l ensemble des tuples appartenant à R et n appartenant pas à S Olivier Caron September 14, 2016 9/63

Opérateur de différence Définition la différence de 2 relations R et S de même schéma est une relation T de même schéma contenant l ensemble des tuples appartenant à R et n appartenant pas à S Notation texte : T = R S ou T = minus(r, S) Olivier Caron September 14, 2016 9/63

Exemple différence select from vins1 except select from vins2 ; Vins4 : Numéro Cru Millésime Degré Vins1 Vins2 110 Mercurey 1978 13 120 Meursault 1977 12 Olivier Caron September 14, 2016 10/63

Produit cartésien Opérateur intermédiaire (pas de sens en soi) Olivier Caron September 14, 2016 11/63

Produit cartésien Opérateur intermédiaire (pas de sens en soi) Schéma quelconque de deux relations Olivier Caron September 14, 2016 11/63

Produit cartésien Opérateur intermédiaire (pas de sens en soi) Schéma quelconque de deux relations Notation texte : T = R S ou T = product(r, S) Olivier Caron September 14, 2016 11/63

Exemple produit cartésien Vignoble nom vin Nicolas Bourgogne Martin Bordeaux select vins2. vignoble. from vins2, vignoble Vins5 : Num. Cru Millé. Deg. nom vin Vins-2 Vignoble 100 chablis 1974 12 Nicolas Bourgogne 200 Sancerre 1974 12 Martin Bordeaux 100 chablis 1974 12 Martin Bordeaux 200 Sancerre 1974 12 Nicolas Bourgogne Opérateur très gourmand (espace disque) Olivier Caron September 14, 2016 12/63

Opérateur unaire de projection Définition la projection d une relation R de schéma R(A 1, A 2,..., A n ) sur les attributs A i1, A i2,..., A ip ) (p < n) est une relation R (A i1, A i2,..., A ip ) dont les tuples sont obtenus par élimination des valeurs des attributs de R n appartenant pas à R et par suppression des tuples en double. Olivier Caron September 14, 2016 13/63

Opérateur unaire de projection Définition la projection d une relation R de schéma R(A 1, A 2,..., A n ) sur les attributs A i1, A i2,..., A ip ) (p < n) est une relation R (A i1, A i2,..., A ip ) dont les tuples sont obtenus par élimination des valeurs des attributs de R n appartenant pas à R et par suppression des tuples en double. Notation texte : T = x 1,...,x n (R) ou T = project(r/x 1,..., x n ) Olivier Caron September 14, 2016 13/63

Exemple projection Vins3 : Numéro Cru Millésime Degré 100 Chablis 1974 12 110 Mercurey 1978 13 120 Meursault 1977 12 200 Sancerre 1974 12 select d i s t i n c t millesime, degre from vins3 d i s t i n c t necessaire pour algebre r e l a t i o n n e l l e pure Vins6 : Millésime Degré project(vins3/millésime,degré) 1974 12 1978 13 1977 12 Olivier Caron September 14, 2016 14/63

Opérateur unaire de restriction ou sélection Définition La restriction (ou sélection) de la relation R par une qualification Q est une relation R de même schéma dont les tuples sont ceux de R satisfaisant la qualification Q. Olivier Caron September 14, 2016 15/63

Opérateur unaire de restriction ou sélection Définition La restriction (ou sélection) de la relation R par une qualification Q est une relation R de même schéma dont les tuples sont ceux de R satisfaisant la qualification Q. La qualification peut être exprimée à l aide de constantes, comparateurs arithmétiques, opérateurs logiques Olivier Caron September 14, 2016 15/63

Opérateur unaire de restriction ou sélection Définition La restriction (ou sélection) de la relation R par une qualification Q est une relation R de même schéma dont les tuples sont ceux de R satisfaisant la qualification Q. La qualification peut être exprimée à l aide de constantes, comparateurs arithmétiques, opérateurs logiques Notation texte : T = σ Q (R) ou T = restrict(r/q) Olivier Caron September 14, 2016 15/63

Exemple restriction Vins3 : Numéro Cru Millésime Degré 100 Chablis 1974 12 110 Mercurey 1978 13 120 Meursault 1977 12 200 Sancerre 1974 12 select from vins3 where degre=12 and millesime >1974 Vins7 : Numéro Cru Millésime Degré restrict(vins3/degré=12 and Millésime>1974) 120 Meursault 1977 12 Olivier Caron September 14, 2016 16/63

Expression d une restriction en SQL Introduction clause Where après clause From Olivier Caron September 14, 2016 17/63

Expression d une restriction en SQL Introduction clause Where après clause From Ordre des clauses imposé Olivier Caron September 14, 2016 17/63

Expression d une restriction en SQL Introduction clause Where après clause From Ordre des clauses imposé Utilisation des opérateurs booléens : and, or, not Olivier Caron September 14, 2016 17/63

Expression d une restriction en SQL Introduction clause Where après clause From Ordre des clauses imposé Utilisation des opérateurs booléens : and, or, not Comparaison de chaînes, dates, d entiers,... Olivier Caron September 14, 2016 17/63

Traitement de chaînes (1/2) Syntaxe très simple : ch1 = ch2 ou bien opérateur LIKE avec caractère spéciaux : - % remplace de 0 à plusieurs caractères - remplace exactement un caractère. Exemple : vins=> select from vins3 where cru l i k e M% ; numero cru millesime degre + + + 120 Meursault 1977 12 110 Mercurey 1978 13 (2 rows ) Olivier Caron September 14, 2016 18/63

Traitement de chaînes (2/2) Opérateur de comparaison >, <,... (ordre lexicographique) Opérateur de concaténation, fonctions prédéfinies (ex: upper) Exemple : vins=> select upper ( cru millesime ) as nom from vins3 ; nom MEURSAULT 1977 SANCERRE 1974 CHABLIS 1974 MERCUREY 1978 (4 rows ) Olivier Caron September 14, 2016 19/63

Comparaison de valeurs Introduction clause BETWEEN Applicable à tout type (integer, chaîne, date,... ) v i n s=> select from vins3 where millesime between 1974 and 1977 ; numero cru millesime degre + + + 120 Meursault 1977 12 200 Sancerre 1974 12 100 Chablis 1974 12 (3 rows ) Olivier Caron September 14, 2016 20/63

Les opérateurs de base Simplicité : seulement 5 opérateurs! Olivier Caron September 14, 2016 21/63

Les opérateurs de base Simplicité : seulement 5 opérateurs! Composition de ces opérateurs possible : tout résultat est une relation Olivier Caron September 14, 2016 21/63

Les opérateurs de base Simplicité : seulement 5 opérateurs! Composition de ces opérateurs possible : tout résultat est une relation Ces opérateurs répondent à la majorité des requêtes (sauf calcul) Olivier Caron September 14, 2016 21/63

Les opérateurs de base Simplicité : seulement 5 opérateurs! Composition de ces opérateurs possible : tout résultat est une relation Ces opérateurs répondent à la majorité des requêtes (sauf calcul) Introduction d opérateurs additionnels Olivier Caron September 14, 2016 21/63

L intersection Définition L intersection de deux relations R et S de même schéma est une relation T de même schéma contenant les tuples appartenant à la fois à R et S Notation texte : T = (R S) ou T = inter(r, S) Création opérateur : R S = R (R S) = S (S R) select from R intersect select from S ; Olivier Caron September 14, 2016 22/63

La jointure Définition La jointure de deux relations R et S selon une qualification multi-attributs Q est l ensemble des tuples du produit cartésien R S satisfaisant la qualification Q Olivier Caron September 14, 2016 23/63

La jointure Définition La jointure de deux relations R et S selon une qualification multi-attributs Q est l ensemble des tuples du produit cartésien R S satisfaisant la qualification Q Notation texte : T = join(r, S, Q) Olivier Caron September 14, 2016 23/63

La jointure Définition La jointure de deux relations R et S selon une qualification multi-attributs Q est l ensemble des tuples du produit cartésien R S satisfaisant la qualification Q Notation texte : T = join(r, S, Q) Création opérateur : join(r, S, Q) = restrict(r S/Q) Olivier Caron September 14, 2016 23/63

Exemple jointure (1/2) Tables Parent et Enfant : Parent Enfant nom numéro num e prénom num père dupont 1 1 jérome 1 durant 2 2 alain 2 3 pierre 1 Olivier Caron September 14, 2016 24/63

Exemple jointure (1/2) Tables Parent et Enfant : Parent Enfant nom numéro num e prénom num père dupont 1 1 jérome 1 durant 2 2 alain 2 3 pierre 1 join(parent, Enfant, numéro=num père) : nom numéro num e prénom num père dupont 1 1 jérome 1 durant 2 2 alain 2 dupont 1 3 pierre 1 Olivier Caron September 14, 2016 24/63

Exemple jointure (2/2) compatible norme SQL 2 e t plus select parent., enfant. from parent j o i n enfant on numero=num pere ; compatible norme SQL 1 e t plus u t i l i s a t i o n e x p l i c i t e du p r o d u i t c a r t e s i e n et r e s t r i c t i o n select parent., enfant. from parent, enfant p r o d u i t c a r t e s i e n where numero=num pere ; r e s t r i c t i o n Olivier Caron September 14, 2016 25/63

Quelques remarques Pour un même résultat, plusieurs requêtes sont possibles Olivier Caron September 14, 2016 26/63

Quelques remarques Pour un même résultat, plusieurs requêtes sont possibles La jointure est l opérateur le plus couteux Olivier Caron September 14, 2016 26/63

Quelques remarques Pour un même résultat, plusieurs requêtes sont possibles La jointure est l opérateur le plus couteux Idéal de faire des sélections et restrictions avant la ou les jointures Olivier Caron September 14, 2016 26/63

Et des opérateurs de calcul Existent dans la plupart des S.G.B.D. Olivier Caron September 14, 2016 27/63

Et des opérateurs de calcul Existent dans la plupart des S.G.B.D. Donnent un résultat de type relation! Olivier Caron September 14, 2016 27/63

Et des opérateurs de calcul Existent dans la plupart des S.G.B.D. Donnent un résultat de type relation! Quelques illustrations : Olivier Caron September 14, 2016 27/63

Et des opérateurs de calcul Existent dans la plupart des S.G.B.D. Donnent un résultat de type relation! Quelques illustrations : L opérateur compte(r) :: calcul du nombre de lignes d une relation R Olivier Caron September 14, 2016 27/63

Et des opérateurs de calcul Existent dans la plupart des S.G.B.D. Donnent un résultat de type relation! Quelques illustrations : L opérateur compte(r) :: calcul du nombre de lignes d une relation R L opérateur somme(r(a i )) calcul de la somme cumulée des valeurs d un attribut. Olivier Caron September 14, 2016 27/63

Et des opérateurs de calcul Existent dans la plupart des S.G.B.D. Donnent un résultat de type relation! Quelques illustrations : L opérateur compte(r) :: calcul du nombre de lignes d une relation R L opérateur somme(r(a i )) calcul de la somme cumulée des valeurs d un attribut. et aussi moyenne, max, min Olivier Caron September 14, 2016 27/63

Syntaxe partielle commande Select SELECT [ ALL DISTINCT [ ON ( expression [,... ] ) ] ] expression [ AS output name ] [,... ] [ FROM from item [,... ] ] [ WHERE c o n d i t i o n ] [ GROUP BY expression [,... ] ] [ HAVING c o n d i t i o n [,... ] ] [ { UNION INTERSECT EXCEPT [ ALL ] } select ] [ ORDER BY expression [ ASC DESC USING operator ] [,... ] ] [ FOR UPDATE [ OF tablename [,... ] ] ] [ LIMIT { count ALL } [ { OFFSET, } s t a r t ] ] Olivier Caron September 14, 2016 28/63

Etat de la base exemple (1/3) Auteur : num_a nom ------+--------------- 1 Albert Uderzo 2 Victor Hugo 3 J.K. Rowling Editeur : num_e nom ville ------+-------------+----------- 1 Albert-René Bruxelles 2 Gallimard Paris 3 Folio Paris Olivier Caron September 14, 2016 29/63

Etat de la base exemple (2/3) livre : num_l titre auteur ------+----------------------------------------+-------- 1 Le fils d Astérix 1 2 Les misérables 2 3 Notre dame de Paris 2 4 Harry Potter à l école des sorciers 3 5 Harry Potter et la chambre des secrets 3 edite_par : num_l num_e date_edition -------+-------+-------------- 1 1 1998-03-24 2 3 1940-02-02 3 2 1967-06-12 4 2 1999-03-01 5 2 2000-02-01 Olivier Caron September 14, 2016 30/63

Etat de la base exemple (3/3) utilisateur : num_u nom prenom -------+------------+------------- 1 Caron Olivier 2 Janot Stéphane 3 Seynhaeve Franck 4 Duthilleul Jean-Michel emprunte : reserve num_l num_u num_l num_u ------+------- -------+------- 1 1 1 2 2 4 4 2 4 1 Olivier Caron September 14, 2016 31/63

Présentation des données (1/2) Ordre d affichage des colonnes Olivier Caron September 14, 2016 32/63

Présentation des données (1/2) Ordre d affichage des colonnes Clause distinct, évite les doublons Olivier Caron September 14, 2016 32/63

Présentation des données (1/2) Ordre d affichage des colonnes Clause distinct, évite les doublons Ordre d affichage des lignes, clause Order By Olivier Caron September 14, 2016 32/63

Présentation des données (1/2) Ordre d affichage des colonnes Clause distinct, évite les doublons Ordre d affichage des lignes, clause Order By Ordre des lignes multi-critères Olivier Caron September 14, 2016 32/63

Présentation des données (1/2) Ordre d affichage des colonnes Clause distinct, évite les doublons Ordre d affichage des lignes, clause Order By Ordre des lignes multi-critères Aucun impact sur le traitement algébrique des requêtes Olivier Caron September 14, 2016 32/63

Présentation des données (2/2) Syntaxe : ORDER BY expression [ ASC DESC USING operator ] [,...] Exemple : select from l i v r e order by auteur DESC, t i t r e ASC ; num_l titre auteur -------+----------------------------------------+-------- 4 Harry Potter à l école des sorciers 3 5 Harry Potter et la chambre des secrets 3 2 Les misérables 2 3 Notre dame de Paris 2 1 Le fils d Astérix 1 Olivier Caron September 14, 2016 33/63

Opérations de calcul Opérateurs arithmétiques : +,,... Exemple : select now() d a t e e d i t i o n as duree, num l from e d i t e p a r ; duree num_l ---------------------+------- 1423 days 17:30:01 1 22658 days 16:30:01 2 12666 days 17:30:01 3 1081 days 17:30:01 4 744 days 17:30:01 5 Expressions arithmétiques applicables dans la clause where Olivier Caron September 14, 2016 34/63

Fonctions de calcul Syntaxe : nomfonction(nomcolonne) ou nomfonction(*) Olivier Caron September 14, 2016 35/63

Fonctions de calcul Syntaxe : nomfonction(nomcolonne) ou nomfonction(*) le résultat est stocké dans une colonne correspondant au nom de la fonction (sauf si renommage) Olivier Caron September 14, 2016 35/63

Fonctions de calcul Syntaxe : nomfonction(nomcolonne) ou nomfonction(*) le résultat est stocké dans une colonne correspondant au nom de la fonction (sauf si renommage) Toujours une ligne résultat. Olivier Caron September 14, 2016 35/63

Fonctions de calcul Syntaxe : nomfonction(nomcolonne) ou nomfonction(*) le résultat est stocké dans une colonne correspondant au nom de la fonction (sauf si renommage) Toujours une ligne résultat. Fonctions standards : count, min, max, avg, sum Olivier Caron September 14, 2016 35/63

Fonctions de calcul - exemples select count ( ) as nombre from l i v r e ; nombre ------- 5 select min ( num l ),max( num l ), avg ( num l ),sum( num l ) from l i v r e ; min max avg sum -----+-----+--------------+----- 1 5 3.0000000000 15 Olivier Caron September 14, 2016 36/63

Calcul sur des groupes de lignes (1/2) Sélectionner des lignes pour appliquer un calcul Introduction clause Group By select auteur, count ( ) as nbre par auteur from l i v r e group by auteur ; auteur nbre_par_auteur --------+----------------- 1 1 2 2 3 2 Seules les colonnes figurant dans un group by peuvent apparaître dans la clause select. Olivier Caron September 14, 2016 37/63

Calcul sur des groupes de lignes (2/2) Imposer une condition aux groupes formés par la clause Group By Introduction clause Having Exemple : select auteur, count ( ) as nbre par auteur from l i v r e group by auteur having count( )>1 ; auteur nbre_par_auteur --------+----------------- 2 2 3 2 Ne pas confondre avec clause where Olivier Caron September 14, 2016 38/63

Jointures sur une même table Appelée également auto-jointure Exemple : liste de couples de livres ayant le même auteur select l 1. t i t r e, l 2. t i t r e from l i v r e l 1 join l i v r e l 2 on l 1. auteur= l 2. auteur where l 1. t i t r e > l 2. t i t r e ; d i v i s e r par 2 l e nbre de couples titre titre --------------------------------+---------------------------- Notre dame de Paris Les misérables Harry Potter et la chambre... Harry Potter à l école... Olivier Caron September 14, 2016 39/63

Les jointures à la SQL/2 Nouvelles possibilités d expression de jointures Non encore implémenté par tous les SGBD Les expressions de jointures sont exprimés dans la clause from Distinction de jointures : inner join (défaut), left outer join, right outer join, full outer join i n sert into l i v r e values ( 6, Le l i v r e inconnu, null ) ; i n sert into auteur values ( 4, Paltoquet ) ; Olivier Caron September 14, 2016 40/63

Jointure SQL/2 classique select t i t r e, nom from l i v r e inner join auteur on l i v r e. auteur=auteur. num a ; titre nom ----------------------------------------+--------------- Le fils d Astérix Albert Uderzo Les misérables Victor Hugo Notre dame de Paris Victor Hugo Harry Potter à l école des sorciers J.K. Rowling Harry Potter et la chambre des secrets J.K. Rowling (5 rows) Olivier Caron September 14, 2016 41/63

Jointure externe gauche select t i t r e, nom from l i v r e l e f t outer join auteur on l i v r e. auteur=auteur. num a ; titre nom ----------------------------------------+--------------- Le fils d Astérix Albert Uderzo Les misérables Victor Hugo Notre dame de Paris Victor Hugo Harry Potter à l école des sorciers J.K. Rowling Harry Potter et la chambre des secrets J.K. Rowling le livre inconnu (6 rows) Olivier Caron September 14, 2016 42/63

Jointure externe droite select t i t r e, nom from l i v r e r i g h t outer join auteur on l i v r e. auteur=auteur. num a ; titre nom ----------------------------------------+--------------- Le fils d Astérix Albert Uderzo Les misérables Victor Hugo Notre dame de Paris Victor Hugo Harry Potter à l école des sorciers J.K. Rowling Harry Potter et la chambre des secrets J.K. Rowling Paltoquet (6 rows) Olivier Caron September 14, 2016 43/63

Jointure externe complète select t i t r e, nom from l i v r e f u l l outer join auteur on l i v r e. auteur=auteur. num a ; titre nom ----------------------------------------+--------------- Le fils d Astérix Albert Uderzo Les misérables Victor Hugo Notre dame de Paris Victor Hugo Harry Potter à l école des sorciers J.K. Rowling Harry Potter et la chambre des secrets J.K. Rowling le livre inconnu Paltoquet (7 rows) Olivier Caron September 14, 2016 44/63

Multi-jointures SQL/2 select nom, t i t r e from ( u t i l i s a t e u r u join emprunte e on u. num u= e. num u ) join l i v r e l on e. num l= l. num l ; nom titre ------------+------------------------------------- Caron Le fils d Astérix Duthilleul Les misérables Caron Harry Potter à l école des sorciers (3 rows) Olivier Caron September 14, 2016 45/63

Remarques sur la syntaxe des jointures SQL/2 (1/2) INNER et OUTER sont toujours facultatifs Olivier Caron September 14, 2016 46/63

Remarques sur la syntaxe des jointures SQL/2 (1/2) INNER et OUTER sont toujours facultatifs LEFT, RIGHT et FULL impliquent une jointure externe Olivier Caron September 14, 2016 46/63

Remarques sur la syntaxe des jointures SQL/2 (1/2) INNER et OUTER sont toujours facultatifs LEFT, RIGHT et FULL impliquent une jointure externe Jointures croisées : Olivier Caron September 14, 2016 46/63

Remarques sur la syntaxe des jointures SQL/2 (1/2) INNER et OUTER sont toujours facultatifs LEFT, RIGHT et FULL impliquent une jointure externe Jointures croisées : Syntaxe : from T1 cross join t2 Olivier Caron September 14, 2016 46/63

Remarques sur la syntaxe des jointures SQL/2 (1/2) INNER et OUTER sont toujours facultatifs LEFT, RIGHT et FULL impliquent une jointure externe Jointures croisées : Syntaxe : from T1 cross join t2 Est équivalent à un produit cartésien Olivier Caron September 14, 2016 46/63

Remarques sur la syntaxe des jointures SQL/2 (1/2) INNER et OUTER sont toujours facultatifs LEFT, RIGHT et FULL impliquent une jointure externe Jointures croisées : Syntaxe : from T1 cross join t2 Est équivalent à un produit cartésien Est équivalent à from T1 inner join t2 on true Olivier Caron September 14, 2016 46/63

Remarques sur la syntaxe des jointures SQL/2 (1/2) Les syntaxes : T1 { [INNER] { LEFT RIGHT FULL } [OUTER] } join T2 on boolean_expression T1 { [INNER] { LEFT RIGHT FULL } [OUTER] } join T2 using liste_nom_colonne T1 NATURAL { [INNER] { LEFT RIGHT FULL } [OUTER] } join T2 USING a équivalent à on t1.a = t2.a USING (a,b) équivalent à on t1.a=t2.a and t1.b=t2.b NATURAL effectue une comparaison de toutes les colonnes de même nom dans les deux tables. Olivier Caron September 14, 2016 47/63

Sous-requêtes non corrélatives (1/4) Cas 1 : une sous-requête retourne une valeur unique Cette valeur est exploitée dans une clause where Exemple : liste des personnes dont le salaire est supérieur au salaire moyen du personnel select nom from personne where s a l a i r e > ( select avg ( s a l a i r e ) from personne ) Conformité des types (ici : float) Olivier Caron September 14, 2016 48/63

Sous-requêtes non corrélatives (2/4) Cas 2 : une sous-requête retourne des valeurs multiples avec la clause in Exemple : liste des livres empruntés et réservés select t i t r e from l i v r e join emprunte using num l where l i v r e. num l in ( select num l from reserve ) ; titre ------------------------------------- Le fils d Astérix Harry Potter à l école des sorciers Olivier Caron September 14, 2016 49/63

Sous-requêtes non corrélatives (3/4) Cas 3 : une sous-requête retourne des valeurs multiples avec la clause all Exemple : liste des personnes dont le salaire est supérieur à tous les salaires du personnel select nom from personne where s a l a i r e >= ALL ( select s a l a i r e from personne ) ; (on peut faire plus simple... ) Olivier Caron September 14, 2016 50/63

Sous-requêtes non corrélatives (4/4) Cas 4 : une sous-requête retourne des valeurs multiples avec la clause [NOT] EXISTS Exemple : Afficher le nom de l auteur 1 si il a écrit des livres select nom from auteur where num a=1 and exists ( select from l i v r e where auteur =1) ; exists retourne vrai ou faux si la requête retourne des lignes ou pas. Olivier Caron September 14, 2016 51/63

Sous-requêtes corrélatives Requête et sous-requête sont liées Exemple : Liste des auteurs n ayant pas écrit de livres select num a, nom from auteur where not exists ( select from l i v r e where auteur=auteur. num a ) ; Note : La requête supérieure fournit une à une les valeurs de auteur.num a à la requête inférieure. Olivier Caron September 14, 2016 52/63

Expression d une division (1/3) Pas de mot-clé divide Olivier Caron September 14, 2016 53/63

Expression d une division (1/3) Pas de mot-clé divide Une division traduit un pour tous/quel que soit Olivier Caron September 14, 2016 53/63

Expression d une division (1/3) Pas de mot-clé divide Une division traduit un pour tous/quel que soit Exemple : on veut connaître les utilisateurs qui ont emprunté tous les livres Olivier Caron September 14, 2016 53/63

Expression d une division (1/3) Pas de mot-clé divide Une division traduit un pour tous/quel que soit Exemple : on veut connaître les utilisateurs qui ont emprunté tous les livres Un quel que soit en logique du premier ordre équivaut à 2 non ( not exists en SQL). Olivier Caron September 14, 2016 53/63

Expression d une division (1/3) Pas de mot-clé divide Une division traduit un pour tous/quel que soit Exemple : on veut connaître les utilisateurs qui ont emprunté tous les livres Un quel que soit en logique du premier ordre équivaut à 2 non ( not exists en SQL). En langage naturel, la requête devient : les utilisateurs pour lesquels il n existe pas de livres, pour lesquels il n existe pas de lien avec ces utilisateurs Olivier Caron September 14, 2016 53/63

Expression d une division (2/3) L expression d une division applique toujours le même schéma :. select A1 from R ce que l on veut en s o r t i e : where not exists select A2 from S ce par quoi on d i v i s e : where not exists select from Z expressions des l i e n s where Z. E1=R. A1 and Z. E2=S. A2 Olivier Caron September 14, 2016 54/63

Expression d une division (3/3) Illustration : select from U t i l i s a t e u r u where not exists select from l i v r e l where not exists select from emprunte e where e. num u=u. num u and e. num l= l. num l Olivier Caron September 14, 2016 55/63

Alias de table Possibilité de donner un nom de variable à une table Olivier Caron September 14, 2016 56/63

Alias de table Possibilité de donner un nom de variable à une table Syntaxe : FROM nom table tres long [ AS ] nom alias Olivier Caron September 14, 2016 56/63

Alias de table Possibilité de donner un nom de variable à une table Syntaxe : FROM nom table tres long [ AS ] nom alias Permet aussi d exprimer des sous-requêtes : Syntaxe : FROM (select...) as nom alias Olivier Caron September 14, 2016 56/63

Mais aussi... Tester les valeurs nulles des colonnes (syntaxe : is null ou is not null). Stockage d une requête dans des tables select... into table newtable from... Insertion de plusieurs lignes insert into table nomtable select... Olivier Caron September 14, 2016 57/63

En résumé A la fois simple (pour une grande majorité de requêtes) et compliqué Olivier Caron September 14, 2016 58/63

En résumé A la fois simple (pour une grande majorité de requêtes) et compliqué Répond à la majorité des requêtes Olivier Caron September 14, 2016 58/63

En résumé A la fois simple (pour une grande majorité de requêtes) et compliqué Répond à la majorité des requêtes Langage en constante évolution Olivier Caron September 14, 2016 58/63

En résumé A la fois simple (pour une grande majorité de requêtes) et compliqué Répond à la majorité des requêtes Langage en constante évolution Le langage peut être très puissant (requêtes corrélatives) Olivier Caron September 14, 2016 58/63

En résumé A la fois simple (pour une grande majorité de requêtes) et compliqué Répond à la majorité des requêtes Langage en constante évolution Le langage peut être très puissant (requêtes corrélatives) La puissance est au détriment de la complexité Olivier Caron September 14, 2016 58/63

En résumé A la fois simple (pour une grande majorité de requêtes) et compliqué Répond à la majorité des requêtes Langage en constante évolution Le langage peut être très puissant (requêtes corrélatives) La puissance est au détriment de la complexité Une solution : le concept de vue Olivier Caron September 14, 2016 58/63

Les vues Indépendance logique des données Olivier Caron September 14, 2016 59/63

Les vues Indépendance logique des données Tables virtuelles issues de plusieurs tables Olivier Caron September 14, 2016 59/63

Les vues Indépendance logique des données Tables virtuelles issues de plusieurs tables La vue n est pas enregistrée physiquement Olivier Caron September 14, 2016 59/63

Les vues Indépendance logique des données Tables virtuelles issues de plusieurs tables La vue n est pas enregistrée physiquement A l exécution d une requête portant sur une vue, une opération de reconstitution de la vue est effectuée Olivier Caron September 14, 2016 59/63

Les vues Indépendance logique des données Tables virtuelles issues de plusieurs tables La vue n est pas enregistrée physiquement A l exécution d une requête portant sur une vue, une opération de reconstitution de la vue est effectuée Une vue est considérée comme une table pour les utilisateurs Olivier Caron September 14, 2016 59/63

Création d une vue Syntaxe : CREATE VIEW view AS SELECT query Suivant les SGBD, il existe certaines restrictions sur la définition de la vue (ex: ORDER BY) Olivier Caron September 14, 2016 60/63

Un exemple Création d une vue donnant la liste de tous les livres dont le prix est supérieur au prix moyen. CREATE VIEW prix sup moyen AS SELECT n l i v r e, t i t r e, p r i x FROM LIVRE WHERE p r i x > (SELECT avg ( p r i x ) FROM l i v r e ) ; Olivier Caron September 14, 2016 61/63

Utilisation de la vue Se comporte comme une table : select t i t r e, p r i x from prix sup moyen order by t i t r e Suppression d une vue : drop view prix_sup_moyen ; mise à jour possible dans certains cas (Oracle) Olivier Caron September 14, 2016 62/63

Et QBE Utilisé pour les SGBD simples Olivier Caron September 14, 2016 63/63

Et QBE Utilisé pour les SGBD simples Langage graphique, pas de syntaxe à retenir Olivier Caron September 14, 2016 63/63

Et QBE Utilisé pour les SGBD simples Langage graphique, pas de syntaxe à retenir Permet de répondre aux requêtes simples (selection, projection, jointure) Olivier Caron September 14, 2016 63/63

Et QBE Utilisé pour les SGBD simples Langage graphique, pas de syntaxe à retenir Permet de répondre aux requêtes simples (selection, projection, jointure) Ne dispose pas de la puissance de SQL Olivier Caron September 14, 2016 63/63